mirror of
https://github.com/Slug-Boi/cocommit.git
synced 2026-05-13 12:45:47 +00:00
103 lines
2.2 KiB
Go
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
|
|
}
|