⚝
One Hat Cyber Team
⚝
Your IP:
216.73.217.4
Server IP:
41.128.143.86
Server:
Linux host.raqmix.cloud 6.8.0-1025-azure #30~22.04.1-Ubuntu SMP Wed Mar 12 15:28:20 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.3.23
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
psa-pear
/
pear
/
docs
/
Horde_ActiveSync
/
Edit File: TODO
TODO ===== - Email recurrence related properties for recurring meeting requests. - SCHEMA support in ITEMOPERATIONS requests. Don't have client that supports currently. - Implement some sort of issue tracking/counting to prevent loops due to things like clients not supporting standard status codes, like FOLDERSYNC_REQUIRED. Send the error code up to a maximum number of times, and after that send a server 500-ish error code indicating the client should stop trying. Probably store data in device object, but need to figure out how to prevent race conditions since multiple requests can be in progress. Perhaps some sort of shared memory cache? - Perhaps if we use a shared memory solution, we can also possibly create some sort of top-like application to monitor EAS usage. Make it easier to find troublesome devices etc.... - Work out / more fully test Task recurrence. Especially completion of a single instance using DEADRECUR etc... (most work is in Nag, but put here to keep sync todos together). - Add support for throttling via HTTP 503 and the X-MS-Throttle header. (See https://docs.microsoft.com/en-us/previous-versions/office/developer/exchange-server-interoperability-guidance/jj899829(v%3dexchg.140)) BC BREAKING (i.e., Horde 6). ============================ - Move all non-specific constants to single class. - Clean up the various foldertype constant messes. I.e., probably store the Horde_ActiveSync::FOLDER_TYPE_* and Horde_ActiveSync::CLASS_* values in the saved state instead of having to switch between them in various places. (Some client commands are sent using the CLASS, some using the FOLDER_TYPE). - Clean up and refactor the folder creation/editing/deleting methods in the backend. They need to be normalized in accepting/returning the same objects now that we support multiple folders per non-email collection. - Refactor Horde_ActiveSync_State_*::listDevices() to return a Horde_ActiveSync_Device object instead of a hash keyed by backend field names and to take the object property names as filters instead of backend field names. - Clean up logger creation/setting/log_level setting and provide a single access point for the logger instead of injecting it everywhere. Possibly implement Horde_ActiveSync_Debug to handle all logging duties. - Refactor out the need for the various static ::_* properties in the main ActiveSync class. - Change the readable names of the WBXML tags to reflect what they are called in the MS-AS* documents, and not what Z-Push's developers decided to call them. - Look at extracting something like Request_Parser and Request_Handler classes to separate the reading of the request from the handling of it. The parser should return some standard request object that can be passed to the handler that contains the pertinent information. Use temporary streams to hold any incoming message data to preserve the low memory footprint from dealing with changes as we read them. - Consolidate folderUid <-> backend id mapping methods into a single place. Currently they live in both the collection handler and the backend driver. - Maintain the serverid -> backendid map in a single place and stop storing backend ids (i.e., IMAP folder names) in collection/state/folder cache etc... Also, standardize on using the serverid value everwhere within H_AS code. backendid should be just that - only used when communicating with the backend. - Possibly move the syncCache and state into the device object so we have a single object to pass around that has access to all. - Extract a basic Horde_ActiveSync_Storage class? At the very least we need to rename the current Horde_ActiveSync_State_* classes to Horde_ActiveSync_Storage since they now deal with more than device state. - Implmement Horde_ActiveSync_HttpRequest object and remove dependency on Horde_Controller. We only use the Horde_Controller_Request_Http object from that package. - Implmement A Horde_ActiveSync_Response object and move functionality currently living in the RPC layer (sending back certain headers, etc...) into this class. - Implement a Horde_ActiveSync_Change_Filter class/interface. Used to implement workarounds for broken clients. E.g., filter out the ADD commands sent in response to MOVEITEMS for Outlook clients. Use a similar pattern for other types of broken client behavior. - No longer ignore SMS synchronization in the library, but pass it up to the backend and the let the backend decide what to do with it. Since the SMS ability of EAS uses the device to actually send the SMS, I could foresee some added ability in IMP, or maybe a separate app, that allows managing this. - Break up Horde_ActiveSync_Driver::getMessage(). Add _getCalendarMessage() etc... and move base logic for calling the correct method into the base class. - Decouple the codepage definitions from the Encoder/Decoder class. Break them out into individual classes. - Pass the Horde_ActiveSync::FILTERTYPE_ constant directly to the driver, and let the driver calculate the needed time slice if needed. Needed to correctly deal with Horde_ActiveSync::FILTERTYPE_INCOMPLETETASKS. - Introduce some sort of filter or similar data in the definitions of the wbxml fields to allow for things like specifying the maximum size of a field allowed. - Move Horde_Core_ActiveSync_Mail into the Horde_ActiveSync library. Horde_ActiveSync_Mailer (?). This is functionality that should be provided out of the box from the library. Need to figure out the best way to inject the Horde specific things, like the actual mailer and identity data. - Implement something like Horde_ActiveSync_Sync_Options:: to encapsulate loading and transporting the various collection options/bodyprefs around. - Likewise, implement a collection object instead of using an array to define each collection and have it be responsible for providing some of the return objects/values (See comments in Sync.php). - Implement Horde_ActiveSync_SyncKey. - Move non server-ish methods out of Horde_ActiveSync(_Server). E.g., getMimeTrucSize() etc... - Implment a "changes" object that uses either an array/spl array, or a temporary php stream (for the larger initial email syncs) to store the actual change data structure. Needed to avoid hitting PHP memory limit for very large mailboxes when synchronizing to clients that pull the entire mailbox down (like Outlook). Also, standardize the data format instead of having to (re)build a flat array from a multidimensional array of 'changes', 'add' etc.. - Use a configuration object (or maybe a Builder) for constructing the ActiveSync Driver and Server objects. At the very least, need to clean up the constructor parameters and various configuration options mess. (E.g., the "PING" configuration values are no longer really all strictly related to PING requests). - Implement a Repository pattern for adding/supporting each backend collection type instead of using a monolithic driver/connector object. - Use a Horde_ActiveSync_Date or Horde_ActiveSync_Message_Date object to wrap logic such as NormalizePoomContactsDate etc... - Clean up exception types, add Horde_ActiveSync_Protocol_Exception etc... - Implement some type of SYNC_REPLY object that is responsible for outputing the SYNC_REPLY data for itself. E.g., return such an object from the H_A_S_Driver::changeMessage either instead of a $stat array, or as part of the $stat array. Move functionality in H_A_S_Exporter_Sync::syncAddResponse and ::syncModifiedResponse() into these new objects. Probably need concrete classes for Calendar and Email etc... - Clean up Horde_ActiveSync_Device - break into device specific child classes.
Simpan