auth

package
v1.6.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 10, 2023 License: BSD-1-Clause Imports: 30 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	AUTH_APP_NAME = "auth"
	LOGIN_URL     string
	LOGOUT_URL    string
)
View Source
var (
	SESSION_COOKIE_NAME         = "session_id"
	DEFAULT_PASSWORD_VALIDATORS = validators.New(
		validators.PasswordStrength(8, 32, false),
	)
)
View Source
var (
	TokenExpiration     = 24 * time.Hour
	MessageTokenInvalid = "Invalid password reset token."
	MessageTokenExpired = "Password reset token has expired."
)
View Source
var (

	// Signals for users.
	SIGNAL_BEFORE_USER_CREATE = user_signal_pool.Get("user.before_create") // -> Send(auth.User) (Returned error unused!)
	SIGNAL_BEFORE_USER_UPDATE = user_signal_pool.Get("user.before_update") // -> Send(auth.User) (Returned error unused!)
	SIGNAL_AFTER_USER_CREATE  = user_signal_pool.Get("user.after_create")  // -> Send(auth.User) (Returned error unused!)
	SIGNAL_AFTER_USER_UPDATE  = user_signal_pool.Get("user.after_update")  // -> Send(auth.User) (Returned error unused!)

	// Signals for groups.
	SIGNAL_BEFORE_GROUP_CREATE = group_signal_pool.Get("group.before_create") // -> Send(auth.Group) (Returned error unused!)
	SIGNAL_BEFORE_GROUP_UPDATE = group_signal_pool.Get("group.before_update") // -> Send(auth.Group) (Returned error unused!)
	SIGNAL_AFTER_GROUP_CREATE  = group_signal_pool.Get("group.after_create")  // -> Send(auth.Group) (Returned error unused!)
	SIGNAL_AFTER_GROUP_UPDATE  = group_signal_pool.Get("group.after_update")  // -> Send(auth.Group) (Returned error unused!)

	// Signals for permissions.
	SIGNAL_BEFORE_PERMISSION_CREATE = permissions_signal_pool.Get("permission.before_create") // -> Send(auth.Permission) (Returned error unused!)
	SIGNAL_BEFORE_PERMISSION_UPDATE = permissions_signal_pool.Get("permission.before_update") // -> Send(auth.Permission) (Returned error unused!)
	SIGNAL_AFTER_PERMISSION_CREATE  = permissions_signal_pool.Get("permission.after_create")  // -> Send(auth.Permission) (Returned error unused!)
	SIGNAL_AFTER_PERMISSION_UPDATE  = permissions_signal_pool.Get("permission.after_update")  // -> Send(auth.Permission) (Returned error unused!)

	// Deletions only require the ID of the object.
	SIGNAL_BEFORE_USER_DELETE       = id_signal_pool.Get("user.before_delete")       // -> Send(int64) (Returned error unused!)
	SIGNAL_BEFORE_GROUP_DELETE      = id_signal_pool.Get("group.before_delete")      // -> Send(int64) (Returned error unused!)
	SIGNAL_BEFORE_PERMISSION_DELETE = id_signal_pool.Get("permission.before_delete") // -> Send(int64) (Returned error unused!)
	SIGNAL_AFTER_USER_DELETE        = id_signal_pool.Get("user.after_delete")        // -> Send(int64) (Returned error unused!)
	SIGNAL_AFTER_GROUP_DELETE       = id_signal_pool.Get("group.after_delete")       // -> Send(int64) (Returned error unused!)
	SIGNAL_AFTER_PERMISSION_DELETE  = id_signal_pool.Get("permission.after_delete")  // -> Send(int64) (Returned error unused!)

)
View Source
var CHECKER = func(hashedPassword, password string) error {
	return bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password))
}
View Source
var CreateSuperUserCommand = &flag.Command{
	Name: "createsuperuser",
	Description: `Create a super user for the application.
This superuser can be used to log in to the admin panel.
A superuser can also create other users, and set their superuser status.`,
	Handler: createSuperUserFunc,
	Default: false,
}
View Source
var HASHER = func(b string) (string, error) {
	var bytes, err = bcrypt.GenerateFromPassword([]byte(b), bcrypt.DefaultCost)
	return string(bytes), err
}
View Source
var IS_HASHED = func(hashedPassword string) bool {
	return isBcryptHash(string(hashedPassword))
}

