blob: 78963e7a54b135bf035672cb07565579ed573fec [file] [log] [blame]
Misha Krieger-Raynauld242560f2022-10-16 19:59:58 -04001/*
2 * Copyright (C) 2022 Savoir-faire Linux Inc.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License as
6 * published by the Free Software Foundation; either version 3 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Affero General Public License for more details.
13 *
14 * You should have received a copy of the GNU Affero General Public
15 * License along with this program. If not, see
16 * <https://www.gnu.org/licenses/>.
17 */
Misha Krieger-Raynauldcfa44302022-11-30 18:36:36 -050018import { Request, Router } from 'express';
Misha Krieger-Raynauld153a1482022-11-05 12:00:41 -040019import asyncHandler from 'express-async-handler';
Misha Krieger-Raynauldcfa44302022-11-30 18:36:36 -050020import { ParamsDictionary } from 'express-serve-static-core';
21import { AccountDetails, HttpStatusCode, IAccount, IContact } from 'jami-web-common';
Misha Krieger-Raynauld242560f2022-10-16 19:59:58 -040022import { Container } from 'typedi';
23
Misha Krieger-Raynauldaddd6fe2022-10-22 12:46:04 -040024import { Jamid } from '../jamid/jamid.js';
Misha Krieger-Raynauld242560f2022-10-16 19:59:58 -040025import { authenticateToken } from '../middleware/auth.js';
26
27const jamid = Container.get(Jamid);
28
29export const accountRouter = Router();
30
Misha Krieger-Raynauldb6f1c322022-10-23 20:42:57 -040031accountRouter.use(authenticateToken);
32
Misha Krieger-Raynauld153a1482022-11-05 12:00:41 -040033// TODO: Do we really need this route to return the default moderators?
34// It would be cleaner just to GET /default-moderators for this
35accountRouter.get(
36 '/',
37 asyncHandler(async (_req, res) => {
38 const accountId = res.locals.accountId;
Misha Krieger-Raynauldb6f1c322022-10-23 20:42:57 -040039
Misha Krieger-Raynauld153a1482022-11-05 12:00:41 -040040 // Add usernames for default moderators
41 const defaultModeratorUris = jamid.getDefaultModeratorUris(accountId);
Misha Krieger-Raynauldcfa44302022-11-30 18:36:36 -050042 const namedDefaultModerators: IContact[] = [];
Misha Krieger-Raynauld153a1482022-11-05 12:00:41 -040043 for (const defaultModeratorUri of defaultModeratorUris) {
44 const { username } = await jamid.lookupAddress(defaultModeratorUri, accountId);
45 namedDefaultModerators.push({
46 uri: defaultModeratorUri,
47 registeredName: username,
48 });
49 }
50
Misha Krieger-Raynauldcfa44302022-11-30 18:36:36 -050051 const account: IAccount = {
Misha Krieger-Raynauld153a1482022-11-05 12:00:41 -040052 id: accountId,
53 details: jamid.getAccountDetails(accountId),
54 volatileDetails: jamid.getVolatileAccountDetails(accountId),
55 defaultModerators: namedDefaultModerators,
56 devices: jamid.getDevices(accountId),
Misha Krieger-Raynauldcfa44302022-11-30 18:36:36 -050057 };
58 res.send(account);
Misha Krieger-Raynauld153a1482022-11-05 12:00:41 -040059 })
60);
Misha Krieger-Raynauld242560f2022-10-16 19:59:58 -040061
Misha Krieger-Raynauldcfa44302022-11-30 18:36:36 -050062accountRouter.patch('/', (req: Request<ParamsDictionary, string, Partial<AccountDetails>>, res) => {
Misha Krieger-Raynauldb6f1c322022-10-23 20:42:57 -040063 const accountId = res.locals.accountId;
Misha Krieger-Raynauldcb11bba2022-11-11 18:08:33 -050064
Misha Krieger-Raynauldb6f1c322022-10-23 20:42:57 -040065 const currentAccountDetails = jamid.getAccountDetails(accountId);
66 const newAccountDetails: AccountDetails = { ...currentAccountDetails, ...req.body };
simon5da8ca62022-11-09 15:21:25 -050067 jamid.setAccountDetails(accountId, newAccountDetails);
Misha Krieger-Raynauldcb11bba2022-11-11 18:08:33 -050068
Misha Krieger-Raynauldbfed1732022-11-01 20:49:35 -040069 res.sendStatus(HttpStatusCode.NoContent);
Misha Krieger-Raynauld242560f2022-10-16 19:59:58 -040070});