From f474b2cb65bfcb972391bcf6f1780c30f7e7b6d2 Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Fri, 4 Oct 2024 10:58:27 +0530 Subject: [PATCH 01/18] feat: OAuth provider support (#228) * fix: oauth clients table * fix: oauth db changes * fix: listClientsForApp * fix: revoke (#226) * fix: revoke * fix: pr comment * fix: interface * fix: update * fix: oauth stats queries * fix: revoke and cleanup * fix: stats * fix: logout queries (#229) * fix: update queries * fix: versions * revert * fix: changelog * fix: changelog * fix: constraints --- CHANGELOG.md | 5 + build.gradle | 2 +- pluginInterfaceSupported.json | 2 +- .../supertokens/storage/postgresql/Start.java | 198 ++++++++- .../postgresql/config/PostgreSQLConfig.java | 16 + .../postgresql/queries/GeneralQueries.java | 35 ++ .../postgresql/queries/OAuthQueries.java | 388 ++++++++++++++++++ 7 files changed, 642 insertions(+), 4 deletions(-) create mode 100644 src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 30b7400d..1dd709e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [7.2.0] - 2024-10-03 + +- Compatible with plugin interface version 6.3 +- Adds support for OAuthStorage + ## [7.1.3] - 2024-09-04 - Adds index on `last_active_time` for `user_last_active` table to improve the performance of MAU computation. diff --git a/build.gradle b/build.gradle index bab06c3e..553a2c88 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java-library' } -version = "7.1.3" +version = "7.2.0" repositories { mavenCentral() diff --git a/pluginInterfaceSupported.json b/pluginInterfaceSupported.json index 0dedee88..25f82381 100644 --- a/pluginInterfaceSupported.json +++ b/pluginInterfaceSupported.json @@ -1,6 +1,6 @@ { "_comment": "contains a list of plugin interfaces branch names that this core supports", "versions": [ - "6.2" + "6.3" ] } \ No newline at end of file diff --git a/src/main/java/io/supertokens/storage/postgresql/Start.java b/src/main/java/io/supertokens/storage/postgresql/Start.java index aee997d4..33cd8c17 100644 --- a/src/main/java/io/supertokens/storage/postgresql/Start.java +++ b/src/main/java/io/supertokens/storage/postgresql/Start.java @@ -54,6 +54,11 @@ import io.supertokens.pluginInterface.multitenancy.exceptions.DuplicateThirdPartyIdException; import io.supertokens.pluginInterface.multitenancy.exceptions.TenantOrAppNotFoundException; import io.supertokens.pluginInterface.multitenancy.sqlStorage.MultitenancySQLStorage; +import io.supertokens.pluginInterface.oauth.OAuthLogoutChallenge; +import io.supertokens.pluginInterface.oauth.OAuthRevokeTargetType; +import io.supertokens.pluginInterface.oauth.OAuthStorage; +import io.supertokens.pluginInterface.oauth.exception.DuplicateOAuthLogoutChallengeException; +import io.supertokens.pluginInterface.oauth.exception.OAuthClientNotFoundException; import io.supertokens.pluginInterface.passwordless.PasswordlessCode; import io.supertokens.pluginInterface.passwordless.PasswordlessDevice; import io.supertokens.pluginInterface.passwordless.exception.*; @@ -106,7 +111,7 @@ public class Start implements SessionSQLStorage, EmailPasswordSQLStorage, EmailVerificationSQLStorage, ThirdPartySQLStorage, JWTRecipeSQLStorage, PasswordlessSQLStorage, UserMetadataSQLStorage, UserRolesSQLStorage, UserIdMappingStorage, UserIdMappingSQLStorage, MultitenancyStorage, MultitenancySQLStorage, DashboardSQLStorage, TOTPSQLStorage, - ActiveUsersStorage, ActiveUsersSQLStorage, AuthRecipeSQLStorage { + ActiveUsersStorage, ActiveUsersSQLStorage, AuthRecipeSQLStorage, OAuthStorage { // these configs are protected from being modified / viewed by the dev using the SuperTokens // SaaS. If the core is not running in SuperTokens SaaS, this array has no effect. @@ -121,7 +126,6 @@ public class Start private ResourceDistributor resourceDistributor = new ResourceDistributor(); private String processId; private HikariLoggingAppender appender; - private static final String APP_ID_KEY_NAME = "app_id"; private static final String ACCESS_TOKEN_SIGNING_KEY_NAME = "access_token_signing_key"; private static final String REFRESH_TOKEN_KEY_NAME = "refresh_token_key"; public static boolean isTesting = false; @@ -864,6 +868,8 @@ public void addInfoToNonAuthRecipesBasedOnUserId(TenantIdentifier tenantIdentifi } } else if (className.equals(JWTRecipeStorage.class.getName())) { /* Since JWT recipe tables do not store userId we do not add any data to them */ + } else if (className.equals(OAuthStorage.class.getName())) { + /* Since OAuth recipe tables do not store userId we do not add any data to them */ } else if (className.equals(ActiveUsersStorage.class.getName())) { try { ActiveUsersQueries.updateUserLastActive(this, tenantIdentifier.toAppIdentifier(), userId); @@ -3089,6 +3095,194 @@ public int countUsersThatHaveMoreThanOneLoginMethodOrTOTPEnabledAndActiveSince(A } } + @Override + public boolean doesOAuthClientIdExist(AppIdentifier appIdentifier, String clientId) + throws StorageQueryException { + try { + return OAuthQueries.doesOAuthClientIdExist(this, clientId, appIdentifier); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void addOrUpdateOauthClient(AppIdentifier appIdentifier, String clientId, boolean isClientCredentialsOnly) + throws StorageQueryException, TenantOrAppNotFoundException { + try { + OAuthQueries.addOrUpdateOauthClient(this, appIdentifier, clientId, isClientCredentialsOnly); + } catch (SQLException e) { + PostgreSQLConfig config = Config.getConfig(this); + if (e instanceof PSQLException) { + ServerErrorMessage serverMessage = ((PSQLException) e).getServerErrorMessage(); + + if (isForeignKeyConstraintError(serverMessage, config.getOAuthClientsTable(), "app_id")) { + throw new TenantOrAppNotFoundException(appIdentifier); + } + } + throw new StorageQueryException(e); + } + } + + @Override + public boolean deleteOAuthClient(AppIdentifier appIdentifier, String clientId) throws StorageQueryException { + try { + return OAuthQueries.deleteOAuthClient(this, clientId, appIdentifier); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public List listOAuthClients(AppIdentifier appIdentifier) throws StorageQueryException { + try { + return OAuthQueries.listOAuthClients(this, appIdentifier); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void revokeOAuthTokensBasedOnTargetFields(AppIdentifier appIdentifier, OAuthRevokeTargetType targetType, String targetValue, long exp) + throws StorageQueryException, TenantOrAppNotFoundException { + try { + OAuthQueries.revokeOAuthTokensBasedOnTargetFields(this, appIdentifier, targetType, targetValue, exp); + } catch (SQLException e) { + PostgreSQLConfig config = Config.getConfig(this); + if (e instanceof PSQLException) { + ServerErrorMessage serverMessage = ((PSQLException) e).getServerErrorMessage(); + + if (isForeignKeyConstraintError(serverMessage, config.getOAuthRevokeTable(), "app_id")) { + throw new TenantOrAppNotFoundException(appIdentifier); + } + } + throw new StorageQueryException(e); + } + + } + + @Override + public boolean isOAuthTokenRevokedBasedOnTargetFields(AppIdentifier appIdentifier, OAuthRevokeTargetType[] targetTypes, String[] targetValues, long issuedAt) + throws StorageQueryException { + try { + return OAuthQueries.isOAuthTokenRevokedBasedOnTargetFields(this, appIdentifier, targetTypes, targetValues, issuedAt); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void addOAuthM2MTokenForStats(AppIdentifier appIdentifier, String clientId, long iat, long exp) + throws StorageQueryException, OAuthClientNotFoundException { + try { + OAuthQueries.addOAuthM2MTokenForStats(this, appIdentifier, clientId, iat, exp); + } catch (SQLException e) { + PostgreSQLConfig config = Config.getConfig(this); + if (e instanceof PSQLException) { + ServerErrorMessage serverMessage = ((PSQLException) e).getServerErrorMessage(); + + if (isForeignKeyConstraintError(serverMessage, config.getOAuthM2MTokensTable(), "client_id")) { + throw new OAuthClientNotFoundException(); + } + } + throw new StorageQueryException(e); + } + } + + @Override + public void cleanUpExpiredAndRevokedOAuthTokensList() throws StorageQueryException { + try { + OAuthQueries.cleanUpExpiredAndRevokedOAuthTokensList(this); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void addOAuthLogoutChallenge(AppIdentifier appIdentifier, String challenge, String clientId, + String postLogoutRedirectionUri, String sessionHandle, String state, long timeCreated) + throws StorageQueryException, DuplicateOAuthLogoutChallengeException, OAuthClientNotFoundException { + try { + OAuthQueries.addOAuthLogoutChallenge(this, appIdentifier, challenge, clientId, postLogoutRedirectionUri, sessionHandle, state, timeCreated); + } catch (SQLException e) { + PostgreSQLConfig config = Config.getConfig(this); + if (e instanceof PSQLException) { + ServerErrorMessage serverMessage = ((PSQLException) e).getServerErrorMessage(); + + if (isPrimaryKeyError(serverMessage, config.getOAuthLogoutChallengesTable())) { + throw new DuplicateOAuthLogoutChallengeException(); + } else if (isForeignKeyConstraintError(serverMessage, config.getOAuthLogoutChallengesTable(), "client_id")) { + throw new OAuthClientNotFoundException(); + } + } + throw new StorageQueryException(e); + } + } + + @Override + public OAuthLogoutChallenge getOAuthLogoutChallenge(AppIdentifier appIdentifier, String challenge) throws StorageQueryException { + try { + return OAuthQueries.getOAuthLogoutChallenge(this, appIdentifier, challenge); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void deleteOAuthLogoutChallenge(AppIdentifier appIdentifier, String challenge) throws StorageQueryException { + try { + OAuthQueries.deleteOAuthLogoutChallenge(this, appIdentifier, challenge); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void deleteOAuthLogoutChallengesBefore(long time) throws StorageQueryException { + try { + OAuthQueries.deleteOAuthLogoutChallengesBefore(this, time); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public int countTotalNumberOfOAuthClients(AppIdentifier appIdentifier) throws StorageQueryException { + try { + return OAuthQueries.countTotalNumberOfClients(this, appIdentifier, false); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public int countTotalNumberOfClientCredentialsOnlyOAuthClients(AppIdentifier appIdentifier) + throws StorageQueryException { + try { + return OAuthQueries.countTotalNumberOfClients(this, appIdentifier, true); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public int countTotalNumberOfOAuthM2MTokensCreatedSince(AppIdentifier appIdentifier, long since) + throws StorageQueryException { + try { + return OAuthQueries.countTotalNumberOfOAuthM2MTokensCreatedSince(this, appIdentifier, since); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public int countTotalNumberOfOAuthM2MTokensAlive(AppIdentifier appIdentifier) throws StorageQueryException { + try { + return OAuthQueries.countTotalNumberOfOAuthM2MTokensAlive(this, appIdentifier); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + @TestOnly public int getDbActivityCount(String dbname) throws SQLException, StorageQueryException { String QUERY = "SELECT COUNT(*) as c FROM pg_stat_activity WHERE datname = ?;"; diff --git a/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java b/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java index a1ff555c..29150141 100644 --- a/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java +++ b/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java @@ -439,6 +439,22 @@ public String getDashboardSessionsTable() { return addSchemaAndPrefixToTableName("dashboard_user_sessions"); } + public String getOAuthClientsTable() { + return addSchemaAndPrefixToTableName("oauth_clients"); + } + + public String getOAuthRevokeTable() { + return addSchemaAndPrefixToTableName("oauth_revoke"); + } + + public String getOAuthM2MTokensTable() { + return addSchemaAndPrefixToTableName("oauth_m2m_tokens"); + } + + public String getOAuthLogoutChallengesTable() { + return addSchemaAndPrefixToTableName("oauth_logout_challenges"); + } + public String getTotpUsersTable() { return addSchemaAndPrefixToTableName("totp_users"); } diff --git a/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java b/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java index ac922852..a53f0bdd 100644 --- a/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java +++ b/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java @@ -554,6 +554,37 @@ public static void createTablesIfNotExists(Start start, Connection con) throws S update(con, TOTPQueries.getQueryToCreateTenantIdIndexForUsedCodesTable(start), NO_OP_SETTER); } + if (!doesTableExists(start, con, Config.getConfig(start).getOAuthClientsTable())) { + getInstance(start).addState(CREATING_NEW_TABLE, null); + update(start, OAuthQueries.getQueryToCreateOAuthClientTable(start), NO_OP_SETTER); + } + + if (!doesTableExists(start, con, Config.getConfig(start).getOAuthRevokeTable())) { + getInstance(start).addState(CREATING_NEW_TABLE, null); + update(start, OAuthQueries.getQueryToCreateOAuthRevokeTable(start), NO_OP_SETTER); + + // index + update(con, OAuthQueries.getQueryToCreateOAuthRevokeTimestampIndex(start), NO_OP_SETTER); + update(con, OAuthQueries.getQueryToCreateOAuthRevokeExpIndex(start), NO_OP_SETTER); + } + + if (!doesTableExists(start, con, Config.getConfig(start).getOAuthM2MTokensTable())) { + getInstance(start).addState(CREATING_NEW_TABLE, null); + update(start, OAuthQueries.getQueryToCreateOAuthM2MTokensTable(start), NO_OP_SETTER); + + // index + update(con, OAuthQueries.getQueryToCreateOAuthM2MTokenIatIndex(start), NO_OP_SETTER); + update(con, OAuthQueries.getQueryToCreateOAuthM2MTokenExpIndex(start), NO_OP_SETTER); + } + + if (!doesTableExists(start, con, Config.getConfig(start).getOAuthLogoutChallengesTable())) { + getInstance(start).addState(CREATING_NEW_TABLE, null); + update(con, OAuthQueries.getQueryToCreateOAuthLogoutChallengesTable(start), NO_OP_SETTER); + + // index + update(con, OAuthQueries.getQueryToCreateOAuthLogoutChallengesTimeCreatedIndex(start), NO_OP_SETTER); + } + } catch (Exception e) { if (e.getMessage().contains("schema") && e.getMessage().contains("does not exist") && numberOfRetries < 1) { @@ -624,6 +655,10 @@ public static void deleteAllTables(Start start) throws SQLException, StorageQuer + getConfig(start).getUserRolesTable() + "," + getConfig(start).getDashboardUsersTable() + "," + getConfig(start).getDashboardSessionsTable() + "," + + getConfig(start).getOAuthClientsTable() + "," + + getConfig(start).getOAuthRevokeTable() + "," + + getConfig(start).getOAuthM2MTokensTable() + "," + + getConfig(start).getOAuthLogoutChallengesTable() + "," + getConfig(start).getTotpUsedCodesTable() + "," + getConfig(start).getTotpUserDevicesTable() + "," + getConfig(start).getTotpUsersTable(); diff --git a/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java b/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java new file mode 100644 index 00000000..aa2168c9 --- /dev/null +++ b/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java @@ -0,0 +1,388 @@ +/* + * Copyright (c) 2024, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + + package io.supertokens.storage.postgresql.queries; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import io.supertokens.pluginInterface.exceptions.StorageQueryException; +import io.supertokens.pluginInterface.multitenancy.AppIdentifier; +import io.supertokens.pluginInterface.oauth.OAuthLogoutChallenge; +import io.supertokens.pluginInterface.oauth.OAuthRevokeTargetType; +import io.supertokens.storage.postgresql.Start; +import io.supertokens.storage.postgresql.config.Config; +import io.supertokens.storage.postgresql.utils.Utils; + +import static io.supertokens.storage.postgresql.QueryExecutorTemplate.execute; +import static io.supertokens.storage.postgresql.QueryExecutorTemplate.update; + +public class OAuthQueries { + public static String getQueryToCreateOAuthClientTable(Start start) { + String schema = Config.getConfig(start).getTableSchema(); + String oAuthClientsTable = Config.getConfig(start).getOAuthClientsTable(); + // @formatter:off + return "CREATE TABLE IF NOT EXISTS " + oAuthClientsTable + " (" + + "app_id VARCHAR(64) DEFAULT 'public'," + + "client_id VARCHAR(128) NOT NULL," + + "is_client_credentials_only BOOLEAN NOT NULL," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuthClientsTable, null, "pkey") + + " PRIMARY KEY (app_id, client_id)," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuthClientsTable, "app_id", "fkey") + + " FOREIGN KEY(app_id)" + + " REFERENCES " + Config.getConfig(start).getAppsTable() + "(app_id) ON DELETE CASCADE" + + ");"; + // @formatter:on + } + + public static String getQueryToCreateOAuthRevokeTable(Start start) { + String schema = Config.getConfig(start).getTableSchema(); + String oAuthRevokeTable = Config.getConfig(start).getOAuthRevokeTable(); + // @formatter:off + return "CREATE TABLE IF NOT EXISTS " + oAuthRevokeTable + " (" + + "app_id VARCHAR(64) DEFAULT 'public'," + + "target_type VARCHAR(16) NOT NULL," + + "target_value VARCHAR(128) NOT NULL," + + "timestamp BIGINT NOT NULL," + + "exp BIGINT NOT NULL," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuthRevokeTable, null, "pkey") + + " PRIMARY KEY (app_id, target_type, target_value)," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuthRevokeTable, "app_id", "fkey") + + " FOREIGN KEY(app_id)" + + " REFERENCES " + Config.getConfig(start).getAppsTable() + "(app_id) ON DELETE CASCADE" + + ");"; + // @formatter:on + } + + public static String getQueryToCreateOAuthRevokeTimestampIndex(Start start) { + String oAuthRevokeTable = Config.getConfig(start).getOAuthRevokeTable(); + return "CREATE INDEX IF NOT EXISTS oauth_revoke_timestamp_index ON " + + oAuthRevokeTable + "(timestamp DESC, app_id DESC);"; + } + + public static String getQueryToCreateOAuthRevokeExpIndex(Start start) { + String oAuthRevokeTable = Config.getConfig(start).getOAuthRevokeTable(); + return "CREATE INDEX IF NOT EXISTS oauth_revoke_exp_index ON " + + oAuthRevokeTable + "(exp DESC);"; + } + + public static String getQueryToCreateOAuthM2MTokensTable(Start start) { + String schema = Config.getConfig(start).getTableSchema(); + String oAuthM2MTokensTable = Config.getConfig(start).getOAuthM2MTokensTable(); + // @formatter:off + return "CREATE TABLE IF NOT EXISTS " + oAuthM2MTokensTable + " (" + + "app_id VARCHAR(64) DEFAULT 'public'," + + "client_id VARCHAR(128) NOT NULL," + + "iat BIGINT NOT NULL," + + "exp BIGINT NOT NULL," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuthM2MTokensTable, null, "pkey") + + " PRIMARY KEY (app_id, client_id, iat)," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuthM2MTokensTable, "client_id", "fkey") + + " FOREIGN KEY(app_id, client_id)" + + " REFERENCES " + Config.getConfig(start).getOAuthClientsTable() + "(app_id, client_id) ON DELETE CASCADE" + + ");"; + // @formatter:on + } + + public static String getQueryToCreateOAuthM2MTokenIatIndex(Start start) { + String oAuthM2MTokensTable = Config.getConfig(start).getOAuthM2MTokensTable(); + return "CREATE INDEX IF NOT EXISTS oauth_m2m_token_iat_index ON " + + oAuthM2MTokensTable + "(iat DESC, app_id DESC);"; + } + + public static String getQueryToCreateOAuthM2MTokenExpIndex(Start start) { + String oAuthM2MTokensTable = Config.getConfig(start).getOAuthM2MTokensTable(); + return "CREATE INDEX IF NOT EXISTS oauth_m2m_token_exp_index ON " + + oAuthM2MTokensTable + "(exp DESC);"; + } + + public static String getQueryToCreateOAuthLogoutChallengesTable(Start start) { + String schema = Config.getConfig(start).getTableSchema(); + String oAuth2LogoutChallengesTable = Config.getConfig(start).getOAuthLogoutChallengesTable(); + // @formatter:off + return "CREATE TABLE IF NOT EXISTS " + oAuth2LogoutChallengesTable + " (" + + "app_id VARCHAR(64) DEFAULT 'public'," + + "challenge VARCHAR(128) NOT NULL," + + "client_id VARCHAR(128) NOT NULL," + + "post_logout_redirect_uri VARCHAR(1024)," + + "session_handle VARCHAR(128)," + + "state VARCHAR(128)," + + "time_created BIGINT NOT NULL," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuth2LogoutChallengesTable, null, "pkey") + + " PRIMARY KEY (app_id, challenge)," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuth2LogoutChallengesTable, "client_id", "fkey") + + " FOREIGN KEY(app_id, client_id)" + + " REFERENCES " + Config.getConfig(start).getOAuthClientsTable() + "(app_id, client_id) ON DELETE CASCADE" + + ");"; + // @formatter:on + } + + public static String getQueryToCreateOAuthLogoutChallengesTimeCreatedIndex(Start start) { + String oAuth2LogoutChallengesTable = Config.getConfig(start).getOAuthLogoutChallengesTable(); + return "CREATE INDEX IF NOT EXISTS oauth_logout_challenges_time_created_index ON " + + oAuth2LogoutChallengesTable + "(time_created ASC, app_id ASC);"; + } + + public static boolean doesOAuthClientIdExist(Start start, String clientId, AppIdentifier appIdentifier) + throws SQLException, StorageQueryException { + String QUERY = "SELECT app_id FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE client_id = ? AND app_id = ?"; + + return execute(start, QUERY, pst -> { + pst.setString(1, clientId); + pst.setString(2, appIdentifier.getAppId()); + }, ResultSet::next); + } + + public static List listOAuthClients(Start start, AppIdentifier appIdentifier) + throws SQLException, StorageQueryException { + String QUERY = "SELECT client_id FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE app_id = ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + }, (result) -> { + List res = new ArrayList<>(); + while (result.next()) { + res.add(result.getString("client_id")); + } + return res; + }); + } + + public static void addOrUpdateOauthClient(Start start, AppIdentifier appIdentifier, String clientId, + boolean isClientCredentialsOnly) + throws SQLException, StorageQueryException { + String INSERT = "INSERT INTO " + Config.getConfig(start).getOAuthClientsTable() + + "(app_id, client_id, is_client_credentials_only) VALUES(?, ?, ?) " + + "ON CONFLICT (app_id, client_id) DO UPDATE SET is_client_credentials_only = ?"; + update(start, INSERT, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, clientId); + pst.setBoolean(3, isClientCredentialsOnly); + pst.setBoolean(4, isClientCredentialsOnly); + }); + } + + public static boolean deleteOAuthClient(Start start, String clientId, AppIdentifier appIdentifier) + throws SQLException, StorageQueryException { + String DELETE = "DELETE FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE app_id = ? AND client_id = ?"; + int numberOfRow = update(start, DELETE, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, clientId); + }); + return numberOfRow > 0; + } + + public static void revokeOAuthTokensBasedOnTargetFields(Start start, AppIdentifier appIdentifier, OAuthRevokeTargetType targetType, String targetValue, long exp) + throws SQLException, StorageQueryException { + String INSERT = "INSERT INTO " + Config.getConfig(start).getOAuthRevokeTable() + + "(app_id, target_type, target_value, timestamp, exp) VALUES (?, ?, ?, ?, ?) " + + "ON CONFLICT (app_id, target_type, target_value) DO UPDATE SET timestamp = ?, exp = ?"; + + long currentTime = System.currentTimeMillis() / 1000; + update(start, INSERT, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, targetType.getValue()); + pst.setString(3, targetValue); + pst.setLong(4, currentTime); + pst.setLong(5, exp); + pst.setLong(6, currentTime); + pst.setLong(7, exp); + }); + } + + public static boolean isOAuthTokenRevokedBasedOnTargetFields(Start start, AppIdentifier appIdentifier, OAuthRevokeTargetType[] targetTypes, + String[] targetValues, long issuedAt) + throws SQLException, StorageQueryException { + String QUERY = "SELECT app_id FROM " + Config.getConfig(start).getOAuthRevokeTable() + + " WHERE app_id = ? AND timestamp >= ? AND ("; + + for (int i = 0; i < targetTypes.length; i++) { + QUERY += "(target_type = ? AND target_value = ?)"; + + if (i < targetTypes.length - 1) { + QUERY += " OR "; + } + } + + QUERY += ")"; + + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setLong(2, issuedAt); + + int index = 3; + for (int i = 0; i < targetTypes.length; i++) { + pst.setString(index, targetTypes[i].getValue()); + index++; + pst.setString(index, targetValues[i]); + index++; + } + }, ResultSet::next); + } + + public static int countTotalNumberOfClients(Start start, AppIdentifier appIdentifier, + boolean filterByClientCredentialsOnly) throws SQLException, StorageQueryException { + if (filterByClientCredentialsOnly) { + String QUERY = "SELECT COUNT(*) as c FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE app_id = ? AND is_client_credentials_only = ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setBoolean(2, true); + }, result -> { + if (result.next()) { + return result.getInt("c"); + } + return 0; + }); + } else { + String QUERY = "SELECT COUNT(*) as c FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE app_id = ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + }, result -> { + if (result.next()) { + return result.getInt("c"); + } + return 0; + }); + } + } + + public static int countTotalNumberOfOAuthM2MTokensAlive(Start start, AppIdentifier appIdentifier) + throws SQLException, StorageQueryException { + String QUERY = "SELECT COUNT(*) as c FROM " + Config.getConfig(start).getOAuthM2MTokensTable() + + " WHERE app_id = ? AND exp > ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setLong(2, System.currentTimeMillis()/1000); + }, result -> { + if (result.next()) { + return result.getInt("c"); + } + return 0; + }); + } + + public static int countTotalNumberOfOAuthM2MTokensCreatedSince(Start start, AppIdentifier appIdentifier, long since) + throws SQLException, StorageQueryException { + String QUERY = "SELECT COUNT(*) as c FROM " + Config.getConfig(start).getOAuthM2MTokensTable() + + " WHERE app_id = ? AND iat >= ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setLong(2, since / 1000); + }, result -> { + if (result.next()) { + return result.getInt("c"); + } + return 0; + }); + } + + public static void addOAuthM2MTokenForStats(Start start, AppIdentifier appIdentifier, String clientId, long iat, long exp) + throws SQLException, StorageQueryException { + String QUERY = "INSERT INTO " + Config.getConfig(start).getOAuthM2MTokensTable() + + " (app_id, client_id, iat, exp) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING"; + update(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, clientId); + pst.setLong(3, iat); + pst.setLong(4, exp); + }); + } + + public static void cleanUpExpiredAndRevokedOAuthTokensList(Start start) throws SQLException, StorageQueryException { + { + // delete expired M2M tokens + String QUERY = "DELETE FROM " + Config.getConfig(start).getOAuthM2MTokensTable() + + " WHERE exp < ?"; + + long timestamp = System.currentTimeMillis() / 1000 - 3600 * 24 * 31; // expired 31 days ago + update(start, QUERY, pst -> { + pst.setLong(1, timestamp); + }); + } + + { + // delete expired revoked tokens + String QUERY = "DELETE FROM " + Config.getConfig(start).getOAuthRevokeTable() + + " WHERE exp < ?"; + + long timestamp = System.currentTimeMillis() / 1000 - 3600 * 24 * 31; // expired 31 days ago + update(start, QUERY, pst -> { + pst.setLong(1, timestamp); + }); + } + } + + public static void addOAuthLogoutChallenge(Start start, AppIdentifier appIdentifier, String challenge, String clientId, + String postLogoutRedirectionUri, String sessionHandle, String state, long timeCreated) throws SQLException, StorageQueryException { + String QUERY = "INSERT INTO " + Config.getConfig(start).getOAuthLogoutChallengesTable() + + " (app_id, challenge, client_id, post_logout_redirect_uri, session_handle, state, time_created) VALUES (?, ?, ?, ?, ?, ?, ?)"; + update(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, challenge); + pst.setString(3, clientId); + pst.setString(4, postLogoutRedirectionUri); + pst.setString(5, sessionHandle); + pst.setString(6, state); + pst.setLong(7, timeCreated); + }); + } + + public static OAuthLogoutChallenge getOAuthLogoutChallenge(Start start, AppIdentifier appIdentifier, String challenge) throws SQLException, StorageQueryException { + String QUERY = "SELECT challenge, client_id, post_logout_redirect_uri, session_handle, state, time_created FROM " + + Config.getConfig(start).getOAuthLogoutChallengesTable() + + " WHERE app_id = ? AND challenge = ?"; + + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, challenge); + }, result -> { + if (result.next()) { + return new OAuthLogoutChallenge( + result.getString("challenge"), + result.getString("client_id"), + result.getString("post_logout_redirect_uri"), + result.getString("session_handle"), + result.getString("state"), + result.getLong("time_created") + ); + } + return null; + }); + } + + public static void deleteOAuthLogoutChallenge(Start start, AppIdentifier appIdentifier, String challenge) throws SQLException, StorageQueryException { + String QUERY = "DELETE FROM " + Config.getConfig(start).getOAuthLogoutChallengesTable() + + " WHERE app_id = ? AND challenge = ?"; + update(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, challenge); + }); + } + + public static void deleteOAuthLogoutChallengesBefore(Start start, long time) throws SQLException, StorageQueryException { + String QUERY = "DELETE FROM " + Config.getConfig(start).getOAuthLogoutChallengesTable() + + " WHERE time_created < ?"; + update(start, QUERY, pst -> { + pst.setLong(1, time); + }); + } +} From e2b7082dbf18eb1eee5ab5efe125fa4fb0c0b887 Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Fri, 4 Oct 2024 11:06:25 +0530 Subject: [PATCH 02/18] adding dev-v7.2.0 tag to this commit to ensure building --- ...-7.1.3.jar => postgresql-plugin-7.2.0.jar} | Bin 224159 -> 232868 bytes 1 file changed, 0 insertions(+), 0 deletions(-) rename jar/{postgresql-plugin-7.1.3.jar => postgresql-plugin-7.2.0.jar} (65%) diff --git a/jar/postgresql-plugin-7.1.3.jar b/jar/postgresql-plugin-7.2.0.jar similarity index 65% rename from jar/postgresql-plugin-7.1.3.jar rename to jar/postgresql-plugin-7.2.0.jar index af33d925b81e1fff1ef43e143847d48be8baf1d2..4a35f089cc4c30bec0159c89cc2965f994b84504 100644 GIT binary patch delta 74493 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Ækg*Pn@w;{ksr?$HMx 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 D2C|&x delta 66159 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 U06eNbc&AkYlSHM#lL+Gf00fibEdT%j From c6d099c91ce2a7f55cd7b17f64a97ea75ba21f32 Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Fri, 4 Oct 2024 12:48:51 +0530 Subject: [PATCH 03/18] fix: changelog (#230) --- CHANGELOG.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1dd709e9..d8f45ac6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,57 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Compatible with plugin interface version 6.3 - Adds support for OAuthStorage +### Migration + +```sql +CREATE TABLE IF NOT EXISTS oauth_clients ( + app_id VARCHAR(64), + client_id VARCHAR(128) NOT NULL, + is_client_credentials_only BOOLEAN NOT NULL, + PRIMARY KEY (app_id, client_id), + FOREIGN KEY(app_id) REFERENCES apps(app_id) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS oauth_revoke ( + app_id VARCHAR(64) DEFAULT 'public', + target_type VARCHAR(16) NOT NULL, + target_value VARCHAR(128) NOT NULL, + timestamp BIGINT NOT NULL, + exp BIGINT NOT NULL, + PRIMARY KEY (app_id, target_type, target_value), + FOREIGN KEY(app_id) REFERENCES apps(app_id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS oauth_revoke_timestamp_index ON oauth_revoke(timestamp DESC, app_id DESC); +CREATE INDEX IF NOT EXISTS oauth_revoke_exp_index ON oauth_revoke(exp DESC); + +CREATE TABLE IF NOT EXISTS oauth_m2m_tokens ( + app_id VARCHAR(64) DEFAULT 'public', + client_id VARCHAR(128) NOT NULL, + iat BIGINT NOT NULL, + exp BIGINT NOT NULL, + PRIMARY KEY (app_id, client_id, iat), + FOREIGN KEY(app_id, client_id) REFERENCES oauth_clients(app_id, client_id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS oauth_m2m_token_iat_index ON oauth_m2m_tokens(iat DESC, app_id DESC); +CREATE INDEX IF NOT EXISTS oauth_m2m_token_exp_index ON oauth_m2m_tokens(exp DESC); + +CREATE TABLE IF NOT EXISTS oauth_logout_challenges ( + app_id VARCHAR(64) DEFAULT 'public', + challenge VARCHAR(128) NOT NULL, + client_id VARCHAR(128) NOT NULL, + post_logout_redirect_uri VARCHAR(1024), + session_handle VARCHAR(128), + state VARCHAR(128), + time_created BIGINT NOT NULL, + PRIMARY KEY (app_id, challenge), + FOREIGN KEY(app_id, client_id) REFERENCES oauth_clients(app_id, client_id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS oauth_logout_challenges_time_created_index ON oauth_logout_challenges(time_created DESC); +``` + ## [7.1.3] - 2024-09-04 - Adds index on `last_active_time` for `user_last_active` table to improve the performance of MAU computation. From cff42cbdb5edbef087d819de8e6ffe5905e92dcb Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Fri, 4 Oct 2024 12:52:02 +0530 Subject: [PATCH 04/18] adding dev-v7.2.0 tag to this commit to ensure building --- jar/postgresql-plugin-7.2.0.jar | Bin 232868 -> 232868 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/jar/postgresql-plugin-7.2.0.jar b/jar/postgresql-plugin-7.2.0.jar index 4a35f089cc4c30bec0159c89cc2965f994b84504..86ad2a0a500f6426012719724c6cf997df888727 100644 GIT binary patch delta 1594 zcmY+DZA?>F7{@v1sR+{55M~oMkVWT)aYO`h5MJUo224kXncEaiWEcviycWu9DW$E@ z@*-5`t_vaPgk_USgpQTP4`#+8IyM|JnwU6c8|uV;m|2jym+bz}`Lvtd`};pH=RD7O z?!80(x}koZHg^|kRs{uxgakQ^KJANKeJ1YO=rCsN3sNtRhkB8En<} zQGND>u^lS>IqY){%)eG-!ORFwTMxQo(nEFF)b^g{*->@3gis}JoW&?-XSq&EHBq=< zA3sS*y_z_?0z8?L$5i(HlbQ`PD{b{V;NGJ%DByoV$%z21r{5OKuAG?^e)o8_u>YLc zxe4*tZ_f#P?a!A;bdYh~ao4Jz>z1ak^>mz)-$1MVvG-1KB+vc2jGF$L#i6HFPFUDr zq)H_siW$UW9=Nkxt1eE`^yLP}9DNv~^j6WDz!y>P5G=`@BT1)|g0#Z?ds+3XjbJ@Bo8wTD6M$z#jHW5{Q(2#?RqhO`L1 zT+b}Q5F>W>XdT4h0817XZk}M-;qW{^&cZfAY`wuQiO`dq?79$hKe7TLw*SP2g}AlA zM)gSU{+nf^!HF9@X)PS#&v3g)@kQ~OHSiov;Dbo{GKo)#$aD%nE6&iE$(_ka`L~6S zg+h#Z`AcFrw>$Y6k$j|wKfs&=jXquskNUZ6QwChLQi(ps#pz;?@dhD2J;`&#qQ^tr zDMs7$87J(gI7WCTc9|aGCXt&k$)8$@$gAi1n~3zD=aZt)&aZiq5dI6iR*20Pd4Ui; z-|#{qmZo@}=(FN79}{Bz4Bsni+h+L@k)!>AhX{}U8XpiNo><^l#2ac|7}7^cK_m;KO1n6GRs9W`_a9IhcN7-^+(@T!&UU~Vma0N$;o4$x9ZZg9DdJ^@eEQw^wZAP0E7LG~5g zDCc5rq$cenTo;t&2$`e+NlU!w97e^w#aiWw#an{ z9FpHTWWCf@+24g$Ij%G-Z;$yqqPB!?nJaWIUJX8yNt5@2mytH4nKkSfYOdT>j-yvVm e?oQdxM5p|Wp6j9pEbs54ec)0TrGwkMsr)}_G&i&W delta 1594 zcmYL|eN5F=7{@v1xgZE#$H==`AWgGy#zYW<@iHp{(jZ(~h;9;&3zv5;TwX61xEFax zxRU*BjG+mwB$;rdOY;wxGeo(CF{hiGDHUpBf8-jHy{z*+=a24of1mI3a-Qco=XZX? z1Nz|seL%);(yjLL^7ZxdWI6+0=HeN>d(&)Y(ta=T<9LW4iNC3ID|!8&KAY(r3FqQ@ zJz6a4_h&nW;Ywp)=mh)!@=k%7!ux20Jna4aj*e_{mL9i`n-X+*q&rV5y%S45= z|D4>l8U8o#%u9RS&zDI~kaVNzo<;2IwywYVOoWzQOKV)=_fK;q&;PoDo-WVQ@Ux=$ zq?ru`3tI~cVd-))ci-I;AQs2y`ZIjOjy>|#`pRjo`^yk!KmoTWlm%f7_rgY2sE0_8 zWN%>r_s7w!ObY*4b{;v}Oaj}7NN6Ivv>IYDmHpxkF`LfX{2}&cu@&h_&t|VlkF$^s z2O#un4Kw>djM~`a^$$;^WOxq?Iyb{Lr-t98&b^w$a19E@e>=7 z;`SmNGa$L=Z)5Xuqnd@9;{BjH=ovW>JAbQ&oR{N6}!ARd%Q>97yyQ8swM zLBZNW9>u~4&Zk1KBcDD%@}qnzmPsZufzu`t7yhUMdJpU>paS@x6sRF;3aJeC!$Rsn z+)_k6pstwgV0*EM3qCETHqcR`*6B)Bes3u?z^^Z(BGj>#iTc8RP(}yAKuw1)xMS*)w+XCir+P2jzf<7Ioh3 zEuxP&&)-|f41ews+6$gPLPl_7D;)w`S}6;>+p7A#(?;^LU1=jL{3-3K-q-C^g?igM z)cZc&K?j8WQKxES>Qv!{PVss~+MX^kj^JdMx<)T_Q!VU)ZrYEs%iWX+?&zVC{{WDB BVx#~7 From 41107c5e256b7d2c5f6a2458d63a6c290f0077f0 Mon Sep 17 00:00:00 2001 From: tamassoltesz Date: Sun, 27 Oct 2024 00:33:21 +0200 Subject: [PATCH 05/18] feat: oauth2 tables and queries --- .../supertokens/storage/postgresql/Start.java | 282 +++++++++- .../postgresql/config/PostgreSQLConfig.java | 22 +- .../postgresql/queries/GeneralQueries.java | 37 +- .../postgresql/queries/OAuthQueries.java | 483 ++++++++++++++++++ 4 files changed, 814 insertions(+), 10 deletions(-) create mode 100644 src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java diff --git a/src/main/java/io/supertokens/storage/postgresql/Start.java b/src/main/java/io/supertokens/storage/postgresql/Start.java index aee997d4..310e8158 100644 --- a/src/main/java/io/supertokens/storage/postgresql/Start.java +++ b/src/main/java/io/supertokens/storage/postgresql/Start.java @@ -48,12 +48,20 @@ import io.supertokens.pluginInterface.jwt.JWTSigningKeyInfo; import io.supertokens.pluginInterface.jwt.exceptions.DuplicateKeyIdException; import io.supertokens.pluginInterface.jwt.sqlstorage.JWTRecipeSQLStorage; -import io.supertokens.pluginInterface.multitenancy.*; +import io.supertokens.pluginInterface.multitenancy.AppIdentifier; +import io.supertokens.pluginInterface.multitenancy.MultitenancyStorage; +import io.supertokens.pluginInterface.multitenancy.TenantConfig; +import io.supertokens.pluginInterface.multitenancy.TenantIdentifier; import io.supertokens.pluginInterface.multitenancy.exceptions.DuplicateClientTypeException; import io.supertokens.pluginInterface.multitenancy.exceptions.DuplicateTenantException; import io.supertokens.pluginInterface.multitenancy.exceptions.DuplicateThirdPartyIdException; import io.supertokens.pluginInterface.multitenancy.exceptions.TenantOrAppNotFoundException; import io.supertokens.pluginInterface.multitenancy.sqlStorage.MultitenancySQLStorage; +import io.supertokens.pluginInterface.oauth.OAuthClient; +import io.supertokens.pluginInterface.oauth.OAuthLogoutChallenge; +import io.supertokens.pluginInterface.oauth.OAuthStorage; +import io.supertokens.pluginInterface.oauth.exception.DuplicateOAuthLogoutChallengeException; +import io.supertokens.pluginInterface.oauth.exception.OAuthClientNotFoundException; import io.supertokens.pluginInterface.passwordless.PasswordlessCode; import io.supertokens.pluginInterface.passwordless.PasswordlessDevice; import io.supertokens.pluginInterface.passwordless.exception.*; @@ -98,7 +106,10 @@ import java.sql.Connection; import java.sql.SQLException; import java.sql.SQLTransactionRollbackException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; import static io.supertokens.storage.postgresql.QueryExecutorTemplate.execute; @@ -106,7 +117,7 @@ public class Start implements SessionSQLStorage, EmailPasswordSQLStorage, EmailVerificationSQLStorage, ThirdPartySQLStorage, JWTRecipeSQLStorage, PasswordlessSQLStorage, UserMetadataSQLStorage, UserRolesSQLStorage, UserIdMappingStorage, UserIdMappingSQLStorage, MultitenancyStorage, MultitenancySQLStorage, DashboardSQLStorage, TOTPSQLStorage, - ActiveUsersStorage, ActiveUsersSQLStorage, AuthRecipeSQLStorage { + ActiveUsersStorage, ActiveUsersSQLStorage, AuthRecipeSQLStorage, OAuthStorage { // these configs are protected from being modified / viewed by the dev using the SuperTokens // SaaS. If the core is not running in SuperTokens SaaS, this array has no effect. @@ -3101,4 +3112,269 @@ public int getDbActivityCount(String dbname) throws SQLException, StorageQueryEx return -1; }); } + + @Override + public OAuthClient getOAuthClientById(AppIdentifier appIdentifier, String clientId) + throws StorageQueryException, OAuthClientNotFoundException { + try { + OAuthClient client = OAuthQueries.getOAuthClientById(this, clientId, appIdentifier); + if (client == null) { + throw new OAuthClientNotFoundException(); + } + return client; + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void addOrUpdateOauthClient(AppIdentifier appIdentifier, String clientId, String clientSecret, boolean isClientCredentialsOnly, boolean enableRefreshTokenRotation) + throws StorageQueryException, TenantOrAppNotFoundException { + try { + OAuthQueries.addOrUpdateOauthClient(this, appIdentifier, clientId, clientSecret, isClientCredentialsOnly, enableRefreshTokenRotation); + } catch (SQLException e) { + ServerErrorMessage errorMessage = ((PSQLException) e).getServerErrorMessage(); + PostgreSQLConfig config = Config.getConfig(this); + + if (isForeignKeyConstraintError( + errorMessage, + config.getOAuthClientsTable(), + "app_id")) { + throw new TenantOrAppNotFoundException(appIdentifier); + } + throw new StorageQueryException(e); + } + } + + @Override + public boolean deleteOAuthClient(AppIdentifier appIdentifier, String clientId) throws StorageQueryException { + try { + return OAuthQueries.deleteOAuthClient(this, clientId, appIdentifier); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public List getOAuthClients(AppIdentifier appIdentifier, List clientIds) throws StorageQueryException { + try { + return OAuthQueries.getOAuthClients(this, appIdentifier, clientIds); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public boolean revokeOAuthTokenByGID(AppIdentifier appIdentifier, String gid) throws StorageQueryException { + try { + return OAuthQueries.deleteOAuthSessionByGID(this, appIdentifier, gid); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public boolean revokeOAuthTokenByClientId(AppIdentifier appIdentifier, String clientId) + throws StorageQueryException { + try { + return OAuthQueries.deleteOAuthSessionByClientId(this, appIdentifier, clientId); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public boolean revokeOAuthTokenByJTI(AppIdentifier appIdentifier, String gid, String jti) + throws StorageQueryException { + try { + return OAuthQueries.deleteJTIFromOAuthSession(this, appIdentifier, gid, jti); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public boolean revokeOAuthTokenBySessionHandle(AppIdentifier appIdentifier, String sessionHandle) + throws StorageQueryException { + try { + return OAuthQueries.deleteOAuthSessionBySessionHandle(this, appIdentifier, sessionHandle); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void addOAuthM2MTokenForStats(AppIdentifier appIdentifier, String clientId, long iat, long exp) + throws StorageQueryException, OAuthClientNotFoundException { + try { + OAuthQueries.addOAuthM2MTokenForStats(this, appIdentifier, clientId, iat, exp); + } catch (SQLException e) { + ServerErrorMessage errorMessage = ((PSQLException) e).getServerErrorMessage(); + PostgreSQLConfig config = Config.getConfig(this); + + if (isForeignKeyConstraintError( + errorMessage, + config.getOAuthM2MTokensTable(), + "client_id")) { + throw new OAuthClientNotFoundException(); + } + throw new StorageQueryException(e); + } + } + + @Override + public void deleteExpiredOAuthM2MTokens(long exp) throws StorageQueryException { + try { + OAuthQueries.deleteExpiredOAuthM2MTokens(this, exp); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void addOAuthLogoutChallenge(AppIdentifier appIdentifier, String challenge, String clientId, + String postLogoutRedirectionUri, String sessionHandle, String state, long timeCreated) + throws StorageQueryException, DuplicateOAuthLogoutChallengeException, OAuthClientNotFoundException { + try { + OAuthQueries.addOAuthLogoutChallenge(this, appIdentifier, challenge, clientId, postLogoutRedirectionUri, sessionHandle, state, timeCreated); + } catch (SQLException e) { + ServerErrorMessage errorMessage = ((PSQLException) e).getServerErrorMessage(); + PostgreSQLConfig config = Config.getConfig(this); + + if (isPrimaryKeyError(errorMessage, config.getOAuthLogoutChallengesTable())) { + throw new DuplicateOAuthLogoutChallengeException(); + } else if (isForeignKeyConstraintError( + errorMessage, + config.getOAuthLogoutChallengesTable(), + "client_id")) { + throw new OAuthClientNotFoundException(); + } + throw new StorageQueryException(e); + } + } + + @Override + public OAuthLogoutChallenge getOAuthLogoutChallenge(AppIdentifier appIdentifier, String challenge) throws StorageQueryException { + try { + return OAuthQueries.getOAuthLogoutChallenge(this, appIdentifier, challenge); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void deleteOAuthLogoutChallenge(AppIdentifier appIdentifier, String challenge) throws StorageQueryException { + try { + OAuthQueries.deleteOAuthLogoutChallenge(this, appIdentifier, challenge); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void deleteOAuthLogoutChallengesBefore(long time) throws StorageQueryException { + try { + OAuthQueries.deleteOAuthLogoutChallengesBefore(this, time); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void createOrUpdateOAuthSession(AppIdentifier appIdentifier, String gid, String clientId, + String externalRefreshToken, String internalRefreshToken, + String sessionHandle, List jtis, long exp) + throws StorageQueryException, OAuthClientNotFoundException { + try { + OAuthQueries.createOrUpdateOAuthSession(this, appIdentifier, gid, clientId, externalRefreshToken, + internalRefreshToken, sessionHandle, jtis, exp); + } catch (SQLException e) { + ServerErrorMessage errorMessage = ((PSQLException) e).getServerErrorMessage(); + PostgreSQLConfig config = Config.getConfig(this); + + if (isForeignKeyConstraintError( + errorMessage, + config.getOAuthSessionsTable(), + "client_id")) { + throw new OAuthClientNotFoundException(); + } + throw new StorageQueryException(e); + } + } + + @Override + public String getRefreshTokenMapping(AppIdentifier appIdentifier, String externalRefreshToken) + throws StorageQueryException { + try { + return OAuthQueries.getRefreshTokenMapping(this, appIdentifier, externalRefreshToken); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public void deleteExpiredOAuthSessions(long exp) throws StorageQueryException { + try { + OAuthQueries.deleteExpiredOAuthSessions(this, exp); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public int countTotalNumberOfOAuthClients(AppIdentifier appIdentifier) throws StorageQueryException { + try { + return OAuthQueries.countTotalNumberOfClients(this, appIdentifier, false); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public int countTotalNumberOfClientCredentialsOnlyOAuthClients(AppIdentifier appIdentifier) + throws StorageQueryException { + try { + return OAuthQueries.countTotalNumberOfClients(this, appIdentifier, true); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public int countTotalNumberOfOAuthM2MTokensCreatedSince(AppIdentifier appIdentifier, long since) + throws StorageQueryException { + try { + return OAuthQueries.countTotalNumberOfOAuthM2MTokensCreatedSince(this, appIdentifier, since); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public int countTotalNumberOfOAuthM2MTokensAlive(AppIdentifier appIdentifier) throws StorageQueryException { + try { + return OAuthQueries.countTotalNumberOfOAuthM2MTokensAlive(this, appIdentifier); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public boolean isOAuthTokenRevokedByGID(AppIdentifier appIdentifier, String gid) throws StorageQueryException { + try { + return !OAuthQueries.isOAuthSessionExistsByGID(this, appIdentifier, gid); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } + + @Override + public boolean isOAuthTokenRevokedByJTI(AppIdentifier appIdentifier, String gid, String jti) + throws StorageQueryException { + try { + return !OAuthQueries.isOAuthSessionExistsByJTI(this, appIdentifier, gid, jti); + } catch (SQLException e) { + throw new StorageQueryException(e); + } + } } diff --git a/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java b/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java index a1ff555c..2a3f47bc 100644 --- a/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java +++ b/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java @@ -23,7 +23,6 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonObject; - import io.supertokens.pluginInterface.ConfigFieldInfo; import io.supertokens.pluginInterface.exceptions.InvalidConfigException; import io.supertokens.storage.postgresql.Start; @@ -31,11 +30,7 @@ import java.lang.reflect.Field; import java.net.URI; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; @JsonIgnoreProperties(ignoreUnknown = true) public class PostgreSQLConfig { @@ -450,6 +445,21 @@ public String getTotpUserDevicesTable() { public String getTotpUsedCodesTable() { return addSchemaAndPrefixToTableName("totp_used_codes"); } + public String getOAuthClientsTable() { + return addSchemaAndPrefixToTableName("oauth_clients"); + } + + public String getOAuthM2MTokensTable() { + return addSchemaAndPrefixToTableName("oauth_m2m_tokens"); + } + + public String getOAuthSessionsTable() { + return addSchemaAndPrefixToTableName("oauth_sessions"); + } + + public String getOAuthLogoutChallengesTable() { + return addSchemaAndPrefixToTableName("oauth_logout_challenges"); + } private String addSchemaAndPrefixToTableName(String tableName) { return addSchemaToTableName(postgresql_table_names_prefix + tableName); diff --git a/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java b/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java index ac922852..2cc5e554 100644 --- a/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java +++ b/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java @@ -554,6 +554,37 @@ public static void createTablesIfNotExists(Start start, Connection con) throws S update(con, TOTPQueries.getQueryToCreateTenantIdIndexForUsedCodesTable(start), NO_OP_SETTER); } + if (!doesTableExists(start, con, Config.getConfig(start).getOAuthClientsTable())) { + getInstance(start).addState(CREATING_NEW_TABLE, null); + update(con, OAuthQueries.getQueryToCreateOAuthClientTable(start), NO_OP_SETTER); + } + + if (!doesTableExists(start, con, Config.getConfig(start).getOAuthSessionsTable())) { + getInstance(start).addState(CREATING_NEW_TABLE, null); + update(con, OAuthQueries.getQueryToCreateOAuthSessionsTable(start), NO_OP_SETTER); + + // index + update(con, OAuthQueries.getQueryToCreateOAuthSessionsExpIndex(start), NO_OP_SETTER); + update(con, OAuthQueries.getQueryToCreateOAuthSessionsExternalRefreshTokenIndex(start), NO_OP_SETTER); + } + + if (!doesTableExists(start, con, Config.getConfig(start).getOAuthM2MTokensTable())) { + getInstance(start).addState(CREATING_NEW_TABLE, null); + update(con, OAuthQueries.getQueryToCreateOAuthM2MTokensTable(start), NO_OP_SETTER); + + // index + update(con, OAuthQueries.getQueryToCreateOAuthM2MTokenIatIndex(start), NO_OP_SETTER); + update(con, OAuthQueries.getQueryToCreateOAuthM2MTokenExpIndex(start), NO_OP_SETTER); + } + + if (!doesTableExists(start, con, Config.getConfig(start).getOAuthLogoutChallengesTable())) { + getInstance(start).addState(CREATING_NEW_TABLE, null); + update(con, OAuthQueries.getQueryToCreateOAuthLogoutChallengesTable(start), NO_OP_SETTER); + + // index + update(con, OAuthQueries.getQueryToCreateOAuthLogoutChallengesTimeCreatedIndex(start), NO_OP_SETTER); + } + } catch (Exception e) { if (e.getMessage().contains("schema") && e.getMessage().contains("does not exist") && numberOfRetries < 1) { @@ -626,7 +657,11 @@ public static void deleteAllTables(Start start) throws SQLException, StorageQuer + getConfig(start).getDashboardSessionsTable() + "," + getConfig(start).getTotpUsedCodesTable() + "," + getConfig(start).getTotpUserDevicesTable() + "," - + getConfig(start).getTotpUsersTable(); + + getConfig(start).getTotpUsersTable() + "," + + getConfig(start).getOAuthClientsTable() + "," + + getConfig(start).getOAuthSessionsTable() + "," + + getConfig(start).getOAuthLogoutChallengesTable() + "," + + getConfig(start).getOAuthM2MTokensTable(); update(start, DROP_QUERY, NO_OP_SETTER); } } diff --git a/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java b/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java new file mode 100644 index 00000000..58a26efd --- /dev/null +++ b/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java @@ -0,0 +1,483 @@ +/* + * Copyright (c) 2024, VRAI Labs and/or its affiliates. All rights reserved. + * + * This software is licensed under the Apache License, Version 2.0 (the + * "License") as published by the Apache Software Foundation. + * + * You may not use this file except in compliance with the License. You may + * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.supertokens.storage.postgresql.queries; + +import io.supertokens.pluginInterface.exceptions.StorageQueryException; +import io.supertokens.pluginInterface.multitenancy.AppIdentifier; +import io.supertokens.pluginInterface.oauth.OAuthClient; +import io.supertokens.pluginInterface.oauth.OAuthLogoutChallenge; +import io.supertokens.storage.postgresql.Start; +import io.supertokens.storage.postgresql.config.Config; +import io.supertokens.storage.postgresql.utils.Utils; +import org.jetbrains.annotations.NotNull; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import static io.supertokens.storage.postgresql.QueryExecutorTemplate.execute; +import static io.supertokens.storage.postgresql.QueryExecutorTemplate.update; + + +public class OAuthQueries { + + public static String getQueryToCreateOAuthClientTable(Start start) { + String schema = Config.getConfig(start).getTableSchema(); + String oAuth2ClientTable = Config.getConfig(start).getOAuthClientsTable(); + // @formatter:off + return "CREATE TABLE IF NOT EXISTS " + oAuth2ClientTable + " (" + + "app_id VARCHAR(64)," + + "client_id VARCHAR(255) NOT NULL," + + "client_secret TEXT," + + "enable_refresh_token_rotation BOOLEAN NOT NULL," + + "is_client_credentials_only BOOLEAN NOT NULL," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuth2ClientTable, null, "pkey") + + " PRIMARY KEY (app_id, client_id)," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuth2ClientTable, "app_id", "fkey") + + " FOREIGN KEY(app_id) REFERENCES " + Config.getConfig(start).getAppsTable() + "(app_id) ON DELETE CASCADE " + + ");"; + // @formatter:on + } + + public static String getQueryToCreateOAuthSessionsTable(Start start) { + String schema = Config.getConfig(start).getTableSchema(); + String oAuthSessionsTable = Config.getConfig(start).getOAuthSessionsTable(); + // @formatter:off + return "CREATE TABLE IF NOT EXISTS " + oAuthSessionsTable + " (" + + "gid VARCHAR(255)," // needed for instrospect. It's much easier to find these records if we have a gid + + "app_id VARCHAR(64) DEFAULT 'public'," + + "client_id VARCHAR(255) NOT NULL," + + "session_handle VARCHAR(128)," + + "external_refresh_token VARCHAR(255) UNIQUE," + + "internal_refresh_token VARCHAR(255) UNIQUE," + + "jti TEXT NOT NULL," // comma separated jti list + + "exp BIGINT NOT NULL," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuthSessionsTable, null, "pkey") + + " PRIMARY KEY (gid)," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuthSessionsTable, "client_id", "fkey") + + " FOREIGN KEY(app_id, client_id) REFERENCES " + Config.getConfig(start).getOAuthClientsTable() + "(app_id, client_id) ON DELETE CASCADE);"; + // @formatter:on + } + + public static String getQueryToCreateOAuthSessionsExpIndex(Start start) { + String oAuth2SessionTable = Config.getConfig(start).getOAuthSessionsTable(); + return "CREATE INDEX IF NOT EXISTS oauth_session_exp_index ON " + + oAuth2SessionTable + "(exp DESC);"; + } + + public static String getQueryToCreateOAuthSessionsExternalRefreshTokenIndex(Start start) { + String oAuth2SessionTable = Config.getConfig(start).getOAuthSessionsTable(); + return "CREATE INDEX IF NOT EXISTS oauth_session_external_refresh_token_index ON " + + oAuth2SessionTable + "(app_id, external_refresh_token DESC);"; + } + + public static String getQueryToCreateOAuthM2MTokensTable(Start start) { + String schema = Config.getConfig(start).getTableSchema(); + String oAuth2M2MTokensTable = Config.getConfig(start).getOAuthM2MTokensTable(); + // @formatter:off + return "CREATE TABLE IF NOT EXISTS " + oAuth2M2MTokensTable + " (" + + "app_id VARCHAR(64) DEFAULT 'public'," + + "client_id VARCHAR(255) NOT NULL," + + "iat BIGINT NOT NULL," + + "exp BIGINT NOT NULL," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuth2M2MTokensTable, null, "pkey") + + " PRIMARY KEY (app_id, client_id, iat)," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuth2M2MTokensTable, "client_id", "fkey") + + " FOREIGN KEY(app_id, client_id)" + + " REFERENCES " + Config.getConfig(start).getOAuthClientsTable() + "(app_id, client_id) ON DELETE CASCADE" + + ");"; + // @formatter:on + } + + public static String getQueryToCreateOAuthM2MTokenIatIndex(Start start) { + String oAuth2M2MTokensTable = Config.getConfig(start).getOAuthM2MTokensTable(); + return "CREATE INDEX IF NOT EXISTS oauth_m2m_token_iat_index ON " + + oAuth2M2MTokensTable + "(iat DESC, app_id DESC);"; + } + + public static String getQueryToCreateOAuthM2MTokenExpIndex(Start start) { + String oAuth2M2MTokensTable = Config.getConfig(start).getOAuthM2MTokensTable(); + return "CREATE INDEX IF NOT EXISTS oauth_m2m_token_exp_index ON " + + oAuth2M2MTokensTable + "(exp DESC);"; + } + + public static String getQueryToCreateOAuthLogoutChallengesTable(Start start) { + String schema = Config.getConfig(start).getTableSchema(); + String oAuth2LogoutChallengesTable = Config.getConfig(start).getOAuthLogoutChallengesTable(); + // @formatter:off + return "CREATE TABLE IF NOT EXISTS " + oAuth2LogoutChallengesTable + " (" + + "app_id VARCHAR(64) DEFAULT 'public'," + + "challenge VARCHAR(128) NOT NULL," + + "client_id VARCHAR(255) NOT NULL," + + "post_logout_redirect_uri VARCHAR(1024)," + + "session_handle VARCHAR(128)," + + "state VARCHAR(128)," + + "time_created BIGINT NOT NULL," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuth2LogoutChallengesTable, null, "pkey") + + " PRIMARY KEY (app_id, challenge)," + + "CONSTRAINT " + Utils.getConstraintName(schema, oAuth2LogoutChallengesTable, "client_id", "fkey") + + " FOREIGN KEY(app_id, client_id)" + + " REFERENCES " + Config.getConfig(start).getOAuthClientsTable() + "(app_id, client_id) ON DELETE CASCADE" + + ");"; + // @formatter:on + } + + public static String getQueryToCreateOAuthLogoutChallengesTimeCreatedIndex(Start start) { + String oAuth2LogoutChallengesTable = Config.getConfig(start).getOAuthLogoutChallengesTable(); + return "CREATE INDEX IF NOT EXISTS oauth_logout_challenges_time_created_index ON " + + oAuth2LogoutChallengesTable + "(time_created DESC);"; + } + + public static OAuthClient getOAuthClientById(Start start, String clientId, AppIdentifier appIdentifier) + throws SQLException, StorageQueryException { + String QUERY = "SELECT client_secret, is_client_credentials_only, enable_refresh_token_rotation FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE client_id = ? AND app_id = ?"; + + return execute(start, QUERY, pst -> { + pst.setString(1, clientId); + pst.setString(2, appIdentifier.getAppId()); + }, (result) -> { + if (result.next()) { + return new OAuthClient(clientId, result.getString("client_secret"), result.getBoolean("is_client_credentials_only"), result.getBoolean("enable_refresh_token_rotation")); + } + return null; + }); + } + + public static void createOrUpdateOAuthSession(Start start, AppIdentifier appIdentifier, @NotNull String gid, @NotNull String clientId, + String externalRefreshToken, String internalRefreshToken, String sessionHandle, + List jtis, long exp) + throws SQLException, StorageQueryException { + String sessionTable = Config.getConfig(start).getOAuthSessionsTable(); + String QUERY = "INSERT INTO " + sessionTable + + " (gid, client_id, app_id, external_refresh_token, internal_refresh_token, session_handle, jti, exp) VALUES (?, ?, ?, ?, ?, ?, ?, ?) " + + "ON CONFLICT (gid) DO UPDATE SET external_refresh_token = ?, internal_refresh_token = ?, " + + "session_handle = ? , jti = CONCAT("+sessionTable+".jti, ',' , ?), exp = ?"; + update(start, QUERY, pst -> { + String jtiDbValue = jtis == null ? null : String.join(",", jtis); + + pst.setString(1, gid); + pst.setString(2, clientId); + pst.setString(3, appIdentifier.getAppId()); + pst.setString(4, externalRefreshToken); + pst.setString(5, internalRefreshToken); + pst.setString(6, sessionHandle); + pst.setString(7, jtiDbValue); + pst.setLong(8, exp); + + pst.setString(9, externalRefreshToken); + pst.setString(10, internalRefreshToken); + pst.setString(11, sessionHandle); + pst.setString(12, jtiDbValue); + pst.setLong(13, exp); + }); + } + + public static List getOAuthClients(Start start, AppIdentifier appIdentifier, List clientIds) + throws SQLException, StorageQueryException { + if(clientIds.isEmpty()){ + return Collections.emptyList(); + } + String QUERY = "SELECT * FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE app_id = ? AND client_id IN ( " + + Utils.generateCommaSeperatedQuestionMarks(clientIds.size()) + + " );"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + for (int i = 0; i < clientIds.size(); i++) { + pst.setString(i + 2, clientIds.get(i)); + } + System.out.println(pst); + }, (result) -> { + List res = new ArrayList<>(); + while (result.next()) { + res.add(new OAuthClient(result.getString("client_id"), result.getString("client_secret"), result.getBoolean("is_client_credentials_only"), result.getBoolean("enable_refresh_token_rotation"))); + } + return res; + }); + } + + public static void addOrUpdateOauthClient(Start start, AppIdentifier appIdentifier, String clientId, String clientSecret, + boolean isClientCredentialsOnly, boolean enableRefreshTokenRotation) + throws SQLException, StorageQueryException { + String INSERT = "INSERT INTO " + Config.getConfig(start).getOAuthClientsTable() + + "(app_id, client_id, client_secret, is_client_credentials_only, enable_refresh_token_rotation) VALUES(?, ?, ?, ?, ?) " + + "ON CONFLICT (app_id, client_id) DO UPDATE SET client_secret = ?, is_client_credentials_only = ?, enable_refresh_token_rotation = ?"; + update(start, INSERT, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, clientId); + pst.setString(3, clientSecret); + pst.setBoolean(4, isClientCredentialsOnly); + pst.setBoolean(5, enableRefreshTokenRotation); + pst.setString(6, clientSecret); + pst.setBoolean(7, isClientCredentialsOnly); + pst.setBoolean(8, enableRefreshTokenRotation); + }); + } + + public static boolean deleteOAuthClient(Start start, String clientId, AppIdentifier appIdentifier) + throws SQLException, StorageQueryException { + String DELETE = "DELETE FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE app_id = ? AND client_id = ?"; + int numberOfRow = update(start, DELETE, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, clientId); + }); + return numberOfRow > 0; + } + + public static boolean deleteOAuthSessionByGID(Start start, AppIdentifier appIdentifier, String gid) + throws SQLException, StorageQueryException { + String DELETE = "DELETE FROM " + Config.getConfig(start).getOAuthSessionsTable() + + " WHERE gid = ? and app_id = ?;"; + int numberOfRows = update(start, DELETE, pst -> { + pst.setString(1, gid); + pst.setString(2, appIdentifier.getAppId()); + }); + return numberOfRows > 0; + } + + public static boolean deleteOAuthSessionByClientId(Start start, AppIdentifier appIdentifier, String clientId) + throws SQLException, StorageQueryException { + String DELETE = "DELETE FROM " + Config.getConfig(start).getOAuthSessionsTable() + + " WHERE app_id = ? and client_id = ?;"; + int numberOfRows = update(start, DELETE, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, clientId); + }); + return numberOfRows > 0; + } + + public static boolean deleteOAuthSessionBySessionHandle(Start start, AppIdentifier appIdentifier, String sessionHandle) + throws SQLException, StorageQueryException { + String DELETE = "DELETE FROM " + Config.getConfig(start).getOAuthSessionsTable() + + " WHERE app_id = ? and session_handle = ?"; + int numberOfRows = update(start, DELETE, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, sessionHandle); + }); + return numberOfRows > 0; + } + + public static boolean deleteJTIFromOAuthSession(Start start, AppIdentifier appIdentifier, String gid, String jti) + throws SQLException, StorageQueryException { + //jti is a comma separated list. When deleting a jti, just have to delete from the list + String DELETE = "UPDATE " + Config.getConfig(start).getOAuthSessionsTable() + + " SET jti = REPLACE(jti, ?, '')" // deletion means replacing the jti with empty char + + " WHERE app_id = ? and gid = ?"; + int numberOfRows = update(start, DELETE, pst -> { + pst.setString(1, jti); + pst.setString(2, appIdentifier.getAppId()); + pst.setString(3, gid); + }); + return numberOfRows > 0; + } + + public static int countTotalNumberOfClients(Start start, AppIdentifier appIdentifier, + boolean filterByClientCredentialsOnly) throws SQLException, StorageQueryException { + if (filterByClientCredentialsOnly) { + String QUERY = "SELECT COUNT(*) as c FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE app_id = ? AND is_client_credentials_only = ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setBoolean(2, true); + }, result -> { + if (result.next()) { + return result.getInt("c"); + } + return 0; + }); + } else { + String QUERY = "SELECT COUNT(*) as c FROM " + Config.getConfig(start).getOAuthClientsTable() + + " WHERE app_id = ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + }, result -> { + if (result.next()) { + return result.getInt("c"); + } + return 0; + }); + } + } + + public static int countTotalNumberOfOAuthM2MTokensAlive(Start start, AppIdentifier appIdentifier) + throws SQLException, StorageQueryException { + String QUERY = "SELECT COUNT(*) as c FROM " + Config.getConfig(start).getOAuthM2MTokensTable() + + " WHERE app_id = ? AND exp > ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setLong(2, System.currentTimeMillis()/1000); + }, result -> { + if (result.next()) { + return result.getInt("c"); + } + return 0; + }); + } + + public static int countTotalNumberOfOAuthM2MTokensCreatedSince(Start start, AppIdentifier appIdentifier, long since) + throws SQLException, StorageQueryException { + String QUERY = "SELECT COUNT(*) as c FROM " + Config.getConfig(start).getOAuthM2MTokensTable() + + " WHERE app_id = ? AND iat >= ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setLong(2, since / 1000); + }, result -> { + if (result.next()) { + return result.getInt("c"); + } + return 0; + }); + } + + public static void addOAuthM2MTokenForStats(Start start, AppIdentifier appIdentifier, String clientId, long iat, long exp) + throws SQLException, StorageQueryException { + String QUERY = "INSERT INTO " + Config.getConfig(start).getOAuthM2MTokensTable() + + " (app_id, client_id, iat, exp) VALUES (?, ?, ?, ?) ON CONFLICT DO NOTHING"; + update(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, clientId); + pst.setLong(3, iat); + pst.setLong(4, exp); + }); + } + + public static void addOAuthLogoutChallenge(Start start, AppIdentifier appIdentifier, String challenge, String clientId, + String postLogoutRedirectionUri, String sessionHandle, String state, long timeCreated) throws SQLException, StorageQueryException { + String QUERY = "INSERT INTO " + Config.getConfig(start).getOAuthLogoutChallengesTable() + + " (app_id, challenge, client_id, post_logout_redirect_uri, session_handle, state, time_created) VALUES (?, ?, ?, ?, ?, ?, ?)"; + update(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, challenge); + pst.setString(3, clientId); + pst.setString(4, postLogoutRedirectionUri); + pst.setString(5, sessionHandle); + pst.setString(6, state); + pst.setLong(7, timeCreated); + }); + } + + public static OAuthLogoutChallenge getOAuthLogoutChallenge(Start start, AppIdentifier appIdentifier, String challenge) throws SQLException, StorageQueryException { + String QUERY = "SELECT challenge, client_id, post_logout_redirect_uri, session_handle, state, time_created FROM " + + Config.getConfig(start).getOAuthLogoutChallengesTable() + + " WHERE app_id = ? AND challenge = ?"; + + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, challenge); + }, result -> { + if (result.next()) { + return new OAuthLogoutChallenge( + result.getString("challenge"), + result.getString("client_id"), + result.getString("post_logout_redirect_uri"), + result.getString("session_handle"), + result.getString("state"), + result.getLong("time_created") + ); + } + return null; + }); + } + + public static void deleteOAuthLogoutChallenge(Start start, AppIdentifier appIdentifier, String challenge) throws SQLException, StorageQueryException { + String QUERY = "DELETE FROM " + Config.getConfig(start).getOAuthLogoutChallengesTable() + + " WHERE app_id = ? AND challenge = ?"; + update(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, challenge); + }); + } + + public static void deleteOAuthLogoutChallengesBefore(Start start, long time) throws SQLException, StorageQueryException { + String QUERY = "DELETE FROM " + Config.getConfig(start).getOAuthLogoutChallengesTable() + + " WHERE time_created < ?"; + update(start, QUERY, pst -> { + pst.setLong(1, time); + }); + } + + public static String getRefreshTokenMapping(Start start, AppIdentifier appIdentifier, String externalRefreshToken) throws SQLException, StorageQueryException { + String QUERY = "SELECT internal_refresh_token FROM " + Config.getConfig(start).getOAuthSessionsTable() + + " WHERE app_id = ? AND external_refresh_token = ?"; + return execute(start, QUERY, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, externalRefreshToken); + }, result -> { + if (result.next()) { + return result.getString("internal_refresh_token"); + } + return null; + }); + } + + public static void deleteExpiredOAuthSessions(Start start, long exp) throws SQLException, StorageQueryException { + // delete expired M2M tokens + String QUERY = "DELETE FROM " + Config.getConfig(start).getOAuthSessionsTable() + + " WHERE exp < ?"; + + update(start, QUERY, pst -> { + pst.setLong(1, exp); + }); + } + + public static void deleteExpiredOAuthM2MTokens(Start start, long exp) throws SQLException, StorageQueryException { + // delete expired M2M tokens + String QUERY = "DELETE FROM " + Config.getConfig(start).getOAuthM2MTokensTable() + + " WHERE exp < ?"; + update(start, QUERY, pst -> { + pst.setLong(1, exp); + }); + } + + public static boolean isOAuthSessionExistsByJTI(Start start, AppIdentifier appIdentifier, String gid, String jti) + throws SQLException, StorageQueryException { + String SELECT = "SELECT jti FROM " + Config.getConfig(start).getOAuthSessionsTable() + + " WHERE app_id = ? and gid = ?;"; + return execute(start, SELECT, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, gid); + }, result -> { + if(result.next()){ + List jtis = Arrays.stream(result.getString(1).split(",")).filter(s -> !s.isEmpty()).collect( + Collectors.toList()); + return jtis.contains(jti); + } + return false; + }); + } + + public static boolean isOAuthSessionExistsByGID(Start start, AppIdentifier appIdentifier, String gid) + throws SQLException, StorageQueryException { + String SELECT = "SELECT count(*) FROM " + Config.getConfig(start).getOAuthSessionsTable() + + " WHERE app_id = ? and gid = ?;"; + return execute(start, SELECT, pst -> { + pst.setString(1, appIdentifier.getAppId()); + pst.setString(2, gid); + }, result -> { + if(result.next()){ + return result.getInt(1) > 0; + } + return false; + }); + } + +} From a9d72a74f5878e098a25ea8a2d7a8e17269aac61 Mon Sep 17 00:00:00 2001 From: tamassoltesz Date: Sun, 27 Oct 2024 01:18:18 +0200 Subject: [PATCH 06/18] fix: fixing auto-merge issues --- CHANGELOG.md | 19 +- .../supertokens/storage/postgresql/Start.java | 185 ------------------ .../postgresql/config/PostgreSQLConfig.java | 12 -- 3 files changed, 11 insertions(+), 205 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d8f45ac6..6654366e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,18 +23,21 @@ CREATE TABLE IF NOT EXISTS oauth_clients ( FOREIGN KEY(app_id) REFERENCES apps(app_id) ON DELETE CASCADE ); -CREATE TABLE IF NOT EXISTS oauth_revoke ( +CREATE TABLE IF NOT EXISTS oauth_sessions ( + gid VARCHAR(255), app_id VARCHAR(64) DEFAULT 'public', - target_type VARCHAR(16) NOT NULL, - target_value VARCHAR(128) NOT NULL, - timestamp BIGINT NOT NULL, + client_id VARCHAR(255) NOT NULL, + session_handle VARCHAR(128), + external_refresh_token VARCHAR(255) UNIQUE, + internal_refresh_token VARCHAR(255) UNIQUE, + jti TEXT NOT NULL, exp BIGINT NOT NULL, - PRIMARY KEY (app_id, target_type, target_value), - FOREIGN KEY(app_id) REFERENCES apps(app_id) ON DELETE CASCADE + PRIMARY KEY (gid), + FOREIGN KEY(app_id, client_id) REFERENCES oauth_clients(app_id, client_id) ON DELETE CASCADE ); -CREATE INDEX IF NOT EXISTS oauth_revoke_timestamp_index ON oauth_revoke(timestamp DESC, app_id DESC); -CREATE INDEX IF NOT EXISTS oauth_revoke_exp_index ON oauth_revoke(exp DESC); +CREATE INDEX IF NOT EXISTS oauth_session_exp_index ON oauth_sessions(exp DESC); +CREATE INDEX IF NOT EXISTS oauth_session_external_refresh_token_index ON oauth_sessions(app_id, external_refresh_token DESC); CREATE TABLE IF NOT EXISTS oauth_m2m_tokens ( app_id VARCHAR(64) DEFAULT 'public', diff --git a/src/main/java/io/supertokens/storage/postgresql/Start.java b/src/main/java/io/supertokens/storage/postgresql/Start.java index fc2ee5fa..a7800301 100644 --- a/src/main/java/io/supertokens/storage/postgresql/Start.java +++ b/src/main/java/io/supertokens/storage/postgresql/Start.java @@ -3101,33 +3101,6 @@ public int countUsersThatHaveMoreThanOneLoginMethodOrTOTPEnabledAndActiveSince(A } } - @Override - public boolean doesOAuthClientIdExist(AppIdentifier appIdentifier, String clientId) - throws StorageQueryException { - try { - return OAuthQueries.doesOAuthClientIdExist(this, clientId, appIdentifier); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public void addOrUpdateOauthClient(AppIdentifier appIdentifier, String clientId, boolean isClientCredentialsOnly) - throws StorageQueryException, TenantOrAppNotFoundException { - try { - OAuthQueries.addOrUpdateOauthClient(this, appIdentifier, clientId, isClientCredentialsOnly); - } catch (SQLException e) { - PostgreSQLConfig config = Config.getConfig(this); - if (e instanceof PSQLException) { - ServerErrorMessage serverMessage = ((PSQLException) e).getServerErrorMessage(); - - if (isForeignKeyConstraintError(serverMessage, config.getOAuthClientsTable(), "app_id")) { - throw new TenantOrAppNotFoundException(appIdentifier); - } - } - throw new StorageQueryException(e); - } - } @Override public boolean deleteOAuthClient(AppIdentifier appIdentifier, String clientId) throws StorageQueryException { @@ -3138,156 +3111,7 @@ public boolean deleteOAuthClient(AppIdentifier appIdentifier, String clientId) t } } - @Override - public List listOAuthClients(AppIdentifier appIdentifier) throws StorageQueryException { - try { - return OAuthQueries.listOAuthClients(this, appIdentifier); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public void revokeOAuthTokensBasedOnTargetFields(AppIdentifier appIdentifier, OAuthRevokeTargetType targetType, String targetValue, long exp) - throws StorageQueryException, TenantOrAppNotFoundException { - try { - OAuthQueries.revokeOAuthTokensBasedOnTargetFields(this, appIdentifier, targetType, targetValue, exp); - } catch (SQLException e) { - PostgreSQLConfig config = Config.getConfig(this); - if (e instanceof PSQLException) { - ServerErrorMessage serverMessage = ((PSQLException) e).getServerErrorMessage(); - - if (isForeignKeyConstraintError(serverMessage, config.getOAuthRevokeTable(), "app_id")) { - throw new TenantOrAppNotFoundException(appIdentifier); - } - } - throw new StorageQueryException(e); - } - - } - - @Override - public boolean isOAuthTokenRevokedBasedOnTargetFields(AppIdentifier appIdentifier, OAuthRevokeTargetType[] targetTypes, String[] targetValues, long issuedAt) - throws StorageQueryException { - try { - return OAuthQueries.isOAuthTokenRevokedBasedOnTargetFields(this, appIdentifier, targetTypes, targetValues, issuedAt); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public void addOAuthM2MTokenForStats(AppIdentifier appIdentifier, String clientId, long iat, long exp) - throws StorageQueryException, OAuthClientNotFoundException { - try { - OAuthQueries.addOAuthM2MTokenForStats(this, appIdentifier, clientId, iat, exp); - } catch (SQLException e) { - PostgreSQLConfig config = Config.getConfig(this); - if (e instanceof PSQLException) { - ServerErrorMessage serverMessage = ((PSQLException) e).getServerErrorMessage(); - if (isForeignKeyConstraintError(serverMessage, config.getOAuthM2MTokensTable(), "client_id")) { - throw new OAuthClientNotFoundException(); - } - } - throw new StorageQueryException(e); - } - } - - @Override - public void cleanUpExpiredAndRevokedOAuthTokensList() throws StorageQueryException { - try { - OAuthQueries.cleanUpExpiredAndRevokedOAuthTokensList(this); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public void addOAuthLogoutChallenge(AppIdentifier appIdentifier, String challenge, String clientId, - String postLogoutRedirectionUri, String sessionHandle, String state, long timeCreated) - throws StorageQueryException, DuplicateOAuthLogoutChallengeException, OAuthClientNotFoundException { - try { - OAuthQueries.addOAuthLogoutChallenge(this, appIdentifier, challenge, clientId, postLogoutRedirectionUri, sessionHandle, state, timeCreated); - } catch (SQLException e) { - PostgreSQLConfig config = Config.getConfig(this); - if (e instanceof PSQLException) { - ServerErrorMessage serverMessage = ((PSQLException) e).getServerErrorMessage(); - - if (isPrimaryKeyError(serverMessage, config.getOAuthLogoutChallengesTable())) { - throw new DuplicateOAuthLogoutChallengeException(); - } else if (isForeignKeyConstraintError(serverMessage, config.getOAuthLogoutChallengesTable(), "client_id")) { - throw new OAuthClientNotFoundException(); - } - } - throw new StorageQueryException(e); - } - } - - @Override - public OAuthLogoutChallenge getOAuthLogoutChallenge(AppIdentifier appIdentifier, String challenge) throws StorageQueryException { - try { - return OAuthQueries.getOAuthLogoutChallenge(this, appIdentifier, challenge); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public void deleteOAuthLogoutChallenge(AppIdentifier appIdentifier, String challenge) throws StorageQueryException { - try { - OAuthQueries.deleteOAuthLogoutChallenge(this, appIdentifier, challenge); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public void deleteOAuthLogoutChallengesBefore(long time) throws StorageQueryException { - try { - OAuthQueries.deleteOAuthLogoutChallengesBefore(this, time); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public int countTotalNumberOfOAuthClients(AppIdentifier appIdentifier) throws StorageQueryException { - try { - return OAuthQueries.countTotalNumberOfClients(this, appIdentifier, false); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public int countTotalNumberOfClientCredentialsOnlyOAuthClients(AppIdentifier appIdentifier) - throws StorageQueryException { - try { - return OAuthQueries.countTotalNumberOfClients(this, appIdentifier, true); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public int countTotalNumberOfOAuthM2MTokensCreatedSince(AppIdentifier appIdentifier, long since) - throws StorageQueryException { - try { - return OAuthQueries.countTotalNumberOfOAuthM2MTokensCreatedSince(this, appIdentifier, since); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - - @Override - public int countTotalNumberOfOAuthM2MTokensAlive(AppIdentifier appIdentifier) throws StorageQueryException { - try { - return OAuthQueries.countTotalNumberOfOAuthM2MTokensAlive(this, appIdentifier); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } @TestOnly public int getDbActivityCount(String dbname) throws SQLException, StorageQueryException { @@ -3335,15 +3159,6 @@ public void addOrUpdateOauthClient(AppIdentifier appIdentifier, String clientId, } } - @Override - public boolean deleteOAuthClient(AppIdentifier appIdentifier, String clientId) throws StorageQueryException { - try { - return OAuthQueries.deleteOAuthClient(this, clientId, appIdentifier); - } catch (SQLException e) { - throw new StorageQueryException(e); - } - } - @Override public List getOAuthClients(AppIdentifier appIdentifier, List clientIds) throws StorageQueryException { try { diff --git a/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java b/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java index 3cdf80aa..095badc8 100644 --- a/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java +++ b/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java @@ -434,22 +434,10 @@ public String getDashboardSessionsTable() { return addSchemaAndPrefixToTableName("dashboard_user_sessions"); } - public String getOAuthClientsTable() { - return addSchemaAndPrefixToTableName("oauth_clients"); - } - public String getOAuthRevokeTable() { return addSchemaAndPrefixToTableName("oauth_revoke"); } - public String getOAuthM2MTokensTable() { - return addSchemaAndPrefixToTableName("oauth_m2m_tokens"); - } - - public String getOAuthLogoutChallengesTable() { - return addSchemaAndPrefixToTableName("oauth_logout_challenges"); - } - public String getTotpUsersTable() { return addSchemaAndPrefixToTableName("totp_users"); } From ffa0196dc3b9e7ec79238a2eee3aa662a4b66fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mih=C3=A1ly=20Lengyel?= Date: Sun, 27 Oct 2024 02:01:26 +0100 Subject: [PATCH 07/18] Update src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java --- .../storage/postgresql/config/PostgreSQLConfig.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java b/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java index 095badc8..89aad8b7 100644 --- a/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java +++ b/src/main/java/io/supertokens/storage/postgresql/config/PostgreSQLConfig.java @@ -434,9 +434,6 @@ public String getDashboardSessionsTable() { return addSchemaAndPrefixToTableName("dashboard_user_sessions"); } - public String getOAuthRevokeTable() { - return addSchemaAndPrefixToTableName("oauth_revoke"); - } public String getTotpUsersTable() { return addSchemaAndPrefixToTableName("totp_users"); From beb503dc60428b64d7a22d08d2d59b93e4b24326 Mon Sep 17 00:00:00 2001 From: Mihaly Lengyel Date: Sun, 27 Oct 2024 02:07:15 +0100 Subject: [PATCH 08/18] fix: merge error --- .../supertokens/storage/postgresql/queries/GeneralQueries.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java b/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java index 3430c41b..83d8bc0e 100644 --- a/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java +++ b/src/main/java/io/supertokens/storage/postgresql/queries/GeneralQueries.java @@ -656,7 +656,6 @@ public static void deleteAllTables(Start start) throws SQLException, StorageQuer + getConfig(start).getDashboardUsersTable() + "," + getConfig(start).getDashboardSessionsTable() + "," + getConfig(start).getOAuthClientsTable() + "," - + getConfig(start).getOAuthRevokeTable() + "," + getConfig(start).getOAuthM2MTokensTable() + "," + getConfig(start).getOAuthLogoutChallengesTable() + "," + getConfig(start).getTotpUsedCodesTable() + "," From 60d436348635dec9035c087de92e4c6b93b4d262 Mon Sep 17 00:00:00 2001 From: Mihaly Lengyel Date: Sun, 27 Oct 2024 02:07:27 +0100 Subject: [PATCH 09/18] adding dev-v7.2.0 tag to this commit to ensure building --- jar/postgresql-plugin-7.2.0.jar | Bin 232868 -> 235310 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/jar/postgresql-plugin-7.2.0.jar b/jar/postgresql-plugin-7.2.0.jar index 86ad2a0a500f6426012719724c6cf997df888727..032449c323d0f1677dde8ac97d3a43b76339bae6 100644 GIT binary patch delta 76703 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 delta 73918 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%0ARean|i?(00&VQN4Soe%Y_2U8C`4Fu8&P z3{v7Z&z)F8b;Vg$7ESQmgVAfPN58xBulCpxQ`OV&Te*_0Mqh-i(C>e9<@Jc(5Y{tx zi+=*HZtSzVGQI?FNcx%~DI%@QC#)i-PrA<09FxM`yg57~R~p64;676Gr}0Zn8!608 zo&!7)ys|eZ^m5(mQY>iy!udqLCkc#i7FO3bAGe>|zVds8xENp6k(~1oy;bjXuFbF# z(?PpF>}A9dJNk{NpL_bie|pEUBQWDlif}sR&d!_us#oDK;KkA#Mlh!2deWPEt1n~+ zA}7325f>O}zD+I=+1(>~&G~Hc0Xlt{L)v8jtkIPcgB9lOe>_DMp6A_`Iyx>!s80=q zeI`{J!HOt)W7;{A5d#<0!S9bj#=4VmB(TTiyvB5d``Da{L0NyU-No?DeEwyRPIR|7 z$oU3wgC;n8+#AFB>d?p-Ocz4pz?1m9aBjfFvP7DFcO<=sod<$a%beUV(|W^{AIxp_ zr(b&myF&_5wB>01z3}yI<4nY-rd~gAtMQFnR?0Y!*8Xt%4vWc;d-c+dwUCys_Dw~j zPhTulBMzqESq4=NelQxu*LgE>M@!&;1e0+7NWw1aKNDb{x(9QT>DSIy3^fVl3=dltslH+k}*~Bwh`2z2k)P3s{&8Hg!K!xt*uYv^vb;^bAh-4BB=T6jc|7V87)n zC=B}rawz_dclO8r{!d6U%KQ=#nXpYezgVzeDAr{Vxq`L>CYoT^e0K*LyB%xJ)JAO^7<_A8agRu zQH`@xaUUo3f=PadiQRKGFn33YJ>J|)SJC)j#a(A?3yFcv3uZ1AIw_z1?;`xvVca>m zVbmF`WV9V36xopi4wOj&Ka>N0H(xc^SL9-X4>pMGOY7ZimZ%D4G|-OtsB zZVg}VFj+U33YuJ$%_vXfP-n$pl+E(F>|0cSvz}ZmNG}Iq?)+o}50O9A5*5GQ(W9jm zo?Fe=wZVbRF-R3YHyS_4)N_gH%r?+m55X4sMBHF~6!<`4Q@Xvkgk)IAGg%x(}T zeZqlbNg6?41NYJt{mQ8xm7kc1PrR^W`_#2Q`@3f=Z09SY>NK=yG~@9pH1R7>QVYaR zkluI)UInH01$&7<>H{*AI5-Q=#e8DQgkzy7so# zGpZ_G_DbV{c%wsWgMRg|qaxpBq)c%H3X<4)G+5V^l0*C536TK#c<|@|CXxHPN<`?o z)eI|I>$1v<(r~5XsjeS>WPoxx1MDVjb{mO=hP8WslLZ*#dmv~8c|BV}23;e&Wdxtr zr=12qHF!&mc1rZ>AcwLBzC||r8sDmwz=*u|?jA321t%d$Y#WVtWfhT3-HErvxYcxg zRU3W?hZz!efa#ci&LCDQM2QrxI6_I0e5ePN8MAD_{Wn^IVFA|w$-G>XEaxiAhRL`y z+NbcSGjhcuWj(~uHPP%f#6r*r8~2P1PRydUeQrvGGw|?lgEP|bhm#(Uo=hzaMNNWj ze4jTERhF$p_Z%!Sxy>`r8QtZFhI;+NL4-fpWc)2#A|FDcdEEE!b%hZg-q~udrJ~u{ z4j#ALq~vD!dT|lA6QbIg2;gD@@Ms|-P-bez;>`P@s9dUveIm8U$q^KajEL$i^tD{I zrk)+0IxZdYg@4vtIXS%?As5K2nGdqsL(@MP-~Pn(nPQi%-nosUpoUxeR^ zq#kdklS$|h>_>84XY20bYSX>9ET84TbB4#Fnt zVMyCkNZWtCA{2)4q=vq@GiglL7O@Q{&*5V@6eSj~E2rn0^fP~hMN%tEiI++zr~nq? z@BUhGf=K{D(~&WVlDG2I5b!9v=hFn{U+LmKDvDP~ju_*g74h55d94&a)$G|I@lFku zP6UR`5(n;l^n9bbrnkytV=YM9pr$>@sF21{?x*1aO?XOJbKgb}eG3RG>4cU)_jC;? z-g7KeyJi1wfS{QM`c8ZB(-Mhud>5!4>*cLeJzVpgyY^#^cuKS}C&sE9Bw!|p>q9)2 zl)-Ui(#3a9)sy6hd(xPfsC|*er6Sv=O1RpS;w<0qWAsvsHr_;T6fz_BpNuB}w+b?8 z^Ht_Sd1`$4a1NXfRAzn1uwAQTs;b^l2YOW3&i>-zHTdX8BD<)@f)kCwGB#i&{NVQx z-}E0x5Se)zi%%l9Jc~h#8cPumO=@kctkehY@TG31Wd}%&H^MjGF+Z0@40O9jP8$<8 zta2Lacx}Ktv~jn69+eSNW?i7$^#!1sl1&`^=VVyG57M;aSAz}Jp83{S9(5~{#vs$0 z!HtG5PXyv>6E2qO^Xvq0*Svvr$m5le#4%#@k_j^6evrh~gcmoXU)UK&GhVMgEMrCx zNa9XV9^-vE$W`KLwyfGNjY8!r<=5SNtC>Bgq!SvZrb{oSO>ZYBtQ_?!I!zhzg!b1q z0mx2o-TlrIw>rVU6Ithjqq@x^71ia_f2Q=3I(>A(18w3>x`Yj|ydr?VrrS-ZyzCum z`&n$T{wC(vbZ-uRM1-DP=EiOK`@s*WvDInkWwhWSTnNB7Jc-t=AodR;-Y4lY$?-v$ z?lL+Ax`Rif0R!p>GHL)F2r1!i+uv^(bRxPr!=AQ%Zv@U!iF!nz|E4~}WMdHZo9|v- z3*I0-1H7dJpEC1&+)RT`U#f1`s9+{qKDz1@#4GMPA$*T3lT&kJU3|En&%WH zVLm1ip!@Q*3OH|=@RP&BSRb&(HiXacyFoN#~mOd{qU$ZUxc# z%g!cs!|DQH@o9EV+o&$sw>jL4_rS78zy0cCo6FrQrX`aR_jdwjkd1)N%2AM{pyo&= z0$}*yh{7-52(FPqfyn&V6XluG+{FXI^5XRPsTxoY=Lp-#{NP+-jCdgx_=R`uA~wxF zico}_L3gD~6Zuw`&@Pkw_vWd_SUVd2S3!15FVnFXhU+G7kI#A|%2YQ)0u^~iI+@kl%v--g2ndPH;$hGAy@iDa6`oH!0w+|J+BFuxH+sYQ|Ymnb^?jMQnS^GCq zz+Qfb34Xl_yUwdRuvtk1OiKx>{D1&1e; zS9wPXepiI^v-`>QjnnGOkJWW7BIjr9kp5w@i|b%$BX~w<)?JcWsR6!jUUEEs!C~x5NYN}+Yl8{jpX}lSFg3^#T%cO>oQPq#2)ek)T11(qN;tCfhBHJg(6ku5g>;y#;Q4X`bPWgGvG8 z*&28=Ldil+)L`0liw&~B(2#1P`E)FVtcHvCl`^7*gJXg~ha8X9@C+Lq!HOBFM5-KF z&<)xLxDXIIr+#7X;qs=*46g|@M8VNnVgk!INLi*gE#RyQ=zmAK`ZuGUITd)GK008 zi4fa>F?C^UFEVbo5tSk^<2*edEpL>xjy8bT!MwnsFx{0uRK zo72a&$C_&D4JwKK>5nngZAh;tIQG1xhm;Q4kFll41=bdx=M29@W^CyHDhvGD+vn+B z+WXe$Y2C=X5W1rrL!JEn$2b#)*MV2TX?SF(ba=oow+-md3UXb8mMv|ISrW(KuPVW7k4V*7b`&Fc<1Ddn5v(WN;F}< z0Kthxthil@Ngxt_hFN-!x$S~pE&Gcy!GsQ2^9>`HiJW26DJghQh4y%ir)vs`$(pc5 zkgMV3YQ7DN&j+Yw9GDW}} zijIeg0Cs=1(2Nd_bZvNzrAhi(JziaXM;HXM3}KTD-*J0o2+x#P3fL8xVVwk=pXh#p zW}{*s(zqP2tj$56o&({m;dqmij0ZF-jTw9}!*HmEtc~Pn)RNP?B92A_dARv&4X~z5 z6k|8D_B2s~N|pcOyes~Fimh4no+i;akPQ->W;;Ggi(c4YSuhC1Kto4(CsvakkRlsQ z9Q&lFgydX6f=ie)(Uz8JO!RD#qOrlMGe-?KVF@=07e(i{`QQ9ctw8NsM~qn4^BIlhoINwJpC$mCFlVpL;VG66BWmDBhPD= zBBaxUfnQZ1xZ2UhY)~{VWb@Cc9YgAfEXE6o2&Z)M6Ro8BWL+9$Q%ff@!a|4qtcu4W zv`@{qv6X*6;&!qFH7u9TqMOZ{xkte?t>uj z05!e#zrg^*Y%WzaUP&~(oV=23$ErGa43)fPeDs0!S)NUCOvrpibGP@KbXo7EWAav} zPHO9E_o~xm@-9dyGm5bDQHkQ|nZ7zqaMjUUz2M~a(8vKuX{+@Y6mgs|k5g|Jd6p$< z@C^d@KfpSdEx0scoZ|70xgL`Vi@~u2VQjx{<0yWnMR)AmD9PLfclfuVy_&V>0)B18 zUl176@FO9$`wig&fl!1;50WFZ*p{LrJ~U8;^=1!9gH=Z0Tm9S2hFWQim=={fxkNUFwU+PmwGx1_bKrDJ$0by+pZHAf zy;ZLue{bF?bz&8GG73NFg`alfFM2_ix!qlfb{0V^befYcn-_Rai#^zhJY;(@EoxI@ zS^;^E&NRtrkbBz`E{7tVMWdZmhCh7H=iz;xDkdJky8 zIZ7ZPs^Z1Rj0|GFRKI)gGu4X4JlA2Y8aTQqW+&VbuQ!qFuA8(q4GV3WmDo0sUz-dv z=!qLb>l4(>U*PPxrbpwB_b6t63y7qXVg*VFH8GG@$2Hb8X5x~$L5A??p6Z-W&XOIwv0Cr;>s6Ud!N^*7H zzF7^-cPA6jH5=;^i(aD4bmJ(xhyj12l^8;~^T^|w^N8ri%qXT{7YD-D_E9WA?&{#t zbaUZU9-tpH$h!pdJfQ0Y@npC)E2`6!oht-rRfOH!dS7HA$Fsm4NfHEI->HKlyPG=q z$msZ~i$n9RVz|3F_W-JT7L`Ena&-Kb#h~AcXs@-jyJ;JJ|F#};&ciUWR{#;hs{K>C zp*CL5W>P)}^Ui!vN0EQm|El`3XgmBR0YsGq!b*OkMStA;M(WX?-X9~tP`%gdClm71 za(O1lo$$PZbG^Fa`#?t%%Bmcs>Wf8JQRj0I&;>@ng6A94&N7uZ zVSNys_pA+Js$FEgL@z9>yDeZd9hRlcVX;HIMLjSg4}DXo)I~`2Aw%vKAKwoBKp!ibWIJ)dPU&js?KHO$P&LdnaU+Mg ze`W>FMunvD@)vTPZ3FF$jPrITrm|l#G(7qIObjw#Z~Nx<1_T-3 zKv`6Wjle)HByc7nsRu+Y{J|F|(iG0{yY@az>-_neOFDs5No(Mry(g-X`ZOtF250m7 zN3xNe8hx_pew5+8P_#$m0klDY=YTj5^x4;eS_rzDXcfpMdEYmF=35XFOKvZh31DhDx0dz z9k?PacwDNhZN7}l)-2G%#= zi<@`{mk5Vonk`yN?&YR`)UGn|?srE7CdY&poX>;{?Zq1omkv>aE9GIYg&P5vKgH4O zi;g8cO=Wwcr!A5ML`uWM3pX*R&xJf60D>H)VZrjfyKsN3!SUxDo9^OuVDBg0+6U#P zn%m~A+h+Zh_wTDW-K`g~y=R@~?glU5hsv9z{@oa%|cPI>zri5I8>@7koA zk?ODTtFG`%*T-Gjm7Cwy6pR~dhkh@byF9KcJ!;nbxHkB>!e;|?@Yt)+Y@`)9k?*@1o%DHzLm4Q>+lHXWXh9u5=2R^{TIIYOns-{3)y6Fw<|J?{bat zx$qTz@v9ZxS~cDBfU%X@^w8L{@>uA)liZ_mIZ}9?Vtvdyy3hKRso!+fQC!=Zcl9>e zb=P#0-FDa2bw~2?%I48eMD^Y*Ul*X}kwd%F;=mR*-!7$730iIqob(c_ladAT@^jI2-Q! zc|^a;?*sCxHM9g;x#pu0ot>ODk0p@$tp%M_|DY>N{v}n7o{PIb?X#4SUM^CE_WOwp zcLI07hmjYncfISt!+{0yvvyM#>qj?@9u3K2o1$ZGj<~R#)Gj{S;S#pz6y>aWo&k1) zC5mUBt2I=IiDA#LAWE9+{l7n6cs~sXOySg-27pZ4<)(svuo{1yl(jbYJD?5qd@U*r zu}7o8Ei;cP@{!cx47dn7i_-5$t7A;P_I0#3)m#V|9#_G2A`eB0}Ib&;3T`L@CC0c|K zr2_s?uNa65k7ewXCYB{CD8sVxoa4MBV=8d-8N5C$O#O6;F_XHHKp!vDxS#as9ClN{ zK~P=7$g>ET!$e{evMEN!WzjEjOrf^QG& zH*1N38UJG!H&e5M7oh+1UvoClZ2bSJln5G7xqn0JG@xc+i2rlsW9!)X;;(3!hEACk z1!HR7yaHSP&)M6wL9Gz~3jq8t*2h2P_5o`DpQ?5NZTqhy_wQrX|J|$qJno16XCws) zy7wPQx%(v;?%%z^yQhC6%?xm$LjQ)E5AZVuCtC{Zlc6pf`m7;!857Gz@7PRg=U-6xpqLT!Cm)*rpx!%g zq)|*qUO?(xP0R8yJ4#!fa* z$Z-$P#K|TVgc6sLU`lfC!i&$(@^@3}oOA%Ono7Lp96iL3*@qJ_)ZMj{yAI%%(X&5v zR{9Q>*4ub)l)beqA<=-6c!F$~?0C^~pCvh&-K+xhf2XUjB}YW}rE*KM@s zp$+R6fF~k|iz`eddeo%c9w*ct?8gPgJP-?Gp-iQLnr%NCPn@5RK_WB9egWHWQs)31 zG1*83WU+}eP0U!g_{-FGjUAM+l?zuzIO_CK2S}tsN|GQpiRwh=L944?Rk6S~-e|}s z886gXJL(K`HP(z-!?yd@ODK3iS&%`L53 z(*%HyAE0e|nJ#UQ-G7^P!t9I&>9Gz>_`@;MlE~*c1uYgGt4DmhOZ5Z3H}Y3 zujNN@!+AyWu)A!y@9_1Ce&{gFCz-}o+mjcUF&jLbb1Q9_rt(p+2Gob1r=>4fjdA}l zAHC5PWKAvMaySX7!VC_Zp^1AOAmiyxGPRR1)Q%yZb$X!BYHF zVsl@K+3p;Nr)wJ<1Vrfv2ngSQnUOjc92GdJ{mlSx5hW{*qSD6x ztE*<#2xV9%b(qcgv($(%1G;v!sR{2*5_qUmVIvu-j70oAgx1(%LQ^89NscrYf7pDSscSJOFy^~!`VR|}#bHLFbB z@bHSHeo9bisVKnj3^znKoFVUVwTE2+Db#)t{vI;asM0o~)Q(F?DSnXB6x0cM_$Gme ziVfTX+<612v;ETKoA?T1#vjZ@9;CPmk%NiPMLUN=Y%I9A)^mj{rkcVh1UlCo)x@ zGas5UDAZa-u^$>Vq8RgP0EPQjDzuQbeiDlK(7O`)8th&!M-6T@D30H8xoW}n1~ein zhBgUdid>s~1643^KREWnQU%cg_piekfpA%?q4L#KA(ogL@`O7%so38j=@li_BAsXt z`=xR4Ck%jT#I016s-l(qCgr9Y{WjWsmx2|@E58J5sl>dQR(y>D`E?jY!M)s-;wya* zV3>(bh%1`nGdP%q%~i-k{J3+q@*vVvuhnqYQm;=7ud|!7g{P`DB3<^ALA&@&k}x7= zv%aNQ7^p$o#P9qcRo@)kN%MWZvAwZv+qP}nHa^M5wr$(CosF}xZR^eN`Tq4*bxqy6 z)6?BmbL$Sy?Q?X<3@nxW>ABFdWt#BsLIPDwoBwr|xlMxf8sjzVk%QTJsC;>MYi zhU5Sj$(`hU>>2S@1&xI(Nm92dXB8-!h1EPJJ|wa-9K`d2PVtCX)Zo`_O7X@#q3bj& zkxd#wgv);_&oLG(RWHP*JAr(dZvA%aA`nY_bW!44pK5XG%F}^@M=HXQwG&1MQytSj z7O4jG!ynf&4x9+*>q|DEZ{@ovR4T#=n=Anj8#OjG505@HQ zyW#DohBaPC1OLd(PS+6YgqZJdHyS5HEuRdHk4t;^|vJs|44V4lNT3Q&6)EP^KA|Q|iz0RtS-=cgax= zst|zT391XCosmdWW)}htGD>2OmKhO3d->sQa3sY;5G5uK{fH-++{7ni+lwNG@d>yq z0nO$n4oDNi6)ZWBX7a)85&8#+CT*{rP~~+=?YF&wtPJQ4aWI&HF4N)TvY3o6qKR7H`17X zV7(=M*9hRuQ@=GGKmDL`#5D9hCiSG6g(Si&%iJpAoEo1j;uvUef{CQA4_*XGM=F_| zr1V*K5Pmq;2$#{aM}`PfGHhswgbtKiG5h64?kh|g)@MFt)em7vwaxGRh^;qOM`PmE zf1`}5Fdj%b-kJ?$Nbdm#ERHI}d_qp39i$!#G<6^U@``50<;BW-5DOks3`|%adBw=_ zQ+KP8(?=ei>9Srn>H&mK(){$GrG;laIVb&swBXBWXHPhX!-*yqck}!eaHFUkv*kSl za|)XZ5o4xJis z!QI}Q7@?$*TF~c8EfU5&Pa`WTafCkB36Ct3H8XHUs-Dq>9~n0oV$Nvh-u(NRB~ASy&3;<=%PpF6C-Z{lD@<0cu3`l8Nl=Q>L&N80}QpDaE7uYxPOC4f*jh8~%?Ks2&{#@%q*`Bi2 zj0NK`;P*;&X~VUXgqf*3 z_HQLgPsm1F!3q+GJXm%So}p(~_O|kwg)Y9l)=i|vg$*-0_ce0hx~Q6a0pvFprqD3z_<@u1aSpsD)6@jAfimTzzp!ub6gqR9{4LKt8LD zVn8}J2TBUiP?-VSjL%y==)gGJACI;Mr(_PNmnBh_Izn-mqQAVX+-EduvY)-QNr)l1>j8!LcpR)jfn&c~jRUWmJn%GeJ-(?F}cF z8|GFLcdRYAE3lSzOnIE7^dK|kx|;mG8b1icIsL%B%x zM&Xs(Q((c+Hy9ab;`vh>cT)yy9cN`I4(&)W@K5oVIzVh?9AG5!cdM9PRz@Ybf>aRj zZ#Pm5L0(P=HLe?m5nWuE)&i&Vb{$#{Pm|cB!nj?S{rI z*dzR_PmO|)hzwMb9(j}q@viX`uCFhEFSe7NwY9s}-Jov!@)DQivh%H*_v*{{>7MsJ zK|;q(R@?XOV5Y|}*4>;wljdl7)q?}Oj^vl(>rf-bGMwFOfT5u z>LOiX`!$Nh!c$47YDJNd?4}m#zOEQ``U!U{dy2(YgfnAPJ&hihth)bkmJ$G{Eg=!O zIljESxtQLG6~97yM8uq@!PyOkMG2cpTEoo=a7)#lo5qs)QiZ%SIz*B88jorzO0!0^ zp7kGmM{#cQ$RJD24nosm{Ja`#_ORUNT)Aac$w58v?6UO<8a+S)E-uZ$%yE9z3!P&G zssCHGgN<055r`^-=IW_dHwO(ke#aEC@{-=@@KS%fCR{LSf4L@F=zQpn<-j$U#Bv4y zIN%CW=m$duwQSoX_JUz{?=@@JJ{GWZUD}SSGxYzds3n8odVlvCYvI)m;tgKzS?bxm zy1JB@DImlBx01T6eG3k?O}4*rD>iY{I3t2TD}Unf7)us=dFSYRKK~8)Ce-`Lt8jWV zFXeurzQIjO2y1mu?pO9`j8e=h>vJdOfKeMHI@eHuepcPF9bTN>LuY6jagPJ8 zA1Qy7(LQPt?M@8v&W%Fq^4G#Qs79FZfD}f>XxIrwvQz6dC;7&?m^@tjt#nUD_SnSe zE1Uy#?3SASIqME&TOkL?P2D+MC&l%B%GbrU;fM7AFO8>}0|f1Mi;pPcH13QdY7L=H z8q+_Yve1)bj;2R>o2txN_rD`vjoUhGf%i%Fo82z^d~}Yl&tMysuY>nNxN~DJ%h zF424-`~4q-P8wn7k4?HTKG8mSgmMKIx7ZiCPi)Fs-}j&Tn);yWKG4%6=*Kw*HlL`g z9#t_Bb{xRqwQm$bS7clg!ba1>Y9~FA&|hSi-%_H`nJl*jS2>JfR^M#)6M9EYeDy~@ zb?y)}&O@25j1vHWpgPN=e+q7OvS6PmWEZ7OSN+|KZ=BYjLL-D^Z|abPmN8lMKjJ%$ zr|{A<5)jI%t?uNOUJ;gFS|dO>O*{68R?fEEBYkM__wF`t*QOWZ2+dz(T7U#cb}yP2 z^q`gFz;vGL1;k@%Or56(nt*j0=*moHPqL%6i~+rYCw4%{-eNwzo5 z-%$$MdL{I?ZP=AYrl*2bt#8BXW7CU~d+Hk>m>vz29cgqc0c2x_u~pH4S%V@Wp42Fo zF&|Div!^T)V+b!q6MK?^q4mKpjx`$02}Cti*8%Awj1*aZ)cz{D5H1gB*bj(pTK@}u z$Aw2sD^|c?@`cj!U7$Yi(~)1j`IYJJH9^}8s%qqY*E`P-n$Q4${)kY0;d`mHxR6AG zY=2L_M`y*@%K6~spQ7%fc~f1p=D*Qg4MxyvKsYOlG$7$Mm3_dK`M_BUaC92*=81b~ z9bD~RofW`epnwv2n5ux@K7A+wu;~x%O-#szZ5V){lN>}jBld!qQd5A64Uxo#WPBz; zGfI&x7~!X|z*{M}CAlxt89F3I&j=-xa%n>pg14jsJGy?g+{%!&4n@KoK$g0RQ`-Wc zx2Mv74uDQnOB&tP%yow*+t0an02lvaNMuY;*&RlKNqF}mvbFW+fR}pAn=Ut-c53Ev z%?%I}pC{~j;iIDzp6@U}?_(~&paGLzJdjlw}@>)&UMf`e%qEZ8KX1t7(Z`tCa+ym-^ zXcfcZ*Fa3(Da(T8&*Q3>e_D!VbBhdHmC2;YY?3jm8cM@3iyr(BkV&|U%!9z3w`@@D z|AyyOt@LK|+t3F3H_@yQvKTcXfTu^$sxBQ{S9VFM*)gKU2s}~kN(cevioW0Ig{gg! zo#TkECmxG+DjF*@+5?U5(1vY~DJFfBR-9Wh13{Xz)+|9a+;x%Mv`;U98tkGs9vsFO zZ_Yq}!XULOwSr_t*!|C-SRnxWzVQsGWfL?tz|YLe4C&VQ zWz>y-tl#MjeSlN?5XSU#Nvr{&*5%z$eq!>ULXAFz9P@&eeHLh0c=^DC52$dQd^)D>r(En%8M zlBnKV;zG;6ai2>?vhkkQl1Nf5hR&HdC-5As<30E~yEfmOnzjiNKiMI0&(0vLTX(qZ zayct;E8Y^4Kh6;aP&%t_zm$bAkDO9W^gKf8K_0KWZa`g3VZppE!{*$~0(Lzi`$|{Pm8+oF7q2@8Qpx8; zPN^?@t6QuSeMI_krPDLMx@p#-T=+G}gV)eQOM{nyw^XqJfQ4z1+#p&5go{^M@F z)?Yp4yiLsW+_H~(g79k(($QDpxPzMI;r|-wo2NoDGw*85F%(TGSc(?hBraCU^HGUI z!mlo1s~acWFfBNdYVZOz5JrA-NcJm40y;DTD;7j|C&bCp9p83F9YKs5lF&{ubTKOy zSk_fJ>3+b#SeMN-s%cfp?~F~NsN{~QNxA;_=s2Y!@QBL3KkDaqJxX*~FS_Kf?O6Fy zO>}0+GNLtzUAaR{{mFF3gHUbnzkRwubxOp((k-VHC!k{biMnLWWk^foKg$nTh^{A> zC6?OfJg8rpGMBa-ps$46FxmJaTQ9Baa(KX$!7TuFHK@6{Xt}vaxw$C0x%^=IEOUa7 zOZy%;3FOis8&(`rBQc6nu3FN$h{}a(Fl|-?!Oqmi~QqNN+aM8 z1h`Uqfosd#-vl{-h7z5ycpm3x)LH#P-&Sj`8#I-uY|--nnlW|`MK6-r(XbV^RWfYI zjB5kR*RysRc|iJsB1{9Du0trWaZ7|v5SsS%R{y*kkY62-y}ugH7ZYAD#JO7r^hAzk zAp5myie%H_S<7_A4r4L*8nZ(3e;8)7|Q(d*r?A$N6K^n(ngQN3`T z8Ea~GPgiNenQ^O|Gb?vw=BJqpuF3!&S`k01MF7~Zr&_uZdbNsrwZ$ioA0n(b z+^plK?yv=%aC?ZfCD4vxeDUJc_48;f8u+|mvDg$!zULlLodR0z0+f!FT#$dQHu1{m zFOecrRWZ3u5MHAyu6{i-DM)811+k>3G&*wz{!&fPc9XL(HEaxxEMP4~SRkb@} znBj;%Gr&R2KU1kdwbd5Mvd@(lG??f*VtR!RlCE69EV?Wc@0{ke^B@~w{@Phc<^J! zBJ-t;`Y6@U=CIj$qzZO^fznK?ufc&2yUZeHeI{12A4;5YW2uC*#V`uZ3faAyfvk%{ z<%y*8q@RzhOMOzEScU8l*1dg2==fMgye|%q-SZBoBJIYe%wBW>zgC$nrOgjq0jOT( zNhG&Xo0J6_Wx3<7QjsUlO6Z9`A0-jd8(3?2-~JJ!I#q> zh@In}gR5#Q88WNV9dz(j=atA=7QAC3C3EuAn>S zq7RwP9jjT6M}}u=u)%wScmsLa5w_SV5+lWUCHPiU-1>qf0yA#`r`JZ;GQ1nNKYqlw z0Obq_h8Ds5;4D0WDg6l(L)iV_D|P{{X?b6hFOSI|USPd?_DO!z|SZ{oizh+R}})A2))=h^1VK%p@+(lz|0)mQmVt-=cNS6+sP=!bCpsu_0Ox=G zrcZ$C{?nFiJp}@$2L8`S{sdI@zblCQfKLAh(TX|&ng8cYge_xEHShv~Kmhsm|1G0& zf5YQHkhBqTQRcs{jruDA|E;01I34)Ep;KqXK}7$X15EmK#Q*scHS(nY zt9k&HSq#<&`t?iar%FOF@fMskQJ?@e72pAa(pXet`rmpQ;R?+DXSfx*{?E87GW?%W zl4tTiV1_&2S!grvM83DvakMI<+&S+LHbEvPVY*NED6~ z*F29|C8jynyPJziZaqHlswDG~5d9P~vMixq36XP|qB zK=Kqf&WBgW$&~$WDB~N3BKvr$XmJj@TVTX*wI{u5eV5=a#6~rpxkC;M0F+n8>i3}-8 z0z~q&>F#HbEfb1489`0+mGmYx(QM~?nS_7RH8J!3mhW@UXO8og=X1};R*cdXDXUshB{ZEc7P;M#^z`Eod3sg$N7fByw3tsGW!~tHE;g6u4ILG2y zq=?l`eAhZhKUV$w4*2{t1$<#S0_`5cOH}Eo6Ge$M=a)nxJ@Rl0rvqfvN`BBFXxf;8 z6fzZVzzp1%fh@xrOzm^i+XQyznYtQ|?&d;MOFmZmyoU^Jpyl|>^TQkufIVrz1b2c% zCZHU4;_u%Y*55kU+X{N5d>CyYgt6>T`<=y@i24rpdbZYO-9Ew;O@uqt+lWwLlc~G- z!aYZrpcheZ_4NpV62Y==X2eJFaPn&H3An9AkNBalM?Za!t%IeYeHZvchQNM*xSo@W zF#3Op&|qPjFifEyPE`8kfa7!=GsW50Rptf4Fvu5S!9qX>fFpFx0W=UZ2QmiR*6Lma z&WRQ(bRC=bk`E?JLRaD+^ozD68V1cJwi7bgQJ)U(kz*PH3}VtlcL-M@Zub1$`dkPc za8mx4gebwqy+`X}-qAZR5FlvL*b40cCBx-+sHj3f#=+^y4On*%z`?f6)wp0LO#x*} z6$cGO>WP4fU0T7O#sjN?Ko)vKsa8hs@=qZqtRR&f|FrX2dC$!Q+qanf>U9W~M#-QP zd~@BO{yGH@VNa5}uewAqOP^iR95ozwm@|fk?Y1EUqw+z>=JD8>zxg@+C(A8&%0lsX z0v3Z@^5-LW%fBYV0liB$g@cS1^9#luD!;6iN(V@)v9a>vqdb(|qO@eAw5AQ=a3=du zjeiGnV!G@?j`5(gz_65TJlM^Z1@3cZ{UT=?6Qxqu_%-cPDaaf{{0u+C0hXG7QwVdlt!GG|m!)B!GoKQ^h% z9avx4^NGTl0-zlyfOi?|RosCB59N4@4B9(#K=ecl$vg#WF@>4HYdCNJ62e>Xl{c+%wsK6G*y z8r;=VOt=V3mSsMhp*Mvkn72Pnd`A-n3XJEWc)4{v6aab{y+mzIWo4Z~O=Uf=!d{eF z-H7w+H4R4Hu??$6&@u+m*v1y~U*^DU6@&=yV{6GHQ$w(K!{4M7nC(Lc+i9(36<;_r&aIi5GIvO&Fv8NBgt*cz^@%;@|+>#|JvY@lUnH>LMTk}%l zAr4NX@&JsuDK^SNndA9ljSaYV`wrYb_~btYoqtj4I)u7#MOWe62jFq9_8i#%CFY5% z^;#4M0MLdfw8{} zt{mJ|Sj8%?T1@+!$Sq|X`NKRDdp0+0h@Q{D*a#SnI+cUWBtLWRH-;@5G;1?N;K?6E z;N+2Hp4c%FiANJ^BC`INXT!}gQm{fN$0k<~frT+0^g`en+|~TU$c|M3XZsXf$*|?v z?>xW`oxv>bXda4ASa3w|;DMwkw6(uUA%}tlPJEeCRxyoY_mI7C3e)oDVC38%i{gFv z1`OaExI_hIUO%Fa8R@6Cd$zZTL=)%I*7oJIuLt-#u7+Z~bMj^BV;C z?;rqUTJGjPDIE2AWd%02HdZE8hJzPITU&>bqpk1KT?*-AQ zfaEZe4GJFF0MCK48Rgk7V^}f6GUIX-kv=%YW&v7v<%-pRhfG0AGR2(RPTT5fHzZX{9QuE-F zekp`s)+ZFDmyz(DrkET>ON=hH?JB8_tuYkD;6ZzT3d;M3sST|`vLRcdoW`(07j$G~ z#2necib8@=2%SWQR0v&OewEEc{FU!xWAA5^$YQr+OTqoahmDkK zXbTrav^SBTHC;qqQ^$#ke05Q!zOQj&#B#qR^ncU zawm!rF`OvM;i>44X?dc94!CJ0D@~B_RGu<-8>c|m4yx%WO}>zeJjo~B+eRF+>@+R> zVFgrepvtB_s>+}>bTIMC9tcM@ACh>T@5!UTfWk5UV0i$v+eZ@kNdM{m7_wvR`gl?`uqFR~j?RN@jYfD40m!95XTIZwX*eDiZk9*LIv^yi=&$JVtj^@}0@syweKAULS`dY{lXpZ)%$CnSjbP+qjVcn;WJq~Ee>v2+?x)AS+>uKpHpt;rV|Vw#^y|E zzpqVI5%I4egXcw-jL8R9nu_{|XUrH{%BS%u?Vd$9gfNc9B82<8TgxhkU66Wxft3UC7tgwxhP-msC2fc0z7HQ_?( zA3KmjfN`Gm>XMv9vT*4gU6UocCS6bfwnS$6tFrYcF~FZgY8hE}(w2n0mAPzerip_# zlW6mL=R&RpqaKy9CGz&!%n-J!U z#N2yLS?r2|&786AoIr{5eDxZ0CdZVYDaCG|0$_r2f}^wT5BqkX)hz(-TNe#Ckby$1 zzjtB!WNgeksI&?3#u!Ni9(UOClhF>Sv$`krgqcmMP&L|koDe;il*bk2ADIWdy8G8M zFKEGuk&kypRvyJar(8G9pSq{lW>;r1qvQ-3o@+?-62 z0r4GOEW{cJNwtZAevh>r-nmwc9!1s6XK=Rgba26J9c%Wh_O4IdGkgZU@?-n87enwH z)2@o=;(|haOIxD;(@c)PCG`3d1kUW@0+i`iev zMD}a?hb0TfB}tpNUy7>ro@l3-*NVsJId`#OnPtLwM8WQdEUS5@XBRmx9p6M7ws@Tm zoU1)N$4!ernS^dUVL;&i=Xnby(xHiBF)}B$F!vni0)Fn5$TBunJXf6c!zU*PSj=>Q z#BFg}$V+~p6$1)lOC`2~yd*&GQ}|c?w>aPwU9rp>Hk8-Gi>Kfj^$20(S71Af$OJQZ z9lK#&eJs>sV$sQh0yyjG8Ra_fS09-^hPVZ)qMawJuBL4#vak$QQpo9o10AX)F@}m+ z4vE|;V-DSuco-k+mK1)0@Lp^cK*G`wF|gfC7b{uIE9;**%kN7H`wDxjItf-WtV-!& z9V~L(1VtdPD3!%IY*0X9DJlLCGq1UBSO(hP33P{6u!~$<%5~tyAkq z_ZOLl(*+Um&=SwOf@CWqNh_M<6sh9z4waE&%7w+KieE;HEsv&1*-}QvmKYktF;qh_Fs=dQdS~In457D?yf!XKCi zQ&jRTFhgs6!yHD{+_h0%=yeWEA?A?r~>1!fzCpj4wY-q^x? zRRbWR<3^MVAY9VD#F;Oa-k;9~Ken$X!M0gKuC z33G_d*%>lW6358u0kRJH;bP|XP5tv?-IBbb zzN0_+&87X8LYF;QY%hIW@}{q;2x44fK~a8XDVUNh8;*zS2?#xQJ_SA%0vC>sLXstN zM875wLuaK6*NY8{T@X^-Yt?Ksdc=& zDUx30G|8>mTUc6PJ+aL9b@JmMSA4Am>2VwCAA6M8K3s5JP|GUAQd?$MRcBSDx6}Ml z&sEiLEjqI30-QC064)l%%@tqjbSS>z1qN$|M8oAsm^f2hG=DfpM=Yqh;^V=S68Rl21SlXaaXG8B)PE1b$b0KSkeyxUyp19%6ZYzpH-{JV0c z`Qz~V9QyDHJ)eSFX`XEvrOnVD3QR)K__T{5+8+>ski09GanP@M28zW`b>Z@@Mvl6ps3$bkvIH;|vrlJFBK~)cmU@lYN!nW7H ze`MkGcNQWGtmIrI)b)-QV#~?s*{wXBaKCQQI=-M&?E;ZRhF01hIv&6qGJG162r>S- z#L)ms__(FcwRPSoC8<@vO9~JfO`ptRW3HR003~kriQBD$%f;@0dy7^s87lu^2j)-z z?5XhxRRZ5AdTx85KJ|@~#kplEBFqHd?V0X>2w;dzzhT#TtA5}H-;e&`(M?fH7Gzs8 zgJ3&OWgO@|UI<+fhn-*+;F#~}cD;$vd8QWq8Y_-1mX9M+;|&Vb;#MNbEJ*y6k6#L! z0+i~!H9nw&8}H}1l7z?+-LyWC?{o?uf44ng<}*)(#M~HMw9N^PZMQ!lP+3tjrdg;p zag<^ZJ@oaqJ=mW*gEzwRp70&-j=g@LKTEG+Qc0AA;}fl=>b%81peE4haU96#izjSu zeM`1v)O}<~Z;$mE6v!S}5wXemN=CR?1HRQr3RzTA+Gr9tlzvA7A+M6@IF>7@wO1+b z4u-WQX6lRzPV4B*NXuo0(fbld709&NX#PLlvAXj1Da4BK(O#6a}oJw zm6G1XA(m%4EvqK#8LU|2MnPR_tzeO-kEyGwtgx%}^qyy8D$-Ch=q)t3IzA$C8mq^n zj$K?VquVPIsOiOOU|xFtC%KX;Gfb4%qKo3Mq#F8K@`V<<11RrF^wA#HH=f<)7P8q8 z3GhTSF5KEA?Dl^mtp0&r0788dva^S;92KhCqXn=#Ebvm?qF1N211w-;+SJU$eT?5t z33gEV3@PtepGMjlAdem8zm7oZawQCB$~-=dekCHF5E#k}4K#S4Y;e)FPUtaTT35vk zX&7)Bt0XNi>7x{!np*ItvX9wHB$9x3a|FQ+O1}xNWvf!FQ|3+`0-~8{tH2cg*&2vb z8S{PZLp)B`={1s$9U>BPaG~~xv?$D(cL__-%I`X9#9*LwR~sItyd+r-l#KhFZ#qR&`p4?aZITdY#udh9?~jkuYoY9wI={lc%D@s3 zNjjAFcsnzEzD-fZ0#NeVof*xYU$qY~(MlXfTwr^%{r(c4ZCkoVi#2!$9s6G-%$gJ6 z@^8Xb~-`2~V zrIJcl-Zk0St1(aO3{(9pG>1i9-tkiH3pW3hQp{os^Fwq-|LuMjW6_haI?( zq`M}a8W~R1-3-f+_R9de&da0~bW~5xmF>-x2mZvp1HiS++bB;l6P(}O!@^5?qBan9 zs>=UZskOJtyV|JmA$@u(fH&eoq)R z+B&+M1sI*%j>nDodyxA+%5f2tb%N3#9UlzOfwus$xY1S@J=#8$#C=q58QZkxwh(R? zs;sNMvg>?Re{h4_2|vIFa652|Jt(>8++7cQm85ll=p|a<7Xu6%u?y0dRNV+2C-IS; z`OFyF&AZ`4Y$CcrAF32EGP9q(>bLM1TqCi0>~sAzp#7uyBf6el z;?L~btTUdaE_$$|sFI1wD27=*?XLcWL?x<&DR{p>M4`12P{9ViRwTHm{C5%FSJ z2UFZ$;jnn%N^OLiw1X)?+I2z%+__O1AX5JwQXKqQnIc}-oJ5@%UM(!s0__hMs+FFw zH5z>_vM^1>_}Dt|cRql4#8;;n)>o(K+=b3@S#;ZMu66WeL#Ae`p!&=xGg9G|*j4Bm z{&>P>9VAA^ERg=+6+0VpLo-JLwR72U*yOhj*eypi^M<091g{7f>zsl4JJz^--pdbL=n zQ$$TrJF;SdW_P(Y&2naA8f*IT=sm=;Eco_0yKBUn zVC#uf*qCX7?2j$C!d{hRt0M7eqNxLDrbCuE*Fzfc>36OmT-5tMmBE-*a8Bh{GzeAB z(3l*nl4_eIXU4tf^yVT)fQqEj%<%*mOMJ?@)tzy-GB5`is@DlojgAb0?8#AnQGu$@ zo>GlYiBD+1hzWS~)v0IPXKT25t+WyHYl8n9&%gt8jgDj*UILBVOi+6U^$NubQ`+$= z&iDHOA(xZxXmYhmxo=zj!Jof{noBm~aVbxo0Mrp%o%R5)v~)>? za@e+b>TPAa2#6ynSO&U0q^_4=$g6&GmLI^R(uhnX>$DTq9ZuNlcIrL3sskp$wg!_O z$C%5THz!ZKeX+hb*wg!bu++Zf>TW|-O`mQwY@OVn;1HX*@ksO}XrJp-`?^N;qV2KN z&!bPK4C=tu8Kof(0E@(J>ttkV1O|;IYmPls)hEnd2yhkz$3w$EW=aTiDqtTJG>mC@ zo6q~gd(?sjqb0PsZumDycR==vZqA2{hmNpJ^RdzGAFTak@@Y@xG1*5BJ5M?2cXy!b zeiTnU&1JvuJM9&poDL}uEwfBILfPkgx!?1^Wy27GKWWtc03s1Oi0cP1_VDj0uJKwt zv&raTaAuIJaAu2lq%~btAFEQ=Bvg+9#=kE~E4v1g)st5e^2L~SP^un8d{RCh-hPLh zwYs$2fwyzpGo>}gVvA#Ty-=!esri`&xja~95bCet`X{-GU2G9`XcphWt8c0L873KH ziAJ*OjrxDL0Q}HyxK%SKuL)^Uw#wY4Hc(@o;xWq%gOwt7iGGb0}eBRN6#pSvpTPl zcj^~z*^bjZ!2)!}5>L#B_8oWbH6MXGH#B!m%hsT`fC<$`2`ab1HY9g%iz0yI;r7Ha zEcEn1+)F0pk=gt9DZArNgXswDEvfn!iuR6N2s@ke7yGAK-0ceeMP@GKKoMSBv5zS8 zkvWw^a(P1iuSjqbwu)**Klk3pMci%ndfTTv>>p$ zI@5&BfQ*AYOtTG8o6~fi8YijbWNaXb0p^kOEXQoAiN|t~b}kCF@~oFU!t%2?-=xJW zwr3>>>;$f)N-)p|8S*^i^R~^t=vajPGl%9e4N_sj(oyQ_QOtind1w#~#~gwb8oUXW zg^TmBA>@gCJ(>?Q--MEA9*1Sd#pbTfY5fK31AsW}~K0%LQ9l|;DT0$Iy{>ajy6|J1$WzLP5 z@*kp4r@~My-D=}H4(@D;GSKF=WYizhl_`uz47zPXez9$=_H~g-t>BS8u9V8@Ge=nPOg?{%h@jG3`s+o+8*+z7k>=rtEZA<&F!Qdb&s*%E!qCd| zMKy5Z4?z>m;?nMMdJ_hZo1KvH^a50nt+G)?UmachLtnVcqh{3hN?S~u&A1{4fEmK3 z4DlIwoGa?1$tmBd;nW@3)Gax72gZSw#HE3P5yv1JRitnH@>?A{r}MoHVA9%zE)xv} z>XJd7*lLk$e$qu7^hl1Jn3=Gp?5w}Phb za4#%%dG%Qaw{xZjdol0(VV_B5fN>o~=HTo;h-N6^tg~>r7n=I4TCb>ij_DX=bF@?V31ct^EiM)dCuh0{o;MJPpGSjlWbl2bnEKB;D4vTZ*q{+QxptYoNoqQl}@+0T6k0Y_j&2 z+t=!~J7>vfs<0#OjRAs0PyDCqtIvMkAdgrzdeSHISB~C+MYf!a=WQLT-8q7eXUgN5 zxLu3(AGtjQD{wlSHCtgFneewF_2Wm)y@5!q4?w1NduP*4k=GJj0h40sCiCsdm92`B z+YVm*H3g~{VknY!556^90KsT67jSQ@mcUAPMW~grB3t)_jm^O&@1^&-y4IFgE%xO( z$^xWDd9OgBBtu&chVT}%R+Wk`|4M{8J)Tgmt6^oNqTllo3Ta0H2EKFV8(C3xo^h23 znKf<5{5LRlKzUDSeqDWUt^eel z8`ay*awaQv{m#WNTc4C8#SKjjYOq!CIF;XrU3vl+-no^%0J5jU(N%Qs#e*&T_BZZF z5O9>wcn;JkHa&4IoV4WKCbBAWBaR^BNm$eOxJvwTfWUWHQgn_kqjPW{#y%rgE%q(< zr@^CmWpTPljDBsq-VKVcqIi>b59zm{D@N>}?eT_!rh~$WQC6gjiVrj8oIztOIQ~ z7H))DI0s%W~AI_f0>k zn@1Pj+cf}bBC3g=6Jwh5EfpJtOxxFtfyb?V5RJQtCJR~`8O*=w(y?t~6I&T^s@A|B z-3fc(jjwGlepAu6Cf~BYYjy`kQ~^TNy}J|!WX&a3rqf1y2||aWBsw?WYK7Ox?yQSY z0ZlayU{xZ3OCf6RE=Xb4saffdG*hmtfMa1*V%^!oWSQiXsb|(CpRdE#;8skFfEc)D z|H&cL90}wwO-jc3hT_-q{@is3k(az2tbsko)`{-60Fc5DHW2CAD zXYsonRSm-D+U5w;e$Q9`KLC9|g1;@&jz->SOBu}1wkSG=h;W^dwad6ts4Zu3e|ELn z*>NVlRAjrG146!nD@|IRQ!Vkqg`8^S!&(E^jsbrSbOb{*O?b~y3G%ax}zwArgO+aDv_mnvKuTCB0Q z!+3vNt-f12P_SDf{?kxr{OEf)H|h-gUD`$lgKW3k@T*H}PrTR>3gg94;zddUxwKO- zFtoQci|AY$a&MUJMwFP_5@~JowR>DzC)x|!O}`iK*#M)8J9NKX+GYmhZSC6qL4SK^ zdvg1TOWVSr*cnMr6a{e|&YjrmbOxiGTM2)_kXUD;N1g&TIV6#mj<9dN|5RN&JN;Rq z5u>6lp_0tF6fY>#wR5sP($>~p!ZEe>PS0hqCX-GR4w*^r*nZxOz4P05cNe09r|FJ1C&qqaTEA>fld-m8@8)6#E7Ek6uz8aWF8e-C_AW0?-zABEySaa* zjJ-?yRx|c4zmv`01xfvhjS=jfU6G!0J!ELDZmvo%fr;HD!4>b(2HQ0Zj>^We+27W* zI{9vT1|)Q111zCG8(dq{Gaz31YU?jvLT~GATj~p`j_!+H2hfwTcd?zpVQIQBa@ZpI zZGZB6>DAD-AZP<2zBU-|4h>#KRaJj=V`EEG{qpL%md2W+>uTzbZdqQvwxzCOMKyx~ zVqb2L84BP$xw3l6%Ie0Y<^%DDim{8^pjv-yVOmV-IA_*|T0Mc)p0J;On->){6*x&` z5?>iJyphqu;2_i)ZuKq3>020fnt$hH8m1*bik)&%TM=qS6F_wwxvgRs^3H!&(eW?` zkCOHoFm|n@Tp@$<)WMV4(b!bKvf}9KmZr50)i`9Jv?qrysRE|AZUSwLDGGmR2%G?W z8X7&cK)h;aP!c2z21k?nXRxq$@F7zZg#$@y3P=(m=BFE|w*Kgr+UnKSweuEYw{9!b z716cb3>KxE72~z;HNj0(SY>~dOIh6@ZD@aePqdQ~LDy%&!mJ?gJ-f&D2pYA>4bci^ z?0s3?A6y@*4Usch+uBxsN+?o}La@%$y0N@9fD@#@mCoPVAefbFwr%i4+fa3Az6x7E z2cVv|Zp10UWFW);ZsWxGH6A)6U`Vp~ppXqtUR`0(kaQ_6{d%SeNke~AX>(t9N`zDc z^eO;OEPeD&0fXAU>1lpblfZk!{HD37nU~Zmx!#O28UHdUunp7H77lGD8JH(FV=)zI z1zK1!;SA`&?rnNCzBUxzU^mo)Ni({UnoGbX?s53A6e}4cmtt?s{{R! zP(Zk_!k(e})~#C6(zJiFrn(VDvj&+LHI{XE9RM2jy04l9WK5b53HaC5Bw;DH67mI( z5hs=6_||(+u$_8FLfXhcuo*f(1g%NCKblaku(qLt=(k*1CxmXcVBaqmIRprmyr5MJSjiOMe2C69l7e3~@(9e4)Qj3i#h zv`XDq;(*d>wbScR2NZ&|tISF4I=J9w1uRilYc+j@Oj7?w+wunE3hJ}D+XD(IMlhQw zEH)>AQb&W|C>m9hOJTOeM-{&)Q=OJ2osa4botF{n3MHW!Ob{W*dIYnrM@^Uz$*kQ_ zYfnCcG~8}l-XVWs+q3ir>P(E9DE6iz^O|71z+LmvD*6^WtJ%7{Y)upTVx6?t2zJ+s zV>*?i_iiZ`Dbm=>4NRPp!+o$VN{v_$>{TBQU3ih`!b5aAa+P3M1CWKee7MXda9LKL!^Zcp87j(z^D&6rA3_>@|^kiY$9v z3Bmx)1d=QRMqejyjy8C<1VSF9*bBV{bU&;P?HkEcPfa=Km^c*rh%{09^|<}INbG3H zpYDg`%hoPD)&FqF*2WgMiFswYKM)X!rNEL(_xrZK5Xu|ispt?_na5~jz{}#|@2-bJ|7_79DLWXettiKgI z^%Y|Mu8M25)4>}DxhBpL%G{uDbBwGwWl@O_gTMDbXK|l}Cv$(}&i@IlS6iph)$g_{C>ZeJ~4si8H-f(f;D>kBA1E2iEV#Ewlga>fhS@*Hce~vUVO>-jO(eJ5$^Yt zNR}eG|AQ6e!9xeYiR*J^9b)S%7S9ayr9J(izbSz;M|jk>Av{%)SU+Q!xzKEzhm(GI zAbjx5{cYPT#wGDG#y;@b-Ek@~sO&vNx?YpM$|Y?#)`9X(2|P+PQGs6P+tWP0vbuk& zrlGo}X7Rkq%TQkY!PY>h*B9F+90Ry1S#-g`-y6Nj4p>&+cj6mcf=`v-EMV$U9cn`v zD1+l}!k%zzTa#x)q}Q91P!Wy4ovMQd#Wz|Nn~7PqL2*zSt)85?!;k!C|c@5;bZ^864BMqlmT993oXD>Y~*JYdG~{B)mxBL53@V41w1MBjL-KgfYN^!KGHiE z%hoi-D;NY_shV(9#1~Dtljs&4WcPHR&?0j-d*2?_b$|L2e#b}2g3=^lY(eX84Fx*e zgT{}6)(!H#aLReB|3&fpepb4*5WtN^gc`Bide(W*1A-(9#+&^Rth5%r=Y#4Q9AdgU zt9x>EMu?G5wYe_n-von(fAfDvKO{?UslsU^JNj-2BsUx>Z%a6|IdZVpg?fjR2)tuh zHF^S3kq)I7bkcgu>4??q`lMbXHqt>pFwe*2f+nQ57ohN zOw-9=Z)?+*^&W&P`;i2hAZeuG6h9s0LSqNadVKB7)ovA!^t+0wn!bMz)hX(Yq?9{T zNrQDzcP|HZu5Z{6CA>BND+^7{{}W4?&HZrkwZl*`Az@cXpbBEGAJ{8 zkDKIGVgKS#yT>1N7%jgwwVBwpt{12C_Rn+-QbzT7z4YpbD{Ox*1d2se^Ht+W!og7X zEyx&*He{*Jx7q2OO9tNkJ%cSXmQ5n@vqN(!1!L~8$l!_tZGh995Zc=$diH@$T7X6v z8!bDXO`32z=Q`WzoT>XmXXim@53@L&lEH-spL!-Fh0dbiOWN!!JfsD#POFgV$bHAF zzz~O|BP6Y9W3hi(qaNI!Sf-wLNbhHc!z&^iGRYku*f4eoyXff(bhJq zw(le(n?ATY=m^)u6T2qR1403>{W!n@K~xmm?<})SeSbP$CU0vU;C#qF;PA)+#vyBu z#NqTlRAw2K8K>$_^IHA7lNrp+zN<`DfcH24y*0B&iQoyLSy-A3bDEy* zyFZCdg*?WIa${2KViFTCulBb@QEw|ZQcv$a$O!eieCC$@Uhv#&5P#dxh`v8?A^>dXB|I~0n)OjklxB?N9mjvY;wr~PHOdVx(_YQ&gCsV05#Ix(;M zqg#K>WP#>g7Zh0m^_W%FE7vj@8Su2P^Lk2B8eI{si(Pt6zg%shY1L@JX_Pf8AB@b-RQtw~|!{w0aUTsaup zoFz48^}*&wso3?j9oK%rJS&`MGPt9E3%P~YWD~D+8y}S%iiXf^>ks;48^D#!U{G3` z>&Skl&@uKDQg;?oP!b!rqFzc2CAw$yI1o&0oq3|)*mUnIK1M-v2XMveLyjYNOL zo(?0niVV_R#ctO)*CD!VJa?72CNMZ8j+j44PDXjHfRwgBS}zW}LVq{6-Tvz*cKd8T zWDH<#s8muL3T^D{=y~c+cre*f%>1S?WY5n|PQ6>@A#O!|^9H*np}XLGq|M~jgH+dK zH{`m?xNEqpXfS9aJN_DtDpzDoGj2Kpnen^+cD%Xn6hp zr=j(7Ws2zbL=Tq>C&U?5u|2Ei7PDf1q&OIg7Sk~(#i8}Z3EFGQ@?bU@Ni~NkGncyx zT!r{+KK)w2UHPt|`0FV8wTQb0yN0-2m1quezIM45<4nO?Sj$G=7ME)Y3ORrMSTBAp zMK^-Abl`VvoVy0N1`c+u5N8nWk9iA6s;7|}xGUGi2fJ2^?dN-RJx~Oi=#f?2 zrMnQjHF2fx-cvI9fX}X_XPdc8b}55h3VQW52w+%{-xtwcCo))^gs8(-wQ;Oy->DMX zvevvrY^CkR8RR=$)m@(Sul#>F?&Zy(sN3DV(e5PgL&ji0!^(PbEJtHgMN_rzTF+n{ zO+=@8PCeBZE^qU1^o0H8v;|iAQt_QIK}V53YS8MTf9pR@jA8BJrMu9ZKRokPTEZdq z?)VGgx(f%IkdZd(t|0pAJvT+MH5$V>$OQ@Vw6nBtY2Vh)(=O01(k_3|F4Hd8uGFs9 zuGOy7u9qfgH)uCXXTSh(OV>$T0bm3yf(rc1fzgnUpArm&LE^Ir@6qQPIF{OJH{oxl z-AvcmQTY27+wV>Ie6e^QAWwX{U<;fk?!9k(LZP_+N5BXGG<@<_{M7(5{>I+Rb^$Bf z1Nz!skn{VMo3h=0#Q2+xC|aFKR9Ug1U$+V{0P@RMnG zYCFu{%kd7~Q_CI!_fD%LO7o~@bIwYhp%va_--xs@H)hopdDB?R}i;`e7K8jLWr1iSHuiu0wuo6+M<2PnkX9H^Buaz7c;U@r{2djdauQ)$TLLn{EQD zJOtyCVcl+nRf)k0Q?&a*7SFE7F=2v>#{> zh<;t#PVGU_+NC|DJ&eykVvR}n9z}?{Xncfsm-d)|@Nv9b?m+I{FfAE{JDtc4vm75j zH2L9s9Uq>p?ZJOm^zcH2n;_T9rtF5p;yg02--$eWQ1nn}w6d_*v?mDrI9}N6VkuyP z^buauNWu}MBe#L_;6t!*ZQV0S}Yf<=DJ_@Ufl)SZFaNG-! zSER^Y&{CwJ=&kC4)@je~0QX#V+OtLK-Uo$-R>M;4dntd^icf=E(^3Bc9z||-q4qt7 ztsX}mc@f6IOUSvG;V}3y%!Qvo6}$@d@S4TZF)%^^Y=|MeVyZy#d2ov_C$E`; zsJZHDZ9+nfR{`SI1E7z60gceqUAA=$k`32JPe!5MwU%| z98L$=4QKCw0d;%e{I%0|!G#Dm!$Bv)WH=YK>o$KuQ#bzoErRDqYZYC2-sDOSa%D)J z4(H~?gb~g+mFxxlezmmRM6@0UAj;&FO?e0|>4GbFT0|DQf|E&H(sL|0a?XAAwu34Gwb0T)jwt0rb3k@e87S|2D`iLb1Gm2PkZ= ztH|{{3@dVV!2@0JaNh1Nczhe^3f_}v=TLw1y*I!SMS2%Jo%f?Ic>V?`Gk&}*evCGL z{6zd1Z2Wi?e^_0(3vzA%SAlyQEGSS0&%6z04~5raK5l_Q#{K_@`z9H32I%JE>>YJP4rKexjx@G1NiJ~jpLa?}ju4aiJKpEd__SS}1^9P-!z zC}aa+3>yTcY%t7VLtrk;hYB_nmaqa?#zsLi8x1G0ao}Z#z!o+M&Sj-=C7TT2V`Xp; zn+8v?a(IOu3ZJrB@K-hyK4XW$f7yQ#XnyCiA#5HS%@(i;Y$2P%j$*UeA~uIr3X$qS z<5Y;x->&@x1*U>Y+AF9KI-CF>X|HOp33uUT?R6CQ9C!jQ)ZV~vZiM(yp%yBMP)r>0 zn-E9w?M=7>#ZP97w70aMqI7F)f%Z0jQ{uuZ+LN%7sw{w^|HVeE2DRnCFbseHqCFV$ z6%5j0&!9y*-2WAfz`u*wSFnJ|^pVTjboiJJ%*h)tz(L-BhQF?}GufDI!eq%KnN1k&<+61!2h%H|9on`1BUDL zH&3O%T%o_3JX@VspgzWiOE7;;evFNhV9Fjg7VQxm_ZTaYV6Hapc_^Nyh+9R<^DuB) zkDPqv14HkYes*;I}Qc!1UQME z1Z~U%A+`?AW_}dFli?D!5w2hXxPb-X7QB8tYlSnWzJnEDvQc-oktw$TLjwV0q> z=nM=&yJ4965#*S#PKT#b5i4UA{sweTsj;ZtJaQ)1y$V&OB&hEEZ(WS9d!xpstD zz4iwap__%M1B|pGw3{tYMxaF4X$9%;dy zpUj6rY52g7*ZydL%}P)r$lf-aV57|~Ql?CMgdKzb*X(A^JD`GG4dF6OE8ERZB&P!% z2lN%@>gWfccfr=>vkhI$zYX{v*1mSiE*7%Qy2QO4glnXQweYjq4xCo+hT-f{RGWKY zG`kNbu={^u3i|;Z&UWH-`XJP^M_?`M5)@g9P)YubvQOifed_g55 zeX~WSW{XPACY9*hpS8arlXBn~K`%wns|4h45H!_Buaz;9eFd}d@0XBc&05=7J5n#I z{ncdpxuz5smQ5+%&B6|HOV8z4m=}tP_z9dp_acAxKSbGm67}yX%V^}Q)ppR zsQn*XZ5jB`2s@tB1+{82<1ztT`wOHEAh9ObYfhgiWqQG zf^-^aOxw*)C4#HTqBaZ>NHi30BC#>@VQ-_6_$i|C4vb(wgHi0~Fp<40P+Ew?j51Lo zs!e~gP?}_+G|3XBNtP&$v5C?sG8rSBMJYE?gtWiYcY)$R5N+yn?L#o;1{k=9ov}8b zowbX7YcDytUF_U4c@Mi_?Jjmv7rWTV>g;CUp)W(ry4aQY|LPqurWT2E&C~4KZGbTV zCyGoVf}s0dOJU(~j9V8VQRs6GoNp4R5?y~^VDF_1MK2zG;1Wm>Z%@gC*gR#7IVNGVbawIY94 zVNOBrZgxExGG4@OhHO9)Hx1dqvZ8@S1G?Ca`RwKdLw2iS$aq|x^AX*cbcsM!QXpR% z426;g!zCSxB^OMTa$ts(3l$QFWzryMl7Ip1msA=!7UXbaYkD9&24jvhFXXY zwNz}VKrg|*C3ryy*q0_?ohD#I1YmdF7YECPO1GdINaIQ4K$p-QNaHPNTsD7bhFH)H zvB*Be1`Uen(aE#u{n~#_U{1z9sF%TIIOpGc-wJ|dss#(#utZqOkU~=so~Z(sV!WoC zun?06Td)i^V2MGnBpHGSwXYn>@j!ZV%);RhLvkFRIXSfdN?Us%$D`WUj=(&;Gc7O+ z5SWDs%u#*B8;L!Ns^|pFuJnJvEJ0w7Mqrkv1tuo8=>+8o%i3==^GA7TfF4I>sL=6bhF*s7AWpZOs(Q|n=lZ%KSouW8 z>kx@{v`4MLB`?|;AB>RJLy6P|hf97~Cq5vGw=(LXedw1&oczUA@MSV-4c zNY@xhi)+F?h#A^t-5Xk6f_3KH7f+&(#5q1`@{_`#N)hKIx>zp4d6T`Y%Z@C5F+Gd7 zAazbd7N4Gl{>|!<#jk(riV4i+rVm$W%*ngiPwun(Y(_TJ#xDb+^N?5PBd;#7+%s-- z&+NW&45C77k}T9!ocv_*O~Y?W49aE6P`;_hti%K6YQvbsIA}L}eP;B}YYLLRP%Y4Rv!9Z~oFmZ5adw!6?=Rhe_}mD?q+3u+Zh}$L z&FIqHD)2fU+s7Pbaw_bOattq>CQiKraW+F2A}XorqEFj}WY~oQup52a z$I++VgFfw(=+i!B2}I1N)h(aaW%;y*H|pTiT0*i)7*4~dCBsQs`dUFaRS<3xh3JK# zC8|N%D7{+GO{d!xndtU&NRAg!w_il5cxhjB+eB}lbQ{fP_Thh;GWIBY&j|Jyasd?@LpQrEhGuNMFTj5h{X9xU4f;kA!rR0zA+UvYE`n!m-DzYP!O9UL2#Tlyu+())0T^lRI= z<89;0z+A|;&si+?n1f9SVHKU~f87TOi_+2uw%LDBwHTlp3+nbIWqp7?(CARQ&B)QQ zf~ooJ%P#g+m&CTgu(B!Bx+ImX#gjLgOIG(y&6iw>4csXW2E-Z^iUxzI!SlBJ`S$y} zrGoqHNf*37GIoEwxIa2^fZjA7A8V`%Kqka~=80z~SwQY#AFrMIxHJuUC>=^G6CrdR zHlcs~Ujetl?fCfwyaumZ`VgkXx`d&t^d~5gK1DnCXP7Si1!hZsg-YrFpkDe6)<}PY zb<*DfXMN&kXVrGLY>r7z$L=|8Yl`U-BB{tI_VU&8~a?@!1Q{79DJby)M;~tQ9M;mct5Sjyx;ShZ;TvD==)h5X_A*>?;_n>jjJ0mjGX(Mq6J;>(XrT zwUMm2xK+3aH5;rPmzcZ^BcJB>z@kMgAv2;6L+@Wmt|9>!Nx4^3vP5=KKB8<&zBGSx zTE2AH9%=U4UDA=er8z^Tqdf6na+g%GgI$s&FP5kul`kzu>sU6WNO>INAn1~6)|AnF z(g|-*nS^j*RxS& zQ@W(HP}R=Ejz-(DP1Lvtah@ClRj>rkMddmT&cx3axEL;j?Qj=71J6k(iO+vGa6#$wp8;?I1CNwP|)N87$OgcG4cqQE{}pm_*o^7g(dQ6SSpW! zm2xq($cKPe9uHx8Dx4;l!u4R+tI(Desz$)aG ztU+#M$I4A?gY0D|%j;M`Ze?3!AG=uIz_!VLcBj0N?UaM;VL8AamD|}~xr4nThlT3j z27@smbBiTM1F|di5h*xbUVjUC=iRy4}?l%}c z#U^#3+opP-`z7R7>acyFUzbi=uCsP*IWwuHG@Dv({|dtv*!~5&9i8;Rph0WNIt)m# z3}f|Tb7EeD7?JN(fU19g(H`lNwWA)FE+g@}qD#6mDU6gi!BBa#m2<*}tckM#9XO*B ztw0~A{S;d>{SbY8N_CucZBliZe7aM0oOGjJV*0S3p+iA+RUa7fU!l5Nx_&2>qfl{* ztH>oB*uBDm%_(x34y?PZ$X%4vCEb)S-P$GHz72BsNOz(+xNCo}dE@Rb>AoA#?=^ny z6u-vC9umKXn7Le15m}e7^LU@QeqNO6E&@NFQTQ#Fn!L39lJdnO3x7Lv`a) zyR2X~7m2am)XSCVD1v+*aQS=~C|>{t@`W&3z6i$47sE99QdlTohPwG3SSw!+8{{jX zQ@#?;lCOdbZNCuZMT#8wI)7BSXhSm+-oCU>e*fylyv6 zldlR5p=HLm^$94^lwJA2V)F-LbhjsUWEdO443bML*#p`+)WNDum~P71d03T<1G@5 zw<5OjR>U^mN~@38C*z1p%n@Fl9Gpq7>t&{3=VAludOZsEBhu6O|9SlX68`_mZt2w> z&`>u`$o79x(@deJu!H2hOL{XVlW(I;{(NuzdQ2+u);oCX7kiVE?FEQbj2N?F01{&- z%G6#Y!b4CbKMck4BQRO+f;sXosE~I=;b)WlI2O$%>tBDuh%Yg6w@NLfccizGOuy2nIVGc{ zU#3k)$>^TSFMvyaF^l}`i#;Wyq~Ge(9fA3EdSG5hVBSDr-t4Pnu=Jr`o+d7pKFA<0 zm4As^@GHoZe~mW%H)-S279V6K#kx2h= zTCI`(mdR?3G8hykAH(Y*;8OBnh%$7aR%@hx>xY>jJZbW&IF(QT+-a9XllDUst%QFv z3TZzEhAPEK`*9YH3vJ?8Y|*&bat?|u@hi4yTx`*Jn2p9`$X*OhO3rm-GXA3Zt*b~ky@Y?9vLf_@yJVJHRAoLfx-8aM=%mbqH(?fAy9(58 z;3{z4fZ;F^QI8YR?mURv59J6X;v6VY>X3l*VT7^(iMS9-m7`#$QUO&;CDbZQpjkN@ zPE?kH7r&pPEQ8aP<#4`IZGK`=SCG~lRnABLU4Z<%Fbn?m=o-r-V<|?s+*E~O zVkurOa#R5O!n!fzU4bB74Q}O1;L25~0M}UY1-FU(FblL{7HGo^(GuTovy1$)WRaK0 z>I`U|P>$CZnoxe*gmS0><+$W}OX|Rt#9Iv7 zl{*o{9TsSA8))`wsTcu=TA&TJfreaOn#|=%u_cgX$R^yE0b~y#WIGYE2h&29RL7M8 zWK%58Hi7*uN_lcp?n>E>EPTA1w#3@ z3MIzukN15q3c~SRyK>0|=JfK{K&sST| z_jMjnH`fcCQ-R96Xn=kJ1C?JQ*WQEC%CBI&@;*#cegg}Y-@y{)_pny^5H=_uL8tNu zI7|5>T%ddcTa{1YHsvqyu<}>ft9%BpD}RG`l`qny0^fhIQi1PSslbmcIrzx3BOh6* zz>lm{;79rr{b(TvA7zpX)R(491rkUDat&@ zl?Ipwz21L(VfG>F3#e$ptjI3XiuB!b-OjnLq_ny5Vx}Fg5*VybggkYURcMlDvXKm@ z{iUiHkw)na+AobF3H=z8jiUst;w3M^S`vX#>Lh)okiAiQquvC143mZgO!QUwZ4#*s z(^uR6u5tb=H|fVZ@?d3J&s?33JSayV%;>8;qrQLEs^R{&2~2@VdeWL?N)dO8$D|&C z0L=xrdL-nkb6}`C&-Ri^95DL=QVg(y#3Jrx$&;YIR&O>TyTY^p!x6G^yX94D9M#^1 zLnZ>Z2q{&CfK|W%wGxJ@i!IM&fKAbdTfhysfE#XkCd2jP(5_kT-0~FlZq|=C!Q5;* zP5FQHnvZ;Js?U_l&l)7(GBi%hEwbgngOItD#sucE1L#a#J@!YfF07I1x$Nf($>YuYy+n1pP!uU_5CfFtrVV@gp!N z_m!T?8}t@OV0`I;2_rBO1SZ;Nz--h{as+?IpB|Vq5STL&n6t8A(``Kh6Y2(-_VmD9 zfWTacz+9BY{Oaiun6SRiIfUxSAh=VnL|8CNRP=`C4!}F8#>?2c7ccwt^=5>y7>sxS{YeW+@@YF@jr9_0mGgf~ zsPb7c|Nb2G@6X*EyPE#hRJ(l?YpUuFw2yZqAs$Ejcn{jg`(TWEKa{9Hfa&T^n6Ewv zi`7S9mHH^0s6Ga5>K-fPDuKD?E2`7YED|N#S6Wk&J&P10qTdR`{Mw)O4PpW7B-;Yk zG*FTju=KVVMZbpf#B@_mJl!OpgZ_WEB;CPcJL)`OipPSf`SN*P@&z<+6e&+C-kB?= zbiu><@+G2rY3!6P`LgF>IDJf=_PBfnl|->vf|=?t?Njkyq}5aCq&)+Z)Mt@4&sf5P z16kNE5VRm{7w9LOa=k#`XfD?srU$5?Phg9|{#P(hRM>&UHf9d|)sDbl+arJQFCy?S zA@DCF@IOZ2U+zobr5{KSn84p^+OIh#@O9IsrI3A$0r@Zi`Q!3;dj$M7RM*#0UEe^d zd=rjT->@Y{=2(Ewu>hZA0`7uC1-Nn?+#?KdnS6uZo@QZMzAl4>Y4sOK)c266ze4SK zf1e7bgS~heLcU24rCFGkZ_IyeVOsqNG5I6fflm>WPtXqh3H_w>3)3--YzxyCM%^t; zCu5Z8Jl(2yq~pxZnQ-Qxh|j-~GoK?qUmSSO+>xF$w`ax~jW$q{aQ0Sl#+0E@Q=nMW z4+3ZILX_m5QMxljlm;S7gAt{CL}>`3l!qt{-6xbh`;L-+3VzF#MdyD^57S@y-t;)$ zogt1R5XVu7<5l2W}X{Xi~efZ-1^#Be5Jco<@M1Y&qNVmKQyJaV6kTW;$+3?I@X>8#|= z46LNK5RqF1d0Hh3Y1Mx|S;=T`tYlYuEBQ!<>b49qsYP|GM@&{AtLjkQ8V-V$oMn|A zjWuQO_*B{3HCrptl$+zFk3Ezj$&aTkLmCeg6TNzEHB#eP9Dk9@pU zSJG$`?E+A~LJen1WlAYhtd8OK)Mh@b_$ZN6G^uT zNp~KSZVQs`bR^vwNV+qTbY~#x&O*|ii=;chuSh2>VD_YwpFz_7MBil0TWqJf*7n5I z7a(ui3ovkx{M>)qeEEf4@=JSTdFkEq%R6Wb#UhQ?qhiH5-%cvEc{LVfzJZi`Yj4us zpT_R~9PhrHayMW8MU3$8VT1RR8@!tCZOwcb1LLd(rS(vRtoaVOw9C;HUxgOv9@N=u zkUiHznRXq_)V9KW?Ru!h&!yTnXwbGpvvwoKmfK;y_C0?HYB$5F+AVMneqM-lqAhv1 zY2O!H)!v2dc~H9>_GtH7tSp18;CA>v3gLLTUc4^{cm??=DjI_kWD2dfzXo;NbgdGgeE2kM#O-q6yX3-QR;zU<5cuin!Uw>8U-PM z8pVR1cXofp#$gvbVmlDz|IM2>Z)ay`GmGTz@6Ry9Y?%G}``Y{76J$OwEIvUlCYNwl zW&#P1BCz2Ibg=42dCgnc{W=B;{JPNVq1~Ym1G88vK1&97;(eU8jE6oZ3%H&Pk13%65$1ol|e#a_)Ipq3jX?Ybsp8xML1kS-`ksQhlZ1&Pu_Zm5lyYrVGt?86$s3oBRhscNFbD zH>rP*yHRw?`72E49UzCsoK7B+t>-@)T}-JyIB&niE{Tgp$cSNRq8E5E^E zz=AP%<6kP|5{~$_0ta1&PYV`cY0+u;~UW zI)TyXr9Io$%k!%KS#eES8+HK;w;qV}wAuq}I|?I!6! zHdyn@Cb8PDR5;$OOxlsfVDEutQd{n~N=21hrAVFq)PIbbv+;%Xwv%;;S2Z$zJ*1Eg zkU?&STyhJvCbuHjZ-YMM4j4)9f>X)8P(|(+ZcHw(O3Kh0PC&+)&MXyo12(Mqu7Oh8};$E9wQNuXi(_)Z5klJ2jx-oK z%E(oozzp*RhRPU#DnKb|sMa=Vl;{$y<|}=nd!-*S-m^_G%{_ksoTh?G(FdUEkU`TR zi-w^E&G1q!h5p=jd_dH7`OLbzR_>WzBI1BR;DQIsAGy$}xdo z@9C#b5Y>)i?%$7%XMbfi3=kfEB!P#2Mp&xiSzT!|x?NNJ2OrV_NUT8+rYEDw41sKV z5;Uhnp$#1dC(u$DNQXli9Ss$9jAQU&OELH`hdEZ};KP4DLd3=jqKy?q8!L!5mJ) z9tg(h&K7KVY#^ z$_{C9r6g^Ymex7{ftkFwJ_^Ntv^@Gzi2W;f;#bA!DQ4?CU4#U@2@JXf8quXF-+x8x zxD1tjIrN|_pg+AFM$s!^JY5CT=+$sOT@9Dg>*0TDdLyi%YlYQp26MU9Yy(r70U)@v zUn!WdRxn|$V8U9mnnzY^txbyT?mAOH7!z>u9m!&>&LYOjYI@Kdv*V1i7D$U(O)NzM z>p#09c0Kt!m#|xS%Vd7uI?$L)vSK5jzpwqih+U`ba zyGMVNoDxO*LfS+KnNMyoPu#TEeckQQksHZP34y+B~LZBZ;pdUk^HzClQ z|2sgh@pSyI^9@(%6X^KWq2u>-Lq(NjEm_CAv>xP!r4T7-AV8*4-nfz9tc^7;CY}ac z2vgAg%XCrkA4tWQA%(t*`tdq0h;Il(<1BxNI9)y)+Co9aLW_#*E-K?l&y?6kc5h)` zPd0F@E{`Gc25%Be4ibNWB>oUdyyqAq!kfu0;5;MJd~$0dqVpd1+Yrp#$sOEpIe~+@ z$c%_?tA>k4Ma=P(rY)>8ZQDSPTegkdsT0*~tZuEQfbAEs! zcpXmnLpePFXVRZwGG3?BpJ6ur4HnXaf}+_lo|!*$9XX%X4^5UY60}`J?j(2dI1WXs zl$DwzW)UzjrP(3C|3$G`x(|)o!_t3dTwJyV?&5m&DyQZklbTzrp>LF$tv#r@BbJ)= z)5P-mj)JVJK+)Ay)c}OmAY`i{Xr)Tf7Oy3$4Bb=;169p|bDqGtr@(oTzrCf!d}LpMGxqm?x+qlk~o$dNp;OmKf33qw(D z42qhA=%s?DHi0H8hH@%~a%wuF8HOS?13Ihdw5m;ojm&~vJ_|#GPC{k+3KaXYqx}Nx z&O|n7BU{GY(ss-(r7mQj6FO4BxjNV6>dtC7&*G{%!c}Md49uz%d>-V%=Y~^^p}2N{ z+5&~3GYUZ=QmG{hK`Y2r+dzM7wJlPo9duXQLodAcSBqen8i5M61jga@47CHCt#*Pr zY8N3KMLg4L3dd9-9CHQb<~kH2+fsFIq=1Q$!E7x#+vDt~Kl=UZQN&DvJ`Ci_NmH@Szuu^)e?2QS7S(t;OR+DS2q@~ZcM77sfz+{ll%Cq9VcK* zZ@Oljsv{gTPWiC$nAhwj_gk+CF0lgqK(5=X-);KDyP_?6IdWL~fbH-|<-f6~yHX7& zn$JIudH$*Syp8$%vzUM9UzpFWmKEtsvt=bmVux2|D7eOZ``un0EBq6$NvmuJmDlJ6 zlDMOW)Z3sL4QUp^VqvG2KmiiD0=4f{)V|Zu1Xn_Hbs`k2XF^YP5)4)+!x;4}n4nI9 zY3jK!Pn`}6)ETf?Jr9p{r_v>Z`}W13OAFDmTwdgo96J&Zl$p|&EcJ04Gp9@g0McIAHje*AYt&8m6dfE zGz`jA?>^f<&}@I$K|*$R)22)+8-Ws-6?~U<)ATc2A<08x_wBP_O<5@|!j)#b^c5R- z{j~J;7U|oKtWWM4SYtLjIeOTvr|XcFCCtvQi|KIVxx=t9srhEgLA?qYc|WA94?w>9 zAezyQ&{cg1`l^ozQ<)B3MVnfwP|{M7iYs+EyeSZ>5R-qAo5ZNz&k0h&`+c*o>Q*3X zEt>sp4d#SDOdjEDT!0_MQfh|9nNp@wEB%80i|B@HC;H&bd2dW-q=V7vuhL;p zO_OM%>8jtcnPHzQJ4k^{Z)pfMRMv$tx>pR|=(G<0LI#lmmXVv?V(L3syP$C;1|7Czn)2;94fA+{}%j`R;*3 ze-qD%&tB&ORr)yL^=eN}@tMAuI1WMPhVdr5}fhAfV+%uIUvJm8klV zVQRHn!7!TE+AGV!0oMZlPun#I{pNr-D^JgJh{&Ah7~J0*MWBc`Zw1%QqUsslx0Ze5 zJ_>2dB_@jn;^tLo6#bGiO6wsgPAtLIpel&)wByhajQ6f1SoBaTc{o8b?a^LRHgV#+ z=dXFLI+gTM{8Bx#q^W7-11rHqw`sz@hMquip~m!TNKPoA@a9~gTKiI5#Lz&<-FS0R z0@vM!9`C*;&51}6okfd#d?>C^y)KvEAILt@EQ;5M+B_Bi@?fslVj=uW*{oavL*VoZ zyC*eeDG}jIh7rx%-_0c#`*Roh$-CFCvp%_WiF0PjcjqN{yReSYXU|seK;xlQ7s?Q# ztcLe*v_ zsP#&k5HdOyMT+k&xrLC)JmKRNi2*#&U-q z=`&n@I5t>jf-tI&l&YT*r@rg_gRMyc*{D#G6C%SIBI@cn-oN~V`4>e-ztNJgSe9{0 zK8@mTD>2(6ZjBKEeksXhQCA*WQh`S!gJrK@?4SQtAkC9{x&CattWwgm=>%Dy1C;xO z)yvyk33hk=*FqjnYKlpBpe(g!&|ykMp3|dM*~T1qR!ul=P__-~nbhmPE{S`a^L}o% zFsElKV=HV!&T^}|<3(FD36yjqz%#76q!7J0I&gnB%uM9eQk$OOjS0IK*(~2p$l5hu zHs9A}DqyKC#vikDc%C%-y7t}<{_^y-2aautM!lUJmXQQoO>ahQB2S=-(syrm?kJOv z?sV}_+dFXt>v9a2s1Gb#xJsU@RxK{znor;MzD8Gb#;DY1R5V4NT10FrKi8i5V|mu) zNOkttaqC;oR${|%Tlbh5cJL(Dhw#(%hq*)_wSu#Z0oqhP-=}x0$bOhI#b_F;%+Ii7 zHz>4rdllQq-m8Io|chZ!z+;tWi_Ffu% z)Ok_suGwV9+d%Jad~ZkL)iPoEio8v_%7`;_B3%R^zoNEWk?dG5^2EvxT`iB6dxTFC zq+vBgXL9=BagQWPCE+Cz8X7x3zDFYhSyw|B-L{PFdDG0Al=_WYQB<~iS8z^gWzAoB zZ1mc*&}$>*{?7%5EsN&3VV>Vx)cMw@3Db)4Yl<@y`eTEXw&@d|Y76r_HJ-wWAR1EK zA`bKRxcrev+}*S<)=E@$?;3AsNot$T+a#W?!YFY99p;F$f)2|9gv&n6csMc3459>` znHyp8Z43@)vPA05I(UP#*@V&UVTl+z&8&X=a?VzDs3d|s5DJCex}aUuD};T z;ZeSu)G$Y|#AhR}7n*P?ys^ZvjKkOZ0jFyyo#=a_#HbTey67R4^C(G%a~m_s^~Z!S zkhtgRX%!p-&f@vjR}_Swh<=|%8MArb%Et33v~zo>40S0DMRHIOxK9KuuHhK?fKX|VFj z3W}nrYJ1TxuNu{L(;;)L4Z$By>$-ZInW-$eLws6JtM?X@1!;kwFIhoL3ENuI!Kr}e ztMtKZ`3dJPGX>xN&GNXDsBn1=nJAsoZR1gYMZrxmvA)ZeBV~1D}oK z2bPcjC>Uv0b#-H{BHOSi2JnCVmef`6w+y}NZ$ z;j;Cx_=QQ7PLTrf3jR+S8J3~pur#ZpJ1Gn_G#Yr$9(~rs5hCappA6JLri&qB59;7A zS;_BS*71~&qd|qw$y{@Dbakfzqzid(FmpIeTw~rpG1Z6OPd!gNI5IPMJI|p$3Ej>e zxh<{lbU)ayJKw>uAyVLRqiOAyQtL_Up%NDzSJ-`pca-Ou&gVzy)UprG7PJ>0bM=TbA{a9Z)hc7<%)73iCeOZ68=Usj zJM+4GXeZ&-oQx-L;=bbT=V|N{jB3Ze`!K*>5LoxKV9EofzJ5=F;m7oY;b&KN6PNtf zncs!N8$z~K=i!m9g}I=`IlPo9(#5&({`P|YcI*E3ss47kk+)X~+$2__ckP7ITBYsahRpco(;VnFyUNMXa}CLQn+KX(pw6 zyTK~Ng22|ucwo#d=Y&wk+EZCh#oq0`!DK~}ae=W<6205r)LY(?-CGZ0(en8nvc=pB zH2Y6TaQXR>#hS=sb>wO$1#U%7%VZ7xKv-QXGUY@L8%mTVelns-`OX>7g_T~xj9+i| zCQW=Dbi(Fjm1S7V(1gj3oXV0M{bYikWg{9h_2r;9{8h~hdG5vpO~UBX<dxJuZt{0p|sl6QSYP2;h797$Ro%lY``Ir+MUNuYW)|>Is`@uej zKUR2ip8%yw`k9TBVn?;Iagwt0gIR$<)EPoG_R(+A31$b;;QrlmI{m#2ZVrDR1MxW> z@gH3e-^Z6A){QC(UC#9ujTn{*XSDm~udYNWq` z-OXNSWWrMM1Z@%P`L*#N-Entyt7|wb)8W~-o(H0uN>0YV^VMEKsI4F-{HPs=tsV`W z!lA_#39fz7fKy^v@-t|>3!n9Btw=zn;7R9Q9hVL*P*`)AagrPW0iV0n@XeI8=mA(jVpTsP^8E)1Mk|WU#TrtBH_K7$48BvnRk?{WhZ4P9$IB zbrW^x5qVPenp16rq(ya0m%+D?t9Rz`^v7DA5+f*VE9V61Chd`>8B@(E<~?tM0!}17 zjQY_NrTcDJ1bjXxfO8vf(=yHZ%>~mrhv%;yr&oqpw0fOQGF1g9&k|{P=ZOhsHYQVO z73Aw(OYwN+nBn%sE51GADp?-g+OrSh7v}`)QC;oNXIKVf2QN2B5E^<72f681D$1G9 z)sWtYzq3=+qwOh$-oT4?v3rh`k1E+5kqu&$B0Hl#GlILEG-+QVS>m@$Dl0BUsi$$K zd;Cg?prK@u=GT}@^sjJPHarl0D;K75nS7-u3qm>3lGk&LxO7fDJ+&p_oZuDaqk^rJ zGe6SsqDYCJ1%kzDl5+E?kAlXM_+h7A(6YT~m-W8pG#ef%1o3t$IsD6~sX83PW@p{ns(S`C z$80Rlu5@T1WqTkQFT;wa>YHYmHN3)P*EjyoSuuMa!@ zJSQ`_tQ#X!`1`iG2j0Qe(D%!pK?tSzsR%vZZf~24s)kEOrRT}|iJE%XXny{{*~>4^ zKpDGzCL^0w9WF6fR$ybzIs%>!rV1pO{q@bVvpd_>r1d>8; zgFz~cWl0#wgxJ8#b*kjbRjDF?R>DA1c39Zj4rjG>fdc@>%mF|J_ACkZ1rXh!MSefBr=X z9sm#{0YK>(MUOOuz6k1LT-AbL*E|J`Yg`b>k7=}zgc~;%Ar5gIAt4ie90Uyr=S)Zl z93~T187X<+0stPe;{eLXcomc|9#CfnNDf(NVSD9WEKFu_`4CcoGKFv$p^+qPmeHf+ z_MfN#AXys#G>=g+LPt~^xgZZFo2r9d>S_3_b4z>xusdezS#xOWfMLZ%-xd!GcGMja z#0J8G^FBB%&<%L3F!q3il03T^az;Hv|CH zWAp=4ms2yg@cd5F?@# zz;fs$@t>K3Xqh)9gep5GzuFoQxvR8t^5y=tFuA{F+^kMdYZUk zjXGS8L8JhX^oQzDa7y@UY6*wX4XzY}H zbN4qv5X??M0RSGytaWX$*2;f7$2R7$^Bj-MQefCHLz0bx@kFmbxX9l$eh?xpW?>-@ zN&tvBCL|d4$DR+eMuAe8G~#lS_cB=lK-e1qbdTBJh=C|m!Lt}Eoy6}_1Mp0dgsU4~ zTK-(+=-i?sR=5l(AnQz!7h_**o*=pouWM5Z|39~1+&mmTMW{0oyZqE279aiHBNlji zQ9^{dSm<;%3~^5$LC9$Y2~?DgU2c31-i5ovB_8{qfId${n~9(^rk~^wSDN0rLq%<< zC>~_S1lRWLuA>0#8vrj44u4WP9BF}tBQ4B)?7W11dfU zgeWh8O3?5k4hLrVI1X3fbq4v4dHBI#dIkU#j|mI`2nbDwBM9+jgRB@Dn-q`<#AAe; zlR+`axEn|5FV8t0^%udk0AOzn0B}eCxysRrEC?uP7a;`2zCsW~1v%Ibi-d~`G?#?Q zE`ci0Y&u8?&8LA3n4s*_z}V4DIqRt-}e225dN zc=Cp7aZkzt0QepNH2#Ei*n7U(7-4110Ag(EYzU6gru_JijKF_nr~(DKh+&sr_-%5`?N;|6H&Q4o6kD`ip>XH0_52GW3j;YZv%n+- zhT@<83n~f$`7qG%MHpJ`J%S))5GX=;SkO)`I}1=_AV>$g3}D?hsPLezK#&I0+Xmy5 zr8sbHiNdvYyin<$VeK>Vs3D<1kP2g;ADULh2Pd)xzx9qK<3EhmhPR32(APZhr~vBW zT_6a&#A5KSRtOU=OFrC8JoaxF?|f`2sRhDV^%7RzpO^_M3dBwvy8svpUc9s-g0 KQ*Llq0sjN3KTC@M From e21f4bb4cf61442fead0e936743c798ea39552e7 Mon Sep 17 00:00:00 2001 From: Mihaly Lengyel Date: Sun, 27 Oct 2024 02:08:07 +0100 Subject: [PATCH 10/18] adding dev-v7.2.0 tag to this commit to ensure building --- jar/postgresql-plugin-7.2.0.jar | Bin 235310 -> 235310 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/jar/postgresql-plugin-7.2.0.jar b/jar/postgresql-plugin-7.2.0.jar index 032449c323d0f1677dde8ac97d3a43b76339bae6..85e6e464e030e16afed7fddaa9459999a9a63e12 100644 GIT binary patch delta 1608 zcmY+DeN0LnZaPtO9^=liR3})v=Nq%GMw#`}FJ(S1eJi{4pqNCg#UZvNMLg0paHumM=x% z)E36)e$NikXg1{4O_rcE#WD|aE5-!&Hi}X5_OoFV0_}1384@dBnpu$n!QMia%RSCw zHp5pPE@$Vs60ovat`yl=nvrKJ-uk6BPrVZhHQz70zBi{yV=4dm}q=`{$EX;grlRO}fPp+(>}lZ)54Gn+0N;k{f! z@!;Pj)C8855fgSraJ1kY3m{rd{Ca9<@Afs>U~0zPl0a(*PLVK#kyd1APvf8_5a&(MV&UyNO!CNIRVZE9@fqs$CpzPBV2u|FfA2!IKUu z1;25K<`Y}Uj`3^@^@2xQsRR76l|10tHu`{%+l22#yO>{TCkOQ04$;?Q2en|F*-7WY z^-ih;3%aP2kGsTSCeE7}?LiZ-4Z5bd@NPzLt7JwSP2 Z${@WD`Uk~3Ve*OVv->Cs`kaqS{s-BXuU-HE delta 1608 zcmY+DeN0Fg-eap4&n%<#Sp;uH?Ks zlFNB=YzFk`CsJY0m`HjY^iIX^74kv(tc|pWN4uPUVlka(eRs*hTl?*HO(^`?fiz$| za0(#N68qC%pCKKd&;5}dq|t23t6MBVX^drV~XOhJjn4d3lDDj*s&Po+dIeZ;9M2M*Q|k0_0F^VyP!DMSQ^iFJ;0`L*h=GlHp)Hw z|7DXrxVgoKxTkXaVXgp^VsXDpRFLFIL@;<*`im>hWGRuanop4)@T6B>k)FW?D9eMA zKMFzTlr*ykLCOv38aIdDlD^@=;<9u-lE0RLB6t6o+V+B0{xL<0S61#xOWdMtJX~bo zl=STDqF?gnoYQUv3$_JCn zsQ~=6oJ^q3LYd$>i_m|tkeT}`s0f^_pc3#oE0u$NRyqrASSbs9qmnAYYn422`KS~>?l zTSr!~ua3N6bUihIRPy+?*!rgudQHh2Uui zm4e?oMDvNwWXE{6nR>uuEz}PF)Ix6Xd@H@r$F0J5s!hzVw2=dPZoBAfv7MSR&g`HM zz>N;701G;)gO5AKVdXlh3*&oEQJ1Yt)cIc*H9>Fa7X1YEh&ru3+~?~R=^edP4;yod zc8XoXw&J1-(9_&h3(mWR?`WSm?#Vtej_nueCi_J>MvrJ`)Faw>+AG>^^->1*x$UJq aFlB(=14jnLJ7M&R>$CeP3HqFmO8y75T2Q?J From c98c4475059f2c2b1fbd6b8da9ce0317e68840fe Mon Sep 17 00:00:00 2001 From: tamassoltesz Date: Mon, 28 Oct 2024 09:21:35 +0100 Subject: [PATCH 11/18] fix: changinf jti + comma handling --- .../io/supertokens/storage/postgresql/Start.java | 4 ++-- .../storage/postgresql/queries/OAuthQueries.java | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/supertokens/storage/postgresql/Start.java b/src/main/java/io/supertokens/storage/postgresql/Start.java index a7800301..ade74a27 100644 --- a/src/main/java/io/supertokens/storage/postgresql/Start.java +++ b/src/main/java/io/supertokens/storage/postgresql/Start.java @@ -3287,11 +3287,11 @@ public void deleteOAuthLogoutChallengesBefore(long time) throws StorageQueryExce @Override public void createOrUpdateOAuthSession(AppIdentifier appIdentifier, String gid, String clientId, String externalRefreshToken, String internalRefreshToken, - String sessionHandle, List jtis, long exp) + String sessionHandle, String jti, long exp) throws StorageQueryException, OAuthClientNotFoundException { try { OAuthQueries.createOrUpdateOAuthSession(this, appIdentifier, gid, clientId, externalRefreshToken, - internalRefreshToken, sessionHandle, jtis, exp); + internalRefreshToken, sessionHandle, jti, exp); } catch (SQLException e) { ServerErrorMessage errorMessage = ((PSQLException) e).getServerErrorMessage(); PostgreSQLConfig config = Config.getConfig(this); diff --git a/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java b/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java index 58a26efd..43c66432 100644 --- a/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java +++ b/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java @@ -163,15 +163,15 @@ public static OAuthClient getOAuthClientById(Start start, String clientId, AppId public static void createOrUpdateOAuthSession(Start start, AppIdentifier appIdentifier, @NotNull String gid, @NotNull String clientId, String externalRefreshToken, String internalRefreshToken, String sessionHandle, - List jtis, long exp) + String jti, long exp) throws SQLException, StorageQueryException { String sessionTable = Config.getConfig(start).getOAuthSessionsTable(); String QUERY = "INSERT INTO " + sessionTable + " (gid, client_id, app_id, external_refresh_token, internal_refresh_token, session_handle, jti, exp) VALUES (?, ?, ?, ?, ?, ?, ?, ?) " + "ON CONFLICT (gid) DO UPDATE SET external_refresh_token = ?, internal_refresh_token = ?, " + - "session_handle = ? , jti = CONCAT("+sessionTable+".jti, ',' , ?), exp = ?"; + "session_handle = ? , jti = CONCAT("+sessionTable+".jti, ?), exp = ?"; update(start, QUERY, pst -> { - String jtiDbValue = jtis == null ? null : String.join(",", jtis); + String jtiToInsert = jti + ","; pst.setString(1, gid); pst.setString(2, clientId); @@ -179,13 +179,13 @@ public static void createOrUpdateOAuthSession(Start start, AppIdentifier appIden pst.setString(4, externalRefreshToken); pst.setString(5, internalRefreshToken); pst.setString(6, sessionHandle); - pst.setString(7, jtiDbValue); + pst.setString(7, jtiToInsert); //the starting list element also has to have a "," at the end as the remove removes "jti + ," pst.setLong(8, exp); pst.setString(9, externalRefreshToken); pst.setString(10, internalRefreshToken); pst.setString(11, sessionHandle); - pst.setString(12, jtiDbValue); + pst.setString(12, jtiToInsert); pst.setLong(13, exp); }); } @@ -283,7 +283,7 @@ public static boolean deleteJTIFromOAuthSession(Start start, AppIdentifier appId + " SET jti = REPLACE(jti, ?, '')" // deletion means replacing the jti with empty char + " WHERE app_id = ? and gid = ?"; int numberOfRows = update(start, DELETE, pst -> { - pst.setString(1, jti); + pst.setString(1, jti + ","); //removing with the "," to not leave behind trash pst.setString(2, appIdentifier.getAppId()); pst.setString(3, gid); }); From 036200342d288b933963d895fae0642cc7837ae3 Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Mon, 28 Oct 2024 17:04:23 +0530 Subject: [PATCH 12/18] fix: flaky test --- .../storage/postgresql/test/DbConnectionPoolTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/io/supertokens/storage/postgresql/test/DbConnectionPoolTest.java b/src/test/java/io/supertokens/storage/postgresql/test/DbConnectionPoolTest.java index 2a8aa753..3a7f5935 100644 --- a/src/test/java/io/supertokens/storage/postgresql/test/DbConnectionPoolTest.java +++ b/src/test/java/io/supertokens/storage/postgresql/test/DbConnectionPoolTest.java @@ -287,6 +287,16 @@ public void testMinimumIdleConnectionForTenants() throws Exception { Thread.sleep(1000); // let the new tenant be ready + for (int retry = 0; retry < 5; retry++) { + try { + assertEquals(10, start.getDbActivityCount("st1")); + break; + } catch (AssertionError e) { + Thread.sleep(1000); + continue; + } + } + assertEquals(10, start.getDbActivityCount("st1")); // change connection pool size From 29c7124e2b8057a196d39ee1c5b8e3740a7e0444 Mon Sep 17 00:00:00 2001 From: Mihaly Lengyel Date: Mon, 28 Oct 2024 12:50:02 +0100 Subject: [PATCH 13/18] adding dev-v7.2.0 tag to this commit to ensure building --- jar/postgresql-plugin-7.2.0.jar | Bin 235310 -> 235208 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/jar/postgresql-plugin-7.2.0.jar b/jar/postgresql-plugin-7.2.0.jar index 85e6e464e030e16afed7fddaa9459999a9a63e12..63ddfdd08e0c4cd4904d552a482b61cfc6c74525 100644 GIT binary patch delta 42923 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 delta 42953 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 Date: Mon, 28 Oct 2024 17:20:07 +0100 Subject: [PATCH 14/18] ci: add missing image to ci config --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8fd9177a..5bcca6e9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,6 +5,7 @@ jobs: test: docker: - image: rishabhpoddar/supertokens_postgresql_plugin_test + - image: rishabhpoddar/oauth-server-cicd resource_class: large steps: - add_ssh_keys: From dc86ab9e3a27bb2326555bdeb2bba14bb7777485 Mon Sep 17 00:00:00 2001 From: Mihaly Lengyel Date: Mon, 28 Oct 2024 17:20:35 +0100 Subject: [PATCH 15/18] fix: remove System.out --- .../io/supertokens/storage/postgresql/queries/OAuthQueries.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java b/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java index 43c66432..c6f59566 100644 --- a/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java +++ b/src/main/java/io/supertokens/storage/postgresql/queries/OAuthQueries.java @@ -204,7 +204,6 @@ public static List getOAuthClients(Start start, AppIdentifier appId for (int i = 0; i < clientIds.size(); i++) { pst.setString(i + 2, clientIds.get(i)); } - System.out.println(pst); }, (result) -> { List res = new ArrayList<>(); while (result.next()) { From 609c0949e4e58da74969bd5e88651ae064911a77 Mon Sep 17 00:00:00 2001 From: Mihaly Lengyel Date: Mon, 28 Oct 2024 17:27:09 +0100 Subject: [PATCH 16/18] adding dev-v7.2.0 tag to this commit to ensure building --- jar/postgresql-plugin-7.2.0.jar | Bin 235208 -> 235144 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/jar/postgresql-plugin-7.2.0.jar b/jar/postgresql-plugin-7.2.0.jar index 63ddfdd08e0c4cd4904d552a482b61cfc6c74525..72650218b5986accd4768775e456bb5d81993a50 100644 GIT binary patch delta 9925 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 Date: Tue, 29 Oct 2024 02:53:23 +0100 Subject: [PATCH 17/18] chore: changelog consistency --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6654366e..af622075 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ```sql CREATE TABLE IF NOT EXISTS oauth_clients ( app_id VARCHAR(64), - client_id VARCHAR(128) NOT NULL, + client_id VARCHAR(255) NOT NULL, is_client_credentials_only BOOLEAN NOT NULL, PRIMARY KEY (app_id, client_id), FOREIGN KEY(app_id) REFERENCES apps(app_id) ON DELETE CASCADE @@ -41,7 +41,7 @@ CREATE INDEX IF NOT EXISTS oauth_session_external_refresh_token_index ON oauth_s CREATE TABLE IF NOT EXISTS oauth_m2m_tokens ( app_id VARCHAR(64) DEFAULT 'public', - client_id VARCHAR(128) NOT NULL, + client_id VARCHAR(255) NOT NULL, iat BIGINT NOT NULL, exp BIGINT NOT NULL, PRIMARY KEY (app_id, client_id, iat), @@ -54,7 +54,7 @@ CREATE INDEX IF NOT EXISTS oauth_m2m_token_exp_index ON oauth_m2m_tokens(exp DES CREATE TABLE IF NOT EXISTS oauth_logout_challenges ( app_id VARCHAR(64) DEFAULT 'public', challenge VARCHAR(128) NOT NULL, - client_id VARCHAR(128) NOT NULL, + client_id VARCHAR(255) NOT NULL, post_logout_redirect_uri VARCHAR(1024), session_handle VARCHAR(128), state VARCHAR(128), From 71a33d83110735dc6ad95312bd1b4d1490b8a3e5 Mon Sep 17 00:00:00 2001 From: Sattvik Chakravarthy Date: Wed, 30 Oct 2024 15:30:50 +0530 Subject: [PATCH 18/18] adding dev-v7.2.0 tag to this commit to ensure building --- jar/postgresql-plugin-7.2.0.jar | Bin 235144 -> 235144 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/jar/postgresql-plugin-7.2.0.jar b/jar/postgresql-plugin-7.2.0.jar index 72650218b5986accd4768775e456bb5d81993a50..d8e15676835bb46788d7664ac2c22573c6de8ff7 100644 GIT binary patch delta 4016 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 XE7p@IyjT%@NP6~>C{DQ7kgT5p*4pa4 delta 3967 zcmZWr2~<_*5&jnilzkTgg$M)`1q5RhpDb}fS=4AXAW)6gY8yZZ2xt(V3m_;0Px#fi zkYXdjh=f;to*W{28m&}Cqj9B*#s)QNQfVS?)y|!JSuVVD;Le%(=9}f8f9@?jXi<33 z!hCilA265@6BDwuIKIr>i%XApW_rORmcWlm|KP{rZ$*k9Cu)b!ebM1^ko3@*(GcmW zHv|kGAPI)74z`h^)$n~Cf)?qJ9~!^~uG!6{}yN%v~tG)y+r zTQdlSsYZTpNdi~`g~cvrixKzMuqe6YpARst+z^jlEXxd`PbN*5p5mm2&O^A%Wcv5P zD9wqZopKjW$IyIJEV(#fRBiY`Lek9$$=3yl(V{Ak4>wGjK{v_J$VD{N6y1ZeXsQuP zC4Z*X7)@BY(r8pIa;3|dxm5D`{m0uA1`yJzbGsX$FD)+}fSss$-D!IRPJMxqxKqyj zb*1H&`o>xlEaY$s-Q$8ZP2ud2ob0U;^iLM3JAaEVMwtE|2Muz$soU8ftf6$5X^}!m)-(k=jKhlE^D2=&FPswDRli5jG zD)eAy?9tjhoZ4Vey~AAv=H5UDd!jLNEREoJ8abCN5+Bu4laYAitm*rdNr4GC#)*30;mqzpz=focSL1q8YoY1mXx~Aan52_8aKlde-)SS zIRbAo@J>uw~v?umS+G%2InUeT`sP8u}1m1XPNtlY;^K+Tt)G21$FVE1;K-RV&kH^o*xSu^4 z29$Z%VCxU1^5K{lm6XfB>T=TM8aasHrz%M!cUr`R^cTv&a&f&u_;?0IP#_2GE#+HOE?%E zU8WH+=}IzZasfb1`v5G(={#jRZ{`7DibD@zsEE<>Aa`lIT&sTb#2=a(@irkJs1iBq z(&HfCy>r>Xljs94e$6NWpCR(>k6I1dIz{`bE43GKTb0cI^)Z+nebE74k3Ky)pHBzN zkN#a2OI;%@vhIo&OMxZ^by+RM(QGByg+j2j&ZfdToBN5^;mlqf%jRZSid%U4WOEBb z9>Zy?x4@Q#a?Xp^a1Wf?*bPAQVg(i2?QE)O+`#c&E#fjjotUJkzscY}NE{eFG3^OV zMzayTb5%VWl7`rL(U_~;y|S$3tAk-_41vR4s=}_z5cQw%G>o6K4g!U&M(1Gh&sE$8 z10}t_lf4Y~bshwor*hs@Om$@q5n@&=H5W5CDE)0)1vHDdN~Tch6TlnEA4pY<(@EL| zJv~j5u(g$vHl!!wWu57YOjs4)LU{{R5uY|mP=AqEth~(5#ou_^k(PF06``Wp<$e zc)ob9*m8>apgs+^`UC(oU#kF8U!^Y!_afK{ja1Aj30!Wov&E)zh>nqHu9vbdFQChHd8tEms-FihN>}^qJ1}Y#unm&p=s7H zis4}Y3I{t!Rr`+j)SiJDcqLp_rkkoZ$rlg#+FW7J9X-* zCT=~DCVbV)USGgXMcsO(C3E05Gq1ya?V1qg(o@O8>ESII_JkzP>iZG%^HH^@D^{|7 zHN0+HdRgKdsI{2ZN*(axU^O2-kGu7O^kHN|$Xr!5-(BqIxk_0Y58=|XombR$N30e} z6W$+v`y#aaP`@>?|79;H_%hXCq6x4AS;uR&$xeKou55!s&%J>Wc7#O2S6`?q$uJu( zEx>4;^6;nP-5bLRX-Fnyk_vXuiwkW&pMlY4mcX1kPv>ywMu_4PWuI0_+9is%qk#>< zO@_QvKAyGc7?e_NPDr4Nw`H!(lF$S(4x+BCQFT;o0}i XofO}Vw-d$NlnHOGP+H_%$&>yMuVA?{