chore: initial commit of ai site platform

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
whm
2026-07-31 10:19:22 +08:00
commit 6366859bb3
222 changed files with 47313 additions and 0 deletions

81
gateway/gateway.go Normal file
View File

@@ -0,0 +1,81 @@
package main
import (
"flag"
"fmt"
"log"
"net/http"
"aijianzhan/gateway/internal/config"
"aijianzhan/gateway/internal/jwtmw"
"aijianzhan/gateway/internal/proxy"
"aijianzhan/gateway/internal/ratelimit"
"github.com/zeromicro/go-zero/core/conf"
)
var configFile = flag.String("f", "etc/gateway.yaml", "config file")
func main() {
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
dir, err := proxy.New(c.PlatformURL, c.AIURL, c.ProxyTimeoutSec)
if err != nil {
log.Fatal(err)
}
limiter := ratelimit.New(c.RateLimitPerMin)
h := limiter.Middleware(dir.Handler())
if c.JWTEnable {
secret := c.JWTSecret
if secret == "" {
secret = "dev-only-change-me"
}
public := []string{
"/gateway/health",
"/api/v1/auth/login",
"/api/v1/auth/register",
"/api/v1/auth/token",
"/api/v1/auth/agent/register",
"/api/v1/meta/",
"/api/v1/public/",
"/ai/",
"/ai",
}
h = jwtmw.Middleware(secret, public)(h)
}
mux := http.NewServeMux()
mux.HandleFunc("/gateway/health", dir.Health)
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if c.CorsEnable {
origin := r.Header.Get("Origin")
if origin == "" {
origin = "*"
}
w.Header().Set("Access-Control-Allow-Origin", origin)
w.Header().Set("Access-Control-Allow-Headers", "Authorization, Content-Type, X-Request-Id, X-Tenant-Id, X-User-Id, X-Role")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS")
w.Header().Set("Access-Control-Allow-Credentials", "true")
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusNoContent)
return
}
}
if r.URL.Path == "/gateway/health" {
dir.Health(w, r)
return
}
h(w, r)
})
addr := fmt.Sprintf("%s:%d", c.Host, c.Port)
limitDesc := fmt.Sprintf("%d/min (loopback exempt)", c.RateLimitPerMin)
if c.RateLimitPerMin <= 0 {
limitDesc = "disabled"
}
fmt.Printf("gateway listening %s jwt=%v rate=%s → platform=%s ai=%s\n", addr, c.JWTEnable, limitDesc, c.PlatformURL, c.AIURL)
log.Fatal(http.ListenAndServe(addr, mux))
}