50 lines
1.6 KiB
Go
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
|
|
}
|