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,8 +70,30 @@ class Provisioning extends RequestProcessor { ...@@ -69,8 +70,30 @@ 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:
// - Remote Wipe
// - DeviceInformation
// - Policies
// Each of them should only be once per request.
WBXMLDecoder::ResetInWhile("provisioningMain");
while(WBXMLDecoder::InWhile("provisioningMain")) {
$requestName = "";
if (self::$decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { 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 (!$requestName)
break;
//set is available for OOF, device password and device information
switch ($requestName) {
case SYNC_PROVISION_REMOTEWIPE:
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) if(!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS))
return false; return false;
...@@ -84,12 +107,10 @@ class Provisioning extends RequestProcessor { ...@@ -84,12 +107,10 @@ class Provisioning extends RequestProcessor {
$phase2 = false; $phase2 = false;
$rwstatusWiped = true; $rwstatusWiped = true;
} //TODO check - do it after while(1) finished?
else { break;
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICIES))
return false;
case SYNC_PROVISION_POLICIES:
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICY)) if(!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICY))
return false; return false;
...@@ -125,22 +146,30 @@ class Provisioning extends RequestProcessor { ...@@ -125,22 +146,30 @@ class Provisioning extends RequestProcessor {
if(!self::$decoder->getElementEndTag()) //policies if(!self::$decoder->getElementEndTag()) //policies
return false; return false;
break;
if (self::$decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { case SYNC_SETTINGS_DEVICEINFORMATION:
if(!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) // AS14.1 and later clients pass Device Information on the initial Provision request
if (!self::$decoder->getElementStartTag(SYNC_SETTINGS_SET))
return false; return false;
$deviceInfoSet = true;
$status = self::$decoder->getElementContent(); $deviceinformation = new SyncDeviceInformation();
$deviceinformation->Decode(self::$decoder);
if(!self::$decoder->getElementEndTag()) $deviceinformation->Status = SYNC_SETTINGSSTATUS_SUCCESS;
self::$deviceManager->SaveDeviceInformation($deviceinformation);
if (!self::$decoder->getElementEndTag()) // SYNC_SETTINGS_SET
return false; return false;
if (!self::$decoder->getElementEndTag()) // SYNC_SETTINGS_DEVICEINFORMATION
if(!self::$decoder->getElementEndTag())
return false; 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