mirror of
https://github.com/WorldEditAxe/eaglerproxy.git
synced 2024-09-21 09:56:00 -07:00
89 lines
3.2 KiB
JavaScript
89 lines
3.2 KiB
JavaScript
|
import { auth } from "../auth.js";
|
||
|
import { config } from "../config.js";
|
||
|
export async function registerEndpoints() {
|
||
|
const proxy = PLUGIN_MANAGER.proxy;
|
||
|
proxy.on("httpConnection", (req, res, ctx) => {
|
||
|
if (req.url.startsWith("/eagpaas/metadata")) {
|
||
|
ctx.handled = true;
|
||
|
res.writeHead(200).end(JSON.stringify({
|
||
|
branding: "EagProxyAAS",
|
||
|
version: "1",
|
||
|
}));
|
||
|
}
|
||
|
else if (req.url.startsWith("/eagpaas/validate")) {
|
||
|
ctx.handled = true;
|
||
|
if (config.authentication.enabled) {
|
||
|
if (req.headers["authorization"] !== `Basic ${config.authentication.password}`) {
|
||
|
return res.writeHead(403).end(JSON.stringify({
|
||
|
success: false,
|
||
|
reason: "Access Denied",
|
||
|
}));
|
||
|
}
|
||
|
}
|
||
|
res.writeHead(200).end(JSON.stringify({
|
||
|
success: true,
|
||
|
}));
|
||
|
}
|
||
|
});
|
||
|
proxy.on("wsConnection", (ws, req, ctx) => {
|
||
|
try {
|
||
|
if (req.url.startsWith("/eagpaas/token")) {
|
||
|
ctx.handled = true;
|
||
|
if (config.authentication.enabled) {
|
||
|
if (req.headers.authorization !== `Basic ${config.authentication.password}`) {
|
||
|
ws.send(JSON.stringify({
|
||
|
type: "ERROR",
|
||
|
error: "Access Denied",
|
||
|
}));
|
||
|
ws.close();
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
const quit = { quit: false }, authHandler = auth(quit), codeCallback = (code) => {
|
||
|
ws.send(JSON.stringify({
|
||
|
type: "CODE",
|
||
|
data: code,
|
||
|
}));
|
||
|
};
|
||
|
ws.once("close", () => {
|
||
|
quit.quit = true;
|
||
|
});
|
||
|
authHandler
|
||
|
.on("code", codeCallback)
|
||
|
.on("error", (err) => {
|
||
|
ws.send(JSON.stringify({
|
||
|
type: "ERROR",
|
||
|
reason: err,
|
||
|
}));
|
||
|
ws.close();
|
||
|
})
|
||
|
.on("done", (result) => {
|
||
|
ws.send(JSON.stringify({
|
||
|
type: "COMPLETE",
|
||
|
data: result,
|
||
|
}));
|
||
|
ws.close();
|
||
|
});
|
||
|
}
|
||
|
else if (req.url.startsWith("/eagpaas/ping")) {
|
||
|
ctx.handled = true;
|
||
|
if (config.authentication.enabled) {
|
||
|
if (req.headers.authorization !== `Basic ${config.authentication.password}`) {
|
||
|
ws.send(JSON.stringify({
|
||
|
type: "ERROR",
|
||
|
error: "Access Denied",
|
||
|
}));
|
||
|
ws.close();
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
ws.once("message", (_) => {
|
||
|
ws.send(_);
|
||
|
ws.close();
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
catch (err) { }
|
||
|
});
|
||
|
}
|