From 15b49aab5831e414368672fb299200c032880142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mih=C3=A1ly=20Lengyel?= Date: Mon, 14 Aug 2023 19:32:35 +0200 Subject: [PATCH 01/27] fix: add exp and iat to JWT payloads without scientific notation (#765) --- CHANGELOG.md | 4 ++++ build.gradle | 2 +- .../supertokens/jwt/JWTSigningFunctions.java | 7 +++--- .../test/session/AccessTokenTest.java | 23 +++++++++++++++++++ 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9eb24ce9..938ff0e3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [unreleased] +## [6.0.9] - 2023-08-14 + +- Now using decimal notation to add numbers into the access token payload (instead of scientific notation) + ## [6.0.8] - 2023-08-01 - Fixes CUD validation starting with number. diff --git a/build.gradle b/build.gradle index 49e9735c9..f2a6c9278 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ compileTestJava { options.encoding = "UTF-8" } // } //} -version = "6.0.8" +version = "6.0.9" repositories { diff --git a/src/main/java/io/supertokens/jwt/JWTSigningFunctions.java b/src/main/java/io/supertokens/jwt/JWTSigningFunctions.java index ae8a9d052..d4e5a813a 100644 --- a/src/main/java/io/supertokens/jwt/JWTSigningFunctions.java +++ b/src/main/java/io/supertokens/jwt/JWTSigningFunctions.java @@ -127,9 +127,8 @@ public static String createJWTToken(JWTSigningKey.SupportedAlgorithms supportedA headerClaims.put("kid", keyToUse.keyId); // Add relevant claims to the payload, note we only add/override ones that we absolutely need to. - Map jwtPayload = new Gson().fromJson(payload, HashMap.class); - if (jwksDomain != null) { - jwtPayload.putIfAbsent("iss", jwksDomain); + if (jwksDomain != null && !payload.has("iss")){ + payload.addProperty("iss", jwksDomain); } JWTCreator.Builder builder = com.auth0.jwt.JWT.create(); @@ -141,7 +140,7 @@ public static String createJWTToken(JWTSigningKey.SupportedAlgorithms supportedA if (jwksDomain != null) { builder.withIssuer(jwksDomain); } - builder.withPayload(jwtPayload); + builder.withPayload(payload.toString()); return builder.sign(signingAlgorithm); } diff --git a/src/test/java/io/supertokens/test/session/AccessTokenTest.java b/src/test/java/io/supertokens/test/session/AccessTokenTest.java index 4a8235380..a15aa20ca 100644 --- a/src/test/java/io/supertokens/test/session/AccessTokenTest.java +++ b/src/test/java/io/supertokens/test/session/AccessTokenTest.java @@ -18,6 +18,7 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import io.supertokens.ProcessState.EventAndException; import io.supertokens.ProcessState.PROCESS_STATE; import io.supertokens.exceptions.AccessTokenPayloadError; @@ -272,6 +273,11 @@ public void inputOutputTest() throws Exception { assertEquals("antiCsrfToken", info.antiCsrfToken); assertEquals(expiryTime / 1000 * 1000, info.expiryTime); + JsonObject payload = (JsonObject) new JsonParser() + .parse(io.supertokens.utils.Utils.convertFromBase64(newToken.token.split("\\.")[1])); + // This throws if the number is in scientific (E) format + assertEquals(expiryTime / 1000, Long.parseLong(payload.get("exp").toString())); + JWT.JWTPreParseInfo jwtInfo = JWT.preParseJWTInfo(newToken.token); assertNotNull(jwtInfo.kid); assertEquals(jwtInfo.version, AccessToken.getLatestVersion()); @@ -302,6 +308,11 @@ public void inputOutputTestStatic() throws Exception { assertEquals("antiCsrfToken", info.antiCsrfToken); assertEquals(expiryTime / 1000 * 1000, info.expiryTime); + JsonObject payload = (JsonObject) new JsonParser() + .parse(io.supertokens.utils.Utils.convertFromBase64(newToken.token.split("\\.")[1])); + // This throws if the number is in scientific (E) format + assertEquals(expiryTime / 1000, Long.parseLong(payload.get("exp").toString())); + JWT.JWTPreParseInfo jwtInfo = JWT.preParseJWTInfo(newToken.token); assertNotNull(jwtInfo.kid); assertEquals(jwtInfo.version, AccessToken.getLatestVersion()); @@ -330,6 +341,12 @@ public void inputOutputTestV2() throws Exception { assertEquals("value", info.userData.get("key").getAsString()); assertEquals("antiCsrfToken", info.antiCsrfToken); assertEquals(expiryTime, info.expiryTime); + + JsonObject payload = (JsonObject) new JsonParser() + .parse(io.supertokens.utils.Utils.convertFromBase64(newToken.token.split("\\.")[1])); + // This throws if the number is in scientific (E) format + assertEquals(expiryTime, Long.parseLong(payload.get("expiryTime").toString())); + process.kill(); } @@ -355,6 +372,12 @@ public void inputOutputTestv1() throws InterruptedException, InvalidKeyException assertEquals("parentRefreshTokenHash1", info.parentRefreshTokenHash1); assertEquals("value", info.userData.get("key").getAsString()); assertEquals("antiCsrfToken", info.antiCsrfToken); + + JsonObject payload = (JsonObject) new JsonParser() + .parse(io.supertokens.utils.Utils.convertFromBase64(newToken.token.split("\\.")[1])); + // This throws if the number is in scientific (E) format + Long.parseLong(payload.get("expiryTime").toString()); + process.kill(); } From 6aac895c9066b54089c32b983161b24c9a01347e Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Mon, 14 Aug 2023 23:03:27 +0530 Subject: [PATCH 02/27] adding dev-v6.0.9 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13259 -> 13259 bytes jar/{core-6.0.8.jar => core-6.0.9.jar} | Bin 658492 -> 658439 bytes 4 files changed, 0 insertions(+), 0 deletions(-) rename jar/{core-6.0.8.jar => core-6.0.9.jar} (92%) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index 68c5606cfed5c236f84078292f980153013e94b4..21b6f45c2a231c63fad531de38481c1106087538 100644 GIT binary patch delta 835 zcmdn>nQ7N&Cf)#VW)?061`ZB}j2(OvdDWOfl$no;+Dw5G=S{ zdp8$YFx4yoEU?3DKO>k?W${1+EEDVN2^LuCy9{Q7@#OQt9Fu#4dB75Lf@|2o4CyFI z7BIs+ZadhJ$sglgzycNtvmtsxb_b-fPUcI4=#@uiSjbj@TZu#%6HpF?DB zPh;o8<_6A%-~imLwD1SSH?oT@z&axqb3p7*Uhx4WFga}HUkJU*1Wfm?0!PZ^^Q-hg z{7I{=z{0kx?Z9;1YF{vYZgnD>mkqgKddmig**qH|W>;)X1B*Z0m;t7JHU)v{g_|Je z`T*@x+6=KPW-~;*+*P w^xxeEPGge|wnNOBxgDIcCO_Q{kvG_p1Xe$FhZ~r_w*z91$xcYPmF{!}02E9sxc~qF delta 835 zcmdn>nQ7N&Cf)#VW)?061`ZB}zS)cudDWOfl$no;+Dw5G=S{ zdp8$YFx4yoEU?3DKO>k?W${1+EEDVN2^LuCy9{Q7@#OQt9Fu#4dB75Lf@|2o4CyFI z7BIs+ZadhJ$sglgzycNtvmtsxb_b-fPUcI4=#@uiSjbj@TZu#%6HpF?DB zPh;o8<_6A%-~imLwD1SSH?oT@z&axqb3p7*Uhx4WFga}HUkJU*1Wfm?0!PZ^^Q-hg z{7I{=z{0kx?Z9;1YF{vYZgnD>mkqgKddmig**qH|W>;)X1B*Z0m;t7JHU)v{g_|Je z`T*@x+6=KPW-~;*+*P w^xxeEPGge|wnNOBxgDIcCO_Q{kvG_p1Xe$FhZ~r_w*z91$xcYPmF{!}021~pSpWb4 diff --git a/downloader/jar/downloader.jar b/downloader/jar/downloader.jar index 80c8ebfa64d016bd47bfa2d87374e00376e4206f..3b69d19efeba06df9056741e5990ef1b721d977b 100644 GIT binary patch delta 375 zcmexc_P2~Tz?+$ci-CcIgCT1N-$Y(DW)NlOr3R$J8GwKZL;wLZ5NGD=Gc%xSSf&Hk zaMc_{ZRTfO$p&If-p%d|7GUHEW`zo9PxdwEncTajueuo>Ee1w0I^nZYWKnV5j-zb0Ub z$@ZptV19wA6_{RY>I$a6n#O|ZP_sZVz0xcLOpBO9_!;I&VE$S2958KT5e24aS_FXU iHx^l7I?@ti&Q42zFrV8BLdRNVg83({e8IG&bqWCNUUl36 diff --git a/ee/jar/ee.jar b/ee/jar/ee.jar index 7c0f3649f87184be4c642c8f5de301441097a5dd..fda1d1629a4e3ce4cbc303a8de16f1455a967352 100644 GIT binary patch delta 234 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 delta 19079 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 Date: Wed, 16 Aug 2023 13:58:16 +0200 Subject: [PATCH 03/27] fix: fix handling of b64 and b64url encoded access tokens (#767) --- CHANGELOG.md | 4 ++++ build.gradle | 2 +- src/main/java/io/supertokens/utils/Utils.java | 3 ++- .../test/session/AccessTokenTest.java | 21 ++++++++++++------- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 938ff0e3a..d57e0314b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [unreleased] +## [6.0.10] - 2023-08-16 + +- Fixed an encoding/decoding issue for certain access token payloads + ## [6.0.9] - 2023-08-14 - Now using decimal notation to add numbers into the access token payload (instead of scientific notation) diff --git a/build.gradle b/build.gradle index f2a6c9278..05da3a503 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ compileTestJava { options.encoding = "UTF-8" } // } //} -version = "6.0.9" +version = "6.0.10" repositories { diff --git a/src/main/java/io/supertokens/utils/Utils.java b/src/main/java/io/supertokens/utils/Utils.java index 1a0232180..37b5a9e98 100644 --- a/src/main/java/io/supertokens/utils/Utils.java +++ b/src/main/java/io/supertokens/utils/Utils.java @@ -77,8 +77,9 @@ public static String convertToBase64(String str) { return new String(Base64.getEncoder().encode(stringToBytes(str)), StandardCharsets.UTF_8); } + // This function deserializes both B64 and B64URL encodings public static String convertFromBase64(String str) { - return new String(Base64.getDecoder().decode(stringToBytes(str)), StandardCharsets.UTF_8); + return new String(Base64.getDecoder().decode(stringToBytes(str.replace("-", "+").replace("_", "/"))), StandardCharsets.UTF_8); } public static String throwableStacktraceToString(Throwable e) { diff --git a/src/test/java/io/supertokens/test/session/AccessTokenTest.java b/src/test/java/io/supertokens/test/session/AccessTokenTest.java index a15aa20ca..dc2c3ce34 100644 --- a/src/test/java/io/supertokens/test/session/AccessTokenTest.java +++ b/src/test/java/io/supertokens/test/session/AccessTokenTest.java @@ -257,7 +257,8 @@ public void inputOutputTest() throws Exception { EventAndException e = process.checkOrWaitForEvent(PROCESS_STATE.STARTED); assertNotNull(e); JsonObject jsonObj = new JsonObject(); - jsonObj.addProperty("key", "value"); + String testValue = "asdf???123"; + jsonObj.addProperty("key", testValue); // db key long expiryTime = System.currentTimeMillis() + 1000; @@ -269,7 +270,7 @@ public void inputOutputTest() throws Exception { assertEquals("userId", info.userId); assertEquals("refreshTokenHash1", info.refreshTokenHash1); assertEquals("parentRefreshTokenHash1", info.parentRefreshTokenHash1); - assertEquals("value", info.userData.get("key").getAsString()); + assertEquals(testValue, info.userData.get("key").getAsString()); assertEquals("antiCsrfToken", info.antiCsrfToken); assertEquals(expiryTime / 1000 * 1000, info.expiryTime); @@ -292,19 +293,21 @@ public void inputOutputTestStatic() throws Exception { EventAndException e = process.checkOrWaitForEvent(PROCESS_STATE.STARTED); assertNotNull(e); JsonObject jsonObj = new JsonObject(); - jsonObj.addProperty("key", "value"); + String testValue = "asdf???123"; + jsonObj.addProperty("key", testValue); // db key long expiryTime = System.currentTimeMillis() + 1000; TokenInfo newToken = AccessToken.createNewAccessToken(process.getProcess(), "sessionHandle", "userId", "refreshTokenHash1", "parentRefreshTokenHash1", jsonObj, "antiCsrfToken", expiryTime, AccessToken.getLatestVersion(), true); + System.out.println(newToken.token); AccessTokenInfo info = AccessToken.getInfoFromAccessToken(process.getProcess(), newToken.token, true); assertEquals("sessionHandle", info.sessionHandle); assertEquals("userId", info.userId); assertEquals("refreshTokenHash1", info.refreshTokenHash1); assertEquals("parentRefreshTokenHash1", info.parentRefreshTokenHash1); - assertEquals("value", info.userData.get("key").getAsString()); + assertEquals(testValue, info.userData.get("key").getAsString()); assertEquals("antiCsrfToken", info.antiCsrfToken); assertEquals(expiryTime / 1000 * 1000, info.expiryTime); @@ -326,7 +329,8 @@ public void inputOutputTestV2() throws Exception { EventAndException e = process.checkOrWaitForEvent(PROCESS_STATE.STARTED); assertNotNull(e); JsonObject jsonObj = new JsonObject(); - jsonObj.addProperty("key", "value"); + String testValue = "asdf???123"; + jsonObj.addProperty("key", testValue); // db key long expiryTime = System.currentTimeMillis() + 1000; @@ -338,7 +342,7 @@ public void inputOutputTestV2() throws Exception { assertEquals("userId", info.userId); assertEquals("refreshTokenHash1", info.refreshTokenHash1); assertEquals("parentRefreshTokenHash1", info.parentRefreshTokenHash1); - assertEquals("value", info.userData.get("key").getAsString()); + assertEquals(testValue, info.userData.get("key").getAsString()); assertEquals("antiCsrfToken", info.antiCsrfToken); assertEquals(expiryTime, info.expiryTime); @@ -360,7 +364,8 @@ public void inputOutputTestv1() throws InterruptedException, InvalidKeyException EventAndException e = process.checkOrWaitForEvent(PROCESS_STATE.STARTED); assertNotNull(e); JsonObject jsonObj = new JsonObject(); - jsonObj.addProperty("key", "value"); + String testValue = "asdf???123"; + jsonObj.addProperty("key", testValue); // db key TokenInfo newToken = AccessToken.createNewAccessTokenV1(process.getProcess(), "sessionHandle", "userId", @@ -370,7 +375,7 @@ public void inputOutputTestv1() throws InterruptedException, InvalidKeyException assertEquals("userId", info.userId); assertEquals("refreshTokenHash1", info.refreshTokenHash1); assertEquals("parentRefreshTokenHash1", info.parentRefreshTokenHash1); - assertEquals("value", info.userData.get("key").getAsString()); + assertEquals(testValue, info.userData.get("key").getAsString()); assertEquals("antiCsrfToken", info.antiCsrfToken); JsonObject payload = (JsonObject) new JsonParser() From e42e63c7458d3808f2c0ec2409946cb0c5fbc408 Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Wed, 16 Aug 2023 17:29:15 +0530 Subject: [PATCH 04/27] adding dev-v6.0.10 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13259 -> 13259 bytes jar/{core-6.0.9.jar => core-6.0.10.jar} | Bin 658439 -> 658528 bytes 4 files changed, 0 insertions(+), 0 deletions(-) rename jar/{core-6.0.9.jar => core-6.0.10.jar} (91%) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index 21b6f45c2a231c63fad531de38481c1106087538..61a25652e15c14677357bbce9437ec2fe65f8a5e 100644 GIT binary patch delta 835 zcmdn>nQ7N&Cf)#VW)?061`ZB}h1~)ZdDWOfl$no;+Dw5G=S{ zdp8$YFx4yoEU?3DKO>k?W${1+EEDVN2^LuCy9{Q7@#OQt9Fu#4dB75Lf@|2o4CyFI z7BIs+ZadhJ$sglgzycNtvmtsxb_b-fPUcI4=#@uiSjbj@TZu#%6HpF?DB zPh;o8<_6A%-~imLwD1SSH?oT@z&axqb3p7*Uhx4WFga}HUkJU*1Wfm?0!PZ^^Q-hg z{7I{=z{0kx?Z9;1YF{vYZgnD>mkqgKddmig**qH|W>;)X1B*Z0m;t7JHU)v{g_|Je z`T*@x+6=KPW-~;*+*P w^xxeEPGge|wnNOBxgDIcCO_Q{kvG_p1Xe$FhZ~r_w*z91$xcYPmF{!}0BJoii2wiq delta 835 zcmdn>nQ7N&Cf)#VW)?061`ZB}j2(OvdDWOfl$no;+Dw5G=S{ zdp8$YFx4yoEU?3DKO>k?W${1+EEDVN2^LuCy9{Q7@#OQt9Fu#4dB75Lf@|2o4CyFI z7BIs+ZadhJ$sglgzycNtvmtsxb_b-fPUcI4=#@uiSjbj@TZu#%6HpF?DB zPh;o8<_6A%-~imLwD1SSH?oT@z&axqb3p7*Uhx4WFga}HUkJU*1Wfm?0!PZ^^Q-hg z{7I{=z{0kx?Z9;1YF{vYZgnD>mkqgKddmig**qH|W>;)X1B*Z0m;t7JHU)v{g_|Je z`T*@x+6=KPW-~;*+*P w^xxeEPGge|wnNOBxgDIcCO_Q{kvG_p1Xe$FhZ~r_w*z91$xcYPmF{!}02E9sxc~qF diff --git a/downloader/jar/downloader.jar b/downloader/jar/downloader.jar index 3b69d19efeba06df9056741e5990ef1b721d977b..7e26452b54cdea6d620eb4c65a8e005a292a933e 100644 GIT binary patch delta 375 zcmexc_P2~Tz?+$ci-CcIgJE&Ez(ig(W)NlOr3R$J8GwKZL;wLZ5NGD=Gc%xSSf&Hk zaMc_{ZRTfO$p&If-p%d|7GUHEW`zo9PxdwEncTz(ig(W)NlOr3R$J8GwKZL;wLZ5NGD=Gc%xSSf&Hk za8(~fO=f4b5Cmxy_IZ|4$-=2p%Kl!1d+~z#S=`0{6n>pBSFo7A5IhfSJnqKHb zG)oyYg8B0dOu+P21A8znZm0*QJq)eDbgQ8)m_BOg2B!IpqQG>vQ4p9uU=#qRg^eNV Hf{iNxD-%RT delta 234 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 delta 21335 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 From 9afb95f2a2d2058ec04a83f467326426c133ffb4 Mon Sep 17 00:00:00 2001 From: Rishabh Poddar Date: Mon, 21 Aug 2023 10:50:11 +0530 Subject: [PATCH 05/27] Update release.md --- .github/ISSUE_TEMPLATE/release.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/release.md b/.github/ISSUE_TEMPLATE/release.md index 3ef05dfdd..1ceffc860 100644 --- a/.github/ISSUE_TEMPLATE/release.md +++ b/.github/ISSUE_TEMPLATE/release.md @@ -183,6 +183,12 @@ curl --location --request POST 'https://try.supertokens.com/recipe/dashboard/use --header 'Content-Type: application/json' \ --data-raw '{"email": "rishabh@supertokens.com","password": "abcd1234"}' +curl --location --request POST 'https://try.supertokens.com/recipe/dashboard/user' \ +--header 'rid: dashboard' \ +--header 'api-key: ' \ +--header 'Content-Type: application/json' \ +--data-raw '{"email": "demo@supertokens.com","password": "abcd1234"}' + curl --location --request PUT 'https://try.supertokens.com/recipe/multitenancy/tenant' \ --header 'Content-Type: application/json' \ --data-raw '{ From 6913806eb00b193708ede846f4c961a9c4af7c1c Mon Sep 17 00:00:00 2001 From: Rishabh Poddar Date: Tue, 22 Aug 2023 11:59:47 +0530 Subject: [PATCH 06/27] Update release.md --- .github/ISSUE_TEMPLATE/release.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/release.md b/.github/ISSUE_TEMPLATE/release.md index 1ceffc860..ad9f7269e 100644 --- a/.github/ISSUE_TEMPLATE/release.md +++ b/.github/ISSUE_TEMPLATE/release.md @@ -119,6 +119,7 @@ labels: - [ ] Change [checklist in contributing guide for which tables to pick when migrating data from dev to prod instance](https://test.supertokens.com/docs/contribute/checklists/saas/tables-to-consider-for-data-migration-dev-to-prod). - [ ] Update license key used for cores to include nea feature. - [ ] Update table schema in mysql / postgresql section for self hosted in docs + - [ ] Update API that returns the list of paid features in saas dashboard - [ ] [supertokens-node:X.Y](https://github.com/supertokens/supertokens-node/tree/X.Y) - [ ] [supertokens-golang:X.Y](https://github.com/supertokens/supertokens-golang/tree/X.Y) - [ ] [supertokens-website:X.Y](https://github.com/supertokens/supertokens-website/tree/X.Y) From 521aaeb908b2863629e4d47afbaa945bd76a94f0 Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Thu, 31 Aug 2023 14:36:35 +0530 Subject: [PATCH 07/27] fix: ee featureflag cron job (#778) * fix: ee featureflag cron job * fix: test * fix: tests * fix: tests --- CHANGELOG.md | 4 + build.gradle | 2 +- .../java/io/supertokens/ee/EEFeatureFlag.java | 4 +- src/main/java/io/supertokens/Main.java | 3 +- .../java/io/supertokens/test/CronjobTest.java | 84 ++++++++++++++++++- .../io/supertokens/test/FeatureFlagTest.java | 35 ++++++++ 6 files changed, 123 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d57e0314b..1031ff31a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [unreleased] +## [6.0.11] - 2023-08-16 + +- Fixed feature flag cron job + ## [6.0.10] - 2023-08-16 - Fixed an encoding/decoding issue for certain access token payloads diff --git a/build.gradle b/build.gradle index 05da3a503..83265aeea 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ compileTestJava { options.encoding = "UTF-8" } // } //} -version = "6.0.10" +version = "6.0.11" repositories { diff --git a/ee/src/main/java/io/supertokens/ee/EEFeatureFlag.java b/ee/src/main/java/io/supertokens/ee/EEFeatureFlag.java index 2b0a94dba..8efe42552 100644 --- a/ee/src/main/java/io/supertokens/ee/EEFeatureFlag.java +++ b/ee/src/main/java/io/supertokens/ee/EEFeatureFlag.java @@ -52,8 +52,8 @@ import java.util.List; public class EEFeatureFlag implements io.supertokens.featureflag.EEFeatureFlagInterface { - public static final int INTERVAL_BETWEEN_SERVER_SYNC = 1000 * 3600 * 24; // 1 day. - private static final long INTERVAL_BETWEEN_DB_READS = (long) 1000 * 3600 * 4; // 4 hour. + public static final int INTERVAL_BETWEEN_SERVER_SYNC = 3600 * 24; // 1 day (in seconds). + private static final long INTERVAL_BETWEEN_DB_READS = (long) 1000 * 3600 * 4; // 4 hour (in millis). public static final String REQUEST_ID = "licensecheck"; public static final String FEATURE_FLAG_KEY_IN_DB = "FEATURE_FLAG"; diff --git a/src/main/java/io/supertokens/Main.java b/src/main/java/io/supertokens/Main.java index 467db6781..8df83bd5d 100644 --- a/src/main/java/io/supertokens/Main.java +++ b/src/main/java/io/supertokens/Main.java @@ -201,9 +201,8 @@ private void init() throws IOException, StorageQueryException { } } } - FeatureFlag.initForBaseTenant(this, CLIOptions.get(this).getInstallationPath() + "ee/"); - MultitenancyHelper.init(this); + FeatureFlag.initForBaseTenant(this, CLIOptions.get(this).getInstallationPath() + "ee/"); try { // load all configs for each of the tenants. diff --git a/src/test/java/io/supertokens/test/CronjobTest.java b/src/test/java/io/supertokens/test/CronjobTest.java index a9bf933b1..40299b4e0 100644 --- a/src/test/java/io/supertokens/test/CronjobTest.java +++ b/src/test/java/io/supertokens/test/CronjobTest.java @@ -31,6 +31,7 @@ import io.supertokens.multitenancy.MultitenancyHelper; import io.supertokens.pluginInterface.STORAGE_TYPE; import io.supertokens.pluginInterface.Storage; +import io.supertokens.pluginInterface.authRecipe.AuthRecipeUserInfo; import io.supertokens.pluginInterface.multitenancy.*; import io.supertokens.pluginInterface.multitenancy.exceptions.TenantOrAppNotFoundException; import io.supertokens.storageLayer.StorageLayer; @@ -39,11 +40,9 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestRule; +import org.reflections.Reflections; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import static org.junit.Assert.*; @@ -780,4 +779,81 @@ public void testThatCoreAutomaticallySyncsToConfigChangesInDb() throws Exception process.kill(); assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STOPPED)); } + + @Test + public void testThatNoCronJobIntervalIsMoreThanADay() throws Exception { + String[] args = {"../"}; + + TestingProcessManager.TestingProcess process = TestingProcessManager.start(args); + process.startProcess(); + assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STARTED)); + + if (StorageLayer.getStorage(process.getProcess()).getType() != STORAGE_TYPE.SQL) { + return; + } + + // ensure none of the tasks have an interval more than a day + for (CronTask task : Cronjobs.getInstance(process.getProcess()).getTasks()) { + assertTrue(task.getIntervalTimeSeconds() <= 3600 * 24); + assertTrue(task.getInitialWaitTimeSeconds() <= 3600 * 24); + } + process.kill(); + assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STOPPED)); + } + + @Test + public void testThatThereAreTasksOfAllCronTaskClassesAndHaveCorrectIntervals() throws Exception { + String[] args = {"../"}; + + TestingProcessManager.TestingProcess process = TestingProcessManager.start(args); + process.startProcess(); + assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STARTED)); + + Reflections reflections = new Reflections("io.supertokens"); + Set> classes = reflections.getSubTypesOf(CronTask.class); + + Set classNames = new HashSet<>(); + + for (Class cls : classes) { + if (!cls.getName().contains("io.supertokens.test")) { + classNames.add(cls.getName()); + } + } + + // Note that the time is in seconds + Map intervals = new HashMap<>(); + intervals.put("io.supertokens.ee.cronjobs.EELicenseCheck", 10); + intervals.put("io.supertokens.cronjobs.syncCoreConfigWithDb.SyncCoreConfigWithDb", 60); + intervals.put("io.supertokens.cronjobs.deleteExpiredSessions.DeleteExpiredSessions", 43200); + intervals.put("io.supertokens.cronjobs.deleteExpiredPasswordResetTokens.DeleteExpiredPasswordResetTokens", 3600); + intervals.put("io.supertokens.cronjobs.deleteExpiredEmailVerificationTokens.DeleteExpiredEmailVerificationTokens", 43200); + intervals.put("io.supertokens.cronjobs.deleteExpiredPasswordlessDevices.DeleteExpiredPasswordlessDevices", 3600); + intervals.put("io.supertokens.cronjobs.deleteExpiredTotpTokens.DeleteExpiredTotpTokens", 3600); + intervals.put("io.supertokens.cronjobs.deleteExpiredDashboardSessions.DeleteExpiredDashboardSessions", 43200); + intervals.put("io.supertokens.cronjobs.telemetry.Telemetry", 86400); + intervals.put("io.supertokens.cronjobs.deleteExpiredAccessTokenSigningKeys.DeleteExpiredAccessTokenSigningKeys", 86400); + + Map delays = new HashMap<>(); + delays.put("io.supertokens.ee.cronjobs.EELicenseCheck", 10); + delays.put("io.supertokens.cronjobs.syncCoreConfigWithDb.SyncCoreConfigWithDb", 0); + delays.put("io.supertokens.cronjobs.deleteExpiredSessions.DeleteExpiredSessions", 0); + delays.put("io.supertokens.cronjobs.deleteExpiredPasswordResetTokens.DeleteExpiredPasswordResetTokens", 0); + delays.put("io.supertokens.cronjobs.deleteExpiredEmailVerificationTokens.DeleteExpiredEmailVerificationTokens", 0); + delays.put("io.supertokens.cronjobs.deleteExpiredPasswordlessDevices.DeleteExpiredPasswordlessDevices", 0); + delays.put("io.supertokens.cronjobs.deleteExpiredTotpTokens.DeleteExpiredTotpTokens", 0); + delays.put("io.supertokens.cronjobs.deleteExpiredDashboardSessions.DeleteExpiredDashboardSessions", 0); + delays.put("io.supertokens.cronjobs.telemetry.Telemetry", 0); + delays.put("io.supertokens.cronjobs.deleteExpiredAccessTokenSigningKeys.DeleteExpiredAccessTokenSigningKeys", 0); + + List allTasks = Cronjobs.getInstance(process.getProcess()).getTasks(); + assertEquals(10, allTasks.size()); + + for (CronTask task : allTasks) { + assertEquals(intervals.get(task.getClass().getName()).intValue(), task.getIntervalTimeSeconds()); + assertEquals(delays.get(task.getClass().getName()).intValue(), task.getInitialWaitTimeSeconds()); + } + + process.kill(); + assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STOPPED)); + } } diff --git a/src/test/java/io/supertokens/test/FeatureFlagTest.java b/src/test/java/io/supertokens/test/FeatureFlagTest.java index c52221252..4434d2be0 100644 --- a/src/test/java/io/supertokens/test/FeatureFlagTest.java +++ b/src/test/java/io/supertokens/test/FeatureFlagTest.java @@ -21,6 +21,10 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import io.supertokens.ProcessState; +import io.supertokens.cronjobs.CronTask; +import io.supertokens.cronjobs.CronTaskTest; +import io.supertokens.cronjobs.Cronjobs; +import io.supertokens.cronjobs.syncCoreConfigWithDb.SyncCoreConfigWithDb; import io.supertokens.emailpassword.EmailPassword; import io.supertokens.featureflag.EE_FEATURES; import io.supertokens.featureflag.FeatureFlag; @@ -35,6 +39,7 @@ import io.supertokens.session.Session; import io.supertokens.storageLayer.StorageLayer; import io.supertokens.test.httpRequest.HttpRequestForTesting; +import io.supertokens.test.multitenant.api.TestMultitenancyAPIHelper; import io.supertokens.webserver.WebserverAPI; import org.junit.*; import org.junit.rules.TestRule; @@ -702,4 +707,34 @@ public void testPaidFeaturesAreEnabledIfUsingInMemoryDatabase() throws Exception process.kill(); assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STOPPED)); } + + @Test + public void testNetworkCallIsMadeInCoreInit() throws Exception { + String[] args = {"../"}; + + TestingProcessManager.TestingProcess process = TestingProcessManager.start(args); + process.startProcess(); + assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STARTED)); + + if (StorageLayer.getStorage(process.getProcess()).getType() != STORAGE_TYPE.SQL) { + return; + } + + // While adding license + TestMultitenancyAPIHelper.addLicense(OPAQUE_KEY_WITH_MULTITENANCY_FEATURE, process.getProcess()); + assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.LICENSE_KEY_CHECK_NETWORK_CALL)); + ProcessState.getInstance(process.getProcess()).clear(); + + process.kill(false); + + + // Restart core and check if the call was made during init + process = TestingProcessManager.start(args); + process.startProcess(); + assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STARTED)); + assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.LICENSE_KEY_CHECK_NETWORK_CALL)); + + process.kill(); + assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STOPPED)); + } } From ea22481cdb6d5f9d8320d913f4b5778e3cd2defa Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Thu, 31 Aug 2023 14:38:36 +0530 Subject: [PATCH 08/27] adding dev-v6.0.11 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13259 -> 13262 bytes jar/{core-6.0.10.jar => core-6.0.11.jar} | Bin 658528 -> 658527 bytes 4 files changed, 0 insertions(+), 0 deletions(-) rename jar/{core-6.0.10.jar => core-6.0.11.jar} (92%) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index 61a25652e15c14677357bbce9437ec2fe65f8a5e..68681f963dbf03e86fa837628cd75a334c1412f3 100644 GIT binary patch delta 835 zcmdn>nQ7N&Cf)#VW)?061`ZB}vnBEqdDWOfl$n>>nG*SM1|VPp5kSBU#F_c}%nS$( zKqV8G>3}s{H2_hQIT-Dkfufte7^kp;7?U5exq}6?+0(?p0#jsN!2)+=8+pM3ALETD zPu3O$3oh5*%>_0m)hqx+Z{A_HpApQcvUnf@mWlQC1PiS6UB(I)c*tfv`Ft?P~WCOF6H>JfK5{@TnjPnVwnwCK%hJZ?2FC$jqOZek)O@E5JqO(E(k-d zvl-&kHItpdN|zVBK*VAWi2cbcK7a%!hpqez zp;wuJ>E2b~NSSH%U)Ezt$Yg=3JKyHY0ys9GJeaZYG${SzisNU#$-Z(=How!St35pI86tLQvj>>ZyCn@wmu-RAabb%Wm@m6E z8cbJjO$F1Bw+4f0%WYv`deSzC{=3`2X>78=c8EDMw}VsGnQ7N&Cf)#VW)?061`ZB}h1~)ZdDWOfl$no;+Dw5G=S{ zdp8$YFx4yoEU?3DKO>k?W${1+EEDVN2^LuCy9{Q7@#OQt9Fu#4dB75Lf@|2o4CyFI z7BIs+ZadhJ$sglgzycNtvmtsxb_b-fPUcI4=#@uiSjbj@TZu#%6HpF?DB zPh;o8<_6A%-~imLwD1SSH?oT@z&axqb3p7*Uhx4WFga}HUkJU*1Wfm?0!PZ^^Q-hg z{7I{=z{0kx?Z9;1YF{vYZgnD>mkqgKddmig**qH|W>;)X1B*Z0m;t7JHU)v{g_|Je z`T*@x+6=KPW-~;*+*P w^xxeEPGge|wnNOBxgDIcCO_Q{kvG_p1Xe$FhZ~r_w*z91$xcYPmF{!}0BJoii2wiq diff --git a/downloader/jar/downloader.jar b/downloader/jar/downloader.jar index 7e26452b54cdea6d620eb4c65a8e005a292a933e..8a173c1561828a4043b6814a3dca5c9b5ee3b532 100644 GIT binary patch delta 375 zcmexc_P2~Tz?+$ci-CcIgW-IM{6tV8ZB delta 375 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 J#`W*z{{g0t7Cis} delta 10060 zcmZ9SWo#VEvaOA=V`gTiF*7s7%37B2;M%MiMF=?0T~` zkqs8=zYV1<{~G4m{v%)nX#UUtF=8w2TY7`#p@l)4s>E^_?|8(q6GHpkk8nqC$+fBu9`gvhdW5`5y!$YyWfyT1Lz$18PNBos)73Vq8d9h&22 zt9=fV_XWEphg%r3ohD}~%@*f(Wub^PL9krnDRIYproJ94XtptpcDsdYE9@DZrn#Aw z+|Su)q>pAhS=j(|P$)xtp}0}s2uul%O^4VGwp}v1JjOX5VL9ETE9mSa%$SI5;g9pv zkhVzr?PAR5tF=Q@T4+3fclLn|c{Gtm0qY>nRxmuz?^D6HVg}^%Q1;0BLhHzFhcY)+ ziYQ!I0<*}Lfxai`j)=5ke0*V!h83{#muo++|@jW*Kxsx)=Jgx&1(RX9S(W2X^HyT z+MN(NptzM8o{(tTe(GQ-J3EX^$#)D^g(U+ez_u5aKZcrJx0@6w5uUrN^Z?%D_Zh>y zb^E``bD;SCz~WwLp9b%_?LV1Yr%_BU*p3x;^3LMHY`s!ddd+|#|L>n+Z6k7*P5Kb%u}=S zvtv=C3K`GVvp1zXF*&gnQ*ZSKVWx!Iqz~a(y`&NC2%`S$&%}on3tI;tfCkO5ikj8R zQ!>{GLDc@WBO*UVPpU8eoi47aWWykg->;^Zl{i{_(847#5D9Ib-cw_odtxaGyDM2+ zwYyV=(MBn`{OB>o^(CX3syk(|eQzv{!~JO1UCM6--JWhNh$Z}P>Aj&YDmd1F7$Kmh zr?Coj8ll5S)@)R!W)=#zoB7ibm7D}s2t3ix{5ICu!mM1k*V!AzWZ@!D@;FdI27Aoc zn+wQ8=7!%06X6jQHDdC-E_ci+&>U0XSJrfpeD1v6XLN-Z%<-1+T@Hobd$qJtIkGUp zQklo!u9nsaeQg9rRTzmv=e+W1akaCY7LST zu87++ni&y3MhUZSH?)ZKt4O~qTh)~h#-{JWDc0w^CaSOWyTqX`;6z6%%?aZ8)3cUiy`FYV%>vOpCKAFNQ9=;{ zWj|@Pr%;7Tjb=n9tc}_o)_Cmm5`T(lo}9baAF#^N$BsoYBRlpCCSH|^T$-Hw5qHQL znyQ|?I%#cYVBJqpXVv_A9o3f3hE*y|Mq*f^KxNDV7Uf0uvwG9nf`QwtG;k${XCZo_ z6|br%TQjRhoOeuu{Z44jgi5f}5f(Ql{01i-9T}rk;58sCM(5z%qY66odRpW)*C}Du z_9lEzysf_i?;%2j(le6o#2pP+mp~}ZkOBd3v|cZWwjKvW>4{TfI)d+XTYeW$$)je+ z=SRVEs4i8LZOzcWPI_#A)9D#8-bGy+qzT`4LS7xMA74?#C?xI6M4y(E;Zd%e)A7$Mvl*_~+!H|_+ zNWD4E=!V+JX5owuoYY{;Uy;KHb>9=RvSaiPe-pxmWG%!6HC;o^W(dqlfl{~&Jnt{r z(7O+wa*TZ}UZ&vjZPtX<3bO&dE&qOuX#o_ zbkqTmyrBZ<<_*S!Kb`u5 zXDW``-W6f4jKRAfZ#8!mw^{qkV=0K8t32HNhrLN{8W*;@BVWHtsFeo{3PO^KPz3fQ zA&vK+tM6Ja&vTUV<*vB==o9qq?Q^y4eWeee4|F5$L8l-XwEPsyTLNAD2B9XGn<0

Di6B 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 diff --git a/jar/core-6.0.10.jar b/jar/core-6.0.11.jar similarity index 92% rename from jar/core-6.0.10.jar rename to jar/core-6.0.11.jar index f1afb4b411f728e04f83761fcefc68e518eb5ffb..db692d553a8c4205268dfdbf9bf21757edbaec89 100644 GIT binary patch delta 17648 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 AU;qFB delta 17801 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 A>Hq)$ From 2d66b9d8bdd8adaa4392d17597c0c0dc4e90431c Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Thu, 31 Aug 2023 15:24:39 +0530 Subject: [PATCH 09/27] fix: test (#779) --- src/test/java/io/supertokens/test/CronjobTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/java/io/supertokens/test/CronjobTest.java b/src/test/java/io/supertokens/test/CronjobTest.java index 40299b4e0..44801fa09 100644 --- a/src/test/java/io/supertokens/test/CronjobTest.java +++ b/src/test/java/io/supertokens/test/CronjobTest.java @@ -809,6 +809,10 @@ public void testThatThereAreTasksOfAllCronTaskClassesAndHaveCorrectIntervals() t process.startProcess(); assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.STARTED)); + if (StorageLayer.getStorage(process.getProcess()).getType() != STORAGE_TYPE.SQL) { + return; + } + Reflections reflections = new Reflections("io.supertokens"); Set> classes = reflections.getSubTypesOf(CronTask.class); From 8b749e242499bbaa553ae37ef06b2fdd0c12f4bd Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Thu, 31 Aug 2023 15:25:25 +0530 Subject: [PATCH 10/27] adding dev-v6.0.11 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13262 -> 13262 bytes jar/core-6.0.11.jar | Bin 658527 -> 658527 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index 68681f963dbf03e86fa837628cd75a334c1412f3..4fb4743bee533b37a93d671796a7aa4a8b3e8dea 100644 GIT binary patch delta 758 zcmdn>nQ7N&CY}IqW)?061`ZAe_3DW{>P$e=)LT`(T0Wcs2$(1EdRRt}BRZo-hZj8e~mC8tY`fG_Yf2(#qKQP<=Sruv2of{T41hR3C1>nBxmJ zSfOwo*rW?(wjhJ~%VR-~-JI9h!33gzH0OcojJDliTD7wU?3vY*ok7wcCcgj+-i0WLE1){#L2?0^wYtz8gCYj0S*P4Tv9P3g*RNlIH z5OsdtED)8wz6M0STpt0VoHyiwD8n^CO&hF0Ozw?fL(4a&gLn@%W`Zd1O~D{)!6vYQ z-aspqHiNB*-V7EwxY-jV&$9)rsdNk2?DJc^L4q<{V?b2ZRKi^|!nfYaDepym_ zG>6k;v&pipY9y6Sl9=1H=8CZ{Y7;}kB!)wLBWHXL+n?}?k$kiT;jjH-CbxaJR58qM z`)!vXg(Iyr;Fd{sE3h}aV-2vWsSEOL)8&Eg`T(|!;yWE_aozVNNzmR=mY};7P3U$J=hK&d%)3X)1$k{t1GZoeYDP7 z{pW_{PpqYmg2(&!4Mpgy(;+8P)}PICrI(|-AXkm`^ekIO4aqStiIdPRQ zlcr8=FVSbV-`tTs|7%=7(SWcG6F>O$>f|=a=wv0UqYLpe9;uG=p%Cn(Qo^-B3y)2AnH! z?OH*DQj2}Sg`y68D)s{Hr6`arao)QU9tio$oPM{AcR`D$deg#dB%gI0xMl4H-dkK@ L>m2_WW3KBrYPvJz diff --git a/downloader/jar/downloader.jar b/downloader/jar/downloader.jar index 8a173c1561828a4043b6814a3dca5c9b5ee3b532..d1be41334b516007a20060ce70c7b03e8af6ffe0 100644 GIT binary patch delta 335 zcmexc_P2~Dz?+$ci-CcIgF&-;B9A%~kTmsH)vT5eX8-~w5CH_tK%AMc&&+_Le5o!- z`4tNwxtWh~6&sMAyo=ohNNwT>VTJH?Ci|N6Ozz|50V$fpdy5N1S4i|TfoM+YY7jlS zP1YI2JuN!}ES#!v0!-^Gw{wG}cj!5Rr2pu#gH^K{I)J$DhBeF}*`p?=AnK0^NOZED zsXmCxH?;;)YfRlh)ECn@5EWt;1fo`$Wr8SSb1*O6JQ>70W1b75tSzEJ)C`M25cS$3 g8$?A|g0=6k3;^-CtiV)^RThYM!paXsNm!=>01$g%lK=n! delta 335 zcmexc_P2~Dz?+$ci-CcIgW-J1L>_e}AZhBYdcH(HoB;@!Km-sl194`)J~IP~@};^U z-l69NlK!K|4pz--=m6rn8`dy`WRIGdf~Y?xAkoQo zrurZ%-_#mJtub{2QD02sKvalX5Qth~mId9=3mOyH=BjZsPpx|Z>wwp{K`Y{J9$jr&F^bJ6ij6oBKT3}!bqOKb_ vfV4^)>VqgRLu-&=yP+M3cihk&L_e}AZhBYda*=4oB;@!Km-sl194`)J~IP~@};^U z-c5D`hE)sAM-|nL)2@CS#b$k|j$RG$!#P(^#jJ2$d)vx-<$y z_BP>%2^ss0C4*)xrI?f%MD{Uw&pEgM{KxzHeE8mb?zv~b=icAr=9(5a*R-(r_mgDZ zWYRQK)9@Ac%`Nb6N57_C;qJpt@W+Dxz#j?zP6}-+nciVff8XL2&c9)@C!ao5l2^Q} z4fEU@=9e`9ZJJ|ygszU=kUG~f*6e^{^^MJaJ^+oo>+_uFnlpbmkI8&$By-K}QLCGd ztWgc-$++{4dnbfW9s`iN*kg?q(WAvz4v4l+&J1zK$MuN&SWiEk*8FrWO?UbZ$En;W z*$&XQZfGD*Uku%^;54$z)8_8MY>h_g4*zrtSe^uqrX7QW`{9la!O^s1r|-wM8&m9T zQ>UPFxe-%h6mkcnBcfy*ztWk9E@X9WNny2Zeqr{&w`pXUiuy*)8HKy{ qWnuO<` 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 L=_-3;r;q;+Tx7e1 delta 7488 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 R(dcH`Y@^Xt_Qpn=_#bhDeQW># From 64b115ba8d7fd7185a6ddbb304088f83e34b96b6 Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Thu, 31 Aug 2023 17:02:09 +0530 Subject: [PATCH 11/27] fix: test (#780) * fix: test * fix: test --- src/test/java/io/supertokens/test/CronjobTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/supertokens/test/CronjobTest.java b/src/test/java/io/supertokens/test/CronjobTest.java index 44801fa09..606ea745b 100644 --- a/src/test/java/io/supertokens/test/CronjobTest.java +++ b/src/test/java/io/supertokens/test/CronjobTest.java @@ -826,7 +826,7 @@ public void testThatThereAreTasksOfAllCronTaskClassesAndHaveCorrectIntervals() t // Note that the time is in seconds Map intervals = new HashMap<>(); - intervals.put("io.supertokens.ee.cronjobs.EELicenseCheck", 10); + intervals.put("io.supertokens.ee.cronjobs.EELicenseCheck", 86400); intervals.put("io.supertokens.cronjobs.syncCoreConfigWithDb.SyncCoreConfigWithDb", 60); intervals.put("io.supertokens.cronjobs.deleteExpiredSessions.DeleteExpiredSessions", 43200); intervals.put("io.supertokens.cronjobs.deleteExpiredPasswordResetTokens.DeleteExpiredPasswordResetTokens", 3600); @@ -838,7 +838,7 @@ public void testThatThereAreTasksOfAllCronTaskClassesAndHaveCorrectIntervals() t intervals.put("io.supertokens.cronjobs.deleteExpiredAccessTokenSigningKeys.DeleteExpiredAccessTokenSigningKeys", 86400); Map delays = new HashMap<>(); - delays.put("io.supertokens.ee.cronjobs.EELicenseCheck", 10); + delays.put("io.supertokens.ee.cronjobs.EELicenseCheck", 86400); delays.put("io.supertokens.cronjobs.syncCoreConfigWithDb.SyncCoreConfigWithDb", 0); delays.put("io.supertokens.cronjobs.deleteExpiredSessions.DeleteExpiredSessions", 0); delays.put("io.supertokens.cronjobs.deleteExpiredPasswordResetTokens.DeleteExpiredPasswordResetTokens", 0); From 4b5a78e66cfab59a584c259d0b69c1d7b7e2951f Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Thu, 31 Aug 2023 17:04:54 +0530 Subject: [PATCH 12/27] adding dev-v6.0.11 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13262 -> 13262 bytes jar/core-6.0.11.jar | Bin 658527 -> 658527 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index 4fb4743bee533b37a93d671796a7aa4a8b3e8dea..af8a8d031c9a3963b034292c9bf4430d9257a3ee 100644 GIT binary patch delta 758 zcmZva-Ahwp9LLYj)E(!V2qGv)tU!V!#!#odp&*)iSSYI&zN0eVViJ^6=!F)sK{xhj zN_CM)W!s!?XD`Q>3;hFh30{>#dZl-Y2z6sU-yhu!I&hxP^Zh>0@8x-TR!+s0Q_<9* z=u?b>AW6csXTo$v@K4YGzCnv#NZS7C8n*9P`N#~qN)EM7Hb5mP#%=35@LBnOHtZIA zJ>tj|%n}P_m`cHJz#VJ{62W)Cz~TsSwD=IHT5043}IK87iw!b@CMsYJ6%&W2itbyI|bo<=BlBBH>QqbnQ7N&CY}IqW)?061`ZAe_3DW{>P$e=)LT`(T0Wcs2$(1EdRRt}BRZo-hZj8e~mC8tY`fG_Yf2(#qKQP<=Sruv2of{T41hR3C1>nBxmJ zSfOwo*rW?(wjhJ~%VR-~-JI9h!33gzH0OcojJDliTD7wU?3vY*ok7wcCcgj+-i0WLE1){#L2?0^wYtz8gCYj0S*P4Tv9P3g*RNlIH z5OsdtED)8wz6M0STpt0VoHyiwD8n^CO&hF0Ozw?fL(4a&gLn@%W`Zd1O~D{)!6vYQ z-aspqHiNB*-V7EwxY-jV&$9)rsdNk2?DJc^L4q<{V?b2ZR_e}AZhBYI-^5AoB;@!Km-sl194`)J~IP~@};^U z-l69NlK!K|4pz--=m6rn8`dy`WRIGdf~Y?xAkoQo zrurZ%-_#mJtub{2QD02sKvalX5Qth~mIVTJH?Ci|N6Ozz|50V$fpdy5N1S4i|TfoM+YY7jlS zP1YI2JuN!}ES#!v0!-^Gw{wG}cj!5Rr2pu#gH^K{I)J$DhBeF}*`p?=AnK0^NOZED zsXmCxH?;;)YfRlh)ECn@5EWt;1fo`$Wr8SSb1*O6JQ>70W1b75tSzEJ)C`M25cS$3 g8$?A|g0=6k3;^-CtiV)^RThYM!paXsNm!=>01$g%lK=n! diff --git a/ee/jar/ee.jar b/ee/jar/ee.jar index 199987d9f0d5e3392b6e1423d962b4cb747ededf..ae44ccbdf95836938074f0a962e634d450a3ab73 100644 GIT binary patch delta 195 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 qWnuO<` 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 L=_-3;r;q;+Tx7e1 From e4d427832bd112652f7c17934ab1e77dd680ee66 Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Thu, 31 Aug 2023 23:10:53 +0530 Subject: [PATCH 13/27] fix: test (#781) --- src/test/java/io/supertokens/test/FeatureFlagTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/java/io/supertokens/test/FeatureFlagTest.java b/src/test/java/io/supertokens/test/FeatureFlagTest.java index 4434d2be0..15be7c36e 100644 --- a/src/test/java/io/supertokens/test/FeatureFlagTest.java +++ b/src/test/java/io/supertokens/test/FeatureFlagTest.java @@ -720,6 +720,10 @@ public void testNetworkCallIsMadeInCoreInit() throws Exception { return; } + if (StorageLayer.isInMemDb(process.getProcess())) { + return; + } + // While adding license TestMultitenancyAPIHelper.addLicense(OPAQUE_KEY_WITH_MULTITENANCY_FEATURE, process.getProcess()); assertNotNull(process.checkOrWaitForEvent(ProcessState.PROCESS_STATE.LICENSE_KEY_CHECK_NETWORK_CALL)); From ac096479ed462b2fac9d3b86456a36112cebbdfe Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Thu, 31 Aug 2023 23:13:01 +0530 Subject: [PATCH 14/27] adding dev-v6.0.11 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13262 -> 13262 bytes jar/core-6.0.11.jar | Bin 658527 -> 658527 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index af8a8d031c9a3963b034292c9bf4430d9257a3ee..e34e8ae494be2f3da80e37a1880e7c62bb89902a 100644 GIT binary patch delta 758 zcmdn>nQ7N&CY}IqW)?061`ZB}nL8))s51dcQ*YIoJLSU}fPe`^00A=)XXfiOGoUD6 zstZzn#SlnNW@mH&Qky*)r?P^$fx#w|*%>7LVe$*G@U3Ya zT-Yq;TnGxB&58?uf?Y4O*b>AIU(5-%Gik*~Aa`=;%70*Ll_`koSp^F2$>&z-gQ)+j ztU;8`YI_h>yV?&#on4&-q72uBfvCy*3R@ZIYRMeyur($+0d4MCGlE z2T|wO%>q%`>uW&N%k>c;%6UT`h%#IQ)U?40#N^%xHneno75T%|5@y8zd;RH3mdgZ3R2;(N?fyEw+V&1Sf6- z>$|fJlt3oyZwG6ivE2*AJGfb9(hg8+oUFei8AMIl;SQqi?f{!$yb~NSB|F^!ZhAS= delta 758 zcmZva-Ahwp9LLYj)E(!V2qGv)tU!V!#!#odp&*)iSSYI&zN0eVViJ^6=!F)sK{xhj zN_CM)W!s!?XD`Q>3;hFh30{>#dZl-Y2z6sU-yhu!I&hxP^Zh>0@8x-TR!+s0Q_<9* z=u?b>AW6csXTo$v@K4YGzCnv#NZS7C8n*9P`N#~qN)EM7Hb5mP#%=35@LBnOHtZIA zJ>tj|%n}P_m`cHJz#VJ{62W)Cz~TsSwD=IHT5043}IK87iw!b@CMsYJ6%&W2itbyI|bo<=BlBBH>QqbwZ_y9M13)h15qJnK_F^{Stf`QHV5<4&67dAGv>J<%Gx3tM9r`W1W~Uo gvO!dYC0P3o%K#9M%L+`zSY?5DC#?KHl!SFE03@k=I{*Lx delta 335 zcmexc_P2~Dz?+$ci-CcIgJDL;L>_e}AZhBYI-^5AoB;@!Km-sl194`)J~IP~@};^U z-l69NlK!K|4pz--=m6rn8`dy`WRIGdf~Y?xAkoQo zrurZ%-_#mJtub{2QD02sKvalX5Qth~mI?@XaZ3S3`{}Pbpr>G uR!KvB5anfP4Wil&?LgFVLw67*U=$6aa*cvP)FGolkUmjkI}jCWTnPXjEJ2t6 delta 195 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 delta 7488 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 Date: Sat, 2 Sep 2023 12:03:56 +0530 Subject: [PATCH 15/27] Update README.md (#783) Corrected all the grammatical errors in the README file. --- README.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index da77804d8..bf258ea18 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Supertokens architecture is optimized to add secure authentication for your user **Three building blocks of SuperTokens architecture** 1. Frontend SDK: Manages session tokens and renders login UI widgets -2. Backend SDK: Provides APIs for sign-up, sign-in, signout, session refreshing etc. Your Frontend will talk to these APIs +2. Backend SDK: Provides APIs for sign-up, sign-in, signout, session refreshing, etc. Your Frontend will talk to these APIs 3. SuperTokens Core: The HTTP service for the core auth logic and database operations. This service is used by the Backend SDK ## Supports multiple auth strategies @@ -49,29 +49,29 @@ Guides to setup different recipes ### If you like our project, please :star2: this repository! For feedback, feel free to join our [Discord](https://supertokens.io/discord), or create an issue on this repo ## 🚀 What is SuperTokens? -SuperTokens is an open core alternative to proprietary login providers like Auth0 or AWS Cognito. We are +SuperTokens is an open-core alternative to proprietary login providers like Auth0 or AWS Cognito. We are different because we offer: - Open source: SuperTokens can be used for free, forever, with no limits on the number of users. - An on-premises deployment so that you control 100% of your user data, using your own database. -- An end to end solution with login, sign ups, user and session management, without all the complexities of OAuth protocols. +- An end-to-end solution with login, sign-ups, user and session management, without all the complexities of OAuth protocols. - Ease of implementation and higher security. - Extensibility: Anyone can contribute and make SuperTokens better! ### Philosophy -Authentication directly affects UX, dev experience and security of any app. We believe that - current solutions are unable to optimise for all three "pillars", leading to a large number of - applications hand rolling their own auth. This not only leads to security issues, but is also a massive +Authentication directly affects the UX, dev experience, and security of any app. We believe that + current solutions cannot optimize for all three "pillars", leading to many + applications hand-rolling their own auth. This not only leads to security issues but is also a massive time drain. We want to change that - we believe the only way is to provide a solution that has the right level of - abstraction, gives you maximum control, is secure, and is simple to use - just like if you build it yourself, - from scratch (minus the time to learn, build and maintain). + abstraction gives you maximum control, is secure, and is simple to use - just like if you build it yourself, + from scratch (minus the time to learn, build, and maintain). -We also believe in the principle of least vendor lockin. Your having full control of your user's data means that you can switch away from SuperTokens without forcing your existing users to logout, reset their passwords or in the worst case, sign up again. +We also believe in the principle of least vendor lock-in. Your having full control of your user's data means that you can switch away from SuperTokens without forcing your existing users to logout, reset their passwords, or in the worst case, sign up again. ### Features - [Click here](https://thirdpartyemailpassword.demo.supertokens.io/) to see the demo app. - Please visit [our website](https://supertokens.io/pricing) to see the list of features. -- We want to make features as decoupled as possible. This means, you can use SuperTokens for just login, or just session management, or both. In fact, we also offer session management integrations with other login providers like Auth0. +- We want to make features as decoupled as possible. This means you can use SuperTokens for just login, or just session management, or both. In fact, we also offer session management integrations with other login providers like Auth0. ### Documentation @@ -85,15 +85,15 @@ Please find an [architecture diagram here](https://supertokens.io/docs/community **For more information, please visit our [GitHub wiki section](https://github.com/supertokens/supertokens-core/wiki/SuperTokens-Architecture).** ## ☕ Why Java? -- ✅ Whilst running Java can seem difficult, we provide the JDK along with the binary / docker image when distributing it. This makes running SuperTokens just like running any other http microservice. -- ✅ Java has a very mature ecosystem. This implies that third party libraries have been battle tested. +- ✅ Whilst running Java can seem difficult, we provide the JDK along with the binary/docker image when distributing it. This makes running SuperTokens just like running any other HTTP microservice. +- ✅ Java has a very mature ecosystem. This implies that third-party libraries have been battle-tested. - ✅ Java's strong type system ensures fewer bugs and easier maintainability. This is especially important when many people are expected to work on the same project. -- ✅ Our team is most comfortable with Java and hiring for great Java developers is relatively easy as well. +- ✅ Our team is most comfortable with Java and hiring great Java developers is relatively easy as well. - ✅ One of the biggest criticisms of Java is memory usage. We have three solutions to this: - - The most frequent auth related operation is session verification - this happens within the backend SDK (node, python, Go) without contacting the Java core. Therefore, a single instance of the core can handle several 10s of thousands of users fairly easily. - - We have carefully chosen our dependencies. For eg: we use an embedded tomcat server instead of a higher level web framework. - - We also plan on using [GraalVM](https://www.graalvm.org/) in the future and this can reduce memory usage down by 95%! -- ✅ If you require any modifications to the auth APIs, those would need to be done on the backend SDK level (for example Node, Golang, Python..). So you’d rarely need to directly modify / work with the Java code in this repo. + - The most frequent auth-related operation is session verification - this happens within the backend SDK (node, python, Go) without contacting the Java core. Therefore, a single instance of the core can handle several 10s of thousands of users fairly easily. + - We have carefully chosen our dependencies. For eg: we use an embedded tomcat server instead of a higher-level web framework. + - We also plan on using [GraalVM](https://www.graalvm.org/) in the future and this can reduce memory usage by 95%! +- ✅ If you require any modifications to the auth APIs, those would need to be done on the backend SDK level (for example Node, Golang, Python..). So you’d rarely need to directly modify/work with the Java code in this repo. ## 🔥 SuperTokens vs others Please find a detailed comparison chart [on our website](https://supertokens.io/pricing#comparison-chart) @@ -218,7 +218,7 @@ Portions of this software are licensed as follows: * All content that resides under the "ee/" directory of this repository, if that directory exists, is licensed under the license defined in "ee/LICENSE.md". -* All third party components incorporated into the SuperTokens Software are licensed under the original license provided +* All third-party components incorporated into the SuperTokens Software are licensed under the original license provided by the owner of the applicable component. -* Content outside of the above mentioned directories or restrictions above is available under the "Apache 2.0" +* Content outside of the above-mentioned directories or restrictions above is available under the "Apache 2.0" license as defined in the level "LICENSE.md" file From cdd4229fa7332b499aeeddb7186ee43855115c87 Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Mon, 4 Sep 2023 18:17:53 +0530 Subject: [PATCH 16/27] fix: session concurrency issue (#785) --- CHANGELOG.md | 4 ++++ build.gradle | 2 +- src/main/java/io/supertokens/session/Session.java | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1031ff31a..ed63ccb7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [unreleased] +## [6.0.12] - 2023-09-04 + +- Fixes randomly occurring `serialization error for concurrent update` in `verifySession` API + ## [6.0.11] - 2023-08-16 - Fixed feature flag cron job diff --git a/build.gradle b/build.gradle index 83265aeea..9d329dff7 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ compileTestJava { options.encoding = "UTF-8" } // } //} -version = "6.0.11" +version = "6.0.12" repositories { diff --git a/src/main/java/io/supertokens/session/Session.java b/src/main/java/io/supertokens/session/Session.java index 0d2194570..51771bb21 100644 --- a/src/main/java/io/supertokens/session/Session.java +++ b/src/main/java/io/supertokens/session/Session.java @@ -35,6 +35,7 @@ import io.supertokens.pluginInterface.multitenancy.exceptions.TenantOrAppNotFoundException; import io.supertokens.pluginInterface.session.noSqlStorage.SessionNoSQLStorage_1; import io.supertokens.pluginInterface.session.sqlStorage.SessionSQLStorage; +import io.supertokens.pluginInterface.sqlStorage.SQLStorage; import io.supertokens.session.accessToken.AccessToken; import io.supertokens.session.accessToken.AccessToken.AccessTokenInfo; import io.supertokens.session.info.SessionInfo; @@ -388,7 +389,7 @@ public static SessionInformationHolder getSession(AppIdentifier appIdentifier, M UnsupportedJWTSigningAlgorithmException | AccessTokenPayloadError | TenantOrAppNotFoundException e) { throw new StorageTransactionLogicException(e); } - }); + }, SQLStorage.TransactionIsolationLevel.REPEATABLE_READ); } catch (StorageTransactionLogicException e) { if (e.actualException instanceof UnauthorisedException) { throw (UnauthorisedException) e.actualException; From a0d030eaa3077c2fdcf471c3a68c39b6831a2da6 Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Mon, 4 Sep 2023 18:18:24 +0530 Subject: [PATCH 17/27] adding dev-v6.0.12 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13262 -> 13262 bytes jar/{core-6.0.11.jar => core-6.0.12.jar} | Bin 658527 -> 658618 bytes 4 files changed, 0 insertions(+), 0 deletions(-) rename jar/{core-6.0.11.jar => core-6.0.12.jar} (91%) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index e34e8ae494be2f3da80e37a1880e7c62bb89902a..d4bf410be71e2753a086493c9df5bfb03b07bb24 100644 GIT binary patch delta 835 zcmdn>nQ7N&Cf)#VW)?061`ZAe_em-fdDWOfl$no;+Dw5G=S{ zdp8$YFx4yoEU?3DKO>k?W${1+EEDVN2^LuCy9{Q7@#OQt9Fu#4dB75Lf@|2o4CyFI z7BIs+ZadhJ$sglgzycNtvmtsxb_b-fPUcI4=#@uiSjbj@TZu#%6HpF?DB zPh;o8<_6A%-~imLwD1SSH?oT@z&axqb3p7*Uhx4WFga}HUkJU*1Wfm?0!PZ^^Q-hg z{7I{=z{0kx?Z9;1YF{vYZgnD>mkqgKddmig**qH|W>;)X1B*Z0m;t7JHU)v{g_|Je z`T*@x+6=KPW-~;*+*P w^xxeEPGge|wnNOBxgDIcCO_Q{kvG_p1Xe$FhZ~r_w*z91$xcYPmF{!}0Gciu;Q#;t delta 835 zcmdn>nQ7N&Cf)#VW)?061`ZB}nLFht@~Sa|C^IiLAQjF41WX_T2$+F5Ghd&X0ae2? z9k7P01|VuO2ctcR-t5IVg%vFDkj)(|pv|5p1{Rni>k1aQBiqOe7Wf!%JbALVAXsp@ z_HHh)V5(UFSYU_Qenv2(%Hn|tSSHrj6D+XOcNxqEE8PZXb zEMSIt+;*@blRw70fCVfPW<&IX><&m{oy?a8(JPx)%EpK4@yUjrl9TPXaPgygeDkFo zABgdag=-0*4Yg4>6*z-U?m?XKZnTN zp2p6F%?+Fj!2!5gY2gouZ)6u+fOSSJ=789ryy62$U~<^XzYuzr37GC(1&)--=U3^0 z_>)#!frV{X+kxr2)xKc*-0DOyZL}s7On0rx1k>Nv1cPaxwW$z#ll0{CYt6xI&UMLP zI)7apn7*)XCYa7yUk#>Ttq%v&E*o;e^p*_}vw1c`%&yp&1{Qy~F#}BdYzhL?3pYW` z^#R(Yv>9So%w~w#q0Js(HN0COdds#z?6|PS3oI_XH5yD;Z-uz`@m7fYEw_b%#V2ip w=)b!SoW>>_Y=@XLb2~U?O@6u^B5$xG39NqV4mU7;ZwJI2lbw)oE8Xb|0NYwZ!2kdN diff --git a/downloader/jar/downloader.jar b/downloader/jar/downloader.jar index 7a4eb7a87fde8d5d767d1b0cca06eea336c1d5d6..b595d1a5ac1982b1a065b44e3c34c7f7502cb210 100644 GIT binary patch delta 375 zcmexc_P2~Tz?+$ci-CcIgTZr>%0yl@W)NlOr3R$J8GwKZL;wLZ5NGD=Gc%xSSf&Hk zaMc_{ZRTfO$p&If-p%d|7GUHEW`zo9PxdwEncTajueuo>Ee1w0I^nZYWKnV5j-zb0Ub z$@ZptV19wA6_{RY>I$a6n#O|ZP_sZVz0xcLOpBO9_!;I&VE$S2958KT5e24aS_FXU iHx^l7I?@ti&Q42zFrV8BLdRNVg83({e8IG&bqWAfzJVM7 diff --git a/ee/jar/ee.jar b/ee/jar/ee.jar index 11e6be2a9df4f3b12d7cba66182919b5b4903a32..a34afe744e78576e69973d46aacf233fab908849 100644 GIT binary patch delta 216 zcmX??elDFiz?+$ci-CcIgTZ@}%0yl@W)NlOr3R$J8GwKZL;wLZ5NGD=Gc%xSSf&Hk za8(~fO=f4b0MVPB7>}@k8Jui4n81uD94zW!C9m}%N@Wci!Tf~=CSdx8fjyX(GSmap n-iB6Sy2H>GOrJ1x1Ji;=QD8dHC delta 216 zcmX??elDFiz?+$ci-CcIgJHo=`H8%0%pl6lOKt8>`EUjxU;+_9zzoEh`TEQZ2n|3b z6PM{QgQ%mNjSu(+dqu!1N6R wd$18whI(My+t3P3cNp4&=@W)-U|P^93QXr21%c_qMgd^`V#c;$I?T8N0PNaCH~;_u diff --git a/jar/core-6.0.11.jar b/jar/core-6.0.12.jar similarity index 91% rename from jar/core-6.0.11.jar rename to jar/core-6.0.12.jar index 2704fcaef5d5bad97612a72005f23d0cb32f877a..7d4b8237374eb3e94688c5984c0995c0b76785a4 100644 GIT binary patch delta 20092 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 bzz>zyF+qV#D5O?}63tC^bPNAm1w{W3WqI0K delta 19842 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 Date: Mon, 4 Sep 2023 20:55:32 +0530 Subject: [PATCH 18/27] fix: fixing ee folder issue when empty database at startup (#786) * fix: fixing ee folder issue when empty database at startup * fix: changelog --- CHANGELOG.md | 1 + .../io/supertokens/ee/test/CronjobTest.java | 1 + .../java/io/supertokens/ee/test/EETest.java | 1 + .../ee/test/api/DeleteLicenseKeyAPITest.java | 1 + .../ee/test/api/GetFeatureFlagAPITest.java | 1 + .../ee/test/api/GetLicenseKeyAPITest.java | 1 + .../ee/test/api/SetLicenseKeyAPITest.java | 1 + .../supertokens/multitenancy/Multitenancy.java | 18 +++++++++++------- .../multitenancy/MultitenancyHelper.java | 6 +++++- .../api/multitenancy/BaseCreateOrUpdate.java | 2 +- .../thirdparty/RemoveThirdPartyConfigAPI.java | 2 +- 11 files changed, 25 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed63ccb7a..a858ddb5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [6.0.12] - 2023-09-04 - Fixes randomly occurring `serialization error for concurrent update` in `verifySession` API +- Fixes `MISSING_EE_FOLDER_ERROR` error when the core starts up with an empty database ## [6.0.11] - 2023-08-16 diff --git a/ee/src/test/java/io/supertokens/ee/test/CronjobTest.java b/ee/src/test/java/io/supertokens/ee/test/CronjobTest.java index 79102b663..27b03be0e 100644 --- a/ee/src/test/java/io/supertokens/ee/test/CronjobTest.java +++ b/ee/src/test/java/io/supertokens/ee/test/CronjobTest.java @@ -29,6 +29,7 @@ public static void afterTesting() { @Before public void beforeEach() { Utils.reset(); + FeatureFlag.clearURLClassLoader(); } diff --git a/ee/src/test/java/io/supertokens/ee/test/EETest.java b/ee/src/test/java/io/supertokens/ee/test/EETest.java index 0a8c9303d..3a896b253 100644 --- a/ee/src/test/java/io/supertokens/ee/test/EETest.java +++ b/ee/src/test/java/io/supertokens/ee/test/EETest.java @@ -81,6 +81,7 @@ public static void afterTesting() { @Before public void beforeEach() { Utils.reset(); + FeatureFlag.clearURLClassLoader(); } @Rule diff --git a/ee/src/test/java/io/supertokens/ee/test/api/DeleteLicenseKeyAPITest.java b/ee/src/test/java/io/supertokens/ee/test/api/DeleteLicenseKeyAPITest.java index 3a61bde05..c45cbf70b 100644 --- a/ee/src/test/java/io/supertokens/ee/test/api/DeleteLicenseKeyAPITest.java +++ b/ee/src/test/java/io/supertokens/ee/test/api/DeleteLicenseKeyAPITest.java @@ -33,6 +33,7 @@ public static void afterTesting() { @Before public void beforeEach() { Utils.reset(); + FeatureFlag.clearURLClassLoader(); } @Test diff --git a/ee/src/test/java/io/supertokens/ee/test/api/GetFeatureFlagAPITest.java b/ee/src/test/java/io/supertokens/ee/test/api/GetFeatureFlagAPITest.java index d2855867a..d2932f619 100644 --- a/ee/src/test/java/io/supertokens/ee/test/api/GetFeatureFlagAPITest.java +++ b/ee/src/test/java/io/supertokens/ee/test/api/GetFeatureFlagAPITest.java @@ -28,6 +28,7 @@ public static void afterTesting() { @Before public void beforeEach() { Utils.reset(); + FeatureFlag.clearURLClassLoader(); } @Test diff --git a/ee/src/test/java/io/supertokens/ee/test/api/GetLicenseKeyAPITest.java b/ee/src/test/java/io/supertokens/ee/test/api/GetLicenseKeyAPITest.java index 5a1dd82a7..e963404ef 100644 --- a/ee/src/test/java/io/supertokens/ee/test/api/GetLicenseKeyAPITest.java +++ b/ee/src/test/java/io/supertokens/ee/test/api/GetLicenseKeyAPITest.java @@ -28,6 +28,7 @@ public static void afterTesting() { @Before public void beforeEach() { Utils.reset(); + FeatureFlag.clearURLClassLoader(); } @Test diff --git a/ee/src/test/java/io/supertokens/ee/test/api/SetLicenseKeyAPITest.java b/ee/src/test/java/io/supertokens/ee/test/api/SetLicenseKeyAPITest.java index 9db322c52..847d8a58a 100644 --- a/ee/src/test/java/io/supertokens/ee/test/api/SetLicenseKeyAPITest.java +++ b/ee/src/test/java/io/supertokens/ee/test/api/SetLicenseKeyAPITest.java @@ -31,6 +31,7 @@ public static void afterTesting() { @Before public void beforeEach() { Utils.reset(); + FeatureFlag.clearURLClassLoader(); } @Test diff --git a/src/main/java/io/supertokens/multitenancy/Multitenancy.java b/src/main/java/io/supertokens/multitenancy/Multitenancy.java index 21fe432cb..ef85b1d7d 100644 --- a/src/main/java/io/supertokens/multitenancy/Multitenancy.java +++ b/src/main/java/io/supertokens/multitenancy/Multitenancy.java @@ -204,20 +204,22 @@ public static boolean addNewOrUpdateAppOrTenant(Main main, TenantIdentifier sour StorageQueryException, FeatureNotEnabledException, IOException, InvalidConfigException, InvalidProviderConfigException, TenantOrAppNotFoundException { checkPermissionsForCreateOrUpdate(main, sourceTenant, newTenant.tenantIdentifier); - return addNewOrUpdateAppOrTenant(main, newTenant, false); + return addNewOrUpdateAppOrTenant(main, newTenant, false, true); } public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenant, - boolean shouldPreventDbConfigUpdate) + boolean shouldPreventDbConfigUpdate, boolean forceReloadResources) throws CannotModifyBaseConfigException, BadPermissionException, StorageQueryException, FeatureNotEnabledException, IOException, InvalidConfigException, InvalidProviderConfigException, TenantOrAppNotFoundException { - return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventDbConfigUpdate, false); + return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventDbConfigUpdate, false, forceReloadResources); } + public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenant, boolean shouldPreventProtectedConfigUpdate, - boolean skipThirdPartyConfigValidation) + boolean skipThirdPartyConfigValidation, + boolean forceReloadResources) throws CannotModifyBaseConfigException, BadPermissionException, StorageQueryException, FeatureNotEnabledException, IOException, InvalidConfigException, InvalidProviderConfigException, TenantOrAppNotFoundException { @@ -254,7 +256,7 @@ public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenan .addTenantIdInTargetStorage(newTenant.tenantIdentifier); } catch (TenantOrAppNotFoundException e) { // it should never come here, since we just added the tenant above.. but just in case. - return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventProtectedConfigUpdate); + return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventProtectedConfigUpdate, true); } return true; } catch (DuplicateTenantException e) { @@ -274,7 +276,7 @@ public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenan } catch (TenantOrAppNotFoundException ex) { // this can happen cause of a race condition if the tenant was deleted in the middle // of it being recreated. - return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventProtectedConfigUpdate); + return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventProtectedConfigUpdate, true); } catch (DuplicateTenantException ex) { // we treat this as a success return false; @@ -295,7 +297,9 @@ public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenan } catch (DuplicateClientTypeException e) { throw new InvalidProviderConfigException("Duplicate clientType was specified in the clients list."); } finally { - MultitenancyHelper.getInstance(main).forceReloadAllResources(tenantsThatChanged); + if (forceReloadResources) { + MultitenancyHelper.getInstance(main).forceReloadAllResources(tenantsThatChanged); + } } } diff --git a/src/main/java/io/supertokens/multitenancy/MultitenancyHelper.java b/src/main/java/io/supertokens/multitenancy/MultitenancyHelper.java index 855a84273..5877c71cf 100644 --- a/src/main/java/io/supertokens/multitenancy/MultitenancyHelper.java +++ b/src/main/java/io/supertokens/multitenancy/MultitenancyHelper.java @@ -76,7 +76,11 @@ public static void init(Main main) throws StorageQueryException, IOException { new TenantConfig( new TenantIdentifier(null, null, null), new EmailPasswordConfig(true), new ThirdPartyConfig(true, null), - new PasswordlessConfig(true), new JsonObject()), false); + new PasswordlessConfig(true), new JsonObject()), false, false); + // Not force reloading all resources here (the last boolean in the function above) + // because the ucl for the FeatureFlag is not yet loaded and results in an empty + // instance of eeFeatureFlag. This is applicable only when the core is starting on + // an empty database as no tenants are loaded from the db yet. } catch (CannotModifyBaseConfigException | BadPermissionException | FeatureNotEnabledException | InvalidConfigException | InvalidProviderConfigException | TenantOrAppNotFoundException e) { throw new IllegalStateException(e); } diff --git a/src/main/java/io/supertokens/webserver/api/multitenancy/BaseCreateOrUpdate.java b/src/main/java/io/supertokens/webserver/api/multitenancy/BaseCreateOrUpdate.java index 16865819f..e1fbab926 100644 --- a/src/main/java/io/supertokens/webserver/api/multitenancy/BaseCreateOrUpdate.java +++ b/src/main/java/io/supertokens/webserver/api/multitenancy/BaseCreateOrUpdate.java @@ -119,7 +119,7 @@ protected void handle(HttpServletRequest req, TenantIdentifier sourceTenantIdent Multitenancy.checkPermissionsForCreateOrUpdate( main, sourceTenantIdentifier, tenantConfig.tenantIdentifier); - Multitenancy.addNewOrUpdateAppOrTenant(main, tenantConfig, shouldProtectProtectedConfig(req)); + Multitenancy.addNewOrUpdateAppOrTenant(main, tenantConfig, shouldProtectProtectedConfig(req), true); JsonObject result = new JsonObject(); result.addProperty("status", "OK"); result.addProperty("createdNew", createdNew); diff --git a/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/RemoveThirdPartyConfigAPI.java b/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/RemoveThirdPartyConfigAPI.java index 9b39d1e73..312c619ee 100644 --- a/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/RemoveThirdPartyConfigAPI.java +++ b/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/RemoveThirdPartyConfigAPI.java @@ -84,7 +84,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws I config.passwordlessConfig, config.coreConfig); - Multitenancy.addNewOrUpdateAppOrTenant(main, updatedConfig, shouldProtectProtectedConfig(req)); + Multitenancy.addNewOrUpdateAppOrTenant(main, updatedConfig, shouldProtectProtectedConfig(req), true); JsonObject result = new JsonObject(); result.addProperty("status", "OK"); From e9eb5e06ae93a001daecf8a6a95a02472a671818 Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Mon, 4 Sep 2023 20:56:00 +0530 Subject: [PATCH 19/27] adding dev-v6.0.12 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13262 -> 13262 bytes jar/core-6.0.12.jar | Bin 658618 -> 658699 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index d4bf410be71e2753a086493c9df5bfb03b07bb24..bb238d5ecbf0dd6513ae10c53fb88bf38b7933c0 100644 GIT binary patch delta 758 zcmdn>nQ7N&CY}IqW)?061`ZB}pUWols51dcQ*YIu%T&S{fPe`^00A=)XXfiOGoUD6 zstZzn#SlnNW@mH&Qky*)r?P^$fx#w|*%>7LVe$*G@U3Ya zT-Yq;TnGxB&58?uf?Y4O*b>AIU(5-%Gik*~Aa`=;%70*Ll_`koSp^F2$>&z-gQ)+j ztU;8`YI_h>yV?&#on4&-q72uBfvCy*3R@ZIYRMeyur($+0d4MCGlE z2T|wO%>q%`>uW&N%k>c;%6UT`h%#IQ)U?40#N^%xHneno75T%|5@y8zd;RH3mdgZ3R2;(N?fyEw+V&1Sf6- z>$|fJlt3oyZwG6ivE2*AJGfb9(hg8+oUFei8AMIl;SQqi?f{!$yb~NSB|F^!pL|qV delta 758 zcmZva-Aj{E9LJwMQ};O6L zM@6cOL@e9pbbI#lXkFwVkSp-Y6tb(lQ$(nn^n8DGGw6Zme9rfK&hOUum)^xkO|vo9XL^Sa1nNw zqXlxs@%~@>Cdk*$$qX>RBR>tab!&*?c^e=rd*9G*lxcORGqanTk=ErP$NJj8o1J`#()&*?A$R*&T)_KWP@ zdCB;{!kLS>9JO%q4|OjuRYSU#GO1?Y$}yMh_J_X&e+BT;kLzaJehYBszYf#{>VV0> zP2fwQ53mOB0N&s*a2mV?D64KlL}tm=N=&8D0N@Gr0LjoRU}WtHaJbeE)USI0Ymf)6 zU&AyjOi9PXgHS)hLx2)-0&gRfP~jztR4UP_lCz~YW8D;`phr>4os23lnGi9G5|K+@D(_4hKBa0Vb?0ueyK48)oF`pgU{%9rYb zlwYv`lAHM$SFr)<$-CHHfYc_A5LO6JXR@z3&*VN{9+09rytlYObcIAe6Nu)Nt_IPQ z+hmwZ_y9M13)h15qJnK_F^{Stf`QHV5<4&67dAGv>J<%Gx3tM9r`W1W~Uo gvO!dYC0P3o%K#9M%L+`zSY?5DC#?KHl!SFE02wTZAOHXW delta 335 zcmexc_P2~Dz?+$ci-CcIgTZssL>_e}AZhBY>N!azoB;@!Km-sl194`)J~IP~@};^U z-l69NlK!K|4pz--=m6rn8`dy`WRIGdf~Y?xAkoQo zrurZ%-_#mJtub{2QD02sKvalX5Qth~mIP8i9G5|K+@D(_3tv3a0Vb?0ueyK48)oF`pgU{%9rYb zlwUCbl9SmOErHZ#N5-QpAew{iCKHH$%)tsWbMh;FuqqjYCJ=9dfhmZ(Zr}i-Bn|aJ ol$W73h-x>q15w8f-9eOqQ8b9kH3|k%hl~P2l&CRSNvLrp07U{wBLDyZ delta 195 zcmX??elDFSz?+$ci-CcIgTZ^!L>_e}AZhBY>ODy%oB;@!Km-sl194`)J~IP~@};^U zOV diff --git a/jar/core-6.0.12.jar b/jar/core-6.0.12.jar index 7d4b8237374eb3e94688c5984c0995c0b76785a4..5c6155f09e9c42c1c31ea38c827bde33a7b396bd 100644 GIT binary patch delta 27960 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 (9hm-M1PZ z?Qidg*RA8w|6He}M>=OR_Sw8|vU?8BO80sAm=AF*H~wg5OP08!T|??8@Kg5Ok=DjX zNAl->T38vMJRW>;xNUYU2<6I}%Pg7n$33q<38#mti5cX2B%|i1;o#eoz?%Ixs~2@$ zW}gFm`acJ3OQqKZ`Shk=*IX$1zcVu%11)FrDc!dz8s7I{nuFf)OMt>H*x*L@2#&{h ztY|FkdH%+FopJHra@u}hHL&lAeCMC1Nj7Bov%qXCL-v*Vz$@z2Jdiby`1tL8nvyun z4bJw?=xqTY_R^9|>F6L{^X)0i@DLAzSvrjvGwp;EuyAkVMEHHI`XjG!X0YCFa(+PVcDXAUB1dXi#1x&m)#D<*;JAonad2t@C*g? zqJ}-*e(iJfuJ{EcE|4r1sutDz(Rn@LyIstL{ZsD2Id%L=9O21%{WpR6YLEl3-~(<1 zbIcR0+Zt-jz#kp8tmU-uzT~&Nho??hYd&k{RdOuKUxmOu?@c5bY}3BGjSHfxVd0DL zstKt-p~)r+CgBt%3T?y^dA@n#zI91BuKJDK2;nkL@@SfVM*wm=pm~2@RrskYU!`K< z1VNMO96Y!rE6u_8%T`k2q@OWa<1z9qS@NB@!pM(UqdWG1jnJvy^W>#~24*GQ{mAHw zsBFGGCYvFtb;(ZolB6IH;oEROFO%#Mi`YE47SAmT7JvNN;q`Kt)kQQ?>XV@i^izb_ z`+PaEyg6oPirFBhR&E^*smy7G&_5*ia#|#@PM_8z`Ta|Rjfjo%ro;0!RJ3c@39hTZ zk|<_!?xbFew1~+m#;r`Ygz!i(Pa#Y$6kDgpCwKH08|I22OyTNadRS-~%VGt^ucuMl zGTU0HN=-A9+?{Am1Myqo4~{G|c$&?ql(?00J6llOhND2T2B8EpvE?1CM?rT9gnkvY zu2#7n&+f@2%eg6#54$|6c}otl{hSi+asPU!9Vo;lv>)j9Gz8xo9x5^2IkMm7jzrtA zUk59(XfwJGGe5_9`R#j~-0BdgD`A-2v5PWY80*)t_L`}z__%ADWNCs~+^4)l>oP_` zD;$T%-xNSal^p4KNwQvbTSAQk6mhBbk0&>)%Ytd%hG=8hJm;qqhRzcr3wLrPDaI zjhS#;(@mUn9;ut>Um}oga`H|nSo!4D_fTenh5CJnhpDj#S_HHap;q^ z6-nQM$j%>EjY7><`0?!a-({Qc~1QwpOC|{j)^UlhNblAZ0Y)j%O{X$8L zcIcRnoO#))3GaQAEfTL#J&kZ{(X|ufy*jrQVxzsz-hi zfBw85N1vXotmk6H&EJA|!1($^RjW7qe8W3(;&!{CGhxRJk7S{D&-8fPM5g*HQ#z+5 z4`}RUA|zJRzX$J?BJFEBKF?4j8|q=@c0{QuF+$-nE`$J)Gos0P7f#A4)3CyMrg)dX z6^Ri9A}&h9L7lWQT0d+pH9Nx%68uqo=HJES;7(2$A+3rR!V&yB5&5auDmTs#Qe$g+y^Cy;tMPj}+k zR6XzT*U>n?*00HkgkJ}YaY=@byCchJzbjt;MW||*WcTYn%5f}e?J^sz`I2rBMgt{_ zp!IitV?HEkFz{XobYow%v$<~EwrkZ44KDE8p(+*|SU6S~{ic<$US&`eLW+JQ3V68Y zRxKKJtQ1lze5d_>9PP%fae^&*aUa4FM9sxHlM>3?1sxHV)i)WX}ExpJsr6*%@ zyU9+K22BeW|1id4q)N)ex4wkeTi-7aoV|2Vw;@v+z}(D1k^k9{Au4u zdJ6YRE=j`E{sI5@Dm9&+u`=x&BwRQ+b+AM=vN*_}Y$Wq($J@}zc^h<6 zE~@p>7Pj?4kpw!UETL)n#k5fhmH3?0#1HNw9}xFY^xUyfP(3(sy(aYB^D(>0P`jze z7}nW@Cq{#8-CD>j{+(atoC&khO?B@u*3{M2nfCtN3Hleb+_3uB`;h2^VZcH-hPC7P zLTVz2YykMaRYZ)(IfCX`m6oW{RdDcFzWR&)HMX48-|f^GVwTGrWMl-{VGLPHG*8{< z@W10ElC}oVD`JN-l`m zkzd;=&?KbgsN(>O$O-Z$RC6_za)XJ~UiKlNCUYNyXMzc>Xhd4Xzvfz8mJvUDLu5;_ z9)1V%u3b}B>rB4B$W9^-3yZl>&{r1)c2Z0aI%9fyXY4B17TUUn8EmPO3OR2|^DRjJw>0_>_{0!WID z=eUVY5-xrw?8WRH3K=!DtAD+5uOoKglMCyMI@Q9=3d}?u`)%{NgiqPxpns<#ZfhS$ zI-UZJYEOz}mPDG|T5(A3qKA6C6i#vKRnq3%{Ap>a%OrNm-R+WOyYmdnsH^R_3j`aL zGt&~{lr**6!GgPw72l4}wOwPGz7Xja;uH{IHkGea7$Y`CnUaUxRCu~(gI@k$k1Myg zOg2WC`aP{scz)eypTG%qMg@IJTR*wCF5*8W8%dY;#;~$<@bVbu@Sl^hT6GExV=Jc5 zot>IC=RWqf26-V~Ou$9)0erHF2(?u$IqJ@mrW81o7&~{3BfKL9m?q5hRtK)4R=RXY z7jtWFlXwm|$h$oXOscyUtw0#nE>-r$=?vQ)M~!2cB(6)hI66PoSad3uKT+-7s827> z&4{=TG{_`c{+gLnuM+Iha<`dG5AS;j; zBD!2-J18|}!k;BwPjY3=XYiF42UOgZIj$$h$e(JHnrbF;*a$LungVYy$>wenlI(7cSq8elSEcijt}_TtYA4z<&7vs# zGuCjYITy|%o2n}&R7B~mNxVADv997KX>7c>u+mwoq3~Y&ng_xtjKr>~i3Xl9s`1zV zEY97CPPi%NPu|1rZ?>h>Y3ewcXt+jAa)BhsP%|X4ei$iJcWdEJ0Rq9 z?fDo?e83|4ls1g*{ql1q+bclHbck7;!~a8Y&Zl-ipzeH z*wIs4CCNm|(Jap#!@<*xSd*5d1p4?a{u_x8*S-wQU38w~8SH)HB>$HP2^jP|ciP1A z*?ZDR`0WL1Ng+A;U1|L^zWoG9|i_#JE#1g$y%l|0rNWh`&x|W#t4t=3j5sDCz z_7F)M;*%&sMU<$dMSRf^QI@Q^l0;F;7L{EoEu@r^WQ)*3M4N2&-$iQr=XrY0+_Rr^ z*Y|Diu{iXyZ(;S6QVYO;I`&7cN2TnB2u*9va8(5($=lEF#4oIOw3?W?3HBz73*^Vj z96gfCiGP0P-R?@`$Q?j2E(R`8DEgeV`a;JXT~I35Zdv3ls(YZ~seN|)LmT<6N2FID zSK0o+N<}k%L4mBbtzqY&R)FPSgWGu>7&kFUq?$y)@i7BsJq{`w3Vt*&wk;Y z>eTS$%He_jS)GPyQ?hdw&dXl7e`kGTO=ESI=a9PXk~qQRCQi>!s8-o0SuOY9V&D29 zP0QZ7rF4-Z=TPedx%?`H2WKAXnw+iNy~u2LRezAvnf#nxJ2ISWZd^(@trPmdC`iXI zQ~y7ee6eZJZ|#lH%?2mz`-h^NZQ_&7I$}Nakk#LG`QCd=9JZZ?yZY>b@jf zQr)G*|E#RF>Z;hn{e8zoCkN~4L8oT}5B)o4)W3|<6Sy@>noemktQ0%aVkXz6t~IE8o3!U`{K6a8&sBLo z(%;`)*_=GZS!+oBfGp=l>bfY48z8Pu%zT#;02ZS=VqeJ&vQP{iqj%m!im%o)>06)8^9 zdK9%z;UU}2|3A;hr@k+&law4xv^l5UYW51o`aUv%Li+0->s&J9<2@+LIV0$&up}g= zK>KD&#=xw5q2iOrKb(^BC2)nkM_hk~*UpqXfj!o?0%lVNs-*^0kG#|=a4l-=mK);e z*qH1p3!m0mlbrpmq)|rx{PnN*^2n`3cMthn29?IY=Lk)FQ#yKT-de45Wrq3n$~jEMiGpzL+`xRZg_ei! zh;Pbwzq3q@Q|j5fLka8l2G1(fqoj zXrahEX@~18Ow6Na<)l1y3{lZYOk3R*KM^L$u0D}(5L}y59{=6_U`~F)s)_t7R&d(W zavR49PnIe7nhA^y`hKL9@n2GQb$n%Pv2o?;7){wl2ajAj{bBoNwwPGnjI-mE&wkMm zx+PvF`Es;t;@g#;rwrt(veCw}r^0t|RfPPg&-bMs%ne&IDKIopnCFy2*hY)H=ifLs z+HaBJd`__JMAzG$WGr8rpAfbvDR6DPr0UX?grdI%#Y~5nx0k+t z75Kf^wzXMojc#zN{bS`r7pltCizi=PFLr6WM&OID5<>y=vXa(MUU6dnVbQk7ngMwY znxm!eSlku5zvr7v>r@A=fPk(CKFR$P?ucnku`j(gE_%gL@A(S1lXhk_M_iBg$&VJ> z7b-u6V|RYOb6An}4qFY@)1dhCgiDcg`?zY^rGpm>> zC~nGrbuZp;tb3HVgRq6_qgdnBR=c+6!jk9L%9Y~$U75NuKBESdUA2x1UEL(hbBcX* zyG!S&>{l+uQEGc91^M$on45McR%eVruSJkj=G396>inYQ&Q($AFGCMzHny#vmiF|G z!(x3={ZhW`9KK+4wO(d7-@QF`F7+<)D{fhj-*;X-`gnm@bz@oF{bN;HPMt?ToVJ(A zez`YLK+SoRG&Ind=qj-z(61n|B;dHww@>5RlRsZMUvWEG{p6}{H3Lcep-0xYc=&R9tv9hvE}Qt zH2uSd>-DP9&#g`=?c2tA^YGzeu@3#LZEsSOE2E+u9=FWh>h^l}jZmG1r7uHPnDyMq zu!}FB-@2o*t1N6tsxbLW`m~LkH*Bn{PKj?U7H!`X$@|67w0TA9JvEbOF4vmta$`KT zJXpGJWwp-*uDOn1-@V^WAZ>Zk)?C3|R*IK4r`sv{d`gc>X?3hkD(?~C9IDE$N$$*C z`(jUI)}WZ3r&r&Td99AQCH?ODB_T)6Z}_j6yuQfi>W^bPp=V=&x}R0smb~7dW6R&3 z5B90N7v|7%chN(owZ%78*A;EZZQcNyoqYQWeESaE9)!MqX151DZx0H(HnVcYwe7ry z6lS#^+8X*XSm&^l@TbagrM>q!(l_S|_PtYFI<-yBS$I(R>w#jupdur7oXy-fJ=+HQ zP1+`H3S?b0+@zhLqHRCz=P9M7+ZPo)urK{0H!8WIWvfBeO_fC*0+JJ=rQ}kl`-V05 z-g6mTv{)!5TqaEGmEGfydK=_zCqLZppdWnp<20A9j0jWH$OOmb{!EumMz~25N1|iW zKK*@f+TGU==tY`Vtm|9R@W|3dgwv2I@6+{Zy}hP;jc=dQg{)V`fv?U*zF-fktc>oH z?K~`g#dSkle7OJJYL%V;RfY9veL5N3n2>(LT3OQKxw^X6EwjiI21*XzXEWD)w|xFR zssHno#-ZKX+pa0Ri)K>pb&ok^=HIQlms4E(V`uE~u_v+&a_4o+9`%e%Qx&;!F}ZZ& z;y2|I*QNIL$eF%YQfqsg6|mmjQt{@zH^~N)6$f&Q{QC+NbUsQ}7DkIUnFNG4t{1Q} zIN7=4r#r*Bc5cyO%ZRq+?uM><)i#CliF&V>l|mPH<5N4V?xT0s9D&JE&eekE?s@w%UI<`V$%NMNSo400}nnel6&-iw~!_)q@#nXGdAi=!s_@v6TOv2?fEdVSR0#93Fx@09F+DBS)j-%3fQzj#`qf=zZ-^5f4@ zZCCU9lf-P~IN`c|`)sFva($@V=-M8sq9kv>SSe_afMr*DbiK7&UfpW_2j^9E8d=Ki z%Aj?9$9amMQt-Rm4K| zqEpP;iod}6x2Q(Zk6SDTKE6eNpx$tc^_E--xObnWimPmqYI9J(>;G$e zsg<*iGx)dch0j>>xDH=VTO;cl`BnPqX4ZB|j2ZQlB~I?}N(nG?u(ovq%o6gm_mG&^ zRV}C<-zHvqv7#Hygbe~rCwBCqAfrVJMF|6@cQV4D;(Mt0kv;Rz$Zd*cvP>nZh&6s5 z^NIZY9xP_0$d{Q*m=B~P*CaD$Hn|<3zlEWN<8UE5tVbNCCeqSaUbajg$%%#?bA)`k zY0uCSTZY@2y##a1f$1W3!7?40Z6t5F0w0X`WrY6kI*FlKR4Ie%VP)~cN>5Z+3p3?# zb}|cyrkq_&1Njo=%)BKv=s3R2TcVOw?V26S{JyV|=*PtJl3cZBR<5o?O0D?e6+cEL z$Kx2&OVk_)VDw0$ih~$o`~??PT7gqIK7{cnEODXCYpTUaK>UdtE!8Cx!pzDk2xpQA zi)|$Oc*yft1y{(!z+5t0P!bz$0coxtQ|0j!7g&jx{hd zur$6#qlZ}rnwfAy329*hNMB58V{Vd&(HNeOS;=J!F9EhNT>1_r0|^l0SiT#Q^_(G&ED1jv6sG&OO zCL>FGB~Zeoi#zoIhH&>9po48^t^sX?HQEx0lAca+2Cs;^puND5cuu-J^gnb%1{|O! zCmsMxh^6&zU?O35{tv`p*P)OHAYm@^087!#g1#O=72~ga09=<68s-8C_>U)0#Er$C zz!bv}Pk>88!Y7_UA47@5;2?%44+C=yKOP3w7#eZFattFmzzV}p9N>=OE-#b<1aA#P zwA`&HcyC~VVW~IRhvAi@$hgH3pobfYM?fHkYCgaL!_z(>3`4I##H8;F=HSL*UuwC* z7vOTAaPd)a07In79>a-#R7s*A*oxc0ANXS!?hkfgIOGo^aQNZJz#80cI!28v9jBi8 z9jB4B9;fnp0VwH+FFF7$!>~SpMm9ST;F_h_IRc*qg6+7yI0)>-@L~|K#ZV}i;`aw5 zzmZ*$%P5$S!C)qCOgRBIVYKzt+vOeo3#YG{U1&GDhAPf%Mt zjHb&c40z+VU^qC6l?I1{|1bm*l)f(la4`K#1ntXRkw_0}S4N^fM^OGGH5POdWfZmf zqrf%{ouZH&((@q-^(|^|hu|27J&@WHeuW|mjYb0oAuFT7Wehz}0apyao&rG_`ow@E z7_v?S4-Ai<260%aTr5f#YDdHZHw;Ig0d^SfJ43s(_6!{;|He^z8HPws_bl+ie5Ge; zde!2A7sg+W2ca0hB7t__s57-*a@h44k8KcIPR4be`Iqmx%mBda@E}aPyOB z@YzYg7~`1>G?{xZP`%GC&|#>05!hgQ_(kA?p+GWNi~TT9rtzWSgMK=d3}#>?`x5vU zL(5BaOypmpJ%Gl>N+NU_%@#zzavAK!P&S43$mtYh6txFaXiwRsg4MX4l1iOmrBS*= z8d*zVN*dM6n~ugT;xkJ}!wkX1bgF+a9nAsMCS!721|5^(87LzNIgkNxc~5A4h4x6v z6>3x=lSUetNr%tJOt1>`Ey_Ym1A^gMl&?378a22|gSa^i=U$`ji`OVW?{&(L^hm%X z*8y2nGpiK7)~jsc%NdhAM^DU z(~hvcMdi^VApv`C0X0mNy-j2Fx=nk@kPpT9<2G8-5mBRrPL}H>U>9M&L)|3H$n`sP z8F_z)N*dgyZf4#^{fdOg-J|f}J!-z`9$F9)Uh6)^Ck(?;rL?`hl+y2(Quk+-QG93_ z9o!$wXs%X0pkd@cpkbplNkH9lun;TvD5suwl+%7)|B%944=JfqxmTG%_R3MBX%(qYdtpbX8P zf>~0S&-lGTJP#_2*^92Wn&L9h!=FTNcbM=LY?a1LnSLv&HJ_8%S|&0ib{CVF?= zp!$rT0a8bG&ogAC{w_u?R5CW;pF%w`|4VVSH z9hgzjss@ZF{njXx-7Af5=h~nPvg%xZjD?{!Xv;_9byz%5nTpSN2~?X^F3H?^l=a6v!RfHJ8VD0hIhQ}AuS5L7h@ab%5bSj4B#16-kA|a*hi!i7x_FKk-Gnw7hceCOV-xhMqnk@5 z7T2~TnxS|-ki;RQ$tc06=!_kag7}K|Up8TAJ!07R2Lr6F2jV0#_U@Z(BhXZ^LQ_GD z%V@XfZ-r310Z3z0HVsJAD<5tO8>;vU0(hf=M*k4=ygfF;gGw6@Qx-KM%6}(ED5D{| zOD+mO6j8whOg1|=LjDJSXrwa?pGNqU(lAAq-XgbrMP+ti%71@S(Eajh*wuPWDa-mp z23;s8K^Qh6ibUZEWhrK_#K;RJBgoNEx|wcUhRulbPZ_32;S1pm)EmVX#xn7kvhGhx zTQfBdUL(qa>OW+RFb2u&#BfdX2xSb+eGSHA%41Bi>G^{)rDeF6L>x@!R-k&baZ~?Z zi);o*_!)Sp1&|pP--0w9XJBY6kca4UyBL{(q`!Y(aOdIC=IZa5F_>Qku5ATUWDX2z zcbpKSvY z{6|$;P;~F8$uLh9-F4T@pdH(TNlgoeNi*LdJ4gVZC-}p)STNxzOXBZg9)_6s9}N@X z!#6-)2LHK&93#tTQRwG1$L66c@LY~qm=i^caLHRBhSjfqi!^9BQT6!RJ(*uA7+dN6 z8!H5R-h#>aL^%2#BKaRBBwgtI4*8C-o(Rj^2xHy>Tw5PLMoqp|fiSEKjb73B=vfY# z!iOB*Xc+b$4XPa#!%G0yZGA3Rt1#yh8N4x#{5)t54-X1yZfUqc`XIs!t7$wca zqwvcC1QWe^Q4e(i{D&`K8J3^<3Z8z4HbK@$G`kUU>POVyO;F<_iUn(0C=}mOffimJ zG_AR(hu%+C#DfS482=GSlbM9={0bZG4Z|NCwjGq|1{449%z-(62}u3o=fMKeSU`mg z^={(nk9q z_p-Ec-iQ%4H2VZ*5q`mj7fFv%aq{_SkLI2OMvE!G@e))$qv8{oK=@rGQZ~e+A){o7 zN|KEDh5OBU$q2s${Qh%zw#@IZ^k_i+JcLdf3%U5Mq0MLdKzHdg%0b8$D!yk6qY8z; z(7{Lce^1*H#QP42U26h@}uJIoWlo${bgBRwGwwZBof48I|=;Eq33pwpKmw17aEjM$jH z4mu*pr3dIA_nGLMBLi&$S+cO{BHe(M#-*YLW_ zpXSHF${=RyXs*LL)agU2-}^!1pFjz|@?%8dP$kXHB~0-@28(}!Ik2yfP6E+>gv<}X z?8?xxpN8&*ko*F{M85{C?Wgkixrl#k2m=!!>JZfdid`~*up572jY62|zt_c~BIULJ zp;$JcSk`b2f|k%>HG>26u~Bspskt9Mj72YU|4@_KU);G4shNP(Eay^lF>+X-Ymh!K ziw_|+R#C&)EkkroIEJy$A;B6F_eiP}MyvV6Af3i&3F96NwovK^Js>;&K>0C^rRmg< zMSs-*ucKro_bm{vxsMJr6^?)J$;xpgb&7E6PasC7L%*f5-7yqG0W!CYD+KK#tlOAy z{eJDt!?S>kOa3PAw&ld`L=Sblpl`B@g8Ob~qCg6DV;GJSzu&FRF`Ji1byS$Z7s9 zmw<^KN`$Bedsu98&}SHg4Obt=hNuHUxQU@p6gx4=cO@asff;(}7Z@B zk0BD7n^S!Qa^IrR_My9jkipY#zjcYg5I2-d13+zA2qXHn|9&|n N%$5~2@<7v!=YNA!CHnvX delta 28007 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 From a1c6eff4951e3ae302d56d307d7e5fa5fd5af8ed Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Mon, 4 Sep 2023 21:03:31 +0530 Subject: [PATCH 20/27] fix: test (#787) * fix: fixing ee folder issue when empty database at startup * fix: changelog * fix: test --- .../java/io/supertokens/multitenancy/Multitenancy.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/io/supertokens/multitenancy/Multitenancy.java b/src/main/java/io/supertokens/multitenancy/Multitenancy.java index ef85b1d7d..3a113c536 100644 --- a/src/main/java/io/supertokens/multitenancy/Multitenancy.java +++ b/src/main/java/io/supertokens/multitenancy/Multitenancy.java @@ -207,6 +207,15 @@ public static boolean addNewOrUpdateAppOrTenant(Main main, TenantIdentifier sour return addNewOrUpdateAppOrTenant(main, newTenant, false, true); } + @TestOnly + public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenant, + boolean shouldPreventDbConfigUpdate) + throws InvalidProviderConfigException, StorageQueryException, FeatureNotEnabledException, + TenantOrAppNotFoundException, IOException, InvalidConfigException, CannotModifyBaseConfigException, + BadPermissionException { + return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventDbConfigUpdate, true); + } + public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenant, boolean shouldPreventDbConfigUpdate, boolean forceReloadResources) throws CannotModifyBaseConfigException, BadPermissionException, From a42456e7a63733e2a7329948d3d1c00fd1df7648 Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Mon, 4 Sep 2023 21:03:56 +0530 Subject: [PATCH 21/27] adding dev-v6.0.12 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13262 -> 13262 bytes jar/core-6.0.12.jar | Bin 658699 -> 658740 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index bb238d5ecbf0dd6513ae10c53fb88bf38b7933c0..86ae720e8c30d692fb6bd8a1a10d234056e248e6 100644 GIT binary patch delta 758 zcmdn>nQ7N&CY}IqW)?061`ZB}iWL)i)R};!skdsy3YBmMAYcL!K)?*dnfdz63@FN% z>VlMCF$9v6*%=*x)Mih{sjMJwV6e&LIChT7GVDAcVJ-G_F_7?NSvL^(wrmqGi2EVl zWb$NfL6Fcg?LAx|p%k+~5O=%T0Y(sAY4K15Bpl=G1>&yoT@E$g1H_#jT+0TcrJ|%* zK(txh4v;ROxvn6tdBPm9YLGPnX{?j^(!h?9Nh@RHL-pZg!%oS`_FK64P<^=hVvaA^ zV1>eUV3RJC*@6t_FOLN|c5_~12NQ_?(VPdSGun28Y1PgauxD0Jb_Pj*nEV1Pd}|s9 z7dDGI7lHz3v*N;^VAsnmwghp*7juH`Oj_{~$ekRz@*kL5WeTEtR)K!q72snHEpm0F}XK_4K3f84&pu7m22oRXxPz#>JHRFw?*s=-$xb%_EF~zh delta 758 zcmdn>nQ7N&CY}IqW)?061`ZB}pUWols51dcQ*YIu%T&S{fPe`^00A=)XXfiOGoUD6 zstZzn#SlnNW@mH&Qky*)r?P^$fx#w|*%>7LVe$*G@U3Ya zT-Yq;TnGxB&58?uf?Y4O*b>AIU(5-%Gik*~Aa`=;%70*Ll_`koSp^F2$>&z-gQ)+j ztU;8`YI_h>yV?&#on4&-q72uBfvCy*3R@ZIYRMeyur($+0d4MCGlE z2T|wO%>q%`>uW&N%k>c;%6UT`h%#IQ)U?40#N^%xHneno75T%|5@y8zd;RH3mdgZ3R2;(N?fyEw+V&1Sf6- z>$|fJlt3oyZwG6ivE2*AJGfb9(hg8+oUFei8AMIl;SQqi?f{!$yb~NSB|F^!pL|qV diff --git a/downloader/jar/downloader.jar b/downloader/jar/downloader.jar index fee1a2162e7856d1fca3713c9a46b85a72eea300..a0d1c702835fc42a12a6b091c07ad7f978f6c0cd 100644 GIT binary patch delta 335 zcmexc_P2~Dz?+$ci-CcIgQ050L>_e}AZhBYTD3wYoB;@!Km-sl194`)J~IP~@};^U z-l69NlK!K|4pz--=m6rn8`dy`WRIGdf~Y?xAkoQo zrurZ%-_#mJtub{2QD02sKvalX5Qth~mInGi9G5|K+@D(_4hKBa0Vb?0ueyK48)oF`pgU{%9rYb zlwYv`lAHM$SFr)<$-CHHfYc_A5LO6JXR@z3&*VN{9+09rytlYObcIAe6Nu)Nt_IPQ z+hmwZ_y9M13)h15qJnK_F^{Stf`QHV5<4&67dAGv>J<%Gx3tM9r`W1W~Uo gvO!dYC0P3o%K#9M%L+`zSY?5DC#?KHl!SFE02wTZAOHXW diff --git a/ee/jar/ee.jar b/ee/jar/ee.jar index f17d5131b8e3cd48ab4795d9e8355c3fc1a293db..1b9ec9e900550cd1f2ab8a0936ec062ed3ecf85e 100644 GIT binary patch delta 195 zcmX??elDFSz?+$ci-CcIgQ0rGL>_e}AZhBYTD?LgoB;@!Km-sl194`)J~IP~@};^U zP8i9G5|K+@D(_3tv3a0Vb?0ueyK48)oF`pgU{%9rYb zlwUCbl9SmOErHZ#N5-QpAew{iCKHH$%)tsWbMh;FuqqjYCJ=9dfhmZ(Zr}i-Bn|aJ ol$W73h-x>q15w8f-9eOqQ8b9kH3|k%hl~P2l&CRSNvLrp07U{wBLDyZ diff --git a/jar/core-6.0.12.jar b/jar/core-6.0.12.jar index 5c6155f09e9c42c1c31ea38c827bde33a7b396bd..adff19464985484a22c562784dbd8ac194cd8dca 100644 GIT binary patch delta 16623 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 Hu5kYc-*5!N delta 16388 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 XCFJw>@_Yz?XQiuBjsze-yTbh+$+#iN From 77d3869ece247290ea3ad3ebbcd14683c4ca641b Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Mon, 4 Sep 2023 22:53:44 +0530 Subject: [PATCH 22/27] bug fixes --- .../multitenancy/Multitenancy.java | 18 +++++--------- .../multitenancy/MultitenancyHelper.java | 24 ++++++++++++------- .../api/multitenancy/BaseCreateOrUpdate.java | 10 +++++--- .../CreateOrUpdateThirdPartyConfigAPI.java | 14 +++++++---- .../thirdparty/RemoveThirdPartyConfigAPI.java | 4 ++-- 5 files changed, 39 insertions(+), 31 deletions(-) diff --git a/src/main/java/io/supertokens/multitenancy/Multitenancy.java b/src/main/java/io/supertokens/multitenancy/Multitenancy.java index 3a113c536..2140f984b 100644 --- a/src/main/java/io/supertokens/multitenancy/Multitenancy.java +++ b/src/main/java/io/supertokens/multitenancy/Multitenancy.java @@ -204,7 +204,7 @@ public static boolean addNewOrUpdateAppOrTenant(Main main, TenantIdentifier sour StorageQueryException, FeatureNotEnabledException, IOException, InvalidConfigException, InvalidProviderConfigException, TenantOrAppNotFoundException { checkPermissionsForCreateOrUpdate(main, sourceTenant, newTenant.tenantIdentifier); - return addNewOrUpdateAppOrTenant(main, newTenant, false, true); + return addNewOrUpdateAppOrTenant(main, newTenant, false); } @TestOnly @@ -213,15 +213,7 @@ public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenan throws InvalidProviderConfigException, StorageQueryException, FeatureNotEnabledException, TenantOrAppNotFoundException, IOException, InvalidConfigException, CannotModifyBaseConfigException, BadPermissionException { - return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventDbConfigUpdate, true); - } - - public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenant, - boolean shouldPreventDbConfigUpdate, boolean forceReloadResources) - throws CannotModifyBaseConfigException, BadPermissionException, - StorageQueryException, FeatureNotEnabledException, IOException, InvalidConfigException, - InvalidProviderConfigException, TenantOrAppNotFoundException { - return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventDbConfigUpdate, false, forceReloadResources); + return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventDbConfigUpdate, false, true); } @@ -265,7 +257,8 @@ public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenan .addTenantIdInTargetStorage(newTenant.tenantIdentifier); } catch (TenantOrAppNotFoundException e) { // it should never come here, since we just added the tenant above.. but just in case. - return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventProtectedConfigUpdate, true); + return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventProtectedConfigUpdate, + skipThirdPartyConfigValidation, forceReloadResources); } return true; } catch (DuplicateTenantException e) { @@ -285,7 +278,8 @@ public static boolean addNewOrUpdateAppOrTenant(Main main, TenantConfig newTenan } catch (TenantOrAppNotFoundException ex) { // this can happen cause of a race condition if the tenant was deleted in the middle // of it being recreated. - return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventProtectedConfigUpdate, true); + return addNewOrUpdateAppOrTenant(main, newTenant, shouldPreventProtectedConfigUpdate, + skipThirdPartyConfigValidation, forceReloadResources); } catch (DuplicateTenantException ex) { // we treat this as a success return false; diff --git a/src/main/java/io/supertokens/multitenancy/MultitenancyHelper.java b/src/main/java/io/supertokens/multitenancy/MultitenancyHelper.java index 5877c71cf..a555cf05c 100644 --- a/src/main/java/io/supertokens/multitenancy/MultitenancyHelper.java +++ b/src/main/java/io/supertokens/multitenancy/MultitenancyHelper.java @@ -29,7 +29,6 @@ import io.supertokens.multitenancy.exception.CannotModifyBaseConfigException; import io.supertokens.output.Logging; import io.supertokens.pluginInterface.STORAGE_TYPE; -import io.supertokens.pluginInterface.Storage; import io.supertokens.pluginInterface.exceptions.InvalidConfigException; import io.supertokens.pluginInterface.exceptions.StorageQueryException; import io.supertokens.pluginInterface.multitenancy.*; @@ -76,12 +75,13 @@ public static void init(Main main) throws StorageQueryException, IOException { new TenantConfig( new TenantIdentifier(null, null, null), new EmailPasswordConfig(true), new ThirdPartyConfig(true, null), - new PasswordlessConfig(true), new JsonObject()), false, false); + new PasswordlessConfig(true), new JsonObject()), false, false, false); // Not force reloading all resources here (the last boolean in the function above) // because the ucl for the FeatureFlag is not yet loaded and results in an empty // instance of eeFeatureFlag. This is applicable only when the core is starting on // an empty database as no tenants are loaded from the db yet. - } catch (CannotModifyBaseConfigException | BadPermissionException | FeatureNotEnabledException | InvalidConfigException | InvalidProviderConfigException | TenantOrAppNotFoundException e) { + } catch (CannotModifyBaseConfigException | BadPermissionException | FeatureNotEnabledException | + InvalidConfigException | InvalidProviderConfigException | TenantOrAppNotFoundException e) { throw new IllegalStateException(e); } } @@ -102,21 +102,25 @@ private TenantConfig[] getAllTenantsFromDb() throws StorageQueryException { return StorageLayer.getMultitenancyStorage(main).getAllTenants(); } - public List refreshTenantsInCoreBasedOnChangesInCoreConfigOrIfTenantListChanged(boolean reloadAllResources) { + public List refreshTenantsInCoreBasedOnChangesInCoreConfigOrIfTenantListChanged( + boolean reloadAllResources) { try { return main.getResourceDistributor().withResourceDistributorLock(() -> { try { TenantConfig[] tenantsFromDb = getAllTenantsFromDb(); - Map normalizedTenantsFromDb = Config.getNormalisedConfigsForAllTenants( + Map normalizedTenantsFromDb = + Config.getNormalisedConfigsForAllTenants( tenantsFromDb, Config.getBaseConfigAsJsonObject(main)); - Map normalizedTenantsFromMemory = Config.getNormalisedConfigsForAllTenants( + Map normalizedTenantsFromMemory = + Config.getNormalisedConfigsForAllTenants( this.tenantConfigs, Config.getBaseConfigAsJsonObject(main)); List tenantsThatChanged = new ArrayList<>(); - for (Map.Entry entry : normalizedTenantsFromMemory.entrySet()) { + for (Map.Entry entry : + normalizedTenantsFromMemory.entrySet()) { JsonObject tenantConfigFromMemory = entry.getValue(); JsonObject tenantConfigFromDb = normalizedTenantsFromDb.get(entry.getKey()); @@ -132,7 +136,8 @@ public List refreshTenantsInCoreBasedOnChangesInCoreConfigOrIf return tenantsThatChanged; } - ProcessState.getInstance(main).addState(ProcessState.PROCESS_STATE.TENANTS_CHANGED_DURING_REFRESH_FROM_DB, null); + ProcessState.getInstance(main) + .addState(ProcessState.PROCESS_STATE.TENANTS_CHANGED_DURING_REFRESH_FROM_DB, null); // this order is important. For example, storageLayer depends on config, and cronjobs depends on // storageLayer @@ -195,7 +200,8 @@ public void loadFeatureFlag(List tenantsThatChanged) { FeatureFlag.loadForAllTenants(main, apps, tenantsThatChanged); } - public void loadSigningKeys(List tenantsThatChanged) throws UnsupportedJWTSigningAlgorithmException { + public void loadSigningKeys(List tenantsThatChanged) + throws UnsupportedJWTSigningAlgorithmException { List apps = new ArrayList<>(); Set appsSet = new HashSet<>(); for (TenantConfig t : tenantConfigs) { diff --git a/src/main/java/io/supertokens/webserver/api/multitenancy/BaseCreateOrUpdate.java b/src/main/java/io/supertokens/webserver/api/multitenancy/BaseCreateOrUpdate.java index e1fbab926..ac930fb7b 100644 --- a/src/main/java/io/supertokens/webserver/api/multitenancy/BaseCreateOrUpdate.java +++ b/src/main/java/io/supertokens/webserver/api/multitenancy/BaseCreateOrUpdate.java @@ -43,11 +43,15 @@ public BaseCreateOrUpdate(Main main) { super(main, RECIPE_ID.MULTITENANCY.toString()); } - protected void handle(HttpServletRequest req, TenantIdentifier sourceTenantIdentifier, TenantIdentifier targetTenantIdentifier, Boolean emailPasswordEnabled, Boolean thirdPartyEnabled, Boolean passwordlessEnabled, JsonObject coreConfig, HttpServletResponse resp) + protected void handle(HttpServletRequest req, TenantIdentifier sourceTenantIdentifier, + TenantIdentifier targetTenantIdentifier, Boolean emailPasswordEnabled, + Boolean thirdPartyEnabled, Boolean passwordlessEnabled, JsonObject coreConfig, + HttpServletResponse resp) throws ServletException, IOException { TenantConfig tenantConfig = Multitenancy.getTenantInfo(main, - new TenantIdentifier(targetTenantIdentifier.getConnectionUriDomain(), targetTenantIdentifier.getAppId(), targetTenantIdentifier.getTenantId())); + new TenantIdentifier(targetTenantIdentifier.getConnectionUriDomain(), targetTenantIdentifier.getAppId(), + targetTenantIdentifier.getTenantId())); boolean createdNew = false; @@ -119,7 +123,7 @@ protected void handle(HttpServletRequest req, TenantIdentifier sourceTenantIdent Multitenancy.checkPermissionsForCreateOrUpdate( main, sourceTenantIdentifier, tenantConfig.tenantIdentifier); - Multitenancy.addNewOrUpdateAppOrTenant(main, tenantConfig, shouldProtectProtectedConfig(req), true); + Multitenancy.addNewOrUpdateAppOrTenant(main, tenantConfig, shouldProtectProtectedConfig(req), false, true); JsonObject result = new JsonObject(); result.addProperty("status", "OK"); result.addProperty("createdNew", createdNew); diff --git a/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/CreateOrUpdateThirdPartyConfigAPI.java b/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/CreateOrUpdateThirdPartyConfigAPI.java index 2aab9f831..eff3a93d9 100644 --- a/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/CreateOrUpdateThirdPartyConfigAPI.java +++ b/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/CreateOrUpdateThirdPartyConfigAPI.java @@ -87,7 +87,7 @@ protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IO boolean found = false; - for (ThirdPartyConfig.Provider provider: tenantConfig.thirdPartyConfig.providers) { + for (ThirdPartyConfig.Provider provider : tenantConfig.thirdPartyConfig.providers) { // Loop through all the existing thirdParty providers in the db if (!provider.thirdPartyId.equals(thirdPartyId)) { @@ -96,7 +96,8 @@ protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IO } else { // if the thirdPartyId is the same as the one we are trying to update, add the one from json input // to the new list - ThirdPartyConfig.Provider newProvider = new Gson().fromJson(config, ThirdPartyConfig.Provider.class); + ThirdPartyConfig.Provider newProvider = new Gson().fromJson(config, + ThirdPartyConfig.Provider.class); newProviders.add(normalize(newProvider)); found = true; } @@ -110,11 +111,13 @@ protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IO tenantConfig.tenantIdentifier, tenantConfig.emailPasswordConfig, new ThirdPartyConfig( - tenantConfig.thirdPartyConfig.enabled, newProviders.toArray(new ThirdPartyConfig.Provider[0])), + tenantConfig.thirdPartyConfig.enabled, + newProviders.toArray(new ThirdPartyConfig.Provider[0])), tenantConfig.passwordlessConfig, tenantConfig.coreConfig); - Multitenancy.addNewOrUpdateAppOrTenant(main, updatedConfig, shouldProtectProtectedConfig(req), skipValidation); + Multitenancy.addNewOrUpdateAppOrTenant(main, updatedConfig, shouldProtectProtectedConfig(req), + skipValidation, true); JsonObject result = new JsonObject(); result.addProperty("status", "OK"); @@ -134,7 +137,8 @@ protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IO private ThirdPartyConfig.Provider normalize(ThirdPartyConfig.Provider provider) { ThirdPartyConfig.UserInfoMap normalizedUserInfoMap = provider.userInfoMap; if (normalizedUserInfoMap != null) { - normalizedUserInfoMap = new ThirdPartyConfig.UserInfoMap(normalizedUserInfoMap.fromIdTokenPayload, normalizedUserInfoMap.fromUserInfoAPI); + normalizedUserInfoMap = new ThirdPartyConfig.UserInfoMap(normalizedUserInfoMap.fromIdTokenPayload, + normalizedUserInfoMap.fromUserInfoAPI); } return new ThirdPartyConfig.Provider( diff --git a/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/RemoveThirdPartyConfigAPI.java b/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/RemoveThirdPartyConfigAPI.java index 312c619ee..8f5b5570c 100644 --- a/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/RemoveThirdPartyConfigAPI.java +++ b/src/main/java/io/supertokens/webserver/api/multitenancy/thirdparty/RemoveThirdPartyConfigAPI.java @@ -68,7 +68,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws I // Create a new list of providers skipping the thirdPartyId provided in the input List newProviders = new ArrayList<>(); boolean found = false; - for (ThirdPartyConfig.Provider provider: config.thirdPartyConfig.providers) { + for (ThirdPartyConfig.Provider provider : config.thirdPartyConfig.providers) { if (!provider.thirdPartyId.equals(thirdPartyId)) { newProviders.add(provider); } else { @@ -84,7 +84,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws I config.passwordlessConfig, config.coreConfig); - Multitenancy.addNewOrUpdateAppOrTenant(main, updatedConfig, shouldProtectProtectedConfig(req), true); + Multitenancy.addNewOrUpdateAppOrTenant(main, updatedConfig, shouldProtectProtectedConfig(req), false, true); JsonObject result = new JsonObject(); result.addProperty("status", "OK"); From 28ae1878d9da886c6e3114cb3415e857fac09258 Mon Sep 17 00:00:00 2001 From: rishabhpoddar Date: Mon, 4 Sep 2023 22:54:54 +0530 Subject: [PATCH 23/27] adding dev-v6.0.12 tag to this commit to ensure building --- cli/jar/cli.jar | Bin 47546 -> 47546 bytes downloader/jar/downloader.jar | Bin 15229 -> 15229 bytes ee/jar/ee.jar | Bin 13262 -> 13262 bytes jar/core-6.0.12.jar | Bin 658740 -> 658729 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/cli/jar/cli.jar b/cli/jar/cli.jar index 86ae720e8c30d692fb6bd8a1a10d234056e248e6..ed2f9c0947730b9e8987a8dbda8e71e6fcde185d 100644 GIT binary patch delta 758 zcmdn>nQ7N&CY}IqW)?061`ZB}YuhIBs51dcQ*YI4+f>3CfPe`^00A=)XXfiOGoUD6 zstZzn#SlnNW@mH&Qky*)r?P^$fx#w|*%>7LVe$*G@U3Ya zT-Yq;TnGxB&58?uf?Y4O*b>AIU(5-%Gik*~Aa`=;%70*Ll_`koSp^F2$>&z-gQ)+j ztU;8`YI_h>yV?&#on4&-q72uBfvCy*3R@ZIYRMeyur($+0d4MCGlE z2T|wO%>q%`>uW&N%k>c;%6UT`h%#IQ)U?40#N^%xHneno75T%|5@y8zd;RH3mdgZ3R2;(N?fyEw+V&1Sf6- z>$|fJlt3oyZwG6ivE2*AJGfb9(hg8+oUFei8AMIl;SQqi?f{!$yb~NSB|F^!wJS~0 delta 758 zcmdn>nQ7N&CY}IqW)?061`ZB}iWL)i)R};!skdsy3YBmMAYcL!K)?*dnfdz63@FN% z>VlMCF$9v6*%=*x)Mih{sjMJwV6e&LIChT7GVDAcVJ-G_F_7?NSvL^(wrmqGi2EVl zWb$NfL6Fcg?LAx|p%k+~5O=%T0Y(sAY4K15Bpl=G1>&yoT@E$g1H_#jT+0TcrJ|%* zK(txh4v;ROxvn6tdBPm9YLGPnX{?j^(!h?9Nh@RHL-pZg!%oS`_FK64P<^=hVvaA^ zV1>eUV3RJC*@6t_FOLN|c5_~12NQ_?(VPdSGun28Y1PgauxD0Jb_Pj*nEV1Pd}|s9 z7dDGI7lHz3v*N;^VAsnmwghp*7juH`Oj_{~$ekRz@*kL5WeTEtR)K!q72snHEpm0F}XK_4K3f84&pu7m22oRXxPz#>JHRFw?*s=-$xb%_EF~zh diff --git a/downloader/jar/downloader.jar b/downloader/jar/downloader.jar index a0d1c702835fc42a12a6b091c07ad7f978f6c0cd..0afcbd1233839d7dd28211c284f59a9b1bd7d35b 100644 GIT binary patch delta 335 zcmexc_P2~Dz?+$ci-CcIgW<-ui9G5|K+@D(^~N@pa0Vb?0ueyK48)oF`pgU{%9rYb zlwYv`lAHM$SFr)<$-CHHfYc_A5LO6JXR@z3&*VN{9+09rytlYObcIAe6Nu)Nt_IPQ z+hmwZ_y9M13)h15qJnK_F^{Stf`QHV5<4&67dAGv>J<%Gx3tM9r`W1W~Uo gvO!dYC0P3o%K#9M%L+`zSY?5DC#?KHl!SFE09(X`C;$Ke delta 335 zcmexc_P2~Dz?+$ci-CcIgQ050L>_e}AZhBYTD3wYoB;@!Km-sl194`)J~IP~@};^U z-l69NlK!K|4pz--=m6rn8`dy`WRIGdf~Y?xAkoQo zrurZ%-_#mJtub{2QD02sKvalX5Qth~mIq15w8f-9eOqQ8b9kH3|k%hl~P2l&CRSNvLrp0J@|`fdBvi delta 195 zcmX??elDFSz?+$ci-CcIgQ0rGL>_e}AZhBYTD?LgoB;@!Km-sl194`)J~IP~@};^U z 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

t zoT%dPQQitY;ND?ynegvYEC;g_k)1}w^@xD@*U`Te|8Mgfowv|um;>W~$n^g>1hee{ z^7?-+Gh+O)w!Qbvjla-18v?4<2CNMj)Xz_xj_F`_McQWbE zIQZl-h~Zz;$O31N(+&~F5tAYN>M#>Az!v=vt42(QyxS7CMzDsfm?Aihm<-)F?Le@E zYdcsX5;AmS<~Z1p*@N5I!76TmZx~#`x&*!2kEPfMo(Hjv@csAZ`F(Ropq2zPiR|kT zxpTwI5E&y(O^PA;NddBM2MPA_8DV!)vQucJoNW_ylR+YCfOYroN6rI0m=cuVng^`I zC~?@}Gvk0da5q40pkyl?8TOoMMB{%u1w0ZcgJ%xWU4vhE`VT)V{Dq7Rd*V&L8QszX z5+x1X>UUq-PvrmbGs5{086}KU0AE5}fv`U4L!b{mO1pWm1VqdNmFPdt9Y{ccJOR9h zmmo4BEKB<=UHqvC2=1^G5M21fgxu$8VHq;At7vfk`-E8eHcH7S@&&SWH|HN`(t5g;2nkauj4VsJmACLzUHl{Vnjf`=acFmng`j MNUS};z5~Jk0ni@NrvLx| delta 32094 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