prepare user system

This commit is contained in:
SowinskiBraeden committed 2023-09-28 21:42:58 -07:00
1 parent ecf4fabd86
commit 5bc4adceea
13 files changed
+470 -18

No files matched your search

+41
View File
@@ -0,0 +1,41 @@
package util
import (
"context"
"crypto/rand"
"io"
"github.com/SowinskiBraeden/DeviceBookingAPI/databases"
"go.uber.org/zap"
"go.mongodb.org/mongo-driver/bson"
)
var table = [...]byte{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}
func ValidateID(id string, DB databases.UserDatabase) bool { // true: valid id, false: id already in use
dbResp, err := DB.Find(context.TODO(), bson.M{})
if err != nil {
zap.S().With(err).Error("failed to get users")
return false
}
// If len == 0 then ID is not in use
if len(dbResp) == 0 {
return true
}
return false
}
func GenerateID(length int) string {
b := make([]byte, length)
n, err := io.ReadAtLeast(rand.Reader, b, length)
if n != length {
panic(err)
}
for i := 0; i < len(b); i++ {
b[i] = table[int(b[i])%len(table)]
}
return string(b)
}
+83
View File
@@ -0,0 +1,83 @@
package util
import (
"bufio"
"fmt"
"log"
"net/mail"
"os"
"strings"
"time"
"github.com/howeyc/gopass"
"go.mongodb.org/mongo-driver/bson/primitive"
"github.com/SowinskiBraeden/DeviceBookingAPI/databases"
"github.com/SowinskiBraeden/DeviceBookingAPI/models"
)
func ValidMailAddress(address string) (string, bool) {
addr, err := mail.ParseAddress(address)
if err != nil {
return "", false
}
return addr.Address, true
}
func Confirm(s string) bool {
r := bufio.NewReader(os.Stdin)
fmt.Printf("%s [y/n]: ", s)
res, err := r.ReadString('\n')
if err != nil {
log.Fatal(err)
}
return strings.ToLower(strings.TrimSpace(res))[0] == 'y'
}
func CreateDefaultAdmin(DB databases.UserDatabase) models.User {
fmt.Println()
reader := bufio.NewReader(os.Stdin)
fmt.Print("First Name: ")
firstname, _ := reader.ReadString('\n')
fmt.Print("Last Name: ")
lastname, _ := reader.ReadString('\n')
fmt.Print("Email: ")
email, _ := reader.ReadString('\n')
fmt.Print("Password: ")
password, _ := gopass.GetPasswd()
// Clear values of new lines and enter characters
firstname = strings.ReplaceAll(firstname, "\n", "")
lastname = strings.ReplaceAll(lastname, "\n", "")
email = strings.ReplaceAll(email, "\n", "")
firstname = strings.ReplaceAll(firstname, "\r", "")
lastname = strings.ReplaceAll(lastname, "\r", "")
email = strings.ReplaceAll(email, "\r", "")
var admin models.User
admin.Details.FirstName = firstname
admin.Details.LastName = lastname
admin.Details.Email = email
pass := strings.TrimSuffix(string(password), "\n")
admin.Details.Password = admin.HashPassword(pass)
admin.Details.TempPassword = false
var aid string
for {
aid = GenerateID(6)
if ValidateID(aid, DB) {
break
}
}
admin.Details.UID = aid
admin.Details.UserType = models.TypeSuperUser
admin.Details.Created_at, _ = time.Parse(time.RFC3339, time.Now().Format(time.RFC3339))
admin.Details.Updated_at, _ = time.Parse(time.RFC3339, time.Now().Format(time.RFC3339))
admin.ID = primitive.NewObjectID().Hex()
return admin
}