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 }