Skip to main content
Module

x/organ/deps/basic-auth/index.js

Organ - Logging middleware for the Oak framework based on the Morgan library for ExpressJS from Node.
Latest
File
/*! * basic-auth * Copyright(c) 2013 TJ Holowaychuk * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015-2016 Douglas Christopher Wilson * Copyright(c) 2020 Anthony Mancini * MIT Licensed */
'use strict'
/** * Module dependencies. * @private */
import Buffer_lib from "./deps/safe-buffer/index.js";var Buffer = Buffer_lib.Buffer;

/** * RegExp for basic auth credentials * * credentials = auth-scheme 1*SP token68 * auth-scheme = "Basic" ; case insensitive * token68 = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) *"=" * @private */
var CREDENTIALS_REGEXP = /^ *(?:[Bb][Aa][Ss][Ii][Cc]) +([A-Za-z0-9._~+/-]+=*) *$/
/** * RegExp for basic auth user/pass * * user-pass = userid ":" password * userid = *<TEXT excluding ":"> * password = *TEXT * @private */
var USER_PASS_REGEXP = /^([^:]*):(.*)$/
/** * Parse the Authorization header field of a request. * * @param {object} req * @return {object} with .name and .pass * @public */
export function auth (req) { if (!req) { throw new TypeError('argument req is required') }
if (typeof req !== 'object') { throw new TypeError('argument req is required to be an object') }
// get header var header = getAuthorization(req)
// parse header return parse(header)}
/** * Decode base64 string. * @private */
function decodeBase64 (str) { return Buffer.from(str, 'base64').toString()}
/** * Get the Authorization header from request object. * @private */
function getAuthorization (req) { if (!req.headers || typeof req.headers !== 'object') { throw new TypeError('argument req is required to have headers property') }
return req.headers.get("authorization")}
/** * Parse basic auth to object. * * @param {string} string * @return {object} * @public */
function parse (string) { if (typeof string !== 'string') { return undefined }
// parse header var match = CREDENTIALS_REGEXP.exec(string)
if (!match) { return undefined }
// decode user pass var userPass = USER_PASS_REGEXP.exec(decodeBase64(match[1]))
if (!userPass) { return undefined }
// return credentials object return new Credentials(userPass[1], userPass[2])}
/** * Object to represent user credentials. * @private */
function Credentials (name, pass) { this.name = name this.pass = pass}