rabbit

package module
v0.0.0-...-689fe1f Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2023 License: BSD-3-Clause Imports: 31 Imported by: 0

README

rabbit

Documentation

Index

Constants

View Source
const (
	UserField  = "_rabbit_uid"
	GroupField = "_rabbit_gid"
	DbField    = "_rabbit_db"
	TzField    = "_rabbit_tz"
)
View Source
const (
	LevelDebug = iota
	LevelInfo
	LevelWarning
	LevelError
)
View Source
const (
	// SigUserLogin: user *User, c *gin.Context
	SigUserLogin = "user.login"
	// SigUserLogout: user *User, c *gin.Context
	SigUserLogout = "user.logout"
	//SigUserCreate: user *User, c *gin.Context
	SigUserCreate = "user.create"
)
View Source
const CORS_ALLOW_ALL = "*"
View Source
const CORS_ALLOW_CREDENTIALS = "true"
View Source
const CORS_ALLOW_HEADERS = "" /* 137-byte string literal not displayed */
View Source
const CORS_ALLOW_METHODS = "POST, OPTIONS, GET, PUT, PATCH, DELETE"
View Source
const ENV_AUTH_PREFIX = "AUTH_PREFIX"
View Source
const ENV_DB_DRIVER = "DB_DRIVER"

DB

View Source
const ENV_DSN = "DSN"
View Source
const ENV_SALT = "PASSWORD_SALT"

User Password salt

View Source
const ENV_SESSION_SECRET = "SESSION_SECRET"
View Source
const KEY_USER_ACTIVATED = "USER_ACTIVATED"

User need to activate

View Source
const SessionField = "rabbit"

Gin session field

View Source
const XAuthTokenHeader = "X-Auth-Token"

Variables

View Source
var EnabledConsoleColor = false
View Source
var LogLevel = LevelDebug

Functions

func AddRoleForUser

func AddRoleForUser(db *gorm.DB, userId uint, roleId uint) error

func CORSEnabled

func CORSEnabled() gin.HandlerFunc

func CheckGroupInUse

func CheckGroupInUse(db *gorm.DB, groupID uint) (bool, error)

func CheckPassword

func CheckPassword(user *User, password string) bool

func CheckPermissionInUse

func CheckPermissionInUse(db *gorm.DB, permissionCode string) (bool, error)

func CheckRoleInUse

func CheckRoleInUse(db *gorm.DB, roleID uint) (bool, error)

func CheckRolePermission

func CheckRolePermission(db *gorm.DB, roleID uint, code string, policies ...string) (bool, error)

check

func CheckUserPermission

func CheckUserPermission(db *gorm.DB, userID uint, code string, policies ...string) (bool, error)

TODO: optimize

func CheckValue

func CheckValue(db *gorm.DB, key, defaultValue string)

CheckValue check if key exists, if not, set defaultValue

func CreateDatabaseInstance

func CreateDatabaseInstance(driver, dsn string, cfg *gorm.Config) (*gorm.DB, error)

func CurrentTimezone

func CurrentTimezone(c *gin.Context) *time.Location

func Debug

func Debug(v ...any)

func DeletePermissionForRole

func DeletePermissionForRole(db *gorm.DB, roleID uint, permissionCode string) error

func EncodeHashToken

func EncodeHashToken(user *User, timestamp int64, useLastlogin bool) (hash string)

ts-uid-token - base64(email$timestamp) + "-" + sha256(salt + logintimestamp + password + email$timestamp)

func Error

func Error(v ...any)

func Get

func Get[T any](db *gorm.DB, val *T, where ...any) (*T, error)

func GetBoolValue

func GetBoolValue(db *gorm.DB, key string) bool

func GetByID

func GetByID[T any, E ~uint | ~int | ~string](db *gorm.DB, id E, where ...any) (*T, error)

func GetEnv

func GetEnv(key string) string

func GetIntValue

func GetIntValue(db *gorm.DB, key string, defaultValue int) int

func GetValue

func GetValue(db *gorm.DB, key string) string

func HashPassword

func HashPassword(password string) string

func InTimezone

func InTimezone(c *gin.Context, timezone string)

func Info

func Info(v ...any)

func InitAuthHandler

func InitAuthHandler(prefix string, db *gorm.DB, r *gin.Engine)

func InitDatabase

func InitDatabase(driver, dsn string, logWrite io.Writer) *gorm.DB

func InitMigrate

func InitMigrate(db *gorm.DB) error

func InitRabbit

func InitRabbit(db *gorm.DB, r *gin.Engine)

InitRabbit start with default middleware and auth handler 1. migrate models 2. gin middleware 3. auth handler

func IsExistsByEmail

func IsExistsByEmail(db *gorm.DB, email string) bool

func Login

func Login(c *gin.Context, user *User)

func Logout

func Logout(c *gin.Context, user *User)

func LookupEnv

func LookupEnv(key string) (string, bool)

1. Check .env file 2. Check environment variables

func MakeMigrates

func MakeMigrates(db *gorm.DB, insts ...any) error

func RandNumberText

func RandNumberText(n int) string

func RandText

func RandText(n int) string

func SetLastLogin

