feat: add telescope style

This commit is contained in:
2026-07-05 21:55:12 +03:30
parent ac6e8695b1
commit a72cf582d0
4 changed files with 250 additions and 69 deletions
+26 -3
View File
@@ -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}