UNPKG

2.63 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.pagination = pagination;
7exports.makeSalt = makeSalt;
8exports.encrypt = encrypt;
9exports.checkURI = checkURI;
10exports.generateToken = generateToken;
11exports.buildURI = buildURI;
12exports.encodeKey = encodeKey;
13exports.totpURI = totpURI;
14exports.totpImage = totpImage;
15
16var _crypto = require('crypto');
17
18var _crypto2 = _interopRequireDefault(_crypto);
19
20var _thirtyTwo = require('thirty-two');
21
22var _thirtyTwo2 = _interopRequireDefault(_thirtyTwo);
23
24var _qrImage = require('qr-image');
25
26var _qrImage2 = _interopRequireDefault(_qrImage);
27
28var _url = require('url');
29
30function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
32function pagination(cur, total, link, half = 2) {
33 if (total <= 1) return '';
34
35 let left = Math.max(1, cur - half);
36 let right = Math.min(left + half * 2, total);
37
38 if (total - cur <= half) {
39 left = Math.max(1, total - half * 2);
40 }
41 const temp = ['<ul class="pagination">'];
42 if (cur > 1) {
43 temp.push(`<li><a href="${link(cur - 1)}">&laquo;</a></li>`);
44 }
45
46 for (let i = left; i <= right; i++) {
47 temp.push(`<li class="${cur === i ? 'active' : ''}"><a href="${link(i)}">${i}</a></li>`);
48 }
49 if (cur !== total) {
50 temp.push(`<li><a href="${link(cur + 1)}">&raquo;</a></li>`);
51 }
52 temp.push('</ul>');
53 return temp.join('');
54}
55
56function makeSalt() {
57 return Math.round(new Date().valueOf() * Math.random()) + '';
58}
59
60function encrypt(pass, salt) {
61 if (!pass) return null;
62 return _crypto2.default.createHmac('sha1', salt).update(pass).digest('hex');
63}
64
65function checkURI(base, checked) {
66 let url1 = (0, _url.parse)(base, false, true);
67 let url2 = (0, _url.parse)(checked, false, true);
68
69 url1.port = url1.port || 80;
70 url2.port = url2.port || 80;
71 url1.pathname = url1.pathname || '/';
72 url2.pathname = url2.pathname || '/';
73
74 return url1.hostname === url2.hostname && url1.port === url2.port && url2.pathname.indexOf(url1.pathname) === 0;
75}
76
77function generateToken() {
78 let buffer = _crypto2.default.randomBytes(256);
79 return _crypto2.default.createHash('sha1').update(buffer).digest('hex');
80}
81
82function buildURI(uri, query) {
83 let obj = (0, _url.parse)(uri, true);
84 Object.assign(obj.query, query);
85 delete obj.search;
86 return (0, _url.format)(obj);
87}
88
89function encodeKey(key) {
90 return _thirtyTwo2.default.encode(key).toString().replace(/=/g, '');
91}
92
93function totpURI(user, key) {
94 return `otpauth://totp/${user}?secret=${encodeKey(key)}`;
95}
96
97function totpImage(user, key) {
98 return _qrImage2.default.imageSync(totpURI(user, key), 'H');
99}
\No newline at end of file