Documentation
¶
Index ¶
- Variables
- func UIModules() []any
- type AuthMode
- type Config
- type Identity
- type LANIP
- type LoginData
- type Module
- type OAuthProvider
- type OAuthState
- type OAuthUserInfo
- type PasswordData
- type Permission
- type ProfileData
- type RegisterData
- type Role
- type RolePermission
- type SecurityEvent
- type SecurityEventType
- type Session
- type User
- type UserRole
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrInvalidCredentials = fmt.Err("access", "denied") // EN: Access Denied / ES: Acceso Denegado ErrSuspended = fmt.Err("user", "suspended") // EN: User Suspended / ES: Usuario Suspendido ErrEmailTaken = fmt.Err("email", "registered") // EN: Email Registered / ES: Correo electrónico Registrado ErrWeakPassword = fmt.Err("password", "weak") // EN: Password Weak / ES: Contraseña Débil ErrSessionExpired = fmt.Err("token", "expired") // EN: Token Expired / ES: Token Expirado ErrNotFound = fmt.Err("user", "not", "found") // EN: User Not Found / ES: Usuario No Encontrado ErrProviderNotFound = fmt.Err("provider", "not", "found") // EN: Provider Not Found / ES: Proveedor No Encontrado ErrInvalidOAuthState = fmt.Err("state", "invalid") // EN: State Invalid / ES: Estado Inválido ErrCannotUnlink = fmt.Err("identity", "cannot", "unlink") // EN: Identity Cannot Unlink / ES: Identidad No puede Desvincular ErrInvalidRUT = fmt.Err("rut", "invalid") // EN: Rut Invalid / ES: Rut Inválido ErrRUTTaken = fmt.Err("rut", "registered") // EN: Rut Registered / ES: Rut Registrado ErrIPTaken = fmt.Err("ip", "registered") // EN: Ip Registered / ES: Ip Registrado )
View Source
var Identity_ = struct { TableName string ID string UserID string Provider string ProviderID string Email string CreatedAt string }{ TableName: "user_identities", ID: "id", UserID: "user_id", Provider: "provider", ProviderID: "provider_id", Email: "email", CreatedAt: "created_at", }
View Source
var LANIP_ = struct { TableName string ID string UserID string IP string Label string CreatedAt string }{ TableName: "user_lan_ips", ID: "id", UserID: "user_id", IP: "ip", Label: "label", CreatedAt: "created_at", }
View Source
var OAuthState_ = struct { TableName string State string Provider string ExpiresAt string CreatedAt string }{ TableName: "user_oauth_states", State: "state", Provider: "provider", ExpiresAt: "expires_at", CreatedAt: "created_at", }
View Source
var Permission_ = struct { TableName string ID string Name string Resource string Action string }{ TableName: "rbac_permissions", ID: "id", Name: "name", Resource: "resource", Action: "action", }
View Source
var RolePermission_ = struct { TableName string RoleID string PermissionID string }{ TableName: "rbac_role_permissions", RoleID: "role_id", PermissionID: "permission_id", }
View Source
var Role_ = struct { TableName string ID string Code string Name string Description string }{ TableName: "rbac_roles", ID: "id", Code: "code", Name: "name", Description: "description", }
View Source
var Session_ = struct { TableName string ID string UserID string ExpiresAt string IP string UserAgent string CreatedAt string }{ TableName: "user_sessions", ID: "id", UserID: "user_id", ExpiresAt: "expires_at", IP: "ip", UserAgent: "user_agent", CreatedAt: "created_at", }
View Source
var UserRole_ = struct { TableName string UserID string RoleID string }{ TableName: "rbac_user_roles", UserID: "user_id", RoleID: "role_id", }
Functions ¶
Types ¶
type AuthMode ¶ added in v0.0.17
type AuthMode uint8
AuthMode selects the session strategy.
const ( // AuthModeCookie stores a session ID in an HttpOnly cookie. // Stateful: requires user_sessions table. Supports immediate revocation. AuthModeCookie AuthMode = iota // default // AuthModeJWT stores a signed JWT in an HttpOnly cookie. // Stateless: no DB lookup per request. No immediate revocation. // Ideal for SPA/PWA and multi-server deployments. AuthModeJWT // AuthModeBearer reads a signed JWT from the "Authorization: Bearer <token>" header. // Stateless: for API clients (MCP servers, IDEs, LLMs) that cannot use cookies. // Structurally implements mcp.Authorizer via InjectIdentity + CanExecute methods. // Requires JWTSecret. AuthModeBearer )
type Config ¶ added in v0.0.2
type Config struct {
AuthMode AuthMode // default: AuthModeCookie
// Shared by all modes
CookieName string // default: "session"
TokenTTL int // default: 86400 (seconds). Session TTL in cookie mode, JWT expiry in JWT mode.
// Required when AuthMode == AuthModeJWT or AuthMode == AuthModeBearer.
// Also required to call GenerateAPIToken regardless of AuthMode.
JWTSecret []byte
TrustProxy bool
OAuthProviders []OAuthProvider
// Optional hook for receiving security events (e.g. tampering, brute force)
OnSecurityEvent func(SecurityEvent)
// OnPasswordValidate is called by SetPassword before hashing.
// Return a non-nil error to reject the password.
// If nil, only the built-in len >= 8 check applies.
OnPasswordValidate func(password string) error
}
type Identity ¶ added in v0.0.2
type Identity struct {
ID string `json:"id" db:"pk"`
UserID string `json:"user_id" db:"ref=users"`
Provider string `json:"provider"`
ProviderID string `json:"provider_id"`
Email string `json:"email,omitempty"`
CreatedAt int64 `json:"created_at"`
}
Identity
func ReadOneIdentity ¶ added in v0.0.6
type LANIP ¶ added in v0.0.6
type LANIP struct {
ID string `json:"id" db:"pk"`
UserID string `json:"user_id" db:"ref=users"`
IP string `json:"ip"`
Label string `json:"label"`
CreatedAt int64 `json:"created_at"`
}
LANIP
type LoginData ¶ added in v0.0.2
LoginData is validated by LoginModule on both frontend and backend.
type Module ¶ added in v0.0.17
type Module struct{}
Module is a WASM stub. The real implementation lives in user_back.go.
type OAuthProvider ¶ added in v0.0.2
type OAuthState ¶ added in v0.0.6
type OAuthState struct {
State string `json:"state" db:"pk"`
Provider string `json:"provider"`
ExpiresAt int64 `json:"expires_at"`
CreatedAt int64 `json:"created_at"`
}
OAuthState
func ReadAllOAuthState ¶ added in v0.0.6
func ReadAllOAuthState(qb *orm.QB) ([]*OAuthState, error)
func ReadOneOAuthState ¶ added in v0.0.6
func ReadOneOAuthState(qb *orm.QB, model *OAuthState) (*OAuthState, error)
func (*OAuthState) FormName ¶ added in v0.0.28
func (m *OAuthState) FormName() string
func (*OAuthState) Pointers ¶ added in v0.0.6
func (m *OAuthState) Pointers() []any
func (*OAuthState) Schema ¶ added in v0.0.6
func (m *OAuthState) Schema() []fmt.Field
func (OAuthState) TableName ¶ added in v0.0.6
func (OAuthState) TableName() string
type OAuthUserInfo ¶ added in v0.0.2
type PasswordData ¶ added in v0.0.2
PasswordData is validated by ProfileModule (password change sub-form).
func (*PasswordData) Pointers ¶ added in v0.0.28
func (m *PasswordData) Pointers() []any
func (*PasswordData) Schema ¶ added in v0.0.28
func (m *PasswordData) Schema() []fmt.Field
type Permission ¶ added in v0.0.6
type Permission struct {
ID string `json:"id" db:"pk"`
Name string `json:"name"`
Resource string `json:"resource"`
Action string `json:"action"`
}
Permission
func ReadAllPermission ¶ added in v0.0.6
func ReadAllPermission(qb *orm.QB) ([]*Permission, error)
func ReadOnePermission ¶ added in v0.0.6
func ReadOnePermission(qb *orm.QB, model *Permission) (*Permission, error)
func (*Permission) FormName ¶ added in v0.0.28
func (m *Permission) FormName() string
func (*Permission) Pointers ¶ added in v0.0.6
func (m *Permission) Pointers() []any
func (*Permission) Schema ¶ added in v0.0.6
func (m *Permission) Schema() []fmt.Field
func (Permission) TableName ¶ added in v0.0.6
func (Permission) TableName() string
type ProfileData ¶ added in v0.0.2
ProfileData is validated by ProfileModule (name/phone update).
func (*ProfileData) Pointers ¶ added in v0.0.28
func (m *ProfileData) Pointers() []any
func (*ProfileData) Schema ¶ added in v0.0.28
func (m *ProfileData) Schema() []fmt.Field
type RegisterData ¶ added in v0.0.2
RegisterData is validated by RegisterModule.
func (*RegisterData) Pointers ¶ added in v0.0.28
func (m *RegisterData) Pointers() []any
func (*RegisterData) Schema ¶ added in v0.0.28
func (m *RegisterData) Schema() []fmt.Field
type Role ¶ added in v0.0.6
type Role struct {
ID string `json:"id" db:"pk"`
Code string `json:"code"`
Name string `json:"name"`
Description string `json:"description"`
}
Role
type RolePermission ¶ added in v0.0.6
type RolePermission struct {
RoleID string `json:"role_id"`
PermissionID string `json:"permission_id"`
}
RolePermission
func ReadAllRolePermission ¶ added in v0.0.6
func ReadAllRolePermission(qb *orm.QB) ([]*RolePermission, error)
func ReadOneRolePermission ¶ added in v0.0.6
func ReadOneRolePermission(qb *orm.QB, model *RolePermission) (*RolePermission, error)
func (*RolePermission) FormName ¶ added in v0.0.28
func (m *RolePermission) FormName() string
func (*RolePermission) Pointers ¶ added in v0.0.6
func (m *RolePermission) Pointers() []any
func (*RolePermission) Schema ¶ added in v0.0.6
func (m *RolePermission) Schema() []fmt.Field
func (RolePermission) TableName ¶ added in v0.0.6
func (RolePermission) TableName() string
type SecurityEvent ¶ added in v0.0.22
type SecurityEventType ¶ added in v0.0.22
type SecurityEventType uint8
const ( EventJWTTampered SecurityEventType = iota // ValidateJWT: HMAC mismatch EventOAuthReplay // consumeState: state already consumed (2nd use) EventOAuthExpiredState // consumeState: state found but past ExpiresAt EventOAuthCrossProvider // consumeState: provider mismatch (state preserved) EventIPMismatch // LoginLAN: IP not registered EventNonActiveAccess // Login/LoginLAN: status != "active" EventAccessDenied // AccessCheck: RBAC denied with valid session )
type Session ¶ added in v0.0.2
type Session struct {
ID string `json:"id" db:"pk"`
UserID string `json:"user_id" db:"ref=users"`
ExpiresAt int64 `json:"expires_at"`
IP string `json:"ip,omitempty"`
UserAgent string `json:"user_agent,omitempty"`
CreatedAt int64 `json:"created_at"`
}
Session
func ReadOneSession ¶ added in v0.0.6
type User ¶
type User struct {
ID string `json:"id" db:"pk"`
Email string `json:"email,omitempty" db:"unique"`
Name string `json:"name"`
Phone string `json:"phone,omitempty"`
Status string `json:"status"` // "active", "suspended"
CreatedAt int64 `json:"created_at"`
Roles []Role `json:"roles,omitempty" db:"-"`
Permissions []Permission `json:"permissions,omitempty" db:"-"`
}
User
Source Files
¶
Click to show internal directories.
Click to hide internal directories.