This function likely cannot 100% guarantee that the password is hashed. It might be susceptible to false positives or meticulously crafted user input.

View Source
var (
	USER_MODEL_LOGIN_FIELD string = "Username"
)

Functions

func AddUserMiddleware

func AddUserMiddleware() router.Middleware

Add a user to a request, if one exists in the session.

func CheckPassword added in v1.6.2

func CheckPassword(u *User, password string) error

func CreateAdminFromTerminal added in v1.6.2

func CreateAdminFromTerminal() error

func GeneratePasswordResetToken

func GeneratePasswordResetToken(user *User) (string, error)

Generate a password reset token for a user. This token can be used to get the user with VerifyPasswordResetToken. The token will expire after 24 hours. The token will also expire if the user's password is changed.

func LoginForm

func LoginForm(inputClass, labelClass string) *forms.Form

func LoginRequiredURLMiddleware

func LoginRequiredURLMiddleware(redirectURL string) router.Middleware

Middleware which checks if the user is authenticated.

func LoginUnsafe

func LoginUnsafe(r *request.Request, user *User)

Log the user in, without doing any of the validation.

This is useful for when you have already done the validation (After registering for example).

func Logout

func Logout(r *request.Request) error

Log the user out and set the user inside of the request to the unauthenticated user.

func LogoutRequiredURLMiddleware

func LogoutRequiredURLMiddleware(redirectURL string) router.Middleware

Middleware which checks if the user is not authenticated.

func OnRegister added in v1.6.2

func OnRegister(name string, fn func(*User) error)

Register a function to run on register.

Default functions which are registered:

  • "ValidEmail"
  • "ValidUsername"
  • "ValidFirstName"
  • "ValidLastName"
  • "ValidPassword"
  • "UserDoesNotExist" (Checks for duplicates in the database by username or email.)
  • "SetUserActive" (Sets IsActive to be true)

func RegisterForm added in v1.6.2

func RegisterForm(autologin, requireNames bool, inputClass, labelClass string) *forms.Form

func ResetPassword

func ResetPassword(user *User, oldPassword, newPassword string) error

ResetPassword resets a password for a given user, if the old password is correct. Only updates the password column in the database. This is a convenience method.

func SetPassword added in v1.6.2

func SetPassword(u *User, password string) error

func SetUserActive added in v1.6.2

func SetUserActive(u *User) error

func UnRegister added in v1.6.2

func UnRegister(name string)

Un-register a function to run on register.

func UserDoesNotExist added in v1.6.2

func UserDoesNotExist(u *User) error

func UserFromRequestPure

func UserFromRequestPure(r *request.Request) request.User

func UserToRequest

func UserToRequest(r *request.Request, user *User)

Set the user inside of the request.

func UsernameFromEmail added in v1.6.2

func UsernameFromEmail(email string) string

Get a username from an email address.

func ValidEmail added in v1.6.2

func ValidEmail(u *User) error

func ValidFirstName added in v1.6.2

func ValidFirstName(u *User) error

func ValidLastName added in v1.6.2

func ValidLastName(u *User) error

func ValidPassword added in v1.6.2

func ValidPassword(u *User) error

func ValidUsername added in v1.6.2

func ValidUsername(u *User) error

Types

type AuthApp added in v1.6.2

type AuthApp struct {
	Queries AuthQuerier
	Cache   *client.Cache
	Logger  request.Logger
}
var Auth *AuthApp

func Initialize added in v1.6.2

func Initialize(db DBTX) *AuthApp

type AuthQuerier added in v1.6.2

