123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- 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,
- IsSuperAdmin: user.IsSuperAdmin,
- IsAdmin: user.IsAdmin,
- RemoteGwIDs: user.RemoteGwIDs,
- }
- }
- // 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{})
- }
- }
- // 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 {
- 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
- }
|