2026-04-29 12:43:05 +08:00

50 lines
1.6 KiB
Go

// Package tencentim contains the server-side Tencent Cloud Chat integration boundary.
package tencentim
import (
"time"
"hyapp/pkg/tencentsig"
)
// UserSigConfig describes the stable inputs required by Tencent Cloud Chat UserSig.
type UserSigConfig struct {
// SDKAppID is the application ID assigned by Tencent Cloud Chat.
SDKAppID int64
// SecretKey is the application key; it must stay on backend services only.
SecretKey string
// TTL controls how long the generated UserSig remains valid.
TTL time.Duration
}
// UserSigResult is returned by gateway-service to authenticated Chat clients.
type UserSigResult struct {
// SDKAppID lets clients initialize the Tencent Cloud Chat SDK.
SDKAppID int64 `json:"sdk_app_id"`
// UserID is the Tencent Chat identifier; this project uses decimal user_id.
UserID string `json:"user_id"`
// UserSig is the signed credential passed to Tencent Cloud Chat SDK login.
UserSig string `json:"user_sig"`
// ExpireAtMS lets clients refresh the credential before Tencent rejects login.
ExpireAtMS int64 `json:"expire_at_ms"`
}
// GenerateUserSig signs a Tencent Cloud Chat UserSig through the shared Tencent signer.
func GenerateUserSig(cfg UserSigConfig, userID string, now time.Time) (UserSigResult, error) {
result, err := tencentsig.GenerateUserSig(tencentsig.Config{
SDKAppID: cfg.SDKAppID,
SecretKey: cfg.SecretKey,
TTL: cfg.TTL,
}, userID, now)
if err != nil {
return UserSigResult{}, err
}
return UserSigResult{
SDKAppID: result.SDKAppID,
UserID: result.UserID,
UserSig: result.UserSig,
ExpireAtMS: result.ExpireAtMS,
}, nil
}