Documentation
¶
Index ¶
- func JWTValidMethods() jwt.ParserOption
- func Middleware(factory Factory) echo.MiddlewareFunc
- type Config
- type Context
- type Factory
- type KeyService
- type NilSigninService
- type Option
- type PasswordHasher
- type PasswordRule
- type RequestPasswordResetResponse
- type RequestPasswordResetTransaction
- type SigninResponse
- type SigninService
- type SigninTransaction
- type Steranko
- func (s *Steranko) ApproveRequest(ctx echo.Context) error
- func (s *Steranko) ComparePassword(plaintext string, hashedValue string) (matches bool, update bool)
- func (s *Steranko) Context(ctx echo.Context) *Context
- func (s *Steranko) CreateJWT(claims jwt.Claims) (string, error)
- func (s *Steranko) GetAuthorization(request *http.Request) (jwt.Claims, error)
- func (s *Steranko) Middleware(next echo.HandlerFunc) echo.HandlerFunc
- func (s *Steranko) PostPasswordToken(ctx echo.Context) error
- func (s *Steranko) PostPasswordUpdate(ctx echo.Context) error
- func (s *Steranko) SetCookie(ctx echo.Context, claims jwt.Claims) error
- func (s *Steranko) SetPassword(user User, plaintext string) error
- func (s *Steranko) SignOut(ctx echo.Context) bool
- func (s *Steranko) SigninFormPost(ctx echo.Context) (User, error)
- func (s *Steranko) SigninUser(ctx echo.Context, user User) error
- func (s *Steranko) ValidatePassword(plaintext string) error
- func (s *Steranko) WithOptions(options ...Option)
- type UpdatePasswordResponse
- type UpdatePasswordTransaction
- type User
- type UserService
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func JWTValidMethods ¶ added in v0.22.0
func JWTValidMethods() jwt.ParserOption
JWTValidmethods returns a jwt.ParserOption that restricts the JWT parser to only accept secure encrytption methods defined inthe golang-jwt package. https://pkg.go.dev/github.com/golang-jwt/jwt/v5@v5.2.1#WithValidMethods
func Middleware ¶ added in v0.4.2
func Middleware(factory Factory) echo.MiddlewareFunc
Middleware is a standalone middleware that works for multi-tenant environments, where you may need to use a factory to load the specific steranko settings depending on the domain being called.
Types ¶
type Factory ¶ added in v0.4.2
type Factory interface {
// Steranko retrieves the correct instance to use
// for this domain or returns an error
Steranko(ctx echo.Context) (*Steranko, error)
}
Factory is used in multi-tenant environments to locate the steranko instance that will be used (based on the context)
type KeyService ¶ added in v0.3.0
type KeyService interface {
// GetCurrentKey returns the current JWT key in use by the server
GetCurrentKey() (string, any, error)
// FindKey returns the key associated with the given JWT token.
FindKey(*jwt.Token) (any, error)
}
KeyService is an interface that the calling application must implement in order to use Steranko. The KeyService manages the encryption keys that sign and verify JWT tokens.
type NilSigninService ¶ added in v0.24.0
type NilSigninService struct{}
NilSigninService is an empty implementation of SigninService that does nothing. It can be used as a default or placeholder implementation when no actual signin service is needed.
func (NilSigninService) IsSigninLocked ¶ added in v0.24.0
func (s NilSigninService) IsSigninLocked(request *http.Request, username string) bool
func (NilSigninService) SigninFailure ¶ added in v0.24.0
func (s NilSigninService) SigninFailure(request *http.Request, username string)
func (NilSigninService) SigninSuccess ¶ added in v0.24.0
func (s NilSigninService) SigninSuccess(request *http.Request, username string)
type Option ¶ added in v0.16.0
type Option func(*Steranko)
func WithConfigFile ¶ added in v0.16.0
WithConfigFile loads the values from a configuration file into this Steranko instance.
func WithPasswordHasher ¶ added in v0.16.0
func WithPasswordHasher(hashers ...PasswordHasher) Option
WithPasswordHashers sets the hashing algorithm(s) to use when setting/validating passwords. The first hasher in the list is used to create new passwords. All subsequent hashers are "deprecated" and will be upgrated to the primary algorithm the next time the user signs in.
func WithPasswordRules ¶ added in v0.16.0
func WithPasswordRules(passwordRules ...PasswordRule) Option
WithPasswordRules appends the provided password rules the the list used when setting new passwords.
func WithPasswordSchema ¶ added in v0.16.0
WithPasswordSchema sets the provided schema.Schema as the validation function when setting new passwords. Default is (minimum length: 8 characters)
func WithSigninService ¶ added in v0.24.0
func WithSigninService(service SigninService) Option
WithSigninService sets the SigninService to use when tracking signin successes and failures. This related to the "MaxSigninFailures" and "SigninLockoutMinutes" options, which lock out users after too many failed signin attempts.
type PasswordHasher ¶ added in v0.16.0
type PasswordHasher interface {
// ID returns a string that uniquely identifies this plugin.
ID() string
// HashPassword returns a hashed value that can be (safely?) stored in a database
HashPassword(plaintext string) (ciphertext string, error error)
// CompareHashedValue checks that a plaintext value matches a stored ciphertext value.
// OK returns TRUE if the values match. Rehash returns TRUE if the hashing criteria has been updated
// and a new hashed value should be stored in its place.
CompareHashedPassword(plaintext string, ciphertext string) (OK bool, Rehash bool)
}
PasswordHasher handles all encryption functions for passwords.
type PasswordRule ¶ added in v0.16.0
type PasswordRule interface {
// ID returns a string that uniquely identifies this plugin.
ID() string
// PasswordRuleDescription returns a map of language tags to human-readable strings that explain how the password can be used
PasswordRuleDescription(language string) string
// ValidatePassword returns TRUE if the password can be used in this system. If not, it returns FALSE, and a message explaining why
ValidatePassword(password string) (OK bool, errorMessage string)
}
PasswordRule is used to verify if a password meets the password complexity criteria for this system.
type RequestPasswordResetResponse ¶ added in v0.2.0
type RequestPasswordResetResponse struct {
}
type RequestPasswordResetTransaction ¶
type RequestPasswordResetTransaction struct {
Username string `json:"username" form:"userame"` // public username of the person requesting the reset.
}
type SigninResponse ¶ added in v0.2.0
SigninResponse includes all the information returned by Steranko after a signin request.
type SigninService ¶ added in v0.24.0
type SigninService interface {
// SigninSuccess reports a successful signin to the database.
// This method SHOULD reset the signin failure count for the user.
SigninSuccess(request *http.Request, username string)
// SigninFailure reports a failed signin to the database.
// This method SHOULD increment the signin failure count for the user.
SigninFailure(request *http.Request, username string)
// IsSigninLocked returns TRUE if the user is currently locked out due to too many signin failures.
IsSigninLocked(request *http.Request, username string) bool
}
SigninService wraps all of the functions that must be provided to Steranko by your application.
type SigninTransaction ¶
type SigninTransaction struct {
Username string `json:"username" form:"username"` // public username for this person
Password string `json:"password" form:"password"` // private (hashed?) password for this person
TwoFactorCode string `json:"twoFactorCode" form:"twoFactorCode"` // [Optional] 2FA code to send to the 2FA plugin
}
SigninTransaction includes all of the information that MUST be posted to Sterenko in order to sign in to the system.
type Steranko ¶
type Steranko struct {
// contains filtered or unexported fields
}
Steranko contains all required configuration information for this library.
func New ¶
func New(userService UserService, keyService KeyService, options ...Option) *Steranko
New returns a fully initialized Steranko instance, with HandlerFuncs that support all of your user authentication and authorization needs.
func (*Steranko) ApproveRequest ¶ added in v0.4.2
ApproveRequest applies filtering rules to requests and blocks any that should not be allowed.
func (*Steranko) ComparePassword ¶ added in v0.16.0
func (s *Steranko) ComparePassword(plaintext string, hashedValue string) (matches bool, update bool)
comparePassword tries to validate the plaintext password and hashedValue using each of the password hashers in sequence. If the password matches THE PRIMARY hasher, then this returns TRUE, FALSE. If the password matches any of THE BACKUP hashers, then this returns TRUE, TRUE. If the password does not match any of the hashers then this returns FALSE, FALSE.
func (*Steranko) Context ¶ added in v0.22.1
Context returns a new steranko.Context that wraps the provided echo.Context and embeds this Steranko instance.
func (*Steranko) CreateJWT ¶ added in v0.16.0
CreateJWT generates a new JWT token using the specified claims. Sternako writes this JWT token using the HS512 signing method, and the signing key that is generated by the embedded KeyService.
func (*Steranko) GetAuthorization ¶ added in v0.16.0
GetAuthorization retrieves the JWT token claims from the request.
func (*Steranko) Middleware ¶ added in v0.3.0
func (s *Steranko) Middleware(next echo.HandlerFunc) echo.HandlerFunc
Middleware wraps the original echo context with the Steranko context.
func (*Steranko) PostPasswordToken ¶
PostPasswordToken implements the http.HandlerFunc signature, and should be wired in to your REST API to allow users to tell the server that they forgot their password. This should initiate some way for the system to send them a one time token to create a new password.
func (*Steranko) PostPasswordUpdate ¶
PostPasswordUpdate implements the http.HandlerFunc signature, and should be wired in to your REST API to allow users to update their passwords.
func (*Steranko) SetCookie ¶ added in v0.22.0
SetCookie writes a Cookie / JWT token to the User's browser using the provided claims.
func (*Steranko) SetPassword ¶ added in v0.17.0
SetPassword hashes the provided plaintext password and sets it on the User.
func (*Steranko) SignOut ¶ added in v0.3.2
SignOut implements the echo.HandlerFunc, and can be used directly in your REST API, or can be wrapped by your own custom function. It returns TRUE if the user had a backup cookie that has been restored, and FALSE if the user is now completely signed out.
func (*Steranko) SigninFormPost ¶ added in v0.22.0
SigninFormPost reads the data from a form post and signs in the user using their username/password. If the signin is successful it automatically sets the "Authorization" cookie in the user's browser. If unsuccessful, an error is returned to the caller.
func (*Steranko) SigninUser ¶ added in v0.22.0
SigninUser writes a cookie to the User's browser that signs them into the server.
func (*Steranko) ValidatePassword ¶
ValidatePassword checks a password against all system requirements
func (*Steranko) WithOptions ¶ added in v0.16.0
WithOptions applies the provided Option functions to this Steranko instance.
type UpdatePasswordResponse ¶ added in v0.2.0
type UpdatePasswordResponse struct {
}
type User ¶
type User interface {
GetUsername() string // Returns the username of the User
GetPassword() string // Returns the password of the User
SetUsername(username string) // Sets the username of the User
SetPassword(ciphertext string) // Sets the password of the User
}
User interface wraps all of the functions that Steranko needs to authorize a user of the system. This is done so that Steranko can be retrofitted on to your existing data objects. Just implement this interface, and a CRUD service, and you're all set.
type UserService ¶
type UserService interface {
// New creates a newly initialized User that is ready to use
New() User
// Load retrieves a single User from the database
Load(username string, user User) error
// Save inserts/updates a single User in the database
Save(user User, comment string) error
// Delete removes a single User from the database
Delete(user User, comment string) error
// RequestPasswordReset handles the application-specific details of
// delivering a password reset message to the user.
RequestPasswordReset(user User) error
// NewClaims generates an empty jwt.Claims object.
NewClaims() jwt.Claims
// Claims generates a jwt.Claims object for the given user.
Claims(user User) (jwt.Claims, error)
// Close cleans up any connections opened by the service.
Close()
}
UserService wraps all of the functions that must be provided to Steranko by your application.
Source Files
¶
- config.go
- context.go
- factory.go
- keyService.go
- middleware.go
- option.go
- passwordHasher.go
- passwordRule.go
- requests.go
- signService.go
- steranko_.go
- steranko_middleware.go
- steranko_postPasswordToken.go
- steranko_postPasswordUpdate.go
- steranko_signin.go
- steranko_signout.go
- steranko_utils.go
- tools.go
- transactions.go
- user.go
- userService.go