Browse Source

sessionless auth

pull/597/head
babadzhanov 3 years ago
parent
commit
260b790a3e
  1. 55
      src/lib/Server.js

55
src/lib/Server.js

@ -1,6 +1,7 @@
'use strict';
const path = require('path');
const crypto = require('crypto');
const express = require('express');
const expressSession = require('express-session');
@ -75,6 +76,22 @@ module.exports = class Server {
return next();
}
if (req.path.startsWith('/api/') && req.headers['authorization']) {
const authorizationHash = crypto.createHash('sha256')
.update(req.headers['authorization'])
.digest('hex');
const passwordHash = crypto.createHash('sha256')
.update(PASSWORD)
.digest('hex');
if (crypto.timingSafeEqual(Buffer.from(authorizationHash), Buffer.from(passwordHash))) {
return next();
}
return res.status(401).json({
error: 'Incorrect Password',
});
}
return res.status(401).json({
error: 'Not Logged In',
});
@ -90,15 +107,15 @@ module.exports = class Server {
return WireGuard.getClients();
}))
.get('/api/wireguard/client/:clientId/qrcode.svg', Util.promisify(async (req, res) => {
const { clientId } = req.params;
const svg = await WireGuard.getClientQRCodeSVG({ clientId });
const {clientId} = req.params;
const svg = await WireGuard.getClientQRCodeSVG({clientId});
res.header('Content-Type', 'image/svg+xml');
res.send(svg);
}))
.get('/api/wireguard/client/:clientId/configuration', Util.promisify(async (req, res) => {
const { clientId } = req.params;
const client = await WireGuard.getClient({ clientId });
const config = await WireGuard.getClientConfiguration({ clientId });
const {clientId} = req.params;
const client = await WireGuard.getClient({clientId});
const config = await WireGuard.getClientConfiguration({clientId});
const configName = client.name
.replace(/[^a-zA-Z0-9_=+.-]/g, '-')
.replace(/(-{2,}|-$)/g, '-')
@ -109,30 +126,30 @@ module.exports = class Server {
res.send(config);
}))
.post('/api/wireguard/client', Util.promisify(async req => {
const { name } = req.body;
return WireGuard.createClient({ name });
const {name} = req.body;
return WireGuard.createClient({name});
}))
.delete('/api/wireguard/client/:clientId', Util.promisify(async req => {
const { clientId } = req.params;
return WireGuard.deleteClient({ clientId });
const {clientId} = req.params;
return WireGuard.deleteClient({clientId});
}))
.post('/api/wireguard/client/:clientId/enable', Util.promisify(async req => {
const { clientId } = req.params;
return WireGuard.enableClient({ clientId });
const {clientId} = req.params;
return WireGuard.enableClient({clientId});
}))
.post('/api/wireguard/client/:clientId/disable', Util.promisify(async req => {
const { clientId } = req.params;
return WireGuard.disableClient({ clientId });
const {clientId} = req.params;
return WireGuard.disableClient({clientId});
}))
.put('/api/wireguard/client/:clientId/name', Util.promisify(async req => {
const { clientId } = req.params;
const { name } = req.body;
return WireGuard.updateClientName({ clientId, name });
const {clientId} = req.params;
const {name} = req.body;
return WireGuard.updateClientName({clientId, name});
}))
.put('/api/wireguard/client/:clientId/address', Util.promisify(async req => {
const { clientId } = req.params;
const { address } = req.body;
return WireGuard.updateClientAddress({ clientId, address });
const {clientId} = req.params;
const {address} = req.body;
return WireGuard.updateClientAddress({clientId, address});
}))
.listen(PORT, () => {

Loading…
Cancel
Save