Horde_ActiveSync_Utils::decodeBase64 PHP Method

decodeBase64() public static method

Decode a base64 encoded URI
public static decodeBase64 ( $uri ) : array
return array The decoded request
    public static function decodeBase64($uri)
    {
        $commandMap = array(0 => 'Sync', 1 => 'SendMail', 2 => 'SmartForward', 3 => 'SmartReply', 4 => 'GetAttachment', 9 => 'FolderSync', 10 => 'FolderCreate', 11 => 'FolderDelete', 12 => 'FolderUpdate', 13 => 'MoveItems', 14 => 'GetItemEstimate', 15 => 'MeetingResponse', 16 => 'Search', 17 => 'Settings', 18 => 'Ping', 19 => 'ItemOperations', 20 => 'Provision', 21 => 'ResolveRecipients', 22 => 'ValidateCert');
        $stream = fopen('php://temp', 'r+');
        fwrite($stream, base64_decode($uri));
        rewind($stream);
        $results = array();
        // Version, command, locale
        $data = unpack('CprotocolVersion/Ccommand/vlocale', fread($stream, 4));
        $results['ProtVer'] = substr($data['protocolVersion'], 0, -1) . '.' . substr($data['protocolVersion'], -1);
        $results['Cmd'] = $commandMap[$data['command']];
        $results['Locale'] = $data['locale'];
        // deviceId
        $length = ord(fread($stream, 1));
        if ($length > 0) {
            $data = fread($stream, $length);
            $data = unpack('H' . $length * 2 . 'DevID', $data);
            $results['DeviceId'] = $data['DevID'];
        }
        // policyKey
        $length = ord(fread($stream, 1));
        if ($length > 0) {
            $data = unpack('VpolicyKey', fread($stream, $length));
            $results['PolicyKey'] = $data['policyKey'];
        }
        // deviceType
        $length = ord(fread($stream, 1));
        if ($length > 0) {
            $data = unpack('A' . $length . 'devType', fread($stream, $length));
            $results['DeviceType'] = $data['devType'];
        }
        // Remaining properties
        while (!feof($stream)) {
            $tag = ord(fread($stream, 1));
            $length = ord(fread($stream, 1));
            if ($length > 0 || $tag == 7) {
                switch ($tag) {
                    case 0:
                        $data = unpack('A' . $length . 'AttName', fread($stream, $length));
                        $results['AttachmentName'] = $data['AttName'];
                        break;
                    case 1:
                        $data = unpack('A' . $length . 'CollId', fread($stream, $length));
                        $results['CollectionId'] = $data['CollId'];
                        break;
                    case 3:
                        $data = unpack('A' . $length . 'ItemId', fread($stream, $length));
                        $results['ItemId'] = $data['ItemId'];
                        break;
                    case 4:
                        $data = unpack('A' . $length . 'Lid', fread($stream, $length));
                        $results['LongId'] = $data['Lid'];
                        break;
                    case 5:
                        $data = unpack('A' . $length . 'Pid', fread($stream, $length));
                        $results['ParentId'] = $data['Pid'];
                        break;
                    case 6:
                        $data = unpack('A' . $length . 'Oc', fread($stream, $length));
                        $results['Occurrence'] = $data['Oc'];
                        break;
                    case 7:
                        $options = ord(fread($stream, 1));
                        $results['SaveInSent'] = !!($options & 0x1);
                        $results['AcceptMultiPart'] = !!($options & 0x2);
                        break;
                    case 8:
                        $data = unpack('A' . $length . 'User', fread($stream, $length));
                        $results['User'] = $data['User'];
                        break;
                }
            }
        }
        return $results;
    }

Usage Example

Beispiel #1
0
 public function testBase64Uri()
 {
     /* Provision Request for version 12.1 */
     $url = 'eRQJBBCuTs0Z9ZK6Vldwb/dM8JusBHx8TOgDUFBD';
     $results = Horde_ActiveSync_Utils::decodeBase64($url);
     $fixture = array('ProtVer' => '12.1', 'Cmd' => 'Provision', 'Locale' => 1033, 'DeviceId' => 'ae4ecd19f592ba5657706ff74cf09bac', 'PolicyKey' => 3897326716.0, 'DeviceType' => 'PPC');
     $this->assertEquals($fixture, $results);
     /* Smart Forward */
     $url = 'eQIJBBCuTs0Z9ZK6Vldwb/dM8JusBHVeHIQDUFBDBwEBAwYxMTkyODEBBUlOQk9Y';
     $results = Horde_ActiveSync_Utils::decodeBase64($url);
     // This is binary data, test it separately.
     $fixture = array('ProtVer' => '12.1', 'Cmd' => 'SmartForward', 'Locale' => 1033, 'DeviceId' => 'ae4ecd19f592ba5657706ff74cf09bac', 'PolicyKey' => 2216451701.0, 'DeviceType' => 'PPC', 'ItemId' => '119281', 'CollectionId' => 'INBOX', 'AcceptMultiPart' => false, 'SaveInSent' => true);
     $this->assertEquals($fixture, $results);
 }
All Usage Examples Of Horde_ActiveSync_Utils::decodeBase64