@dbg-riskit/angular-auth
Version:
35 lines • 4.58 kB
JavaScript
import { secureRandom } from '@dbg-riskit/common';
import { defer, of } from 'rxjs';
// @dynamic
export class NonceGenerator {
static generateNonce() {
return defer(() => {
const guidHolder = 'xxx-xxyxxxxx4xxxyxxxxxx-xxxx4xxx';
const hex = '0123456789abcdef';
let r = 0;
let guidResponse = '';
for (const placeHolder of guidHolder) {
if (placeHolder !== '-' && placeHolder !== '4') {
// each x and y needs to be random
r = Math.floor(secureRandom() * 16);
}
if (placeHolder === 'x') {
guidResponse += hex[r];
}
else if (placeHolder === 'y') {
/* eslint-disable no-bitwise */
// clock-seq-and-reserved first hex is filtered and remaining hex values are random
r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??
r |= 0x8; // set pos 3 to 1 as 1???
/* eslint-enable */
guidResponse += hex[r];
}
else {
guidResponse += placeHolder;
}
}
return of(guidResponse);
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uY2UuZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci1hdXRoL3NyYy9saWIvbm9uY2UuZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsS0FBSyxFQUFjLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUzQyxXQUFXO0FBQ1gsTUFBTSxPQUFPLGNBQWM7SUFFaEIsTUFBTSxDQUFDLGFBQWE7UUFDdkIsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxVQUFVLEdBQUcsa0NBQWtDLENBQUM7WUFDdEQsTUFBTSxHQUFHLEdBQUcsa0JBQWtCLENBQUM7WUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLEtBQUssTUFBTSxXQUFXLElBQUksVUFBVSxFQUFFO2dCQUNsQyxJQUFJLFdBQVcsS0FBSyxHQUFHLElBQUksV0FBVyxLQUFLLEdBQUcsRUFBRTtvQkFDNUMsa0NBQWtDO29CQUNsQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDdkM7Z0JBRUQsSUFBSSxXQUFXLEtBQUssR0FBRyxFQUFFO29CQUNyQixZQUFZLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQjtxQkFBTSxJQUFJLFdBQVcsS0FBSyxHQUFHLEVBQUU7b0JBRTVCLCtCQUErQjtvQkFFL0IsbUZBQW1GO29CQUNuRixDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsOENBQThDO29CQUN4RCxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMseUJBQXlCO29CQUVuQyxtQkFBbUI7b0JBRW5CLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFCO3FCQUFNO29CQUNILFlBQVksSUFBSSxXQUFXLENBQUM7aUJBQy9CO2FBQ0o7WUFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2VjdXJlUmFuZG9tfSBmcm9tICdAZGJnLXJpc2tpdC9jb21tb24nO1xuaW1wb3J0IHtkZWZlciwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIE5vbmNlR2VuZXJhdG9yIHtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVOb25jZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3VpZEhvbGRlciA9ICd4eHgteHh5eHh4eHg0eHh4eXh4eHh4eC14eHh4NHh4eCc7XG4gICAgICAgICAgICBjb25zdCBoZXggPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG4gICAgICAgICAgICBsZXQgciA9IDA7XG4gICAgICAgICAgICBsZXQgZ3VpZFJlc3BvbnNlID0gJyc7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBsYWNlSG9sZGVyIG9mIGd1aWRIb2xkZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VIb2xkZXIgIT09ICctJyAmJiBwbGFjZUhvbGRlciAhPT0gJzQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggeCBhbmQgeSBuZWVkcyB0byBiZSByYW5kb21cbiAgICAgICAgICAgICAgICAgICAgciA9IE1hdGguZmxvb3Ioc2VjdXJlUmFuZG9tKCkgKiAxNik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlSG9sZGVyID09PSAneCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3VpZFJlc3BvbnNlICs9IGhleFtyXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBsYWNlSG9sZGVyID09PSAneScpIHtcblxuICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY2xvY2stc2VxLWFuZC1yZXNlcnZlZCBmaXJzdCBoZXggaXMgZmlsdGVyZWQgYW5kIHJlbWFpbmluZyBoZXggdmFsdWVzIGFyZSByYW5kb21cbiAgICAgICAgICAgICAgICAgICAgciAmPSAweDM7IC8vIGJpdCBhbmQgd2l0aCAwMDExIHRvIHNldCBwb3MgMiB0byB6ZXJvID8wPz9cbiAgICAgICAgICAgICAgICAgICAgciB8PSAweDg7IC8vIHNldCBwb3MgMyB0byAxIGFzIDE/Pz9cblxuICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG5cbiAgICAgICAgICAgICAgICAgICAgZ3VpZFJlc3BvbnNlICs9IGhleFtyXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBndWlkUmVzcG9uc2UgKz0gcGxhY2VIb2xkZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9mKGd1aWRSZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==