Skip to content

Commit

Permalink
- OAuth2: add authentication-oauth2.omit-authorization-parameters opt…
Browse files Browse the repository at this point in the history
…ion to allow omitting parameters from authorization requests (implements owncloud/ios-app#1318)
  • Loading branch information
felix-schwarz committed Jan 22, 2024
1 parent d9e7c10 commit b66dc84
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
1 change: 1 addition & 0 deletions ownCloudSDK/Authentication/OCAuthenticationMethodOAuth2.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,6 @@ extern OCClassSettingsKey OCAuthenticationMethodOAuth2RedirectURI;
extern OCClassSettingsKey OCAuthenticationMethodOAuth2ClientID;
extern OCClassSettingsKey OCAuthenticationMethodOAuth2ClientSecret;
extern OCClassSettingsKey OCAuthenticationMethodOAuth2ExpirationOverrideSeconds;
extern OCClassSettingsKey OCAuthenticationMethodOAuth2OmitAuthorizationParameters;

NS_ASSUME_NONNULL_END
22 changes: 22 additions & 0 deletions ownCloudSDK/Authentication/OCAuthenticationMethodOAuth2.m
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,12 @@ + (OCClassSettingsMetadataCollection)classSettingsMetadata
OCClassSettingsMetadataKeyDescription : @"OAuth2 Expiration Override - lets OAuth2 tokens expire after the provided number of seconds (useful to prompt quick `refresh_token` requests for testing)",
OCClassSettingsMetadataKeyStatus : OCClassSettingsKeyStatusDebugOnly,
OCClassSettingsMetadataKeyCategory : @"OAuth2"
},
OCAuthenticationMethodOAuth2OmitAuthorizationParameters : @{
OCClassSettingsMetadataKeyType : OCClassSettingsMetadataTypeStringArray,
OCClassSettingsMetadataKeyDescription : @"Omit Authorization Request Parameters - parameter names provided here are omitted from OAuth2 authorization requests.",
OCClassSettingsMetadataKeyStatus : OCClassSettingsKeyStatusAdvanced,
OCClassSettingsMetadataKeyCategory : @"OAuth2"
}
});
}
Expand Down Expand Up @@ -385,6 +391,7 @@ - (void)generateBookmarkAuthenticationDataWithConnection:(OCConnection *)connect
if ((options[OCAuthenticationMethodPresentingViewControllerKey] != nil) && (connection!=nil))
{
NSURL *authorizationRequestURL;
NSArray<NSString *> *omitAuthorizationParameters;

// Generate Authorization Request URL
NSDictionary<NSString *,NSString *> *parameters = @{
Expand All @@ -406,6 +413,20 @@ - (void)generateBookmarkAuthenticationDataWithConnection:(OCConnection *)connect

parameters = [self prepareAuthorizationRequestParameters:parameters forConnection:connection options:options];

// Omit parameters from authorization as per settings (default: none)
if ((parameters != nil) && ((omitAuthorizationParameters = [self classSettingForOCClassSettingsKey:OCAuthenticationMethodOAuth2OmitAuthorizationParameters]) != nil))
{
NSMutableDictionary<NSString *, NSString *> *mutableParameters = [parameters mutableCopy];

for (NSString *omitParameter in omitAuthorizationParameters)
{
[mutableParameters removeObjectForKey:omitParameter];
}

parameters = mutableParameters;
}

// Compose authorization request
authorizationRequestURL = [[self authorizationEndpointURLForConnection:connection options:options] urlByAppendingQueryParameters:parameters replaceExisting:NO];

dispatch_async(dispatch_get_main_queue(), ^{
Expand Down Expand Up @@ -1110,3 +1131,4 @@ - (void)sendTokenRequestToConnection:(OCConnection *)connection withParameters:(
OCClassSettingsKey OCAuthenticationMethodOAuth2ClientID = @"oa2-client-id";
OCClassSettingsKey OCAuthenticationMethodOAuth2ClientSecret = @"oa2-client-secret";
OCClassSettingsKey OCAuthenticationMethodOAuth2ExpirationOverrideSeconds = @"oa2-expiration-override-seconds";
OCClassSettingsKey OCAuthenticationMethodOAuth2OmitAuthorizationParameters = @"omit-authorization-parameters";

0 comments on commit b66dc84

Please sign in to comment.