initial commit
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
import { pool } from '../db.js';
|
||||
|
||||
export async function createAuthSession({
|
||||
userId,
|
||||
refreshTokenHash,
|
||||
csrfTokenHash,
|
||||
userAgent,
|
||||
ipAddress,
|
||||
expiresAt,
|
||||
}) {
|
||||
const sql = `
|
||||
INSERT INTO uno_bff.auth_sessions
|
||||
(
|
||||
user_id,
|
||||
refresh_token_hash,
|
||||
csrf_token_hash,
|
||||
status,
|
||||
user_agent,
|
||||
ip_address,
|
||||
expires_at,
|
||||
last_seen_at
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
$1, $2, $3, 'active', $4, $5, $6, now()
|
||||
)
|
||||
RETURNING
|
||||
id,
|
||||
user_id,
|
||||
refresh_token_hash,
|
||||
csrf_token_hash,
|
||||
status,
|
||||
user_agent,
|
||||
ip_address,
|
||||
expires_at,
|
||||
last_seen_at,
|
||||
revoked_at,
|
||||
created_at,
|
||||
updated_at
|
||||
`;
|
||||
|
||||
const params = [
|
||||
userId,
|
||||
refreshTokenHash,
|
||||
csrfTokenHash,
|
||||
userAgent || null,
|
||||
ipAddress || null,
|
||||
expiresAt,
|
||||
];
|
||||
|
||||
const { rows } = await pool.query(sql, params);
|
||||
return rows[0];
|
||||
}
|
||||
|
||||
export async function revokeSession(sessionId) {
|
||||
const sql = `
|
||||
UPDATE uno_bff.auth_sessions
|
||||
SET
|
||||
status = 'revoked',
|
||||
revoked_at = now(),
|
||||
updated_at = now()
|
||||
WHERE id = $1
|
||||
AND status = 'active'
|
||||
`;
|
||||
|
||||
await pool.query(sql, [sessionId]);
|
||||
}
|
||||
|
||||
export async function getAuthSession(sessionId) {
|
||||
const sql = `
|
||||
SELECT id, user_id, refresh_token_hash, csrf_token_hash, status, expires_at
|
||||
FROM uno_bff.auth_sessions
|
||||
WHERE id = $1 AND status = 'active' AND expires_at > now()
|
||||
`;
|
||||
const result = await pool.query(sql, [sessionId]);
|
||||
return result.rows[0] || null;
|
||||
}
|
||||
|
||||
export async function rotateSessionTokens(sessionId, newRefreshTokenHash, newCsrfTokenHash) {
|
||||
const sql = `
|
||||
UPDATE uno_bff.auth_sessions
|
||||
SET
|
||||
refresh_token_hash = $2,
|
||||
csrf_token_hash = $3,
|
||||
updated_at = now()
|
||||
WHERE id = $1 AND status = 'active'
|
||||
RETURNING id, user_id
|
||||
`;
|
||||
const result = await pool.query(sql, [sessionId, newRefreshTokenHash, newCsrfTokenHash]);
|
||||
return result.rows[0] || null;
|
||||
}
|
||||
Reference in New Issue
Block a user