Files
wonder 01ecdc8c23 feat: initialize project skeleton with Go backend, database, and config
- Go module with standard library + gorilla/sessions + mysql driver
- Config: env-based configuration with .env file support
- Database: MySQL connection with auto-migration for 6 tables
- Seed data: 12 system tags with options, 8 system snippets
- Auth: session cookie middleware
- Handlers: auth, tags, snippets, builder, claude, dashboard, suggestions, settings
- LLM: OpenAI-compatible client with 30s timeout
- Docker: Dockerfile + docker-compose.yml
- .env.example with all configuration options

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 14:58:15 +08:00

47 lines
976 B
Go

package auth
import (
"crypto/rand"
"encoding/hex"
"net/http"
"sync"
"github.com/gorilla/sessions"
)
var (
Store *sessions.CookieStore
mu sync.Mutex
)
func Init(secret string) {
Store = sessions.NewCookieStore([]byte(secret))
Store.Options = &sessions.Options{
Path: "/",
MaxAge: 86400 * 7, // 7 days
HttpOnly: true,
SameSite: http.SameSiteLaxMode,
}
}
func GenerateToken() string {
b := make([]byte, 32)
rand.Read(b)
return hex.EncodeToString(b)
}
// AuthMiddleware checks if the user is authenticated
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
session, _ := Store.Get(r, "session")
auth, ok := session.Values["authenticated"].(bool)
if !ok || !auth {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
w.Write([]byte(`{"code":401,"message":"未登录"}`))
return
}
next.ServeHTTP(w, r)
})
}