123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- package logic
- import (
- "encoding/json"
- "errors"
- "sort"
- "github.com/gravitl/netmaker/database"
- "github.com/gravitl/netmaker/models"
- )
- // GetUser - gets a user
- // TODO support "masteradmin"
- func GetUser(username string) (*models.User, error) {
- var user models.User
- record, err := database.FetchRecord(database.USERS_TABLE_NAME, username)
- if err != nil {
- return &user, err
- }
- if err = json.Unmarshal([]byte(record), &user); err != nil {
- return &models.User{}, err
- }
- return &user, err
- }
- // GetReturnUser - gets a user
- func GetReturnUser(username string) (models.ReturnUser, error) {
- var user models.ReturnUser
- record, err := database.FetchRecord(database.USERS_TABLE_NAME, username)
- if err != nil {
- return user, err
- }
- if err = json.Unmarshal([]byte(record), &user); err != nil {
- return models.ReturnUser{}, err
- }
- return user, err
- }
- // ToReturnUser - gets a user as a return user
- func ToReturnUser(user models.User) models.ReturnUser {
- return models.ReturnUser{
- UserName: user.UserName,
- DisplayName: user.DisplayName,
- AccountDisabled: user.AccountDisabled,
- AuthType: user.AuthType,
- RemoteGwIDs: user.RemoteGwIDs,
- UserGroups: user.UserGroups,
- PlatformRoleID: user.PlatformRoleID,
- NetworkRoles: user.NetworkRoles,
- LastLoginTime: user.LastLoginTime,
- }
- }
- // SetUserDefaults - sets the defaults of a user to avoid empty fields
- func SetUserDefaults(user *models.User) {
- if user.RemoteGwIDs == nil {
- user.RemoteGwIDs = make(map[string]struct{})
- }
- if len(user.NetworkRoles) == 0 {
- user.NetworkRoles = make(map[models.NetworkID]map[models.UserRoleID]struct{})
- }
- if len(user.UserGroups) == 0 {
- user.UserGroups = make(map[models.UserGroupID]struct{})
- }
- }
- // SortUsers - Sorts slice of Users by username
- func SortUsers(unsortedUsers []models.ReturnUser) {
- sort.Slice(unsortedUsers, func(i, j int) bool {
- return unsortedUsers[i].UserName < unsortedUsers[j].UserName
- })
- }
- // GetSuperAdmin - fetches superadmin user
- func GetSuperAdmin() (models.ReturnUser, error) {
- users, err := GetUsers()
- if err != nil {
- return models.ReturnUser{}, err
- }
- for _, user := range users {
- if user.IsSuperAdmin || user.PlatformRoleID == models.SuperAdminRole {
- return user, nil
- }
- }
- return models.ReturnUser{}, errors.New("superadmin not found")
- }
- func InsertPendingUser(u *models.User) error {
- data, err := json.Marshal(u)
- if err != nil {
- return err
- }
- return database.Insert(u.UserName, string(data), database.PENDING_USERS_TABLE_NAME)
- }
- func DeletePendingUser(username string) error {
- return database.DeleteRecord(database.PENDING_USERS_TABLE_NAME, username)
- }
- func IsPendingUser(username string) bool {
- records, err := database.FetchRecords(database.PENDING_USERS_TABLE_NAME)
- if err != nil {
- return false
- }
- for _, record := range records {
- u := models.ReturnUser{}
- err := json.Unmarshal([]byte(record), &u)
- if err == nil && u.UserName == username {
- return true
- }
- }
- return false
- }
- func ListPendingReturnUsers() ([]models.ReturnUser, error) {
- pendingUsers := []models.ReturnUser{}
- records, err := database.FetchRecords(database.PENDING_USERS_TABLE_NAME)
- if err != nil && !database.IsEmptyRecord(err) {
- return pendingUsers, err
- }
- for _, record := range records {
- u := models.ReturnUser{}
- err = json.Unmarshal([]byte(record), &u)
- if err == nil {
- pendingUsers = append(pendingUsers, u)
- }
- }
- return pendingUsers, nil
- }
- func ListPendingUsers() ([]models.User, error) {
- var pendingUsers []models.User
- records, err := database.FetchRecords(database.PENDING_USERS_TABLE_NAME)
- if err != nil && !database.IsEmptyRecord(err) {
- return pendingUsers, err
- }
- for _, record := range records {
- var u models.User
- err = json.Unmarshal([]byte(record), &u)
- if err == nil {
- pendingUsers = append(pendingUsers, u)
- }
- }
- return pendingUsers, nil
- }
- func GetUserMap() (map[string]models.User, error) {
- userMap := make(map[string]models.User)
- records, err := database.FetchRecords(database.USERS_TABLE_NAME)
- if err != nil && !database.IsEmptyRecord(err) {
- return userMap, err
- }
- for _, record := range records {
- u := models.User{}
- err = json.Unmarshal([]byte(record), &u)
- if err == nil {
- userMap[u.UserName] = u
- }
- }
- return userMap, nil
- }
- func InsertUserInvite(invite models.UserInvite) error {
- data, err := json.Marshal(invite)
- if err != nil {
- return err
- }
- return database.Insert(invite.Email, string(data), database.USER_INVITES_TABLE_NAME)
- }
- func GetUserInvite(email string) (in models.UserInvite, err error) {
- d, err := database.FetchRecord(database.USER_INVITES_TABLE_NAME, email)
- if err != nil {
- return
- }
- err = json.Unmarshal([]byte(d), &in)
- return
- }
- func ListUserInvites() ([]models.UserInvite, error) {
- invites := []models.UserInvite{}
- records, err := database.FetchRecords(database.USER_INVITES_TABLE_NAME)
- if err != nil && !database.IsEmptyRecord(err) {
- return invites, err
- }
- for _, record := range records {
- in := models.UserInvite{}
- err = json.Unmarshal([]byte(record), &in)
- if err == nil {
- invites = append(invites, in)
- }
- }
- return invites, nil
- }
- func DeleteUserInvite(email string) error {
- return database.DeleteRecord(database.USER_INVITES_TABLE_NAME, email)
- }
- func ValidateAndApproveUserInvite(email, code string) error {
- in, err := GetUserInvite(email)
- if err != nil {
- return err
- }
- if code != in.InviteCode {
- return errors.New("invalid code")
- }
- return nil
- }
|