Commit 0c1c79c0 authored by Sebastian Kummer's avatar Sebastian Kummer

Merge pull request #81 in ZP/z-push from bugfix/ZP-629-deviceinformation-in-provisioning to develop

* commit '342e43cf':
  ZP-629 Removed tabs/whitespace, removed info log level message.
  ZP-629 Replace while with WBXMLDecoder::InWhile, and remove closing tag. Released under the Affero GNU General Public License (AGPL) version 3.
parents 940716a0 342e43cf
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Created : 16.02.2012 * Created : 16.02.2012
* *
* Copyright 2007 - 2013 Zarafa Deutschland GmbH * Copyright 2007 - 2013, 2015 Zarafa Deutschland GmbH
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3, * it under the terms of the GNU Affero General Public License, version 3,
...@@ -57,6 +57,7 @@ class Provisioning extends RequestProcessor { ...@@ -57,6 +57,7 @@ class Provisioning extends RequestProcessor {
$rwstatus = self::$deviceManager->GetProvisioningWipeStatus(); $rwstatus = self::$deviceManager->GetProvisioningWipeStatus();
$rwstatusWiped = false; $rwstatusWiped = false;
$deviceInfoSet = false;
// if this is a regular provisioning require that an authenticated remote user // if this is a regular provisioning require that an authenticated remote user
if ($rwstatus < SYNC_PROVISION_RWSTATUS_PENDING) { if ($rwstatus < SYNC_PROVISION_RWSTATUS_PENDING) {
...@@ -69,78 +70,106 @@ class Provisioning extends RequestProcessor { ...@@ -69,78 +70,106 @@ class Provisioning extends RequestProcessor {
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_PROVISION)) if(!self::$decoder->getElementStartTag(SYNC_PROVISION_PROVISION))
return false; return false;
//handle android remote wipe. // Loop through Provision request tags. Possible are:
if (self::$decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { // - Remote Wipe
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) // - DeviceInformation
return false; // - Policies
// Each of them should only be once per request.
$instatus = self::$decoder->getElementContent(); WBXMLDecoder::ResetInWhile("provisioningMain");
while(WBXMLDecoder::InWhile("provisioningMain")) {
if(!self::$decoder->getElementEndTag()) $requestName = "";
return false; if (self::$decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) {
$requestName = SYNC_PROVISION_REMOTEWIPE;
}
if (self::$decoder->getElementStartTag(SYNC_PROVISION_POLICIES)) {
$requestName = SYNC_PROVISION_POLICIES;
}
if (self::$decoder->getElementStartTag(SYNC_SETTINGS_DEVICEINFORMATION)) {
$requestName = SYNC_SETTINGS_DEVICEINFORMATION;
}
if(!self::$decoder->getElementEndTag()) if (!$requestName)
return false; break;
$phase2 = false; //set is available for OOF, device password and device information
$rwstatusWiped = true; switch ($requestName) {
} case SYNC_PROVISION_REMOTEWIPE:
else { if(!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS))
return false;
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICIES)) $instatus = self::$decoder->getElementContent();
return false;
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICY)) if(!self::$decoder->getElementEndTag())
return false; return false;
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICYTYPE)) if(!self::$decoder->getElementEndTag())
return false; return false;
$policytype = self::$decoder->getElementContent(); $phase2 = false;
if ($policytype != 'MS-WAP-Provisioning-XML' && $policytype != 'MS-EAS-Provisioning-WBXML') { $rwstatusWiped = true;
$status = SYNC_PROVISION_STATUS_SERVERERROR; //TODO check - do it after while(1) finished?
} break;
if(!self::$decoder->getElementEndTag()) //policytype
return false;
if (self::$decoder->getElementStartTag(SYNC_PROVISION_POLICYKEY)) { case SYNC_PROVISION_POLICIES:
$devpolicykey = self::$decoder->getElementContent(); if(!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICY))
return false;
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICYTYPE))
return false; return false;
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) $policytype = self::$decoder->getElementContent();
return false; if ($policytype != 'MS-WAP-Provisioning-XML' && $policytype != 'MS-EAS-Provisioning-WBXML') {
$status = SYNC_PROVISION_STATUS_SERVERERROR;
}
if(!self::$decoder->getElementEndTag()) //policytype
return false;
$instatus = self::$decoder->getElementContent(); if (self::$decoder->getElementStartTag(SYNC_PROVISION_POLICYKEY)) {
$devpolicykey = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false; return false;
$phase2 = false; if(!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS))
} return false;
if(!self::$decoder->getElementEndTag()) //policy $instatus = self::$decoder->getElementContent();
return false;
if(!self::$decoder->getElementEndTag()) //policies if(!self::$decoder->getElementEndTag())
return false; return false;
if (self::$decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { $phase2 = false;
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) }
return false;
$status = self::$decoder->getElementContent(); if(!self::$decoder->getElementEndTag()) //policy
return false;
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag()) //policies
return false; return false;
break;
if(!self::$decoder->getElementEndTag()) case SYNC_SETTINGS_DEVICEINFORMATION:
return false; // AS14.1 and later clients pass Device Information on the initial Provision request
if (!self::$decoder->getElementStartTag(SYNC_SETTINGS_SET))
return false;
$deviceInfoSet = true;
$deviceinformation = new SyncDeviceInformation();
$deviceinformation->Decode(self::$decoder);
$deviceinformation->Status = SYNC_SETTINGSSTATUS_SUCCESS;
self::$deviceManager->SaveDeviceInformation($deviceinformation);
if (!self::$decoder->getElementEndTag()) // SYNC_SETTINGS_SET
return false;
if (!self::$decoder->getElementEndTag()) // SYNC_SETTINGS_DEVICEINFORMATION
return false;
break;
$rwstatusWiped = true; default:
//TODO: a special status code needed?
ZLog::Write(LOGLEVEL_WARN, sprintf ("This property ('%s') is not allowed to be used in a provision request", $requestName));
} }
} }
if(!self::$decoder->getElementEndTag()) //provision if(!self::$decoder->getElementEndTag()) //provision
return false; return false;
...@@ -170,6 +199,14 @@ class Provisioning extends RequestProcessor { ...@@ -170,6 +199,14 @@ class Provisioning extends RequestProcessor {
self::$encoder->content($status); self::$encoder->content($status);
self::$encoder->endTag(); self::$encoder->endTag();
if ($deviceInfoSet) {
self::$encoder->startTag(SYNC_SETTINGS_DEVICEINFORMATION);
self::$encoder->startTag(SYNC_SETTINGS_STATUS);
self::$encoder->content($deviceinformation->Status);
self::$encoder->endTag(); //SYNC_SETTINGS_STATUS
self::$encoder->endTag(); //SYNC_SETTINGS_DEVICEINFORMATION
}
self::$encoder->startTag(SYNC_PROVISION_POLICIES); self::$encoder->startTag(SYNC_PROVISION_POLICIES);
self::$encoder->startTag(SYNC_PROVISION_POLICY); self::$encoder->startTag(SYNC_PROVISION_POLICY);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment