55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
|
package model
|
||
|
|
||
|
import (
|
||
|
"math/rand"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type (
|
||
|
Account struct {
|
||
|
ID string `json:"id" db:"id"`
|
||
|
Username string `json:"username" db:"username"`
|
||
|
Password []byte `json:"password" db:"password"`
|
||
|
Email string `json:"email" db:"email"`
|
||
|
AvatarURL string `json:"avatar_url" db:"avatar_url"`
|
||
|
Privileges []AccountPrivilege `json:"privileges"`
|
||
|
}
|
||
|
|
||
|
AccountPrivilege string
|
||
|
|
||
|
Invite struct {
|
||
|
Code string `db:"code"`
|
||
|
CreatedByID string `db:"created_by"`
|
||
|
CreatedAt time.Time `db:"created_at"`
|
||
|
ExpiresAt time.Time `db:"expires_at"`
|
||
|
}
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
Root AccountPrivilege = "root" // grants all permissions. very dangerous to grant!
|
||
|
|
||
|
// unused for now
|
||
|
CreateInvites AccountPrivilege = "create_invites"
|
||
|
ReadAccounts AccountPrivilege = "read_accounts"
|
||
|
EditAccounts AccountPrivilege = "edit_accounts"
|
||
|
|
||
|
ReadReleases AccountPrivilege = "read_releases"
|
||
|
EditReleases AccountPrivilege = "edit_releases"
|
||
|
|
||
|
ReadTracks AccountPrivilege = "read_tracks"
|
||
|
EditTracks AccountPrivilege = "edit_tracks"
|
||
|
|
||
|
ReadArtists AccountPrivilege = "read_artists"
|
||
|
EditArtists AccountPrivilege = "edit_artists"
|
||
|
)
|
||
|
|
||
|
var inviteChars = []byte("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
|
||
|
|
||
|
func GenerateInviteCode(length int) []byte {
|
||
|
code := []byte{}
|
||
|
for i := 0; i < length; i++ {
|
||
|
code = append(code, inviteChars[rand.Intn(len(inviteChars) - 1)])
|
||
|
}
|
||
|
return code
|
||
|
}
|