2026-07-08 11:05:21 +02:00
|
|
|
const express = require('express');
|
2026-07-08 14:24:23 +02:00
|
|
|
const usersRepo = require('../repositories/usersRepo');
|
2026-07-08 17:00:47 +02:00
|
|
|
const config = require('../config');
|
2026-07-08 11:05:21 +02:00
|
|
|
const asyncHandler = require('../lib/asyncHandler');
|
|
|
|
|
|
|
|
|
|
const router = express.Router();
|
|
|
|
|
|
2026-07-08 17:00:47 +02:00
|
|
|
function authentikAccountUrl() {
|
|
|
|
|
if (!config.authentikPublicUrl) return null;
|
|
|
|
|
return new URL('/if/user/', config.authentikPublicUrl).href;
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-08 11:05:21 +02:00
|
|
|
router.get(
|
|
|
|
|
'/me',
|
|
|
|
|
asyncHandler(async (req, res) => {
|
2026-07-10 11:27:08 +02:00
|
|
|
const { id, name, display_name, username, email, avatar_url, is_admin } = req.user;
|
2026-07-08 17:00:47 +02:00
|
|
|
res.json({
|
|
|
|
|
id,
|
|
|
|
|
name,
|
2026-07-10 11:27:08 +02:00
|
|
|
hasCustomName: !!display_name,
|
2026-07-08 17:00:47 +02:00
|
|
|
username,
|
|
|
|
|
email,
|
|
|
|
|
avatarUrl: avatar_url,
|
|
|
|
|
isAdmin: is_admin,
|
|
|
|
|
authentikAccountUrl: authentikAccountUrl(),
|
|
|
|
|
});
|
2026-07-08 14:24:23 +02:00
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
router.get(
|
|
|
|
|
'/me/profile',
|
|
|
|
|
asyncHandler(async (req, res) => {
|
2026-07-10 11:27:08 +02:00
|
|
|
const { id, name, display_name, username, email, avatar_url, groups, is_admin, created_at } = req.user;
|
2026-07-08 14:24:23 +02:00
|
|
|
const stats = await usersRepo.getActivityStats(id);
|
|
|
|
|
res.json({
|
|
|
|
|
id,
|
|
|
|
|
name,
|
2026-07-10 11:27:08 +02:00
|
|
|
hasCustomName: !!display_name,
|
2026-07-08 14:24:23 +02:00
|
|
|
username,
|
|
|
|
|
email,
|
|
|
|
|
avatarUrl: avatar_url,
|
|
|
|
|
groups,
|
|
|
|
|
isAdmin: is_admin,
|
|
|
|
|
createdAt: created_at,
|
|
|
|
|
stats,
|
2026-07-08 17:00:47 +02:00
|
|
|
authentikAccountUrl: authentikAccountUrl(),
|
2026-07-08 14:24:23 +02:00
|
|
|
});
|
2026-07-08 11:05:21 +02:00
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
|
2026-07-10 11:27:08 +02:00
|
|
|
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 });
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
|
2026-07-08 11:05:21 +02:00
|
|
|
module.exports = router;
|