type AuthQuerier interface {
	// Groups
	CountGroups(ctx context.Context) (int64, error)
	GetAllGroups(ctx context.Context) (*linkedlist.Doubly[Group], error)
	CreateGroup(ctx context.Context, arg *Group) error
	UpdateGroup(ctx context.Context, arg *Group) error
	DeleteGroup(ctx context.Context, id int64) error
	GetGroupByID(ctx context.Context, id int64) (*Group, error)
	GetGroupsWithPagination(ctx context.Context, arg PaginationParams) (*linkedlist.Doubly[Group], error)
	GroupsNotInUser(ctx context.Context, userID int64) (*linkedlist.Doubly[Group], error)
	// Permissions
	CountPermissions(ctx context.Context) (int64, error)
	GetAllPermissions(ctx context.Context) (*linkedlist.Doubly[Permission], error)
	CreatePermission(ctx context.Context, arg *Permission) error
	UpdatePermission(ctx context.Context, arg *Permission) error
	DeletePermission(ctx context.Context, id int64) error
	GetPermissionByID(ctx context.Context, id int64) (*Permission, error)
	GetPermissionByName(ctx context.Context, name string) (Permission, error)
	GetPermissionsByUserID(ctx context.Context, userID int64) (*linkedlist.Doubly[Permission], error)
	GetPermissionsByUserIDAndPermissionNames(ctx context.Context, arg UserPermissionParams) (*linkedlist.Doubly[Permission], error)
	GetPermissionsWithPagination(ctx context.Context, arg PaginationParams) (*linkedlist.Doubly[Permission], error)
	PermissionsNotInGroup(ctx context.Context, groupID int64) (*linkedlist.Doubly[Permission], error)
	PermissionsNotInUser(ctx context.Context, userID int64) (*linkedlist.Doubly[Permission], error)
	GetPermissionsByGroupID(ctx context.Context, groupID int64) (*linkedlist.Doubly[Permission], error)
	// Users
	CountUsers(ctx context.Context) (int64, error)
	GetAllUsers(ctx context.Context) (*linkedlist.Doubly[User], error)
	CreateUser(ctx context.Context, arg *User) error
	UpdateUser(ctx context.Context, arg *User) error
	DeleteUser(ctx context.Context, id int64) error
	GetUserByEmail(ctx context.Context, email string) (*User, error)
	GetUserByID(ctx context.Context, id int64) (*User, error)
	GetUserByUsername(ctx context.Context, username string) (*User, error)
	GetUsersByPermissionID(ctx context.Context, permissionID int64) (*linkedlist.Doubly[User], error)
	GetUsersWithPagination(ctx context.Context, arg PaginationParams) (*linkedlist.Doubly[User], error)
	GetGroupsByUserID(ctx context.Context, userID int64) (*linkedlist.Doubly[Group], error)
	// m2m
	CheckUserHasPermissions(ctx context.Context, arg UserPermissionParams) (bool, error)
	AddPermissionToGroup(ctx context.Context, groupID, permissionID int64) error
	AddUserToGroup(ctx context.Context, userID, groupID int64) error
	OverrideUserGroups(ctx context.Context, userID int64, groupIDs []int64) error
	OverrideGroupPermissions(ctx context.Context, groupID int64, permissionIDs []int64) error
	ListPermissionsInGroup(ctx context.Context, groupID int64) (*linkedlist.Doubly[Permission], error)
	ListUsersInGroup(ctx context.Context, groupID int64) (*linkedlist.Doubly[User], error)
	RemovePermissionFromGroup(ctx context.Context, groupID, permissionID int64) error
	RemoveUserFromGroup(ctx context.Context, userID, groupID int64) error
}

func NewQueries added in v1.6.2

func NewQueries(db DBTX) AuthQuerier

type DBTX added in v1.6.2

type DBTX interface {
	ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
	PrepareContext(context.Context, string) (*sql.Stmt, error)
	QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error)
	QueryRowContext(context.Context, string, ...interface{}) *sql.Row
}

type EmailField added in v1.6.2

type EmailField fields.StringField

func (*EmailField) FormValues added in v1.6.2

func (i *EmailField) FormValues(v []string) error

func (EmailField) InputHTML added in v1.6.2

func (i EmailField) InputHTML(_ *request.Request, name string, tags tags.TagMap) interfaces.Element

func (EmailField) LabelHTML added in v1.6.2

func (i EmailField) LabelHTML(_ *request.Request, name string, display_text string, tags tags.TagMap) interfaces.Element

func (*EmailField) Scan added in v1.6.2

func (i *EmailField) Scan(src interface{}) error

func (EmailField) Validate added in v1.6.2

func (i EmailField) Validate() error

func (EmailField) Value added in v1.6.2

func (i EmailField) Value() (driver.Value, error)

type Group

