UNPKG

auth-center

Version:
118 lines (93 loc) 2.98 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.isURL = isURL; exports.pagination = pagination; exports.makeSalt = makeSalt; exports.encrypt = encrypt; exports.checkURI = checkURI; exports.generateId = generateId; exports.getCaptcha = getCaptcha; exports.buildURI = buildURI; exports.encodeKey = encodeKey; exports.totpURI = totpURI; exports.totpImage = totpImage; Object.defineProperty(exports, "totp", { enumerable: true, get: function () { return _otplib.totp; } }); var _crypto = _interopRequireDefault(require("crypto")); var _otplib = require("otplib"); var _qrImage = _interopRequireDefault(require("qr-image")); var _nanoid = require("nanoid"); var _url = require("url"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _otplib.totp.options = { window: 10 }; function isURL(str) { return /^(https?:|)(\/\/)/i.test(str); } function pagination(cur, total, link, half = 2) { if (total <= 1) return ''; let left = Math.max(1, cur - half); const right = Math.min(left + half * 2, total); if (total - cur <= half) { left = Math.max(1, total - half * 2); } const temp = ['<ul class="pagination justify-content-center">']; if (cur > 1) { temp.push(`<li class="page-item"><a class="page-link" href="${link(cur - 1)}">&laquo;</a></li>`); } for (let i = left; i <= right; i++) { temp.push(`<li class="page-item ${cur === i ? 'active' : ''}"><a class="page-link" href="${link(i)}">${i}</a></li>`); } if (cur !== total) { temp.push(`<li class="page-item"><a class="page-link" href="${link(cur + 1)}">&raquo;</a></li>`); } temp.push('</ul>'); return temp.join(''); } function makeSalt() { return Math.round(Date.now() * Math.random()).toString(); } function encrypt(pass, salt) { if (!pass) return null; return _crypto.default.createHmac('sha1', salt).update(pass).digest('hex'); } function checkURI(base, checked) { const url1 = (0, _url.parse)(base, false, true); const url2 = (0, _url.parse)(checked, false, true); url1.port = url1.port || 80; url2.port = url2.port || 80; url1.pathname = url1.pathname || '/'; url2.pathname = url2.pathname || '/'; return url1.hostname === url2.hostname && url1.port === url2.port && url2.pathname.indexOf(url1.pathname) === 0; } function generateId() { return (0, _nanoid.nanoid)(40); } function getCaptcha(len) { return (0, _nanoid.customAlphabet)('1234567890', len)(); } function buildURI(uri, query) { const obj = (0, _url.parse)(uri, true); Object.assign(obj.query, query); delete obj.search; return (0, _url.format)(obj); } function encodeKey(key) { _otplib.authenticator.options = { encoding: 'ascii' }; return _otplib.authenticator.encode(key); } function totpURI(user, key) { return `otpauth://totp/${user}?secret=${encodeKey(key)}`; } function totpImage(user, key) { return _qrImage.default.imageSync(totpURI(user, key), 'H'); }