97 lines
2.0 KiB
Go
97 lines
2.0 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.hoogi.eu/snafu/go-blog/crypt"
|
|
"git.hoogi.eu/snafu/go-blog/mail"
|
|
)
|
|
|
|
//UserInvite represents a new invited user
|
|
type UserInvite struct {
|
|
ID int
|
|
Hash string
|
|
Username string
|
|
Email string
|
|
DisplayName string
|
|
CreatedAt time.Time
|
|
IsAdmin bool
|
|
|
|
CreatedBy *User
|
|
}
|
|
|
|
func (ui UserInvite) Copy() *User {
|
|
return &User{
|
|
Username: ui.Username,
|
|
Email: ui.Email,
|
|
DisplayName: ui.DisplayName,
|
|
IsAdmin: ui.IsAdmin,
|
|
}
|
|
}
|
|
|
|
//UserInviteDatasourceService defines an interface for CRUD operations for users
|
|
type UserInviteDatasourceService interface {
|
|
List() ([]UserInvite, error)
|
|
Get(inviteID int) (*UserInvite, error)
|
|
GetByHash(hash string) (*UserInvite, error)
|
|
Create(ui *UserInvite) (int, error)
|
|
Update(ui *UserInvite) error
|
|
Remove(inviteID int) error
|
|
}
|
|
|
|
//UserInviteService
|
|
type UserInviteService struct {
|
|
Datasource UserInviteDatasourceService
|
|
UserService UserService
|
|
MailService mail.Service
|
|
}
|
|
|
|
// validate A user invitation must conform the user validations except the password checks
|
|
func (ui UserInvite) validate(uis UserInviteService) error {
|
|
user := ui.Copy()
|
|
|
|
err := user.validate(uis.UserService, -1, VDupEmail|VDupUsername)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (uis UserInviteService) List() ([]UserInvite, error) {
|
|
return uis.Datasource.List()
|
|
}
|
|
|
|
func (uis UserInviteService) Update(ui *UserInvite) error {
|
|
ui.Hash = crypt.RandomHash(32)
|
|
|
|
if err := ui.validate(uis); err != nil {
|
|
return err
|
|
}
|
|
|
|
return uis.Datasource.Update(ui)
|
|
}
|
|
|
|
func (uis UserInviteService) Create(ui *UserInvite) (int, error) {
|
|
ui.Hash = crypt.RandomHash(32)
|
|
|
|
if err := ui.validate(uis); err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return uis.Datasource.Create(ui)
|
|
}
|
|
|
|
func (uis UserInviteService) Get(inviteID int) (*UserInvite, error) {
|
|
return uis.Datasource.Get(inviteID)
|
|
}
|
|
|
|
func (uis UserInviteService) GetByHash(hash string) (*UserInvite, error) {
|
|
return uis.Datasource.GetByHash(hash)
|
|
}
|
|
|
|
func (uis UserInviteService) Remove(inviteID int) error {
|
|
return uis.Datasource.Remove(inviteID)
|
|
}
|