| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | 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")}
 |