Files
cocommit/src/cmd/utils/user_util.go
T
2025-04-09 20:01:17 +02:00

103 lines
2.2 KiB
Go

package utils
import (
"fmt"
"os"
"slices"
"encoding/json"
)
// This util file is used to handle users and their information
type User struct {
Shortname string `json:"shortname"`
Longname string `json:"longname"`
Username string `json:"username"`
Email string `json:"email"`
Ex bool `json:"ex"`
Groups []string `json:"groups"`
}
type Author struct {
Authors map[string]User
}
// purely used for editing the author file later
var Authors = Author{}
var Users = map[string]User{}
var DefExclude = []string{}
var Groups = map[string][]User{}
func ContainsUser(users []User, user User) bool {
return slices.ContainsFunc(users, func(u User) bool {
return u.Shortname == user.Shortname &&
u.Longname == user.Longname &&
u.Username == user.Username &&
u.Email == user.Email &&
u.Ex == user.Ex &&
slices.Equal(u.Groups, user.Groups)
})
}
func CheckUserFields(user User) bool {
if user.Shortname == "" || user.Longname == "" || user.Username == "" || user.Email == "" {
return false
}
return true
}
func Define_users(author_file string) {
// wipe the users map
Users = map[string]User{}
DefExclude = []string{}
Groups = map[string][]User{}
var auth Author
data, err := os.ReadFile(author_file)
if err != nil {
panic(fmt.Sprintf("Error reading author file: %v", err))
}
err = json.Unmarshal(data, &auth)
if err != nil {
panic(fmt.Sprintf("Error unmarshalling json: %v", err))
}
Authors = auth
for _, usr := range auth.Authors {
Users[usr.Shortname] = usr
Users[usr.Longname] = usr
if usr.Ex {
DefExclude = append(DefExclude, usr.Shortname)
}
group_info := usr.Groups
if len(group_info) > 0 {
for _, group := range group_info {
if Groups[group] == nil {
Groups[group] = []User{usr}
} else {
usr_lst := Groups[group]
usr_lst = append(usr_lst, usr)
Groups[group] = usr_lst
}
}
}
}
}
func RemoveUser(short string) {
usr := Users[short]
delete(Users, usr.Shortname)
delete(Users, usr.Longname)
}
func TempAddUser(username, email string) {
usr := User{Username: username, Email: email}
Users[username] = usr
}