use ESM, add server setup, cleanup

Change-Id: Iafac35c2082523ae98c31017d9bad5c4d6e18ef3
diff --git a/routes/jami.js b/routes/jami.js
index 5d50002..674a688 100644
--- a/routes/jami.js
+++ b/routes/jami.js
@@ -1,4 +1,4 @@
-const express = require('express')
+import { Router } from 'express'
 
 class JamiRestApi {
     constructor(jami) {
@@ -6,17 +6,28 @@
     }
 
     getRouter() {
-        const router = express.Router({mergeParams: true})
-        router.use(express.json());
+        const router = Router({mergeParams: true})
+        //router.use(express.json());
 
         // Accounts
         router.get(['/accounts'], (req, res, next) => {
             console.log("Get account list")
-            res.json(this.jami.getAccountList().map(account => account.getSummary()))
+            let accounts = this.jami.getAccountList()
+            if (req.user.accountFilter)
+                accounts = accounts.filter(account => req.user.accountFilter(account.getId()))
+            res.json(accounts.map(account => account.getSummary()))
         })
 
-        const accountRouter = express.Router({mergeParams: true})
-        router.use('/accounts/:accountId', accountRouter)
+        const checkAccount = (req, res, next) => {
+            console.log(`checkAccount ${req.params.accountId} for ${req.user.id}`)
+            if (req.user && (!req.user.accountFilter || req.user.accountFilter(req.params.accountId))) {
+                return next();
+            }
+            res.status(403).end()
+        }
+
+        const accountRouter = Router({mergeParams: true})
+        router.use('/accounts/:accountId', checkAccount, accountRouter)
 
         accountRouter.get(['/'], (req, res, next) => {
             console.log(`Get account ${req.params.accountId}`)
@@ -24,7 +35,7 @@
             if (account)
                 res.json(account.getObject())
             else
-                res.sendStatus(404)
+                res.status(404).end()
         })
 
         // Contacts
@@ -34,7 +45,7 @@
             if (account)
                 res.json(account.getContacts())
             else
-                res.sendStatus(404)
+                res.status(404).end()
         })
 
         // Conversations
@@ -42,7 +53,7 @@
             console.log(`Get conversations for account ${req.params.accountId}`)
             const account = this.jami.getAccount(req.params.accountId)
             if (!account)
-                res.sendStatus(404)
+                return res.sendStatus(404)
             const conversations = account.getConversations()
             res.json(Object.keys(conversations).map(conversationId => conversations[conversationId].getObject({
                 memberFilter: member => member.contact.getUri() !== account.getUri()
@@ -55,22 +66,22 @@
             console.log(req.body)
             const account = this.jami.getAccount(req.params.accountId)
             if (!account)
-                res.sendStatus(404)
+                return res.sendStatus(404)
             if (req.body.members.length === 1) {
                 const details = this.jami.addContact(req.params.accountId, req.body.members[0])
                 res.json(details)
             } else
-                res.sendStatus(400)
+                res.status(400).end()
         })
 
         accountRouter.get('/conversations/:conversationId', (req, res, next) => {
             console.log(`Get conversation ${req.params.conversationId} for account ${req.params.accountId}`)
             const account = this.jami.getAccount(req.params.accountId)
             if (!account)
-                res.sendStatus(404)
+                return res.sendStatus(404)
             const conversation = account.getConversation(req.params.conversationId)
             if (!conversation)
-                res.sendStatus(404)
+                res.status(404).end()
             else {
                 res.json(conversation.getObject({
                     memberFilter: member => member.contact.getUri() !== account.getUri()
@@ -79,7 +90,7 @@
         })
 
         // Nameserver
-        const nsRouter = express.Router({mergeParams: true})
+        const nsRouter = Router({mergeParams: true})
         accountRouter.use('/ns', nsRouter)
 
         nsRouter.get(['/name/:nameQuery'], (req, res, next) => {
@@ -115,4 +126,4 @@
     }
 }
 
-module.exports = JamiRestApi
+export default JamiRestApi