Documentation
¶
Index ¶
- type AuditLog
- type AuthProvider
- type Config
- func (c *Config) FromCreateConfigRequest(req *openauth_v1.CreateConfigRequest, createdBy int64) *Config
- func (c *Config) FromUpdateConfigRequest(req *openauth_v1.UpdateConfigRequest, updatedBy int64) *Config
- func (c *Config) SetValue(value interface{}) error
- func (c *Config) ToProtoConfig() *openauth_v1.Config
- type ConfigEntity
- type EffectivePermission
- type EmailVerificationToken
- type Group
- type GroupPermission
- type LoginAttempt
- type OTPVerification
- type PasswordResetToken
- type Permission
- type Profile
- type SecurityEvent
- type Session
- type SessionActivity
- type SessionArchive
- type User
- type UserExternalAccount
- type UserGroup
- type UserPermission
- type ValueType
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AuditLog ¶
type AuditLog struct {
ID int64 `db:"id" json:"id"`
UserID *int64 `db:"user_id" json:"userId,omitempty"` // who performed the action
EntityType string `db:"entity_type" json:"entityType"` // e.g., users, groups
EntityID *int64 `db:"entity_id" json:"entityId,omitempty"` // entity being modified (integer primary key)
Action string `db:"action" json:"action"` // create, update, delete
OldValues []byte `db:"old_values" json:"oldValues,omitempty"` // JSONB
NewValues []byte `db:"new_values" json:"newValues,omitempty"` // JSONB
Changes []byte `db:"changes" json:"changes,omitempty"` // JSONB
Reason *string `db:"reason" json:"reason,omitempty"`
IPAddress *string `db:"ip_address" json:"ipAddress,omitempty"`
UserAgent *string `db:"user_agent" json:"userAgent,omitempty"`
SessionID *int64 `db:"session_id" json:"sessionId,omitempty"`
Metadata []byte `db:"metadata" json:"metadata,omitempty"` // JSONB
Severity string `db:"severity" json:"severity"` // low, medium, high, critical
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
Audit logs for tracking changes
type AuthProvider ¶
type AuthProvider struct {
ID int64 `db:"id" json:"id"`
UUID uuid.UUID `db:"uuid" json:"uuid"`
Name string `db:"name" json:"name"`
DisplayName string `db:"display_name" json:"displayName"`
ClientID *string `db:"client_id" json:"clientId,omitempty"`
ClientSecret *string `db:"client_secret" json:"clientSecret,omitempty"`
AuthURL *string `db:"auth_url" json:"authUrl,omitempty"`
TokenURL *string `db:"token_url" json:"tokenUrl,omitempty"`
UserInfoURL *string `db:"user_info_url" json:"userInfoUrl,omitempty"`
Scope *string `db:"scope" json:"scope,omitempty"`
IsEnabled bool `db:"is_enabled" json:"isEnabled"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
UpdatedAt int64 `db:"updated_at" json:"updatedAt"`
}
AuthProvider represents an OAuth or external provider
type Config ¶
type Config struct {
ID int64 `db:"id" json:"id"`
EntityID int64 `db:"entity_id" json:"entityId"`
Key string `db:"key" json:"key"`
DisplayName string `db:"display_name" json:"displayName,omitempty"`
Description string `db:"description" json:"description,omitempty"`
Value string `db:"value" json:"value,omitempty"`
Type ValueType `db:"type" json:"type"`
Metadata *string `db:"metadata" json:"metadata,omitempty"`
CreatedBy int64 `db:"created_by" json:"createdBy"`
UpdatedBy int64 `db:"updated_by" json:"updatedBy"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
UpdatedAt int64 `db:"updated_at" json:"updatedAt"`
}
Config represents the configs table
func (*Config) FromCreateConfigRequest ¶
func (c *Config) FromCreateConfigRequest(req *openauth_v1.CreateConfigRequest, createdBy int64) *Config
FromCreateConfigRequest creates a Config from a protobuf request
func (*Config) FromUpdateConfigRequest ¶
func (c *Config) FromUpdateConfigRequest(req *openauth_v1.UpdateConfigRequest, updatedBy int64) *Config
FromUpdateConfigRequest updates a Config from a protobuf request
func (*Config) ToProtoConfig ¶
func (c *Config) ToProtoConfig() *openauth_v1.Config
ToProtoConfig converts a Config DAO to protobuf Config
type ConfigEntity ¶
type ConfigEntity struct {
ID int64 `db:"id" json:"id"`
Name string `db:"name" json:"name"`
DisplayName string `db:"display_name" json:"displayName,omitempty"`
Description string `db:"description" json:"description,omitempty"`
ReadPerm int64 `db:"read_perm" json:"readPerm"`
WritePerm int64 `db:"write_perm" json:"writePerm"`
ReadPermName string `db:"permission.name" json:"readPermName,omitempty"`
WritePermName string `db:"permission.name" json:"writePermName,omitempty"`
CreatedBy int64 `db:"created_by" json:"createdBy"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
UpdatedAt int64 `db:"updated_at" json:"updatedAt"`
}
ConfigEntity represents the config_entities table
func (*ConfigEntity) FromCreateConfigEntityRequest ¶
func (ce *ConfigEntity) FromCreateConfigEntityRequest(req *openauth_v1.CreateConfigEntityRequest, readPerm, writePerm int64, createdBy int64) *ConfigEntity
FromCreateConfigEntityRequest creates a ConfigEntity from a protobuf request
func (*ConfigEntity) ToProtoConfigEntity ¶
func (ce *ConfigEntity) ToProtoConfigEntity() *openauth_v1.ConfigEntity
ToProtoConfigEntity converts a ConfigEntity DAO to protobuf ConfigEntity
type EffectivePermission ¶
type EffectivePermission struct {
// Permission details
PermissionId int64 `db:"permission_id" json:"permissionId,omitempty"`
PermissionName string `db:"permission_name" json:"permissionName,omitempty"`
PermissionDisplayName string `db:"permission_display_name" json:"permissionDisplayName,omitempty"`
PermissionDescription *string `db:"permission_description" json:"permissionDescription,omitempty"`
// Source of the permission: "direct" or "group"
Source string `db:"source" json:"source,omitempty"`
// If source is "group", this contains the group details
GroupId *int64 `db:"group_id" json:"groupId,omitempty"`
GroupName *string `db:"group_name" json:"groupName,omitempty"`
GroupDisplayName *string `db:"group_display_name" json:"groupDisplayName,omitempty"`
// If source is "direct", this may contain expiration info
ExpiresAt *int64 `db:"expires_at" json:"expiresAt,omitempty"`
// When this permission was granted
GrantedAt int64 `db:"granted_at" json:"grantedAt,omitempty"`
// Who granted this permission
GrantedBy int64 `db:"granted_by" json:"grantedBy,omitempty"`
}
func (*EffectivePermission) ToProtoUserEffectivePermission ¶
func (p *EffectivePermission) ToProtoUserEffectivePermission() *openauth_v1.EffectivePermission
type EmailVerificationToken ¶
type EmailVerificationToken struct {
ID int64 `db:"id" json:"id"`
UserID int64 `db:"user_id" json:"userId"`
Email string `db:"email" json:"email"`
Token string `db:"token" json:"token"`
ExpiresAt int64 `db:"expires_at" json:"expiresAt"`
IsUsed bool `db:"is_used" json:"isUsed"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
type Group ¶
type Group struct {
ID int64 `db:"id" json:"id"`
Name string `db:"name" json:"name"`
DisplayName string `db:"display_name" json:"displayName"`
Description *string `db:"description" json:"description,omitempty"`
IsSystem bool `db:"is_system" json:"isSystem"`
IsDefault bool `db:"is_default" json:"isDefault"`
CreatedBy int64 `db:"created_by" json:"createdBy"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
UpdatedAt int64 `db:"updated_at" json:"updatedAt"`
}
Groups (roles) table
func (*Group) FromCreateGroupRequest ¶
func (g *Group) FromCreateGroupRequest(req *openauth_v1.CreateGroupRequest, createdBy int64) *Group
func (*Group) ToProtoGroup ¶
func (g *Group) ToProtoGroup() *openauth_v1.Group
ToProtoGroup converts a Group DAO to protobuf Group
func (*Group) ToProtoUserGroup ¶
func (g *Group) ToProtoUserGroup(assignedAt int64) *openauth_v1.UserGroup
ToProtoUserGroup converts a Group DAO to protobuf UserGroup for user group listings
type GroupPermission ¶
type GroupPermission struct {
ID int64 `db:"id" json:"id"`
GroupID int64 `db:"group_id" json:"groupId"`
PermissionID int64 `db:"permission_id" json:"permissionId"`
GrantedBy int64 `db:"granted_by" json:"grantedBy"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
Group ↔ Permission junction
type LoginAttempt ¶
type LoginAttempt struct {
ID int64 `db:"id" json:"id"`
Identifier string `db:"identifier" json:"identifier"` // username/email/phone
IdentifierType string `db:"identifier_type" json:"identifierType"` // username, email, phone
IPAddress string `db:"ip_address" json:"ipAddress"`
UserAgent *string `db:"user_agent" json:"userAgent,omitempty"`
Success bool `db:"success" json:"success"`
FailureReason *string `db:"failure_reason" json:"failureReason,omitempty"`
UserID *int64 `db:"user_id" json:"userId,omitempty"`
SessionID *int64 `db:"session_id" json:"sessionId,omitempty"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
Login attempts tracking
type OTPVerification ¶
type OTPVerification struct {
ID int64 `db:"id" json:"id"`
UserID *int64 `db:"user_id" json:"userId,omitempty"`
Identifier string `db:"identifier" json:"identifier"` // email or phone
OTPCode string `db:"otp_code" json:"otpCode"`
OTPType string `db:"otp_type" json:"otpType"` // email_verification, phone_verification, password_reset, login
IsUsed bool `db:"is_used" json:"isUsed"`
ExpiresAt int64 `db:"expires_at" json:"expiresAt"`
Attempts int `db:"attempts" json:"attempts"`
MaxAttempts int `db:"max_attempts" json:"maxAttempts"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
type PasswordResetToken ¶
type Permission ¶
type Permission struct {
ID int64 `db:"id" json:"id"`
Name string `db:"name" json:"name"` // e.g., users.create
DisplayName string `db:"display_name" json:"displayName"`
Description *string `db:"description" json:"description,omitempty"`
IsSystem bool `db:"is_system" json:"isSystem"` // system permissions cannot be deleted
CreatedBy int64 `db:"created_by" json:"createdBy"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
UpdatedAt int64 `db:"updated_at" json:"updatedAt"`
}
Permissions table
func (*Permission) FromCreatePermissionRequest ¶
func (p *Permission) FromCreatePermissionRequest(req *openauth_v1.CreatePermissionRequest, createdBy int64) *Permission
func (*Permission) ToProtoPermission ¶
func (p *Permission) ToProtoPermission() *openauth_v1.Permission
ToProtoPermission converts a Permission DAO to protobuf Permission
type Profile ¶
type Profile struct {
ID int64 `db:"id" json:"id"`
UUID uuid.UUID `db:"uuid" json:"uuid"`
UserID int64 `db:"user_id" json:"userId"`
ProfileName *string `db:"profile_name" json:"profileName,omitempty"` // Name/label for this profile
FirstName *string `db:"first_name" json:"firstName,omitempty"`
LastName *string `db:"last_name" json:"lastName,omitempty"`
DisplayName *string `db:"display_name" json:"displayName,omitempty"`
Bio *string `db:"bio" json:"bio,omitempty"`
AvatarURL *string `db:"avatar_url" json:"avatarUrl,omitempty"`
DateOfBirth *time.Time `db:"date_of_birth" json:"dateOfBirth,omitempty"`
Gender *string `db:"gender" json:"gender,omitempty"`
Timezone *string `db:"timezone" json:"timezone,omitempty"`
Locale *string `db:"locale" json:"locale,omitempty"`
Country *string `db:"country" json:"country,omitempty"`
City *string `db:"city" json:"city,omitempty"`
Address *string `db:"address" json:"address,omitempty"`
PostalCode *string `db:"postal_code" json:"postalCode,omitempty"`
WebsiteURL *string `db:"website_url" json:"websiteUrl,omitempty"`
Metadata []byte `db:"metadata" json:"metadata,omitempty"` // JSONB as raw bytes
CreatedAt int64 `db:"created_at" json:"createdAt"`
UpdatedAt int64 `db:"updated_at" json:"updatedAt"`
}
func (*Profile) FromCreateProfileRequest ¶
func (p *Profile) FromCreateProfileRequest(req *openauth_v1.CreateProfileRequest, userId int64) *Profile
func (*Profile) ToProtoUserProfile ¶
func (p *Profile) ToProtoUserProfile() *openauth_v1.UserProfile
ToProtoUserProfile converts a Profile DAO to protobuf UserProfile
type SecurityEvent ¶
type SecurityEvent struct {
ID int64 `db:"id" json:"id"`
UserID *int64 `db:"user_id" json:"userId,omitempty"`
EventType string `db:"event_type" json:"eventType"` // e.g., login_success
Severity string `db:"severity" json:"severity"` // low, medium, high
Description *string `db:"description" json:"description,omitempty"`
IPAddress *string `db:"ip_address" json:"ipAddress,omitempty"`
UserAgent *string `db:"user_agent" json:"userAgent,omitempty"`
Location *string `db:"location" json:"location,omitempty"`
DeviceID *string `db:"device_id" json:"deviceId,omitempty"`
SessionID *int64 `db:"session_id" json:"sessionId,omitempty"`
Metadata []byte `db:"metadata" json:"metadata,omitempty"` // JSONB
Resolved bool `db:"resolved" json:"resolved"`
ResolvedBy *int64 `db:"resolved_by" json:"resolvedBy,omitempty"`
ResolvedAt *int64 `db:"resolved_at" json:"resolvedAt,omitempty"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
Security events table
type Session ¶
type Session struct {
ID int64 `db:"id" json:"id"`
UUID uuid.UUID `db:"uuid" json:"uuid"`
UserID int64 `db:"user_id" json:"userId"`
UserUUID uuid.UUID `db:"user_uuid" json:"userUuid"` // For easier lookups
SessionToken string `db:"session_token" json:"sessionToken"`
RefreshToken *string `db:"refresh_token" json:"refreshToken,omitempty"`
DeviceID *string `db:"device_id" json:"deviceId,omitempty"`
DeviceName *string `db:"device_name" json:"deviceName,omitempty"`
DeviceType *string `db:"device_type" json:"deviceType,omitempty"` // web, mobile, desktop
UserAgent *string `db:"user_agent" json:"userAgent,omitempty"`
IPAddress *string `db:"ip_address" json:"ipAddress,omitempty"` // stored as INET
Location *string `db:"location" json:"location,omitempty"`
Lat *float64 `db:"lat" json:"lat,omitempty"`
Lon *float64 `db:"lon" json:"lon,omitempty"`
IsActive bool `db:"is_active" json:"isActive"`
Status string `db:"status" json:"status"` // active, expired, revoked, logged_out
ExpiresAt int64 `db:"expires_at" json:"expiresAt"`
RefreshExpiresAt *int64 `db:"refresh_expires_at" json:"refreshExpiresAt,omitempty"`
LastActivityAt int64 `db:"last_activity_at" json:"lastActivityAt"`
RevokedAt *int64 `db:"revoked_at" json:"revokedAt,omitempty"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
func (*Session) FromSignInRequest ¶
func (s *Session) FromSignInRequest( sessionUUID uuid.UUID, userID int64, userUUID uuid.UUID, sessionToken string, refreshToken string, expiresAt int64, refreshExpiresAt int64, req *openauth_v1.SignInRequest, ) *Session
FromSignInRequest initializes a Session DAO from SignInRequest data
func (*Session) ToProtoSession ¶
func (s *Session) ToProtoSession() *openauth_v1.Session
ToProtoSession converts Session DAO to protobuf Session
type SessionActivity ¶
type SessionActivity struct {
ID int64 `db:"id" json:"id"`
SessionID int64 `db:"session_id" json:"sessionId"`
ActivityType string `db:"activity_type" json:"activityType"` // login, logout, refresh, access
IPAddress *string `db:"ip_address" json:"ipAddress,omitempty"`
UserAgent *string `db:"user_agent" json:"userAgent,omitempty"`
Location *string `db:"location" json:"location,omitempty"`
Metadata []byte `db:"metadata" json:"metadata,omitempty"` // JSONB
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
type SessionArchive ¶
type SessionArchive struct {
ID int64 `db:"id" json:"id"`
OriginalID int64 `db:"original_id" json:"originalId"`
UUID uuid.UUID `db:"uuid" json:"uuid"`
UserID int64 `db:"user_id" json:"userId"`
UserUUID uuid.UUID `db:"user_uuid" json:"userUuid"`
SessionToken *string `db:"session_token" json:"sessionToken,omitempty"`
RefreshToken *string `db:"refresh_token" json:"refreshToken,omitempty"`
DeviceID *string `db:"device_id" json:"deviceId,omitempty"`
DeviceName *string `db:"device_name" json:"deviceName,omitempty"`
DeviceType *string `db:"device_type" json:"deviceType,omitempty"`
UserAgent *string `db:"user_agent" json:"userAgent,omitempty"`
IPAddress *string `db:"ip_address" json:"ipAddress,omitempty"`
Location *string `db:"location" json:"location,omitempty"`
Lat *float64 `db:"lat" json:"lat,omitempty"`
Lon *float64 `db:"lon" json:"lon,omitempty"`
IsActive bool `db:"is_active" json:"isActive"`
Status string `db:"status" json:"status"` // archived, deleted
ExpiresAt int64 `db:"expires_at" json:"expiresAt"`
RefreshExpiresAt *int64 `db:"refresh_expires_at" json:"refreshExpiresAt,omitempty"`
LastActivityAt int64 `db:"last_activity_at" json:"lastActivityAt"`
RevokedAt *int64 `db:"revoked_at" json:"revokedAt,omitempty"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
ArchivedAt int64 `db:"archived_at" json:"archivedAt"`
}
SessionArchive represents an archived session record
type User ¶
type User struct {
ID int64 `db:"id" json:"id"`
UUID uuid.UUID `db:"uuid" json:"uuid"`
Username string `db:"username" json:"username"`
Email *string `db:"email" json:"email,omitempty"`
Phone *string `db:"phone" json:"phone,omitempty"`
Name *string `db:"name" json:"name,omitempty"`
AvatarURL *string `db:"avatar_url" json:"avatarUrl,omitempty"`
PasswordHash string `db:"password_hash" json:"passwordHash"`
EmailVerified bool `db:"email_verified" json:"emailVerified"`
PhoneVerified bool `db:"phone_verified" json:"phoneVerified"`
IsActive bool `db:"is_active" json:"isActive"`
IsLocked bool `db:"is_locked" json:"isLocked"`
FailedLoginCount int `db:"failed_login_attempts" json:"failedLoginAttempts"`
LastLoginAt *int64 `db:"last_login_at" json:"lastLoginAt,omitempty"`
PasswordChangedAt int64 `db:"password_changed_at" json:"passwordChangedAt"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
UpdatedAt int64 `db:"updated_at" json:"updatedAt"`
}
func (*User) FromSignUpRequest ¶
func (u *User) FromSignUpRequest(req *openauth_v1.SignUpRequest, hashedPassword string) *User
func (*User) ToProtoGroupUser ¶
func (u *User) ToProtoGroupUser(assignedAt int64) *openauth_v1.GroupUser
ToProtoGroupUser converts a User DAO to protobuf GroupUser for group user listings
func (*User) ToProtoUser ¶
func (u *User) ToProtoUser() *openauth_v1.User
ToProtoUser converts a User DAO to protobuf User
type UserExternalAccount ¶
type UserExternalAccount struct {
ID int64 `db:"id" json:"id"`
UUID uuid.UUID `db:"uuid" json:"uuid"`
UserID int64 `db:"user_id" json:"userId"`
ProviderID int64 `db:"provider_id" json:"providerId"`
ExternalUserID string `db:"external_user_id" json:"externalUserId"`
ExternalUsername *string `db:"external_username" json:"externalUsername,omitempty"`
ExternalEmail *string `db:"external_email" json:"externalEmail,omitempty"`
AccessToken *string `db:"access_token" json:"accessToken,omitempty"`
RefreshToken *string `db:"refresh_token" json:"refreshToken,omitempty"`
TokenExpiresAt *int64 `db:"token_expires_at" json:"tokenExpiresAt,omitempty"`
ExternalData []byte `db:"external_data" json:"externalData,omitempty"` // JSONB → []byte or map[string]any
CreatedAt int64 `db:"created_at" json:"createdAt"`
UpdatedAt int64 `db:"updated_at" json:"updatedAt"`
}
UserExternalAccount represents linked external accounts for a user
type UserGroup ¶
type UserGroup struct {
ID int64 `db:"id" json:"id"`
UserID int64 `db:"user_id" json:"userId"`
GroupID int64 `db:"group_id" json:"groupId"`
AssignedBy int64 `db:"assigned_by" json:"assignedBy"`
ExpiresAt *int64 `db:"expires_at" json:"expiresAt,omitempty"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
User ↔ Group junction
type UserPermission ¶
type UserPermission struct {
ID int64 `db:"id" json:"id"`
UserID int64 `db:"user_id" json:"userId"`
PermissionID int64 `db:"permission_id" json:"permissionId"`
GrantedBy int64 `db:"granted_by" json:"grantedBy"`
ExpiresAt *int64 `db:"expires_at" json:"expiresAt,omitempty"`
CreatedAt int64 `db:"created_at" json:"createdAt"`
}
Direct User ↔ Permission mapping