Skip to content

Commit

Permalink
- OCCapabilities: allow MDM/branding control over default values for …
Browse files Browse the repository at this point in the history
…block_password_removal in case block_password_removal is not provided by the server

- OCConnection: add option connection.block-password-removal-default and associated metadata to the class
  • Loading branch information
felix-schwarz committed Feb 5, 2025
1 parent 2f1ca96 commit 807a5dc
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 6 deletions.
14 changes: 10 additions & 4 deletions ownCloudSDK/Connection/Capabilities/OCCapabilities.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#import "OCCapabilities.h"
#import "OCMacros.h"
#import "OCConnection.h"
#import "NSObject+OCClassSettings.h"

#define WithDefault(val,def) (((val)==nil)?(def):(val))

Expand Down Expand Up @@ -664,24 +665,29 @@ - (OCCapabilityBool)publicSharingPasswordEnforcedForUploadOnly
return (OCTypedCast(_capabilities[@"files_sharing"][@"public"][@"password"][@"enforced_for"][@"upload_only"], NSNumber));
}

- (OCCapabilityBool)_blockPasswordRemovalDefault
{
return ([OCConnection classSettingForOCClassSettingsKey:OCConnectionBlockPasswordRemovalDefault]);
}

- (OCCapabilityBool)publicSharingPasswordBlockRemovalForReadOnly
{
return (WithDefault(OCTypedCast(_capabilities[@"files_sharing"][@"public"][@"password"][@"block_password_removal"][@"read_only"], NSNumber), @NO));
return (WithDefault(OCTypedCast(_capabilities[@"files_sharing"][@"public"][@"password"][@"block_password_removal"][@"read_only"], NSNumber), self._blockPasswordRemovalDefault));
}

- (OCCapabilityBool)publicSharingPasswordBlockRemovalForReadWrite
{
return (WithDefault(OCTypedCast(_capabilities[@"files_sharing"][@"public"][@"password"][@"block_password_removal"][@"read_write"], NSNumber), @NO));
return (WithDefault(OCTypedCast(_capabilities[@"files_sharing"][@"public"][@"password"][@"block_password_removal"][@"read_write"], NSNumber), self._blockPasswordRemovalDefault));
}

- (OCCapabilityBool)publicSharingPasswordBlockRemovalForReadWriteDelete
{
return (WithDefault(OCTypedCast(_capabilities[@"files_sharing"][@"public"][@"password"][@"block_password_removal"][@"read_write_delete"], NSNumber), @NO));
return (WithDefault(OCTypedCast(_capabilities[@"files_sharing"][@"public"][@"password"][@"block_password_removal"][@"read_write_delete"], NSNumber), self._blockPasswordRemovalDefault));
}

- (OCCapabilityBool)publicSharingPasswordBlockRemovalForUploadOnly
{
return (WithDefault(OCTypedCast(_capabilities[@"files_sharing"][@"public"][@"password"][@"block_password_removal"][@"upload_only"], NSNumber), @NO));
return (WithDefault(OCTypedCast(_capabilities[@"files_sharing"][@"public"][@"password"][@"block_password_removal"][@"upload_only"], NSNumber), self._blockPasswordRemovalDefault));
}

- (OCCapabilityBool)publicSharingExpireDateAddDefaultDate
Expand Down
1 change: 1 addition & 0 deletions ownCloudSDK/Connection/OCConnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,7 @@ extern OCClassSettingsKey OCConnectionPlainHTTPPolicy; //!< Either "warn" (for O
extern OCClassSettingsKey OCConnectionAlwaysRequestPrivateLink; //!< Controls whether private links are requested with regular PROPFINDs.
extern OCClassSettingsKey OCConnectionTransparentTemporaryRedirect; //!< Allows (TRUE) transparent handling of 307 redirects at the HTTP pipeline level.
extern OCClassSettingsKey OCConnectionValidatorFlags; //!< Allows fine-tuning the behavior of the connection validator.
extern OCClassSettingsKey OCConnectionBlockPasswordRemovalDefault; //!< Controls the value of the `block_password_removal`-based capabilities if the server provides no value for it. This controls whether passwords can be removed from an existing link even though passwords need to be enforced on creation as per capabilities.

extern OCConnectionOptionKey OCConnectionOptionRequestObserverKey;
extern OCConnectionOptionKey OCConnectionOptionLastModificationDateKey; //!< Last modification date for uploads
Expand Down
15 changes: 13 additions & 2 deletions ownCloudSDK/Connection/OCConnection.m
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ + (OCClassSettingsIdentifier)classSettingsIdentifier
OCConnectionPlainHTTPPolicy,
OCConnectionAlwaysRequestPrivateLink,
OCConnectionTransparentTemporaryRedirect,
OCConnectionValidatorFlags
OCConnectionValidatorFlags,
OCConnectionBlockPasswordRemovalDefault
]);
}

Expand Down Expand Up @@ -154,7 +155,8 @@ + (OCClassSettingsIdentifier)classSettingsIdentifier
OCConnectionAllowCellular : @(YES),
OCConnectionPlainHTTPPolicy : @"warn",
OCConnectionAlwaysRequestPrivateLink : @(NO),
OCConnectionTransparentTemporaryRedirect : @(NO)
OCConnectionTransparentTemporaryRedirect : @(NO),
OCConnectionBlockPasswordRemovalDefault : @(YES)
});
}

Expand Down Expand Up @@ -349,6 +351,14 @@ + (OCClassSettingsMetadataCollection)classSettingsMetadata
OCClassSettingsMetadataKeyCategory : @"Security",
OCClassSettingsMetadataKeyFlags : @(OCClassSettingsFlagDenyUserPreferences)
},

OCConnectionBlockPasswordRemovalDefault : @{
OCClassSettingsMetadataKeyType : OCClassSettingsMetadataTypeBoolean,
OCClassSettingsMetadataKeyDescription : @"If a server does not provide `block_password_removal` information as part of its capabilities, this option provides the fallback value controlling whether passwords can (value: false) or can not (value: true) be removed from an existing link even if capabilities otherwise indicate passwords need to be enforced for links.",
OCClassSettingsMetadataKeyStatus : OCClassSettingsKeyStatusAdvanced,
OCClassSettingsMetadataKeyCategory : @"Security",
OCClassSettingsMetadataKeyFlags : @(OCClassSettingsFlagDenyUserPreferences)
}
});
}

Expand Down Expand Up @@ -3400,6 +3410,7 @@ - (NSError *)sendSynchronousRequest:(OCHTTPRequest *)request
OCClassSettingsKey OCConnectionAlwaysRequestPrivateLink = @"always-request-private-link";
OCClassSettingsKey OCConnectionTransparentTemporaryRedirect = @"transparent-temporary-redirect";
OCClassSettingsKey OCConnectionValidatorFlags = @"validator-flags";
OCClassSettingsKey OCConnectionBlockPasswordRemovalDefault = @"block-password-removal-default";

OCConnectionOptionKey OCConnectionOptionRequestObserverKey = @"request-observer";
OCConnectionOptionKey OCConnectionOptionLastModificationDateKey = @"last-modification-date";
Expand Down

0 comments on commit 807a5dc

Please sign in to comment.