/
enrollment-admin.ts
123 lines (106 loc) · 3.28 KB
/
enrollment-admin.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import * as Router from 'koa-router';
import { store as event } from '../../controllers/server-event';
import {
createEnrollment, deleteEnrollment, getAllEnrollment, getEnrollmentById, putEnrollment
} from '../../controllers/enrollment';
import { validate } from '../schemas';
import { getServerConfig } from '../../controllers/server-config';
import { MethodNotAllowed } from 'http-errors';
import { serializeEnrollment } from '../serialize/enrollment';
/**
* Key enrollment admin
* Request handlers for key enrollment with admin access.
* @swagger
* tags: [enrollment]
*/
const router = new Router();
/**
* @route: /enrollment
* @swagger
* operationId: createEnrollment
*/
router.post('/enrollment', validate.body('createEnrollment'), async function (ctx) {
// Get enrollment to create from body
const enrollment: ApiPostEnrollmentObject = ctx.request.body;
// Verify all settings required for enrollment
// TODO: change this method with an end point to send the mail
if (!enrollment.test) {
if (!getServerConfig().enableSMTP) {
throw new MethodNotAllowed('SMTP Server not configured.');
}
if (!getServerConfig().contact) {
throw new MethodNotAllowed('Admin contact not configured.');
}
if (!getServerConfig().webClientURL) {
throw new MethodNotAllowed('Web client URL not configured.');
}
if (!getServerConfig().enableProofDesk) {
throw new MethodNotAllowed('ProofDesk account not configured.');
}
}
// Create enrollment
const created = await createEnrollment(enrollment);
// Register enrollment creation event
event.register({
type: 'enrollment.create',
authorizedUserId: ctx.session.user.get('id'),
associatedTokenId: null,
associatedUserId: created.userId,
associatedKeyId: null,
data: created.id
});
// Return created enrollment in body
ctx.body = serializeEnrollment(created);
});
/**
* @route: /enrollment
* @swagger
* operationId: updateEnrollment
*/
router.put('/enrollment/:id', async function (ctx) {
const enrollment: ApiPutEnrollmentObject = ctx.request.body;
const { id } = ctx.params;
const updated = await putEnrollment(id, enrollment);
event.register({
type: 'enrollment.edit',
authorizedUserId: ctx.session.user.get('id'),
associatedTokenId: null,
associatedUserId: updated.userId,
associatedKeyId: null,
data: id
});
ctx.body = serializeEnrollment(updated);
});
/**
* @route: /enrollment/list
* @swagger
* operationId: getAllEnrollments
*/
router.get('/enrollment/list', async function (ctx) {
const enrollments = await getAllEnrollment();
ctx.body = enrollments.map(serializeEnrollment);
});
router.delete('/enrollment/:id', async function (ctx) {
const { id } = ctx.params;
const deleted = await deleteEnrollment(id);
event.register({
type: 'enrollment.delete',
authorizedUserId: ctx.session.user.get('id'),
associatedTokenId: null,
associatedUserId: deleted.userId,
associatedKeyId: null,
data: id
});
ctx.body = serializeEnrollment(deleted);
});
/**
* @route: /enrollment/{id}
* @swagger
* operationId: getEnrollment
*/
router.get('/enrollment/:id', async function (ctx) {
const { id } = ctx.params;
const get = await getEnrollmentById(id);
ctx.body = serializeEnrollment(get);
});
export { router };