featur add fahrmeister

This commit is contained in:
Matthias Hochmeister
2026-02-27 21:46:50 +01:00
parent da4a56ba6b
commit dbe4f52871
17 changed files with 426 additions and 152 deletions

View File

@@ -11,7 +11,7 @@ class UserService {
const query = `
SELECT id, email, authentik_sub, name, preferred_username, given_name,
family_name, profile_picture_url, refresh_token, refresh_token_expires_at,
is_active, last_login_at, created_at, updated_at, preferences
is_active, last_login_at, created_at, updated_at, preferences, authentik_groups
FROM users
WHERE authentik_sub = $1
`;
@@ -39,7 +39,7 @@ class UserService {
const query = `
SELECT id, email, authentik_sub, name, preferred_username, given_name,
family_name, profile_picture_url, refresh_token, refresh_token_expires_at,
is_active, last_login_at, created_at, updated_at, preferences
is_active, last_login_at, created_at, updated_at, preferences, authentik_groups
FROM users
WHERE email = $1
`;
@@ -67,7 +67,7 @@ class UserService {
const query = `
SELECT id, email, authentik_sub, name, preferred_username, given_name,
family_name, profile_picture_url, refresh_token, refresh_token_expires_at,
is_active, last_login_at, created_at, updated_at, preferences
is_active, last_login_at, created_at, updated_at, preferences, authentik_groups
FROM users
WHERE id = $1
`;
@@ -101,12 +101,13 @@ class UserService {
given_name,
family_name,
profile_picture_url,
is_active
is_active,
authentik_groups
)
VALUES ($1, $2, $3, $4, $5, $6, $7, true)
VALUES ($1, $2, $3, $4, $5, $6, $7, true, $8)
RETURNING id, email, authentik_sub, name, preferred_username, given_name,
family_name, profile_picture_url, refresh_token, refresh_token_expires_at,
is_active, last_login_at, created_at, updated_at, preferences
is_active, last_login_at, created_at, updated_at, preferences, authentik_groups
`;
const values = [
@@ -117,6 +118,7 @@ class UserService {
userData.given_name || null,
userData.family_name || null,
userData.profile_picture_url || null,
userData.authentik_groups ?? [],
];
const result = await pool.query(query, values);
@@ -185,7 +187,7 @@ class UserService {
WHERE id = $${paramCount}
RETURNING id, email, authentik_sub, name, preferred_username, given_name,
family_name, profile_picture_url, refresh_token, refresh_token_expires_at,
is_active, last_login_at, created_at, updated_at, preferences
is_active, last_login_at, created_at, updated_at, preferences, authentik_groups
`;
const result = await pool.query(query, values);
@@ -270,6 +272,22 @@ class UserService {
return false;
}
}
/**
* Sync Authentik groups for a user
*/
async updateGroups(id: string, groups: string[]): Promise<void> {
try {
await pool.query(
`UPDATE users SET authentik_groups = $1 WHERE id = $2`,
[groups, id]
);
logger.debug('Updated authentik_groups', { userId: id });
} catch (error) {
logger.error('Error updating authentik_groups', { error, userId: id });
throw new Error('Failed to update user groups');
}
}
}
export default new UserService();