From f8051ea8c9e147f8200da735807999275a7c6044 Mon Sep 17 00:00:00 2001 From: Gary Gan Date: Thu, 23 Apr 2026 21:48:04 +0800 Subject: [PATCH] =?UTF-8?q?v0.1=20=E5=85=AC=E5=BC=80=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot --- README.md | 7 + cmd/tokenctl/main.go | 44 +++- internal/config/config.go | 3 + internal/db/store.go | 40 ++- main.go | 537 +++++++++++++++++++++++++++++++++----- webicon.png | Bin 0 -> 51685 bytes 6 files changed, 561 insertions(+), 70 deletions(-) create mode 100644 webicon.png diff --git a/README.md b/README.md index bc238f3..bfcac8d 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,10 @@ curl -L \ token 无效、已禁用、已过期或使用次数耗尽:返回 403。 +## Web 首页 + +访问根路径 `/` 会返回一个简单的项目介绍页,包含:GitHub 链接输入框、Hugs-Proxy Token 输入框、以及“下载”按钮(表单 POST 到 `/download`)。 + ## tokenctl 用法 ```text @@ -62,6 +66,7 @@ tokenctl issue-token --user [--expires <7d|30d|RFC3339>] [--uses ] tokenctl disable-token --token [--db ] tokenctl list-users [--db ] tokenctl list-tokens [--db ] +tokenctl list-usage [--limit ] [--db ] ``` 示例: @@ -69,6 +74,7 @@ tokenctl list-tokens [--db ] ```bash go run ./cmd/tokenctl list-users go run ./cmd/tokenctl list-tokens +go run ./cmd/tokenctl list-usage --limit 100 go run ./cmd/tokenctl issue-token --user alice --uses 5 go run ./cmd/tokenctl disable-token --token ``` @@ -82,6 +88,7 @@ go run ./cmd/tokenctl disable-token --token - HUGS_PROXY_DB_PATH:SQLite 文件路径,默认 ./hugs_proxy.db - HUGS_PROXY_DEFAULT_TOKEN_TTL:默认 token 有效期,默认 30d - HUGS_PROXY_DB_BUSY_TIMEOUT_MS:SQLite busy_timeout,默认 5000 +- HUGS_PROXY_GITEA_REPO_URL:Web 首页底部“我的 Gitea 仓库”跳转地址 说明: diff --git a/cmd/tokenctl/main.go b/cmd/tokenctl/main.go index e0055db..378aba4 100644 --- a/cmd/tokenctl/main.go +++ b/cmd/tokenctl/main.go @@ -33,6 +33,8 @@ func main() { handleListUsers(cfg, os.Args[2:]) case "list-tokens": handleListTokens(cfg, os.Args[2:]) + case "list-usage": + handleListUsage(cfg, os.Args[2:]) default: printUsage() os.Exit(1) @@ -160,7 +162,44 @@ func handleListTokens(cfg config.Config, args []string) { if t.MaxUses == 0 { maxUsesDisplay = "unlimited" } - fmt.Printf("%d\t%s\t%t\t%d/%s\t%s\t%s\t%s\n", t.ID, t.Username, t.Disabled, t.UsedCount, maxUsesDisplay, t.ExpiresAt.Format(time.RFC3339), t.CreatedAt.Format(time.RFC3339), t.Token) + fmt.Printf("%d\t%s\t%t\t%d/%s\t%s\t%s\t%s\n", t.ID, t.Username, t.Disabled, t.UsedCount, maxUsesDisplay, t.ExpiresAt.Format(time.RFC3339), t.CreatedAt.Format(time.RFC3339), t.Token.Token) + } +} + +func handleListUsage(cfg config.Config, args []string) { + fs := flag.NewFlagSet("list-usage", flag.ExitOnError) + dbPath := fs.String("db", cfg.DBPath, "SQLite DB path") + limit := fs.Int("limit", 50, "max rows to show, <=0 means all") + _ = fs.Parse(args) + + store := openStore(*dbPath, cfg.BusyTimeoutMS) + defer store.Close() + + entries, err := store.ListUsageEntries(context.Background(), *limit) + if err != nil { + log.Fatal(err) + } + + fmt.Println("time\trequest_ip\tuser_id\ttoken_id\thttp_status\tsuccess\terror_reason\toriginal_url") + for _, e := range entries { + userID := "-" + tokenID := "-" + if e.UserID.Valid { + userID = fmt.Sprintf("%d", e.UserID.Int64) + } + if e.TokenID.Valid { + tokenID = fmt.Sprintf("%d", e.TokenID.Int64) + } + fmt.Printf("%s\t%s\t%s\t%s\t%d\t%t\t%s\t%s\n", + e.OccurredAt.Format(time.RFC3339), + e.RequestIP, + userID, + tokenID, + e.HTTPStatus, + e.Success, + e.ErrorReason, + e.OriginalURL, + ) } } @@ -194,5 +233,6 @@ func printUsage() { tokenctl issue-token --user [--expires <7d|30d|RFC3339>] [--uses ] [--db ] tokenctl disable-token --token [--db ] tokenctl list-users [--db ] - tokenctl list-tokens [--db ]`) + tokenctl list-tokens [--db ] + tokenctl list-usage [--limit ] [--db ]`) } diff --git a/internal/config/config.go b/internal/config/config.go index d9a9045..d920d54 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -19,6 +19,7 @@ type Config struct { Host string Port string DBPath string + GiteaRepoURL string DefaultTokenTTL time.Duration BusyTimeoutMS int } @@ -27,6 +28,7 @@ func Load() Config { host := getenvOrDefault("HUGS_PROXY_HOST", defaultHost) port := getenvOrDefault("HUGS_PROXY_PORT", defaultPort) dbPath := getenvOrDefault("HUGS_PROXY_DB_PATH", defaultDBPath) + giteaRepoURL := getenvOrDefault("HUGS_PROXY_GITEA_REPO_URL", "https://gitea.gangary.cn/gary/Hugs-Proxy") ttlRaw := getenvOrDefault("HUGS_PROXY_DEFAULT_TOKEN_TTL", defaultTokenTTLString) busyTimeout := getenvIntOrDefault("HUGS_PROXY_DB_BUSY_TIMEOUT_MS", defaultBusyTimeoutMilli) @@ -39,6 +41,7 @@ func Load() Config { Host: host, Port: port, DBPath: dbPath, + GiteaRepoURL: giteaRepoURL, DefaultTokenTTL: ttl, BusyTimeoutMS: busyTimeout, } diff --git a/internal/db/store.go b/internal/db/store.go index 2582513..919a065 100644 --- a/internal/db/store.go +++ b/internal/db/store.go @@ -363,7 +363,7 @@ func (s *Store) ListTokens(ctx context.Context) ([]TokenWithUser, error) { var expiresAt string var disabledAt sql.NullString var disabledInt int - if err := rows.Scan(&t.ID, &t.UserID, &t.Token, &createdAt, &expiresAt, &disabledInt, &disabledAt, &t.MaxUses, &t.UsedCount, &t.Username); err != nil { + if err := rows.Scan(&t.ID, &t.UserID, &t.Token.Token, &createdAt, &expiresAt, &disabledInt, &disabledAt, &t.MaxUses, &t.UsedCount, &t.Username); err != nil { return nil, err } ct, err := time.Parse(timeFormat, createdAt) @@ -392,6 +392,44 @@ func (s *Store) ListTokens(ctx context.Context) ([]TokenWithUser, error) { return out, nil } +func (s *Store) ListUsageEntries(ctx context.Context, limit int) ([]UsageEntry, error) { + query := `SELECT created_at, request_ip, user_id, token_id, original_url, http_status, success, error_reason + FROM token_usage + ORDER BY id DESC` + args := []any{} + if limit > 0 { + query += ` LIMIT ?` + args = append(args, limit) + } + + rows, err := s.db.QueryContext(ctx, query, args...) + if err != nil { + return nil, err + } + defer rows.Close() + + var out []UsageEntry + for rows.Next() { + var e UsageEntry + var createdAt string + var successInt int + if err := rows.Scan(&createdAt, &e.RequestIP, &e.UserID, &e.TokenID, &e.OriginalURL, &e.HTTPStatus, &successInt, &e.ErrorReason); err != nil { + return nil, err + } + parsed, err := time.Parse(timeFormat, createdAt) + if err != nil { + return nil, err + } + e.OccurredAt = parsed + e.Success = successInt == 1 + out = append(out, e) + } + if err := rows.Err(); err != nil { + return nil, err + } + return out, nil +} + func (s *Store) RecordUsageAndMaybeIncrement(ctx context.Context, entry UsageEntry, increment bool) error { if entry.OccurredAt.IsZero() { entry.OccurredAt = time.Now().UTC() diff --git a/main.go b/main.go index c0f8458..124f587 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "errors" "fmt" "io" "log" @@ -52,6 +53,242 @@ var ( auditor *audit.Logger ) +const landingPageHTML = ` + + + + + Hugs-Proxy + + + + +
+
+
+
+ +
+

