goadmin

package module
v0.0.3 Latest Latest
Warning

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

Go to latest
Published: Dec 15, 2019 License: MIT Imports: 30 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultAssetsPath = "./assets"
	DefaultViewsPath  = "./views"
	DefaultLimit      = 20

	Version = "v0.0.2"

	UserContextKey = "goadmin_user"
	DataContextKey = "goadmin_data"

	AuthToken TokenType = "auth"

	UserNew     UserStatus = "new"
	UserActive  UserStatus = "active"
	UserBlocked UserStatus = "blocked"

	RoleOwner UserRole = "owner"
	RoleRoot  UserRole = "root"
	RoleUser  UserRole = "user"
)

Variables

View Source
var (
	DashboardURL = "/"
	LoginURL     = "/login"
	LogoutURL    = "/logout"

	UserListURL   = "/users"
	UserCreateURL = "/users/create"
	UserUpdateURL = "/users/:id/update"
	UserDeleteURL = "/users/:id/delete"

	AccessCookieName = "auth_token"
)
View Source
var (
	ErrInvalidPort          = errors.New("invalid http port")
	ErrRequiredDB           = errors.New("required database connection instance")
	ErrContextNotConfigured = errors.New("admin context not configured")
	ErrRequiredUserName     = errors.New("required user name")
	ErrRequiredUserLogin    = errors.New("required user login")
	ErrInvalidUserLogin     = errors.New("invalid user login")
	ErrInvalidUserStatus    = errors.New("invalid user status")
	ErrRequiredUserID       = errors.New("required user id")
	ErrRequiredUserPassword = errors.New("required user password")
	ErrWrongPassword        = errors.New("wrong password")
	ErrUserNotFound         = errors.New("user not found")
	ErrInvalidUserRole      = errors.New("invalid user role")
	ErrTokenNotFound        = errors.New("token not found")
	ErrTokenExpired         = errors.New("token expired")
)

Functions

func AuthByCookie

func AuthByCookie(handlerFunc echo.HandlerFunc) echo.HandlerFunc

func Dashboard

func Dashboard(ctx *AdminContext) error

func HTMLError

func HTMLError(e error, ctx echo.Context)

func JSONError

func JSONError(e error, ctx echo.Context)

func Login

func Login(ctx *AdminContext) error

func Logout

func Logout(ctx *AdminContext) error

func Path

func Path(paths ...string) string

func UserCreate added in v0.0.2

func UserCreate(ctx *AdminContext) error

func UserDelete added in v0.0.2

func UserDelete(ctx *AdminContext) error

func UserList added in v0.0.2

func UserList(ctx *AdminContext) error

func UserUpdate added in v0.0.2

func UserUpdate(ctx *AdminContext) error

func WrapHandler

func WrapHandler(handleFunc AdminHandler) echo.HandlerFunc

Types

type Admin

type Admin struct {
	*Config
	// contains filtered or unexported fields
}

func New

func New(config Config) (*Admin, error)

func (*Admin) Admin added in v0.0.3

func (a *Admin) Admin() *echo.Group

func (*Admin) Echo

func (a *Admin) Echo() *echo.Echo

func (*Admin) LoadSources added in v0.0.2

func (a *Admin) LoadSources() error

func (*Admin) Serve

func (a *Admin) Serve() error

func (*Admin) Static added in v0.0.2

func (a *Admin) Static() *echo.Group

type AdminContext

type AdminContext struct {
	echo.Context
	// contains filtered or unexported fields
}

func (*AdminContext) Ctx

func (c *AdminContext) Ctx() context.Context

func (*AdminContext) Data

func (c *AdminContext) Data() *Data

func (AdminContext) URL

func (c AdminContext) URL(path string) string

func (*AdminContext) User

func (c *AdminContext) User() *User

func (*AdminContext) UserCase

func (c *AdminContext) UserCase() UserUseCase

type AdminHandler

type AdminHandler func(ctx *AdminContext) error

type Asset added in v0.0.2

type Asset struct {
	Path string
	URL  string
}

type Config

