Add login/register logic

Signed-off-by: gearnode <bryan@frimin.fr>
This commit is contained in:
gearnode
2025-02-25 17:32:26 +01:00
parent 49c3807b4f
commit e9ae77a4a0
28 changed files with 2075 additions and 419 deletions

View File

@@ -0,0 +1,5 @@
-- Add organization_id column to usrmgr_users table
ALTER TABLE usrmgr_users ADD COLUMN organization_id TEXT REFERENCES organizations(id);
-- Create an index for faster lookups
CREATE INDEX usrmgr_users_organization_id_idx ON usrmgr_users(organization_id);

View File

@@ -16,7 +16,6 @@ package coredata
import (
"context"
"fmt"
"time"
"github.com/getprobo/probo/pkg/gid"
@@ -57,17 +56,17 @@ func (s *Session) LoadByID(
q := `
SELECT
id,
user_id,
expired_at,
created_at,
updated_at
FROM
sessions
usrmgr_sessions
WHERE
id = @session_id
LIMIT 1;
`
q = fmt.Sprintf(q)
args := pgx.NamedArgs{"session_id": sessionID}
r := conn.QueryRow(ctx, q, args)
@@ -88,7 +87,7 @@ func (s *Session) Insert(
) error {
q := `
INSERT INTO
sessions (id, user_id, expired_at, created_at, updated_at)
usrmgr_sessions (id, user_id, expired_at, created_at, updated_at)
VALUES (
@session_id,
@user_id,
@@ -109,3 +108,44 @@ VALUES (
_, err := conn.Exec(ctx, q, args)
return err
}
func (s *Session) Update(
ctx context.Context,
conn pg.Conn,
) error {
q := `
UPDATE usrmgr_sessions
SET
expired_at = @expired_at,
updated_at = @updated_at
WHERE
id = @session_id
`
args := pgx.NamedArgs{
"session_id": s.ID,
"expired_at": s.ExpiredAt,
"updated_at": s.UpdatedAt,
}
_, err := conn.Exec(ctx, q, args)
return err
}
func DeleteSession(
ctx context.Context,
conn pg.Conn,
sessionID gid.GID,
) error {
q := `
DELETE FROM
usrmgr_sessions
WHERE
id = @session_id
`
args := pgx.NamedArgs{"session_id": sessionID}
_, err := conn.Exec(ctx, q, args)
return err
}

View File

@@ -29,6 +29,7 @@ type (
ID gid.GID
EmailAddress string
HashedPassword []byte
OrganizationID gid.GID
CreatedAt time.Time
UpdatedAt time.Time
}
@@ -43,6 +44,7 @@ func (u *User) scan(r pgx.Row) error {
&u.ID,
&u.EmailAddress,
&u.HashedPassword,
&u.OrganizationID,
&u.CreatedAt,
&u.UpdatedAt,
)
@@ -58,12 +60,13 @@ SELECT
id,
email_address,
hashed_password,
organization_id,
created_at,
updated_at
FROM
users
usrmgr_users
WHERE
email = @user_email
email_address = @user_email
LIMIT 1;
`
@@ -80,3 +83,67 @@ LIMIT 1;
return nil
}
func (u *User) LoadByID(
ctx context.Context,
conn pg.Conn,
userID gid.GID,
) error {
q := `
SELECT
id,
email_address,
hashed_password,
organization_id,
created_at,
updated_at
FROM
usrmgr_users
WHERE
id = @user_id
LIMIT 1;
`
args := pgx.NamedArgs{"user_id": userID}
r := conn.QueryRow(ctx, q, args)
u2 := User{}
if err := u2.scan(r); err != nil {
return err
}
*u = u2
return nil
}
func (u *User) Insert(
ctx context.Context,
conn pg.Conn,
) error {
q := `
INSERT INTO
usrmgr_users (id, email_address, hashed_password, organization_id, created_at, updated_at)
VALUES (
@user_id,
@email_address,
@hashed_password,
@organization_id,
@created_at,
@updated_at
)
`
args := pgx.NamedArgs{
"user_id": u.ID,
"email_address": u.EmailAddress,
"hashed_password": u.HashedPassword,
"organization_id": "AZSfP_xAcAC5IAAAAAAltA",
"created_at": u.CreatedAt,
"updated_at": u.UpdatedAt,
}
_, err := conn.Exec(ctx, q, args)
return err
}