You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
4.3 KiB
192 lines
4.3 KiB
package management |
|
|
|
import ( |
|
"encoding/json" |
|
"errors" |
|
"io/ioutil" |
|
"log" |
|
"os" |
|
|
|
"time" |
|
|
|
"github.com/asaskevich/govalidator" |
|
domains "github.com/cr3a70r/shield/Domains" |
|
) |
|
|
|
var Settings T_Management |
|
|
|
type T_Management struct { |
|
Users []T_User `json:"Users"` |
|
Domains domains.T_Domains `json:"Names"` |
|
Debug bool `json:"Debug"` |
|
} |
|
|
|
type T_User struct { |
|
Email string `json:"Email"` |
|
Password string `json:"Password"` |
|
Cookie string `json:"Cookie"` |
|
CreatedDate string `json:"CreatedDate"` |
|
} |
|
|
|
func (T_Management) SaveConfig() { |
|
|
|
} |
|
|
|
func (T_Management) LoadConfig() { |
|
|
|
} |
|
|
|
func (T_Management) ReloadConfig() { |
|
|
|
} |
|
|
|
func (T_Management) Initialize() { |
|
configExists, err := os.Open("config.json") |
|
|
|
if err != nil { |
|
log.Println("management.initialize: new deployment: building config") |
|
Settings.DefaultSuperAdmin() |
|
|
|
configNew, err := os.OpenFile("config.json", os.O_CREATE|os.O_WRONLY, 0644) |
|
if err == nil { |
|
configByte, err := json.MarshalIndent(Settings, "", " ") |
|
if err != nil { |
|
log.Fatal("management.initialize: could not Marshall Settings: ", err) |
|
} |
|
configNew.Write(configByte) |
|
} else { |
|
log.Fatal("management.initialize: could not create new config.json file: ", err) |
|
} |
|
|
|
defer configNew.Close() |
|
} else { |
|
configByte, err := ioutil.ReadAll(configExists) |
|
if err != nil { |
|
log.Fatal("management.initialize: could not read config: ", err) |
|
} |
|
|
|
json.Unmarshal(configByte, &Settings) |
|
|
|
defer configExists.Close() |
|
} |
|
} |
|
|
|
// Needs to be checked if a user already exist |
|
func (T_Management) AddUserByTUser(user T_User) error { |
|
if !govalidator.IsEmail(user.Email) { |
|
return errors.New("email is not an email") |
|
} |
|
if user.Email == "" { |
|
return errors.New("email cannot be empty") |
|
} |
|
if user.Password == "" { |
|
return errors.New("password cannot be empty") |
|
} |
|
currentTime := time.Now() |
|
user.CreatedDate = currentTime.Format("2006-January-02") |
|
|
|
Settings.Users = append(Settings.Users, user) |
|
|
|
return nil |
|
} |
|
|
|
func (T_Management) AddUserByParams(email string, passwd string) error { |
|
var temp T_User |
|
temp.Email = email |
|
temp.Password = passwd |
|
err := Settings.AddUserByTUser(temp) |
|
|
|
return err |
|
} |
|
|
|
func (T_Management) RemoveUserByEmail(email string) error { |
|
found := false |
|
for index, u := range Settings.Users { |
|
if u.Email == email { |
|
temp := append(Settings.Users[:index], Settings.Users[index+1]) |
|
Settings.Users = temp |
|
found = true |
|
return nil |
|
} |
|
} |
|
if !found { |
|
return errors.New("did not find a user:" + email) |
|
} |
|
return nil |
|
} |
|
|
|
func (T_Management) CheckPassword(email string, passwd string) (bool, error) { |
|
found := false |
|
for _, u := range Settings.Users { |
|
if u.Email == email && u.Password == passwd { |
|
return true, nil |
|
} |
|
} |
|
if !found { |
|
return false, errors.New("no combination with:" + email + " :" + passwd) |
|
} |
|
return false, nil |
|
} |
|
|
|
func (T_Management) SaveCookie(email string, cookie string) error { |
|
for index, u := range Settings.Users { |
|
if u.Email == email { |
|
Settings.Users[index].Cookie = cookie |
|
return nil |
|
} |
|
} |
|
return nil |
|
} |
|
|
|
func (T_Management) OnboardDomain(name string, realServer string, realPort string) (bool, error) { |
|
if !govalidator.IsDNSName(name) { |
|
return false, errors.New("given name is not a DNS name") |
|
} |
|
if !govalidator.IsDNSName(realServer) && !govalidator.IsIP(realServer) { |
|
return false, errors.New("given realServer is not a valid DNS name or IP Address") |
|
} |
|
if !govalidator.IsPort(realPort) { |
|
return false, errors.New("given realPort is not a valid Port number") |
|
} |
|
|
|
domains.Names.AddByParams(name, realServer, realPort) |
|
|
|
return true, nil |
|
} |
|
|
|
func (T_Management) RemoveDomain(name string) { |
|
domains.Names.RemoveDomain(name) |
|
} |
|
|
|
func (T_Management) UserFindByEmail(email string) (T_User, error) { |
|
found := false |
|
var temp T_User |
|
for _, u := range Settings.Users { |
|
if u.Email == email { |
|
return u, nil |
|
} |
|
} |
|
if !found { |
|
return temp, errors.New("no combination with:" + email) |
|
} |
|
return temp, nil |
|
} |
|
|
|
func (T_Management) AllUsers() []T_User { |
|
return Settings.Users |
|
} |
|
|
|
func (T_Management) DefaultSuperAdmin() { |
|
Settings.Debug = false |
|
Settings.AddUserByParams("defadm@daydev.org", "siconmas") |
|
} |
|
|
|
func (T_Management) ToString() string { |
|
managementString, err := json.Marshal(Settings) |
|
|
|
if err != nil { |
|
log.Println("management.ToString: " + err.Error()) |
|
} |
|
|
|
return string(managementString) |
|
}
|
|
|