type Config struct {
	Host string
	Port uint16

	BaseURL    string
	ViewsPath  string
	AssetsPath string

	DevMode bool

	DBConfig DBConfig
	UserCase UserUseCase

	Middleware []echo.MiddlewareFunc
}

func (*Config) Validate

func (config *Config) Validate() error

type DBConfig

type DBConfig struct {
	DB       *sql.DB
	Instance database.Driver

	Driver         string
	DBName         string
	MigrationsPath string
}

type Data

type Data struct {
	jet.VarMap

	Title       string
	User        *User
	Breadcrumbs widgets.Breadcrumbs
}

func (*Data) JetData

func (data *Data) JetData() map[string]interface{}

func (*Data) JetVars

func (data *Data) JetVars() jet.VarMap

func (*Data) Set

func (data *Data) Set(name string, value interface{})

type Renderer

type Renderer struct {
	Views *jet.Set
}

func (*Renderer) Render

func (r *Renderer) Render(w io.Writer, name string, data interface{}, ctx echo.Context) error

type Response

type Response struct {
	Success bool        `json:"success"`
	Error   string      `json:"error,omitempty"`
	Data    interface{} `json:"data,omitempty"`
}

type Token

type Token struct {
	UserID    int64     `db:"user_id" json:"user_id"`
	Token     string    `db:"token" json:"token"`
	Type      TokenType `db:"type" json:"type"`
	DTExpired time.Time `db:"dt_expired" json:"dt_expired"`
	DTCreated time.Time `db:"dt_created" json:"dt_created"`

	User *User `db:"-"`
}

func (Token) IsExpired

func (t Token) IsExpired() bool

type TokenRepository

type TokenRepository interface {
	Search(ctx context.Context, token string) (*Token, error)
	Create(ctx context.Context, token Token) (*Token, error)
}

type TokenType

type TokenType string

func (TokenType) IsValid

func (t TokenType) IsValid() bool

type User

type User struct {
	ID int64 `db:"id" json:"id"`

	Login    string     `db:"login" json:"login"`
	Password string     `db:"password" json:"password"`
	Status   UserStatus `db:"status" json:"status"`
	Name     string     `db:"name" json:"name"`
	Role     UserRole   `db:"role" json:"role"`

	DTCreated    time.Time `db:"dt_created" json:"dt_created"`
	DTUpdated    time.Time `db:"dt_updated" json:"dt_updated"`
	DTLastLogged time.Time `db:"dt_last_logged" json:"dt_last_logged"`

	PasswordIsEncoded bool `db:"password_is_encoded" json:"-"`
	Current           bool `db:"-" json:"-"`
}

type UserFilter

type UserFilter struct {
	IDs           []int64
	Name          string
	Login         string
	Status        UserStatus
	Limit, Offset int
}

type UserRepository

type UserRepository interface {
	Search(ctx context.Context, filter *UserFilter) ([]*User, error)
	Count(ctx context.Context, filter *UserFilter) (int64, error)
	Create(ctx context.Context, user User) (*User, error)
	Update(ctx context.Context, user User) (*User, error)
	Delete(ctx context.Context, user User) error
}

type UserRole added in v0.0.2

type UserRole string

func (UserRole) IsValid added in v0.0.2

func (role UserRole) IsValid() bool

type UserStatus

type UserStatus string

func (UserStatus) IsValid

func (status UserStatus) IsValid() bool

type UserUseCase

type UserUseCase interface {
	Validate(user *User, create bool) error

	SearchByLogin(ctx context.Context, login string) (*User, error)
	SearchByID(ctx context.Context, id int64) (*User, error)
	SetLastLogged(ctx context.Context, user *User) error
	Register(ctx context.Context, user *User) error

	ComparePassword(user *User, password string) (bool, error)
	EncodePassword(user *User) error

	CreateAuthToken(ctx context.Context, user *User) (*Token, error)
	SearchToken(ctx context.Context, token string) (*Token, error)

	UserRepository() UserRepository
}

type ViewData

type ViewData interface {
	JetVars() jet.VarMap
	JetData() map[string]interface{}
}

Directories

Path Synopsis
cmd
db
repository

Jump to

Keyboard shortcuts

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