remove @squeep/base64url dependency in lieu of native encoder
authorJustin Wind <justin.wind+git@gmail.com>
Sun, 27 Aug 2023 21:59:10 +0000 (14:59 -0700)
committerJustin Wind <justin.wind+git@gmail.com>
Sun, 27 Aug 2023 21:59:10 +0000 (14:59 -0700)
lib/common.js
lib/resource-authenticator.js
package.json
test/lib/resource-authenticator.js

index ee7831f6b031a08ee559424860ac037235819a8a..43af9d8fca21d70288ed15dc99d20cf95586c033 100644 (file)
@@ -1,12 +1,10 @@
 'use strict';
 
 const { common } = require('@squeep/api-dingus');
-const b64u = require('@squeep/base64url');
 const { randomBytes } = require('crypto');
 const { promisify } = require('util');
 const randomBytesAsync = promisify(randomBytes);
 
 module.exports = Object.assign(Object.create(common), {
   randomBytesAsync,
-  ...b64u,
-});
\ No newline at end of file
+});
index 04ac9991189bf8b10f096e77e10cc88c91e57f66..f4558c1d3f1fb5543122eee8c97d30a2431f3f3a 100644 (file)
@@ -57,7 +57,7 @@ class ResourceAuthenticator {
    */
   async getSalt() {
     const saltBytes = await common.randomBytesAsync(this.saltBytes);
-    return common.base64ToBase64URL(saltBytes.toString('base64'));
+    return saltBytes.toString('base64url');
   }
 
 
@@ -133,6 +133,7 @@ class ResourceAuthenticator {
    * @param {String} identifier UUID
    */
   async authenticate(identifier, secret) {
+    const authenticationType = 'Bearer';
     const currentEpoch = ResourceAuthenticator.currentEpoch.toString();
     const smallIdentifier = ResourceAuthenticator.ensmallenIdentifier(identifier);
     const salt = await this.getSalt();
@@ -142,7 +143,8 @@ class ResourceAuthenticator {
       salt,
       this.createDigest(secret, smallIdentifier, currentEpoch, salt),
     ];
-    return parts.join(':');
+    const token = parts.join(':');
+    return [authenticationType, token].join(' ');
   }
 
 
@@ -152,8 +154,7 @@ class ResourceAuthenticator {
    * @returns {String} b64u-encoded UUID
    */
   static ensmallenIdentifier(identifier) {
-    const uuidBase64 = Buffer.from(uuid.parse(identifier)).toString('base64');
-    return common.base64ToBase64URL(uuidBase64);
+    return Buffer.from(uuid.parse(identifier)).toString('base64url');
   }
 
 
@@ -163,8 +164,7 @@ class ResourceAuthenticator {
    * @returns {String} UUID
    */
   static embiggenIdentifier(small) {
-    const uuidBase64 = common.base64URLToBase64(small);
-    const uuidBuffer = Buffer.from(uuidBase64, 'base64');
+    const uuidBuffer = Buffer.from(small, 'base64url');
     return uuid.stringify(uuidBuffer);
   }
 
@@ -178,8 +178,7 @@ class ResourceAuthenticator {
   createDigest(secret, ...contents) {
     const hmac = crypto.createHmac(this.digestAlgorithm, secret);
     contents.forEach((content) => hmac.update(Buffer.from(content)));
-    const digestBase64 = hmac.digest('base64');
-    return common.base64ToBase64URL(digestBase64);
+    return hmac.digest('base64url');
   }
 
 
index 146713e517bf81a9543fa845a1b5b6e6ca9bc9eb..6593e2821ee42ab3f6d3b0c0cf20019f3a8ffff3 100644 (file)
     "authentication"
   ],
   "engines": {
-    "node": ">=14"
+    "node": "^14 >=14.18 || >=15.7"
   },
   "author": "Justin Wind <jwind-npm@squeep.com>",
   "license": "ISC",
   "dependencies": {
     "@squeep/api-dingus": "git+https://git.squeep.com/squeep-api-dingus/#v1.2.8",
-    "@squeep/base64url": "^1.0.5",
     "uuid": "^9.0.0"
   },
   "devDependencies": {
index 826c484250628a159da1a15ca00595e204a987ed..182f2913250765b29a0f377032d9e2878ac17866 100644 (file)
@@ -158,7 +158,7 @@ describe('Resource Authenticator', function () {
       const secret = 'secrety';
       sinon.stub(ResourceAuthenticator, 'currentEpoch').get(() => 1648836029);
       sinon.stub(ra, 'getSalt').resolves('xxxxx');
-      const expected = 'bq7ZSLHkEeyakQAlkF9xSg:1648836029:xxxxx:fdUYC8Gqe0nAyX_-SWvRsPsx0UjY-vV-Ff0A52j6Zfw';
+      const expected = 'Bearer bq7ZSLHkEeyakQAlkF9xSg:1648836029:xxxxx:fdUYC8Gqe0nAyX_-SWvRsPsx0UjY-vV-Ff0A52j6Zfw';
       const result = await ra.authenticate(identifier, secret);
       assert.strictEqual(result, expected);
     });
@@ -225,4 +225,4 @@ describe('Resource Authenticator', function () {
     });
   });
 
-}); // ResourceAuthenticator
\ No newline at end of file
+}); // ResourceAuthenticator