You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.3 KiB
JavaScript
82 lines
2.3 KiB
JavaScript
4 years ago
|
(function () {
|
||
|
var factory = function () {
|
||
|
var Keys = {};
|
||
|
|
||
|
/* Parse the new format of "Signing Public Keys".
|
||
|
If anything about the input is found to be invalid, return;
|
||
|
this will fall back to the old parsing method
|
||
|
|
||
|
|
||
|
*/
|
||
|
var parseNewUser = function (userString) {
|
||
|
if (!/^\[.*?@.*\]$/.test(userString)) { return; }
|
||
|
var temp = userString.slice(1, -1);
|
||
|
var domain, username, pubkey;
|
||
|
|
||
|
temp = temp
|
||
|
.replace(/\/([a-zA-Z0-9+-]{43}=)$/, function (all, k) {
|
||
|
pubkey = k.replace(/-/g, '/');
|
||
|
return '';
|
||
|
});
|
||
|
if (!pubkey) { return; }
|
||
|
|
||
|
var index = temp.lastIndexOf('@');
|
||
|
if (index < 1) { return; }
|
||
|
|
||
|
domain = temp.slice(index + 1);
|
||
|
username = temp.slice(0, index);
|
||
|
|
||
|
return {
|
||
|
domain: domain,
|
||
|
user: username,
|
||
|
pubkey: pubkey
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var isValidUser = function (parsed) {
|
||
|
if (!parsed) { return; }
|
||
|
if (!(parsed.domain && parsed.user && parsed.pubkey)) { return; }
|
||
|
return true;
|
||
|
};
|
||
|
|
||
|
Keys.parseUser = function (user) {
|
||
|
var parsed = parseNewUser(user);
|
||
|
if (isValidUser(parsed)) { return parsed; }
|
||
|
|
||
|
var domain, username, pubkey;
|
||
|
user.replace(/^https*:\/\/([^\/]+)\/user\/#\/1\/([^\/]+)\/([a-zA-Z0-9+-]{43}=)$/,
|
||
|
function (a, d, u, k) {
|
||
|
domain = d;
|
||
|
username = u;
|
||
|
pubkey = k.replace(/-/g, '/');
|
||
|
return '';
|
||
|
});
|
||
|
if (!domain) { throw new Error("Could not parse user id [" + user + "]"); }
|
||
|
return {
|
||
|
domain: domain,
|
||
|
user: username,
|
||
|
pubkey: pubkey
|
||
|
};
|
||
|
};
|
||
|
|
||
|
Keys.serialize = function (origin, username, pubkey) {
|
||
|
return '[' +
|
||
|
username +
|
||
|
'@' +
|
||
|
origin.replace(/https*:\/\//, '') +
|
||
|
'/' +
|
||
|
pubkey.replace(/\//g, '-') +
|
||
|
']';
|
||
|
// return origin + '/user/#/1/' + username + '/' + pubkey.replace(/\//g, '-');
|
||
|
};
|
||
|
|
||
|
return Keys;
|
||
|
};
|
||
|
|
||
|
if (typeof(module) !== 'undefined' && module.exports) {
|
||
|
module.exports = factory();
|
||
|
} else if ((typeof(define) !== 'undefined' && define !== null) && (define.amd !== null)) {
|
||
|
define([], factory);
|
||
|
}
|
||
|
}());
|