Hugs-Proxy

+

轻量的学术资源加速反向代理:支持常见 GitHub/Raw/Gist 下载格式,并带 SQLite 鉴权与访问审计。

+
+
+
    +
  • 把目标 URL 放在路径里即可加速:https://github.com/...
  • +
  • Bearer Token 鉴权与使用次数控制
  • +
  • 重定向 Location 改写,尽量全程走代理
  • +
  • 大文件保护(>1GB 自动 302 回源)
  • +
+
+ +
+

加速下载

+
+
+ + +
+
+ + +
+ +

提示:token 通过表单 POST 发送,不会出现在地址栏。也可使用 curl:` + "\n" + `curl -L -H \"Authorization: Bearer <TOKEN>\" \"https://hugs.you/https://github.com/...\"

+
+
+
+ + +
+ + +` + func init() { // 1. 初始化列表 whiteList = parseList(whiteListStr) @@ -79,7 +316,23 @@ func main() { base := http.HandlerFunc(routeHandler) protected := auth.Middleware(store, auditAuthFailure, base) - http.Handle("/", protected) + root := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch { + case r.URL.Path == "/" && (r.Method == http.MethodGet || r.Method == http.MethodHead): + serveLandingPage(w, r, cfg) + return + case r.URL.Path == "/favicon.ico" || r.URL.Path == "/webicon.png": + serveWebIcon(w, r) + return + case r.URL.Path == "/download": + downloadHandler(w, r) + return + default: + protected.ServeHTTP(w, r) + return + } + }) + http.Handle("/", root) addr := fmt.Sprintf("%s:%s", cfg.Host, cfg.Port) log.Printf("服务器启动成功,正在监听 %s", addr) @@ -88,6 +341,217 @@ func main() { } } +func serveWebIcon(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, "./webicon.png") +} + +func serveLandingPage(w http.ResponseWriter, r *http.Request, cfg config.Config) { + w.Header().Set("Content-Type", "text/html; charset=utf-8") + page := strings.ReplaceAll(landingPageHTML, "{{GITEA_REPO_URL}}", htmlAttrEscape(cfg.GiteaRepoURL)) + if r.Method == http.MethodHead { + w.WriteHeader(http.StatusOK) + return + } + _, _ = io.WriteString(w, page) +} + +func downloadHandler(w http.ResponseWriter, r *http.Request) { + // 为了避免 token 出现在 URL,下载入口仅支持表单 POST。 + if r.Method != http.MethodPost { + w.Header().Set("Allow", http.MethodPost) + http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) + return + } + + // ParseForm 会读取 body(application/x-www-form-urlencoded / multipart/form-data)。 + if err := r.ParseForm(); err != nil { + http.Error(w, "Bad Request", http.StatusBadRequest) + return + } + + urlInput := strings.TrimSpace(r.FormValue("url")) + tokenValue := strings.TrimSpace(r.FormValue("token")) + if tokenValue == "" { + auditRequestFailure(r, http.StatusUnauthorized, "missing_token", 0, 0, urlInput) + http.Error(w, "Missing token.", http.StatusUnauthorized) + return + } + + // 先校验并消耗一次 token。 + tok, err := store.ValidateAndConsumeToken(r.Context(), tokenValue) + if err != nil { + status, reason := classifyTokenError(err) + + var userID int64 + var tokenID int64 + if !errors.Is(err, db.ErrNotFound) { + if t, getErr := store.GetToken(r.Context(), tokenValue); getErr == nil { + userID = t.UserID + tokenID = t.ID + } + } + + auditRequestFailure(r, status, reason, userID, tokenID, urlInput) + http.Error(w, http.StatusText(status), status) + return + } + + recorder := newStatusRecorder(w) + normalizedURL := urlInput + success := false + errorReason := "" + + defer func() { + statusCode := recorder.StatusCode() + if statusCode >= 200 && statusCode < 400 { + success = true + } + if err := auditor.Log(r.Context(), audit.Entry{ + RequestIP: clientIP(r), + UserID: tok.UserID, + HasUser: true, + TokenID: tok.ID, + HasToken: true, + OriginalURL: normalizedURL, + HTTPStatus: statusCode, + Success: success, + ErrorReason: errorReason, + CountAsSuccess: success, + }); err != nil { + log.Printf("audit log failed: %v", err) + } + }() + + if urlInput == "" { + errorReason = "missing_url" + http.Error(recorder, "Missing url.", http.StatusBadRequest) + return + } + + u, prepErr := prepareTargetURL(urlInput) + if prepErr != nil { + errorReason = prepErr.Reason + http.Error(recorder, prepErr.Message, prepErr.StatusCode) + return + } + normalizedURL = u + + // 表单是 POST,但下载应当总是 GET。 + r2 := r.Clone(r.Context()) + r2.Method = http.MethodGet + r2.Body = nil + proxy(recorder, r2, u) +} + +func classifyTokenError(err error) (int, string) { + switch { + case errors.Is(err, db.ErrNotFound): + return http.StatusForbidden, "invalid_token" + case errors.Is(err, db.ErrTokenDisabled): + return http.StatusForbidden, "token_disabled" + case errors.Is(err, db.ErrTokenExpired): + return http.StatusForbidden, "token_expired" + case errors.Is(err, db.ErrTokenExhausted): + return http.StatusForbidden, "token_exhausted" + default: + return http.StatusInternalServerError, "token_lookup_error" + } +} + +func auditRequestFailure(r *http.Request, statusCode int, reason string, userID int64, tokenID int64, originalURL string) { + entry := audit.Entry{ + RequestIP: clientIP(r), + OriginalURL: strings.TrimSpace(originalURL), + HTTPStatus: statusCode, + Success: false, + ErrorReason: reason, + CountAsSuccess: false, + } + if entry.OriginalURL == "" { + entry.OriginalURL = strings.TrimPrefix(r.URL.RequestURI(), "/") + } + if userID > 0 { + entry.UserID = userID + entry.HasUser = true + } + if tokenID > 0 { + entry.TokenID = tokenID + entry.HasToken = true + } + if err := auditor.Log(context.Background(), entry); err != nil { + log.Printf("audit failure log failed: %v", err) + } +} + +func htmlAttrEscape(s string) string { + // 只用于 attribute:非常轻量的转义,避免引入额外依赖。 + // 允许 http(s) URL;其他字符做最小替换。 + s = strings.ReplaceAll(s, "&", "&") + s = strings.ReplaceAll(s, "\"", """) + s = strings.ReplaceAll(s, "<", "<") + s = strings.ReplaceAll(s, ">", ">") + return s +} + +type targetPrepareError struct { + StatusCode int + Reason string + Message string +} + +func prepareTargetURL(raw string) (string, *targetPrepareError) { + u := strings.TrimSpace(raw) + if u == "" { + return "", &targetPrepareError{StatusCode: http.StatusBadRequest, Reason: "missing_url", Message: "Missing url."} + } + + if strings.HasPrefix(u, "https:/") && !strings.HasPrefix(u, "https://") { + u = "https://" + strings.TrimPrefix(u, "https:/") + } else if strings.HasPrefix(u, "http:/") && !strings.HasPrefix(u, "http://") { + u = "http://" + strings.TrimPrefix(u, "http:/") + } + + if !strings.HasPrefix(u, "http") { + u = "https://" + u + } + + m := checkURL(u) + if m == nil { + return "", &targetPrepareError{StatusCode: http.StatusForbidden, Reason: "invalid_input", Message: "Invalid input."} + } + + if len(whiteList) > 0 { + allowed := false + for _, i := range whiteList { + if matchRule(m, i) { + allowed = true + break + } + } + if !allowed { + return "", &targetPrepareError{StatusCode: http.StatusForbidden, Reason: "forbidden_by_white_list", Message: "Forbidden by white list."} + } + } + + for _, i := range blackList { + if matchRule(m, i) { + return "", &targetPrepareError{StatusCode: http.StatusForbidden, Reason: "forbidden_by_black_list", Message: "Forbidden by black list."} + } + } + + // 将网页浏览的blob链接统一替换为raw下载链接 + if exp2.MatchString(u) { + u = strings.Replace(u, "/blob/", "/raw/", 1) + } + + parsedURL, err := url.Parse(u) + if err == nil { + u = parsedURL.String() + } + + return u, nil +} + func routeHandler(w http.ResponseWriter, r *http.Request) { authInfo, ok := auth.FromContext(r.Context()) if !ok { @@ -122,57 +586,14 @@ func routeHandler(w http.ResponseWriter, r *http.Request) { } }() - u := originalInput - if strings.HasPrefix(u, "https:/") && !strings.HasPrefix(u, "https://") { - u = "https://" + strings.TrimPrefix(u, "https:/") - } else if strings.HasPrefix(u, "http:/") && !strings.HasPrefix(u, "http://") { - u = "http://" + strings.TrimPrefix(u, "http:/") - } - - if !strings.HasPrefix(u, "http") { - u = "https://" + u - } - - m := checkURL(u) - if m == nil { - errorReason = "invalid_input" - http.Error(recorder, "Invalid input.", http.StatusForbidden) + u, prepErr := prepareTargetURL(originalInput) + if prepErr != nil { + errorReason = prepErr.Reason + http.Error(recorder, prepErr.Message, prepErr.StatusCode) return } - if len(whiteList) > 0 { - allowed := false - for _, i := range whiteList { - if matchRule(m, i) { - allowed = true - break - } - } - if !allowed { - errorReason = "forbidden_by_white_list" - http.Error(recorder, "Forbidden by white list.", http.StatusForbidden) - return - } - } - - for _, i := range blackList { - if matchRule(m, i) { - errorReason = "forbidden_by_black_list" - http.Error(recorder, "Forbidden by black list.", http.StatusForbidden) - return - } - } - - // 将网页浏览的blob链接统一替换为raw下载链接 - if exp2.MatchString(u) { - u = strings.Replace(u, "/blob/", "/raw/", 1) - } - // 发起代理请求 - parsedURL, err := url.Parse(u) - if err == nil { - u = parsedURL.String() - } normalizedURL = u proxy(recorder, r, u) } @@ -236,25 +657,7 @@ func proxy(w http.ResponseWriter, r *http.Request, targetURL string) { } func auditAuthFailure(r *http.Request, token string, statusCode int, reason string, userID int64, tokenID int64) { - entry := audit.Entry{ - RequestIP: clientIP(r), - OriginalURL: strings.TrimPrefix(r.URL.RequestURI(), "/"), - HTTPStatus: statusCode, - Success: false, - ErrorReason: reason, - CountAsSuccess: false, - } - if userID > 0 { - entry.UserID = userID - entry.HasUser = true - } - if tokenID > 0 { - entry.TokenID = tokenID - entry.HasToken = true - } - if err := auditor.Log(context.Background(), entry); err != nil { - log.Printf("auth failure audit log failed: %v", err) - } + auditRequestFailure(r, statusCode, reason, userID, tokenID, "") } func clientIP(r *http.Request) string { diff --git a/webicon.png b/webicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f4b5aeac8cab3927b0ffc831ede710802f51bb GIT binary patch literal 51685 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

MNZCcD_%W3^lso}wYf6a| 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

IUo{K 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 KT-G@yGywo|3oM%e literal 0 HcmV?d00001