Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var fs = require("fs"),
- auth = require("basic-auth"),
- md5 = require("apache-md5");
- var heads = require("robohydra").heads,
- RoboHydraHead = heads.RoboHydraHead;
- function loadPasswords(filePath) {
- var passwordFileContents = fs.readFileSync(filePath).toString();
- var passwords = {};
- passwordFileContents.split("\n").forEach(function(line) {
- var colonIndex = line.indexOf(":");
- var user = line.slice(0, colonIndex),
- pass = line.slice(colonIndex + 1);
- if (user && pass) {
- passwords[user] = pass;
- }
- });
- return passwords;
- }
- function authHeadForPasswordFile(passwordFilePath) {
- var passwords = loadPasswords(passwordFilePath);
- return new RoboHydraHead({
- name: 'admin-ui-auth',
- path: '/robohydra-admin.*',
- handler: function(req, res, next) {
- var credentials = auth(req) || {};
- var hashedPass = passwords[credentials.name];
- if (passwords.hasOwnProperty(credentials.name) &&
- md5(credentials.pass, hashedPass) === hashedPass) {
- next(req, res);
- return;
- }
- res.statusCode = 401;
- res.headers['WWW-Authenticate'] = 'Basic realm="example"';
- res.send('Access denied');
- }
- });
- }
- module.exports.getBodyParts = function(conf) {
- var passwordFilePath = conf.passwordpath || "htpasswd";
- var authHead = authHeadForPasswordFile(passwordFilePath);
- conf.robohydra.registerDynamicHead(authHead, {priority: "admin"});
- return {};
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement