mirror of
https://github.com/1f349/tulip.git
synced 2024-12-22 16:24:10 +00:00
Reimplement CheckLogin functionality
This commit is contained in:
parent
37570e2157
commit
1a7c13bb51
@ -38,10 +38,26 @@ func (q *Queries) AddUser(ctx context.Context, arg AddUserParams) (string, error
|
|||||||
return a.Subject, q.addUser(ctx, a)
|
return a.Subject, q.addUser(ctx, a)
|
||||||
}
|
}
|
||||||
|
|
||||||
type CheckLoginRow struct {
|
type CheckLoginResult struct {
|
||||||
Subject string `json:"subject"`
|
Subject string `json:"subject"`
|
||||||
Password password.HashString `json:"password"`
|
HasTwoFactor bool `json:"hasTwoFactor"`
|
||||||
HasTwoFactor bool `json:"hasTwoFactor"`
|
Email string `json:"email"`
|
||||||
Email string `json:"email"`
|
EmailVerified bool `json:"email_verified"`
|
||||||
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,
|
||||||
|
HasTwoFactor: login.HasOtp,
|
||||||
|
Email: login.Email,
|
||||||
|
EmailVerified: login.EmailVerified,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ INSERT INTO users (subject, name, username, password, email, email_verified, rol
|
|||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);
|
||||||
|
|
||||||
-- name: checkLogin :one
|
-- name: checkLogin :one
|
||||||
SELECT subject, password, EXISTS(SELECT 1 FROM otp WHERE otp.subject = users.subject), email, email_verified
|
SELECT subject, password, cast(EXISTS(SELECT 1 FROM otp WHERE otp.subject = users.subject) AS BOOLEAN) as has_otp, email, email_verified
|
||||||
FROM users
|
FROM users
|
||||||
WHERE username = ?
|
WHERE username = ?
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
@ -245,7 +245,7 @@ func (q *Queries) changeUserPassword(ctx context.Context, arg changeUserPassword
|
|||||||
}
|
}
|
||||||
|
|
||||||
const checkLogin = `-- name: checkLogin :one
|
const checkLogin = `-- name: checkLogin :one
|
||||||
SELECT subject, password, EXISTS(SELECT 1 FROM otp WHERE otp.subject = users.subject), email, email_verified
|
SELECT subject, password, cast(EXISTS(SELECT 1 FROM otp WHERE otp.subject = users.subject) AS BOOLEAN) as has_otp, email, email_verified
|
||||||
FROM users
|
FROM users
|
||||||
WHERE username = ?
|
WHERE username = ?
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
@ -254,7 +254,7 @@ LIMIT 1
|
|||||||
type checkLoginRow struct {
|
type checkLoginRow struct {
|
||||||
Subject string `json:"subject"`
|
Subject string `json:"subject"`
|
||||||
Password password.HashString `json:"password"`
|
Password password.HashString `json:"password"`
|
||||||
Column3 int64 `json:"column_3"`
|
HasOtp bool `json:"has_otp"`
|
||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
EmailVerified bool `json:"email_verified"`
|
EmailVerified bool `json:"email_verified"`
|
||||||
}
|
}
|
||||||
@ -265,7 +265,7 @@ func (q *Queries) checkLogin(ctx context.Context, username string) (checkLoginRo
|
|||||||
err := row.Scan(
|
err := row.Scan(
|
||||||
&i.Subject,
|
&i.Subject,
|
||||||
&i.Password,
|
&i.Password,
|
||||||
&i.Column3,
|
&i.HasOtp,
|
||||||
&i.Email,
|
&i.Email,
|
||||||
&i.EmailVerified,
|
&i.EmailVerified,
|
||||||
)
|
)
|
||||||
|
@ -63,7 +63,7 @@ func (h *HttpServer) LoginPost(rw http.ResponseWriter, req *http.Request, _ http
|
|||||||
var hasOtp bool
|
var hasOtp bool
|
||||||
|
|
||||||
if h.DbTx(rw, func(tx *database.Queries) error {
|
if h.DbTx(rw, func(tx *database.Queries) error {
|
||||||
loginUser, hasOtpRaw, hasVerifiedEmail, err := tx.CheckLogin(un, pw)
|
loginUser, err := tx.CheckLogin(req.Context(), un, pw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, sql.ErrNoRows) || errors.Is(err, bcrypt.ErrMismatchedHashAndPassword) {
|
if errors.Is(err, sql.ErrNoRows) || errors.Is(err, bcrypt.ErrMismatchedHashAndPassword) {
|
||||||
loginMismatch = 1
|
loginMismatch = 1
|
||||||
|
Loading…
Reference in New Issue
Block a user