supaapps-auth 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,13 +26,13 @@ class AuthManager {
26
26
  const NUM_OF_BYTES = 32; // This will generate a verifier of sufficient length
27
27
  const HASH_ALG = 'sha256';
28
28
  // Generate code verifier
29
- const codeVerifier = this.toBase64Url((0, crypto_1.randomBytes)(NUM_OF_BYTES).toString('base64'));
29
+ const newCodeVerifier = this.toBase64Url((0, crypto_1.randomBytes)(NUM_OF_BYTES).toString('base64'));
30
30
  // Generate code challenge
31
31
  const hash = (0, crypto_1.createHash)(HASH_ALG)
32
- .update(codeVerifier)
32
+ .update(newCodeVerifier)
33
33
  .digest('base64');
34
- const codeChallenge = this.toBase64Url(hash);
35
- return { codeVerifier, codeChallenge };
34
+ const newCodeChallenge = this.toBase64Url(hash);
35
+ return { newCodeVerifier, newCodeChallenge };
36
36
  };
37
37
  this.authServer = authServer;
38
38
  this.realmName = realmName;
@@ -46,12 +46,15 @@ class AuthManager {
46
46
  return AuthManager.instance;
47
47
  }
48
48
  getLoginWithGoogleUri() {
49
- const { codeVerifier, codeChallenge } = this.generatePKCEPair();
49
+ // get or create codeVerifier and codeChallenge from localstorage
50
+ const { newCodeVerifier, newCodeChallenge } = this.generatePKCEPair();
51
+ let codeVerifier = localStorage.getItem('codeVerifier') || newCodeVerifier;
52
+ let codeChallenge = localStorage.getItem('codeChallenge') || newCodeChallenge;
50
53
  localStorage.setItem('codeVerifier', codeVerifier);
51
54
  localStorage.setItem('codeChallenge', codeChallenge);
52
55
  if (this.authServer && this.realmName && this.redirectUri) {
53
56
  return `${this.authServer}auth/login_with_google?realm_name=${this.realmName}` +
54
- `&redirect_uri=${encodeURIComponent(this.realmName)}&code_challenge=${codeChallenge}&code_challenge_method=S256`;
57
+ `&redirect_uri=${encodeURIComponent(this.redirectUri)}&code_challenge=${codeChallenge}&code_challenge_method=S256`;
55
58
  }
56
59
  }
57
60
  isLoggedIn() {
@@ -128,6 +131,8 @@ class AuthManager {
128
131
  }),
129
132
  })
130
133
  .then((response) => {
134
+ localStorage.removeItem('codeVerifier');
135
+ localStorage.removeItem('codeChallenge');
131
136
  if (response.status !== 200) {
132
137
  throw new Error('Failed to exchange code for token');
133
138
  }
@@ -139,6 +144,8 @@ class AuthManager {
139
144
  resolve();
140
145
  })
141
146
  .catch((error) => {
147
+ localStorage.removeItem('codeVerifier');
148
+ localStorage.removeItem('codeChallenge');
142
149
  reject(error);
143
150
  });
144
151
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "supaapps-auth",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -34,26 +34,29 @@ export class AuthManager {
34
34
  const HASH_ALG = 'sha256';
35
35
 
36
36
  // Generate code verifier
37
- const codeVerifier = this.toBase64Url(
37
+ const newCodeVerifier = this.toBase64Url(
38
38
  randomBytes(NUM_OF_BYTES).toString('base64'),
39
39
  );
40
40
 
41
41
  // Generate code challenge
42
42
  const hash = createHash(HASH_ALG)
43
- .update(codeVerifier)
43
+ .update(newCodeVerifier)
44
44
  .digest('base64');
45
- const codeChallenge = this.toBase64Url(hash);
45
+ const newCodeChallenge = this.toBase64Url(hash);
46
46
 
47
- return { codeVerifier, codeChallenge };
47
+ return { newCodeVerifier, newCodeChallenge };
48
48
  };
49
49
  public getLoginWithGoogleUri(): string {
50
- const { codeVerifier, codeChallenge } = this.generatePKCEPair();
50
+ // get or create codeVerifier and codeChallenge from localstorage
51
+ const { newCodeVerifier, newCodeChallenge } = this.generatePKCEPair();
52
+ let codeVerifier = localStorage.getItem('codeVerifier') || newCodeVerifier;
53
+ let codeChallenge = localStorage.getItem('codeChallenge') || newCodeChallenge;
51
54
  localStorage.setItem('codeVerifier', codeVerifier);
52
55
  localStorage.setItem('codeChallenge', codeChallenge);
53
56
 
54
57
  if (this.authServer && this.realmName && this.redirectUri) {
55
58
  return `${this.authServer}auth/login_with_google?realm_name=${this.realmName}` +
56
- `&redirect_uri=${encodeURIComponent(this.realmName )}&code_challenge=${codeChallenge}&code_challenge_method=S256`
59
+ `&redirect_uri=${encodeURIComponent(this.redirectUri)}&code_challenge=${codeChallenge}&code_challenge_method=S256`
57
60
  }
58
61
  }
59
62
  public async isLoggedIn(): Promise<boolean> {
@@ -127,6 +130,8 @@ export class AuthManager {
127
130
  }),
128
131
  })
129
132
  .then((response) => {
133
+ localStorage.removeItem('codeVerifier');
134
+ localStorage.removeItem('codeChallenge');
130
135
  if (response.status !== 200) {
131
136
  throw new Error('Failed to exchange code for token');
132
137
  }
@@ -138,6 +143,8 @@ export class AuthManager {
138
143
  resolve();
139
144
  })
140
145
  .catch((error) => {
146
+ localStorage.removeItem('codeVerifier');
147
+ localStorage.removeItem('codeChallenge');
141
148
  reject(error);
142
149
  });
143
150
  }