octane-website/src/routes/users.js
2026-07-10 11:27:08 +02:00

63 lines
1.6 KiB
JavaScript

const express = require('express');
const usersRepo = require('../repositories/usersRepo');
const config = require('../config');
const asyncHandler = require('../lib/asyncHandler');
const router = express.Router();
function authentikAccountUrl() {
if (!config.authentikPublicUrl) return null;
return new URL('/if/user/', config.authentikPublicUrl).href;
}
router.get(
'/me',
asyncHandler(async (req, res) => {
const { id, name, display_name, username, email, avatar_url, is_admin } = req.user;
res.json({
id,
name,
hasCustomName: !!display_name,
username,
email,
avatarUrl: avatar_url,
isAdmin: is_admin,
authentikAccountUrl: authentikAccountUrl(),
});
})
);
router.get(
'/me/profile',
asyncHandler(async (req, res) => {
const { id, name, display_name, username, email, avatar_url, groups, is_admin, created_at } = req.user;
const stats = await usersRepo.getActivityStats(id);
res.json({
id,
name,
hasCustomName: !!display_name,
username,
email,
avatarUrl: avatar_url,
groups,
isAdmin: is_admin,
createdAt: created_at,
stats,
authentikAccountUrl: authentikAccountUrl(),
});
})
);
router.patch(
'/me/display-name',
asyncHandler(async (req, res) => {
const { displayName } = req.body || {};
if (displayName && displayName.trim().length > 60) {
return res.status(400).json({ error: 'display_name_too_long' });
}
const user = await usersRepo.updateDisplayName(req.user.id, displayName || '');
res.json({ name: user.name, hasCustomName: !!user.display_name });
})
);
module.exports = router;