72 lines
No EOL
1.7 KiB
Go
72 lines
No EOL
1.7 KiB
Go
package user
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"errors"
|
|
"fmt"
|
|
"math/rand"
|
|
)
|
|
|
|
type UserClient interface {
|
|
register(username, password, email string) (bool, error)
|
|
login(username, password string, requiredMailValidation bool) (bool, error)
|
|
getMailValidationToken(email string, forceRecreate bool,) (string, error)
|
|
}
|
|
|
|
type UserClientMemory struct {
|
|
users map[string]string
|
|
}
|
|
|
|
var u *UserClientMemory
|
|
|
|
func GetUserMemmoryClient() *UserClientMemory {
|
|
if u == nil {
|
|
uc := UserClientMemory{}
|
|
uc.users = make(map[string]string)
|
|
uc.users["admin"]="password"
|
|
u = &uc
|
|
}
|
|
|
|
return u
|
|
}
|
|
|
|
func (uc *UserClientMemory) register(username, password, email string) (bool, error) {
|
|
if _, ok := uc.users[username]; ok {
|
|
return false, errors.New("Username already used")
|
|
}
|
|
|
|
uc.users[username] = password
|
|
return true, nil
|
|
}
|
|
|
|
func (uc UserClientMemory) login(username, password string, requiredMailValidation bool) (bool, error) {
|
|
if requiredMailValidation == true {
|
|
return false, errors.New("In memmory User Client cant validate email addresses")
|
|
}
|
|
if val, ok := uc.users[username]; ok {
|
|
fmt.Println("Login for valide user")
|
|
if val == password {
|
|
return true, nil
|
|
}
|
|
} else {
|
|
fmt.Printf("User %v not found", username)
|
|
}
|
|
|
|
return false, nil
|
|
}
|
|
|
|
func (uc UserClientMemory) getMailValidationToken(email string, forceRecreate bool) (string, error) {
|
|
token := randomString(35)
|
|
token = fmt.Sprintf("%v/%v", base64.StdEncoding.EncodeToString([]byte(email)), token)
|
|
return token, nil
|
|
}
|
|
|
|
|
|
func randomString(n int) string {
|
|
var letters = []byte("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
|
b := make([]byte, n)
|
|
for i := range b {
|
|
b[i] = letters[rand.Intn(len(letters))]
|
|
}
|
|
return string(b)
|
|
} |