func SetLastLogin(db *gorm.DB, user *User, lastIp string) error

func SetLogLevel

func SetLogLevel(level int)

func SetPassword

func SetPassword(db *gorm.DB, user *User, password string) (err error)

func SetValue

func SetValue(db *gorm.DB, key, value string)

func StructAsMap

func StructAsMap(form any, fields []string) (vals map[string]any)

func SwitchGroup

func SwitchGroup(c *gin.Context, group *Group)

func UpdateUserFields

func UpdateUserFields(db *gorm.DB, user *User, vals map[string]any) error

func Warning

func Warning(v ...any)

func WithCookieSession

func WithCookieSession(secret string) gin.HandlerFunc

func WithGormDB

func WithGormDB(db *gorm.DB) gin.HandlerFunc

func WithMemSession

func WithMemSession(secret string) gin.HandlerFunc

Types

type ChangePasswordForm

type ChangePasswordForm struct {
	Password string `json:"password" binding:"required"`
}

type Config

type Config struct {
	ID    uint   `json:"id" gorm:"primaryKey"`
	Key   string `json:"key" gorm:"size:128,uniqueIndex"`
	Value string `json:"value"`
	Desc  string `json:"desc" gorm:"size: 200"`
}

type Group

type Group struct {
	ID        uint      `json:"-" gorm:"primarykey"`
	CreatedAt time.Time `json:"createdAt"`
	UpdatedAt time.Time `json:"updatedAt"`

	Name  string `json:"name" gorm:"size:200;uniqueIndex"`
	Extra string `json:"extra"`

	Users []*User `json:"users" gorm:"many2many:group_members;"`
}

func CreateGroupByUser

func CreateGroupByUser(db *gorm.DB, userID uint, name string) (*Group, error)

func CurrentGroup

func CurrentGroup(c *gin.Context) *Group

gin handler

func GetFirstGroupByUser

func GetFirstGroupByUser(db *gorm.DB, userID uint) (*Group, error)

func GetGroupByID

func GetGroupByID(db *gorm.DB, groupID uint) (*Group, error)

group

func GetGroupByName

func GetGroupByName(db *gorm.DB, name string) (*Group, error)

func GetGroupsByUser

func GetGroupsByUser(db *gorm.DB, userID uint) ([]*Group, error)

type GroupMember

type GroupMember struct {
	UserID  uint `json:"-" gorm:"primarykey"`
	GroupID uint `json:"-" gorm:"primarykey"`

	User  User  `json:"user"`
	Group Group `json:"group"`
}

type LoginForm

type LoginForm struct {
	Email     string `json:"email"`
	Password  string `json:"password,omitempty"`
	Timezone  string `json:"timezone,omitempty"`
	Remember  bool   `json:"remember,omitempty"`
	AuthToken string `json:"token,omitempty"`
}

type Permission

type Permission struct {
	ID        uint      `json:"-" gorm:"primarykey"`
	CreatedAt time.Time `json:"createdAt"`
	UpdatedAt time.Time `json:"updatedAt"`

	Name string `json:"name" gorm:"uniqueIndex"`
	Code string `json:"code" gorm:"size:200;uniqueIndex"`
	P1   string `json:"p1" gorm:"size:200"`
	P2   string `json:"p2" gorm:"size:200"`
	P3   string `json:"p3" gorm:"size:200"`

	Groups []*Group `json:"groups" gorm:"many2many:group_permissions;"`
	Roles  []*Role  `json:"roles" gorm:"many2many:role_permissions;"`
}

func AddPermissionForRole

func AddPermissionForRole(db *gorm.DB, roleID uint, name, code string, policies ...string) (*Permission, error)

func GetPermissionByCode

func GetPermissionByCode(db *gorm.DB, code string) (*Permission, error)

func GetPermissionByID

func GetPermissionByID(db *gorm.DB, permissionID uint) (*Permission, error)

permission

func GetPermissionsByRole

func GetPermissionsByRole(db *gorm.DB, roleID uint) ([]*Permission, error)

type Profile

type Profile struct {
	Avatar  string         `json:"avatar,omitempty"`
	Gender  string         `json:"gender,omitempty"`
	City    string         `json:"city,omitempty"`
	Region  string         `json:"region,omitempty"`
	Country string         `json:"country,omitempty"`
	Extra   map[string]any `json:"extra,omitempty"`
}

func (*Profile) Scan

func (p *Profile) Scan(value interface{}) error

func (Profile) Value

func (p Profile) Value() (driver.Value, error)

type RegisterUserForm

type RegisterUserForm struct {
	Email       string `json:"email" binding:"required"`
	Password    string `json:"password" binding:"required"`
	DisplayName string `json:"displayName"`
	FirstName   string `json:"firstName"`
	LastName    string `json:"lastName"`
	Locale      string `json:"locale"`
	Timezone    string `json:"timezone"`
	Source      string `json:"source"`
}

type Role

