Browse Source

Merge 15f5e71ad5 into ff5f2e8dfb

pull/474/merge
Mikhail5555 4 years ago
committed by GitHub
parent
commit
2ace1b1abf
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 43
      server/auth.js
  2. 20
      server/server.js

43
server/auth.js

@ -1,9 +1,11 @@
const basicAuth = require("express-basic-auth") const basicAuth = require("express-basic-auth");
const passwordHash = require("./password-hash"); const passwordHash = require("./password-hash");
const { R } = require("redbean-node"); const { R } = require("redbean-node");
const { setting } = require("./util-server"); const { setting } = require("./util-server");
const { debug } = require("../src/util"); const { debug } = require("../src/util");
const remoteUserHeader = process.env.REMOTE_USER_HEADER;
/** /**
* *
* @param username : string * @param username : string
@ -13,7 +15,7 @@ const { debug } = require("../src/util");
exports.login = async function (username, password) { exports.login = async function (username, password) {
let user = await R.findOne("user", " username = ? AND active = 1 ", [ let user = await R.findOne("user", " username = ? AND active = 1 ", [
username, username,
]) ]);
if (user && passwordHash.verify(password, user.password)) { if (user && passwordHash.verify(password, user.password)) {
// Upgrade the hash to bcrypt // Upgrade the hash to bcrypt
@ -27,25 +29,38 @@ exports.login = async function (username, password) {
} }
return null; return null;
} };
function myAuthorizer(username, password, callback) {
function basicAuthHandler(username, password, callback) {
setting("disableAuth").then((result) => { setting("disableAuth").then((result) => {
if (result) { if (result) {
callback(null, true) callback(null, true);
} else { } else {
exports.login(username, password).then((user) => { exports.login(username, password).then((user) => {
callback(null, user != null) callback(null, user != null);
}) });
} }
}) });
} }
exports.basicAuth = basicAuth({ async function authMiddleware(req, res, next) {
authorizer: myAuthorizer, if (remoteUserHeader !== undefined) {
const remoteUser = req.headers[remoteUserHeader.toLowerCase()];
if (remoteUser !== undefined) {
let user = await R.findOne("user", " username = ? AND active = 1 ", [
remoteUser,
]);
if (user) {
next();
return;
}
}
}
return basicAuth({
authorizer: basicAuthHandler,
authorizeAsync: true, authorizeAsync: true,
challenge: true, challenge: true,
}); })(req, res, next);
}
exports.basicAuth = authMiddleware;

20
server/server.js

@ -80,12 +80,16 @@ const sslKey = process.env.UPTIME_KUMA_SSL_KEY || process.env.SSL_KEY || args["s
const sslCert = process.env.UPTIME_KUMA_SSL_CERT || process.env.SSL_CERT || args["ssl-cert"] || undefined; const sslCert = process.env.UPTIME_KUMA_SSL_CERT || process.env.SSL_CERT || args["ssl-cert"] || undefined;
const disableFrameSameOrigin = !!process.env.UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN || args["disable-frame-sameorigin"] || false; const disableFrameSameOrigin = !!process.env.UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN || args["disable-frame-sameorigin"] || false;
// Header AUTH
const remoteUserHeader = process.env.REMOTE_USER_HEADER;
// 2FA / notp verification defaults // 2FA / notp verification defaults
const twofa_verification_opts = { const twofa_verification_opts = {
"window": 1, "window": 1,
"time": 30 "time": 30
}; };
/** /**
* Run unit test after the server is ready * Run unit test after the server is ready
* @type {boolean} * @type {boolean}
@ -224,7 +228,6 @@ exports.entryPage = "dashboard";
console.log("Adding socket handler"); console.log("Adding socket handler");
io.on("connection", async (socket) => { io.on("connection", async (socket) => {
sendInfo(socket); sendInfo(socket);
totalClient++; totalClient++;
@ -1263,6 +1266,21 @@ exports.entryPage = "dashboard";
console.log("Disabled Auth: auto login to admin"); console.log("Disabled Auth: auto login to admin");
afterLogin(socket, await R.findOne("user")); afterLogin(socket, await R.findOne("user"));
socket.emit("autoLogin"); socket.emit("autoLogin");
} else if (remoteUserHeader !== undefined) {
const remoteUser = socket.handshake.headers[remoteUserHeader.toLowerCase()];
if (remoteUser !== undefined) {
const user = await R.findOne("user", " username = ? AND active = 1 ", [
remoteUser,
]);
if (user) {
afterLogin(socket, user);
socket.emit("autoLogin");
} else {
debug(`Remote user ${remoteUser} doesn't exist`);
}
} else {
debug("Remote user header set but not found in headers");
}
} else { } else {
debug("need auth"); debug("need auth");
} }

Loading…
Cancel
Save