mirror of
https://github.com/1f349/lavender.git
synced 2024-10-18 16:41:51 +01:00
79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
|
package database
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"github.com/1f349/lavender/database/types"
|
||
|
"github.com/1f349/lavender/password"
|
||
|
"github.com/google/uuid"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type AddUserParams struct {
|
||
|
Name string `json:"name"`
|
||
|
Username string `json:"username"`
|
||
|
Password string `json:"password"`
|
||
|
Email string `json:"email"`
|
||
|
Role types.UserRole `json:"role"`
|
||
|
UpdatedAt time.Time `json:"updated_at"`
|
||
|
Active bool `json:"active"`
|
||
|
}
|
||
|
|
||
|
func (q *Queries) AddUser(ctx context.Context, arg AddUserParams) (string, error) {
|
||
|
pwHash, err := password.HashPassword(arg.Password)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
n := time.Now()
|
||
|
a := addUserParams{
|
||
|
Subject: uuid.NewString(),
|
||
|
Password: pwHash,
|
||
|
Email: arg.Email,
|
||
|
EmailVerified: false,
|
||
|
UpdatedAt: n,
|
||
|
Registered: n,
|
||
|
Active: true,
|
||
|
}
|
||
|
return a.Subject, q.addUser(ctx, a)
|
||
|
}
|
||
|
|
||
|
type CheckLoginResult struct {
|
||
|
Subject string `json:"subject"`
|
||
|
HasOtp bool `json:"has_otp"`
|
||
|
Email string `json:"email"`
|
||
|
EmailVerified bool `json:"email_verified"`
|
||
|
}
|
||
|
|
||
|
func (q *Queries) CheckLogin(ctx context.Context, un, pw string) (CheckLoginResult, error) {
|
||
|
login, err := q.checkLogin(ctx, un)
|
||
|
if err != nil {
|
||
|
return CheckLoginResult{}, err
|
||
|
}
|
||
|
err = password.CheckPasswordHash(login.Password, pw)
|
||
|
if err != nil {
|
||
|
return CheckLoginResult{}, err
|
||
|
}
|
||
|
return CheckLoginResult{
|
||
|
Subject: login.Subject,
|
||
|
HasOtp: login.HasOtp,
|
||
|
Email: login.Email,
|
||
|
EmailVerified: login.EmailVerified,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func (q *Queries) ChangePassword(ctx context.Context, subject, newPw string) error {
|
||
|
userPassword, err := q.getUserPassword(ctx, subject)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
newPwHash, err := password.HashPassword(newPw)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return q.changeUserPassword(ctx, changeUserPasswordParams{
|
||
|
Password: newPwHash,
|
||
|
UpdatedAt: time.Now(),
|
||
|
Subject: subject,
|
||
|
Password_2: userPassword,
|
||
|
})
|
||
|
}
|