| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | package logicimport (	"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 userfunc 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 userfunc ToReturnUser(user models.User) models.ReturnUser {	return models.ReturnUser{		UserName:     user.UserName,		IsSuperAdmin: user.IsSuperAdmin,		IsAdmin:      user.IsAdmin,		RemoteGwIDs:  user.RemoteGwIDs,	}}// SetUserDefaults - sets the defaults of a user to avoid empty fieldsfunc SetUserDefaults(user *models.User) {	if user.RemoteGwIDs == nil {		user.RemoteGwIDs = make(map[string]struct{})	}}// SortUsers - Sorts slice of Users by usernamefunc SortUsers(unsortedUsers []models.ReturnUser) {	sort.Slice(unsortedUsers, func(i, j int) bool {		return unsortedUsers[i].UserName < unsortedUsers[j].UserName	})}// GetSuperAdmin - fetches superadmin userfunc GetSuperAdmin() (models.ReturnUser, error) {	users, err := GetUsers()	if err != nil {		return models.ReturnUser{}, err	}	for _, user := range users {		if user.IsSuperAdmin {			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 ListPendingUsers() ([]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}
 |