Create default moderators API routes

GitLab: #93
Change-Id: Idc107915f4248842949efa844e4e17601650d375
diff --git a/server/src/routers/default-moderators-router.ts b/server/src/routers/default-moderators-router.ts
new file mode 100644
index 0000000..797aac3
--- /dev/null
+++ b/server/src/routers/default-moderators-router.ts
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program.  If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+import { Router } from 'express';
+import asyncHandler from 'express-async-handler';
+import { HttpStatusCode } from 'jami-web-common';
+import { Container } from 'typedi';
+
+import { Jamid } from '../jamid/jamid.js';
+import { authenticateToken } from '../middleware/auth.js';
+
+const jamid = Container.get(Jamid);
+
+export const defaultModeratorsRouter = Router();
+
+defaultModeratorsRouter.use(authenticateToken);
+
+defaultModeratorsRouter.get(
+  '/',
+  asyncHandler(async (_req, res) => {
+    const accountId = res.locals.accountId;
+
+    // Add usernames for default moderators
+    const defaultModeratorUris = jamid.getDefaultModeratorUris(accountId);
+    const namedDefaultModerators = [];
+    for (const defaultModeratorUri of defaultModeratorUris) {
+      const { username } = await jamid.lookupAddress(defaultModeratorUri, accountId);
+      namedDefaultModerators.push({
+        uri: defaultModeratorUri,
+        registeredName: username,
+      });
+    }
+
+    res.send(namedDefaultModerators);
+  })
+);
+
+defaultModeratorsRouter.put('/:contactId', (req, res) => {
+  jamid.addDefaultModerator(res.locals.accountId, req.params.contactId);
+  res.end();
+});
+
+defaultModeratorsRouter.delete('/:contactId', (req, res) => {
+  jamid.removeDefaultModerator(res.locals.accountId, req.params.contactId);
+  res.sendStatus(HttpStatusCode.NoContent);
+});