type Group struct {
	ID          int64            `admin-form:"readonly;disabled;omit_on_create;" gorm:"-" json:"id"`
	Name        string           `gorm:"-" json:"name"`
	Description fields.TextField `admin-form:"textarea;" gorm:"-" json:"description"`

	// Non-SQLC fields
	Permissions      []Permission                     `admin-form:"-" gorm:"-" json:"permissions"`
	PermissionSelect fields.DoubleMultipleSelectField `admin-form:"-" gorm:"-" json:"permission_select"`
	Users            []User                           `admin-form:"-" gorm:"-" json:"users"`
}

func (*Group) Delete

func (g *Group) Delete() error

func (*Group) GetFromStringID added in v1.6.2

func (p *Group) GetFromStringID(id string) (*Group, error)

func (*Group) GetGroupSelectLabel added in v1.6.2

func (g *Group) GetGroupSelectLabel() string

func (*Group) GetPermissionSelectOptions added in v1.6.2

func (g *Group) GetPermissionSelectOptions() (thisOptions, otherOptions []interfaces.Option)

func (*Group) List added in v1.6.2

func (u *Group) List(page, each_page int) ([]*Group, int64, error)

func (*Group) Save

func (g *Group) Save(creating bool) error

func (*Group) String

func (g *Group) String() string

func (*Group) StringID added in v1.6.2

func (p *Group) StringID() string

type GroupPermission added in v1.6.2

type GroupPermission struct {
	GroupID      int64 `json:"group_id" gorm:"primary_key"`
	PermissionID int64 `json:"permission_id" gorm:"primary_key"`
}

type PaginationParams added in v1.6.2

type PaginationParams struct {
	Limit  int32 `json:"limit"`
	Offset int32 `json:"offset"`
}

type PasswordField added in v1.6.2

type PasswordField string

func (*PasswordField) FormValues added in v1.6.2

func (i *PasswordField) FormValues(v []string) error

func (PasswordField) InputHTML added in v1.6.2

func (i PasswordField) InputHTML(_ *request.Request, name string, tags tags.TagMap) interfaces.Element

func (PasswordField) LabelHTML added in v1.6.2

func (i PasswordField) LabelHTML(_ *request.Request, name string, display_text string, tags tags.TagMap) interfaces.Element

func (*PasswordField) Scan added in v1.6.2

func (i *PasswordField) Scan(src interface{}) error

func (PasswordField) Value added in v1.6.2

func (i PasswordField) Value() (driver.Value, error)

type Permission

type Permission struct {
	ID          int64            `admin-form:"readonly;disabled;omit_on_create;" gorm:"-" json:"id"`
	Name        string           `gorm:"-" json:"name"`
	Description fields.TextField `admin-form:"textarea;" gorm:"-" json:"description"`

	// Non-SQLC fields
	Groups []Group `gorm:"-" json:"groups"`
	Users  []User  `gorm:"-" json:"users"`
}

func NewPermission

func NewPermission(typ string, s any) *Permission

Return a new permission for a given object.

The permission name will be in the format of:

<typ>_<pkgPath>_<lowercase type name>

If the object is not in a package, the permission name will be in the format of:

<typ>_<lowercase type name>

func PermAll

func PermAll(s any) []*Permission

Returns all the permissions for a given object.

func PermChain

func PermChain(permissions ...any) []*Permission

Chain permissions together

func PermCreate

func PermCreate(s any) *Permission

Retrieve the CREATE permission for a given object

func PermDelete

func PermDelete(s any) *Permission

Retrieve the DELETE permission for a given object

func PermList

func PermList(s any) *Permission

Retrieve the LIST permission for a given object

func PermUpdate

func PermUpdate(s any) *Permission

Retrieve the UPDATE permission for a given object

func PermView

func PermView(s any) *Permission

Retrieve the VIEW/READ permission for a given object

func SuperPerm

func SuperPerm() *Permission

func (*Permission) Delete added in v1.6.2

func (p *Permission) Delete() error

func (*Permission) GetFromStringID added in v1.6.2

func (p *Permission) GetFromStringID(id string) (*Permission, error)

func (*Permission) List added in v1.6.2

func (u *Permission) List(page, each_page int) ([]*Permission, int64, error)

func (*Permission) Save

func (p *Permission) Save(creating bool) error

func (*Permission) String

func (p *Permission) String() string

func (*Permission) StringID added in v1.6.2

func (p *Permission) StringID() string

