123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- 'use strict'
- var Buffer = require('safe-buffer').Buffer
- module.exports = auth
- module.exports.parse = parse
- var CREDENTIALS_REGEXP = /^ *(?:[Bb][Aa][Ss][Ii][Cc]) +([A-Za-z0-9._~+/-]+=*) *$/
- var USER_PASS_REGEXP = /^([^:]*):(.*)$/
- 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')
- }
-
- var header = getAuthorization(req)
-
- return parse(header)
- }
- function decodeBase64 (str) {
- return Buffer.from(str, 'base64').toString()
- }
- function getAuthorization (req) {
- if (!req.headers || typeof req.headers !== 'object') {
- throw new TypeError('argument req is required to have headers property')
- }
- return req.headers.authorization
- }
- function parse (string) {
- if (typeof string !== 'string') {
- return undefined
- }
-
- var match = CREDENTIALS_REGEXP.exec(string)
- if (!match) {
- return undefined
- }
-
- var userPass = USER_PASS_REGEXP.exec(decodeBase64(match[1]))
- if (!userPass) {
- return undefined
- }
-
- return new Credentials(userPass[1], userPass[2])
- }
- function Credentials (name, pass) {
- this.name = name
- this.pass = pass
- }
|