include password for creating account

This commit is contained in:
SowinskiBraeden committed 2022-08-15 17:22:47 -07:00
1 parent 79acbc377a
commit 06e0eea782
4 files changed
+162 -89

No files matched your search

+29 -11
View File
@@ -1,17 +1,24 @@
package models
import (
"context"
"math/rand"
"os"
"strconv"
"strings"
"time"
"unicode"
"github.com/SowinskiBraeden/school-management-api/database"
"golang.org/x/crypto/bcrypt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
)
var AdminCollection *mongo.Collection = database.OpenCollection(database.Client, "admins")
type Admin struct {
ID primitive.ObjectID `bson:"_id"`
FirstName string `json:"firstname" validate:"required"`
@@ -25,10 +32,24 @@ type Admin struct {
Updated_at time.Time `json:"updated_at"`
}
func (a *Admin) GenerateSchoolEmail() string {
func (a *Admin) EmailExists(email string) bool {
var admin Admin
findErr := AdminCollection.FindOne(context.TODO(), bson.M{"accountdata.schoolemail": email}).Decode(&admin)
return findErr == nil
}
func (a *Admin) GenerateSchoolEmail(offset int, lastEmail string) string {
addr := os.Getenv("SYSTEM_EMAIL_ADDRESS")
var email string = strings.ToLower(a.LastName) + "_" + strings.ToLower(string(a.FirstName[0])) + addr
// Add check to see if email already exists
if offset > 0 && offset < len([]rune(a.FirstName))-1 {
email = lastEmail[:strings.Index(lastEmail, "_")+offset+1] + strings.ToLower(string(a.FirstName[offset])) + addr
}
if offset == len([]rune(a.FirstName))-1 {
email = strings.ToLower(a.LastName) + "_" + strings.ToLower(a.FirstName) + addr
}
if offset > len([]rune(a.FirstName))-1 {
email = strings.ToLower(a.LastName) + "_" + strings.ToLower(a.FirstName) + strconv.Itoa(offset-len([]rune(a.FirstName))) + addr
}
return email
}
@@ -37,15 +58,12 @@ func (s *Admin) HashPassword(password string) string {
return string(hash)
}
func (s *Admin) ComparePasswords(password string) bool {
err := bcrypt.CompareHashAndPassword([]byte(s.Password), []byte(password))
if err != nil {
return false
}
return true
func (a *Admin) ComparePasswords(password string) bool {
err := bcrypt.CompareHashAndPassword([]byte(a.Password), []byte(password))
return err == nil
}
func (s *Admin) CheckPasswordStrength(password string) bool {
func (a *Admin) CheckPasswordStrength(password string) bool {
var hasUpper bool = false
for _, r := range password {
@@ -61,14 +79,14 @@ func (s *Admin) CheckPasswordStrength(password string) bool {
}
}
if strings.ContainsAny(password, specialCharSet) && hasLower && hasUpper {
if strings.ContainsAny(password, specialCharSet) && hasLower && hasUpper && len(password) >= 8 {
return true
} else {
return false
}
}
func (s *Admin) GeneratePassword(passwordLength, minSpecialChar, minNum, minUpperCase int) string {
func (a *Admin) GeneratePassword(passwordLength, minSpecialChar, minNum, minUpperCase int) string {
var password strings.Builder
//Set special character
+3 -9
View File
@@ -76,10 +76,7 @@ func (s *Student) HashPassword(password string) string {
func (s *Student) EmailExists(email string) bool {
var student Student
findErr := StudentCollection.FindOne(context.TODO(), bson.M{"accountdata.schoolemail": email}).Decode(&student)
if findErr != nil {
return false
}
return true
return findErr == nil
}
func (s *Student) GenerateSchoolEmail(offset int, lastEmail string) string {
@@ -99,10 +96,7 @@ func (s *Student) GenerateSchoolEmail(offset int, lastEmail string) string {
func (s *Student) ComparePasswords(password string) bool { //True: passwords match, False: no match
valid := bcrypt.CompareHashAndPassword([]byte(s.AccountData.Password), []byte(password))
if valid != nil {
return false
}
return true
return valid == nil
}
func (s *Student) CheckPasswordStrength(password string) bool {
@@ -121,7 +115,7 @@ func (s *Student) CheckPasswordStrength(password string) bool {
}
}
if strings.ContainsAny(password, specialCharSet) && hasLower && hasUpper {
if strings.ContainsAny(password, specialCharSet) && hasLower && hasUpper && len(password) >= 8 {
return true
} else {
return false
+3 -9
View File
@@ -74,10 +74,7 @@ func (t *Teacher) HashPassword(password string) string {
func (t *Teacher) EmailExists(email string) bool {
var teacher Teacher
findErr := TeacherCollection.FindOne(context.TODO(), bson.M{"accountdata.schoolemail": email}).Decode(&teacher)
if findErr != nil {
return false
}
return true
return findErr == nil
}
func (t *Teacher) GenerateSchoolEmail(offset int, lastEmail string) string {
@@ -97,10 +94,7 @@ func (t *Teacher) GenerateSchoolEmail(offset int, lastEmail string) string {
func (t *Teacher) ComparePasswords(password string) bool {
err := bcrypt.CompareHashAndPassword([]byte(t.AccountData.Password), []byte(password))
if err != nil {
return false
}
return true
return err == nil
}
func (t *Teacher) CheckPasswordStrength(password string) bool {
@@ -119,7 +113,7 @@ func (t *Teacher) CheckPasswordStrength(password string) bool {
}
}
if strings.ContainsAny(password, specialCharSet) && hasLower && hasUpper {
if strings.ContainsAny(password, specialCharSet) && hasLower && hasUpper && len(password) >= 8 {
return true
} else {
return false