type PermissionMap

type PermissionMap map[string]*Permission

func NewPermissionMap

func NewPermissionMap(s any) PermissionMap

func (PermissionMap) All

func (pm PermissionMap) All() []*Permission

func (PermissionMap) Create

func (pm PermissionMap) Create() *Permission

func (PermissionMap) Delete

func (pm PermissionMap) Delete() *Permission

func (PermissionMap) Get

func (pm PermissionMap) Get(name string) *Permission

func (PermissionMap) List

func (pm PermissionMap) List() *Permission

func (PermissionMap) Update

func (pm PermissionMap) Update() *Permission

func (PermissionMap) View

func (pm PermissionMap) View() *Permission

type Queries added in v1.6.2

type Queries struct {
	// contains filtered or unexported fields
}

func (*Queries) AddPermissionToGroup added in v1.6.2

func (q *Queries) AddPermissionToGroup(ctx context.Context, groupID, permissionID int64) error

func (*Queries) AddPermissionsToGroup added in v1.6.2

func (q *Queries) AddPermissionsToGroup(ctx context.Context, groupID int64, permissionIds []int64) error

func (*Queries) AddUserToGroup added in v1.6.2

func (q *Queries) AddUserToGroup(ctx context.Context, userID, groupID int64) error

func (*Queries) AddUserToGroups added in v1.6.2

func (q *Queries) AddUserToGroups(ctx context.Context, userID int64, groupIds []int64) error

func (*Queries) CheckUserHasPermissions added in v1.6.2

func (q *Queries) CheckUserHasPermissions(ctx context.Context, arg UserPermissionParams) (bool, error)

func (*Queries) CountGroups added in v1.6.2

func (q *Queries) CountGroups(ctx context.Context) (int64, error)

func (*Queries) CountPermissions added in v1.6.2

func (q *Queries) CountPermissions(ctx context.Context) (int64, error)

func (*Queries) CountUsers added in v1.6.2

func (q *Queries) CountUsers(ctx context.Context) (int64, error)

func (*Queries) CreateGroup added in v1.6.2

func (q *Queries) CreateGroup(ctx context.Context, arg *Group) error

func (*Queries) CreatePermission added in v1.6.2

func (q *Queries) CreatePermission(ctx context.Context, arg *Permission) error

func (*Queries) CreateUser added in v1.6.2

func (q *Queries) CreateUser(ctx context.Context, arg *User) error

func (*Queries) DeleteGroup added in v1.6.2

func (q *Queries) DeleteGroup(ctx context.Context, id int64) error

func (*Queries) DeleteGroupPermissions added in v1.6.2

func (q *Queries) DeleteGroupPermissions(ctx context.Context, groupID int64) error

func (*Queries) DeletePermission added in v1.6.2

func (q *Queries) DeletePermission(ctx context.Context, id int64) error

func (*Queries) DeleteUser added in v1.6.2

func (q *Queries) DeleteUser(ctx context.Context, id int64) error

func (*Queries) DeleteUserGroups added in v1.6.2

func (q *Queries) DeleteUserGroups(ctx context.Context, userID int64) error

func (*Queries) GetAllGroups added in v1.6.2

func (q *Queries) GetAllGroups(ctx context.Context) (*linkedlist.Doubly[Group], error)

func (*Queries) GetAllPermissions added in v1.6.2

func (q *Queries) GetAllPermissions(ctx context.Context) (*linkedlist.Doubly[Permission], error)

func (*Queries) GetAllUsers added in v1.6.2

func (q *Queries) GetAllUsers(ctx context.Context) (*linkedlist.Doubly[User], error)

func (*Queries) GetGroupByID added in v1.6.2

func (q *Queries) GetGroupByID(ctx context.Context, id int64) (*Group, error)

func (*Queries) GetGroupsByUserID added in v1.6.2

func (q *Queries) GetGroupsByUserID(ctx context.Context, userID int64) (*linkedlist.Doubly[Group], error)

func (*Queries) GetGroupsWithPagination added in v1.6.2

func (q *Queries) GetGroupsWithPagination(ctx context.Context, arg PaginationParams) (*linkedlist.Doubly[Group], error)

func (*Queries) GetPermissionByID added in v1.6.2

func (q *Queries) GetPermissionByID(ctx context.Context, id int64) (*Permission, error)

