Experiment with Authentication and Websockets
Some checks failed
build-docker-imge / Build the docker container (push) Failing after 2m24s
Some checks failed
build-docker-imge / Build the docker container (push) Failing after 2m24s
This commit is contained in:
78
auth/memory.go
Normal file
78
auth/memory.go
Normal file
@ -0,0 +1,78 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"git.kocoder.xyz/kocoded/szuntis-backend/repository"
|
||||
"github.com/google/uuid"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
type authRepository struct {
|
||||
users map[string]repository.User //map[LoginName]User
|
||||
sessions map[uuid.UUID]string //map[sessionToken]email
|
||||
}
|
||||
|
||||
func NewMemeoryAuthRepository() repository.AuthRepository {
|
||||
return &authRepository{
|
||||
users: map[string]repository.User{},
|
||||
sessions: map[uuid.UUID]string{},
|
||||
}
|
||||
}
|
||||
|
||||
func (a *authRepository) GetUserByToken(ctx context.Context, userId uuid.UUID) (repository.User, error) {
|
||||
ln, ok := a.sessions[userId]
|
||||
if !ok {
|
||||
return repository.User{}, errors.New("you have to be logged in to do that")
|
||||
}
|
||||
|
||||
u, ok := a.users[ln]
|
||||
if !ok {
|
||||
return repository.User{}, errors.New("you have to be logged in to do that")
|
||||
}
|
||||
return u, nil
|
||||
}
|
||||
|
||||
func (a *authRepository) Login(ctx context.Context, loginParams *repository.LoginParams) (uuid.UUID, error) {
|
||||
u, ok := a.users[loginParams.LoginName]
|
||||
if !ok {
|
||||
return uuid.Nil, errors.New("couldn't log user in")
|
||||
}
|
||||
|
||||
if err := bcrypt.CompareHashAndPassword(u.Password, []byte(loginParams.Password)); err != nil {
|
||||
return uuid.Nil, errors.New("couldn't log user in")
|
||||
}
|
||||
|
||||
sessionToken, err := uuid.NewUUID()
|
||||
if err != nil {
|
||||
return uuid.Nil, errors.New("couldn't log user in")
|
||||
}
|
||||
a.sessions[sessionToken] = loginParams.LoginName
|
||||
|
||||
return sessionToken, nil
|
||||
}
|
||||
|
||||
func (a *authRepository) Register(ctx context.Context, registerParams *repository.RegisterParams) (bool, error) {
|
||||
if _, ok := a.users[registerParams.LoginName]; ok {
|
||||
return false, errors.New("couldn't register user")
|
||||
}
|
||||
|
||||
res, err := bcrypt.GenerateFromPassword([]byte(registerParams.Password), 7)
|
||||
if err != nil {
|
||||
return false, errors.New("couldn't register user")
|
||||
}
|
||||
|
||||
u := repository.User{
|
||||
Username: registerParams.Username,
|
||||
FirstName: registerParams.FirstName,
|
||||
LastName: registerParams.LastName,
|
||||
LoginName: registerParams.LoginName,
|
||||
EmailAddress: registerParams.EmailAddress,
|
||||
Password: res,
|
||||
}
|
||||
|
||||
a.users[registerParams.LoginName] = u
|
||||
|
||||
return true, nil
|
||||
}
|
Reference in New Issue
Block a user