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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157 | 1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
1x
| koa = require 'koa'
route = require 'koa-route'
cors = require 'koa-cors'
router = require './middleware/router'
bodyParser = require 'koa-body-parser'
authentication = require './api/authentication'
users = require './api/users'
clients = require './api/clients'
roles = require './api/roles'
transactions = require './api/transactions'
channels = require './api/channels'
tasks = require './api/tasks'
contactGroups = require './api/contactGroups'
events = require './api/events'
Q = require 'q'
mediators = require './api/mediators'
metrics = require './api/metrics'
keystore = require './api/keystore'
serverRestart = require './api/restart'
audits = require './api/audits'
config = require './config/config'
heartbeat = require './api/heartbeat'
certificateAuthority = require './api/certificateAuthority'
logs = require './api/logs'
metadata = require './api/metadata'
visualizers = require './api/visualizers'
about = require './api/about'
exports.setupApp = (done) ->
# Create an instance of the koa-server and add a body-parser
app = koa()
app.use cors()
app.use bodyParser()
# Expose uptime server stats route before the auth middleware so that it is publically accessible
app.use route.get '/heartbeat', heartbeat.getHeartbeat
# Expose the set-user-password route before the auth middleware so that it is publically accessible
app.use route.get '/password-reset-request/:email', users.userPasswordResetRequest
app.use route.get '/token/:token', users.getUserByToken
app.use route.put '/token/:token', users.updateUserByToken
# Expose the authenticate route before the auth middleware so that it is publically accessible
app.use route.get '/authenticate/:username', users.authenticate
# Authenticate the API request
app.use authentication.authenticate
# Define the api routes
app.use route.get '/users', users.getUsers
app.use route.get '/users/:email', users.getUser
app.use route.post '/users', users.addUser
app.use route.put '/users/:email', users.updateUser
app.use route.delete '/users/:email', users.removeUser
app.use route.get '/clients', clients.getClients
app.use route.get '/clients/:clientId', clients.getClient
app.use route.post '/clients', clients.addClient
app.use route.get '/clients/domain/:clientDomain', clients.findClientByDomain
app.use route.put '/clients/:clientId', clients.updateClient
app.use route.delete '/clients/:clientId', clients.removeClient
app.use route.get '/clients/:clientId/:property', clients.getClient
app.use route.get '/roles', roles.getRoles
app.use route.post '/roles', roles.addRole
app.use route.get '/roles/:name', roles.getRole
app.use route.put '/roles/:name', roles.updateRole
app.use route.delete '/roles/:name', roles.deleteRole
app.use route.get '/transactions', transactions.getTransactions
app.use route.post '/transactions', transactions.addTransaction
app.use route.get '/transactions/:transactionId', transactions.getTransactionById
app.use route.get '/transactions/clients/:clientId', transactions.findTransactionByClientId
app.use route.put '/transactions/:transactionId', transactions.updateTransaction
app.use route.delete '/transactions/:transactionId', transactions.removeTransaction
app.use route.get '/groups', contactGroups.getContactGroups
app.use route.get '/groups/:contactGroupId', contactGroups.getContactGroup
app.use route.post '/groups', contactGroups.addContactGroup
app.use route.put '/groups/:contactGroupId', contactGroups.updateContactGroup
app.use route.delete '/groups/:contactGroupId', contactGroups.removeContactGroup
app.use route.get '/channels', channels.getChannels
app.use route.post '/channels', channels.addChannel
app.use route.get '/channels/:channelId', channels.getChannel
app.use route.post '/channels/:channelId/trigger', channels.triggerChannel
app.use route.put '/channels/:channelId', channels.updateChannel
app.use route.delete '/channels/:channelId', channels.removeChannel
app.use route.get '/tasks', tasks.getTasks
app.use route.post '/tasks', tasks.addTask
app.use route.get '/tasks/:taskId', tasks.getTask
app.use route.put '/tasks/:taskId', tasks.updateTask
app.use route.delete '/tasks/:taskId', tasks.removeTask
app.use route.get '/metrics', -> metrics.getMetrics.call this, false
app.use route.get '/metrics/channels', -> metrics.getMetrics.call this, true
app.use route.get '/metrics/channels/:channelID', (channelID) -> metrics.getMetrics.call this, true, null, channelID
app.use route.get '/metrics/timeseries/:timeSeries', (timeSeries) -> metrics.getMetrics.call this, false, timeSeries
app.use route.get '/metrics/timeseries/:timeSeries/channels', (timeSeries) -> metrics.getMetrics.call this, true, timeSeries
app.use route.get '/metrics/timeseries/:timeSeries/channels/:channelID', (timeSeries, channelID) -> metrics.getMetrics.call this, true, timeSeries, channelID
app.use route.get '/mediators', mediators.getAllMediators
app.use route.get '/mediators/:uuid', mediators.getMediator
app.use route.post '/mediators', mediators.addMediator
app.use route.delete '/mediators/:urn', mediators.removeMediator
app.use route.post '/mediators/:urn/heartbeat', mediators.heartbeat
app.use route.put '/mediators/:urn/config', mediators.setConfig
app.use route.post '/mediators/:urn/channels', mediators.loadDefaultChannels
app.use route.get '/keystore/cert', keystore.getServerCert
app.use route.post '/keystore/cert', keystore.setServerCert
app.use route.get '/keystore/ca', keystore.getCACerts
app.use route.get '/keystore/ca/:certId', keystore.getCACert
app.use route.delete '/keystore/ca/:certId', keystore.removeCACert
app.use route.post '/keystore/key', keystore.setServerKey
app.use route.post '/keystore/ca/cert', keystore.addTrustedCert
app.use route.get '/keystore/validity', keystore.verifyServerKeys
app.use route.post '/keystore/passphrase', keystore.setServerPassphrase
# Metadata endpoints
app.use route.get '/metadata', metadata.getMetadata
app.use route.post '/metadata/validate', metadata.validateMetadata
app.use route.post '/metadata', metadata.importMetadata
# Server restart endpoint
app.use route.post '/restart', serverRestart.restart
# AuditRecord endpoint
app.use route.post '/audits', audits.addAudit
app.use route.get '/audits', audits.getAudits
app.use route.get '/audits/:auditId', audits.getAuditById
app.use route.get '/audits-filter-options', audits.getAuditsFilterOptions
# Ceritficates endpoint
app.use route.post '/certificates', certificateAuthority.generateCert
# Logs endpoint
app.use route.get '/logs', logs.getLogs
# Events endpoint
app.use route.get '/events/:receivedTime', events.getLatestEvents
# Version endpoint
app.use route.get '/about', about.getAboutInformation
# Visualizer endpoint
app.use route.get '/visualizers', visualizers.getVisualizers
app.use route.get '/visualizers/:visualizerId', visualizers.getVisualizer
app.use route.post '/visualizers', visualizers.addVisualizer
app.use route.put '/visualizers/:visualizerId', visualizers.updateVisualizer
app.use route.delete '/visualizers/:visualizerId', visualizers.removeVisualizer
# Return the result
done(app)
|