-
Notifications
You must be signed in to change notification settings - Fork 3
/
autobalance-api.js
169 lines (131 loc) · 4.88 KB
/
autobalance-api.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
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
158
159
160
161
162
163
164
165
166
167
168
169
const express = require('express');
const dotenv = require('dotenv');
const autobalancer = require('./autobalancer.js');
const fs = require('fs');
module.exports = function(app) {
function VerifyAutobalanceKey(givenKey) {
let env = dotenv.config();
let apiKeys = env.parsed["AUTOBALANCE-KEYS"].split(",");
if (!apiKeys.includes(givenKey)) {
return false;
}
return true;
}
app.get('/autobalance/:league/view', function(req, res) {
let verified = VerifyAutobalanceKey(req.query.key);
let resultFormat = {
Success: false,
Message: "Invalid API Key"
}
if (!verified) {
res.status(401).send(resultFormat);
return;
}
let leagueName = req.params.league;
let leagueObjPath = `./autobalance-info/${leagueName}.json`;
if (!fs.existsSync(leagueObjPath)) {
resultFormat.Message = "League not found in Autobalancer";
res.status(404).send(resultFormat);
return;
}
try {
let objContent = fs.readFileSync(leagueObjPath);
let balanceObj = JSON.parse(objContent);
resultFormat.Success = true;
resultFormat.Message = balanceObj;
res.status(200).send(resultFormat);
} catch (err) {
resultFormat.Message = "Internal Server Error, cannot read league object file";
console.error(err);
res.status(500).send(resultFormat);
}
});
app.get('/autobalance/:league/refresh', function(req, res) {
let verified = VerifyAutobalanceKey(req.query.key);
let resultFormat = {
Success: false,
Message: "Invalid API Key"
}
if (!verified) {
res.status(401).send(resultFormat);
return;
}
let leagueName = req.params.league;
let leagueObjPath = `./autobalance-info/${leagueName}.json`;
let index = autobalancer.FindAutobalanceIndex(leagueName);;
if (index === -1) {
resultFormat.Message = "League not found in Autobalancer!";
res.status(404).send(resultFormat);
return;
}
try {
autobalancer.FetchAutobalance(index);
resultFormat.Success = true;
resultFormat.Message = "Autobalance refreshed!";
res.status(200).send(resultFormat);
} catch (err) {
resultFormat.Message = "Internal Server Error, cannot refresh autobalance";
console.error(err);
res.status(500).send(resultFormat);
}
});
app.get('/autobalance/reinit', function(req, res) {
let verified = VerifyAutobalanceKey(req.query.key);
let resultFormat = {
Success: false,
Message: "Invalid API Key"
}
if (!verified) {
res.status(401).send(resultFormat);
return;
}
try {
console.log("-=-=[ Calling onStartup ]=-=-=-");
autobalancer.onStartup();
console.log("-=-=[ onStartup Called ]=-=-=-");
resultFormat.Success = true;
resultFormat.Message = "Autobalance reinitialized!";
res.status(200).send(resultFormat);
} catch (err) {
resultFormat.Message = "Internal Server Error, cannot reinitialize autobalance";
console.error(err);
res.status(500).send(resultFormat);
}
});
app.post('/autobalance/:league/modify', function(req, res) {
let verified = VerifyAutobalanceKey(req.query.key);
let resultFormat = {
Success: false,
Message: "Invalid API Key"
}
if (!verified) {
res.status(401).send(resultFormat);
return;
}
let leagueName = req.params.league;
let leagueObjPath = `./autobalance-info/${leagueName}.json`;
if (!fs.existsSync(leagueObjPath)) {
resultFormat.Message = "League not found in Autobalancer";
res.status(404).send(resultFormat);
return;
}
let leagueObj = JSON.parse(fs.readFileSync(leagueObjPath));
let newLeagueObj = req.body;
for (let key in newLeagueObj) {
if (leagueObj.hasOwnProperty(key)) {
leagueObj[key] = newLeagueObj[key];
}
}
try {
fs.writeFileSync(leagueObjPath, JSON.stringify(leagueObj, null, 4));
resultFormat.Success = true;
resultFormat.Message = "League object modified!";
autobalancer.InitAutobalance();
res.status(200).send(resultFormat);
} catch (err) {
resultFormat.Message = "Internal Server Error, cannot modify league object";
console.error(err);
res.status(500).send(resultFormat);
}
});
}