Files
openlan/pkg/models/user.go
2023-12-27 21:24:02 +08:00

65 lines
1.4 KiB
Go
Executable File

package models
import (
"fmt"
"runtime"
"strings"
"time"
"github.com/luscis/openlan/pkg/libol"
)
type User struct {
Alias string `json:"alias"`
Name string `json:"name"`
Network string `json:"network"`
Password string `json:"password"`
UUID string `json:"uuid"`
System string `json:"system"`
Role string `json:"type"` // admin , guest or ldap
Last libol.SocketClient `json:"last"` // lastly accessed by this.
Lease time.Time `json:"leastTime"`
UpdateAt int64
}
func NewUser(name, network, password string) *User {
return &User{
Name: name,
Password: password,
Network: network,
System: runtime.GOOS,
Role: "guest",
}
}
func (u *User) String() string {
return fmt.Sprintf("%s, %s, %s", u.Id(), u.Password, u.Role)
}
func (u *User) Update() {
// to support lower version
if u.Network == "" {
if strings.Contains(u.Name, "@") {
u.Network = strings.SplitN(u.Name, "@", 2)[1]
}
}
if u.Network == "" {
u.Network = "default"
}
if strings.Contains(u.Name, "@") {
u.Name = strings.SplitN(u.Name, "@", 2)[0]
}
u.Alias = strings.ToLower(u.Alias)
if u.UUID == "" {
u.UUID = u.Alias
}
u.UpdateAt = time.Now().Unix()
}
func (u *User) Id() string {
if u.Network == "" {
return u.Name
}
return u.Name + "@" + u.Network
}