feat: add telescope style
This commit is contained in:
+26
-3
@@ -6,6 +6,7 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
@@ -27,9 +28,6 @@ func main() {
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, nil)))
|
||||
cfg := config.Load()
|
||||
|
||||
// تلسکوپ: بازرسِ درونبرنامهایِ درخواستها (رینگبافرِ حافظه، بدونِ وابستگی).
|
||||
scope := telescope.New(cfg.TelescopeSize)
|
||||
|
||||
st, err := store.Open(cfg.DBPath)
|
||||
if err != nil {
|
||||
slog.Error("open db", "err", err)
|
||||
@@ -44,6 +42,31 @@ func main() {
|
||||
jwt := auth.NewJWT(cfg.JWTSecret, cfg.JWTTTL)
|
||||
authH := auth.NewHandler(users, otp, kave, jwt, cfg.AdminMobile, cfg.AdminOTP)
|
||||
|
||||
// تلسکوپ: بازرسِ درونبرنامهایِ درخواستها. شناسهی کاربر را ارزان (فقط HMAC)
|
||||
// از توکن درمیآورد و شمارهی موبایل را در زمانِ نمایش (با DB) resolve میکند.
|
||||
scope := telescope.New(cfg.TelescopeSize,
|
||||
func(r *http.Request) int64 {
|
||||
tok := strings.TrimPrefix(r.Header.Get("Authorization"), "Bearer ")
|
||||
if tok == "" || tok == r.Header.Get("Authorization") {
|
||||
tok = r.URL.Query().Get("token")
|
||||
}
|
||||
if tok == "" {
|
||||
return 0
|
||||
}
|
||||
id, err := jwt.Verify(tok)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return id
|
||||
},
|
||||
func(id int64) string {
|
||||
if u, err := users.FindByID(context.Background(), id); err == nil {
|
||||
return u.Mobile
|
||||
}
|
||||
return ""
|
||||
},
|
||||
)
|
||||
|
||||
// اقتصاد و فروشگاه. تأییدِ خرید: مایکت (X-Access-Token) و کافهبازار (امضای RSA).
|
||||
// اگر کلیدها تنظیم نشده باشند، به تأییدکنندهی توسعه برمیگردیم (dev fallback).
|
||||
iap := economy.StoreRouter{DevFallback: true}
|
||||
|
||||
Reference in New Issue
Block a user