Skip to content

Commit 1a962bd

Browse files
authored
Merge pull request #2 from DBOMproject/SubscriptionAuth
Add authorization to the Subscription request
2 parents 8ce50fc + 8bbd904 commit 1a962bd

File tree

2 files changed

+183
-30
lines changed

2 files changed

+183
-30
lines changed

app.js

Lines changed: 91 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ app.use(express.urlencoded({
5656
app.use(cors());
5757

5858
const userState = {};
59+
60+
// store subscription requests
61+
let subscriptionRequests= [];
62+
5963
/**
6064
* sleep function
6165
*/
@@ -178,6 +182,82 @@ app.post('/login', (req, res) => {
178182
});
179183
});
180184

185+
/**
186+
* List of subscription requests
187+
*/
188+
app.get('/subscriptionRequests', (req, res) => {
189+
res.send({"subscriptionRequests": subscriptionRequests})
190+
})
191+
192+
/**
193+
* Get suscription request by Id
194+
*/
195+
app.get('/subscriptionRequests/:id', (req, res) => {
196+
const reqId = req.params.id;
197+
const requestObj = subscriptionRequests.find(ele => ele.joinId === reqId)
198+
if(requestObj){
199+
res.json({requestObject: requestObj})
200+
}
201+
else{
202+
res.send("Id not found")
203+
}
204+
205+
})
206+
207+
/**
208+
* @param id Id of the subscription request to be approved
209+
* Approve the subscription request of the given id
210+
*/
211+
212+
app.post('/subscriptionRequests/:id/accept', (req, res) => {
213+
214+
let id = req.params.id;
215+
let subscriptionObjIndex = subscriptionRequests.findIndex(request => request.joinId === id)
216+
subscriptionRequests[subscriptionObjIndex].status = 'approved'
217+
const {joinId ,userName, userFQDN, role, channelId, repoID} = subscriptionRequests[subscriptionObjIndex]
218+
axios.post(`${databaseAccessControlUrl}/addUser`, { userName, role, channelId }).then((data) => {
219+
const credentials = data.data;
220+
credentials.joinId = joinId;
221+
credentials.repoID = repoID;
222+
res.json({Message: `Subscription with id ${id} has been approved`})
223+
// Create a private direct chat to send the database credentials
224+
client.createRoom({
225+
preset: 'trusted_private_chat',
226+
invite: [userFQDN],
227+
is_direct: true,
228+
name: `${userName}-${channelId}-${new Date().getTime()}`,
229+
room_alias_name: `${userName}-${channelId}-${new Date().getTime()}`,
230+
}).then(async (roomId) => {
231+
const content = {
232+
body: JSON.stringify(credentials),
233+
msgtype: 'm.text',
234+
};
235+
// Send the credentials to the user
236+
client.sendMessage(roomId.room_id, content)
237+
.then(() => { console.log('message sent'); })
238+
.catch((err) => {
239+
console.log(err);
240+
});
241+
}).catch((err) => {
242+
console.log(err);
243+
});
244+
}).catch((err) => {
245+
console.log(err);
246+
});
247+
248+
})
249+
250+
/**
251+
* @param id Id of the subscription request to be rejected
252+
* Reject the subscription request of the given id
253+
*/
254+
app.post('/subscriptionRequest/:id/reject', (req, res) => {
255+
let id = req.params.id
256+
let subscriptionObjIndex = subscriptionRequests.findIndex(request => request.joinId === id)
257+
subscriptionRequests[subscriptionObjIndex].status = 'rejected'
258+
res.json({Message: `Subscription with id ${id} has been rejected`})
259+
})
260+
181261
/**
182262
* Send a request to subscribe a channel
183263
* @param {string} roomId Id of the remote public room
@@ -254,36 +334,17 @@ client.on('Room.timeline', async (event, room) => {
254334
if (foundRepo.length > 0) {
255335
const userFQDN = event.getSender();
256336
const userName = event.getSender().split(':')[0].slice(1);
257-
// call database access control agent to get the credentials
258-
axios.post(`${databaseAccessControlUrl}/addUser`, { userName, role, channelId }).then((data) => {
259-
const credentials = data.data;
260-
credentials.joinId = joinId;
261-
credentials.repoID = repoID;
262-
263-
// Create a private direct chat to send the database credentials
264-
client.createRoom({
265-
preset: 'trusted_private_chat',
266-
invite: [userFQDN],
267-
is_direct: true,
268-
name: `${userName}-${channelId}-${new Date().getTime()}`,
269-
room_alias_name: `${userName}-${channelId}-${new Date().getTime()}`,
270-
}).then(async (roomId) => {
271-
const content = {
272-
body: JSON.stringify(credentials),
273-
msgtype: 'm.text',
274-
};
275-
// Send the credentials to the user
276-
client.sendMessage(roomId.room_id, content)
277-
.then(() => { console.log('message sent'); })
278-
.catch((err) => {
279-
console.log(err);
280-
});
281-
}).catch((err) => {
282-
console.log(err);
283-
});
284-
}).catch((err) => {
285-
console.log(err);
286-
});
337+
// push subscription request to the queue
338+
const subscriptionDetails = {
339+
joinId: `${joinId}`,
340+
userName: `${userName}`,
341+
userFQDN: `${userFQDN}`,
342+
channelId: `${channelId}`,
343+
repoID: `${repoID}`,
344+
role: `${role}`,
345+
status: 'pending'
346+
};
347+
subscriptionRequests.push(subscriptionDetails)
287348
}
288349
} else {
289350
console.log(`${repoID} not found`);

postman/FedAgent.postman_collection.json

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,98 @@
7474
}
7575
},
7676
"response": []
77+
},
78+
{
79+
"name": "Get list of subscription requests",
80+
"request": {
81+
"method": "GET",
82+
"header": [],
83+
"url": {
84+
"raw": "{{url}}/subscriptionRequests/",
85+
"host": [
86+
"{{url}}"
87+
],
88+
"path": [
89+
"subscriptionRequests",
90+
""
91+
]
92+
}
93+
},
94+
"response": []
95+
},
96+
{
97+
"name": "Accept subscription request",
98+
"request": {
99+
"method": "POST",
100+
"header": [],
101+
"url": {
102+
"raw": "{{url}}/subscriptionRequests/:id/accept",
103+
"host": [
104+
"{{url}}"
105+
],
106+
"path": [
107+
"subscriptionRequests",
108+
":id",
109+
"accept"
110+
],
111+
"variable": [
112+
{
113+
"key": "id",
114+
"value": null
115+
}
116+
]
117+
}
118+
},
119+
"response": []
120+
},
121+
{
122+
"name": "Reject subscription request",
123+
"request": {
124+
"method": "POST",
125+
"header": [],
126+
"url": {
127+
"raw": "{{url}}/subscriptionRequests/:id/reject",
128+
"host": [
129+
"{{url}}"
130+
],
131+
"path": [
132+
"subscriptionRequests",
133+
":id",
134+
"reject"
135+
],
136+
"variable": [
137+
{
138+
"key": "id",
139+
"value": null
140+
}
141+
]
142+
}
143+
},
144+
"response": []
145+
},
146+
{
147+
"name": "Get subscription request by id",
148+
"request": {
149+
"method": "GET",
150+
"header": [],
151+
"url": {
152+
"raw": "{{url}}/subscriptionRequests/:id",
153+
"host": [
154+
"{{url}}"
155+
],
156+
"path": [
157+
"subscriptionRequests",
158+
":id"
159+
],
160+
"variable": [
161+
{
162+
"key": "id",
163+
"value": null
164+
}
165+
]
166+
}
167+
},
168+
"response": []
77169
}
78170
]
79171
}

0 commit comments

Comments
 (0)