Smail/server/models/security_credentials.go

60 lines
3.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package models
import "time"
// SecurityQuestion 保存密保问题和 Argon2id 答案哈希,不保存答案明文。
type SecurityQuestion struct {
ID int `xorm:"id bigint unsigned not null pk autoincr" json:"-"`
UserID int `xorm:"user_id bigint not null unique" json:"-"`
Question string `xorm:"question varchar(255) notnull" json:"question"`
AnswerHash string `xorm:"answer_hash varchar(255) notnull" json:"-"`
Version int `xorm:"version int notnull default(1)" json:"-"`
CreatedAt time.Time `xorm:"created_at datetime created notnull" json:"created_at"`
UpdatedAt time.Time `xorm:"updated_at datetime updated notnull" json:"updated_at"`
}
func (SecurityQuestion) TableName() string { return "security_question" }
// RecoveryCode 保存一次性离线恢复码的 Argon2id 哈希,UsedAt 非空表示已经消费或撤销。
type RecoveryCode struct {
ID int `xorm:"id bigint unsigned not null pk autoincr" json:"-"`
UserID int `xorm:"user_id bigint not null index" json:"-"`
CodeHash string `xorm:"code_hash varchar(255) notnull" json:"-"`
CodeVersion int `xorm:"code_version int notnull default(1)" json:"-"`
UsedAt *time.Time `xorm:"used_at datetime null index" json:"-"`
CreatedAt time.Time `xorm:"created_at datetime created notnull index" json:"created_at"`
}
func (RecoveryCode) TableName() string { return "recovery_code" }
// WebAuthnCredential 保存 WebAuthn 公钥凭据的脱敏索引和加密数据。
// CredentialData 是由独立凭据密钥保护的序列化凭据,不允许保存明文公钥材料。
type WebAuthnCredential struct {
ID int `xorm:"id bigint unsigned not null pk autoincr" json:"-"`
UserID int `xorm:"user_id bigint not null index" json:"-"`
CredentialID string `xorm:"credential_id varchar(512) notnull unique" json:"-"`
CredentialData string `xorm:"credential_data text notnull" json:"-"`
DisplayName string `xorm:"display_name varchar(128) notnull" json:"display_name"`
Discoverable bool `xorm:"discoverable notnull default(0)" json:"discoverable"`
CreatedAt time.Time `xorm:"created_at datetime created notnull" json:"created_at"`
LastUsedAt *time.Time `xorm:"last_used_at datetime null" json:"last_used_at"`
RevokedAt *time.Time `xorm:"revoked_at datetime null index" json:"-"`
}
func (WebAuthnCredential) TableName() string { return "webauthn_credential" }
type TOTPAuthenticator struct {
ID int `xorm:"id bigint unsigned not null pk autoincr" json:"-"`
UserID int `xorm:"user_id bigint not null unique" json:"-"`
SecretCiphertext string `xorm:"secret_ciphertext text notnull" json:"-"`
CredentialVersion int `xorm:"credential_version int notnull default(1)" json:"-"`
Enabled bool `xorm:"enabled notnull default(1)" json:"enabled"`
ConfirmedAt *time.Time `xorm:"confirmed_at datetime null" json:"confirmed_at,omitempty"`
LastUsedStep int64 `xorm:"last_used_step bigint notnull default(0)" json:"-"`
CreatedAt time.Time `xorm:"created_at datetime created notnull" json:"created_at"`
UpdatedAt time.Time `xorm:"updated_at datetime updated notnull" json:"updated_at"`
RevokedAt *time.Time `xorm:"revoked_at datetime null index" json:"revoked_at,omitempty"`
}
func (TOTPAuthenticator) TableName() string { return "totp_authenticator" }