/
index.js
68 lines (52 loc) · 1.82 KB
/
index.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
59
60
61
62
63
64
65
66
67
68
const
Express = require('express'),
App = Express(),
PORT = process.env.PORT || 3000,
Request = require('request'),
API_URL = 'https://api.mojang.com/users/profiles/minecraft/%s',
SKINS_URL = 'http://skins.voxelmodpack.com/skins/%s.png';
function getURL (pattern, replace) {
return pattern.replace(/%s/g, replace);
}
App.use(function (request, response, next) {
response.set({
'Access-Control-Allow-Origin': '*',
'Access-Control-Expose-Headers': 'X-Nickname'
});
next();
});
App.get('/', function (request, response) {
console.log('Request with no nickname provided');
response.status(400).send('Please, provide a nickname')
});
App.get('/favicon.ico', function (request, response) {
response.sendStatus(404);
});
App.get('/:nickname', function (request, response) {
let nickname = request.params.nickname;
console.log('Requested nickname: ' + nickname);
Request(getURL(API_URL, nickname), {json: true}, function (error, apiResponse, body) {
if (error) throw new Error(error);
if (apiResponse.statusCode == 204) return response.status(404).send('No profile for provided nickname (' + nickname + ')');
Request(getURL(SKINS_URL, body.id))
.on('response', function (message) {
if (message.statusCode == 404) return response.status(404).send('No skin for nickname "' + body.name + '"');
response.set({
'X-Nickname': body.name,
'Content-Type': 'image/png',
'Content-Disposition': 'inline; filename="' + body.name + '.png"',
'Content-Length': message.headers['content-length']
});
message.on('data', function (data) {
response.write(data);
})
.on('end', function () {
response.end();
});
});
});
});
App.listen(PORT, function (err) {
if (err) return console.error('Error occured:', err);
console.log('Server is listening on port ' + PORT);
});