chore: refresh gramsrv public release

This commit is contained in:
A 2026-06-30 14:37:43 +08:00
parent 75cebe8dbf
commit 70b6820474
1274 changed files with 378751 additions and 59919 deletions

View file

@ -0,0 +1,77 @@
package rpc
import (
"context"
"telesrv/internal/domain"
)
// authzFromCtx 从连接上下文组装一条待绑定的设备授权UserID 由业务层填充)。
func (r *Router) authzFromCtx(ctx context.Context) domain.Authorization {
id, _ := AuthKeyIDFrom(ctx)
a := domain.Authorization{AuthKeyID: id, Layer: LayerFrom(ctx)}
if ci, ok := ClientInfoFrom(ctx); ok {
a.DeviceModel = ci.DeviceModel
a.Platform = string(ci.ClientType())
a.SystemVersion = ci.SystemVersion
a.AppVersion = ci.AppVersion
a.APIID = ci.APIID
}
return a
}
// currentUserID 返回当前连接已登录的 user_id。
//
// 优先使用 active session 缓存;若新连接尚未绑定但 auth_key 已授权,则只在这里
// 查询一次授权表并回填 session避免各业务 service 每个 RPC 重复 authKey→userID。
func (r *Router) currentUserID(ctx context.Context) (int64, bool, error) {
if userID, ok := UserIDFrom(ctx); ok {
return userID, true, nil
}
if r.deps.Sessions != nil {
if sessionID, ok := SessionIDFrom(ctx); ok {
if scoped, ok := r.scopedSessions(); ok {
if rawAuthKeyID, ok := RawAuthKeyIDFrom(ctx); ok {
if userID, resolved := scoped.UserIDResolvedForAuthKey(rawAuthKeyID, sessionID); resolved {
if userID == 0 {
if authKeyID, ok := AuthKeyIDFrom(ctx); ok {
if cachedUserID, ok := r.positiveCachedAuthUser(authKeyID); ok {
scoped.BindUserForAuthKey(rawAuthKeyID, sessionID, cachedUserID)
r.announceSessionOnline(ctx, cachedUserID)
return cachedUserID, true, nil
}
}
}
return userID, userID != 0, nil
}
}
} else if userID, resolved := r.deps.Sessions.UserIDResolved(sessionID); resolved {
if userID == 0 {
if authKeyID, ok := AuthKeyIDFrom(ctx); ok {
if cachedUserID, ok := r.positiveCachedAuthUser(authKeyID); ok {
r.deps.Sessions.BindUser(sessionID, cachedUserID)
r.announceSessionOnline(ctx, cachedUserID)
return cachedUserID, true, nil
}
}
}
return userID, userID != 0, nil
}
}
}
if r.deps.Auth == nil {
return 0, false, nil
}
authKeyID, ok := AuthKeyIDFrom(ctx)
if !ok {
return 0, false, nil
}
userID, found, err := r.lookupAuthUser(ctx, authKeyID)
if err != nil || !found {
if err == nil && !found {
r.bindSessionUser(ctx, 0)
}
return 0, found, err
}
r.bindSessionUser(ctx, userID)
return userID, true, nil
}