Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feature/security-first-mdm] Add MDM/branding control over block_password_removal default value #139

Merged
merged 1 commit into from
Feb 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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