-
Notifications
You must be signed in to change notification settings - Fork 8
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/mdm+branding] SDK version for MDM+Branding app branch #78
Conversation
- remove support for auto-detection of OC installations in "owncloud" subfolder - no longer alert user of root redirects if they happen on the same host with the same scheme (http/https) - OCClassSettings: - add new DictionaryArray and URLString types - add validation support for new types
|
- also include registered metadata when determining available keys for a settings identifier
Codecov Report
@@ Coverage Diff @@
## develop #78 +/- ##
==========================================
- Coverage 1.46% 1.46% -0.01%
==========================================
Files 302 302
Lines 36414 36452 +38
==========================================
Hits 535 535
- Misses 35879 35917 +38
Continue to review full report at Codecov.
|
* - Initial commit of message queue feature * - Fixes and first time working integration with OCCore * - rewrote and moved concept from OCMessageQueue.h to doc/concepts/MessageQueue.md - make OCMessageQueue.enqueue synchronous * - OCMessageQueue - add support for OCMessageAutoResolver to allow automatic message resolution - OCCore+MessageAutoresolver provides support for auto-resolving past auth errors - update MessageQueue.md with updated thoughts - fix lockingProcess validation bug - OCProcessManager - add log tags and debug output for process-ping-pong - bugfix: the directory where process state tracking files were placed was not created - bugfix: OCProcessPing wasn't sending out a ping notification - OCKeyValueStore: add missing IPC updateNotification handling - Add "timestamp" support - OCHTTPResponse.date now contains the date a response was received - OCHTTPPipelineTaskMetrics.responseStartDate stores the date a response started to be received - OCHTTPPipelineTask: use OCHTTPPipelineTaskMetrics.responseStartDate if available to accurately determine OCHTTPResponse.date - OCHTTPPipeline: add response.date to debug output for responses - NSError+OCError: add support for an "NSError.errorDate"; provide macros and methods to easily add errorDate information to NSErrors; formally clean up OCError*Key types - OCConnection: use OCHTTPResponse.date where possible to provide errorDates for NSErrors - OCAuthenticationMethod: provide NSError.errorDate wherever possible * - OCAuthenticationMethodOpenIDConnect: add "profile" to list of default scopes * - OCKeyValueStore: fix cross-process change notification (previously defunct) - OCProcessManager - fix ping/pong mechanism to detect if another process is still running - fix creation of directory for process tracking files * OCAuthenticationMethodOpenIDConnect: add `profile` to list of scopes requested by the auth method, for ocis-oidc compatibility * - OCProcessPing: fix retain-cycle (due to logging) and add early unsubscribe from pongs * - OCCore: explicitely copy queued block in queueBlock: to make sure its properly retained - OCCore+SyncEngine: add detection of missing and defunct remote cores (in other processes) that could previously lead to sync records not getting processed as one process expected another process to process the record, while it wasn't really clear the other process was even listening for the event at this point - OCProcessManager: remove redundant code * - SyncEngine: add -renewActiveProcessCoreRegistration and make sure active process core registrations are re-added if one was erroneously removed previously * - OCSyncIssueTemplate - new template mechanism for sync issues - provides metadata to allow f.ex. issue grouping and user notification actions - global registration and lookup - OCSyncIssue - add methods to add autoChoiceErrors to choices generated from templates - OCSyncAction - make .identifier a class-level property - add APIs to support OCSyncIssueTemplate - actionIssueTemplates: action-specific issue templates - issueTemplates: combines auto-generated issue templates and action-specific issue templates - migrated -_addIssueForCancellationAndDeschedulingToContext:title:description:impact: from OCCore to OCSyncAction, utilizing auto-generated issue templates - OCSYNCACTION_REGISTER_ISSUETEMPLATES macro to register issue templates at SDK load time - OCSyncActionCopyMove - split up into OCSyncActionCopy and OCSyncActionMove to have unique classes for both action identifiers - all OCSyncActions: switch creation of OCSyncIssues to using templates - OCMessage - new properties for categories and threads - OCMessageQueue - new method to retrieve message by UUID * - MessageQueue.md: updated with latest additions - OCSyncActionUpload: add missing identifier values - OCMessage - added .removed property to allow keeping messages around until they can be removed from storage - added presentation* properties to support the delivery of end notifications - OCMessageQueue - added support for end notifications - added new method to manually present a message through a presenter - added OCMessageRemovedNotification notification that's broadcasted on all running processes whenever a message is removed from the queue - added tracking of active presentations - OCMessagePresenter - new OCMessagePresentationResult result for the completion of a presentation to indicate requirements for calls to -endPresentationOfMessage: - refactor and add -endPresentationOfMessage: method - OCWaitConditionIssue: removed old issue handling code (which was already commented out) - code cleanup * - OCRunLoopThread - better handling of situations where there's more than one NSThread object for a thread - new method to determine if a runloop thread is the current thread - OCDatabase - added additional logging - fixed crash in event queuing if an insert fails - OCSQLiteDB - use OCRunLoopThread.isCurrentThread to determine if the current thread is the SQLite thread * OCAuthenticationMethod: fix potential undefined behaviour in updating _cachedAuthenticationSecret if updates happen in quick succession * - OCAuthenticationMethod: add additional logging around local and remote auth secret change notifications and clarify method names - OCAuthenticationMethodOAuth2: add additional logging around authentication data updates following token refreshes - OCBookmarkManager: - add support for IPC list change notifications - add new -updateBookmark: method to allow clients to signal updates of bookmarks to the bookmark manager (triggers notifications and saving) * - added debug logging to OCKeychain * - OCBookmark: flush locally cached copy of .authenticationData if it is changed on another process (via IPC notification) * - OCBookmark: extend authentication data flushing to app / extension resigning active status for improved security (free local copy in memory) and consistency (IPC notifications might not be delivered while app is in background) * - remove OCBookmarkManager.updatedBookmark; please use OCBookmarkManager.updateBookmark with additional safeguarding instead * - OCTypes - OCFileIDUniquePrefix is a new type representing the unique fileID prefix of an item on the server. Background is that OC 10 FileIDs are composed of an 8-digit (%08ld) number and the server's ID (apparently identical across files). That number is unique for every file and also used as the number component in OC10 private links. By using a prefix here, it's possible to support both OC10-style fileID prefixes as well as future full-length fileIDs for searching for items. and FileIDUnique. - NSURL+OCPrivateLink - extracts private link FileIDs from private link URLs - extracts and converts private link FileIDs to a OCFileIDUniquePrefix, which can be used to retrieve an item from the cache - OCCore+Sharing - support for local retrieval/lookup of the item for a private link using the OCFileIDUniquePrefix returned for the private link - additional debug logging - OCConnection+Sharing: added PROPFIND to determine type (file / folder) of resolved resource - OCCoreItemListTask: added additional debug logging - OCDatabase: new -retrieveCacheItemForFileIDUniquePrefix:includingRemoved:completionHandler: method to retrieve an item from the cache using an OCFileIDUniquePrefix * - update bundled version of openssl from 1.0.2q to 1.0.2t * - update bundled version of openssl from 1.0.2t to 1.0.2u * - fixed error reporting if token refresh responses are empty or not valid JSON * - OCBookmark: add bookmark-specific IPC notification when authentication data is changed - OCCore: listen for bookmark-authdata-chnaged notifications (both local & IPC) and reattempt authentication or connection if a change occurs * - add support for OCCoreOptionLastModifiedDate option for [OCCore importFileNamed:…] and [OCCore reportLocalModificationOfItem:…], allowing to specify a custom NSDate as last modified date to use during upload * - OCRunLoopThread: add .uuid property and new property .isCurrentThread based on UUIDs rather than the NSThread pointer - OCSQLiteDB: use OCRunLoopThread.isCurrentThread for OCSQLiteDB.isOnSQLiteThread - OCDatabase: add additional error logging * - OCAuthenticationMethod: add new .authenticationDataKnownInvalidDate property to indicate when authentication has last failed using the current .authenticationData - OCAuthenticationMethodBasicAuth: add support for .authenticationDataKnownInvalidDate - OCAuthenticationMethodOAuth2: adopt .authenticationDataKnownInvalidDate property to avoid unnecessary token refreshes - OCCore: throttle connection attempts to at most once every three seconds if invalid authentication data is to be expected - OCCore+ConnectionStatus: add new OCCoreConnectionStatusSignalConnecting and OCCoreConnectionStatusConnecting - OCCoreConnectionStatusConnecting indicates the OCCore is in the process of connecting - improved status change debug log messages - NSError+OCDAVError: avoid "(null)" in error descriptions * - OCCoreItemListTask: fix issue where new OCItems that were not previously in the cache but are targeted directly by an OCQuery regardless could be returned with a nil .parentLocalID - OCCore+Sharing: move "else" into its own line * - add support for translation of "Sabre\DAV\Exception\NotFound" errors into OCDAVErrorNotFound error code * Logging improvements: - OCLogger: - support for "force" logging, that is, to log a message even if its logLevel would normally exclude it from logging - new logging methods, keeping "old" methods for compatibility with existing app sources - major macro consolidation / cleanup of existing macros - addition of new parametrized forced logging macros - addition of new OCLoggingEnabled() macro - OCHTTPPipeline - HTTP requests and responses are now force-logged if HTTP request/response logging is enabled * - fix kCFRunLoopCommonModes warning * Adding cellular access options: - OCHTTPRequest: new .avoidCellular property controlling whether a request should not be sent over cellular (utilizing NSURLRequest.allowsCellularAccess) - OCConnection: new OCConnectionOptionAllowCellularKey option for up- and downloads to control cellular usage for these - OCCore: new OCCoreOptionAllowCellular option for up- and downloads to control cellular usage for these, to be passed to the import/localModification/download methods via the dictionary passed to the options parameter * - Adding support for cellular configuration - OCCellularSwitch - represents features, areas and/or categories of transfer types - provides localizedName for rich representation - transparently stores/retrieves settings in/from user defaults - supports providing a maximum transfer size for each switch - OCCellularManager - provides convenient access to switches and helps determine if a transfer of a certain size is allowed for a switch - adds master switch to turns off all switches and/or set a maximum transfer size for all switches - OCItemPolicyProcessorAvailableOffline - adds support for new OCCellularSwitchIdentifierAvailableOffline cellular switch * - OCCore: add OCCoreOptionDependsOnCellularSwitch option to make an up-/download's usage of cellular data conditional on the status of a particular cellular switch at the time of scheduling - OCItemPolicyProcessorAvailableOffline: adopt OCCoreOptionDependsOnCellularSwitch - OCSyncActionDownload + OCSyncActionUpload: add support for OCCoreOptionDependsOnCellularSwitch and default to OCCellularSwitchIdentifierMaster if none is provided, fall back on OCCoreOptionAllowCellular instead if it is provided and no OCCoreOptionDependsOnCellularSwitch is provided - OCHTTPRequest: add additional logging to indicate when a request has been set to avoid cellular transfer * - OCCellularManager: add support for nil identifier in -cellularAccessAllowedFor:transferSize: (falls back to master switch in that case) - OCCore: - new sync action categories for wifi-only and wifi-and-cellular uploads and downloads respectively - adapted concurrency budgets based on new wifi-only and wifi-and-cellular categories to ensure at least one cellular up- and download can run respectively * - OCLogger: add new option `log.log-single-lined` that breaks up multi-lined log messages into single lines (on by default) - OCHTTP: add new option `http.prefixed-http-logging` that prefixes each line of the different parts of a HTTP request with `[info]`, `[head]` or `[body]` (on by default) - adjust tests to use extended request/response composition methods * - OCHTTP - remove `http.prefixed-http-logging` option and control that behaviour via `log.log-single-lined` instead - log `[header]` instead of `[head]` to allow for easier human "parsing" - OCLogger - add new `log.log-maximum-message-size` option to limit the size of a log message to a maximum size (off by default) - OCLogWriter - new OCLogLineFlags: provide additional contextual information so writers can better present multi-line log messages saved as single line log messages - replace the separator with box drawing characters to visually group split multi line log messages * - Add new variant of -[OCCore createFolder:…] with added placeholderCompletionHandler parameter - fix typo in code comment * - fix typos, cleanup and minor additions * - disable OC_FEATURE_AVAILABLE_UIWEBVIEW_BROWSER_SESSION by default to remove UIWebView from standard versions - add documentation to doc/CONFIGURATION.md on how to re-enable UIWebView support via preprocessor flags * - add initial parsing support for Tus HTTP Headers and compact storage in OCItem as UInt64 bitfield * - Add initial TUS support - NSString+TUSMetadata: conversion from dictionary to Upload-Metadata - and back - OCTUSHeader: new class to simplify parsing, building and conversion of TUS-related headers - OCTUSJob: new class to manage the current status of a TUS upload - OCTUSJobSegment: new class to abstract away file segmentation details for TUS uploads - OCConnection: - add new OCConnectionDelegate method to inject/modify TUS capabilities / settings - add new OCConnectionOptionTemporarySegmentFolderURLKey option key to provide a temporary folder to store file segments in when performing uploads via TUS - add code to upload files via TUS where available - OCSyncActionUpload: add OCConnectionOptionTemporarySegmentFolderURLKey option to ensure persistence of temporary segment files - OCEvent: - add OCTUSHeader, OCTUSJob and OCTUSJobSegment to .safeClasses - modernize initWithCoder - OCHTTP: - add OCHTTPStaticHeaderFields type and switch OCHTTPResponse over - add OCHTTPMethodPATCH method * - OCCapabilities - add support for TUS capabilities information provided via the capabilities endpoint - OCConnection - apply OCCapabilities.tusMaxChunkSize to TUS uploads if available - OCTUSHeader - clarify .maximumSize is the maximum file size and add new .maximumChunkSize to supply a maximum chunk size - add new OCTUSCapabilityKey and OCTUSCapability types as needed by OCCapabilities * - Cleanups and minor improvements * OCLogger: - add new logging format option - implement new json and json-composed formats - update documentation and available Xcode env vars * OCHTTP: - stricter MIMEType checks for content to print as text (previously also matched some xml document formats) * - add OIDC auth method identifier to CONFIGURATION.md * OCConnection: - move upload code to OCConnection+Upload (Upload category) - extend TUS support with: - support for creation-with-upload - (currently disabled) differentiation between "small" and "large" files (OCConnection.tusSmallFileThreshold) where small files (below the threshold) are uploaded with creation-with-upload, while files above the threshold are uploaded with creation + PATCH - improved log messages showing upload progress by including file size in addition to upload offset * - add "TUS implementation score card" overview to OCConnection+Upload * - fix error dating via OCErrorAddDateFromResponse for PUT uploads * - OCCore: fix issue of infinite connection retries when hitting a certificate or redirection error - add new -sendError:issue: method to centralize dispatch of errors and issues to the core delegate - keep track of OCIssues sent out to delegates and filter out repeat issues if the identical issue before it has yet to be acted upon - integration with "connecting" and "reachable" connection status providers to keep the status in "connecting" until issues have been acted upon, or switch to "offline" if issues are rejected by the user - OCIssue: add new .signature property that's guaranteed to be identical for two identical issues * MessageQueue improvements: - OCIssue+SyncIssue: remove unused code - OCMessageChoice: new class (and new superclass for OCSyncIssueChoice) - OCSyncIssueTemplate: refactor as OCMessageTemplate for general purpose usage; move from sync issues to messages - extended OCEvent.safeClasses with OCMessage and OCMessageChoice - OCMessage advanceds: - new originIdentifier property: allow handlers to easier determine if a message belongs to them - new representedObject property: allow custom senders of messages to attach an object or tracking info to a message that they need for handling later - rename .handled to .resolved for increased clarity - new autoRemove property: allow indication of auto-removal once .resolved, so dummy response handlers just to remove one-off messages are not needed. - new .localizedTitle, .localizedDescription and .choices methods that either use internally stored values or bridge to .syncIssue - additional initializers for non-sync-issue OCMessage creation - OCMessageQueue: override auto-created Swift choices for add/remove methods to avoid name conflicts going forward * - OCConnection: add new connection.force-background-url-sessions setting to force-enable background sessions in the app - in code, change all instances of the usage of the term "master" to "main" * - better error message construction for errors that contain their creation date * - make OCSyncRecordActivity public * - Remove unused code * - clarify type of key of OCBookmark.userInfo * - removal of iOS 11 support (including SFAuthenticationSession) and updating to iOS 12+ APIs, adaption of docs where needed - migration from MobileCoreServices to CoreServices - new OCNetworkMonitor class to provide centralized monitoring of the network status, incl. cellular and general availability - refactor OCCoreNetworkPathMonitorSignalProvider into OCCoreNetworkMonitorSignalProvider to use OCNetworkMonitor instead - Cellular Switches improvements - broadcasting / cross-process propagation of cellular switch changes - assessment of current "live" connectivity situation to allow determining when connectivity is allowed, and if it should be flagged as WiFi-only or not - integration with MDM setting for cellular usage - HTTP Pipeline advances - support for cellular switches at HTTP Request level via new OCHTTPRequest.requiredCellularSwitch property - uses OCCellularManager to determine when and how to schedule requests with the NSURLSession - integration with OCNetworkMonitor and OCCellularManager to run scheduling whenever the connection or a switch changes status - OCConnection - add new OCConnectionOptionRequiredCellularSwitchKey option for up- and downloads - consolidation of cellular options - and OCConnection.allowCellular in particular - OCCore - up- and download actions use OCConnectionOptionRequiredCellularSwitchKey to pass OCCoreOptionDependsOnCellularSwitch on to the connection layer - consolidation of available cellular options - status signal provider now provides more nuanced error descriptions, incl. for Network Unavailability - various small code improvements * - construct .well-known endpoint URLs relative to the root directory of the OC instance (as per owncloud/appliance#81) rather than the absolute root (/) URL * - Add option to cancel uploads in addition to retrying them * - improve error message for OCErrorAuthorizationFailed errors * added tvOS deployment target * - remove commented out, dead code - add OCCoreSyncInstructionStopAndSideline to OCCore to allow making waiting for user interaction budget-neutral - consider localID in addition to fileID when trying to identify a removed file in an existing list * - OCConnection+Upload: return correct error code if there's no sufficient storage (previously returned "item already exists") * - make number of background folder scan PROPFIND requests configurable (and increase from 1 to 2) * - Fix static analyzer warnings * - Fix static analyzer warnings * - Fix static analyzer warnings * OCQuery/OCCore: - fix incorrect OCQueryStateTargetRemoved query state assignment - fix item-based queries state initialization (+ continuous updates) - OCQuery.description now provides a summary of item- and path-based OCQueries * - Fix possible crash in OCAuthenticationMethodBasicAuth._decodedAuthenticationData: (owncloud/ios-app#702) * OCCore/OCQuery: additional checks and improved handling of queries targeting folders that don't exist any longer * - add missing nil check to OCCore+ItemList * added a new property appDisplayName to retrieve the display name of the target * - OCBookmark: add .certificateUserApprovalUpdateNotificationName and -postCertificateUserApprovalUpdateNotification to signal and observe changes to certificate approvals by the user that are relevant to the bookmark - OCConnection - replace delegate calls originating from certificate check issues with observing .certificateUserApprovalUpdateNotificationName notifications calling the respective OCConnectionDelegate method - move certificate check code to OCHTTPPolicyBookmark - OCSyncActionDownload: explicitly enable file protection / encryption for temporary and vault item directories - OCEvent: add OCHTTPPolicy to safeClasses - OCHTTPPipeline: - factoring out certificate validation delegate method into a separate OCHTTPPipelinePolicyHandler protocol - extend OCHTTPPipelinePartitionHandler protocol with additional instruction parameter for post processing - explicitly enable file protection / encryption for partition and temporary response directories - OCVault: new .httpPipelineRootURL property for better abstraction - OCHTTPPipelineManager - .backendURL now uses OCVault.httpPipelineRootURL - OCHTTPPolicy - encapsulate HTTP security policies, starting with certificate validation - identifier makes policies identifiable (important for storage / management) - can be used independently from OCConnection and OCCore, allowing more HTTP handling without either and addresses an issue where badly timed OCCore shutdowns could cause a false negative certificate check result - implements the OCHTTPPipelinePolicyHandler protocol - OCHTTPPolicyBookmark - implements an OCBookmarks HTTP policies (can also be derived from and track an OCConnection's bookmark) - OCHTTPPolicyManager - keeps track of global pre- and post-processing HTTP policies that can be used to establish HTTP security policies for all requests - allows persisting and managing policies - ensures policies stay in sync across processes (via OCKeyValueStore) - can compile applicable policies based on OCHTTPPipelinePartitionID * - OCHTTPPipeline - detect if an HTTP response likely doesn't need to be delivered on the same process and waiting for that just delays dependant other parts - special OCHTTPPipelineTaskAnyBundleID bundle ID to allow scheduling a HTTP request/deliver a response on any process - OCBackgroundManager - fix "leak" of OCBackgroundTask objects on processes without UIApplication instances / foreground/background concept - perform submitted blocks immediately on processes without UIApplication instances / foreground/background concept * - OCCore: add safeguards against IPC change notifications between core stop and deallocation * - Reduce OCore.parallelItemListTaskCount to 1 if running in minimum memory configuration * Reduce memory usage: - avoid unintended capture of surrounding objects in OCHTTPPipeline, OCKeyvalueStore and OCSQLiteDB OCBackgroundTask.expirationHandlers - nilify OCBackgroundTask.expirationHandlers in app extensions to avoid unnecessary memory waste - use weak self reference in OCBackgroundTask.endWhenDeallocating() to allow disposal of OCBackgroundTask as soon as possible * Further reduction of peak memory usage - NSArray+OCSegmentedProcessing: - allows transformations and processing of an array of objects in chunks - OCUser: - improved hash and isEqual implementations, now also taking emailAddress and forceIsRemote into account - OCDatabase: - take advantage of NSArray+OCSegmentedProcessing to process item additions, changes or deletions in segments and reduce peak memory consumption - retrieval of items from the database maintains a cache of OCUser instances assigned to OCItem.owner and reuses identical instances, reducing peak memory consumption * - Project: use compiler default as language standard (not gnu++14 and gnu11) - OCHTTPPipeline: clarify optionality of instructionForFinishedTask in OCHTTPPipelinePartitionHandler - OCUser: refine hash value - OCCache: add clearCache method and switch memory warning handling over to it - OCSQLite: - add statement caching to memory and CPU consumption, using a claim/dropClaim method duo in OCSQLiteStatement and caching in OCSQLiteDB - add memory statistics logging method for debugging purposes - add missing copyright notice - add debug description to OCSQLiteStatement - add method to flush transaction cache to disk - add OCSQLiteQueryString type for better source readability - OCDatabase: add cache flushing and memory statistics logging to [add|update|remove]CacheItems methods to limit SQLite memory usage in the File Provider - Unit tests: - fix HTTPPipelineTests outdated delegate definition usage * - fix super-rare OCProcessManager.sharedProcessManager dispatch_once concurrency bug - OCCore+CommandLocalImport: properly handle OCCoreDuplicateNameStyleNone name style - OCSQLite: reset cached OCSQLiteStatements at the earliest possible time, to avoid file locks being held for an unnecessarily long time and avoid other processes running into busy timeouts * [feature/diagnostic] Diagnostic support (#68) * - OCDatabase: fix for OCEvent retrieval: no longer ignore OCProcessSession - OCDiagnostic subsystem - OCDiagnosticContext provides necessary objects / context for diagnostic collection - OCDiagnosticSource defines a protocol that objects capable of providing diagnostic information should follow - implement support for OCSyncAction and OCSyncRecord - OCDiagnosticNode encapsulates diagnostic info as - info: label + content - action: label + a block - group: label + child nodes - built-in support to turn group nodes into Markdown/HTML - NSArray+OCNullable: remove NSNull entries from an array * - OCSyncIssue + OCSyncIssueChoice: now return meaningful .descriptions - OCSyncRecord+Diagnostic: add actions to - trigger a Sync Engine run - reschedule a sync record - deschedule (remove) a sync record - OCWaitCondition: add support for OCDiagnosticSource - OCHTTPPipeline: add support for OCDiagnosticSource - OCHTTPPipelineTask: add support for OCDiagnosticSource - OCDiagnosticNode: add context option to OCDiagnosticNodeAction block type - OCCore: remove commented out, obsolete code * - OCDiagnosticNode: optimize markdown/HTML layout for better legibility, as a true hierarchy - OCSyncRecord+Diagnostic: change labels to better accomodate the new hierarchical markdown/HTML layout * - add OCDiagnosticNode.identifier to "tag" nodes for later retrieval - add OCDiagnosticSource support for OCDatabase * - add new OCScanJobActivity class to make scan status details accessible as properties - OCCore+ItemList: - issue and update OCScanJobActivity instead of plain OCActivity - change label from "Scanning server for updates…" to "Fetching updates…" and remove scan progress counts - OCDatabase+Diagnostic: add scheduled folder scan count to diagnostic output * - do not count root folder in folder diagnostic counter - added localization for diagnostic strings * added missing localization for diagnostics * fixed localized string * - Add OCBookmark diagnostics support - fix bug where OCCoreItemLists would remain in "New" state indefinitely if scheduled while the connection is unavailable * - start implementation of cookie persistence support - remove default cookie filtering * localized string for wrong refresh token error message * added missing localized string * fixed localization string * - Temporarily disable processSession check * - add support for URL-relative Location header values * OCConnection: - add option "connection.transparent-temporary-redirect", on by default, - add support for transparently resending requests with the new destination in response to 307 status responses pointing to the same host - fix rescheduling bug in OCHTTPPipeline - implement redirection test bed / unit tests in CoreRedirectTests * - make OCHTTPRequest.effectiveURL reset part of the scrubbing for rescheduling, so that this internal handling of the value doesn't leak to other components * ownCloudMocking: - factor out cookie redirect simulator from CoreRedirectTests into OCHostSimulator+CookieRedirect category, so it can be used in the app, too - add nullability annotations for OCHostSimulator ownCloudSDK: - OCHTTPRequest: add support for OCHTTPRequestRedirectPolicy to allow per-request control over how redirects should be handled - OCConnection+Authentication and OCAuthenticationMethodOpenIDConnect: adopt new OCHTTPRequestRedirectPolicy - extend transparent redirection handling to requests returning 302 (previously only 307) ownCloudSDKTests: - fix CertificateTests by updating demo-cert-new.cer - replace customized OCHostSimulator in CoreRedirectTests with OCHostSimulator+CookieRedirect and slim down implementation - add new testConnectionSetupCookieRedirect test covering setup of a new bookmark with active "cookie redirect" * - add additional "verbose" log level and move the most notorious debug log statements that fit the category to the verbose level * - OCDatabase: add new .thumbnailDatabaseURL property to retrieve the URL of the thumbnail database after a successful open - OCDatabase+Diagnostic: - add information on database sizes - add option on a manual VACUUM of both the main and thumbnail database * - OCConnection: ensure HTTP requests that are rescheduled due to redirections use different X-Request-IDs - OCCore: additional debug message if cookie support is enabled, identifying the type of cookie storage - OCClassSettings - OCClassSettingsSupport: new optional method +publicClassSettingsIdentifiers to identify which settings should be considered public information - OCClassSettingsSource: - new settingsSourceIdentifier to identify sources other than by class name - implementation in subclasses of OCClassSettingsFlatSource - new -settingsSnapshotForClasses and -settingsSummaryForClasses methods to retrieve a snapshot of settings as structured data, or as printable summary, including all values provided by sources as well as the computed value - project: assign test to SDK framework * - OCConnection+Upload: add force replace option - OCSyncActionUpload: - add "Replace existing" option - implement "Replace existing" option by cancelling the existing action and scheduling a new action - remove previous, commented-out implementation - add check for pre-existing item in scheduling - improve error handling when internal item copying fails - add missing localizations * - fix uninitialized partitionHandler pointer and resulting possible lack of policyHandlers when setting up a new connection * - OCClassSettings - new method to insert additional class settings sources relative to other sources based on their OCClassSettingsSourceIdentifier - provider proper OCClassSettingsSourceIdentifier for OCClassSettingsFlatSourceEnvironment, OCClassSettingsFlatSourceManagedConfiguration and OCClassSettingsUserPreferences * - added class settings support for root OCAuthenticationMethod class - moved browser session related setting from OCAuthenticationMethodOAuth2/oa2-browser-session-class to OCAuthenticationMethod/browser-session-class - added new browser-session-prefers-ephermal setting - updated MDM documentation and fixed a confusing typo - include OCAuthenticationMethod class settings in class settings overview at the start of the log * - Fix typo * - fix issue where the first HTTP request sent by the app did not include the desired User-Agent header * - extend account diagnostic action "Invalidate Login Data" with the capability to invalidate OAuth2/OIDC tokens * - OCLogger: - add forceSyncWrite option to force immediate writing of a log file entry - add new macro variants for forceSyncWrite - OCLogFileWriter: make LogIntro forced and use forceSyncWrite to exclude chances of rerouting * - OCLogFileWriter: add comment to explain usage of OCPFSLog * - address issue of (empty) log files being created even if logging is turned off, leading to empty log files and a missing LogIntro header when subsequently turning on logging - OCLogger: only open all log writers if logging is actually enabled - OCLogFileWriter: only reopen log file after rotation if logging is actually enabled - log files are now only written once logging is turned on and the first log message hits the file * - OCClassSettingsUserPreferences - new versioned, atomic migration mechanism to perform migration tasks, aimed primarily to support atomic, safe migration from user defaults to OCClassSettingsUserPreferences, but can also be used for other purposes - OCLogger: - adopt OCClassSettingsUserPreferencesSupport and handle log level setting from shared user defaults to class settings - use new OCClassSettingsUserPreferences versioned migration mechanism to safely migrate the setting storage * - OCHTTPPipeline: add line "Req signals" with required signals to HTTP request and response log output * - Host Simulator improvements - move OCHostSimulator from ownCloudMocking to ownCloudSDK - add OCHostSimulatorManager to manage host simulators added via OCExtensions - implement Host Simulator extensions for general 404 and download 500 responses - allow configuration of host simulators via class settings - Bookmark improvements - store metadata on when and with which app version a bookmark was created - Connection improvements - NSError+OCDAVError: add support for sabre/DAV messages of "s:header" type; add new OCDAVErrorItemDoesNotExist error code - download: improve handling of 404 and 412 errors (including 412-specific differentiation between different versions and lack of file) - add new test for 412+ special error message handling - Message Queue improvements - add support for muted messages, which are queued but not individually presented - Core / Sync Engine improvements - built-in support for OCHostSimulatorManager - improved handling of action cancellation (closing gaps) - add sync record processing trigger as wait condition hit timeouts provided through a new nextRetryDate accessor - provide "Retry" and "Cancel" options as default for failed downloads - improved behaviour for automatically triggered downloads - silently remove if file no longer exists - retry 3 times for most HTTP errors before emitting a message - emitted messages are queued muted, so they don't interfere with the user's work, but are visible and actionable - sync actions: add internalsDescription accessor to allow addition of internal information to the description without having to entirely rewrite it - add mute support to sync issues - OCExtensions - add extensionMetadata dictionary with standardized keys for name, description, version, copyright - Diagnostic improvements - replace <> with {} for markdown output so repeated copy & paste won't lead to unwanted tags * - download: improve behaviour around deleted files targeted for download by marking them as deleted in the local database as well * - fix issue where updates to different OCBookmark instances would not trigger a connection retry - even if they shared the same UUID * - add metadata support to OCClassSettings - add class settings metadata to - OCAuthenticationMethod (including dynamic compilation of authentication methods and auto completion) - OCAuthenticationMethodOAuth2 - OCAuthenticationMethodOpenIDConnect - OCConnection - OCCore - OCHTTPPipeline - OCItemPolicyProcessorDownloadExpiration - OCItemPolicyProcessorVacuum - OCLogger (including dynamic compilation of valid log options and auto completion) - fill documentation gaps in the process - externalize long documentation to new doc/class-settings-sdk folder - switch OCAuthenticationMethodOpenIDConnect to -registerOCClassSettingsDefaults:metadata: and extend OAuthenticationMethod auto registration macros as needed - add support for registering additional metadata alongside additional defaults - preparation for supporting dynamic metadata changes and metadata caching in a next step - new test case SettingsTests.testMetadataAvailability that fails if metadata is missing and outputs a list of OCClassSettingsFlatIdentifiers for which the metadata is missing - add validation support to OCClassSettings - using new OCClassSettingsErrorDomain error domain and OCClassSettingsErrorCode codes - checks type and value checks against checks, logging errors where they are encountered - converts types where possible (f.ex. "1" to 1) - supports custom validation mechanisms - caches results to keep overhead as low as possible - add convenience NSString category to compose/split new OCClassSettingsFlatIdentifier strings (like f.ex. "connection.allow-plain-http" <-> "connection" + "allow-plain-http") - fix format string in OCSyncActionUpdate issue description - switch OCCore+Thumbnails OCClassSettings key access to more modern API - OCAuthenticationMethod+UIAppExtension: replace with NSClassFromString() to allow compilation as module and fix other Xcode 12 warnings - fix (most) Xcode 12 warnings * - OCHostSimulator: add "five-seconds-of-404" simulator extension that returns 404 to all requests for five seconds - OCCore: handle HTTP status >= 400 as "connection refused"-type errors, including retries and automated handling rather than bringing up issues * - OCWaitCondition: add support for localized description for what is being waited for - OCSyncRecordActivity: add support for new localized description of wait conditions, use where available - OCSyncActionDownload: provide localized description for wait conditions on retries of available offline downloads and metadata refresh waits * - OCSyncAction+Diagnostic: include information on target item with diagnostic information * - add auto-generated CONFIGURATION.json to doc directory - NSArray+ObjCRuntime: convenience method retrieving all classes implementing an ObjC protocol from the ObjC runtime - OCClassSettings+Documentation: utility methods to retrieve, compose and prepare metadata for use in documentation, including conversion from JSON-unsafe types to JSON-safe types - OCClassSettings+Metadata: - introducing additional keys for flat identifier, class identifier, class name - -keysForClass: now checks for an actual implementation (to avoid exceptions in case of NSProxy subclasses) - SettingsTest: new "testUpdateConfigurationJSONFromMetadata" unit test updating the CONFIGURATION.json file automatically * - rename OCClassSettingsKeyStatusAvailable to OCClassSettingsKeyStatusSupported * - project: Xcode update, increase deployment target to iOS and tvOS 12.0 - OCHTTPPipeline: - perform signal check delegation even if no signals are provided for a request (to perform other checks) - OCConnection: - add enforcement of OCConnectionAllowedAuthenticationMethodIDs / "connection-allowed-authentication-methods" - return OCErrorAuthorizationMethodNotAllowed in case an OCBookmark is based on an authentication method that is not allowed - OCCore: - add handling for OCErrorAuthorizationMethodNotAllowed that effectively puts the core offline, preventing any communication with the server * - OCAuthenticationMethodOpenIDConnect: use defaults registration to add auth method settings - OCAuthenticationMethodOAuth2: - add request to token endpoint to detect availability - if response is a redirection or 404, consider OAuth2 to be unavailable * - remove obsolete include line * - add class settings metadata support to OCHostSimulatorManager - add missing OCExtensionMetadataKey symbols/values * - OCSyncActionCreateFolder: add standard set of permissions to placeholder folder items * - OCSyncActionCreateFolder: add standard set of permissions to placeholder folder items * - OCClassSettings metadata and documentation improvements - add option to sort possible values - add option to expand possible values (so they're uniform and easier to process by other tools) - sort doc dictionary arrays by flat identifier for a deterministic order - remove duplicate entries produced by class inheritance - update CONFIGURATION.json from unit test, using improvements * - OCClassSettings: - implement OCClassSettingsFlag support including caching - implement OCClassSettingsFlagIsPrivate support as fallback if publicClassSettingsIdentifiers is not implemented by a class - implement OCClassSettingsFlagAllowUserPreferences and OCClassSettingsFlagDenyUserPreferences support if allowUserPreferenceForClassSettingsKey is not implemented by a class - improved logging with tags - properly fall back to previous value instead of default value when validation fails for a value provided by one amongst several sources - fix deadlock bug related to logging settings - allow validation without caching result - OCClassSettingsFlatSource and subclasses: use OCClassSettingsFlatIdentifier instead of NSString in the respective method definitions - implement unit tests - OCConnection: - replace "connection" string with OCClassSettingsIdentifierConnection - replace allowUserPreferenceForClassSettingsKey method with class settings metadata flags - OCLogger: - replace allowUserPreferenceForClassSettingsKey method with class settings metadata flags - fix potential dead-lock when retrieving toggles to compile metadata dynamically * Added wipe function allowing deleting all keychain items (#73) Co-authored-by: Michael Neuwert <mn@neuwert-media.com> * - OCClassSetting: - new API for observing updates to a class setting or select attributes - long-term goal: unified, simplified interface to OCClassSettings - OCClassSettings: - OCClassSettingsChangedNotification: posted with object=nil if any value could have changed, posted with the flat identifier if a specific setting has changed - provides a standard way to notify interested parties about changes - posts OCClassSettingsChangedNotification whenever sources are added or removed - OCClassSettingsUserPreferences - adds new APIs to check if users are allowed to change a setting via OCClassSettingsUserPreferences methods - adds new MDM options to allow or disallow users to change specific settings - posts OCClassSettingsChangedNotification whenever a value is changed by the user - OCClassSettingsFlatSourceManagedConfiguration: - posts OCClassSettingsChangedNotification whenever new values are pushed via MDM - OCKeychain: - return an NSError for -wipe instead of a BOOL * - OCConnection, OCLogger: add missing OCClassSettingsFlagDenyUserPreferences flags - OCClassSetting: - fix enumeration error - add unit tests - make include public * - update CONFIGURATION.json with latest changes and additions * - OCClassSettings+Metadata: fix sorting of possible values * - OCHTTP: - clarify and extend redirection policies: - "forbidden" becomes "handle locally" - "validate connection" - triggering the connection validator - becomes the new default - extended redirection support in OCHTTPRequest: - new maximumRedirectionDepth property to indicate maximum number of redirections to follow - new redirectionHistory property keeping track of NSURLs queried as part of redirection handling - OCConnection: - new status validation method +validateStatus:; replace all instances of checks for maintenance mode with it - add Connection Validator that kicks in if a HTTP Request with "ValidateConnection" redirection policy receives a redirection response - demote OCConnectionTransparentTemporaryRedirect option from "advanced" to "debug", turn off by default - OCHostSimulator - move OCHostSimulator+CookieRedirect from ownCloudMocking to ownCloudSDK/OCHostSimulator+BuiltIn - add new "simple-apm" cookie redirection simulating APM Host Simulator Extension and rebuild documentation - OCCore: - enable cookie support by default * - OCAuthenticationMethod: - switch from detection URLs to detection requests - use Detection ID to consolidate requests prior to performing them - authentication methods now perform a PROPFIND rather than a GET request on the WebDAV endpoint - when contacting the bare WebDAV endpoint, the URL is now slash-terminated - Connection Validator - new error code for failed validation - preparations for second stage of validation if first stage fails (but commented out for now as it's not clear that's needed and would complicate the implementation by multiplying the possible outcomes) - code comment describing how the Connection Validator works - handle failed validation like maintenance mode, but with custom error in status line - add "recovering-apm" Host Simulator that makes bogus redirects for the first 30 seconds, then becomes a "simple-apm" that wants to set cookies * - OCConnection: make Connection Validator more thread-safe, add rate limiter to avoid excessive retries * - OCBookmark: - allow setting the internally tracked _lastUsername with new method - OCAuthenticationMethodOAuth2 + OCAuthenticationMethodOpenIDConnect: - add headers to prefill user name where available and supported by the server - comment out support for OAuth2 due to crashes in the web view in Simulator and on device * - OCConnection: - implement Connection Validator II - following the latest flow diagram - update code comments explaining the structure - factor out the Connection Validator to its own method * - OCConnection: Connection Validator cleanup * - OCConnection: Connection Validator comment clarifications * - OCConnection + OCHTTPPipeline: add debug output for cancellation of non-critical requests - OCProcessManager: add additional observation and debug output for tracking app/extension state * - OCClassSettings: add "categoryTag" generation support * - OCHTTP improvements - centralize management of X-Request-ID header in OCHTTPRequest - replace all header field strings with OCHTTPHeaderFieldNames - extended and more uniform log messages to make following a request through the OCHTTPPipeline much easier - move the majority of debug messages to the verbose level - log old and new X-Request-ID when recreating it, to allow connecting the dots - avoid requesting the full header dictionary when just interested in a single one - log type (Bearer, Basic, …) from Authorization header and only replace the actually confidential part with "[redacted]" - add debugging description to OCHTTPRequest - OCHTTP bugfixes - ensure that only one representation (object or data) is kept in an OCHTTPPipelineTask at a time, to avoid inconsistencies - drop request data if requestID is changed - OCLogger - migrate privacy mask and log level to OCClassSetting + observation - fix bug where log level changes didn't propagate across processes - OCClassSettings - fix bugs related to change notifications timing - implement cross-process notifications for user settings - General - move frequently logged debug messages that are very specific and aren't needed 98% of the time to the verbose logging level * - Turn off HTTP request and response logging toggle by default * - OCConnection: - limit connection validation to same host (fixes conflict with redirects / multi-tenancy) - increase security of "allow same host" redirect policy by also requiring same HTTP scheme - OCCore: -trackItemAtPath:trackingHandler: no longer makes multiple nil calls if an item is not found - OCLogger: avoid log.log-enabled-components validation error during logger startup - OCUser: also archive/unarchive _forceIsRemote - project: update env vars to take lack of http request/response logging into account - unit tests: - fix failing tests - tag remaining tests that still fail * - OCLogger: fix recursive possible values assignment for OCClassSettingsMetadataKeyPossibleValues - OCHTTPPipeline: check signal requirements for final requests only if there are any signals actually required by the request - or the handler for the partition the request belongs to is around - OCHostSimulator+BuiltIn: fix incorrect block passing resulting in requestWithCookiesHandler never being called - unit tests: - fix remaining failing tests - comment out deactivated tests * - additional unit test fixes / adaptions to Bitrise performance * OAuth2: - add new method -postProcessAuthenticationDataDict: to condense the stored token response to the needed essentials, saving space and steering clear of issues if the token response contains null values that make secret serialization to property list format fail - factor out access to clientID and clientSecret into methods - make -sendTokenRequestToConnection:… subclass able - improved error handling if property list serialization fails OIDC: - add support for OpenID Connect Dynamic Client Registration - on by default for servers offering the endpoint - including support for expiration, preservation and caching - add additional error code for client registration failure HTTP Pipeline: - factor out User-Agent template composition method to make it available - extend OCHTTPRequest with JSON-specific method to easily instantiate POST requests with JSON payload * Update CONFIGURATION.json with latest OIDC additions * - Authentication: add new OCAuthenticationMethodRequiredUsernameKey option - OAuth2 / OIDC: add support for new OCAuthenticationMethodRequiredUsernameKey option * - OCClassSettings: fix crash that could occur if overrideSettings was mutated while being used * Class Settings cleanup: - remove "connection-" and "log-" in front of class setting names for OCConnection and OCLogger to avoid duplication like "connection.connection-.." - update schemes to use the new names - update CONFIGURATION.json with the changes - replace configuration documentation in CONFIGURATION.md with a reference to the full documentation in the ios-app repository, as reference in CONFIGURATION.md is no longer updated * - OCConnection: add dedicated handling for "403 Forbidden" responses to file download requests (enterprise#4338) - NSError+OCError: add a new OCErrorWithDescriptionFromError macro that allows creating an OCError based on another error with custom description * Add support for certificate comparisons: - OCCertificate+OpenSSL: - add nullability annotations - extend API to compare certificates - OCCertificateDetailsViewNode: - add nullability annotations - add support for different types of changes, supporting old and new values, old and new certificates (for certificate chains) - OCCertificateViewController - add support for certificate comparisons, with a "+/- Show/Hide" toolbar button baked right in - highlight changes with colors and circled +/- signs * OCCertificateViewController: only add "Done" navigation button if root view controller * - provide clearer issue title for certificate changes * OCHTTPPipeline: fix "UNKNOWN TASK" error for auto-resumed downloads/transfers - resumable downloads occur when backgrounding the app - resumable downloads would be rescheduled automatically to complete the download - by rescheduling, the request got a new X-Request-ID, but that one was never used by iOS - when iOS returned the response for the resumed download, it came back with the OLD X-Request-ID, resulting in the Pipeline not being able to recognize the request - result was hung downloads at the pipeline level - fixed: now avoids recreating the X-Request-ID for resumed requests * - OCBookmark: add additional diagnostic action that overwrites the certificate with an empty data blob, prompting a certificate warning dialog on next connect * OpenID Connect: for token refresh, use the client_id and client_secret used at the time the token was registered in the Authorization header, while using the latest registered client_id / client_secret as parameters * ownCloudUI: show "Show ±" only for certificate diffs with actual differences * [feature/mdm+branding] SDK version for MDM+Branding app branch (#78) * - OCConnection+Setup: - remove support for auto-detection of OC installations in "owncloud" subfolder - no longer alert user of root redirects if they happen on the same host with the same scheme (http/https) - OCClassSettings: - add new DictionaryArray and URLString types - add validation support for new types * OCClassSettings+Metadata: - also include registered metadata when determining available keys for a settings identifier * - OIDC Dynamic Client Registration: add support for non-expiring client_id/client_secret pairs via convention * Add 11.5 section to CHANGELOG.md * - OCConnection+Setup: rewrite redirect handling during setup with full duplicate control and permanent removal of support for subfolder installs in `/owncloud/`. * OCConnection: - Connection Validator: infinite loops detection: - increments a counter for the URL whose response triggered a connection validation - decrements the counter when receiving a response from the same URL that no longer would trigger a connection validation (bringing it back to 0, ideally) - if the response to the URL triggered validation more than 3 times, the response is delivered instead of triggering validation - Connection Setup: - count how often an URL was the target of a redirect during setup - if a URL was already targeted more than 0 times (adjustable), declare detection of the server root URL as failed - HTTP Pipeline: - turn certificate missing log message from error into warning, since it is not handled as an error internally, either and can be confusing when debugging * - OCConnection+Setup: only accept redirects with status 301 to other root folders, fail for all others * - OCAuthenticationMethod: add additional userInfo key to redirection errors to indicate from where a redirection started - OCAuthenticationMethodOpenIDConnect: - add redirection detection for .well-known/openid-configuration - improved error handling - OCBookmark+Diagnostics: add "Use Origin URL as URL" action to reset multi-tenancy redirection info in bookmarks - OCConnection: - fix recovery from answered redirection warning issues - add support for redirections to other hosts (previously a hard error) - OCCore: - pick up certificate rejection errors from OCHTTPPolicyBookmark and present them to the user - remove unused attemptConnect method variant - OCHTTPPolicyBookmark: improved description of errors where a certificate was changed but could not be auto-accepted - OCCertificateDetailsViewNode: fix a crasher caused by unconverted object types stored in .previousValue * - Ocean: adapt to SDK API changes, including unit tests - OCConnection: add fallback option to extractBaseURLFromRedirectionTargetURL:… to return redirectionTargetURL in case no common base path could be found - OCAuthenticationMethod: replace local fallback with above fallback * - AuthenticationTests: additional test cases for redirection base discovery * - OCConnection: support for cleaning up additional redirection target format (+ additional unit tests) * Add OCLock set of APIs for expiring, coordinated cross-process locks (+ unit tests) * - OCLock / OCLockManager: make keepAlive more opportunistic to optimize resource usage - OCAuthenticationMethodOAuth2: use OCLock to secure token refreshs and avoid issue (3) reported in ios-app#886 * - OCHTTPStatus: new .name property to quickly get the name of a status - OCHTTPPipeline: new HTSum-tagged brief one-line summary of HTTP requests and responses (to be extended) - OCConnection+Setup: add base URL extraction call to redirection handling for status requests - OCConnection: Connection Validator now also checks for the same port before it starts - NSURL+OCURLNormalization: standardized URL port and scheme/host/port comparison additions, nullability annotations * OCConnection and OCConnection+Setup: change from local comparison of host and scheme to NSURL+OCURLNormalization utility method. * - OCLogger: fix migration of log level + privacy masking (broken following shortening of the identifiers earlier) * - OCLogger: add migration path for user setting "log.log-level" to "log.level" * - improve OCLogger migration code structure * - NSDictionary+OCExpand - NSDictionary category to expand flat keys into hierarchies - implemented unit test in MiscTests - OCClassSettingsFlatSourceManagedConfiguration - add detection of changes pushed via MDM and posting OCClassSettingsManagedSettingsChanged notification - utilize NSDictionary+OCExpand to support simplified notations of MDM configurations * - OCBookmarkManager+ItemResolution: add new method to find the OCBookmark that contains a provided OCLocalID - OCCoreManager+ItemResolution: add new method to request OCCore and OCItem for a provided OCLocalID (build upon OCBookmarkManager+ItemResolution) * - OCCoreManager+ItemResolution: fix nullability annotation * Add unit test for ItemRetrieval method(s). * added french localization with latest translated strings from transifex * - update projects for Xcode 12.4 - OCConnection: add warning for later solving - OCItem: fix type error in de-serialization * - OCQueryCondition: add support for limiting result counts (maxResultCount) * - OCBookmark: - added simple database versioning - new DBMigration category : - information on whether a bookmark's database needs to be updated or is newer than the app - simplifies async upgrades to a single method call - added diagnostic action to remove the database version - OCCancelAction - new container that allows to encapsulate a cancel action, so it can be passed around and code be injected from different places - OCSQLiteDB - extend OCSQLiteQuery and OCSQLiteStatement to support interrupting / cancelling execution of a statement, including not executing statements that were already cancelled at the time they should be performed - add new OCSQLiteDBErrorQueryCancelled error code for cancelled queries - add option to disallow migrations and return a new OCSQLiteDBErrorMigrationsNotAllowed error instead - fix OCSQLiteStatement leak on sudden deallocation - improved/increased logging around table schema migrations - add ability for table schema migrations to return progress information - OCDatabase - add support for cancellable cache item retrieval - update metadata schema to 11, adding lastModifiedDate field, with migration progress reporting - add support for greatly simplified OCDatabaseVersion versioning - block migrations in app extensions by default, pointing to the app instead - OCVault: add support for database upgrade version updates - OCCoreManager: handle case of failed core starts correctly - OCCore - add support for busyStatusHandler, to allow tunneling progress information like that for table schema upgrades - fail with an OCErrorDatabaseMigrationRequired error when trying to access a database that's newer than the latest version known by the app - replace dispatch_group usage with OCSyncExec/OCSyncExecDone macros - fail with an OCErrorDatabaseMigrationRequired code if the database returns a OCSQLiteDBErrorMigrationsNotAllowed error - OCQueryCondition: - add OCItemPropertyNameLastModified as SQLBuilder-supported property - properly handle nil property values - OCQuery: add ability to stop queries using the injected .stopAction (an OCCancelAction) * - OCCoreManager+ItemResolution: improve edge case handling (in theory previously could leak a core if an item is removed from under it) * - OCCore: allow shutdown with negative activities count, but output a warning to the log that the negative count is reason to look for a bug - OCDatabase: respect cancellation when retrieving items from the cache, avoid duplicate call to resultHandler * Make OCQueryCondition+Item publicly available * OCCore: fix bug that prevented a custom OCQuery from being restarted effectively * - OCConnection - add new method to determine if a (503) response should be considered a trigger for maintenance mode - adopt new method in place of previous simple status code check - OCCore+ConnectionStatus: adopt new method before reporting maintenance mode * - OCConnection: fix bug in allow list implementation for Service Unavailable errors - OCDatabase: make thumbnail database URL available via thumbnailDatabaseURL property even before opening the database - OCBookmark+Diagnostics: add new "Delete Database" action that allow to delete the databases of a bookmark * - OCCore+SyncEngine: add rate-limited item sync metadata scrubbing (fixing forever spinning items from past versions that in reality no longer have activity) - OCItem: add OCItemPropertyNameSyncActivity with SQL Builder support - OCDatabase+Schemas: bump version 11 (dev version) to version 12 and add syncActivity as additional column to filter for * - OCBookmarkManager: add new OCBookmarkUUIDString type and new method to retrieve account from UUID string - OCDatabase: remove unused variable - OCSQLiteDB: allow initialization of database even if migrations are not allowed * OCCore+CommandLocalImport: remove OCCoreOptionImportTransformation block from options after use, fixing a crash upon serialization of OCSyncActionUpload * Logging improvements: - add new OCFileOpLog macro for simplified and more verbose file operation logging - adopt OCFileOpLog throughout most of the SDK for copy/move/delete - add new File Operations logging toggle (off by default) - add localRelativePath to OCItem (log) description if available - fix missing initialization of some error variables * - fix OCQueryConditionOperatorPropertyHasSuffix implemenation in -[OCQueryCondition fulfilledByItem:] * - OCItem: - add .ownerUserName convenience accessors - add OCItemPropertyNameOwnerUserName property name - OCDatabase: - add updated database schema with ownerUserName column - update add/update methods with ownerUserName support - add ownerUserName SQL map entry * - OCItemPolicyProcessorVersionUpdates: add log tagging support and additional logging output - OCClaim: - add claimWithFilter method to retrieve the first claim matching a filter (even in trees) - change -lockType to -typeOfLock and make .typeOfLock nonatomic, so that typeOfLock is reported correctly - update doc/CONFIGURATION.json with the latest changes * OCCore+Claims: add option to refresh item instances while adding claims * - add OCClassSettingsMetadataKeyLabel metadata label key * - OCCore+ItemList: fix issue where a download files could be deleted unexpectedly (details in the comments) - OCSyncActionDownload: add code to detect missing downloaded file and trigger a download if needed, instead of returning an item pointing to a non-existent file * OCClassSettings: - add subCategory and subCategoryTag metadata keys - documentation: sort by subCategory first, then by flatIdentifier * - rename documentation file for connection.certificate-extended-validation-rule so it gets included * - OCConnection - add missing key in classSettingsMetadataHasDynamicContentForKey implementation - add new authenticationMethodIdentifierMetadata method to make metadata-ready auth method identifier info available * OCProcessManager: no longer uses main thread queue for timeouts, fixing deadlocks (rare, but still…) * - add OCMeasurement subsystem - a…
* - update CONFIGURATION.json with latest changes and additions * - OCClassSettings+Metadata: fix sorting of possible values * - OCHTTP: - clarify and extend redirection policies: - "forbidden" becomes "handle locally" - "validate connection" - triggering the connection validator - becomes the new default - extended redirection support in OCHTTPRequest: - new maximumRedirectionDepth property to indicate maximum number of redirections to follow - new redirectionHistory property keeping track of NSURLs queried as part of redirection handling - OCConnection: - new status validation method +validateStatus:; replace all instances of checks for maintenance mode with it - add Connection Validator that kicks in if a HTTP Request with "ValidateConnection" redirection policy receives a redirection response - demote OCConnectionTransparentTemporaryRedirect option from "advanced" to "debug", turn off by default - OCHostSimulator - move OCHostSimulator+CookieRedirect from ownCloudMocking to ownCloudSDK/OCHostSimulator+BuiltIn - add new "simple-apm" cookie redirection simulating APM Host Simulator Extension and rebuild documentation - OCCore: - enable cookie support by default * - OCAuthenticationMethod: - switch from detection URLs to detection requests - use Detection ID to consolidate requests prior to performing them - authentication methods now perform a PROPFIND rather than a GET request on the WebDAV endpoint - when contacting the bare WebDAV endpoint, the URL is now slash-terminated - Connection Validator - new error code for failed validation - preparations for second stage of validation if first stage fails (but commented out for now as it's not clear that's needed and would complicate the implementation by multiplying the possible outcomes) - code comment describing how the Connection Validator works - handle failed validation like maintenance mode, but with custom error in status line - add "recovering-apm" Host Simulator that makes bogus redirects for the first 30 seconds, then becomes a "simple-apm" that wants to set cookies * - OCConnection: make Connection Validator more thread-safe, add rate limiter to avoid excessive retries * - OCBookmark: - allow setting the internally tracked _lastUsername with new method - OCAuthenticationMethodOAuth2 + OCAuthenticationMethodOpenIDConnect: - add headers to prefill user name where available and supported by the server - comment out support for OAuth2 due to crashes in the web view in Simulator and on device * - OCConnection: - implement Connection Validator II - following the latest flow diagram - update code comments explaining the structure - factor out the Connection Validator to its own method * - OCConnection: Connection Validator cleanup * - OCConnection: Connection Validator comment clarifications * - OCConnection + OCHTTPPipeline: add debug output for cancellation of non-critical requests - OCProcessManager: add additional observation and debug output for tracking app/extension state * - OCClassSettings: add "categoryTag" generation support * - OCHTTP improvements - centralize management of X-Request-ID header in OCHTTPRequest - replace all header field strings with OCHTTPHeaderFieldNames - extended and more uniform log messages to make following a request through the OCHTTPPipeline much easier - move the majority of debug messages to the verbose level - log old and new X-Request-ID when recreating it, to allow connecting the dots - avoid requesting the full header dictionary when just interested in a single one - log type (Bearer, Basic, …) from Authorization header and only replace the actually confidential part with "[redacted]" - add debugging description to OCHTTPRequest - OCHTTP bugfixes - ensure that only one representation (object or data) is kept in an OCHTTPPipelineTask at a time, to avoid inconsistencies - drop request data if requestID is changed - OCLogger - migrate privacy mask and log level to OCClassSetting + observation - fix bug where log level changes didn't propagate across processes - OCClassSettings - fix bugs related to change notifications timing - implement cross-process notifications for user settings - General - move frequently logged debug messages that are very specific and aren't needed 98% of the time to the verbose logging level * - Turn off HTTP request and response logging toggle by default * - OCConnection: - limit connection validation to same host (fixes conflict with redirects / multi-tenancy) - increase security of "allow same host" redirect policy by also requiring same HTTP scheme - OCCore: -trackItemAtPath:trackingHandler: no longer makes multiple nil calls if an item is not found - OCLogger: avoid log.log-enabled-components validation error during logger startup - OCUser: also archive/unarchive _forceIsRemote - project: update env vars to take lack of http request/response logging into account - unit tests: - fix failing tests - tag remaining tests that still fail * - OCLogger: fix recursive possible values assignment for OCClassSettingsMetadataKeyPossibleValues - OCHTTPPipeline: check signal requirements for final requests only if there are any signals actually required by the request - or the handler for the partition the request belongs to is around - OCHostSimulator+BuiltIn: fix incorrect block passing resulting in requestWithCookiesHandler never being called - unit tests: - fix remaining failing tests - comment out deactivated tests * - additional unit test fixes / adaptions to Bitrise performance * OAuth2: - add new method -postProcessAuthenticationDataDict: to condense the stored token response to the needed essentials, saving space and steering clear of issues if the token response contains null values that make secret serialization to property list format fail - factor out access to clientID and clientSecret into methods - make -sendTokenRequestToConnection:… subclass able - improved error handling if property list serialization fails OIDC: - add support for OpenID Connect Dynamic Client Registration - on by default for servers offering the endpoint - including support for expiration, preservation and caching - add additional error code for client registration failure HTTP Pipeline: - factor out User-Agent template composition method to make it available - extend OCHTTPRequest with JSON-specific method to easily instantiate POST requests with JSON payload * Update CONFIGURATION.json with latest OIDC additions * - Authentication: add new OCAuthenticationMethodRequiredUsernameKey option - OAuth2 / OIDC: add support for new OCAuthenticationMethodRequiredUsernameKey option * - OCClassSettings: fix crash that could occur if overrideSettings was mutated while being used * Class Settings cleanup: - remove "connection-" and "log-" in front of class setting names for OCConnection and OCLogger to avoid duplication like "connection.connection-.." - update schemes to use the new names - update CONFIGURATION.json with the changes - replace configuration documentation in CONFIGURATION.md with a reference to the full documentation in the ios-app repository, as reference in CONFIGURATION.md is no longer updated * - OCConnection: add dedicated handling for "403 Forbidden" responses to file download requests (enterprise#4338) - NSError+OCError: add a new OCErrorWithDescriptionFromError macro that allows creating an OCError based on another error with custom description * Add support for certificate comparisons: - OCCertificate+OpenSSL: - add nullability annotations - extend API to compare certificates - OCCertificateDetailsViewNode: - add nullability annotations - add support for different types of changes, supporting old and new values, old and new certificates (for certificate chains) - OCCertificateViewController - add support for certificate comparisons, with a "+/- Show/Hide" toolbar button baked right in - highlight changes with colors and circled +/- signs * OCCertificateViewController: only add "Done" navigation button if root view controller * - provide clearer issue title for certificate changes * OCHTTPPipeline: fix "UNKNOWN TASK" error for auto-resumed downloads/transfers - resumable downloads occur when backgrounding the app - resumable downloads would be rescheduled automatically to complete the download - by rescheduling, the request got a new X-Request-ID, but that one was never used by iOS - when iOS returned the response for the resumed download, it came back with the OLD X-Request-ID, resulting in the Pipeline not being able to recognize the request - result was hung downloads at the pipeline level - fixed: now avoids recreating the X-Request-ID for resumed requests * - OCBookmark: add additional diagnostic action that overwrites the certificate with an empty data blob, prompting a certificate warning dialog on next connect * OpenID Connect: for token refresh, use the client_id and client_secret used at the time the token was registered in the Authorization header, while using the latest registered client_id / client_secret as parameters * ownCloudUI: show "Show ±" only for certificate diffs with actual differences * [feature/mdm+branding] SDK version for MDM+Branding app branch (#78) * - OCConnection+Setup: - remove support for auto-detection of OC installations in "owncloud" subfolder - no longer alert user of root redirects if they happen on the same host with the same scheme (http/https) - OCClassSettings: - add new DictionaryArray and URLString types - add validation support for new types * OCClassSettings+Metadata: - also include registered metadata when determining available keys for a settings identifier * - OIDC Dynamic Client Registration: add support for non-expiring client_id/client_secret pairs via convention * Add 11.5 section to CHANGELOG.md * - OCConnection+Setup: rewrite redirect handling during setup with full duplicate control and permanent removal of support for subfolder installs in `/owncloud/`. * OCConnection: - Connection Validator: infinite loops detection: - increments a counter for the URL whose response triggered a connection validation - decrements the counter when receiving a response from the same URL that no longer would trigger a connection validation (bringing it back to 0, ideally) - if the response to the URL triggered validation more than 3 times, the response is delivered instead of triggering validation - Connection Setup: - count how often an URL was the target of a redirect during setup - if a URL was already targeted more than 0 times (adjustable), declare detection of the server root URL as failed - HTTP Pipeline: - turn certificate missing log message from error into warning, since it is not handled as an error internally, either and can be confusing when debugging * - OCConnection+Setup: only accept redirects with status 301 to other root folders, fail for all others * - OCAuthenticationMethod: add additional userInfo key to redirection errors to indicate from where a redirection started - OCAuthenticationMethodOpenIDConnect: - add redirection detection for .well-known/openid-configuration - improved error handling - OCBookmark+Diagnostics: add "Use Origin URL as URL" action to reset multi-tenancy redirection info in bookmarks - OCConnection: - fix recovery from answered redirection warning issues - add support for redirections to other hosts (previously a hard error) - OCCore: - pick up certificate rejection errors from OCHTTPPolicyBookmark and present them to the user - remove unused attemptConnect method variant - OCHTTPPolicyBookmark: improved description of errors where a certificate was changed but could not be auto-accepted - OCCertificateDetailsViewNode: fix a crasher caused by unconverted object types stored in .previousValue * - Ocean: adapt to SDK API changes, including unit tests - OCConnection: add fallback option to extractBaseURLFromRedirectionTargetURL:… to return redirectionTargetURL in case no common base path could be found - OCAuthenticationMethod: replace local fallback with above fallback * - AuthenticationTests: additional test cases for redirection base discovery * - OCConnection: support for cleaning up additional redirection target format (+ additional unit tests) * Add OCLock set of APIs for expiring, coordinated cross-process locks (+ unit tests) * - OCLock / OCLockManager: make keepAlive more opportunistic to optimize resource usage - OCAuthenticationMethodOAuth2: use OCLock to secure token refreshs and avoid issue (3) reported in ios-app#886 * - OCHTTPStatus: new .name property to quickly get the name of a status - OCHTTPPipeline: new HTSum-tagged brief one-line summary of HTTP requests and responses (to be extended) - OCConnection+Setup: add base URL extraction call to redirection handling for status requests - OCConnection: Connection Validator now also checks for the same port before it starts - NSURL+OCURLNormalization: standardized URL port and scheme/host/port comparison additions, nullability annotations * OCConnection and OCConnection+Setup: change from local comparison of host and scheme to NSURL+OCURLNormalization utility method. * - OCLogger: fix migration of log level + privacy masking (broken following shortening of the identifiers earlier) * - OCLogger: add migration path for user setting "log.log-level" to "log.level" * - improve OCLogger migration code structure * - NSDictionary+OCExpand - NSDictionary category to expand flat keys into hierarchies - implemented unit test in MiscTests - OCClassSettingsFlatSourceManagedConfiguration - add detection of changes pushed via MDM and posting OCClassSettingsManagedSettingsChanged notification - utilize NSDictionary+OCExpand to support simplified notations of MDM configurations * - OCBookmarkManager+ItemResolution: add new method to find the OCBookmark that contains a provided OCLocalID - OCCoreManager+ItemResolution: add new method to request OCCore and OCItem for a provided OCLocalID (build upon OCBookmarkManager+ItemResolution) * - OCCoreManager+ItemResolution: fix nullability annotation * Add unit test for ItemRetrieval method(s). * - OCConnection+Avatars: clarify the method name as it returns data, not the avatar itself - OCResource - initial draft of a universal resource retrieval, caching and version management subsystem - design target is to also support local resource generation (like QuickLook thumbnails) and a unified memory + DB cache across all resource types - start README.md on this subsystem to create documentation about the concepts along the way * - OCResource: add concept of a structure description (lesson from thumbnail caching) * - change to reopen PR * - Class Settings: add additional implementation check for settings snapshot - OCLogger: use all OCClassSettings implementing classes when putting together summary * - NSArray+ObjCRuntime: support additional ways to filter class list - OCClassSettings: add new, optional includeInLogSnapshot method to opt into the log snapshot (part of log intro) - OCClassSettings+Documentation: returning all classes that opted into snapshots via snapshotClasses - OCLogger: use OCClassSettings.snapshotClasses as basis - other classes: use opt-in macro * - OCConnection: update OCConnectionRenewedCertificateAcceptanceRule to allow root certificate change from DST Root CA X3 / R3 to ISRG Root X1 / R3 - add unit tests for LetsEncrypt root certificate change * - OCKeyValueStorage: add APIs for new semantics for shared instances based on URL + identifier and owner - OCVault: uses new shared semantics to create its KVS, to avoid rapid recreation in contexts where OCVault is only used temporarily, to gain access to its KVS * - extend changelog with changes for 11.6.1 * - fix crash that occurred on devices if classes were checked for protocol conformance using a regular method call, which triggered class initialization, which - especially for WebKit classes - led to a crash. - update CONFIGURATION.json with latest changes * - Change to keep PR open * OCCore: add class setting to allow configuration of time interval between end of one scan for changes to the next scan for changes * - OCDAVRawResponse: container for capturing raw WebDAV PROPFIND responses - add update scan timing logging - add support for update scan interval (and disable it for now) - add support for infinite PROPFIND requests, introduce OCPropfindDepth - OCSQLiteDB: add method to queue blocks on the DB thread - OCXMLParser: add support for live processing of parsing results and add further abstraction for error and parse result handling - OCBookmark, OCVault: add methods to prepopulate account databases from infinite PROPFIND responses - various smaller improvements * - OCCore+ItemList: scan for changes no longer uses the background URL session to avoid APM redirect issues * Update CHANGELOG.md for 11.7 * - OCHTTP: add support for streaming responses as NSInputStream (+ prepare for more variants) - OCConnection: add support for streaming PROPFIND responses - OCVault+Prepopulation: add methods for streaming metadata and parsing the stream at the same time - OCBookmark+Prepopulation: add method for streaming prepopulation * - OCCapabilities: prepare support for new "supportsInfinitePropfind" capability - OCHTTPStatus: correct spelling of Method Not Allowedc status code * - add localizable strings for account prepopulation progress messages * - OCClassSettings improvements - extend -keysForClass from documentation to --keysForClass:options: for wider use - settingsSnapshotForClasses now uses -keysForClass:options: instead of trying to compile a definitive list of keys itself - adapt calling code accordingly * - fix DAVRawResponseTests comment error * - support for custom poll interval for changes: - through capabilities: mirroring changes from https://github.com/owncloud/client/pull/8777 - through MDM via `core.scan-for-changes-interval` - in milliseconds - defaulting to 10 seconds - enforcing (and logging a warning) for intervals below a minimum of 5 seconds - logging a warning for intervals greater than 60 seconds * - improved configurable scan for changes poll interval - determine effective poll interval only once / initialized core - limit logging of warnings and errors to once / initialized core - improve wording and verbosity of log messages - clean up code * - rename OCResourceCache to OCResourceStore and add retrieve/store method definiton - fix build errors in OCConnection+Avatars - add OCResourceMetadata type - extend OCResource definition in preparation for storage/retrieval in OCResourceStore - add resources table definition to OCDatabase - outlook: plan is to limit resource subsystem to avatars at first, then eventually migrate thumbnails over * - Browser Session Class: add AWBrowser to simplify configuration for AirWatch browser * - no longer output "computed: '<null>'" entries for class settings in the LogIntro if it is the only entry for that MDM parameter * - OCAuthenticationMethodOAuth2: use UUIDString instead of UUID description for lock name - OCCore+FileProvider: add handling for edge case when the database is not available or not open, preventing a hang - OCCore+ItemList: implement coordinated scan for changes - synchronizes scans for changes across processes - prioritizes scans, giving the app highest and the fileprovider second highest priority - consolidate related log messages under ScanChanges tag (including PollForChanges and UpdateScan) - OCLock: add support for trying to acquire a lock and immediately returning with the result, with a new OCErrorLockInvalidated error code in case the lock couldn't be acquired - OCDatabase: add .isOpened property - OCSQLiteDB: disable statement caching in minimum memory configuration * - change "refresh_token" to "refresh token" in English Localizable.strings. * - OCLocale: modular localization system replacing direct system localization calls - OCLocaleFilter: layers that strings run through during localization to allow transformations - ClassSettings: allows overriding individual strings with replacements provided through a dictionary from class settings - Variables - allows replacing {{variables}} with values, or dynamic content from "variable sources" - shared instance allows addition of sources and changing variables at runtime - provides generally useful variables like app.name - change OCLocalized() set of macros to call OCLocale, not NSLocalizedString/NSBundle directly * - OCLocale: - fix bug when replacing placeholders with sources - add support for passing additional variables via options (+ OCLocalizedFormat macro) * - OCLocaleFilterVariables: add missing "{{" and "}}" in search term for replacements * - OCCapabilities: add support for dav > propfind > depth_infinity capability * - OCItemPolicyProcessorVacuum: fix wrong metadata type for OCClassSettingsKeyItemPolicyVacuumSyncAnchorTTL (bool -> integer) * - update CONFIGURATION.json - OCAuthenticationMethodOAuth2: add support for passing username to OAuth2 page - OCBookmark: add .serverLocationUserName property to aid with server location functionality, including re-authentication - OCClassSettingsFlatSourceEnvironment: add support for JSON dictionary values - OCServerLocator: - extensible layer that allows to locate the target server URL from a username - OCServerLocatorWebFinger: server location using web finger and custom relation http://webfinger.owncloud/rel/server-instance - OCServerLocatorLookupTable: server location using a lookup table and patterns - OCHostSimulator: - add new "web-finger" simulator simulating a webfinger server providing server instance relation information - OCConnection: - add OCConnectionSetupOptionKey type - allow to pass a username to -prepareForSetupWithOptions: via OCConnectionSetupOptionUserName - setup: add support for / integration with OCServerLocator - OCHTTPRequest: - log application/jrd+json bodys in clear text * - OCSQL: - add collation support via new OCSQLiteCollation class, making it as simple as possible to encapsulate and add collations, avoiding string conversions where possible - add collation OCSQLiteCollationLocalized (OCLOCALIZED) for "Finder-like" sorting - OCDatabase+Schema: upgrade schema for metadata to use OCLOCALIZED for item name - OCLogger: fix duplicate use of tags in _OC_RLOG macro * - added authentication-oauth2.oidc-fallback-on-client-registration-failure, defaulting to true, to allow the automatic fallback to default client_id / client_secret if OpenID Connect Dynamic Client Registration fails with any error * OAuth2: - store token expiration timespan - if stored token expiration timespan < (safetyMargin + 20) seconds, no longer preemptively refreshes the token within the safety margin * - reset OCCapabilities to latest version * - add NSError+OCErrorTools with new method to determine if an error is an authentication error - OCConnection+Compatibility: improve error handling, adding handling for "Unauthorised" errors - OCConnection: remove authenticated WebDAV request asking root WebDAV endpoint for D:supported-method-set, instead rely on capabilities to respond with an authentication error if auth credentials are not valid. - AuthenticationTests: adjust for latest changes in OAuth2 and OCConnection connect * - OCBookmark: add first-level support for access to the user.displayName with new property userDisplayName - OCConnection: update .bookmark.userDisplayName (and save it unless it is a working copy with in-memory credentials storage) on every connect, if it was changed - OCBookmarkManager: fix possible deadlock * - Snapshot * - snapshot * - remove unused OCJobID from code * OCCore+CommandLocalModification: no longer handle failure of -startAccessingSecurityScopedResource as an error, as that may indicate the inputFileURL is not actually security scoped, not that the file can't be accessed. Fixes enterprise#4934. * - !! Snapshot !! - overhaul of Resources concept - implementation of OCResourceManager, addition of OCResourceManagerJob - support for automatic (by deallocation) and manual removal and cancellation of OCResourceRequests - add serialization/deserialization support to OCResource - OCHTTP: extend documentation, fix sorting bug, add missing status code description * - milestone: first functioning thumbnail implementation * - Resources: database storage & retrieval of retrieved resources now working - OCBookmarkManager deadlock bugfix * - add OCPlatform - add OCViewProvider + OCViewProviderContext - add OCBookmark.avatar property serialized/deserializing to/from data, utilizing OCViewProvider for maximum flexibility, but ensuring OCBookmark can always be serialized/deserialized even if avatar can't be deserialized - make OCAvatar a subclass of OCImage - cleanup designed OCAvatar usages - making progress, thumbnails and avatars now functional through OCResourceManager * - OCResources - add new OCResourceSourceAvatarPlaceholders - add new OCResourceTextPlaceholder - add per-session and expiry triggers for avatars - add new error code OCErrorResourceDoesNotExist that forces clearing the cache and restart a resource manager job - add missing parts - OCUser: add localizedInitials accessor and class method - OCBookmark: - add .user property with a full copy of the OCUser instance from OCConnection.loggedInUser - provide fallback OCResourceTextPlaceholder for .avatar if none is set - OCBookmarkManager: preserve existing OCBookmark instances on reload whenever possible - OCConnection: keep bookmark.user up-to-date * - OCBookmark: add more details to documentation regarding OCBookmark.userName - OCConnection: build WebDAV root URL using loggedInUser, bookmark.user, only then bookmark.userName, addressing https://github.com/owncloud/enterprise/issues/4924 * - add OCBookmark.user property, storing the last retrieved version of OCConnection.loggedInUser - use OCBookmark.user to compose WebDAV endpoint path (fixing https://github.com/owncloud/enterprise/issues/4924 ) * - OCCoreItemListTask: stop processing if core has shut down in the meantime * - OCDatabase - Schemas: delete existing thumbnails from old thumbnails table - Versions: bump database version number to block repopulation of thumbnails table when using old versions - remove old thumbnails API - OCCore: remove old thumbnails code * - remove unused OCResourceSourceItemIcons * - remove OCResourceSourceItemIcons.h from SDK header * - OCCore: remove thumbnail APIs - OCDatabase: remove thumbnail API - OCItem: remove unused .thumbnail property - OCResourceSourceAvatarPlaceholders: upgrade priority from local fallback to instant - OCResourceManager: detect duplicate resource source additions - OCResourceSourceItemThumbnails: utilize item.thumbnailAvailability information to avoid unnecessary requests * - OCConnection+GraphAPI: start of graph API support - OCConnection: add OCConnectionEndpointIDGraph - OCGraph: - OCGraphContext: context to pass around during graph parsing - OCGraphData+Decoder: decodes graph JSON to graph model objects - OCGraphObject: protocol for graph model classes to follow - ocapigen: YAML parser + code generator with advanced capabilities - no external dependencies - modular design allows implementation of different generators - initial implementation for Objective-C / ownCloudSDK - divides target files into segments, with support for: - locking segments - customizing code generation on a per-segment basis - GraphAPI/GeneratedTypes: initial batch of model headers and implementations, auto-generated by ocapigen * - use more distinct "namespace" prefix for Graph API model classes, switching from OCG to GA * - fix typo in header * - add OCDrive, OCQuota classes - add OCDrive, OCDriveType and OCSeed types - OCItem: add driveID - OCDatabase: - add support for storing, updating, retrieving and deleting OCDrives into a new drives table - add driveID column to metaData / item table - OCConnection+GraphAPI: fully implement drive list retrieval, based on GADrive and OCDrive - OCRecipient: refactor as OCIdentity - NSError+OCError: add new OCErrorGraphError code for packaging graph errors - GAGraphData+Decoder: add NSString -> NSURL conversion, block file URLs - code generator: also create NSSecureCoding en-/decoding code as well as a debug description implementation - OCMacros: add new OCExpandVar macro to make meaningful debug descriptions easier to write * - OCCapabilities: add support for spaces: enabled + version - OCConnection: - turn server version + edition methods into properties - add new options OCConnectionEndpointURLOptionDriveID and OCConnectionOptionDriveID to pass driveID to endpoint and retrieveItems APIs - adopt new driveID options in almost all WebDAV-related methods - DirectURL: adopt new driveID option - Compatibility: add central drive switch .useDriveAPI - Tools: add support for DriveID-dependant WebDAV endpoint URL - OData: - new generalized support for requesting OData objects (and later to also create, update and delete them) - add stubs for a filter string builder for OCQueryCondition - GraphAPI: add methods to retrieve drive list and (cached) drives, use new OData APIs - GraphAPI: fix issue decoding dates without fractional seconds - OCHTTPDAVRequest: add driveID option to parsing - OCLocation: new type that encapsulates bookmarkUUID, driveID and path - OCItem: add .location property - OCMacros: generalized macros to wrap/unwrap nil values into NSNull objects - OCDatabase: add API to remove items for a particular driveID - OCVault: - add drive related methods to erase local copies for a particular drive - add method to retrieve the root URL for files of a particular driveID - adapt existing methods to take an item's .driveID into account * - add OCLocation comparison support + building tools - change APIs and internal structures to use OCLocations instead of OCPaths - adopt OCDriveID and OCLocation throughout core SDK types like OCShare, OCItem and more - fix comparison with NULL values in generated SQLite WHERE clauses - extend OCCoreItemList with drive selection * - use GADrive instead of GDrive in OCDrive API name - update types from latest yaml, add some "locked" parts in the headers that would otherwise be overwritten - ocapigen: alphabetically sort forward declared types and includes so they don't change order and cause unnecessary changes * - OCItem: add driveID to debug description - OCDrive: - add isSubstantiallyDifferentFrom method to quickly determine if the drive description itself has changed in a substantial way (f.ex. id, type, name, davRootURL) - add rootLocation property returning the root folder (/) location - OCDatabase: - add drive "seed" column - OCCore: - replace polling of webDAV root for eTag changes with polling of drive list (+ eTag comparison) - OCCore+CommandLocalImport: include driveID into placeholderItem - OCSyncActionCopyMove: include driveID into placeholderItem - OCSyncActionCreateFolder: include driveID into placeholderItem - OCBookmark: add bookmark-capabilities support, feature flags that can be set, queried and removed - OCConnection+GraphAPI: update .drives list every time a new, valid list is retrieved via -retrieveDriveListWithCompletionHandler: - OCConnection+Compatibility: use bookmark capability OCBookmarkCapabilityDrives to determine .useDriveAPI property value - OCConnection: set drives capability in bookmark during connect - GADrive: change eTag from NSString to OCFileETag * - update GA classes from latest libre-graph * - OCDatabase: fix duplicate/multiple drive entries in OCDatabase - OCDrive: add .rootETag property to return root eTag (both for flexibility and convenience) - OCCore: use .rootETag from drives to trigger PROPFINDs on root folders of the spaces, including database-persistance (!) - OCSQLiteQuery: add support for INSERT OR REPLACE query construction - GADriveItem: use OCFileETag for .eTag rather than NSString directly * - initial Data Sources implementation, including initial set of unit tests - OCCore+ItemList: do not request updates from drives that do not have an ETag (assume a temporary malfunction) - fix unit tests compilation errors: convert from OCPath-based APIs to OCLocation * - NSArray+OCFiltering: utility category to filter arrays efficiently using a block - Data Sources progress - CONCEPT.md: gives an overview over the thinking and structure behind data sources - OCCore+DataSources: APIs for core-provided data sources - OCDataItemPresentable: new container class storing an intermediate, presentable representation of an item - OCDataRenderer: - added "path finder" for auto-assembly of converters from one object type to another, using the smallest number of steps - added unit tests for path finding algorithm - OCDataSourceArray: implementation - OCDataSource: refine subscription API - OCDataSourceSubscription: add setNeedsUpdateHandling change aggregation pattern, allowing users to provide a dispatch queue to perform the change notification on - OCDrive: - add OCDataItem and OCDataItemVersion suopport - add converter to OCDataItemPresentable * - OCDataItemCellConfiguration: helper class that allows to temporarily attach additional information alongside OCDataItemReferences, where it can't be passed otherwise - OCDataSource: add UUID property * - OCDataItemCellConfiguration: add hostViewController property * - remove OCDataCellConfiguration (replaced by CollectionViewCellConfiguration in ownCloudAppShared) * - NSArray+OCFiltering: helper methods to quickly filter and find objects in arrays - OCDataTypes: add types for filter and sort comparators on OCDataSourceItemReferences and OCDataItemRecords - OCDataSourceArray: use same object for @synchronized internal state modification as OCDataSource - OCDataSourceComposition: - new data source type that composes its content from one or more other OCDataSources - supports filtering and sorting - of every contributing data source individually - of the item set composed from all data sources - GraphAPI type updates * - OCResource - new request OCResourceRequestDriveItem and source OCResourceSourceDriveItems for DriveItems (from spaces) - new resource type: OCResourceTypeDriveItem - new resource: OCResourceText to store textual resources - OCData - OCDataItemPresentable: add intermediate resources retrieval support (subject to change) - OCDrive: - add support for providing OCDataItemPresentable resources for cover image and readme - add support for space description ("subtitle" in web UI) - add type for drive aliases - Graph API - GADrive: add method to retrieve special items - GARemoteItem: use eTag type - GASpecialFolder: add GASpecialFolderName type and add GASpecialFolderNameReadme and GASpecialFolderNameImage * - OCConnection+Avatars: use parsed content type - OCConnection: remove .supportsPreviewAPI and support for thumbnail API - OCCore+DataSources: clarify the data sources are read-only - OCDataItemPresentable: change API to return requests to resources, rather than the resource themselves - OCDrive: adapt to OCDataItemPresentable changes * - OCItemVersionSeed: new value to allow quick detection of changes in items - OCItem: add new versionSeed property and associated methods to update the seed - OCCore: add support for updating versionSeed when changes occur - OCItem+OCDataItem: make OCItem comply to OCDataItem and OCDataItemVersion (the latter using the new version seed) - OCHTTPResponse: extend support for encoding-sensitive conversion of body data to NSStrings, with explicit fallback encoding - OCResourceSourceDriveItems: make text resource encoding sensitive - OCResourceText: make compliant to OCDataItem and OCDataItemVersion - OCDrive: include readme and image in significant update detection, add support for subtitles/descriptions - GAGraphData+Decoder: add support for unescaped URLs (https://github.com/owncloud/ocis/issues/3538) - OCLocation: add .lastPathComponent utility property - OCViewProviderContext: add initializer and context key for content mode - OCQuery: add .queryResultsDataSource property providing an OCDataSource tracking the query's results (leaving room for future performance improvements) * - OCConnection: only accept images in return to thumbnail requests (working around https://github.com/owncloud/ocis/issues/3558) - OCCore: include virtual drives in hierarchicDrivesTopLevelItems - OCResource subsystem: - fix bug that prevented retrieval of resources other than item thumbnail and avatars from cache - fix bug that could mix resources of different types that shared the same ID * - OCConnection: - add virtual preview API endpoint - remove legacy thumbnail endpoint support - OCImage: fix logical error that led to wrong/inferior resolutions being picked - GAGraphContext: comment out designed methods for now, to avoid warnings * - add enum annotations for Swift 5 * - additional Swift 5 enum adaptions - OCConnection: return new OCErrorMissingDriveID + log a warning when a command without drive ID is attempted on a drive-based account * - new class: OCVaultLocation - provides an abstract description of an item's location in a vault - can en- and decode OCVFSItemIDs - OCVault - add support to map OCVaultLocations to NSURLs - and back - add additional class methods to retrieve specific container root URLs - add filesystem layout overview to header file - OCVFS (WIP) - virtual file system implementation - supports virtual folders and mapping OCQuerys and OCLocations via OCVFSNodes - returns OCVFSContent to describe contents of a folder * - OCItem: add .customIdentifier1 and .customIdentifier2 to temporarily store two references/IDs that aren't serialized - OCVault: fix URL <-> OCVFSItemID conversion bugs - OCVFS: make advances in implementation to drive a first File Provider implementation * - OCVault: - add APIs to store, retrieve and track drives, including in a new detached state (for drives that were removed on the server) - add support for OCVFS ID conversion hooks - change File Provider signaling to adopt OCVFSItemID - add isVirtual flag to OCVaultLocation to allow referencing a drive root mapping to an OCVFSNode - OCVFS - refine ID addressing scheme and implement support for it across OCVaultLocation and OCVFS - specify the OCVFSItem protocol and implement it for OCItem and OCVFSNode - differentiate auto-updating and self-updating OCVFSContent via .isSnapshot property - add methods to OCVFSCore to replace all nodes and request a drive root based on its OCLocation - OCDrive: add properties for detached state tracking, make value comparisons in isSubstantiallyDifferentFrom nil-aware - OCItem: replace customIdentifier1/2 with non-serialized .bookmarkUUID property - OCDatabase: remove support and schema for drives table- NSArray+OCMapping: utility category that adds methods to transform arrays into sets and dictionaries - OCCore+ItemList: switch to vault as source for drives to scan periodically - OCCore: clean up drive APIs, make them pass through to OCVault - OCConnection+Compatibility: add workaround for broken legacy version in ocis beta/nightly - OCDataSourceKVO: new data source class that is updated via KVO observation of another object, with immediate filtering/conversion capabilities. Supports both regular data items and versioned data items. * - ocapigen: - add support for primitive item types (=> i.e. strings) to resolve warnings and properly dearchive all properties - fix occurrences of "NSArray.class.class" - update GA types with fixes by running the generator against the latest yaml file - OCVault.h: add info on subfolder used by TUS uploads * - OCItem: add OCItemPropertyNameDriveID to allow custom queries targeting specific drives - OCDatabase: add mapping for OCItemPropertyNameDriveID to driveID database column - OCCore: add support for drive IDs to -[OCCore trackItemAtLocation:…] - OCDrive: - turn OCDriveType into a string enum - add .isDeactivated property - GADeleted: add type GADeletedState for .state - OCHTTPRequest: add size of URL-based request body to debug output * - OCAction: simple encapsulation class for actions that can originate from anywhere (SDK, app, …) - OCDataTypes: add types for Message (TBD) and Action - OCDataSource: add OCDataSourceState type as a simple way to convey the status of the underlying mechanism of a data source - OCQuery: update .queryResultsDataSource.state from OCQuery.state * - OCAction: extend with identifier, version and type (regular/destructive) properties for a richer representation and more flexibility to control updates - OCAuthenticationMethod: add convenience class method localizedNameForAuthenticationMethodIdentifier to return the name of an authentication method - OCAuthenticationMethodOpenIDConnect: add "select_account" to prompt to ensure the account switcher is shown for users that are already logged in - Data sources: - rename OCDataItemVersion protocol to OCDataItemVersioning since Swift can't tell the protocol and the type apart otherwise - add new OCDataItemTypeView for views - add ordering detection to OCDataSourceSubscription and report it as change as well * - OCLocation: add simple en-/decoding to/from data and UTI data type ID - OCQuery: fix typo in .rootItem description * - OCDataSourceComposition - new methods to add, insert and remove sources dynamically - new method to include/exclude added sources * - OCDataSourceComposition: efficiency change: only update composition if include status of a source actually changed * - NSArray+OCMapping: add method -arrayUsingMapper: - NSDate+OCDateParser: add method -localizedStringWithTemplate:locale: for flexible localized date representations - OCQueryCondition: add userInfo property to support adding additional meta data (such as by the ownCloudApp framework for UI purposes) * Add app provider support - OCAppProvider: encapsulates URLs, retrieved raw app lists, parsed apps and file types - OCAppProviderApp: encapsulates apps and provides metadata, including the icon as URLItem resource - OCAppProviderFileType: encapsulates file types and provides metadata, including the icon as URLItem resource - OCCapabilities: support for on-demand parsing of app_providers into OCAppProvider instances, convenience access to latest supported app provider version - OCConnection: - support for the new app provider endpoints in the endpoint API - new methods to retrieve app list, create new documents and open documents in web apps - OCCore: new KVO-observable, managed .appProvider property for convenience access to the latest supported app provider New URLItem resource type: - intended for caching remote, URL-based resources with variable caching intervals Miscellaneous improvements: - new OCMIMEType and OCFileExtension types - fix DataSourceTests - add ocis target to OCTestTarget and stub app provider endpoint test (needs server support to fully implement) * - OCHTTPDAVRequest: implement support for "Prefer: return=minimal" to take advantage of https://github.com/cs3org/reva/pull/3222 - OCItem+OCTypeAlias: add support for (MIME) type aliases directly into the SDK - new OCTypeAlias type - new methods for conversion from OCMIMEType to OCTypeAlias - new OCItemPropertyNameTypeAlias and support in the SQL Builder - add new typeAlias column to metadata, implement v16 of the metaData table schema and an efficient migration with progress reporting - OCSQLiteDB: add -dropTableSchemas method to release table schemas when they are no longer needed, allowing to free memory held by migration blocks in the schemas, take advantage in OCDatabase * - OCConnection: add support for "open" app providers endpoint - OCAppProviderApp: add type to support app provider view mode (view, read, write) - OCConnection+AppProviders: add support for "open" endpoint, with mode support and returning a ready-to-use URL request - NSError+OCISError: add support for parsing `{ code: "…", message: "…" }`-style ocis errors into NSError objects - NSError+OCError: add new error codes to support NSError+OCISError - NSDictionary+OCFormEncoding: factor out code to encode a dictionary of parameters as a PUT/POST body data * - OCSyncActionDelete: fix potential crash bug * - add new OCDataItemTypeSavedSearch data type * - OCCore - add new data source .subscribedDrivesDataSource for subscribed drives - add support for deactivated drives - do not return a drive as subscribed when it was deactivated on the server - automatically reload custom queries if the list of subscribed drives changes - mark items of detached drives as deleted, change their detachedStatus from .new to .itemsRemoved - OCDrive: better documentation of OCDriveDetachedStates and additional state OCDriveDetachedStateItemsRemoved - OCMacros: add OCWaitOnCompletion to execute a block on completion of the OCWait - OCDatabase: add methods to remove (mark as deleted) or purge (actually remove) the cache items for a whole drive - OCVault: - add two new internal notifications for when the subscribed and detached drive lists change respectively - add new wipe mechanism - has wipeContainer locations inside .rootURL and .filesRootURL - fs items (files/folders) to be wiped are moved into these folders, then removed - all items inside wipeContainers are removed eventually (f.ex. on opening a bookmark, the app, etc.) - new method to erase a drive (both files + from cache in DB) * - OCVault: improve error handling and fileop debug logging * - fix wrong type warning in implementation * - update GraphAPI to libre-grap-api v0.17.0 * - OCDrive: no longer pass through space type as presentable subtitle, only actual drive descriptions - OCLogger: add new "replace-newline" option that replaces newlines with "\n" by default, disable (then unneeded) "single-lined" by default * - OCHTTP: add support for 425 status - OCItem: - add parsing support for 425 status multi-responses - add OCItemState signalling 425 status as .serverSideProcessing * - OCHTTPStatus: add textual representation for 425 status * - OCConnection+AppProviders: fix error pass through from HTTP to completion handler * - OCCore+ItemList: add missing error handling when retrieving drive list; drives now no longer vanish when connections fail or are note possible * - OCCore+ItemList: recognize OCItem.state changes as relevant change for updating the item and its versionSeed * - add all missing German translations in Localizable.strings * - OCConnection+Download: add error code + error message for files returning 425 on download * - add missing localization of string "Retry" * - OCCore+SyncEngine: avoid publishing the same sync activity twice * - OCCore+ItemList: - FIX: add .previousPath to renamed items where that info was previously missing - FIX: ensure that recomposed paths after a move end in a "/" for folders - OCCore+ItemUpdates: update OCQuery.queryLocation when the observed location is moved * - OCVFSCore: guard nodes against enumeration during mutation (which could cause crashes) * - OCCapabilities: add convenience accessor .federatedSharingSupported with temporary workaround for https://github.com/owncloud/ocis/issues/4788 - OCCore+Sharing: update share queries also in case of errors - NSError+OCHTTPStatus: add method to quickly check if an error is a HTTP status code - OCImage: use QOS_CLASS_DEFAULT instead of QOS_CLASS_USER_INITIATED * - fix Xcode 14 warnings * - OCShareRole: encapsulates information on sharing roles for display - OCCore: add new APIs to retrieve available sharing roles for a location, as well as identify the one matching an OCShare - OCSymbol: OCSymbolName type and class for accessing SF Symbols, adding an abstraction layer that simplifies access and allows centralized customization down the road - OCLocation: new OCLocationType, also usable as mask, for file, folder, drive and account - OCShare: - migrate from OCItemType to OCLocationType - add conversion for OCShareType<->OCShareTypesMask - XML parsing support for extracting drive ID information to form a complete OCLocation * - OCStatistic: - new class to provide structured statistical data from the SDK to clients like the app - implements OCDataItem and OCDataItemVersioning, so could also be used in data sources as items in the future - OCDataSource: - change implementation of .specialItemReferences to .specialItems, allowing to directly pass OCDataItems from source to subscribers - add new OCDataSourceSpecialItemFolderStatistics - OCDrive: change type of .quota to GAQuota - OCQuota: add missing OCQuotaState labels - OCQuery: add .queryResultsDataSourceIncludesStatistics to request that statistics be provided through the query's data source * - OCDrive: implement .name override for "Personal" and "Shares" spaces * - OCSyncActionCopyMove: prevent copying and moving of items into themselves * - OCConnection+AppProviders: add OCConnection.staticHeaderFields to the header fields used in the initial request when opening a web app in-app (typically adding "Accept-Language" to that request) - OCConnection + OCHTTPRequest: use header field data type rather than different NSDictionary types * - OCDrive: - add new property "specialType" to easily determine if the drive is the personal or shares jail space - or a regular project space - detect shares jail not by "virtual" type but by UUID - adapt .name to use .specialType to return hardcoded names * - OCLocale+SystemLanguage: new category providing the "Accept-Language" string as well as the primary language of the user - OCCore: replace local code with OCLocale+SystemLanguage to fill Accept Language static header field - OCConnection+AppProviders: add "lang=" parameter if the primaryUserLanguage can be determined. Fixes the issue that the UI of web apps was always presented in English, irrespective of the user's system language. * - OCConnection+AppProviders: return tailored error message and OCError code for 425 responses to open-web and open endpoint requests * - NSError+OCISError: add support for code TOO_EARLY - OCConnection+AppProvider: hardcode to always use the SDK's own 425 error rather than the error that may be returned from the server as JSON (=> which would not be localized) * - Data Sources: - Types: add new item types for OCBookmark and OCLocation - Presentable: add .image property for easier rendering of small images (f.ex. for a toolbar) - OCDataSourceArray: provide convenience initializer method to pass content at initialization - OCDataSourceMapped: new kind of data sources that allows to map an input data source's items to any kind of items that are dynamically created, updated and removed to match the contents of the source datasource - OCAuthenticationBrowserSessionCustomScheme: move workaround to open URLs from extensions to class-level method to make it generally available - OCLocation: adopt OCDataItem + OCDataItemVersioning - OCBookmark: adopt OCDataItem + OCDataItemVersioning - OCBookmarkManager: provide a data source with the bookmarks - OCAsyncSequentialQueue: add convenience initializer allowing to pass a dispatch queue to create an executor from * - OCDataSource: - make OCDataSourceKVO available outside the SDK - call -terminateSubscription for all active subscriptions on deallocation - OCQuery: change signal for setting data source state to Loading or Idle so empty folders no longer indicate Loading forever - replace calls to [UIImage systemImageNamed:] with OCSymbol calls * - OCAction: add support and a property for ActionProperties, clarify OCActionOption as OCActionRunOption - OCDataSource: add method to signal updated items by reference efficiently * - GAGroup: update to libre-graph-api spec v1.0.0 * - OCAction: new type .warning and closed extensibility attribute - OCResourceManager: add support for status 425 (log and return error) - OCDataSourceMapped: support changing source and, by setting it to nil, calling the destroyer on all mapped items * - OCConnection: add support for cross-space COPYs - OCCore: - add new async API to retrieve the cached item for an OCLoation - enrich OCLocation with .bookmarkUUID in more places - OCUser: crash fix and fallback algorithm if the OS does not return initials for a name - OCItem: return bookmarkUUID as part of the .location - OCLocation: relax equal comparison: if the driveID is identical, but only one of the OCLocations has a bookmarkUUID, assume it is the same - OCCertificateStore: store for certificates, preparing for future usage by OCBookmark * - OCCertificateStore: complete implementation - OCBookmark: - replace plain certificate property with OCCertificateStore and build migration path from existing bookmarks - add diagnostics support for multiple certificates - add new .primaryCertificate property that returns the certificate matching the bookmark's hostname - or - the only certificate in the store if there is only one - OCConnection: adapt bookmark building to use OCCertificateStore - OCHTTPPolicyBookmark: - add support for handling certificates for multiple hostnames using a bookmark's Certificate Store - implement option connection.associated-certificates-tracking-rule to opt-in certificates other than the server's main certificate into change tracking/recognition - OCHTTPRequest: add property .hostname for quick access to .effectiveURL/.url hostname * - OCDataSourceMapped: fix subscription leak on deallocation - OCDataSource: add new subscription observer API allowing to dynamically start/stop updating content when there is or isn't demand * - OCCore+DataSources: - make names of existing data sources clearer - add new data sources for: favorite, available offline item policies, available offline files - implement dynamic polling logic (currently used for favorites) - prepare for additional data sources for different sharing aspects - OCItemPolicy: - add UUID with fallbacks - implement OCDataItem + OCDataItemVersioning support, including a small converter to OCDataItemTypePresentable - use .locationString instead of .path in conditions for collections - OCItemPolicyProcessorAvailableOffline: add support for drives/spaces - OCDataTypes: add ItemPolicy type - OCItem: add .locationString property - OCDatabase: add new locationString column to metadata database, updating the schema * - add missing headerfile OCItemPolicy+OCDataItem.h to target * - OCBookmark: add Favorites capability - OCCapabilities: add support for favorites support capability - OCConnection: update bookmarks if its Favorites capability changed - OCCore+DataSources: - clean up naming - add additional on-demand data sources for "sharedWithMe" OCShares - OCShare: - rename OCShareStateRejected to OCShareStateDeclined to match wording used elsewhere - add OCDataItem + OCDataItemVersioning support - add support for composing FileID in Share Jail from ShareID - OCDataTypes: add Share data type - OCDataSource/Mapped/Composition: add content synchronization support via dispatch groups and different subscriptions types - OCDrive: add MountPoint drive type - libre-graph-api: add new classes and update existing classes via code generation * - OCDataSourceArray: add internal tracking of OCDataItem versions to allow detecting changes to identical objects - OCCore+OCDataSource: take advantage of OCDataSourceArray.trackItemVersions to detect changes to OCShares - OCShare: include cloud share .accepted state into data item version * - address Xcode 14 thread priority inversion warnings at runtime * - OCConnection+Sharing: - add support for drives - add context in which an OCShare was received from the server (shared with me/shared by me) - OCShare: - add .category property and OCShareCategory type - add support for grouping shares - further enhance Drive ID / File ID logic, describe difficulties with the current approach in https://github.com/owncloud/ocis/issues/5355 - OCCore+DataSources: - use the contents of the Shares Jail for "Accepted Shares" instead of the OCShares - implement on-demand data sources for sharedByMeDataSource and sharedByLinkDataSource - return grouped and sorted shares from all OCShare data sources - OCDrive: add root ETag to debug output * - OCCore+DataSources: add .shareJailQueryCustomizer to allow applying filtering and sorting options to the underlying OCQuery for shareWithMeAcceptedDataSource * - upgrade project version to Xcode 14.2 * - add OCClassSettingsFlatSourcePostBuild to allow injection of post-build class settings * - rename OCClassSettingsKeyPostBuildAllowedFlatIdentifiers to OCClassSettingsKeyPostBuildAllowedSettings * - OCDataSourceMapped: fix curiosity crash bug where a weak var is initialized with nil during deallocation * - OCDataSource: - fix auto-completion typo/error that lead to initial updates on subscriptions being ignored and the value of trackDifferences being used instead - fix performIntialUpdate -> performInitialUpdate typo * - fix issue where OC10 accounts showed up empty in the File Provider * - address static analyzer findings (potential crashes and memory leaks) * - OCDrive: change label from Shares jail from "Shares" to "Shared with me" * - OCClassSettingsFlatSourcePostBuild : fix type error leading to a crash * - make OCResourceSourceURLItems and OCResourceRequestURLItem public API * - OCLocation: also transfer .bookmarkUUID when creating a copy of an instance * - OCBookmarkManager: reply on OCBookmark.dataItemVersion to trigger updates to bookmarksDatasource * - OCAuthenticationMethod - broaden API to allow passing options in more methods - add additional option keys to - pass along a Web Finger Account Lookup URL - skip WebDAV-endpoint WWW-Authenticate based tests for authentication method availability (OCAuthenticationMethodSkipWWWAuthenticateChecksKey) - limit which authentication methods are allowed - BasicAuth + OAuth2: add support for OCAuthenticationMethodSkipWWWAuthenticateChecksKey - OIDC:implement alternative logic when OCAuthenticationMethodSkipWWWAuthenticateChecksKey is passed as option - OCConnection - add support for option OCAuthenticationMethodAllowedMethods - add support for WebFinger as status.php alternative during account setup - add support for retrieving available OCServerInstances after authentication via authenticated WebFinger - add support passing back options in the -prepareForSetupWithOptions completionHandler - OCServerInstance - new class to encapsulate server-instance specific information when creating new bookmarks / during account setup - convenience accessor for localized server title based on localized title dictionary retrieved from the server - OCBookmark+ServerInstance: convenience method to apply a server instance's content to an OCBookmark - adapt tests to past bookmark.certificate API changes and recent authentication API changes * - upgrade project from Xcode 13.3 to 14.2 - bring OCConnection+Setup webfinger + authenticated webfinger code in line with enterprise#5579 - send hosts root URL as relation to webfinger in first request - send acct:me@{host} as relation to webfinger in second request - add "Location:" header with URL of server pointing to IdP when requesting /.well-known/openid-configuration - extend and clean up NSURL+OCURLQueryParameterExtensions * - OCConnection+AppProviders: ensure ISO-639-1 (uses only 2 characters) by cutting off any differentiators (f.ex. "en-GB" becomes "en") * - OCBookmarkManager: ensure _bookmarksDatasource is updated after loading bookmarks * - OCExtensionContext: in convenience initializer, create new instance from called class, not OCExtensionContext * - OCConnection: Accept-Language now correctly formats language codes with region/country variant additions, addressing https://github.com/owncloud/ios-app/issues/1193 * - OCConnection: - add and implement new option OCAuthenticationMethodWebFingerAlternativeIDPKey to store and re-use information on an alternative IDP address - use OCAuthenticationMethodWebFingerAlternativeIDPKey with response returned from WebFinger - extend APIs where necessary to properly support OCAuthenticationMethodWebFingerAlternativeIDPKey - OCAuthentictionMethod: - extend APIs where necessary to properly support OCAuthenticationMethodWebFingerAlternativeIDPKey - tolerate lack of user_id in token responses in context of WebFinger account lookup, as user_id may depend on the respective instance the user chooses - OCBookmark: use _lastUsername as a fallback for auth method + auth data derived user_name * - OCConnection+Setup: prevent erroneously triggering connection validation if a server doesn't support webfinger lookup * - OCLocation: add new isDriveRoot property to determine if a location is a drive's root Address https://github.com/owncloud/ios-app/issues/1188 with the following changes: - OCSyncRecord: - add new .removed property to use instead of .recordID when removing a sync record - OCDatabase: change to cache sync records ONLY within the Sync Engine, to avoid any possible concurrency issues - SyncEngine: - make use of OCSyncRecord.removed property - handle exceptions during processing - log sync action and exception in detail - send OCIssue to the UI informing the user - terminate and remove the action from the queue, so they can't disrupt the client further * - OCCore: use vault to resolve identifiers to drives, remove internal _drivesByID variable, which was initialized from the vault, but then not kept up-to-date and caused issues * - OCAuthenticationMethodOpenIDConnect: allow changes to "prompt" via class settings * - NSDate+OCDateParser: add shared ISO8601 date formatters to parse/compose dates issued by/accepted by oCIS sharing - OCConnection+Sharing: adapt date formatting for oCIS - OCCore+DataSources: make OCShares shared by the user available as flat data source and as a data source of grouped OCShares - OCCore+Sharing: fix bug preventing OCShareRoles from being setup - OCRecipientSearchController: make recipients available as data source - OCDataTypes: add item types for OCShareRole and OCIdentity - OCIdentity: make OCDataItem + OCDataVersioning compatible - OCShareRole: make OCDataItem + OCDataVersioning compatible * - OCAppIdentity: add support for FileProviderUIExtension app component - OCCore+DataSources: sort shared-by-me shares by location + recipient * - OCItem: add .parentPath property - OCDatabase: add SQLBuilder support for .parentPath * - OCConnection+Sharing: return a descriptive error when a share create/modify/delete request fails due to a missing internet connection * - OCConnection+Sharing: categorize item, item with reshares and subitems as "Shard By Me" - OCCore+DataSources: add .sharesSortComparator for consistent OCShare sorting - OCCore: remove unneeded item from matchingShareRoleFor: method - OCShareQuery: add dataSource property to allow tracking OCShareQuery results via an OCDataSource * - change wording from "internet connection" to "active connection" * - OCCore+DataSources: neuter sharedWithMeAcceptedDataSource to return only share objects, to allow management in the face of https://github.com/owncloud/ocis/issues/5355 ; preserve working code for another timeline * - OCShare: add "Internal" permission - OCCore+Sharing, OCShareRole: add "Invited persons" role for drive-based servers * - Xcode project: add GitTags and GitBranch info to Info.plist - OCItem.h: add comment for experimental Deniable permission * - OCConnection+Setup: add debug logging and avoid premature deallocation of instance * - OCCore: - add .personalDrive property - add personalDrive.driveID to legacy root locations in OCQuerys when started on a drive-based account - OCCore+Sharing: trigger update polls for accepted and pending cloud shares when accepting a share - OCCore+DataSources: - convert sharedWithMe data source from array to composed data sources - add accepted and pending remote/federated shares to sharedWithMe and derived data sources - OCShare: add .effectiveState to simplify accept/pending/declined handling across federated and local shares - OCShareQuery: make .dataSource track item versions * - OCMacros: add OCLocaliz…
* - reopen develop PR * - OCHostSimulator: add auth-race-condition host simulator, to test handling of race conditions in Authorization * - OCCoreNetworkMonitorSignalProvider: add logging - OCNetworkMonitor: add logging - OCAuthenticationMethodOAuth2/OIDC: no longer treat network errors during token refresh as permanently failed refresh * [feature/openssl-1.1.1] Migration to OpenSSL 1.1.1 (#95) - migrated code to new OpenSSL 1.1.1 API - using OpenSSL package via SwiftPM * - remove OpenSSL 1.0.x includes, build scripts and binaries * - NSError+OCNetworkFailure: add .isNetworkTimeoutError convenience property - NSError+OCError: add new error for request timeouts - OCConnection - make better use of the error parameter in HTTP response handling to actions - increase timeout for COPY requests to 10 minutes - OCSyncActionCopyMove: improve error handling for HTTP timeouts - OCHostSimulator+Builtin: add new "action-timeout-simulator" that responds to action requests with timeout errors * - OCSyncActionCopyMove/Localizable.strings: add missing localizations * - change to keep the PR open * - replace calls of malloc with calloc * - move core.add-accept-language-header class setting from "Privacy" to "Connection" * - OCExtensionManager: - add class settings support including dynamic documentation - allow blocking addition and querying of OCExtensions by identifier * V12.0: Datasources, Spaces / Drives / Graph API support (#92) * - update CONFIGURATION.json with latest changes and additions * - OCClassSettings+Metadata: fix sorting of possible values * - OCHTTP: - clarify and extend redirection policies: - "forbidden" becomes "handle locally" - "validate connection" - triggering the connection validator - becomes the new default - extended redirection support in OCHTTPRequest: - new maximumRedirectionDepth property to indicate maximum number of redirections to follow - new redirectionHistory property keeping track of NSURLs queried as part of redirection handling - OCConnection: - new status validation method +validateStatus:; replace all instances of checks for maintenance mode with it - add Connection Validator that kicks in if a HTTP Request with "ValidateConnection" redirection policy receives a redirection response - demote OCConnectionTransparentTemporaryRedirect option from "advanced" to "debug", turn off by default - OCHostSimulator - move OCHostSimulator+CookieRedirect from ownCloudMocking to ownCloudSDK/OCHostSimulator+BuiltIn - add new "simple-apm" cookie redirection simulating APM Host Simulator Extension and rebuild documentation - OCCore: - enable cookie support by default * - OCAuthenticationMethod: - switch from detection URLs to detection requests - use Detection ID to consolidate requests prior to performing them - authentication methods now perform a PROPFIND rather than a GET request on the WebDAV endpoint - when contacting the bare WebDAV endpoint, the URL is now slash-terminated - Connection Validator - new error code for failed validation - preparations for second stage of validation if first stage fails (but commented out for now as it's not clear that's needed and would complicate the implementation by multiplying the possible outcomes) - code comment describing how the Connection Validator works - handle failed validation like maintenance mode, but with custom error in status line - add "recovering-apm" Host Simulator that makes bogus redirects for the first 30 seconds, then becomes a "simple-apm" that wants to set cookies * - OCConnection: make Connection Validator more thread-safe, add rate limiter to avoid excessive retries * - OCBookmark: - allow setting the internally tracked _lastUsername with new method - OCAuthenticationMethodOAuth2 + OCAuthenticationMethodOpenIDConnect: - add headers to prefill user name where available and supported by the server - comment out support for OAuth2 due to crashes in the web view in Simulator and on device * - OCConnection: - implement Connection Validator II - following the latest flow diagram - update code comments explaining the structure - factor out the Connection Validator to its own method * - OCConnection: Connection Validator cleanup * - OCConnection: Connection Validator comment clarifications * - OCConnection + OCHTTPPipeline: add debug output for cancellation of non-critical requests - OCProcessManager: add additional observation and debug output for tracking app/extension state * - OCClassSettings: add "categoryTag" generation support * - OCHTTP improvements - centralize management of X-Request-ID header in OCHTTPRequest - replace all header field strings with OCHTTPHeaderFieldNames - extended and more uniform log messages to make following a request through the OCHTTPPipeline much easier - move the majority of debug messages to the verbose level - log old and new X-Request-ID when recreating it, to allow connecting the dots - avoid requesting the full header dictionary when just interested in a single one - log type (Bearer, Basic, …) from Authorization header and only replace the actually confidential part with "[redacted]" - add debugging description to OCHTTPRequest - OCHTTP bugfixes - ensure that only one representation (object or data) is kept in an OCHTTPPipelineTask at a time, to avoid inconsistencies - drop request data if requestID is changed - OCLogger - migrate privacy mask and log level to OCClassSetting + observation - fix bug where log level changes didn't propagate across processes - OCClassSettings - fix bugs related to change notifications timing - implement cross-process notifications for user settings - General - move frequently logged debug messages that are very specific and aren't needed 98% of the time to the verbose logging level * - Turn off HTTP request and response logging toggle by default * - OCConnection: - limit connection validation to same host (fixes conflict with redirects / multi-tenancy) - increase security of "allow same host" redirect policy by also requiring same HTTP scheme - OCCore: -trackItemAtPath:trackingHandler: no longer makes multiple nil calls if an item is not found - OCLogger: avoid log.log-enabled-components validation error during logger startup - OCUser: also archive/unarchive _forceIsRemote - project: update env vars to take lack of http request/response logging into account - unit tests: - fix failing tests - tag remaining tests that still fail * - OCLogger: fix recursive possible values assignment for OCClassSettingsMetadataKeyPossibleValues - OCHTTPPipeline: check signal requirements for final requests only if there are any signals actually required by the request - or the handler for the partition the request belongs to is around - OCHostSimulator+BuiltIn: fix incorrect block passing resulting in requestWithCookiesHandler never being called - unit tests: - fix remaining failing tests - comment out deactivated tests * - additional unit test fixes / adaptions to Bitrise performance * OAuth2: - add new method -postProcessAuthenticationDataDict: to condense the stored token response to the needed essentials, saving space and steering clear of issues if the token response contains null values that make secret serialization to property list format fail - factor out access to clientID and clientSecret into methods - make -sendTokenRequestToConnection:… subclass able - improved error handling if property list serialization fails OIDC: - add support for OpenID Connect Dynamic Client Registration - on by default for servers offering the endpoint - including support for expiration, preservation and caching - add additional error code for client registration failure HTTP Pipeline: - factor out User-Agent template composition method to make it available - extend OCHTTPRequest with JSON-specific method to easily instantiate POST requests with JSON payload * Update CONFIGURATION.json with latest OIDC additions * - Authentication: add new OCAuthenticationMethodRequiredUsernameKey option - OAuth2 / OIDC: add support for new OCAuthenticationMethodRequiredUsernameKey option * - OCClassSettings: fix crash that could occur if overrideSettings was mutated while being used * Class Settings cleanup: - remove "connection-" and "log-" in front of class setting names for OCConnection and OCLogger to avoid duplication like "connection.connection-.." - update schemes to use the new names - update CONFIGURATION.json with the changes - replace configuration documentation in CONFIGURATION.md with a reference to the full documentation in the ios-app repository, as reference in CONFIGURATION.md is no longer updated * - OCConnection: add dedicated handling for "403 Forbidden" responses to file download requests (enterprise#4338) - NSError+OCError: add a new OCErrorWithDescriptionFromError macro that allows creating an OCError based on another error with custom description * Add support for certificate comparisons: - OCCertificate+OpenSSL: - add nullability annotations - extend API to compare certificates - OCCertificateDetailsViewNode: - add nullability annotations - add support for different types of changes, supporting old and new values, old and new certificates (for certificate chains) - OCCertificateViewController - add support for certificate comparisons, with a "+/- Show/Hide" toolbar button baked right in - highlight changes with colors and circled +/- signs * OCCertificateViewController: only add "Done" navigation button if root view controller * - provide clearer issue title for certificate changes * OCHTTPPipeline: fix "UNKNOWN TASK" error for auto-resumed downloads/transfers - resumable downloads occur when backgrounding the app - resumable downloads would be rescheduled automatically to complete the download - by rescheduling, the request got a new X-Request-ID, but that one was never used by iOS - when iOS returned the response for the resumed download, it came back with the OLD X-Request-ID, resulting in the Pipeline not being able to recognize the request - result was hung downloads at the pipeline level - fixed: now avoids recreating the X-Request-ID for resumed requests * - OCBookmark: add additional diagnostic action that overwrites the certificate with an empty data blob, prompting a certificate warning dialog on next connect * OpenID Connect: for token refresh, use the client_id and client_secret used at the time the token was registered in the Authorization header, while using the latest registered client_id / client_secret as parameters * ownCloudUI: show "Show ±" only for certificate diffs with actual differences * [feature/mdm+branding] SDK version for MDM+Branding app branch (#78) * - OCConnection+Setup: - remove support for auto-detection of OC installations in "owncloud" subfolder - no longer alert user of root redirects if they happen on the same host with the same scheme (http/https) - OCClassSettings: - add new DictionaryArray and URLString types - add validation support for new types * OCClassSettings+Metadata: - also include registered metadata when determining available keys for a settings identifier * - OIDC Dynamic Client Registration: add support for non-expiring client_id/client_secret pairs via convention * Add 11.5 section to CHANGELOG.md * - OCConnection+Setup: rewrite redirect handling during setup with full duplicate control and permanent removal of support for subfolder installs in `/owncloud/`. * OCConnection: - Connection Validator: infinite loops detection: - increments a counter for the URL whose response triggered a connection validation - decrements the counter when receiving a response from the same URL that no longer would trigger a connection validation (bringing it back to 0, ideally) - if the response to the URL triggered validation more than 3 times, the response is delivered instead of triggering validation - Connection Setup: - count how often an URL was the target of a redirect during setup - if a URL was already targeted more than 0 times (adjustable), declare detection of the server root URL as failed - HTTP Pipeline: - turn certificate missing log message from error into warning, since it is not handled as an error internally, either and can be confusing when debugging * - OCConnection+Setup: only accept redirects with status 301 to other root folders, fail for all others * - OCAuthenticationMethod: add additional userInfo key to redirection errors to indicate from where a redirection started - OCAuthenticationMethodOpenIDConnect: - add redirection detection for .well-known/openid-configuration - improved error handling - OCBookmark+Diagnostics: add "Use Origin URL as URL" action to reset multi-tenancy redirection info in bookmarks - OCConnection: - fix recovery from answered redirection warning issues - add support for redirections to other hosts (previously a hard error) - OCCore: - pick up certificate rejection errors from OCHTTPPolicyBookmark and present them to the user - remove unused attemptConnect method variant - OCHTTPPolicyBookmark: improved description of errors where a certificate was changed but could not be auto-accepted - OCCertificateDetailsViewNode: fix a crasher caused by unconverted object types stored in .previousValue * - Ocean: adapt to SDK API changes, including unit tests - OCConnection: add fallback option to extractBaseURLFromRedirectionTargetURL:… to return redirectionTargetURL in case no common base path could be found - OCAuthenticationMethod: replace local fallback with above fallback * - AuthenticationTests: additional test cases for redirection base discovery * - OCConnection: support for cleaning up additional redirection target format (+ additional unit tests) * Add OCLock set of APIs for expiring, coordinated cross-process locks (+ unit tests) * - OCLock / OCLockManager: make keepAlive more opportunistic to optimize resource usage - OCAuthenticationMethodOAuth2: use OCLock to secure token refreshs and avoid issue (3) reported in ios-app#886 * - OCHTTPStatus: new .name property to quickly get the name of a status - OCHTTPPipeline: new HTSum-tagged brief one-line summary of HTTP requests and responses (to be extended) - OCConnection+Setup: add base URL extraction call to redirection handling for status requests - OCConnection: Connection Validator now also checks for the same port before it starts - NSURL+OCURLNormalization: standardized URL port and scheme/host/port comparison additions, nullability annotations * OCConnection and OCConnection+Setup: change from local comparison of host and scheme to NSURL+OCURLNormalization utility method. * - OCLogger: fix migration of log level + privacy masking (broken following shortening of the identifiers earlier) * - OCLogger: add migration path for user setting "log.log-level" to "log.level" * - improve OCLogger migration code structure * - NSDictionary+OCExpand - NSDictionary category to expand flat keys into hierarchies - implemented unit test in MiscTests - OCClassSettingsFlatSourceManagedConfiguration - add detection of changes pushed via MDM and posting OCClassSettingsManagedSettingsChanged notification - utilize NSDictionary+OCExpand to support simplified notations of MDM configurations * - OCBookmarkManager+ItemResolution: add new method to find the OCBookmark that contains a provided OCLocalID - OCCoreManager+ItemResolution: add new method to request OCCore and OCItem for a provided OCLocalID (build upon OCBookmarkManager+ItemResolution) * - OCCoreManager+ItemResolution: fix nullability annotation * Add unit test for ItemRetrieval method(s). * - OCConnection+Avatars: clarify the method name as it returns data, not the avatar itself - OCResource - initial draft of a universal resource retrieval, caching and version management subsystem - design target is to also support local resource generation (like QuickLook thumbnails) and a unified memory + DB cache across all resource types - start README.md on this subsystem to create documentation about the concepts along the way * - OCResource: add concept of a structure description (lesson from thumbnail caching) * - change to reopen PR * - Class Settings: add additional implementation check for settings snapshot - OCLogger: use all OCClassSettings implementing classes when putting together summary * - NSArray+ObjCRuntime: support additional ways to filter class list - OCClassSettings: add new, optional includeInLogSnapshot method to opt into the log snapshot (part of log intro) - OCClassSettings+Documentation: returning all classes that opted into snapshots via snapshotClasses - OCLogger: use OCClassSettings.snapshotClasses as basis - other classes: use opt-in macro * - OCConnection: update OCConnectionRenewedCertificateAcceptanceRule to allow root certificate change from DST Root CA X3 / R3 to ISRG Root X1 / R3 - add unit tests for LetsEncrypt root certificate change * - OCKeyValueStorage: add APIs for new semantics for shared instances based on URL + identifier and owner - OCVault: uses new shared semantics to create its KVS, to avoid rapid recreation in contexts where OCVault is only used temporarily, to gain access to its KVS * - extend changelog with changes for 11.6.1 * - fix crash that occurred on devices if classes were checked for protocol conformance using a regular method call, which triggered class initialization, which - especially for WebKit classes - led to a crash. - update CONFIGURATION.json with latest changes * - Change to keep PR open * OCCore: add class setting to allow configuration of time interval between end of one scan for changes to the next scan for changes * - OCDAVRawResponse: container for capturing raw WebDAV PROPFIND responses - add update scan timing logging - add support for update scan interval (and disable it for now) - add support for infinite PROPFIND requests, introduce OCPropfindDepth - OCSQLiteDB: add method to queue blocks on the DB thread - OCXMLParser: add support for live processing of parsing results and add further abstraction for error and parse result handling - OCBookmark, OCVault: add methods to prepopulate account databases from infinite PROPFIND responses - various smaller improvements * - OCCore+ItemList: scan for changes no longer uses the background URL session to avoid APM redirect issues * Update CHANGELOG.md for 11.7 * - OCHTTP: add support for streaming responses as NSInputStream (+ prepare for more variants) - OCConnection: add support for streaming PROPFIND responses - OCVault+Prepopulation: add methods for streaming metadata and parsing the stream at the same time - OCBookmark+Prepopulation: add method for streaming prepopulation * - OCCapabilities: prepare support for new "supportsInfinitePropfind" capability - OCHTTPStatus: correct spelling of Method Not Allowedc status code * - add localizable strings for account prepopulation progress messages * - OCClassSettings improvements - extend -keysForClass from documentation to --keysForClass:options: for wider use - settingsSnapshotForClasses now uses -keysForClass:options: instead of trying to compile a definitive list of keys itself - adapt calling code accordingly * - fix DAVRawResponseTests comment error * - support for custom poll interval for changes: - through capabilities: mirroring changes from https://github.com/owncloud/client/pull/8777 - through MDM via `core.scan-for-changes-interval` - in milliseconds - defaulting to 10 seconds - enforcing (and logging a warning) for intervals below a minimum of 5 seconds - logging a warning for intervals greater than 60 seconds * - improved configurable scan for changes poll interval - determine effective poll interval only once / initialized core - limit logging of warnings and errors to once / initialized core - improve wording and verbosity of log messages - clean up code * - rename OCResourceCache to OCResourceStore and add retrieve/store method definiton - fix build errors in OCConnection+Avatars - add OCResourceMetadata type - extend OCResource definition in preparation for storage/retrieval in OCResourceStore - add resources table definition to OCDatabase - outlook: plan is to limit resource subsystem to avatars at first, then eventually migrate thumbnails over * - Browser Session Class: add AWBrowser to simplify configuration for AirWatch browser * - no longer output "computed: '<null>'" entries for class settings in the LogIntro if it is the only entry for that MDM parameter * - OCAuthenticationMethodOAuth2: use UUIDString instead of UUID description for lock name - OCCore+FileProvider: add handling for edge case when the database is not available or not open, preventing a hang - OCCore+ItemList: implement coordinated scan for changes - synchronizes scans for changes across processes - prioritizes scans, giving the app highest and the fileprovider second highest priority - consolidate related log messages under ScanChanges tag (including PollForChanges and UpdateScan) - OCLock: add support for trying to acquire a lock and immediately returning with the result, with a new OCErrorLockInvalidated error code in case the lock couldn't be acquired - OCDatabase: add .isOpened property - OCSQLiteDB: disable statement caching in minimum memory configuration * - change "refresh_token" to "refresh token" in English Localizable.strings. * - OCLocale: modular localization system replacing direct system localization calls - OCLocaleFilter: layers that strings run through during localization to allow transformations - ClassSettings: allows overriding individual strings with replacements provided through a dictionary from class settings - Variables - allows replacing {{variables}} with values, or dynamic content from "variable sources" - shared instance allows addition of sources and changing variables at runtime - provides generally useful variables like app.name - change OCLocalized() set of macros to call OCLocale, not NSLocalizedString/NSBundle directly * - OCLocale: - fix bug when replacing placeholders with sources - add support for passing additional variables via options (+ OCLocalizedFormat macro) * - OCLocaleFilterVariables: add missing "{{" and "}}" in search term for replacements * - OCCapabilities: add support for dav > propfind > depth_infinity capability * - OCItemPolicyProcessorVacuum: fix wrong metadata type for OCClassSettingsKeyItemPolicyVacuumSyncAnchorTTL (bool -> integer) * - update CONFIGURATION.json - OCAuthenticationMethodOAuth2: add support for passing username to OAuth2 page - OCBookmark: add .serverLocationUserName property to aid with server location functionality, including re-authentication - OCClassSettingsFlatSourceEnvironment: add support for JSON dictionary values - OCServerLocator: - extensible layer that allows to locate the target server URL from a username - OCServerLocatorWebFinger: server location using web finger and custom relation http://webfinger.owncloud/rel/server-instance - OCServerLocatorLookupTable: server location using a lookup table and patterns - OCHostSimulator: - add new "web-finger" simulator simulating a webfinger server providing server instance relation information - OCConnection: - add OCConnectionSetupOptionKey type - allow to pass a username to -prepareForSetupWithOptions: via OCConnectionSetupOptionUserName - setup: add support for / integration with OCServerLocator - OCHTTPRequest: - log application/jrd+json bodys in clear text * - OCSQL: - add collation support via new OCSQLiteCollation class, making it as simple as possible to encapsulate and add collations, avoiding string conversions where possible - add collation OCSQLiteCollationLocalized (OCLOCALIZED) for "Finder-like" sorting - OCDatabase+Schema: upgrade schema for metadata to use OCLOCALIZED for item name - OCLogger: fix duplicate use of tags in _OC_RLOG macro * - added authentication-oauth2.oidc-fallback-on-client-registration-failure, defaulting to true, to allow the automatic fallback to default client_id / client_secret if OpenID Connect Dynamic Client Registration fails with any error * OAuth2: - store token expiration timespan - if stored token expiration timespan < (safetyMargin + 20) seconds, no longer preemptively refreshes the token within the safety margin * - reset OCCapabilities to latest version * - add NSError+OCErrorTools with new method to determine if an error is an authentication error - OCConnection+Compatibility: improve error handling, adding handling for "Unauthorised" errors - OCConnection: remove authenticated WebDAV request asking root WebDAV endpoint for D:supported-method-set, instead rely on capabilities to respond with an authentication error if auth credentials are not valid. - AuthenticationTests: adjust for latest changes in OAuth2 and OCConnection connect * - OCBookmark: add first-level support for access to the user.displayName with new property userDisplayName - OCConnection: update .bookmark.userDisplayName (and save it unless it is a working copy with in-memory credentials storage) on every connect, if it was changed - OCBookmarkManager: fix possible deadlock * - Snapshot * - snapshot * - remove unused OCJobID from code * OCCore+CommandLocalModification: no longer handle failure of -startAccessingSecurityScopedResource as an error, as that may indicate the inputFileURL is not actually security scoped, not that the file can't be accessed. Fixes enterprise#4934. * - !! Snapshot !! - overhaul of Resources concept - implementation of OCResourceManager, addition of OCResourceManagerJob - support for automatic (by deallocation) and manual removal and cancellation of OCResourceRequests - add serialization/deserialization support to OCResource - OCHTTP: extend documentation, fix sorting bug, add missing status code description * - milestone: first functioning thumbnail implementation * - Resources: database storage & retrieval of retrieved resources now working - OCBookmarkManager deadlock bugfix * - add OCPlatform - add OCViewProvider + OCViewProviderContext - add OCBookmark.avatar property serialized/deserializing to/from data, utilizing OCViewProvider for maximum flexibility, but ensuring OCBookmark can always be serialized/deserialized even if avatar can't be deserialized - make OCAvatar a subclass of OCImage - cleanup designed OCAvatar usages - making progress, thumbnails and avatars now functional through OCResourceManager * - OCResources - add new OCResourceSourceAvatarPlaceholders - add new OCResourceTextPlaceholder - add per-session and expiry triggers for avatars - add new error code OCErrorResourceDoesNotExist that forces clearing the cache and restart a resource manager job - add missing parts - OCUser: add localizedInitials accessor and class method - OCBookmark: - add .user property with a full copy of the OCUser instance from OCConnection.loggedInUser - provide fallback OCResourceTextPlaceholder for .avatar if none is set - OCBookmarkManager: preserve existing OCBookmark instances on reload whenever possible - OCConnection: keep bookmark.user up-to-date * - OCBookmark: add more details to documentation regarding OCBookmark.userName - OCConnection: build WebDAV root URL using loggedInUser, bookmark.user, only then bookmark.userName, addressing https://github.com/owncloud/enterprise/issues/4924 * - add OCBookmark.user property, storing the last retrieved version of OCConnection.loggedInUser - use OCBookmark.user to compose WebDAV endpoint path (fixing https://github.com/owncloud/enterprise/issues/4924 ) * - OCCoreItemListTask: stop processing if core has shut down in the meantime * - OCDatabase - Schemas: delete existing thumbnails from old thumbnails table - Versions: bump database version number to block repopulation of thumbnails table when using old versions - remove old thumbnails API - OCCore: remove old thumbnails code * - remove unused OCResourceSourceItemIcons * - remove OCResourceSourceItemIcons.h from SDK header * - OCCore: remove thumbnail APIs - OCDatabase: remove thumbnail API - OCItem: remove unused .thumbnail property - OCResourceSourceAvatarPlaceholders: upgrade priority from local fallback to instant - OCResourceManager: detect duplicate resource source additions - OCResourceSourceItemThumbnails: utilize item.thumbnailAvailability information to avoid unnecessary requests * - OCConnection+GraphAPI: start of graph API support - OCConnection: add OCConnectionEndpointIDGraph - OCGraph: - OCGraphContext: context to pass around during graph parsing - OCGraphData+Decoder: decodes graph JSON to graph model objects - OCGraphObject: protocol for graph model classes to follow - ocapigen: YAML parser + code generator with advanced capabilities - no external dependencies - modular design allows implementation of different generators - initial implementation for Objective-C / ownCloudSDK - divides target files into segments, with support for: - locking segments - customizing code generation on a per-segment basis - GraphAPI/GeneratedTypes: initial batch of model headers and implementations, auto-generated by ocapigen * - use more distinct "namespace" prefix for Graph API model classes, switching from OCG to GA * - fix typo in header * - add OCDrive, OCQuota classes - add OCDrive, OCDriveType and OCSeed types - OCItem: add driveID - OCDatabase: - add support for storing, updating, retrieving and deleting OCDrives into a new drives table - add driveID column to metaData / item table - OCConnection+GraphAPI: fully implement drive list retrieval, based on GADrive and OCDrive - OCRecipient: refactor as OCIdentity - NSError+OCError: add new OCErrorGraphError code for packaging graph errors - GAGraphData+Decoder: add NSString -> NSURL conversion, block file URLs - code generator: also create NSSecureCoding en-/decoding code as well as a debug description implementation - OCMacros: add new OCExpandVar macro to make meaningful debug descriptions easier to write * - OCCapabilities: add support for spaces: enabled + version - OCConnection: - turn server version + edition methods into properties - add new options OCConnectionEndpointURLOptionDriveID and OCConnectionOptionDriveID to pass driveID to endpoint and retrieveItems APIs - adopt new driveID options in almost all WebDAV-related methods - DirectURL: adopt new driveID option - Compatibility: add central drive switch .useDriveAPI - Tools: add support for DriveID-dependant WebDAV endpoint URL - OData: - new generalized support for requesting OData objects (and later to also create, update and delete them) - add stubs for a filter string builder for OCQueryCondition - GraphAPI: add methods to retrieve drive list and (cached) drives, use new OData APIs - GraphAPI: fix issue decoding dates without fractional seconds - OCHTTPDAVRequest: add driveID option to parsing - OCLocation: new type that encapsulates bookmarkUUID, driveID and path - OCItem: add .location property - OCMacros: generalized macros to wrap/unwrap nil values into NSNull objects - OCDatabase: add API to remove items for a particular driveID - OCVault: - add drive related methods to erase local copies for a particular drive - add method to retrieve the root URL for files of a particular driveID - adapt existing methods to take an item's .driveID into account * - add OCLocation comparison support + building tools - change APIs and internal structures to use OCLocations instead of OCPaths - adopt OCDriveID and OCLocation throughout core SDK types like OCShare, OCItem and more - fix comparison with NULL values in generated SQLite WHERE clauses - extend OCCoreItemList with drive selection * - use GADrive instead of GDrive in OCDrive API name - update types from latest yaml, add some "locked" parts in the headers that would otherwise be overwritten - ocapigen: alphabetically sort forward declared types and includes so they don't change order and cause unnecessary changes * - OCItem: add driveID to debug description - OCDrive: - add isSubstantiallyDifferentFrom method to quickly determine if the drive description itself has changed in a substantial way (f.ex. id, type, name, davRootURL) - add rootLocation property returning the root folder (/) location - OCDatabase: - add drive "seed" column - OCCore: - replace polling of webDAV root for eTag changes with polling of drive list (+ eTag comparison) - OCCore+CommandLocalImport: include driveID into placeholderItem - OCSyncActionCopyMove: include driveID into placeholderItem - OCSyncActionCreateFolder: include driveID into placeholderItem - OCBookmark: add bookmark-capabilities support, feature flags that can be set, queried and removed - OCConnection+GraphAPI: update .drives list every time a new, valid list is retrieved via -retrieveDriveListWithCompletionHandler: - OCConnection+Compatibility: use bookmark capability OCBookmarkCapabilityDrives to determine .useDriveAPI property value - OCConnection: set drives capability in bookmark during connect - GADrive: change eTag from NSString to OCFileETag * - update GA classes from latest libre-graph * - OCDatabase: fix duplicate/multiple drive entries in OCDatabase - OCDrive: add .rootETag property to return root eTag (both for flexibility and convenience) - OCCore: use .rootETag from drives to trigger PROPFINDs on root folders of the spaces, including database-persistance (!) - OCSQLiteQuery: add support for INSERT OR REPLACE query construction - GADriveItem: use OCFileETag for .eTag rather than NSString directly * - initial Data Sources implementation, including initial set of unit tests - OCCore+ItemList: do not request updates from drives that do not have an ETag (assume a temporary malfunction) - fix unit tests compilation errors: convert from OCPath-based APIs to OCLocation * - NSArray+OCFiltering: utility category to filter arrays efficiently using a block - Data Sources progress - CONCEPT.md: gives an overview over the thinking and structure behind data sources - OCCore+DataSources: APIs for core-provided data sources - OCDataItemPresentable: new container class storing an intermediate, presentable representation of an item - OCDataRenderer: - added "path finder" for auto-assembly of converters from one object type to another, using the smallest number of steps - added unit tests for path finding algorithm - OCDataSourceArray: implementation - OCDataSource: refine subscription API - OCDataSourceSubscription: add setNeedsUpdateHandling change aggregation pattern, allowing users to provide a dispatch queue to perform the change notification on - OCDrive: - add OCDataItem and OCDataItemVersion suopport - add converter to OCDataItemPresentable * - OCDataItemCellConfiguration: helper class that allows to temporarily attach additional information alongside OCDataItemReferences, where it can't be passed otherwise - OCDataSource: add UUID property * - OCDataItemCellConfiguration: add hostViewController property * - remove OCDataCellConfiguration (replaced by CollectionViewCellConfiguration in ownCloudAppShared) * - NSArray+OCFiltering: helper methods to quickly filter and find objects in arrays - OCDataTypes: add types for filter and sort comparators on OCDataSourceItemReferences and OCDataItemRecords - OCDataSourceArray: use same object for @synchronized internal state modification as OCDataSource - OCDataSourceComposition: - new data source type that composes its content from one or more other OCDataSources - supports filtering and sorting - of every contributing data source individually - of the item set composed from all data sources - GraphAPI type updates * - OCResource - new request OCResourceRequestDriveItem and source OCResourceSourceDriveItems for DriveItems (from spaces) - new resource type: OCResourceTypeDriveItem - new resource: OCResourceText to store textual resources - OCData - OCDataItemPresentable: add intermediate resources retrieval support (subject to change) - OCDrive: - add support for providing OCDataItemPresentable resources for cover image and readme - add support for space description ("subtitle" in web UI) - add type for drive aliases - Graph API - GADrive: add method to retrieve special items - GARemoteItem: use eTag type - GASpecialFolder: add GASpecialFolderName type and add GASpecialFolderNameReadme and GASpecialFolderNameImage * - OCConnection+Avatars: use parsed content type - OCConnection: remove .supportsPreviewAPI and support for thumbnail API - OCCore+DataSources: clarify the data sources are read-only - OCDataItemPresentable: change API to return requests to resources, rather than the resource themselves - OCDrive: adapt to OCDataItemPresentable changes * - OCItemVersionSeed: new value to allow quick detection of changes in items - OCItem: add new versionSeed property and associated methods to update the seed - OCCore: add support for updating versionSeed when changes occur - OCItem+OCDataItem: make OCItem comply to OCDataItem and OCDataItemVersion (the latter using the new version seed) - OCHTTPResponse: extend support for encoding-sensitive conversion of body data to NSStrings, with explicit fallback encoding - OCResourceSourceDriveItems: make text resource encoding sensitive - OCResourceText: make compliant to OCDataItem and OCDataItemVersion - OCDrive: include readme and image in significant update detection, add support for subtitles/descriptions - GAGraphData+Decoder: add support for unescaped URLs (https://github.com/owncloud/ocis/issues/3538) - OCLocation: add .lastPathComponent utility property - OCViewProviderContext: add initializer and context key for content mode - OCQuery: add .queryResultsDataSource property providing an OCDataSource tracking the query's results (leaving room for future performance improvements) * - OCConnection: only accept images in return to thumbnail requests (working around https://github.com/owncloud/ocis/issues/3558) - OCCore: include virtual drives in hierarchicDrivesTopLevelItems - OCResource subsystem: - fix bug that prevented retrieval of resources other than item thumbnail and avatars from cache - fix bug that could mix resources of different types that shared the same ID * - OCConnection: - add virtual preview API endpoint - remove legacy thumbnail endpoint support - OCImage: fix logical error that led to wrong/inferior resolutions being picked - GAGraphContext: comment out designed methods for now, to avoid warnings * - add enum annotations for Swift 5 * - additional Swift 5 enum adaptions - OCConnection: return new OCErrorMissingDriveID + log a warning when a command without drive ID is attempted on a drive-based account * - new class: OCVaultLocation - provides an abstract description of an item's location in a vault - can en- and decode OCVFSItemIDs - OCVault - add support to map OCVaultLocations to NSURLs - and back - add additional class methods to retrieve specific container root URLs - add filesystem layout overview to header file - OCVFS (WIP) - virtual file system implementation - supports virtual folders and mapping OCQuerys and OCLocations via OCVFSNodes - returns OCVFSContent to describe contents of a folder * - OCItem: add .customIdentifier1 and .customIdentifier2 to temporarily store two references/IDs that aren't serialized - OCVault: fix URL <-> OCVFSItemID conversion bugs - OCVFS: make advances in implementation to drive a first File Provider implementation * - OCVault: - add APIs to store, retrieve and track drives, including in a new detached state (for drives that were removed on the server) - add support for OCVFS ID conversion hooks - change File Provider signaling to adopt OCVFSItemID - add isVirtual flag to OCVaultLocation to allow referencing a drive root mapping to an OCVFSNode - OCVFS - refine ID addressing scheme and implement support for it across OCVaultLocation and OCVFS - specify the OCVFSItem protocol and implement it for OCItem and OCVFSNode - differentiate auto-updating and self-updating OCVFSContent via .isSnapshot property - add methods to OCVFSCore to replace all nodes and request a drive root based on its OCLocation - OCDrive: add properties for detached state tracking, make value comparisons in isSubstantiallyDifferentFrom nil-aware - OCItem: replace customIdentifier1/2 with non-serialized .bookmarkUUID property - OCDatabase: remove support and schema for drives table- NSArray+OCMapping: utility category that adds methods to transform arrays into sets and dictionaries - OCCore+ItemList: switch to vault as source for drives to scan periodically - OCCore: clean up drive APIs, make them pass through to OCVault - OCConnection+Compatibility: add workaround for broken legacy version in ocis beta/nightly - OCDataSourceKVO: new data source class that is updated via KVO observation of another object, with immediate filtering/conversion capabilities. Supports both regular data items and versioned data items. * - ocapigen: - add support for primitive item types (=> i.e. strings) to resolve warnings and properly dearchive all properties - fix occurrences of "NSArray.class.class" - update GA types with fixes by running the generator against the latest yaml file - OCVault.h: add info on subfolder used by TUS uploads * - OCItem: add OCItemPropertyNameDriveID to allow custom queries targeting specific drives - OCDatabase: add mapping for OCItemPropertyNameDriveID to driveID database column - OCCore: add support for drive IDs to -[OCCore trackItemAtLocation:…] - OCDrive: - turn OCDriveType into a string enum - add .isDeactivated property - GADeleted: add type GADeletedState for .state - OCHTTPRequest: add size of URL-based request body to debug output * - OCAction: simple encapsulation class for actions that can originate from anywhere (SDK, app, …) - OCDataTypes: add types for Message (TBD) and Action - OCDataSource: add OCDataSourceState type as a simple way to convey the status of the underlying mechanism of a data source - OCQuery: update .queryResultsDataSource.state from OCQuery.state * - OCAction: extend with identifier, version and type (regular/destructive) properties for a richer representation and more flexibility to control updates - OCAuthenticationMethod: add convenience class method localizedNameForAuthenticationMethodIdentifier to return the name of an authentication method - OCAuthenticationMethodOpenIDConnect: add "select_account" to prompt to ensure the account switcher is shown for users that are already logged in - Data sources: - rename OCDataItemVersion protocol to OCDataItemVersioning since Swift can't tell the protocol and the type apart otherwise - add new OCDataItemTypeView for views - add ordering detection to OCDataSourceSubscription and report it as change as well * - OCLocation: add simple en-/decoding to/from data and UTI data type ID - OCQuery: fix typo in .rootItem description * - OCDataSourceComposition - new methods to add, insert and remove sources dynamically - new method to include/exclude added sources * - OCDataSourceComposition: efficiency change: only update composition if include status of a source actually changed * - NSArray+OCMapping: add method -arrayUsingMapper: - NSDate+OCDateParser: add method -localizedStringWithTemplate:locale: for flexible localized date representations - OCQueryCondition: add userInfo property to support adding additional meta data (such as by the ownCloudApp framework for UI purposes) * Add app provider support - OCAppProvider: encapsulates URLs, retrieved raw app lists, parsed apps and file types - OCAppProviderApp: encapsulates apps and provides metadata, including the icon as URLItem resource - OCAppProviderFileType: encapsulates file types and provides metadata, including the icon as URLItem resource - OCCapabilities: support for on-demand parsing of app_providers into OCAppProvider instances, convenience access to latest supported app provider version - OCConnection: - support for the new app provider endpoints in the endpoint API - new methods to retrieve app list, create new documents and open documents in web apps - OCCore: new KVO-observable, managed .appProvider property for convenience access to the latest supported app provider New URLItem resource type: - intended for caching remote, URL-based resources with variable caching intervals Miscellaneous improvements: - new OCMIMEType and OCFileExtension types - fix DataSourceTests - add ocis target to OCTestTarget and stub app provider endpoint test (needs server support to fully implement) * - OCHTTPDAVRequest: implement support for "Prefer: return=minimal" to take advantage of https://github.com/cs3org/reva/pull/3222 - OCItem+OCTypeAlias: add support for (MIME) type aliases directly into the SDK - new OCTypeAlias type - new methods for conversion from OCMIMEType to OCTypeAlias - new OCItemPropertyNameTypeAlias and support in the SQL Builder - add new typeAlias column to metadata, implement v16 of the metaData table schema and an efficient migration with progress reporting - OCSQLiteDB: add -dropTableSchemas method to release table schemas when they are no longer needed, allowing to free memory held by migration blocks in the schemas, take advantage in OCDatabase * - OCConnection: add support for "open" app providers endpoint - OCAppProviderApp: add type to support app provider view mode (view, read, write) - OCConnection+AppProviders: add support for "open" endpoint, with mode support and returning a ready-to-use URL request - NSError+OCISError: add support for parsing `{ code: "…", message: "…" }`-style ocis errors into NSError objects - NSError+OCError: add new error codes to support NSError+OCISError - NSDictionary+OCFormEncoding: factor out code to encode a dictionary of parameters as a PUT/POST body data * - OCSyncActionDelete: fix potential crash bug * - add new OCDataItemTypeSavedSearch data type * - OCCore - add new data source .subscribedDrivesDataSource for subscribed drives - add support for deactivated drives - do not return a drive as subscribed when it was deactivated on the server - automatically reload custom queries if the list of subscribed drives changes - mark items of detached drives as deleted, change their detachedStatus from .new to .itemsRemoved - OCDrive: better documentation of OCDriveDetachedStates and additional state OCDriveDetachedStateItemsRemoved - OCMacros: add OCWaitOnCompletion to execute a block on completion of the OCWait - OCDatabase: add methods to remove (mark as deleted) or purge (actually remove) the cache items for a whole drive - OCVault: - add two new internal notifications for when the subscribed and detached drive lists change respectively - add new wipe mechanism - has wipeContainer locations inside .rootURL and .filesRootURL - fs items (files/folders) to be wiped are moved into these folders, then removed - all items inside wipeContainers are removed eventually (f.ex. on opening a bookmark, the app, etc.) - new method to erase a drive (both files + from cache in DB) * - OCVault: improve error handling and fileop debug logging * - fix wrong type warning in implementation * - update GraphAPI to libre-grap-api v0.17.0 * - OCDrive: no longer pass through space type as presentable subtitle, only actual drive descriptions - OCLogger: add new "replace-newline" option that replaces newlines with "\n" by default, disable (then unneeded) "single-lined" by default * - OCHTTP: add support for 425 status - OCItem: - add parsing support for 425 status multi-responses - add OCItemState signalling 425 status as .serverSideProcessing * - OCHTTPStatus: add textual representation for 425 status * - OCConnection+AppProviders: fix error pass through from HTTP to completion handler * - OCCore+ItemList: add missing error handling when retrieving drive list; drives now no longer vanish when connections fail or are note possible * - OCCore+ItemList: recognize OCItem.state changes as relevant change for updating the item and its versionSeed * - add all missing German translations in Localizable.strings * - OCConnection+Download: add error code + error message for files returning 425 on download * - add missing localization of string "Retry" * - OCCore+SyncEngine: avoid publishing the same sync activity twice * - OCCore+ItemList: - FIX: add .previousPath to renamed items where that info was previously missing - FIX: ensure that recomposed paths after a move end in a "/" for folders - OCCore+ItemUpdates: update OCQuery.queryLocation when the observed location is moved * - OCVFSCore: guard nodes against enumeration during mutation (which could cause crashes) * - OCCapabilities: add convenience accessor .federatedSharingSupported with temporary workaround for https://github.com/owncloud/ocis/issues/4788 - OCCore+Sharing: update share queries also in case of errors - NSError+OCHTTPStatus: add method to quickly check if an error is a HTTP status code - OCImage: use QOS_CLASS_DEFAULT instead of QOS_CLASS_USER_INITIATED * - fix Xcode 14 warnings * - OCShareRole: encapsulates information on sharing roles for display - OCCore: add new APIs to retrieve available sharing roles for a location, as well as identify the one matching an OCShare - OCSymbol: OCSymbolName type and class for accessing SF Symbols, adding an abstraction layer that simplifies access and allows centralized customization down the road - OCLocation: new OCLocationType, also usable as mask, for file, folder, drive and account - OCShare: - migrate from OCItemType to OCLocationType - add conversion for OCShareType<->OCShareTypesMask - XML parsing support for extracting drive ID information to form a complete OCLocation * - OCStatistic: - new class to provide structured statistical data from the SDK to clients like the app - implements OCDataItem and OCDataItemVersioning, so could also be used in data sources as items in the future - OCDataSource: - change implementation of .specialItemReferences to .specialItems, allowing to directly pass OCDataItems from source to subscribers - add new OCDataSourceSpecialItemFolderStatistics - OCDrive: change type of .quota to GAQuota - OCQuota: add missing OCQuotaState labels - OCQuery: add .queryResultsDataSourceIncludesStatistics to request that statistics be provided through the query's data source * - OCDrive: implement .name override for "Personal" and "Shares" spaces * - OCSyncActionCopyMove: prevent copying and moving of items into themselves * - OCConnection+AppProviders: add OCConnection.staticHeaderFields to the header fields used in the initial request when opening a web app in-app (typically adding "Accept-Language" to that request) - OCConnection + OCHTTPRequest: use header field data type rather than different NSDictionary types * - OCDrive: - add new property "specialType" to easily determine if the drive is the personal or shares jail space - or a regular project space - detect shares jail not by "virtual" type but by UUID - adapt .name to use .specialType to return hardcoded names * - OCLocale+SystemLanguage: new category providing the "Accept-Language" string as well as the primary language of the user - OCCore: replace local code with OCLocale+SystemLanguage to fill Accept Language static header field - OCConnection+AppProviders: add "lang=" parameter if the primaryUserLanguage can be determined. Fixes the issue that the UI of web apps was always presented in English, irrespective of the user's system language. * - OCConnection+AppProviders: return tailored error message and OCError code for 425 responses to open-web and open endpoint requests * - NSError+OCISError: add support for code TOO_EARLY - OCConnection+AppProvider: hardcode to always use the SDK's own 425 error rather than the error that may be returned from the server as JSON (=> which would not be localized) * - Data Sources: - Types: add new item types for OCBookmark and OCLocation - Presentable: add .image property for easier rendering of small images (f.ex. for a toolbar) - OCDataSourceArray: provide convenience initializer method to pass content at initialization - OCDataSourceMapped: new kind of data sources that allows to map an input data source's items to any kind of items that are dynamically created, updated and removed to match the contents of the source datasource - OCAuthenticationBrowserSessionCustomScheme: move workaround to open URLs from extensions to class-level method to make it generally available - OCLocation: adopt OCDataItem + OCDataItemVersioning - OCBookmark: adopt OCDataItem + OCDataItemVersioning - OCBookmarkManager: provide a data source with the bookmarks - OCAsyncSequentialQueue: add convenience initializer allowing to pass a dispatch queue to create an executor from * - OCDataSource: - make OCDataSourceKVO available outside the SDK - call -terminateSubscription for all active subscriptions on deallocation - OCQuery: change signal for setting data source state to Loading or Idle so empty folders no longer indicate Loading forever - replace calls to [UIImage systemImageNamed:] with OCSymbol calls * - OCAction: add support and a property for ActionProperties, clarify OCActionOption as OCActionRunOption - OCDataSource: add method to signal updated items by reference efficiently * - GAGroup: update to libre-graph-api spec v1.0.0 * - OCAction: new type .warning and closed extensibility attribute - OCResourceManager: add support for status 425 (log and return error) - OCDataSourceMapped: support changing source and, by setting it to nil, calling the destroyer on all mapped items * - OCConnection: add support for cross-space COPYs - OCCore: - add new async API to retrieve the cached item for an OCLoation - enrich OCLocation with .bookmarkUUID in more places - OCUser: crash fix and fallback algorithm if the OS does not return initials for a name - OCItem: return bookmarkUUID as part of the .location - OCLocation: relax equal comparison: if the driveID is identical, but only one of the OCLocations has a bookmarkUUID, assume it is the same - OCCertificateStore: store for certificates, preparing for future usage by OCBookmark * - OCCertificateStore: complete implementation - OCBookmark: - replace plain certificate property with OCCertificateStore and build migration path from existing bookmarks - add diagnostics support for multiple certificates - add new .primaryCertificate property that returns the certificate matching the bookmark's hostname - or - the only certificate in the store if there is only one - OCConnection: adapt bookmark building to use OCCertificateStore - OCHTTPPolicyBookmark: - add support for handling certificates for multiple hostnames using a bookmark's Certificate Store - implement option connection.associated-certificates-tracking-rule to opt-in certificates other than the server's main certificate into change tracking/recognition - OCHTTPRequest: add property .hostname for quick access to .effectiveURL/.url hostname * - OCDataSourceMapped: fix subscription leak on deallocation - OCDataSource: add new subscription observer API allowing to dynamically start/stop updating content when there is or isn't demand * - OCCore+DataSources: - make names of existing data sources clearer - add new data sources for: favorite, available offline item policies, available offline files - implement dynamic polling logic (currently used for favorites) - prepare for additional data sources for different sharing aspects - OCItemPolicy: - add UUID with fallbacks - implement OCDataItem + OCDataItemVersioning support, including a small converter to OCDataItemTypePresentable - use .locationString instead of .path in conditions for collections - OCItemPolicyProcessorAvailableOffline: add support for drives/spaces - OCDataTypes: add ItemPolicy type - OCItem: add .locationString property - OCDatabase: add new locationString column to metadata database, updating the schema * - add missing headerfile OCItemPolicy+OCDataItem.h to target * - OCBookmark: add Favorites capability - OCCapabilities: add support for favorites support capability - OCConnection: update bookmarks if its Favorites capability changed - OCCore+DataSources: - clean up naming - add additional on-demand data sources for "sharedWithMe" OCShares - OCShare: - rename OCShareStateRejected to OCShareStateDeclined to match wording used elsewhere - add OCDataItem + OCDataItemVersioning support - add support for composing FileID in Share Jail from ShareID - OCDataTypes: add Share data type - OCDataSource/Mapped/Composition: add content synchronization support via dispatch groups and different subscriptions types - OCDrive: add MountPoint drive type - libre-graph-api: add new classes and update existing classes via code generation * - OCDataSourceArray: add internal tracking of OCDataItem versions to allow detecting changes to identical objects - OCCore+OCDataSource: take advantage of OCDataSourceArray.trackItemVersions to detect changes to OCShares - OCShare: include cloud share .accepted state into data item version * - address Xcode 14 thread priority inversion warnings at runtime * - OCConnection+Sharing: - add support for drives - add context in which an OCShare was received from the server (shared with me/shared by me) - OCShare: - add .category property and OCShareCategory type - add support for grouping shares - further enhance Drive ID / File ID logic, describe difficulties with the current approach in https://github.com/owncloud/ocis/issues/5355 - OCCore+DataSources: - use the contents of the Shares Jail for "Accepted Shares" instead of the OCShares - implement on-demand data sources for sharedByMeDataSource and sharedByLinkDataSource - return grouped and sorted shares from all OCShare data sources - OCDrive: add root ETag to debug output * - OCCore+DataSources: add .shareJailQueryCustomizer to allow applying filtering and sorting options to the underlying OCQuery for shareWithMeAcceptedDataSource * - upgrade project version to Xcode 14.2 * - add OCClassSettingsFlatSourcePostBuild to allow injection of post-build class settings * - rename OCClassSettingsKeyPostBuildAllowedFlatIdentifiers to OCClassSettingsKeyPostBuildAllowedSettings * - OCDataSourceMapped: fix curiosity crash bug where a weak var is initialized with nil during deallocation * - OCDataSource: - fix auto-completion typo/error that lead to initial updates on subscriptions being ignored and the value of trackDifferences being used instead - fix performIntialUpdate -> performInitialUpdate typo * - fix issue where OC10 accounts showed up empty in the File Provider * - address static analyzer findings (potential crashes and memory leaks) * - OCDrive: change label from Shares jail from "Shares" to "Shared with me" * - OCClassSettingsFlatSourcePostBuild : fix type error leading to a crash * - make OCResourceSourceURLItems and OCResourceRequestURLItem public API * - OCLocation: also transfer .bookmarkUUID when creating a copy of an instance * - OCBookmarkManager: reply on OCBookmark.dataItemVersion to trigger updates to bookmarksDatasource * - OCAuthenticationMethod - broaden API to allow passing options in more methods - add additional option keys to - pass along a Web Finger Account Lookup URL - skip WebDAV-endpoint WWW-Authenticate based tests for authentication method availability (OCAuthenticationMethodSkipWWWAuthenticateChecksKey) - limit which authentication methods are allowed - BasicAuth + OAuth2: add support for OCAuthenticationMethodSkipWWWAuthenticateChecksKey - OIDC:implement alternative logic when OCAuthenticationMethodSkipWWWAuthenticateChecksKey is passed as option - OCConnection - add support for option OCAuthenticationMethodAllowedMethods - add support for WebFinger as status.php alternative during account setup - add support for retrieving available OCServerInstances after authentication via authenticated WebFinger - add support passing back options in the -prepareForSetupWithOptions completionHandler - OCServerInstance - new class to encapsulate server-instance specific information when creating new bookmarks / during account setup - convenience accessor for localized server title based on localized title dictionary retrieved from the server - OCBookmark+ServerInstance: convenience method to apply a server instance's content to an OCBookmark - adapt tests to past bookmark.certificate API changes and recent authentication API changes * - upgrade project from Xcode 13.3 to 14.2 - bring OCConnection+Setup webfinger + authenticated webfinger code in line with enterprise#5579 - send hosts root URL as relation to webfinger in first request - send acct:me@{host} as relation to webfinger in second request - add "Location:" header with URL of server pointing to IdP when requesting /.well-known/openid-configuration - extend and clean up NSURL+OCURLQueryParameterExtensions * - OCConnection+AppProviders: ensure ISO-639-1 (uses only 2 characters) by cutting off any differentiators (f.ex. "en-GB" becomes "en") * - OCBookmarkManager: ensure _bookmarksDatasource is updated after loading bookmarks * - OCExtensionContext: in convenience initializer, create new instance from called class, not OCExtensionContext * - OCConnection: Accept-Language now correctly formats language codes with region/country variant additions, addressing https://github.com/owncloud/ios-app/issues/1193 * - OCConnection: - add and implement new option OCAuthenticationMethodWebFingerAlternativeIDPKey to store and re-use information on an alternative IDP address - use OCAuthenticationMethodWebFingerAlternativeIDPKey with response returned from WebFinger - extend APIs where necessary to properly support OCAuthenticationMethodWebFingerAlternativeIDPKey - OCAuthentictionMethod: - extend APIs where necessary to properly support OCAuthenticationMethodWebFingerAlternativeIDPKey - tolerate lack of user_id in token responses in context of WebFinger account lookup, as user_id may depend on the respective instance the user chooses - OCBookmark: use _lastUsername as a fallback for auth method + auth data derived user_name * - OCConnection+Setup: prevent erroneously triggering connection validation if a server doesn't support webfinger lookup * - OCLocation: add new isDriveRoot property to determine if a location is a drive's root Address https://github.com/owncloud/ios-app/issues/1188 with the following changes: - OCSyncRecord: - add new .removed property to use instead of .recordID when removing a sync record - OCDatabase: change to cache sync records ONLY within the Sync Engine, to avoid any possible concurrency issues - SyncEngine: - make use of OCSyncRecord.removed property - handle exceptions during processing - log sync action and exception in detail - send OCIssue to the UI informing the user - terminate and remove the action from the queue, so they can't disrupt the client further * - OCCore: use vault to resolve identifiers to drives, remove internal _drivesByID variable, which was initialized from the vault, but then not kept up-to-date and caused issues * - OCAuthenticationMethodOpenIDConnect: allow changes to "prompt" via class settings * - NSDate+OCDateParser: add shared ISO8601 date formatters to parse/compose dates issued by/accepted by oCIS sharing - OCConnection+Sharing: adapt date formatting for oCIS - OCCore+DataSources: make OCShares shared by the user available as flat data source and as a data source of grouped OCShares - OCCore+Sharing: fix bug preventing OCShareRoles from being setup - OCRecipientSearchController: make recipients available as data source - OCDataTypes: add item types for OCShareRole and OCIdentity - OCIdentity: make OCDataItem + OCDataVersioning compatible - OCShareRole: make OCDataItem + OCDataVersioning compatible * - OCAppIdentity: add support for FileProviderUIExtension app component - OCCore+DataSources: sort shared-by-me shares by location + recipient * - OCItem: add .parentPath property - OCDatabase: add SQLBuilder support for .parentPath * - OCConnection+Sharing: return a descriptive error when a share create/modify/delete request fails due to a missing internet connection * - OCConnection+Sharing: categorize item, item with reshares and subitems as "Shard By Me" - OCCore+DataSources: a…
Description
This SDK branch adds support for new class settings types needed in the respective
ios-app
branch of the same name.Types of changes