func (*Queries) GetPermissionByName added in v1.6.2

func (q *Queries) GetPermissionByName(ctx context.Context, name string) (Permission, error)

func (*Queries) GetPermissionsByGroupID added in v1.6.2

func (q *Queries) GetPermissionsByGroupID(ctx context.Context, groupID int64) (*linkedlist.Doubly[Permission], error)

func (*Queries) GetPermissionsByUserID added in v1.6.2

func (q *Queries) GetPermissionsByUserID(ctx context.Context, userID int64) (*linkedlist.Doubly[Permission], error)

func (*Queries) GetPermissionsByUserIDAndPermissionNames added in v1.6.2

func (q *Queries) GetPermissionsByUserIDAndPermissionNames(ctx context.Context, arg UserPermissionParams) (*linkedlist.Doubly[Permission], error)

func (*Queries) GetPermissionsWithPagination added in v1.6.2

func (q *Queries) GetPermissionsWithPagination(ctx context.Context, arg PaginationParams) (*linkedlist.Doubly[Permission], error)

func (*Queries) GetUserByEmail added in v1.6.2

func (q *Queries) GetUserByEmail(ctx context.Context, email string) (*User, error)

func (*Queries) GetUserByID added in v1.6.2

func (q *Queries) GetUserByID(ctx context.Context, id int64) (*User, error)

func (*Queries) GetUserByUsername added in v1.6.2

func (q *Queries) GetUserByUsername(ctx context.Context, username string) (*User, error)

func (*Queries) GetUsersByPermissionID added in v1.6.2

func (q *Queries) GetUsersByPermissionID(ctx context.Context, permissionID int64) (*linkedlist.Doubly[User], error)

func (*Queries) GetUsersWithPagination added in v1.6.2

func (q *Queries) GetUsersWithPagination(ctx context.Context, arg PaginationParams) (*linkedlist.Doubly[User], error)

func (*Queries) GroupsNotInUser added in v1.6.2

func (q *Queries) GroupsNotInUser(ctx context.Context, userID int64) (*linkedlist.Doubly[Group], error)

func (*Queries) ListPermissionsInGroup added in v1.6.2

func (q *Queries) ListPermissionsInGroup(ctx context.Context, groupID int64) (*linkedlist.Doubly[Permission], error)

func (*Queries) ListUsersInGroup added in v1.6.2

func (q *Queries) ListUsersInGroup(ctx context.Context, groupID int64) (*linkedlist.Doubly[User], error)

func (*Queries) OverrideGroupPermissions added in v1.6.2

func (q *Queries) OverrideGroupPermissions(ctx context.Context, groupID int64, permissionIDs []int64) error

func (*Queries) OverrideUserGroups added in v1.6.2

func (q *Queries) OverrideUserGroups(ctx context.Context, userID int64, groupIDs []int64) error

func (*Queries) PermissionsNotInGroup added in v1.6.2

func (q *Queries) PermissionsNotInGroup(ctx context.Context, groupID int64) (*linkedlist.Doubly[Permission], error)

func (*Queries) PermissionsNotInUser added in v1.6.2

func (q *Queries) PermissionsNotInUser(ctx context.Context, userID int64) (*linkedlist.Doubly[Permission], error)

func (*Queries) RemovePermissionFromGroup added in v1.6.2

func (q *Queries) RemovePermissionFromGroup(ctx context.Context, groupID, permID int64) error

func (*Queries) RemoveUserFromGroup added in v1.6.2

func (q *Queries) RemoveUserFromGroup(ctx context.Context, userID, groupID int64) error

func (*Queries) UpdateGroup added in v1.6.2

func (q *Queries) UpdateGroup(ctx context.Context, arg *Group) error

func (*Queries) UpdatePermission added in v1.6.2

func (q *Queries) UpdatePermission(ctx context.Context, arg *Permission) error

func (*Queries) UpdateUser added in v1.6.2

func (q *Queries) UpdateUser(ctx context.Context, arg *User) error

func (*Queries) WithTx added in v1.6.2

func (q *Queries) WithTx(tx *sql.Tx) *Queries

type User

