mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-11-04 13:46:13 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const basicAuth = require("express-basic-auth")
 | 
						|
const passwordHash = require("./password-hash");
 | 
						|
const { R } = require("redbean-node");
 | 
						|
const { setting } = require("./util-server");
 | 
						|
const { debug } = require("../src/util");
 | 
						|
 | 
						|
/**
 | 
						|
 *
 | 
						|
 * @param username : string
 | 
						|
 * @param password : string
 | 
						|
 * @returns {Promise<Bean|null>}
 | 
						|
 */
 | 
						|
exports.login = async function (username, password) {
 | 
						|
    let user = await R.findOne("user", " username = ? AND active = 1 ", [
 | 
						|
        username,
 | 
						|
    ])
 | 
						|
 | 
						|
    if (user && passwordHash.verify(password, user.password)) {
 | 
						|
        // Upgrade the hash to bcrypt
 | 
						|
        if (passwordHash.needRehash(user.password)) {
 | 
						|
            await R.exec("UPDATE `user` SET password = ? WHERE id = ? ", [
 | 
						|
                passwordHash.generate(password),
 | 
						|
                user.id,
 | 
						|
            ]);
 | 
						|
        }
 | 
						|
        return user;
 | 
						|
    }
 | 
						|
 | 
						|
    return null;
 | 
						|
}
 | 
						|
 | 
						|
function myAuthorizer(username, password, callback) {
 | 
						|
 | 
						|
    setting("disableAuth").then((result) => {
 | 
						|
 | 
						|
        if (result) {
 | 
						|
            callback(null, true)
 | 
						|
        } else {
 | 
						|
            exports.login(username, password).then((user) => {
 | 
						|
                callback(null, user != null)
 | 
						|
            })
 | 
						|
        }
 | 
						|
    })
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
exports.basicAuth = basicAuth({
 | 
						|
    authorizer: myAuthorizer,
 | 
						|
    authorizeAsync: true,
 | 
						|
    challenge: true,
 | 
						|
});
 |