Documentation
¶
Index ¶
- Constants
- Variables
- func CleanupExpiredData(db *gorm.DB) error
- func MigrateAuthTables(db *gorm.DB) error
- func RepairDatabaseIntegrity(db *gorm.DB) error
- func ValidateDatabaseIntegrity(db *gorm.DB) []string
- type AccountLockout
- type AuditEvent
- type AuditLog
- type AuditService
- func (a *AuditService) CleanupOldAuditLogs(retentionDays int) error
- func (a *AuditService) GetHighRiskEvents(limit int) ([]AuditLog, error)
- func (a *AuditService) GetSecurityEventsAudit(userID uuid.UUID, limit int) ([]AuditLog, error)
- func (a *AuditService) GetSecurityMetrics() (*SecurityMetrics, error)
- func (a *AuditService) GetUserAuditLogs(userID uuid.UUID, limit int, offset int) ([]AuditLog, error)
- func (a *AuditService) LogEvent(userID *uuid.UUID, event AuditEvent, ipAddress, userAgent, details string, ...) error
- func (a *AuditService) LogEventWithSession(userID *uuid.UUID, sessionID *uuid.UUID, event AuditEvent, ...) error
- type AuthResponse
- type AuthService
- type BackupCode
- type Claims
- type DatabaseStats
- type EmailService
- type EmailTemplate
- type EmailVerificationService
- func (s *EmailVerificationService) CleanupExpiredTokens() error
- func (s *EmailVerificationService) CreateVerificationToken(userID uuid.UUID) (*EmailVerificationToken, error)
- func (s *EmailVerificationService) GetVerificationStatus(userID uuid.UUID) (bool, *EmailVerificationToken, error)
- func (s *EmailVerificationService) IsEmailVerified(userID uuid.UUID) (bool, error)
- func (s *EmailVerificationService) RevokeUserTokens(userID uuid.UUID) error
- func (s *EmailVerificationService) SendVerificationEmail(userID uuid.UUID) error
- func (s *EmailVerificationService) VerifyEmail(token string) error
- type EmailVerificationToken
- type GitHubProvider
- type GitLabProvider
- type GoogleProvider
- type JITProvisioningConfig
- type JWTManager
- type LDAPConnection
- type LDAPSearchResult
- type LDAPService
- type LDAPUserInfo
- type LoggingSMSProvider
- type LoginAttempt
- type LoginRequest
- type MFAService
- func (s *MFAService) CompleteWebAuthnRegistration(userID uuid.UUID, credentialName string, publicKeyBytes []byte, ...) error
- func (s *MFAService) DeleteWebAuthnCredential(userID uuid.UUID, credentialID string) error
- func (s *MFAService) DisableMFA(userID uuid.UUID) error
- func (s *MFAService) GetWebAuthnCredentials(userID uuid.UUID) ([]WebAuthnCredential, error)
- func (s *MFAService) InitiateWebAuthnRegistration(userID uuid.UUID, credentialName string) (*WebAuthnRegistrationResponse, error)
- func (s *MFAService) RegenerateBackupCodes(userID uuid.UUID) ([]string, error)
- func (s *MFAService) SendSMSCode(userID uuid.UUID, phoneNumber string) error
- func (s *MFAService) SetupTOTP(userID uuid.UUID, issuer, accountName string) (*MFASetupResponse, error)
- func (s *MFAService) VerifyMFACode(userID uuid.UUID, code string) (bool, error)
- func (s *MFAService) VerifyTOTP(userID uuid.UUID, secret, code string) (bool, error)
- type MFASetupRequest
- type MFASetupResponse
- type MFAVerifyRequest
- type MicrosoftProvider
- type MockEmailService
- type MockLDAPConnection
- type MockLDAPUser
- type OAuthAccount
- type OAuthProvider
- type OAuthService
- func (s *OAuthService) CleanupExpiredStates() error
- func (s *OAuthService) GenerateState() (string, error)
- func (s *OAuthService) GetLinkedAccounts(userID uuid.UUID) ([]OAuthAccount, error)
- func (s *OAuthService) GetProvider(name string) (OAuthProvider, error)
- func (s *OAuthService) HandleCallback(ctx context.Context, providerName, code, state, redirectURI string) (*AuthResponse, error)
- func (s *OAuthService) InitiateOAuth(provider, redirectURI string) (string, string, error)
- func (s *OAuthService) LinkAccount(userID uuid.UUID, provider string, userInfo *OAuthUserInfo, token *OAuthToken) error
- func (s *OAuthService) StoreState(state, provider string) error
- func (s *OAuthService) UnlinkAccount(userID uuid.UUID, provider string) error
- func (s *OAuthService) ValidateState(state, provider string) error
- type OAuthState
- type OAuthToken
- type OAuthUserInfo
- type OIDCClaims
- type OIDCDiscoveryDocument
- type OIDCProvider
- type OIDCService
- func (s *OIDCService) GenerateAuthURL(providerName, state string) (string, error)
- func (s *OIDCService) GetProvider(name string) (*OIDCProvider, error)
- func (s *OIDCService) HandleCallback(ctx context.Context, providerName, code, state string) (*AuthResponse, error)
- func (s *OIDCService) ProvisionUser(claims *OIDCClaims, config *JITProvisioningConfig) (*models.User, error)
- type OIDCTokenResponse
- type PasswordResetConfirmRequest
- type PasswordResetRequest
- type PasswordResetService
- func (s *PasswordResetService) CleanupExpiredTokens() error
- func (s *PasswordResetService) CreateResetToken(userID uuid.UUID) (*PasswordResetToken, error)
- func (s *PasswordResetService) RevokeUserTokens(userID uuid.UUID) error
- func (s *PasswordResetService) UseResetToken(token string, newPassword string) error
- func (s *PasswordResetService) ValidateResetToken(token string) (*PasswordResetToken, error)
- type PasswordResetToken
- type RateLimitConfig
- type RateLimiter
- type RegisterRequest
- type SAMLRequest
- type SAMLResponse
- type SAMLService
- type SAMLUserInfo
- type SMSProvider
- type SMSService
- type SMSVerificationCode
- type SMTPEmailService
- type SecurityEvent
- type SecurityMetrics
- type SecurityService
- func (s *SecurityService) CheckGeneralRateLimit(ipAddress string) bool
- func (s *SecurityService) CheckLoginRateLimit(ipAddress string) bool
- func (s *SecurityService) CheckMFARateLimit(ipAddress string) bool
- func (s *SecurityService) CheckPasswordResetRateLimit(ipAddress string) bool
- func (s *SecurityService) CheckRateLimit(email, ipAddress string, config RateLimitConfig) error
- func (s *SecurityService) CheckRegistrationRateLimit(ipAddress string) bool
- func (s *SecurityService) CleanupOldEvents(daysToKeep int) error
- func (s *SecurityService) GetSecurityEvents(userID uuid.UUID, limit int) ([]SecurityEvent, error)
- func (s *SecurityService) GetSuspiciousActivity(hoursBack int) ([]SecurityEvent, error)
- func (s *SecurityService) IsAccountLocked(email string, config RateLimitConfig) (bool, time.Time)
- func (s *SecurityService) RecordLoginAttempt(userID *uuid.UUID, email, ipAddress, userAgent string, success bool, ...) error
- func (s *SecurityService) RecordSecurityEvent(userID *uuid.UUID, eventType, ipAddress, userAgent, details, severity string) error
- func (s *SecurityService) RunPeriodicCleanup()
- func (s *SecurityService) ValidateIPAddress(ipStr string) error
- func (s *SecurityService) ValidatePasswordStrength(password string) []string
- type Session
- type SessionConfig
- type SessionService
- func (s *SessionService) CleanupExpiredSessions() error
- func (s *SessionService) CreateSession(userID uuid.UUID, ipAddress, userAgent string, rememberMe bool) (*Session, error)
- func (s *SessionService) DetectSuspiciousActivity(userID uuid.UUID, ipAddress string) (bool, error)
- func (s *SessionService) FlagSession(sessionID uuid.UUID, flag int) error
- func (s *SessionService) ForceLogoutAllDevices(userID uuid.UUID) error
- func (s *SessionService) GetDetailedUserSessions(userID uuid.UUID) ([]Session, error)
- func (s *SessionService) GetFlaggedSessions(userID uuid.UUID) ([]Session, error)
- func (s *SessionService) GetSessionStats() (*SessionStats, error)
- func (s *SessionService) GetUserSessions(userID uuid.UUID) ([]Session, error)
- func (s *SessionService) LimitUserSessions(userID uuid.UUID, maxSessions int) error
- func (s *SessionService) RefreshSession(refreshToken string) (*Session, error)
- func (s *SessionService) RevokeSession(refreshToken string) error
- func (s *SessionService) RevokeUserSessions(userID uuid.UUID) error
- func (s *SessionService) RunPeriodicCleanup() error
- func (s *SessionService) UpdateSessionActivity(refreshToken, ipAddress string) error
- func (s *SessionService) ValidateRefreshToken(refreshToken string) (*Session, error)
- func (s *SessionService) ValidateSessionWithIdleCheck(refreshToken string) (*Session, error)
- type SessionStats
- type TemplatedEmailService
- type TokenBlacklist
- type TokenBlacklistService
- func (s *TokenBlacklistService) BlacklistToken(token string, expiresAt time.Time) error
- func (s *TokenBlacklistService) BlacklistTokenWithDetails(token string, userID, blacklistedBy uuid.UUID, expiresAt time.Time, ...) error
- func (s *TokenBlacklistService) BlacklistUserTokens(userID uuid.UUID) error
- func (s *TokenBlacklistService) CleanupExpiredBlacklist() error
- func (s *TokenBlacklistService) GetBlacklistStats() (map[string]interface{}, error)
- func (s *TokenBlacklistService) GetBlacklistedTokensForUser(userID uuid.UUID) ([]TokenBlacklist, error)
- func (s *TokenBlacklistService) IsTokenBlacklisted(token string) (bool, error)
- func (s *TokenBlacklistService) RemoveFromBlacklist(token string) error
- func (s *TokenBlacklistService) RunPeriodicCleanup() error
- type WebAuthnCredential
- type WebAuthnLoginRequest
- type WebAuthnLoginResponse
- type WebAuthnRegistrationRequest
- type WebAuthnRegistrationResponse
Constants ¶
const ( EventLogin = "login" EventLoginFailed = "login_failed" EventPasswordReset = "password_reset" EventMFAEnabled = "mfa_enabled" EventMFADisabled = "mfa_disabled" EventAccountLocked = "account_locked" EventOAuthLogin = "oauth_login" )
Security event types
const ( SessionFlagNormal = 0 SessionFlagSuspicious = 1 << 0 SessionFlagCompromised = 1 << 1 SessionFlagLocationChange = 1 << 2 SessionFlagDeviceChange = 1 << 3 )
Session security flags
Variables ¶
var ( ErrLDAPNotConfigured = errors.New("LDAP not configured") ErrLDAPConnection = errors.New("LDAP connection failed") ErrLDAPAuth = errors.New("LDAP authentication failed") ErrLDAPUserNotFound = errors.New("LDAP user not found") )
var ( ErrOAuthProviderNotConfigured = errors.New("oauth provider not configured") ErrInvalidOAuthState = errors.New("invalid oauth state") ErrOAuthCodeExchange = errors.New("oauth code exchange failed") ErrOAuthUserInfo = errors.New("failed to get oauth user info") )
var ( ErrOIDCNotConfigured = errors.New("OIDC not configured") ErrInvalidOIDCToken = errors.New("invalid OIDC token") ErrOIDCDiscoveryFailed = errors.New("OIDC discovery failed") )
var ( ErrSAMLNotConfigured = errors.New("SAML not configured") ErrInvalidSAMLResponse = errors.New("invalid SAML response") ErrSAMLSignatureInvalid = errors.New("SAML signature validation failed") )
var ( ErrInvalidCredentials = errors.New("invalid credentials") ErrUserExists = errors.New("user already exists") ErrUserNotFound = errors.New("user not found") ErrEmailNotVerified = errors.New("email not verified") ErrAccountLocked = errors.New("account is locked") )
var DefaultRateLimitConfig = RateLimitConfig{ MaxAttempts: 5, WindowDuration: 15 * time.Minute, LockoutDuration: 30 * time.Minute, }
Functions ¶
func CleanupExpiredData ¶
CleanupExpiredData removes expired data from authentication tables
func MigrateAuthTables ¶
MigrateAuthTables runs all authentication-related database migrations
func RepairDatabaseIntegrity ¶
RepairDatabaseIntegrity attempts to fix common database integrity issues
func ValidateDatabaseIntegrity ¶
ValidateDatabaseIntegrity checks for common database integrity issues
Types ¶
type AccountLockout ¶
type AccountLockout struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID uuid.UUID `json:"user_id" gorm:"type:uuid;not null;index"`
IPAddress string `json:"ip_address" gorm:"size:45;index"`
Reason string `json:"reason" gorm:"size:255"`
FailedAttempts int `json:"failed_attempts" gorm:"default:0"`
LockedUntil *time.Time `json:"locked_until"`
IsActive bool `json:"is_active" gorm:"default:true"`
}
Account lockout functionality
func (AccountLockout) TableName ¶
func (AccountLockout) TableName() string
type AuditEvent ¶
type AuditEvent string
Enhanced audit logging
const ( AuditEventLogin AuditEvent = "login" AuditEventLoginFailed AuditEvent = "login_failed" AuditEventLogout AuditEvent = "logout" AuditEventRegister AuditEvent = "register" AuditEventPasswordChange AuditEvent = "password_change" AuditEventPasswordReset AuditEvent = "password_reset" AuditEventMFASetup AuditEvent = "mfa_setup" AuditEventMFADisable AuditEvent = "mfa_disable" AuditEventMFAFailed AuditEvent = "mfa_failed" AuditEventOAuthLink AuditEvent = "oauth_link" AuditEventOAuthUnlink AuditEvent = "oauth_unlink" AuditEventSessionRevoked AuditEvent = "session_revoked" AuditEventSuspiciousActivity AuditEvent = "suspicious_activity" AuditEventAccountLocked AuditEvent = "account_locked" AuditEventAccountUnlocked AuditEvent = "account_unlocked" AuditEventEmailVerified AuditEvent = "email_verified" AuditEventProfileUpdated AuditEvent = "profile_updated" )
type AuditLog ¶
type AuditLog struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID *uuid.UUID `json:"user_id" gorm:"type:uuid;index"`
Event string `json:"event" gorm:"not null;size:50;index"`
IPAddress string `json:"ip_address" gorm:"size:45;index"`
UserAgent string `json:"user_agent" gorm:"size:255"`
Details string `json:"details" gorm:"type:text"`
Success bool `json:"success" gorm:"index"`
RiskLevel string `json:"risk_level" gorm:"size:20;index"`
SessionID *uuid.UUID `json:"session_id" gorm:"type:uuid;index"`
Location string `json:"location" gorm:"size:255"`
DeviceInfo string `json:"device_info" gorm:"size:255"`
}
type AuditService ¶
type AuditService struct {
// contains filtered or unexported fields
}
func NewAuditService ¶
func NewAuditService(db *gorm.DB) *AuditService
func (*AuditService) CleanupOldAuditLogs ¶
func (a *AuditService) CleanupOldAuditLogs(retentionDays int) error
Cleanup expired audit logs (should be run periodically)
func (*AuditService) GetHighRiskEvents ¶
func (a *AuditService) GetHighRiskEvents(limit int) ([]AuditLog, error)
func (*AuditService) GetSecurityEventsAudit ¶
func (*AuditService) GetSecurityMetrics ¶
func (a *AuditService) GetSecurityMetrics() (*SecurityMetrics, error)
func (*AuditService) GetUserAuditLogs ¶
func (*AuditService) LogEvent ¶
func (a *AuditService) LogEvent(userID *uuid.UUID, event AuditEvent, ipAddress, userAgent, details string, success bool) error
func (*AuditService) LogEventWithSession ¶
func (a *AuditService) LogEventWithSession(userID *uuid.UUID, sessionID *uuid.UUID, event AuditEvent, ipAddress, userAgent, details string, success bool) error
type AuthResponse ¶
type AuthService ¶
type AuthService interface {
Login(ctx context.Context, req LoginRequest) (*AuthResponse, error)
Register(ctx context.Context, req RegisterRequest) (*models.User, error)
RefreshToken(ctx context.Context, refreshToken string) (*AuthResponse, error)
Logout(ctx context.Context, userID uuid.UUID) error
VerifyToken(ctx context.Context, token string) (*models.User, error)
RequestPasswordReset(ctx context.Context, req PasswordResetRequest) error
ResetPassword(ctx context.Context, req PasswordResetConfirmRequest) error
VerifyEmail(ctx context.Context, token string) error
ResendVerificationEmail(ctx context.Context, userID uuid.UUID) error
// Legacy methods for backward compatibility
GetUserByID(userID uuid.UUID) (*models.User, error)
GetUserByEmail(email string) (*models.User, error)
GetUserByUsername(username string) (*models.User, error)
UpdateUser(user *models.User) error
ValidateToken(tokenString string) (*models.User, error)
}
func NewAuthService ¶
func NewAuthService(db *gorm.DB, jwtManager *JWTManager, cfg *config.Config) AuthService
type BackupCode ¶
type BackupCode struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID uuid.UUID `json:"user_id" gorm:"type:uuid;not null;index"`
Code string `json:"code" gorm:"not null;size:255"`
Used bool `json:"used" gorm:"default:false"`
UsedAt *time.Time `json:"used_at"`
// Relationships
User models.User `json:"user,omitempty" gorm:"foreignKey:UserID"`
}
func (*BackupCode) TableName ¶
func (b *BackupCode) TableName() string
type DatabaseStats ¶
type DatabaseStats struct {
TotalUsers int64 `json:"total_users"`
ActiveUsers int64 `json:"active_users"`
VerifiedUsers int64 `json:"verified_users"`
MFAEnabledUsers int64 `json:"mfa_enabled_users"`
ActiveSessions int64 `json:"active_sessions"`
TotalSessions int64 `json:"total_sessions"`
OAuthAccounts int64 `json:"oauth_accounts"`
RecentLogins24h int64 `json:"recent_logins_24h"`
FailedLogins24h int64 `json:"failed_logins_24h"`
SecurityEvents24h int64 `json:"security_events_24h"`
PendingVerifications int64 `json:"pending_verifications"`
}
GetDatabaseStats returns statistics about authentication tables
func GetDatabaseStats ¶
func GetDatabaseStats(db *gorm.DB) (*DatabaseStats, error)
type EmailService ¶
type EmailService interface {
SendPasswordResetEmail(to, token string) error
SendEmailVerification(to, token string) error
SendMFASetupEmail(to string, backupCodes []string) error
}
Email service interface for sending password reset emails
func NewSMTPEmailService ¶
func NewSMTPEmailService(cfg *config.Config) EmailService
type EmailTemplate ¶
Enhanced email service with templates
type EmailVerificationService ¶
type EmailVerificationService struct {
// contains filtered or unexported fields
}
func NewEmailVerificationService ¶
func NewEmailVerificationService(db *gorm.DB, emailService EmailService) *EmailVerificationService
func (*EmailVerificationService) CleanupExpiredTokens ¶
func (s *EmailVerificationService) CleanupExpiredTokens() error
func (*EmailVerificationService) CreateVerificationToken ¶
func (s *EmailVerificationService) CreateVerificationToken(userID uuid.UUID) (*EmailVerificationToken, error)
func (*EmailVerificationService) GetVerificationStatus ¶
func (s *EmailVerificationService) GetVerificationStatus(userID uuid.UUID) (bool, *EmailVerificationToken, error)
Helper method to get verification status and token info
func (*EmailVerificationService) IsEmailVerified ¶
func (s *EmailVerificationService) IsEmailVerified(userID uuid.UUID) (bool, error)
func (*EmailVerificationService) RevokeUserTokens ¶
func (s *EmailVerificationService) RevokeUserTokens(userID uuid.UUID) error
func (*EmailVerificationService) SendVerificationEmail ¶
func (s *EmailVerificationService) SendVerificationEmail(userID uuid.UUID) error
func (*EmailVerificationService) VerifyEmail ¶
func (s *EmailVerificationService) VerifyEmail(token string) error
type EmailVerificationToken ¶
type EmailVerificationToken struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID uuid.UUID `json:"user_id" gorm:"type:uuid;not null;index"`
Token string `json:"-" gorm:"not null;uniqueIndex;size:255"`
ExpiresAt time.Time `json:"expires_at" gorm:"not null"`
Used bool `json:"used" gorm:"default:false"`
UsedAt *time.Time `json:"used_at"`
// Relationships
User models.User `json:"user,omitempty" gorm:"foreignKey:UserID"`
}
func (EmailVerificationToken) TableName ¶
func (EmailVerificationToken) TableName() string
type GitHubProvider ¶
GitHub OAuth Provider
func (*GitHubProvider) ExchangeCode ¶
func (p *GitHubProvider) ExchangeCode(code, redirectURI string) (*OAuthToken, error)
func (*GitHubProvider) GetAuthURL ¶
func (p *GitHubProvider) GetAuthURL(state, redirectURI string) string
func (*GitHubProvider) GetProviderName ¶
func (p *GitHubProvider) GetProviderName() string
func (*GitHubProvider) GetUserInfo ¶
func (p *GitHubProvider) GetUserInfo(token *OAuthToken) (*OAuthUserInfo, error)
type GitLabProvider ¶
type GitLabProvider struct {
ClientID string
ClientSecret string
BaseURL string // For self-hosted GitLab instances
}
GitLab OAuth Provider
func (*GitLabProvider) ExchangeCode ¶
func (p *GitLabProvider) ExchangeCode(code, redirectURI string) (*OAuthToken, error)
func (*GitLabProvider) GetAuthURL ¶
func (p *GitLabProvider) GetAuthURL(state, redirectURI string) string
func (*GitLabProvider) GetProviderName ¶
func (p *GitLabProvider) GetProviderName() string
func (*GitLabProvider) GetUserInfo ¶
func (p *GitLabProvider) GetUserInfo(token *OAuthToken) (*OAuthUserInfo, error)
type GoogleProvider ¶
Google OAuth Provider
func (*GoogleProvider) ExchangeCode ¶
func (p *GoogleProvider) ExchangeCode(code, redirectURI string) (*OAuthToken, error)
func (*GoogleProvider) GetAuthURL ¶
func (p *GoogleProvider) GetAuthURL(state, redirectURI string) string
func (*GoogleProvider) GetProviderName ¶
func (p *GoogleProvider) GetProviderName() string
func (*GoogleProvider) GetUserInfo ¶
func (p *GoogleProvider) GetUserInfo(token *OAuthToken) (*OAuthUserInfo, error)
type JITProvisioningConfig ¶
type JITProvisioningConfig struct {
Enabled bool `json:"enabled" mapstructure:"enabled"`
DefaultRole string `json:"default_role" mapstructure:"default_role"`
AttributeMapping map[string]string `json:"attribute_mapping" mapstructure:"attribute_mapping"`
GroupMapping map[string]string `json:"group_mapping" mapstructure:"group_mapping"`
CreateOrganizations bool `json:"create_organizations" mapstructure:"create_organizations"`
}
Just-in-Time (JIT) user provisioning JITProvisioningConfig holds just-in-time provisioning settings for OIDC users
type JWTManager ¶
type JWTManager struct {
// contains filtered or unexported fields
}
func NewJWTManager ¶
func NewJWTManager(cfg config.JWT) *JWTManager
func (*JWTManager) GenerateToken ¶
func (j *JWTManager) GenerateToken(user *models.User) (string, error)
func (*JWTManager) ValidateToken ¶
func (j *JWTManager) ValidateToken(tokenString string) (*Claims, error)
type LDAPConnection ¶
type LDAPConnection interface {
Bind(username, password string) error
Search(baseDN, filter string, attributes []string) ([]LDAPSearchResult, error)
Close() error
}
LDAP Connection interface for testing
type LDAPSearchResult ¶
type LDAPService ¶
type LDAPService struct {
// contains filtered or unexported fields
}
func NewLDAPService ¶
func NewLDAPService(db *gorm.DB, jwtManager *JWTManager, cfg *config.Config, authSvc AuthService) (*LDAPService, error)
func (*LDAPService) Authenticate ¶
func (s *LDAPService) Authenticate(username, password string) (*AuthResponse, error)
func (*LDAPService) TestConnection ¶
func (s *LDAPService) TestConnection() error
Test LDAP connection
type LDAPUserInfo ¶
type LDAPUserInfo struct {
DN string
Username string
Email string
FirstName string
LastName string
DisplayName string
Groups []string
Attributes map[string][]string
}
LDAP User Information
type LoggingSMSProvider ¶
type LoggingSMSProvider struct{}
LoggingSMSProvider logs SMS messages when no real provider is configured
func (*LoggingSMSProvider) SendSMS ¶
func (p *LoggingSMSProvider) SendSMS(phoneNumber, message string) error
type LoginAttempt ¶
type LoginAttempt struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID *uuid.UUID `json:"user_id,omitempty" gorm:"type:uuid;index"`
Email string `json:"email" gorm:"not null;size:255;index"`
IPAddress string `json:"ip_address" gorm:"not null;size:45;index"`
Success bool `json:"success" gorm:"not null;index"`
UserAgent string `json:"user_agent" gorm:"size:255"`
FailReason string `json:"fail_reason" gorm:"size:255"`
}
func (LoginAttempt) TableName ¶
func (LoginAttempt) TableName() string
type LoginRequest ¶
type MFAService ¶
type MFAService struct {
// contains filtered or unexported fields
}
func NewMFAService ¶
func NewMFAService(db *gorm.DB) *MFAService
func NewMFAServiceWithEmail ¶
func NewMFAServiceWithEmail(db *gorm.DB, emailService EmailService) *MFAService
func (*MFAService) CompleteWebAuthnRegistration ¶
func (*MFAService) DeleteWebAuthnCredential ¶
func (s *MFAService) DeleteWebAuthnCredential(userID uuid.UUID, credentialID string) error
func (*MFAService) DisableMFA ¶
func (s *MFAService) DisableMFA(userID uuid.UUID) error
func (*MFAService) GetWebAuthnCredentials ¶
func (s *MFAService) GetWebAuthnCredentials(userID uuid.UUID) ([]WebAuthnCredential, error)
func (*MFAService) InitiateWebAuthnRegistration ¶
func (s *MFAService) InitiateWebAuthnRegistration(userID uuid.UUID, credentialName string) (*WebAuthnRegistrationResponse, error)
func (*MFAService) RegenerateBackupCodes ¶
func (s *MFAService) RegenerateBackupCodes(userID uuid.UUID) ([]string, error)
func (*MFAService) SendSMSCode ¶
func (s *MFAService) SendSMSCode(userID uuid.UUID, phoneNumber string) error
SMS MFA methods
func (*MFAService) SetupTOTP ¶
func (s *MFAService) SetupTOTP(userID uuid.UUID, issuer, accountName string) (*MFASetupResponse, error)
func (*MFAService) VerifyMFACode ¶
VerifyMFACode verifies any type of MFA code for login
func (*MFAService) VerifyTOTP ¶
type MFASetupRequest ¶
type MFASetupResponse ¶
type MFAVerifyRequest ¶
type MicrosoftProvider ¶
Microsoft OAuth Provider
func (*MicrosoftProvider) ExchangeCode ¶
func (p *MicrosoftProvider) ExchangeCode(code, redirectURI string) (*OAuthToken, error)
func (*MicrosoftProvider) GetAuthURL ¶
func (p *MicrosoftProvider) GetAuthURL(state, redirectURI string) string
func (*MicrosoftProvider) GetProviderName ¶
func (p *MicrosoftProvider) GetProviderName() string
func (*MicrosoftProvider) GetUserInfo ¶
func (p *MicrosoftProvider) GetUserInfo(token *OAuthToken) (*OAuthUserInfo, error)
type MockEmailService ¶
type MockEmailService struct{}
Mock email service for development
func (*MockEmailService) SendEmailVerification ¶
func (s *MockEmailService) SendEmailVerification(to, token string) error
func (*MockEmailService) SendMFASetupEmail ¶
func (s *MockEmailService) SendMFASetupEmail(to string, backupCodes []string) error
func (*MockEmailService) SendPasswordResetEmail ¶
func (s *MockEmailService) SendPasswordResetEmail(to, token string) error
type MockLDAPConnection ¶
type MockLDAPConnection struct {
// contains filtered or unexported fields
}
Mock LDAP connection for development/testing
func NewMockLDAPConnection ¶
func NewMockLDAPConnection() *MockLDAPConnection
func (*MockLDAPConnection) Bind ¶
func (m *MockLDAPConnection) Bind(username, password string) error
func (*MockLDAPConnection) Close ¶
func (m *MockLDAPConnection) Close() error
func (*MockLDAPConnection) Search ¶
func (m *MockLDAPConnection) Search(baseDN, filter string, attributes []string) ([]LDAPSearchResult, error)
type MockLDAPUser ¶
type OAuthAccount ¶
type OAuthAccount struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID uuid.UUID `json:"user_id" gorm:"type:uuid;not null;index"`
Provider string `json:"provider" gorm:"not null;size:50"`
ProviderID string `json:"provider_id" gorm:"not null;size:255"`
Email string `json:"email" gorm:"size:255"`
Username string `json:"username" gorm:"size:255"`
AccessToken string `json:"-" gorm:"type:text"`
RefreshToken string `json:"-" gorm:"type:text"`
ExpiresAt *time.Time `json:"expires_at"`
// Relationships
User models.User `json:"user,omitempty" gorm:"foreignKey:UserID"`
}
Enhanced OAuth service with account linking
func (*OAuthAccount) TableName ¶
func (o *OAuthAccount) TableName() string
type OAuthProvider ¶
type OAuthProvider interface {
GetAuthURL(state string, redirectURI string) string
ExchangeCode(code, redirectURI string) (*OAuthToken, error)
GetUserInfo(token *OAuthToken) (*OAuthUserInfo, error)
GetProviderName() string
}
type OAuthService ¶
type OAuthService struct {
// contains filtered or unexported fields
}
func NewOAuthService ¶
func NewOAuthService(db *gorm.DB, jwtManager *JWTManager, cfg *config.Config, authSvc AuthService) *OAuthService
func (*OAuthService) CleanupExpiredStates ¶
func (s *OAuthService) CleanupExpiredStates() error
func (*OAuthService) GenerateState ¶
func (s *OAuthService) GenerateState() (string, error)
func (*OAuthService) GetLinkedAccounts ¶
func (s *OAuthService) GetLinkedAccounts(userID uuid.UUID) ([]OAuthAccount, error)
func (*OAuthService) GetProvider ¶
func (s *OAuthService) GetProvider(name string) (OAuthProvider, error)
func (*OAuthService) HandleCallback ¶
func (s *OAuthService) HandleCallback(ctx context.Context, providerName, code, state, redirectURI string) (*AuthResponse, error)
func (*OAuthService) InitiateOAuth ¶
func (s *OAuthService) InitiateOAuth(provider, redirectURI string) (string, string, error)
func (*OAuthService) LinkAccount ¶
func (s *OAuthService) LinkAccount(userID uuid.UUID, provider string, userInfo *OAuthUserInfo, token *OAuthToken) error
OAuth account linking methods
func (*OAuthService) StoreState ¶
func (s *OAuthService) StoreState(state, provider string) error
func (*OAuthService) UnlinkAccount ¶
func (s *OAuthService) UnlinkAccount(userID uuid.UUID, provider string) error
func (*OAuthService) ValidateState ¶
func (s *OAuthService) ValidateState(state, provider string) error
type OAuthState ¶
type OAuthState struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
State string `json:"state" gorm:"not null;uniqueIndex;size:255"`
Provider string `json:"provider" gorm:"not null;size:50"`
ExpiresAt time.Time `json:"expires_at" gorm:"not null"`
Used bool `json:"used" gorm:"default:false"`
}
OAuth state management for security
func (*OAuthState) TableName ¶
func (o *OAuthState) TableName() string
type OAuthToken ¶
type OAuthUserInfo ¶
type OIDCClaims ¶
type OIDCClaims struct {
Sub string `json:"sub"`
Name string `json:"name"`
GivenName string `json:"given_name"`
FamilyName string `json:"family_name"`
PreferredUsername string `json:"preferred_username"`
Email string `json:"email"`
EmailVerified bool `json:"email_verified"`
Picture string `json:"picture"`
Groups []string `json:"groups"`
Roles []string `json:"roles"`
}
OIDC Claims
type OIDCDiscoveryDocument ¶
type OIDCDiscoveryDocument struct {
Issuer string `json:"issuer"`
AuthorizationEndpoint string `json:"authorization_endpoint"`
TokenEndpoint string `json:"token_endpoint"`
UserinfoEndpoint string `json:"userinfo_endpoint"`
JwksURI string `json:"jwks_uri"`
ScopesSupported []string `json:"scopes_supported"`
ResponseTypesSupported []string `json:"response_types_supported"`
}
OIDC Discovery Document
type OIDCProvider ¶
type OIDCService ¶
type OIDCService struct {
// contains filtered or unexported fields
}
func NewOIDCService ¶
func NewOIDCService(db *gorm.DB, jwtManager *JWTManager, cfg *config.Config, authSvc AuthService) (*OIDCService, error)
func (*OIDCService) GenerateAuthURL ¶
func (s *OIDCService) GenerateAuthURL(providerName, state string) (string, error)
func (*OIDCService) GetProvider ¶
func (s *OIDCService) GetProvider(name string) (*OIDCProvider, error)
func (*OIDCService) HandleCallback ¶
func (s *OIDCService) HandleCallback(ctx context.Context, providerName, code, state string) (*AuthResponse, error)
func (*OIDCService) ProvisionUser ¶
func (s *OIDCService) ProvisionUser(claims *OIDCClaims, config *JITProvisioningConfig) (*models.User, error)
type OIDCTokenResponse ¶
type OIDCTokenResponse struct {
AccessToken string `json:"access_token"`
TokenType string `json:"token_type"`
RefreshToken string `json:"refresh_token"`
ExpiresIn int `json:"expires_in"`
IDToken string `json:"id_token"`
Scope string `json:"scope"`
}
OIDC Token Response
type PasswordResetRequest ¶
type PasswordResetRequest struct {
Email string `json:"email" binding:"required,email"`
}
type PasswordResetService ¶
type PasswordResetService struct {
// contains filtered or unexported fields
}
func NewPasswordResetService ¶
func NewPasswordResetService(db *gorm.DB) *PasswordResetService
func (*PasswordResetService) CleanupExpiredTokens ¶
func (s *PasswordResetService) CleanupExpiredTokens() error
func (*PasswordResetService) CreateResetToken ¶
func (s *PasswordResetService) CreateResetToken(userID uuid.UUID) (*PasswordResetToken, error)
func (*PasswordResetService) RevokeUserTokens ¶
func (s *PasswordResetService) RevokeUserTokens(userID uuid.UUID) error
func (*PasswordResetService) UseResetToken ¶
func (s *PasswordResetService) UseResetToken(token string, newPassword string) error
func (*PasswordResetService) ValidateResetToken ¶
func (s *PasswordResetService) ValidateResetToken(token string) (*PasswordResetToken, error)
type PasswordResetToken ¶
type PasswordResetToken struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID uuid.UUID `json:"user_id" gorm:"type:uuid;not null;index"`
Token string `json:"-" gorm:"not null;uniqueIndex;size:255"`
ExpiresAt time.Time `json:"expires_at" gorm:"not null"`
Used bool `json:"used" gorm:"default:false"`
UsedAt *time.Time `json:"used_at"`
// Relationships
User models.User `json:"user,omitempty" gorm:"foreignKey:UserID"`
}
func (PasswordResetToken) TableName ¶
func (PasswordResetToken) TableName() string
type RateLimitConfig ¶
type RateLimitConfig struct {
MaxAttempts int // Maximum failed attempts
WindowDuration time.Duration // Time window for rate limiting
LockoutDuration time.Duration // How long to lock account
}
Rate limiting configuration
type RateLimiter ¶
type RateLimiter struct {
// contains filtered or unexported fields
}
Rate Limiting
func NewRateLimiter ¶
func NewRateLimiter(limit int, window time.Duration) *RateLimiter
func (*RateLimiter) Cleanup ¶
func (rl *RateLimiter) Cleanup()
func (*RateLimiter) IsAllowed ¶
func (rl *RateLimiter) IsAllowed(key string) bool
type RegisterRequest ¶
type SAMLRequest ¶
type SAMLRequest struct {
XMLName xml.Name `xml:"urn:oasis:names:tc:SAML:2.0:protocol AuthnRequest"`
ID string `xml:"ID,attr"`
Version string `xml:"Version,attr"`
IssueInstant string `xml:"IssueInstant,attr"`
Issuer struct {
Value string `xml:",chardata"`
} `xml:"urn:oasis:names:tc:SAML:2.0:assertion Issuer"`
}
type SAMLResponse ¶
type SAMLResponse struct {
XMLName xml.Name `xml:"urn:oasis:names:tc:SAML:2.0:protocol Response"`
ID string `xml:"ID,attr"`
Status struct {
StatusCode struct {
Value string `xml:"Value,attr"`
} `xml:"urn:oasis:names:tc:SAML:2.0:protocol StatusCode"`
} `xml:"urn:oasis:names:tc:SAML:2.0:protocol Status"`
Assertion struct {
Subject struct {
NameID struct {
Value string `xml:",chardata"`
} `xml:"urn:oasis:names:tc:SAML:2.0:assertion NameID"`
} `xml:"urn:oasis:names:tc:SAML:2.0:assertion Subject"`
AttributeStatement struct {
Attributes []struct {
Name string `xml:"Name,attr"`
Values []struct {
Value string `xml:",chardata"`
} `xml:"urn:oasis:names:tc:SAML:2.0:assertion AttributeValue"`
} `xml:"urn:oasis:names:tc:SAML:2.0:assertion Attribute"`
} `xml:"urn:oasis:names:tc:SAML:2.0:assertion AttributeStatement"`
} `xml:"urn:oasis:names:tc:SAML:2.0:assertion Assertion"`
}
SAML Response structures
type SAMLService ¶
type SAMLService struct {
// contains filtered or unexported fields
}
func NewSAMLService ¶
func NewSAMLService(db *gorm.DB, jwtManager *JWTManager, cfg *config.Config, authSvc AuthService) (*SAMLService, error)
func (*SAMLService) GenerateAuthRequest ¶
func (s *SAMLService) GenerateAuthRequest(relayState string) (string, error)
func (*SAMLService) GenerateMetadata ¶
func (s *SAMLService) GenerateMetadata() (string, error)
SAML metadata generation
func (*SAMLService) ProcessResponse ¶
func (s *SAMLService) ProcessResponse(samlResponse string, relayState string) (*AuthResponse, error)
type SAMLUserInfo ¶
type SMSProvider ¶
SMS MFA (placeholder implementation)
type SMSService ¶
type SMSService struct {
// contains filtered or unexported fields
}
func NewSMSService ¶
func NewSMSService(provider SMSProvider) *SMSService
func (*SMSService) SendMFACode ¶
func (s *SMSService) SendMFACode(phoneNumber string) (string, error)
type SMSVerificationCode ¶
type SMSVerificationCode struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID uuid.UUID `json:"user_id" gorm:"type:uuid;not null;index"`
Code string `json:"code" gorm:"not null;size:10"`
ExpiresAt time.Time `json:"expires_at" gorm:"not null"`
Used bool `json:"used" gorm:"default:false"`
UsedAt *time.Time `json:"used_at"`
// Relationships
User models.User `json:"user,omitempty" gorm:"foreignKey:UserID"`
}
func (*SMSVerificationCode) TableName ¶
func (s *SMSVerificationCode) TableName() string
type SMTPEmailService ¶
type SMTPEmailService struct {
// contains filtered or unexported fields
}
func (*SMTPEmailService) SendEmailVerification ¶
func (s *SMTPEmailService) SendEmailVerification(to, token string) error
func (*SMTPEmailService) SendMFASetupEmail ¶
func (s *SMTPEmailService) SendMFASetupEmail(to string, backupCodes []string) error
func (*SMTPEmailService) SendPasswordResetEmail ¶
func (s *SMTPEmailService) SendPasswordResetEmail(to, token string) error
type SecurityEvent ¶
type SecurityEvent struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID *uuid.UUID `json:"user_id,omitempty" gorm:"type:uuid;index"`
EventType string `json:"event_type" gorm:"not null;size:50;index"`
IPAddress string `json:"ip_address" gorm:"size:45;index"`
UserAgent string `json:"user_agent" gorm:"size:255"`
Details string `json:"details" gorm:"type:text"`
Severity string `json:"severity" gorm:"size:20;default:'info'"` // info, warning, critical
}
func (SecurityEvent) TableName ¶
func (SecurityEvent) TableName() string
type SecurityMetrics ¶
type SecurityMetrics struct {
FailedLogins24h int64 `json:"failed_logins_24h"`
SuspiciousActivity24h int64 `json:"suspicious_activity_24h"`
AccountLockouts24h int64 `json:"account_lockouts_24h"`
ActiveSessions int64 `json:"active_sessions"`
UnusualLocations24h int64 `json:"unusual_locations_24h"`
}
Security metrics
type SecurityService ¶
type SecurityService struct {
// contains filtered or unexported fields
}
func NewSecurityService ¶
func NewSecurityService(db *gorm.DB) *SecurityService
func (*SecurityService) CheckGeneralRateLimit ¶
func (s *SecurityService) CheckGeneralRateLimit(ipAddress string) bool
func (*SecurityService) CheckLoginRateLimit ¶
func (s *SecurityService) CheckLoginRateLimit(ipAddress string) bool
Enhanced rate limiting methods
func (*SecurityService) CheckMFARateLimit ¶
func (s *SecurityService) CheckMFARateLimit(ipAddress string) bool
func (*SecurityService) CheckPasswordResetRateLimit ¶
func (s *SecurityService) CheckPasswordResetRateLimit(ipAddress string) bool
func (*SecurityService) CheckRateLimit ¶
func (s *SecurityService) CheckRateLimit(email, ipAddress string, config RateLimitConfig) error
func (*SecurityService) CheckRegistrationRateLimit ¶
func (s *SecurityService) CheckRegistrationRateLimit(ipAddress string) bool
func (*SecurityService) CleanupOldEvents ¶
func (s *SecurityService) CleanupOldEvents(daysToKeep int) error
func (*SecurityService) GetSecurityEvents ¶
func (s *SecurityService) GetSecurityEvents(userID uuid.UUID, limit int) ([]SecurityEvent, error)
func (*SecurityService) GetSuspiciousActivity ¶
func (s *SecurityService) GetSuspiciousActivity(hoursBack int) ([]SecurityEvent, error)
func (*SecurityService) IsAccountLocked ¶
func (s *SecurityService) IsAccountLocked(email string, config RateLimitConfig) (bool, time.Time)
func (*SecurityService) RecordLoginAttempt ¶
func (*SecurityService) RecordSecurityEvent ¶
func (s *SecurityService) RecordSecurityEvent(userID *uuid.UUID, eventType, ipAddress, userAgent, details, severity string) error
func (*SecurityService) RunPeriodicCleanup ¶
func (s *SecurityService) RunPeriodicCleanup()
Periodic cleanup function for security service
func (*SecurityService) ValidateIPAddress ¶
func (s *SecurityService) ValidateIPAddress(ipStr string) error
func (*SecurityService) ValidatePasswordStrength ¶
func (s *SecurityService) ValidatePasswordStrength(password string) []string
Password strength validation
type Session ¶
type Session struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID uuid.UUID `json:"user_id" gorm:"type:uuid;not null;index"`
RefreshToken string `json:"-" gorm:"not null;uniqueIndex;size:255"`
ExpiresAt time.Time `json:"expires_at" gorm:"not null"`
IPAddress string `json:"ip_address" gorm:"size:45"`
UserAgent string `json:"user_agent" gorm:"size:255"`
IsActive bool `json:"is_active" gorm:"default:true"`
LastUsedAt time.Time `json:"last_used_at"`
DeviceName string `json:"device_name" gorm:"size:255"`
LocationInfo string `json:"location_info" gorm:"size:255"`
IsRemembered bool `json:"is_remembered" gorm:"default:false"`
SecurityFlags int `json:"security_flags" gorm:"default:0"`
}
type SessionConfig ¶
type SessionConfig struct {
MaxSessions int `json:"max_sessions"`
DefaultExpiration time.Duration `json:"default_expiration"`
RememberMeExpiration time.Duration `json:"remember_me_expiration"`
IdleTimeout time.Duration `json:"idle_timeout"`
RequireSecureHeaders bool `json:"require_secure_headers"`
EnableGeoTracking bool `json:"enable_geo_tracking"`
EnableDeviceTracking bool `json:"enable_device_tracking"`
AutoCleanupInterval time.Duration `json:"auto_cleanup_interval"`
}
type SessionService ¶
type SessionService struct {
// contains filtered or unexported fields
}
func NewSessionService ¶
func NewSessionService(db *gorm.DB) *SessionService
func NewSessionServiceWithConfig ¶
func NewSessionServiceWithConfig(db *gorm.DB, config *SessionConfig) *SessionService
func (*SessionService) CleanupExpiredSessions ¶
func (s *SessionService) CleanupExpiredSessions() error
func (*SessionService) CreateSession ¶
func (*SessionService) DetectSuspiciousActivity ¶
Detect suspicious activity
func (*SessionService) FlagSession ¶
func (s *SessionService) FlagSession(sessionID uuid.UUID, flag int) error
func (*SessionService) ForceLogoutAllDevices ¶
func (s *SessionService) ForceLogoutAllDevices(userID uuid.UUID) error
Force logout from all devices
func (*SessionService) GetDetailedUserSessions ¶
func (s *SessionService) GetDetailedUserSessions(userID uuid.UUID) ([]Session, error)
Get detailed session information for security dashboard
func (*SessionService) GetFlaggedSessions ¶
func (s *SessionService) GetFlaggedSessions(userID uuid.UUID) ([]Session, error)
func (*SessionService) GetSessionStats ¶
func (s *SessionService) GetSessionStats() (*SessionStats, error)
func (*SessionService) GetUserSessions ¶
func (s *SessionService) GetUserSessions(userID uuid.UUID) ([]Session, error)
func (*SessionService) LimitUserSessions ¶
func (s *SessionService) LimitUserSessions(userID uuid.UUID, maxSessions int) error
func (*SessionService) RefreshSession ¶
func (s *SessionService) RefreshSession(refreshToken string) (*Session, error)
func (*SessionService) RevokeSession ¶
func (s *SessionService) RevokeSession(refreshToken string) error
func (*SessionService) RevokeUserSessions ¶
func (s *SessionService) RevokeUserSessions(userID uuid.UUID) error
func (*SessionService) RunPeriodicCleanup ¶
func (s *SessionService) RunPeriodicCleanup() error
Automatic session cleanup (should be run periodically)
func (*SessionService) UpdateSessionActivity ¶
func (s *SessionService) UpdateSessionActivity(refreshToken, ipAddress string) error
Update session activity (called on each API request)
func (*SessionService) ValidateRefreshToken ¶
func (s *SessionService) ValidateRefreshToken(refreshToken string) (*Session, error)
func (*SessionService) ValidateSessionWithIdleCheck ¶
func (s *SessionService) ValidateSessionWithIdleCheck(refreshToken string) (*Session, error)
Enhanced session validation with idle timeout
type SessionStats ¶
type SessionStats struct {
TotalSessions int64 `json:"total_sessions"`
ActiveSessions int64 `json:"active_sessions"`
LastCleanup time.Time `json:"last_cleanup"`
}
Session management for rate limiting and security
type TemplatedEmailService ¶
type TemplatedEmailService struct {
// contains filtered or unexported fields
}
func NewTemplatedEmailService ¶
func NewTemplatedEmailService(smtpService EmailService) *TemplatedEmailService
func (*TemplatedEmailService) SendEmailVerification ¶
func (s *TemplatedEmailService) SendEmailVerification(to, token string) error
func (*TemplatedEmailService) SendMFASetupEmail ¶
func (s *TemplatedEmailService) SendMFASetupEmail(to string, backupCodes []string) error
func (*TemplatedEmailService) SendPasswordResetEmail ¶
func (s *TemplatedEmailService) SendPasswordResetEmail(to, token string) error
type TokenBlacklist ¶
type TokenBlacklist struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
TokenHash string `json:"-" gorm:"uniqueIndex;not null;size:64"`
UserID uuid.UUID `json:"user_id" gorm:"type:uuid;index"`
ExpiresAt time.Time `json:"expires_at" gorm:"not null"`
Reason string `json:"reason" gorm:"size:255"`
BlacklistedBy uuid.UUID `json:"blacklisted_by" gorm:"type:uuid"`
}
TokenBlacklist represents a blacklisted token
func (TokenBlacklist) TableName ¶
func (TokenBlacklist) TableName() string
type TokenBlacklistService ¶
type TokenBlacklistService struct {
// contains filtered or unexported fields
}
TokenBlacklistService handles token blacklisting for secure logout
func NewTokenBlacklistService ¶
func NewTokenBlacklistService(db *gorm.DB) *TokenBlacklistService
func (*TokenBlacklistService) BlacklistToken ¶
func (s *TokenBlacklistService) BlacklistToken(token string, expiresAt time.Time) error
BlacklistToken adds a token to the blacklist
func (*TokenBlacklistService) BlacklistTokenWithDetails ¶
func (s *TokenBlacklistService) BlacklistTokenWithDetails(token string, userID, blacklistedBy uuid.UUID, expiresAt time.Time, reason string) error
BlacklistTokenWithDetails adds a token to the blacklist with additional details
func (*TokenBlacklistService) BlacklistUserTokens ¶
func (s *TokenBlacklistService) BlacklistUserTokens(userID uuid.UUID) error
BlacklistUserTokens blacklists all active tokens for a user (used during logout)
func (*TokenBlacklistService) CleanupExpiredBlacklist ¶
func (s *TokenBlacklistService) CleanupExpiredBlacklist() error
CleanupExpiredBlacklist removes expired blacklist entries
func (*TokenBlacklistService) GetBlacklistStats ¶
func (s *TokenBlacklistService) GetBlacklistStats() (map[string]interface{}, error)
GetBlacklistStats returns statistics about the blacklist
func (*TokenBlacklistService) GetBlacklistedTokensForUser ¶
func (s *TokenBlacklistService) GetBlacklistedTokensForUser(userID uuid.UUID) ([]TokenBlacklist, error)
GetBlacklistedTokensForUser returns blacklisted tokens for a specific user
func (*TokenBlacklistService) IsTokenBlacklisted ¶
func (s *TokenBlacklistService) IsTokenBlacklisted(token string) (bool, error)
IsTokenBlacklisted checks if a token is in the blacklist
func (*TokenBlacklistService) RemoveFromBlacklist ¶
func (s *TokenBlacklistService) RemoveFromBlacklist(token string) error
RemoveFromBlacklist removes a token from the blacklist (for token restoration)
func (*TokenBlacklistService) RunPeriodicCleanup ¶
func (s *TokenBlacklistService) RunPeriodicCleanup() error
RunPeriodicCleanup should be called periodically to clean expired entries
type WebAuthnCredential ¶
type WebAuthnCredential struct {
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey;default:(gen_random_uuid())"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID uuid.UUID `json:"user_id" gorm:"type:uuid;not null;index"`
CredentialID string `json:"credential_id" gorm:"not null;uniqueIndex;size:255"`
PublicKey []byte `json:"public_key" gorm:"not null"`
Name string `json:"name" gorm:"not null;size:255"`
SignCount uint32 `json:"sign_count" gorm:"default:0"`
LastUsedAt *time.Time `json:"last_used_at"`
// Relationships
User models.User `json:"user,omitempty" gorm:"foreignKey:UserID"`
}
func (*WebAuthnCredential) TableName ¶
func (w *WebAuthnCredential) TableName() string
type WebAuthnLoginRequest ¶
type WebAuthnLoginResponse ¶
type WebAuthnLoginResponse struct {
Options string `json:"options"` // JSON string of WebAuthn assertion options
}
type WebAuthnRegistrationRequest ¶
type WebAuthnRegistrationRequest struct {
UserID uuid.UUID `json:"user_id"`
Name string `json:"name"`
}
WebAuthn methods (basic implementation)
type WebAuthnRegistrationResponse ¶
type WebAuthnRegistrationResponse struct {
Options string `json:"options"` // JSON string of WebAuthn creation options
}