type User struct {
	ID              int64         `admin-form:"readonly;disabled;omit_on_create;" gorm:"-" json:"id"`
	CreatedAt       time.Time     `gorm:"-" json:"created_at"`
	UpdatedAt       time.Time     `gorm:"-" json:"updated_at"`
	Email           EmailField    `gorm:"-" json:"email"`
	Username        string        `gorm:"-" json:"username"`
	Password        PasswordField `gorm:"-" json:"password"`
	FirstName       string        `gorm:"-" json:"first_name"`
	LastName        string        `gorm:"-" json:"last_name"`
	IsAdministrator bool          `gorm:"-" json:"is_administrator"`
	IsActive        bool          `gorm:"-" json:"is_active"`

	// Non-SQLC fields
	IsLoggedIn    bool                             `json:"-" gorm:"-"`
	GroupSelect   fields.DoubleMultipleSelectField `gorm:"-" json:"group_select"`
	UploadAnImage fields.FileField                 `gorm:"-" json:"image"`
	Groups        []Group                          `json:"groups" gorm:"-"`
	Permissions   []Permission                     `json:"permissions" gorm:"-"`
}

func CreateAdminUser

func CreateAdminUser(email, username, first_name, last_name, password string) (*User, error)

Create a super user This runs in a CLI to ask for input It will skip most of the validation.

func Login

func Login(r *request.Request, login, password string) (user *User, err error)

Log the user in and set the user inside of the request.

If the authentication was not successful, return the unauthenticated user, and an error.

Authentication for the login_column_name is case insensitive!

func NewUser

func NewUser(login string) *User

Return a new unauthenticated user with the login field set.

func Register

func Register(email, username, first_name, last_name, password string) (*User, error)

Register a user.

func TokenResetPassword

func TokenResetPassword(tokenString, newPassword string) (*User, error)

Very similar to VerifyPasswordResetToken, but also changes the user's password. Only updates the password column in the database. This is a convenience method.

func UnAuthenticatedUser

func UnAuthenticatedUser() *User

func UserFromRequest

func UserFromRequest(r *request.Request) *User

Get the user from a request.

func VerifyPasswordResetToken

func VerifyPasswordResetToken(tokenString string) (*User, error)

Beware! This returns the authenticated user. You can use this to reset the user's password.

token = ...
user, err := Manager.VerifyPasswordResetToken(token)
if err == nil {
	user.ChangePassword("new password")
}

func (*User) Delete

func (u *User) Delete() error

func (*User) GetFromStringID added in v1.6.2

func (p *User) GetFromStringID(id string) (*User, error)

func (*User) GetGroupSelectLabel added in v1.6.2

func (u *User) GetGroupSelectLabel() string

func (*User) GetGroupSelectOptions added in v1.6.2

func (u *User) GetGroupSelectOptions() (thisOptions, otherOptions []interfaces.Option)

func (*User) HasPermissions added in v1.6.2

func (u *User) HasPermissions(permissions ...string) bool

Validate if the user has the given permissions

It will not fetch any permissions from the database.

func (*User) IsAdmin

func (u *User) IsAdmin() bool

func (*User) IsAuthenticated

func (u *User) IsAuthenticated() bool

func (*User) List added in v1.6.2

func (u *User) List(page, each_page int) ([]*User, int64, error)

func (*User) LoginField

func (u *User) LoginField() string

Get the value of the currently set login field.

func (*User) Save added in v1.6.2

func (u *User) Save(creating bool) error

func (*User) Scan added in v1.6.2

func (u *User) Scan(value interface{}) error

Scanner and valuer for the User struct

func (*User) SetLoginField

func (u *User) SetLoginField(value string) error

Set the value of the current field used to log a user in.

func (*User) String

func (u *User) String() string

Return the string representation of the user.

func (*User) StringID added in v1.6.2

func (p *User) StringID() string

func (*User) Value added in v1.6.2

func (u *User) Value() (driver.Value, error)

type UserGroup added in v1.6.2

type UserGroup struct {
	UserID  int64 `json:"user_id" gorm:"primary_key"`
	GroupID int64 `json:"group_id" gorm:"primary_key"`
}

type UserPermissionParams added in v1.6.2

type UserPermissionParams struct {
	UserID          int64    `json:"user_id"`
	Permissionnames []string `json:"permissionnames"`
}

type WithDB added in v1.6.2

type WithDB struct {
	DB  AuthQuerier
	CTX context.Context
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL