diff --git a/OpenCloudSDK/Bookmark/OCBookmark.h b/OpenCloudSDK/Bookmark/OCBookmark.h index 0b40b896..7d002157 100644 --- a/OpenCloudSDK/Bookmark/OCBookmark.h +++ b/OpenCloudSDK/Bookmark/OCBookmark.h @@ -101,6 +101,8 @@ extern OCBookmarkUserInfoKey OCBookmarkUserInfoKeyStatusInfo; //!< .userInfo ke extern OCBookmarkUserInfoKey OCBookmarkUserInfoKeyAllowHTTPConnection; //!< .userInfo key with a NSDate value. To be set to the date that the user was informed and allowed the usage of HTTP. To be removed otherwise. extern OCBookmarkUserInfoKey OCBookmarkUserInfoKeyBookmarkCreation; //!< .userInfo key with a NSDictionary holding information on the creation of the bookmark. extern OCBookmarkUserInfoKey OCBookmarkUserInfoKeyPreferredUsername; //!< .userInfo key with an NSString holding the preferred_username from the OIDC id_token JWT, for use as login_hint on re-auth. +extern OCBookmarkUserInfoKey OCBookmarkUserInfoKeyCustomHTTPHeaderName; //!< .userInfo key with an NSString holding the name of a custom HTTP header to attach to every request for this account. +extern OCBookmarkUserInfoKey OCBookmarkUserInfoKeyCustomHTTPHeaderValue; //!< .userInfo key with an NSString holding the value of the custom HTTP header to attach to every request for this account. extern OCBookmarkCapability OCBookmarkCapabilityDrives; //!< This bookmark is drive-based. extern OCBookmarkCapability OCBookmarkCapabilityFavorites; //!< This bookmark supports favorites. diff --git a/OpenCloudSDK/Bookmark/OCBookmark.m b/OpenCloudSDK/Bookmark/OCBookmark.m index f1443e04..7167defc 100644 --- a/OpenCloudSDK/Bookmark/OCBookmark.m +++ b/OpenCloudSDK/Bookmark/OCBookmark.m @@ -628,6 +628,8 @@ + (OCIPCNotificationName)bookmarkAuthUpdateNotificationName OCBookmarkUserInfoKey OCBookmarkUserInfoKeyAllowHTTPConnection = @"OCAllowHTTPConnection"; OCBookmarkUserInfoKey OCBookmarkUserInfoKeyBookmarkCreation = @"bookmark-creation"; OCBookmarkUserInfoKey OCBookmarkUserInfoKeyPreferredUsername = @"preferred-username"; +OCBookmarkUserInfoKey OCBookmarkUserInfoKeyCustomHTTPHeaderName = @"custom-http-header-name"; +OCBookmarkUserInfoKey OCBookmarkUserInfoKeyCustomHTTPHeaderValue = @"custom-http-header-value"; OCBookmarkCapability OCBookmarkCapabilityDrives = @"drives"; OCBookmarkCapability OCBookmarkCapabilityFavorites = @"favorites"; diff --git a/OpenCloudSDK/Connection/OCConnection.m b/OpenCloudSDK/Connection/OCConnection.m index af5997b1..64023e40 100644 --- a/OpenCloudSDK/Connection/OCConnection.m +++ b/OpenCloudSDK/Connection/OCConnection.m @@ -715,6 +715,16 @@ - (OCHTTPRequest *)pipeline:(OCHTTPPipeline *)pipeline prepareRequestForScheduli [request addHeaderFields:_staticHeaderFields]; } + // Per-bookmark custom HTTP header (e.g. for reverse-proxy auth gating). See discussion opencloud-eu#2557. + NSString *customHeaderName = (NSString *)self.bookmark.userInfo[OCBookmarkUserInfoKeyCustomHTTPHeaderName]; + NSString *customHeaderValue = (NSString *)self.bookmark.userInfo[OCBookmarkUserInfoKeyCustomHTTPHeaderValue]; + + if ([customHeaderName isKindOfClass:NSString.class] && (customHeaderName.length > 0) && + [customHeaderValue isKindOfClass:NSString.class] && (customHeaderValue.length > 0)) + { + [request setValue:customHeaderValue forHeaderField:customHeaderName]; + } + return (request); }