-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserver.js
More file actions
103 lines (91 loc) · 3.52 KB
/
server.js
File metadata and controls
103 lines (91 loc) · 3.52 KB
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
"use strict";
let express = require('express');
let bodyParser = require('body-parser');
let cors = require('cors');
let morgan = require('morgan');
let request = require('request');
let handlers = require('./handlers');
let models = require('./models');
let restit = require('./restit');
let app = express();
let endpoints = {get:[],post:[],put:[],delete:[]};
let modelEndpoints = restit.genEndpoints(models, handlers.mongoose, handlers.config);
let requestHelper = handlers.requestHelper(handlers.mongoose);
let allEndpoints = modelEndpoints.concat([
{
path: '/v1/containers',
type: 'get',
function: requestHelper.getContainers,
description: 'Returns all container names.',
fields: []
}, {
path: '/v1/container/:name',
type: 'get',
function: requestHelper.getContainerVersions,
description: 'Returns an array of all active containers; use query parameter `all` to see inactive and active containers.',
fields: []
}, {
path: '/v1/container/:name/:version',
type: 'get',
function: requestHelper.getContainer,
description: 'Returns a single container.',
fields: []
}, {
path: '/v1/container/:name/:version',
type: 'post',
function: requestHelper.addContainer,
description: 'Sets a container to active state (must already exist via `POST /v1/containers`).',
fields: []
}, {
path: '/v1/container/:name/:version',
type: 'delete',
function: requestHelper.removeContainer,
description: 'Sets a container to inactive state. Will not be shown in default listing of container versions.',
fields: []
}
]);
app.use(bodyParser.json());
app.use(cors());
app.use(morgan('tiny', { skip: (req, res) => req.path === handlers.config.hc } ));
app.use(handlers.errorHandler);
app.all('/v1*', (req, res, next) => {
res.header('Content-Type', 'application/json');
next();
});
app.post('/v1/containers', (req, res, next) => {
if (!req.body.image) {
res.status(422).json({"message": "You must provide an image."});
return;
}
req.body.image = req.body.image.replace('https://', '').replace('http://', '');
next();
});
if (process.env.DEPLOYIT) {
app.post('/v1/containers', (req, res, next) => {
let body = req.body;
let imagePieces = body.image.split(':');
let deployitPayload = {
name: body.name,
version: body.version,
};
deployitPayload.image = imagePieces[0];
let options = {headers: {"content-type": "application/json"}, body: JSON.stringify(deployitPayload)};
request.post(process.env.DEPLOYIT + '/containers/' + body.name + '/' + body.version, options, (error, response, body) => {
console.log(body);
});
next();
});
}
allEndpoints.forEach((endpoint) => {
console.log(endpoint.type, endpoint.path);
app[endpoint.type](endpoint.path, endpoint.function);
endpoints[endpoint.type].push({path: endpoint.path, fields: endpoint.fields, description: endpoint.description});
});
app.get(handlers.config.versionPath + '/endpoints', (req, res) => restit.genDocEndpoints(endpoints, req, res));
app.get(handlers.config.hc, (req, res) => res.json({version: handlers.config.version}));
app.listen(handlers.config.port, () => {
console.log('\n-------------------------------------------------\n');
console.log('Catalogit-API is running on ' + handlers.config.port);
console.log('\n-------------------------------------------------\n');
});
module.exports = app;