Documentation ¶
Overview ¶
Package permissionsql provides a way to keeping track of users, login states and permissions.
Index ¶
- Constants
- Variables
- func PermissionDenied(w http.ResponseWriter, req *http.Request)
- func ValidUsernamePassword(username, password string) error
- type Permissions
- func (perm *Permissions) AddAdminPath(prefix string)
- func (perm *Permissions) AddPublicPath(prefix string)
- func (perm *Permissions) AddUserPath(prefix string)
- func (perm *Permissions) Clear()
- func (perm *Permissions) DenyFunction() http.HandlerFunc
- func (perm *Permissions) Rejected(w http.ResponseWriter, req *http.Request) bool
- func (perm *Permissions) ServeHTTP(w http.ResponseWriter, req *http.Request, next http.HandlerFunc)
- func (perm *Permissions) SetAdminPath(pathPrefixes []string)
- func (perm *Permissions) SetDenyFunction(f http.HandlerFunc)
- func (perm *Permissions) SetPublicPath(pathPrefixes []string)
- func (perm *Permissions) SetUserPath(pathPrefixes []string)
- func (perm *Permissions) UserState() pinterface.IUserState
- type UserState
- func (state *UserState) AddUnconfirmed(username, confirmationCode string)
- func (state *UserState) AddUser(username, password, email string)
- func (state *UserState) AdminRights(req *http.Request) bool
- func (state *UserState) AllUnconfirmedUsernames() ([]string, error)
- func (state *UserState) AllUsernames() ([]string, error)
- func (state *UserState) AlreadyHasConfirmationCode(confirmationCode string) bool
- func (state *UserState) BooleanField(username, fieldname string) bool
- func (state *UserState) ClearCookie(w http.ResponseWriter)
- func (state *UserState) Close()
- func (state *UserState) Confirm(username string)
- func (state *UserState) ConfirmUserByConfirmationCode(confirmationcode string) error
- func (state *UserState) ConfirmationCode(username string) (string, error)
- func (state *UserState) CookieSecret() string
- func (state *UserState) CookieTimeout(username string) int64
- func (state *UserState) CorrectPassword(username, password string) bool
- func (state *UserState) Creator() pinterface.ICreator
- func (state *UserState) Email(username string) (string, error)
- func (state *UserState) FindUserByConfirmationCode(confirmationcode string) (string, error)
- func (state *UserState) GenerateUniqueConfirmationCode() (string, error)
- func (state *UserState) HasUser(username string) bool
- func (state *UserState) HashPassword(username, password string) string
- func (state *UserState) Host() pinterface.IHost
- func (state *UserState) IsAdmin(username string) bool
- func (state *UserState) IsConfirmed(username string) bool
- func (state *UserState) IsLoggedIn(username string) bool
- func (state *UserState) Login(w http.ResponseWriter, username string) error
- func (state *UserState) Logout(username string)
- func (state *UserState) MarkConfirmed(username string)
- func (state *UserState) PasswordAlgo() string
- func (state *UserState) PasswordHash(username string) (string, error)
- func (state *UserState) RemoveAdminStatus(username string)
- func (state *UserState) RemoveUnconfirmed(username string)
- func (state *UserState) RemoveUser(username string)
- func (state *UserState) SetAdminStatus(username string)
- func (state *UserState) SetBooleanField(username, fieldname string, val bool)
- func (state *UserState) SetCookieSecret(cookieSecret string)
- func (state *UserState) SetCookieTimeout(cookieTime int64)
- func (state *UserState) SetLoggedIn(username string)
- func (state *UserState) SetLoggedOut(username string)
- func (state *UserState) SetMinimumConfirmationCodeLength(length int)
- func (state *UserState) SetPassword(username, password string)
- func (state *UserState) SetPasswordAlgo(algorithm string) error
- func (state *UserState) SetUsernameCookie(w http.ResponseWriter, username string) error
- func (state *UserState) UserRights(req *http.Request) bool
- func (state *UserState) Username(req *http.Request) string
- func (state *UserState) UsernameCookie(req *http.Request) (string, error)
- func (state *UserState) Users() pinterface.IHashMap
Constants ¶
const (
// Version number. Stable API within major version numbers.
Version = 2.1
)
Variables ¶
var ( ErrCookieGetUsername = errors.New("Could not retrieve the username from browser cookie") ErrCookieEmptyUsername = errors.New("Can't set cookie for empty username") ErrCookieUserMissing = errors.New("Can't store cookie for non-existsing user") ErrOutOfConfirmationCodes = errors.New("Too many generated confirmation codes are not unique") ErrAllUsersConfirmedAlready = errors.New("All existing users are already confirmed") ErrConfirmationCodeExpired = errors.New("The confirmation code is no longer valid") ErrMissingUserAtConfirm = errors.New("The user that is to be confirmed no longer exists") ErrInvalidCharacters = errors.New("Only letters, numbers and underscore are allowed in usernames") ErrUsernameAsPassword = errors.New("Username and password must be different, try another password") )
Functions ¶
func PermissionDenied ¶
func PermissionDenied(w http.ResponseWriter, req *http.Request)
The default "permission denied" http handler.
func ValidUsernamePassword ¶
Check that the given username and password are different. Also check if the chosen username only contains letters, numbers and/or underscore. Use the "CorrectPassword" function for checking if the password is correct.
Types ¶
type Permissions ¶
type Permissions struct {
// contains filtered or unexported fields
}
The structure that keeps track of the permissions for various path prefixes
func New ¶
func New() (*Permissions, error)
Initialize a Permissions struct with all the default settings. This will also connect to the database host at port 3306.
func NewPermissions ¶
func NewPermissions(state *UserState) *Permissions
Initialize a Permissions struct with the given UserState and a few default paths for admin/user/public path prefixes.
func NewWithConf ¶
func NewWithConf(connectionString string) (*Permissions, error)
Initialize a Permissions struct with a database connection string
func NewWithDSN ¶
func NewWithDSN(connectionString string, database_name string) (*Permissions, error)
Initialize a Permissions struct with a dsn
func (*Permissions) AddAdminPath ¶
func (perm *Permissions) AddAdminPath(prefix string)
Add an url path prefix that is a page for the logged in administrators
func (*Permissions) AddPublicPath ¶
func (perm *Permissions) AddPublicPath(prefix string)
Add an url path prefix that is a public page
func (*Permissions) AddUserPath ¶
func (perm *Permissions) AddUserPath(prefix string)
Add an url path prefix that is a page for the logged in users
func (*Permissions) DenyFunction ¶
func (perm *Permissions) DenyFunction() http.HandlerFunc
Get the current http.HandlerFunc for when permissions are denied
func (*Permissions) Rejected ¶
func (perm *Permissions) Rejected(w http.ResponseWriter, req *http.Request) bool
Check if a given request should be rejected.
func (*Permissions) ServeHTTP ¶
func (perm *Permissions) ServeHTTP(w http.ResponseWriter, req *http.Request, next http.HandlerFunc)
Middleware handler (compatible with Negroni)
func (*Permissions) SetAdminPath ¶
func (perm *Permissions) SetAdminPath(pathPrefixes []string)
Set all url path prefixes that are for the logged in administrator pages
func (*Permissions) SetDenyFunction ¶
func (perm *Permissions) SetDenyFunction(f http.HandlerFunc)
Specify the http.HandlerFunc for when the permissions are denied
func (*Permissions) SetPublicPath ¶
func (perm *Permissions) SetPublicPath(pathPrefixes []string)
Set all url path prefixes that are for the public pages
func (*Permissions) SetUserPath ¶
func (perm *Permissions) SetUserPath(pathPrefixes []string)
Set all url path prefixes that are for the logged in user pages
func (*Permissions) UserState ¶
func (perm *Permissions) UserState() pinterface.IUserState
Retrieve the UserState struct
type UserState ¶
type UserState struct {
// contains filtered or unexported fields
}
func NewUserState ¶
Create a new *UserState that can be used for managing users. connectionString may be on the form "username:password@host:port/database". If randomseed is true, the random number generator will be seeded after generating the cookie secret (true is a good default value).
func NewUserStateSimple ¶
Create a new *UserState that can be used for managing users. The random number generator will be seeded after generating the cookie secret. A Host* for the local MariaDB/MySQL server will be created.
func NewUserStateWithDSN ¶
func NewUserStateWithDSN(connectionString string, database_name string, randomseed bool) (*UserState, error)
Create a new *UserState that can be used for managing users. connectionString may be on the form "username:password@host:port/database". If randomseed is true, the random number generator will be seeded after generating the cookie secret (true is a good default value).
func (*UserState) AddUnconfirmed ¶
Add a user that is registered but not confirmed.
func (*UserState) AddUser ¶
Creates a user and hashes the password, does not check for rights. The given data must be valid.
func (*UserState) AdminRights ¶
Check if the current user is logged in and has administrator rights.
func (*UserState) AllUnconfirmedUsernames ¶
Get all registered users that are not yet confirmed.
func (*UserState) AllUsernames ¶
Get a list of all usernames.
func (*UserState) AlreadyHasConfirmationCode ¶
Goes through all the confirmationCodes of all the unconfirmed users and checks if this confirmationCode already is in use.
func (*UserState) BooleanField ¶
Return the boolean value for a given username and fieldname. If the user or field is missing, false will be returned. Useful for states where it makes sense that the returned value is not true unless everything is in order.
func (*UserState) ClearCookie ¶
func (state *UserState) ClearCookie(w http.ResponseWriter)
Try to clear the user cookie by setting it to expired. Some browsers *may* be configured to keep cookies even after this.
func (*UserState) Confirm ¶
Remove the username from the list of unconfirmed users and mark the user as confirmed.
func (*UserState) ConfirmUserByConfirmationCode ¶
Take a confirmation code and mark the corresponding unconfirmed user as confirmed.
func (*UserState) ConfirmationCode ¶
Get the confirmation code for a specific user.
func (*UserState) CookieSecret ¶
CookieSecret returns the current cookie secret
func (*UserState) CookieTimeout ¶
Get how long a login cookie should last, in seconds.
func (*UserState) CorrectPassword ¶
Check if a password is correct. username is needed because it is part of the hash.
func (*UserState) Creator ¶
func (state *UserState) Creator() pinterface.ICreator
Return a struct for creating datastructures
func (*UserState) FindUserByConfirmationCode ¶
Given a unique confirmation code, find the corresponding username.
func (*UserState) GenerateUniqueConfirmationCode ¶
Generate a unique confirmation code that can be used for confirming users.
func (*UserState) HashPassword ¶
Hash the password (takes a username as well, it can be used for salting).
func (*UserState) IsConfirmed ¶
Check if the given username is confirmed.
func (*UserState) IsLoggedIn ¶
Checks if the given username is logged in.
func (*UserState) Login ¶
func (state *UserState) Login(w http.ResponseWriter, username string) error
Convenience function for logging a user in and storing the username in a cookie. Returns an error if the cookie could not be set.
func (*UserState) MarkConfirmed ¶
Mark a user as confirmed.
func (*UserState) PasswordAlgo ¶
PasswordAlgo returns the current password hashing algorithm.
func (*UserState) PasswordHash ¶
Get the password hash for the given username.
func (*UserState) RemoveAdminStatus ¶
Mark user as a regular user.
func (*UserState) RemoveUnconfirmed ¶
Remove a user that is registered but not confirmed.
func (*UserState) RemoveUser ¶
Remove user and login status.
func (*UserState) SetAdminStatus ¶
Mark user as an administrator.
func (*UserState) SetBooleanField ¶
Store a boolean value for the given username and custom fieldname.
func (*UserState) SetCookieSecret ¶
SetCookieSecret sets the current cookie secret
func (*UserState) SetCookieTimeout ¶
Set how long a login cookie should last, in seconds.
func (*UserState) SetLoggedIn ¶
Mark the user as logged in. Use the Login function instead, unless cookies are not involved.
func (*UserState) SetLoggedOut ¶
Mark the user as logged out.
func (*UserState) SetMinimumConfirmationCodeLength ¶
Set the minimum length of the user confirmation code. The default is 20.
func (*UserState) SetPassword ¶
SetPassword sets/changes the password for a user. Does not take a password hash, will hash the password string.
func (*UserState) SetPasswordAlgo ¶
Set the password hashing algorithm that should be used. The default is "bcrypt+". Possible values are:
bcrypt -> Store and check passwords with the bcrypt hash. sha256 -> Store and check passwords with the sha256 hash. bcrypt+ -> Store passwords with bcrypt, but check with both bcrypt and sha256, for backwards compatibility with old passwords that has been stored as sha256.
func (*UserState) SetUsernameCookie ¶
func (state *UserState) SetUsernameCookie(w http.ResponseWriter, username string) error
Store the given username in a cookie in the browser, if possible. The user must exist.
func (*UserState) UserRights ¶
Check if the current user is logged in and has user rights.
func (*UserState) Username ¶
Convenience function that will return a username (from the browser cookie) or an empty string.
func (*UserState) UsernameCookie ¶
Retrieve the username that is stored in a cookie in the browser, if available.
func (*UserState) Users ¶
func (state *UserState) Users() pinterface.IHashMap
Get the users HashMap.