blob: 5d500028b361e204e87dfb81e0f0e2a83903c94c [file] [log] [blame]
Adrien Béraud0cb76c92021-04-07 19:59:08 -04001const express = require('express')
Adrien Béraud6ecaa402021-04-06 17:37:25 -04002
3class JamiRestApi {
4 constructor(jami) {
5 this.jami = jami
6 }
7
8 getRouter() {
Adrien Béraud0cb76c92021-04-07 19:59:08 -04009 const router = express.Router({mergeParams: true})
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040010 router.use(express.json());
Adrien Béraud6ecaa402021-04-06 17:37:25 -040011
12 // Accounts
13 router.get(['/accounts'], (req, res, next) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -040014 console.log("Get account list")
Adrien Béraud6ecaa402021-04-06 17:37:25 -040015 res.json(this.jami.getAccountList().map(account => account.getSummary()))
Adrien Béraud0cb76c92021-04-07 19:59:08 -040016 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -040017
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040018 const accountRouter = express.Router({mergeParams: true})
19 router.use('/accounts/:accountId', accountRouter)
20
21 accountRouter.get(['/'], (req, res, next) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -040022 console.log(`Get account ${req.params.accountId}`)
23 const account = this.jami.getAccount(req.params.accountId)
Adrien Béraud6ecaa402021-04-06 17:37:25 -040024 if (account)
25 res.json(account.getObject())
26 else
27 res.sendStatus(404)
Adrien Béraud0cb76c92021-04-07 19:59:08 -040028 })
29
30 // Contacts
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040031 accountRouter.get(['/contacts'], (req, res, next) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -040032 console.log(`Get account ${req.params.accountId}`)
33 const account = this.jami.getAccount(req.params.accountId)
34 if (account)
35 res.json(account.getContacts())
36 else
37 res.sendStatus(404)
38 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -040039
40 // Conversations
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040041 accountRouter.get('/conversations', (req, res, next) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -040042 console.log(`Get conversations for account ${req.params.accountId}`)
43 const account = this.jami.getAccount(req.params.accountId)
44 if (!account)
45 res.sendStatus(404)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040046 const conversations = account.getConversations()
47 res.json(Object.keys(conversations).map(conversationId => conversations[conversationId].getObject({
48 memberFilter: member => member.contact.getUri() !== account.getUri()
49 })))
50 //res.json(account.getConversations())
Adrien Béraud6ecaa402021-04-06 17:37:25 -040051 })
52
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040053 accountRouter.post('/conversations', (req, res, next) => {
54 console.log(`Create conversations for account, contact ${req.params.accountId}`)
55 console.log(req.body)
56 const account = this.jami.getAccount(req.params.accountId)
57 if (!account)
58 res.sendStatus(404)
59 if (req.body.members.length === 1) {
60 const details = this.jami.addContact(req.params.accountId, req.body.members[0])
61 res.json(details)
62 } else
63 res.sendStatus(400)
64 })
65
66 accountRouter.get('/conversations/:conversationId', (req, res, next) => {
Adrien Béraud0cb76c92021-04-07 19:59:08 -040067 console.log(`Get conversation ${req.params.conversationId} for account ${req.params.accountId}`)
68 const account = this.jami.getAccount(req.params.accountId)
69 if (!account)
70 res.sendStatus(404)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040071 const conversation = account.getConversation(req.params.conversationId)
72 if (!conversation)
73 res.sendStatus(404)
74 else {
75 res.json(conversation.getObject({
76 memberFilter: member => member.contact.getUri() !== account.getUri()
77 }))
78 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -040079 })
80
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040081 // Nameserver
82 const nsRouter = express.Router({mergeParams: true})
83 accountRouter.use('/ns', nsRouter)
84
85 nsRouter.get(['/name/:nameQuery'], (req, res, next) => {
86 console.log(`Name lookup ${req.params.nameQuery}`)
87 this.jami.lookupName(req.params.accountId, req.params.nameQuery)
88 .then(result => {
89 if (result.state == 0)
90 res.json(result)
91 else if (result.state == 1)
92 res.sendStatus(400)
93 else
94 res.sendStatus(404)
95 }).catch(e => {
96 res.sendStatus(404)
97 })
98 })
99 nsRouter.get(['/addr/:addrQuery'], (req, res, next) => {
100 console.log(`Address lookup ${req.params.addrQuery}`)
101 this.jami.lookupAddress(req.params.accountId, req.params.addrQuery)
102 .then(result => {
103 if (result.state == 0)
104 res.json(result)
105 else if (result.state == 1)
106 res.sendStatus(400)
107 else
108 res.sendStatus(404)
109 }).catch(e => {
110 res.sendStatus(404)
111 })
112 })
113
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400114 return router
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400115 }
116}
117
Adrien Béraud0cb76c92021-04-07 19:59:08 -0400118module.exports = JamiRestApi