-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathapp.js
58 lines (52 loc) · 1.6 KB
/
app.js
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
const express = require('express');
const coce = require('./coce');
const app = express();
app.listen(coce.config.port);
app.get('/', (req, res) => {
res.send('Welcome to coce');
});
app.get('/cover', (req, res) => {
let ids = req.query.id;
if (ids === undefined || ids.length < 8) {
res.status(400).send({ error: 'ID parameter is missing' });
return;
}
ids = ids.split(',');
if (ids.length === 0) {
res.status(400).send({ error: 'Bad id parameter' });
return;
}
let providers = req.query.provider;
providers = providers === undefined ? coce.config.providers : providers.split(',');
const { callback } = req.query;
const fetcher = new coce.CoceFetcher();
fetcher.fetch(ids, providers, (url) => {
if (url.error !== undefined) {
res.status(400).send(url);
return;
}
let ret = url;
if (req.query.all === undefined) {
// No &all param: URL are picked up by provider priority order
// Just the first available url
ret = {};
Object.keys(url).forEach((id) => {
const urlPerProvider = url[id];
const firstProvider = providers.find((provider) => urlPerProvider[provider] !== undefined);
if (firstProvider !== undefined) ret[id] = urlPerProvider[firstProvider];
});
}
if (callback) {
res.contentType('application/javascript');
ret = `${callback}(${JSON.stringify(ret)})`;
} else {
res.contentType('application/json');
}
res.send(ret);
});
});
app.get('/set', (req, res) => {
const { provider, id, url } = req.query;
coce.set(provider, id, url);
res.send({ success: true });
});