chore: refresh gramsrv public release
This commit is contained in:
parent
75cebe8dbf
commit
70b6820474
1274 changed files with 378751 additions and 59919 deletions
77
internal/rpc/convert_auth.go
Normal file
77
internal/rpc/convert_auth.go
Normal 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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue