Skip to content

Commit 8151588

Browse files
committed
fix: oauth updates
1 parent 9e0ac59 commit 8151588

File tree

4 files changed

+560
-1
lines changed

4 files changed

+560
-1
lines changed

src/main/java/io/supertokens/storage/mysql/Start.java

+158-1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
import io.supertokens.pluginInterface.multitenancy.exceptions.DuplicateThirdPartyIdException;
5858
import io.supertokens.pluginInterface.multitenancy.exceptions.TenantOrAppNotFoundException;
5959
import io.supertokens.pluginInterface.multitenancy.sqlStorage.MultitenancySQLStorage;
60+
import io.supertokens.pluginInterface.oauth.OAuthLogoutChallenge;
61+
import io.supertokens.pluginInterface.oauth.OAuthStorage;
6062
import io.supertokens.pluginInterface.passwordless.PasswordlessCode;
6163
import io.supertokens.pluginInterface.passwordless.PasswordlessDevice;
6264
import io.supertokens.pluginInterface.passwordless.exception.*;
@@ -112,7 +114,7 @@ public class Start
112114
implements SessionSQLStorage, EmailPasswordSQLStorage, EmailVerificationSQLStorage, ThirdPartySQLStorage,
113115
JWTRecipeSQLStorage, PasswordlessSQLStorage, UserMetadataSQLStorage, UserRolesSQLStorage, UserIdMappingStorage,
114116
UserIdMappingSQLStorage, MultitenancyStorage, MultitenancySQLStorage, DashboardSQLStorage, TOTPSQLStorage,
115-
ActiveUsersStorage, ActiveUsersSQLStorage, AuthRecipeSQLStorage {
117+
ActiveUsersStorage, ActiveUsersSQLStorage, AuthRecipeSQLStorage, OAuthStorage {
116118

117119
// these configs are protected from being modified / viewed by the dev using the SuperTokens
118120
// SaaS. If the core is not running in SuperTokens SaaS, this array has no effect.
@@ -3034,6 +3036,161 @@ public int countUsersThatHaveMoreThanOneLoginMethodOrTOTPEnabledAndActiveSince(A
30343036
}
30353037
}
30363038

3039+
@Override
3040+
public boolean doesClientIdExistForApp(AppIdentifier appIdentifier, String clientId)
3041+
throws StorageQueryException {
3042+
try {
3043+
return OAuthQueries.isClientIdForAppId(this, clientId, appIdentifier);
3044+
} catch (SQLException e) {
3045+
throw new StorageQueryException(e);
3046+
}
3047+
}
3048+
3049+
@Override
3050+
public void addOrUpdateClientForApp(AppIdentifier appIdentifier, String clientId, boolean isClientCredentialsOnly)
3051+
throws StorageQueryException {
3052+
try {
3053+
OAuthQueries.insertClientIdForAppId(this, appIdentifier, clientId, isClientCredentialsOnly);
3054+
} catch (SQLException e) {
3055+
throw new StorageQueryException(e);
3056+
}
3057+
}
3058+
3059+
@Override
3060+
public boolean removeAppClientAssociation(AppIdentifier appIdentifier, String clientId)
3061+
throws StorageQueryException {
3062+
try {
3063+
return OAuthQueries.deleteClientIdForAppId(this, clientId, appIdentifier);
3064+
} catch (SQLException e) {
3065+
throw new StorageQueryException(e);
3066+
}
3067+
}
3068+
3069+
@Override
3070+
public List<String> listClientsForApp(AppIdentifier appIdentifier) throws StorageQueryException {
3071+
try {
3072+
return OAuthQueries.listClientsForApp(this, appIdentifier);
3073+
} catch (SQLException e) {
3074+
throw new StorageQueryException(e);
3075+
}
3076+
}
3077+
3078+
@Override
3079+
public void revoke(AppIdentifier appIdentifier, String targetType, String targetValue, long exp)
3080+
throws StorageQueryException {
3081+
try {
3082+
OAuthQueries.revoke(this, appIdentifier, targetType, targetValue, exp);
3083+
} catch (SQLException e) {
3084+
throw new StorageQueryException(e);
3085+
}
3086+
}
3087+
3088+
@Override
3089+
public boolean isRevoked(AppIdentifier appIdentifier, String[] targetTypes, String[] targetValues, long issuedAt)
3090+
throws StorageQueryException {
3091+
try {
3092+
return OAuthQueries.isRevoked(this, appIdentifier, targetTypes, targetValues, issuedAt);
3093+
} catch (SQLException e) {
3094+
throw new StorageQueryException(e);
3095+
}
3096+
}
3097+
3098+
@Override
3099+
public void addM2MToken(AppIdentifier appIdentifier, String clientId, long iat, long exp)
3100+
throws StorageQueryException {
3101+
try {
3102+
OAuthQueries.addM2MToken(this, appIdentifier, clientId, iat, exp);
3103+
} catch (SQLException e) {
3104+
throw new StorageQueryException(e);
3105+
}
3106+
}
3107+
3108+
@Override
3109+
public void addLogoutChallenge(AppIdentifier appIdentifier, String challenge, String clientId,
3110+
String postLogoutRedirectionUri, String sessionHandle, String state, long timeCreated) throws StorageQueryException {
3111+
try {
3112+
OAuthQueries.addLogoutChallenge(this, appIdentifier, challenge, clientId, postLogoutRedirectionUri, sessionHandle, state, timeCreated);
3113+
} catch (SQLException e) {
3114+
throw new StorageQueryException(e);
3115+
}
3116+
}
3117+
3118+
@Override
3119+
public OAuthLogoutChallenge getLogoutChallenge(AppIdentifier appIdentifier, String challenge)
3120+
throws StorageQueryException {
3121+
try {
3122+
return OAuthQueries.getLogoutChallenge(this, appIdentifier, challenge);
3123+
} catch (SQLException e) {
3124+
throw new StorageQueryException(e);
3125+
}
3126+
}
3127+
3128+
@Override
3129+
public void deleteLogoutChallenge(AppIdentifier appIdentifier, String challenge) throws StorageQueryException {
3130+
try {
3131+
OAuthQueries.deleteLogoutChallenge(this, appIdentifier, challenge);
3132+
} catch (SQLException e) {
3133+
throw new StorageQueryException(e);
3134+
}
3135+
}
3136+
3137+
@Override
3138+
public void deleteLogoutChallengesBefore(AppIdentifier appIdentifier, long time) throws StorageQueryException {
3139+
try {
3140+
OAuthQueries.deleteLogoutChallengesBefore(this, appIdentifier, time);
3141+
} catch (SQLException e) {
3142+
throw new StorageQueryException(e);
3143+
}
3144+
}
3145+
3146+
@Override
3147+
public void cleanUpExpiredAndRevokedTokens(AppIdentifier appIdentifier) throws StorageQueryException {
3148+
try {
3149+
OAuthQueries.cleanUpExpiredAndRevokedTokens(this, appIdentifier);
3150+
} catch (SQLException e) {
3151+
throw new StorageQueryException(e);
3152+
}
3153+
}
3154+
3155+
@Override
3156+
public int countTotalNumberOfM2MTokensAlive(AppIdentifier appIdentifier) throws StorageQueryException {
3157+
try {
3158+
return OAuthQueries.countTotalNumberOfM2MTokensAlive(this, appIdentifier);
3159+
} catch (SQLException e) {
3160+
throw new StorageQueryException(e);
3161+
}
3162+
}
3163+
3164+
@Override
3165+
public int countTotalNumberOfM2MTokensCreatedSince(AppIdentifier appIdentifier, long since)
3166+
throws StorageQueryException {
3167+
try {
3168+
return OAuthQueries.countTotalNumberOfM2MTokensCreatedSince(this, appIdentifier, since);
3169+
} catch (SQLException e) {
3170+
throw new StorageQueryException(e);
3171+
}
3172+
}
3173+
3174+
@Override
3175+
public int countTotalNumberOfClientCredentialsOnlyClientsForApp(AppIdentifier appIdentifier)
3176+
throws StorageQueryException {
3177+
try {
3178+
return OAuthQueries.countTotalNumberOfClientsForApp(this, appIdentifier, true);
3179+
} catch (SQLException e) {
3180+
throw new StorageQueryException(e);
3181+
}
3182+
}
3183+
3184+
@Override
3185+
public int countTotalNumberOfClientsForApp(AppIdentifier appIdentifier) throws StorageQueryException {
3186+
try {
3187+
return OAuthQueries.countTotalNumberOfClientsForApp(this, appIdentifier, false);
3188+
} catch (SQLException e) {
3189+
throw new StorageQueryException(e);
3190+
}
3191+
}
3192+
3193+
30373194
public static boolean isEnabledForDeadlockTesting() {
30383195
return enableForDeadlockTesting;
30393196
}

src/main/java/io/supertokens/storage/mysql/config/MySQLConfig.java

+16
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,22 @@ public String getTotpUsedCodesTable() {
373373
return addPrefixToTableName("totp_used_codes");
374374
}
375375

376+
public String getOAuthClientsTable() {
377+
return addPrefixToTableName("oauth_clients");
378+
}
379+
380+
public String getOAuthRevokeTable() {
381+
return addPrefixToTableName("oauth_revoke");
382+
}
383+
384+
public String getOAuthM2MTokensTable() {
385+
return addPrefixToTableName("oauth_m2m_tokens");
386+
}
387+
388+
public String getOAuthLogoutChallengesTable() {
389+
return addPrefixToTableName("oauth_logout_challenges");
390+
}
391+
376392
private String addPrefixToTableName(String tableName) {
377393
return mysql_table_names_prefix + tableName;
378394
}

src/main/java/io/supertokens/storage/mysql/queries/GeneralQueries.java

+30
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,36 @@ public static void createTablesIfNotExists(Start start, Connection con) throws S
416416
// index:
417417
update(con, TOTPQueries.getQueryToCreateUsedCodesExpiryTimeIndex(start), NO_OP_SETTER);
418418
}
419+
420+
if (!doesTableExists(start, con, Config.getConfig(start).getOAuthClientsTable())) {
421+
getInstance(start).addState(CREATING_NEW_TABLE, null);
422+
update(con, OAuthQueries.getQueryToCreateOAuthClientTable(start), NO_OP_SETTER);
423+
}
424+
425+
if (!doesTableExists(start, con, Config.getConfig(start).getOAuthRevokeTable())) {
426+
getInstance(start).addState(CREATING_NEW_TABLE, null);
427+
update(con, OAuthQueries.getQueryToCreateOAuthRevokeTable(start), NO_OP_SETTER);
428+
429+
// index
430+
update(con, OAuthQueries.getQueryToCreateOAuthRevokeTimestampIndex(start), NO_OP_SETTER);
431+
}
432+
433+
if (!doesTableExists(start, con, Config.getConfig(start).getOAuthM2MTokensTable())) {
434+
getInstance(start).addState(CREATING_NEW_TABLE, null);
435+
update(con, OAuthQueries.getQueryToCreateOAuthM2MTokensTable(start), NO_OP_SETTER);
436+
437+
// index
438+
update(con, OAuthQueries.getQueryToCreateOAuthM2MTokenIatIndex(start), NO_OP_SETTER);
439+
update(con, OAuthQueries.getQueryToCreateOAuthM2MTokenExpIndex(start), NO_OP_SETTER);
440+
}
441+
442+
if (!doesTableExists(start, con, Config.getConfig(start).getOAuthLogoutChallengesTable())) {
443+
getInstance(start).addState(CREATING_NEW_TABLE, null);
444+
update(con, OAuthQueries.getQueryToCreateOAuthLogoutChallengesTable(start), NO_OP_SETTER);
445+
446+
// index
447+
update(con, OAuthQueries.getQueryToCreateOAuthLogoutChallengesTimeCreatedIndex(start), NO_OP_SETTER);
448+
}
419449
}
420450

421451
@TestOnly

0 commit comments

Comments
 (0)