Files
honoka-chan/internal/middleware/common.go
T
YumeMichi 4b2c005222 Force relogin after webui data changes
- Add a force_relogin flag to user_pref
- Return 404 for main.php requests when the user must reauthenticate
- Clear the relogin flag after successful client login
- Mark users for relogin after webui card import, accessory changes, and profile updates

Signed-off-by: Sean Du <do4suki@gmail.com>
2026-06-13 11:29:57 +08:00

65 lines
1.5 KiB
Go

package middleware
import (
"fmt"
"honoka-chan/internal/session"
"net/http"
"net/url"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
func Common(ctx *gin.Context) {
reqData := ""
if form, err := ctx.MultipartForm(); err == nil {
if v, ok := form.Value["request_data"]; ok && len(v) > 0 {
reqData = v[0]
}
}
if reqData == "" {
reqData = ctx.PostForm("request_data")
}
ctx.Set("request_data", reqData)
uid := ctx.GetHeader("User-ID")
ctx.Set("userid", uid)
ss := session.Attach(ctx)
ctx.Set("session", ss)
if ctx.Request.URL.Path != "/login/authkey" && ctx.Request.URL.Path != "/login/login" {
if ss.UserPref.ForceRelogin {
ctx.AbortWithStatus(http.StatusNotFound)
return
}
}
authorize := ctx.GetHeader("Authorize")
params, err := url.ParseQuery(authorize)
if err != nil {
ctx.AbortWithStatus(http.StatusNotFound)
return
}
nonce, _ := strconv.Atoi(params.Get("nonce"))
nonce++
ctx.Set("nonce", nonce)
token := params.Get("token")
ctx.Set("token", token)
ctx.Header("user_id", uid)
ctx.Header("authorize", fmt.Sprintf("consumerKey=lovelive_test&timeStamp=%d&version=1.1&token=%s&nonce=%d&user_id=%s&requestTimeStamp=%d", time.Now().Unix(), token, nonce, uid, time.Now().Unix()))
ctx.Header("Content-Type", "application/json; charset=utf-8")
ctx.Header("X-Powered-By", "KLab Native APP Platform")
ctx.Header("server_version", "20120129")
ctx.Header("Server-Version", "97.4.6")
ctx.Header("version_up", "0")
ctx.Header("status_code", "200")
ctx.Next()
}