aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/user/service.go
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2025-08-15 19:20:48 +0100
committerLeonardo Bishop <me@leonardobishop.com>2025-08-15 19:20:48 +0100
commit8f7dec8ba6b2f9bde01afd0a110596ebbd43e0ed (patch)
tree7b4f203d92f4b99b1e98fac314415e293984196b /pkg/user/service.go
parent4697556cac819c47d068819b9fc9c3b4ea84e279 (diff)
Implement OIDC
Diffstat (limited to 'pkg/user/service.go')
-rw-r--r--pkg/user/service.go49
1 files changed, 18 insertions, 31 deletions
diff --git a/pkg/user/service.go b/pkg/user/service.go
index 7784811..21cfa9e 100644
--- a/pkg/user/service.go
+++ b/pkg/user/service.go
@@ -9,6 +9,7 @@ import (
"github.com/LMBishop/confplanner/pkg/database/sqlc"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgconn"
+ "github.com/jackc/pgx/v5/pgtype"
"github.com/jackc/pgx/v5/pgxpool"
"golang.org/x/crypto/bcrypt"
)
@@ -17,7 +18,6 @@ type Service interface {
CreateUser(username string, password string) (*sqlc.User, error)
GetUserByName(username string) (*sqlc.User, error)
GetUserByID(id int32) (*sqlc.User, error)
- Authenticate(username string, password string) (*sqlc.User, error)
}
var (
@@ -43,18 +43,30 @@ func (s *service) CreateUser(username string, password string) (*sqlc.User, erro
return nil, ErrNotAcceptingRegistrations
}
+ var passwordHash pgtype.Text
queries := sqlc.New(s.pool)
- var passwordBytes = []byte(password)
+ if password != "" {
+ var passwordBytes = []byte(password)
- hash, err := bcrypt.GenerateFromPassword(passwordBytes, bcrypt.DefaultCost)
- if err != nil {
- return nil, fmt.Errorf("could not hash password: %w", err)
+ hash, err := bcrypt.GenerateFromPassword(passwordBytes, bcrypt.DefaultCost)
+ if err != nil {
+ return nil, fmt.Errorf("could not hash password: %w", err)
+ }
+
+ passwordHash = pgtype.Text{
+ String: string(hash),
+ Valid: true,
+ }
+ } else {
+ passwordHash = pgtype.Text{
+ Valid: false,
+ }
}
user, err := queries.CreateUser(context.Background(), sqlc.CreateUserParams{
Username: strings.ToLower(username),
- Password: string(hash),
+ Password: passwordHash,
})
if err != nil {
var pgErr *pgconn.PgError
@@ -94,28 +106,3 @@ func (s *service) GetUserByID(id int32) (*sqlc.User, error) {
return &user, nil
}
-
-func (s *service) Authenticate(username string, password string) (*sqlc.User, error) {
- random, err := bcrypt.GenerateFromPassword([]byte("00000000"), bcrypt.DefaultCost)
- if err != nil {
- return nil, err
- }
-
- user, err := s.GetUserByName(username)
- if err != nil {
- if errors.Is(err, ErrUserNotFound) {
- bcrypt.CompareHashAndPassword(random, []byte(password))
- return nil, nil
- }
- return nil, err
- }
-
- if err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)); err != nil {
- if errors.Is(err, bcrypt.ErrMismatchedHashAndPassword) {
- return nil, nil
- }
- return nil, err
- }
-
- return user, nil
-}