79 lines
3.1 KiB
Go
79 lines
3.1 KiB
Go
package models
|
|
|
|
import "github.com/mayswind/ezbookkeeping/pkg/core"
|
|
|
|
// TokenMaxUserAgentLength represents the maximum size of user agent stored in database
|
|
const TokenMaxUserAgentLength = 255
|
|
|
|
// TokenRecord represents token data stored in database
|
|
type TokenRecord struct {
|
|
Uid int64 `xorm:"PK INDEX(IDX_token_record_uid_type_expired_time) INDEX(IDX_token_record_expired_time)"`
|
|
UserTokenId int64 `xorm:"PK"`
|
|
TokenType core.TokenType `xorm:"INDEX(IDX_token_record_uid_type_expired_time) TINYINT NOT NULL"`
|
|
Secret string `xorm:"VARCHAR(10) NOT NULL"`
|
|
UserAgent string `xorm:"VARCHAR(255)"`
|
|
Context string `xorm:"BLOB"`
|
|
CreatedUnixTime int64 `xorm:"PK"`
|
|
ExpiredUnixTime int64 `xorm:"INDEX(IDX_token_record_uid_type_expired_time) INDEX(IDX_token_record_expired_time)"`
|
|
LastSeenUnixTime int64
|
|
}
|
|
|
|
// OAuth2CallbackTokenContext represents the context data of oauth 2.0 callback token
|
|
type OAuth2CallbackTokenContext struct {
|
|
ExternalAuthType core.UserExternalAuthType `json:"externalAuthType"`
|
|
ExternalUsername string `json:"externalUsername"`
|
|
ExternalEmail string `json:"externalEmail"`
|
|
}
|
|
|
|
// TokenGenerateMCPRequest represents all parameters of mcp token generation request
|
|
type TokenGenerateMCPRequest struct {
|
|
Password string `json:"password" binding:"omitempty,min=6,max=128"`
|
|
}
|
|
|
|
// TokenRevokeRequest represents all parameters of token revoking request
|
|
type TokenRevokeRequest struct {
|
|
TokenId string `json:"tokenId" binding:"required,notBlank"`
|
|
}
|
|
|
|
// TokenGenerateMCPResponse represents all response parameters of generated mcp token
|
|
type TokenGenerateMCPResponse struct {
|
|
Token string `json:"token"`
|
|
MCPUrl string `json:"mcpUrl"`
|
|
}
|
|
|
|
// TokenRefreshResponse represents all response parameters of token refreshing
|
|
type TokenRefreshResponse struct {
|
|
NewToken string `json:"newToken,omitempty"`
|
|
OldTokenId string `json:"oldTokenId,omitempty"`
|
|
User *UserBasicInfo `json:"user"`
|
|
ApplicationCloudSettings *ApplicationCloudSettingSlice `json:"applicationCloudSettings,omitempty"`
|
|
NotificationContent string `json:"notificationContent,omitempty"`
|
|
}
|
|
|
|
// TokenInfoResponse represents a view-object of token
|
|
type TokenInfoResponse struct {
|
|
TokenId string `json:"tokenId"`
|
|
TokenType core.TokenType `json:"tokenType"`
|
|
UserAgent string `json:"userAgent"`
|
|
LastSeen int64 `json:"lastSeen"`
|
|
IsCurrent bool `json:"isCurrent"`
|
|
}
|
|
|
|
// TokenInfoResponseSlice represents the slice data structure of TokenInfoResponse
|
|
type TokenInfoResponseSlice []*TokenInfoResponse
|
|
|
|
// Len returns the count of items
|
|
func (a TokenInfoResponseSlice) Len() int {
|
|
return len(a)
|
|
}
|
|
|
|
// Swap swaps two items
|
|
func (a TokenInfoResponseSlice) Swap(i, j int) {
|
|
a[i], a[j] = a[j], a[i]
|
|
}
|
|
|
|
// Less reports whether the first item is less than the second one
|
|
func (a TokenInfoResponseSlice) Less(i, j int) bool {
|
|
return a[i].LastSeen > a[j].LastSeen
|
|
}
|