type Role struct {
	ID        uint      `json:"-" gorm:"primarykey"`
	CreatedAt time.Time `json:"createdAt"`
	UpdatedAt time.Time `json:"updatedAt"`

	Name  string `json:"name" gorm:"size:50;uniqueIndex"`
	Label string `json:"label" gorm:"size:200;uniqueIndex"`

	Users       []*User       `json:"users" gorm:"many2many:user_roles;"`
	Permissions []*Permission `json:"permissions" gorm:"many2many:role_permissions;"`
}

func CreateRoleWithPermissions

func CreateRoleWithPermissions(db *gorm.DB, name string, permissions []*Permission) (*Role, error)

func GetRoleByID

func GetRoleByID(db *gorm.DB, roleID uint) (*Role, error)

role

func GetRoleByName

func GetRoleByName(db *gorm.DB, name string) (*Role, error)

func GetRolesByUser

func GetRolesByUser(db *gorm.DB, userID uint) ([]*Role, error)

type RolePermission

type RolePermission struct {
	RoleID       uint `json:"-" gorm:"primarykey"`
	PermissionID uint `json:"-" gorm:"primarykey"`

	Role       Role       `json:"role"`
	Permission Permission `json:"permission"`
}

type SigHandler

type SigHandler func(sender any, params ...any)

type Signals

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

func NewSignals

func NewSignals() *Signals

func Sig

func Sig() *Signals

func (*Signals) Connect

func (s *Signals) Connect(event string, handler SigHandler)

func (*Signals) DisConnect

func (s *Signals) DisConnect(event string)

func (*Signals) Emit

func (s *Signals) Emit(event string, sender any, params ...any)

type TestClient

type TestClient struct {
	CookieJar http.CookieJar
	Scheme    string
	Host      string
	// contains filtered or unexported fields
}

func NewTestClient

func NewTestClient(r http.Handler) (c *TestClient)

func (*TestClient) Call

func (c *TestClient) Call(method, path string, form any, result any) error

func (*TestClient) CallDelete

func (c *TestClient) CallDelete(path string, form, result any) error

func (*TestClient) CallGet

func (c *TestClient) CallGet(path string, form, result any) error

func (*TestClient) CallPatch

func (c *TestClient) CallPatch(path string, form, result any) error

func (*TestClient) CallPost

func (c *TestClient) CallPost(path string, form any, result any) error

func (*TestClient) CallPut

func (c *TestClient) CallPut(path string, form, result any) error

func (*TestClient) Get

Get return *httptest.ResponseRecoder

func (*TestClient) Post

func (c *TestClient) Post(method, path string, body []byte) *httptest.ResponseRecorder

Post return *httptest.ResponseRecoder

func (*TestClient) SendReq

func (c *TestClient) SendReq(path string, req *http.Request) *httptest.ResponseRecorder

type User

type User struct {
	ID        uint      `json:"-" gorm:"primarykey"`
	CreatedAt time.Time `json:"-"`
	UpdatedAt time.Time `json:"-"`

	Email       string     `json:"email" gorm:"size:128;uniqueIndex"`
	Password    string     `json:"-" gorm:"size:128"`
	Phone       string     `json:"phone,omitempty" gorm:"size:64;index"`
	FirstName   string     `json:"firstName,omitempty" gorm:"size:128"`
	LastName    string     `json:"lastName,omitempty" gorm:"size:128"`
	DisplayName string     `json:"displayName,omitempty" gorm:"size:128"`
	IsSuperUser bool       `json:"-"`
	IsStaff     bool       `json:"-"`
	Enabled     bool       `json:"-"`
	Activated   bool       `json:"-"`
	LastLogin   *time.Time `json:"lastLogin,omitempty"`
	LastLoginIP string     `json:"-" gorm:"size:128"`

	Source    string   `json:"-" gorm:"size:64;index"`
	Locale    string   `json:"locale,omitempty" gorm:"size:20"`
	Timezone  string   `json:"timezone,omitempty" gorm:"size:200"`
	Profile   *Profile `json:"profile,omitempty"`
	AuthToken string   `json:"token,omitempty" gorm:"-"`

	Groups []*Group `json:"groups" gorm:"many2many:group_members;"`
	Roles  []*Role  `json:"roles" gorm:"many2many:user_roles;"`
}

func CreateUser

func CreateUser(db *gorm.DB, email, password string) (*User, error)

func CurrentUser

func CurrentUser(c *gin.Context) *User

func DecodeHashToken

func DecodeHashToken(db *gorm.DB, hash string, useLastLogin bool) (user *User, err error)

func GetUserByEmail

func GetUserByEmail(db *gorm.DB, email string) (user *User, err error)

func GetUserByUID

func GetUserByUID(db *gorm.DB, userID uint) (*User, error)

func GetUsersByGroup

func GetUsersByGroup(db *gorm.DB, groupID uint) ([]*User, error)

user

func GetUsersByRole

func GetUsersByRole(db *gorm.DB, roleID uint) ([]*User, error)

func (*User) GetProfile

func (u *User) GetProfile() Profile

func (*User) GetVisibleName

func (u *User) GetVisibleName() string

type UserRole

type UserRole struct {
	UserID uint `json:"-" gorm:"primarykey"`
	RoleID uint `json:"-" gorm:"primarykey"`

	User User `json:"user"`
	Role Role `json:"role"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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