mirror of
https://github.com/nerzhul/ocsms.git
synced 2025-06-07 07:56:23 +00:00
Split smscontroller into smscontroller and apicontroller. One for webapp, one for API
This commit is contained in:
parent
9fbeddfa9b
commit
040185cc21
17
.travis.yml
17
.travis.yml
@ -1,17 +0,0 @@
|
|||||||
language: php
|
|
||||||
php:
|
|
||||||
- 5.3
|
|
||||||
- 5.4
|
|
||||||
- 5.5
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- cd ..
|
|
||||||
- git clone https://github.com/owncloud/core.git
|
|
||||||
- mv ocsms core/apps/
|
|
||||||
- cd core
|
|
||||||
- git submodule init
|
|
||||||
- git submodule update
|
|
||||||
- cd apps/ocsms
|
|
||||||
|
|
||||||
script:
|
|
||||||
- phpunit tests
|
|
@ -15,6 +15,7 @@ namespace OCA\OcSms\AppInfo;
|
|||||||
|
|
||||||
use \OCP\AppFramework\App;
|
use \OCP\AppFramework\App;
|
||||||
|
|
||||||
|
use \OCA\OcSms\Controller\ApiController;
|
||||||
use \OCA\OcSms\Controller\SmsController;
|
use \OCA\OcSms\Controller\SmsController;
|
||||||
|
|
||||||
use \OCA\OcSms\Db\Sms;
|
use \OCA\OcSms\Db\Sms;
|
||||||
@ -84,6 +85,16 @@ class OcSmsApp extends App {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$container->registerService('ApiController', function($c) use($app) {
|
||||||
|
return new ApiController(
|
||||||
|
$c->query('AppName'),
|
||||||
|
$c->query('Request'),
|
||||||
|
$c->query('UserId'),
|
||||||
|
$c->query('SmsMapper'),
|
||||||
|
$app
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Managers
|
* Managers
|
||||||
*/
|
*/
|
||||||
|
@ -15,15 +15,16 @@ $application = new OcSmsApp();
|
|||||||
|
|
||||||
$application->registerRoutes($this, array('routes' => array(
|
$application->registerRoutes($this, array('routes' => array(
|
||||||
array('name' => 'sms#index', 'url' => '/', 'verb' => 'GET'),
|
array('name' => 'sms#index', 'url' => '/', 'verb' => 'GET'),
|
||||||
array('name' => 'sms#push', 'url' => '/push', 'verb' => 'POST'),
|
array('name' => 'api#push', 'url' => '/push', 'verb' => 'POST'), // Android API
|
||||||
array('name' => 'sms#replace', 'url' => '/replace', 'verb' => 'POST'),
|
array('name' => 'api#replace', 'url' => '/replace', 'verb' => 'POST'), // Android API
|
||||||
array('name' => 'sms#retrieve_all_ids', 'url' => '/get/smsidlist', 'verb' => 'GET'),
|
array('name' => 'api#retrieve_all_ids', 'url' => '/get/smsidlist', 'verb' => 'GET'), // Android APIv1
|
||||||
array('name' => 'sms#retrieve_all_ids_with_status', 'url' => '/get/smsidstate', 'verb' => 'GET'),
|
array('name' => 'api#retrieve_all_ids_with_status', 'url' => '/get/smsidstate', 'verb' => 'GET'), // Android APIv1
|
||||||
array('name' => 'sms#retrieve_last_timestamp', 'url' => '/get/lastmsgtime', 'verb' => 'GET'),
|
array('name' => 'api#retrieve_last_timestamp', 'url' => '/get/lastmsgtime', 'verb' => 'GET'), // Android APIv1
|
||||||
array('name' => 'sms#retrieve_all_peers', 'url' => '/get/peerlist', 'verb' => 'GET'),
|
array('name' => 'sms#retrieve_all_peers', 'url' => '/get/peerlist', 'verb' => 'GET'),
|
||||||
array('name' => 'sms#get_conversation', 'url' => '/get/conversation', 'verb' => 'GET'),
|
array('name' => 'sms#get_conversation', 'url' => '/get/conversation', 'verb' => 'GET'),
|
||||||
array('name' => 'sms#check_new_messages', 'url' => '/get/new_messages', 'verb' => 'GET'),
|
array('name' => 'sms#check_new_messages', 'url' => '/get/new_messages', 'verb' => 'GET'),
|
||||||
array('name' => 'sms#get_api_version', 'url' => '/get/apiversion', 'verb' => 'GET'),
|
array('name' => 'api#get_api_version', 'url' => '/get/apiversion', 'verb' => 'GET'), // Android APIv1
|
||||||
array('name' => 'sms#set_country', 'url'=> '/set/country', 'verb' => 'POST'),
|
array('name' => 'sms#set_country', 'url'=> '/set/country', 'verb' => 'POST'),
|
||||||
array('name' => 'sms#get_country', 'url'=> '/get/country', 'verb' => 'GET'),
|
array('name' => 'sms#get_country', 'url'=> '/get/country', 'verb' => 'GET'),
|
||||||
|
array('name' => 'api#get_phones_sms_number', 'url' => 'get/phones/smsnumber', 'verb' => 'GET'), // Android APIv2
|
||||||
)));
|
)));
|
||||||
|
166
controller/apicontroller.php
Normal file
166
controller/apicontroller.php
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ownCloud - ocsms
|
||||||
|
*
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later. See the COPYING file.
|
||||||
|
*
|
||||||
|
* @author Loic Blot <loic.blot@unix-experience.fr>
|
||||||
|
* @copyright Loic Blot 2014-2015
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OCA\OcSms\Controller;
|
||||||
|
|
||||||
|
|
||||||
|
use \OCP\IRequest;
|
||||||
|
use \OCP\AppFramework\Controller;
|
||||||
|
use \OCP\AppFramework\Http\JSONResponse;
|
||||||
|
|
||||||
|
use \OCA\OcSms\AppInfo\OcSmsApp;
|
||||||
|
|
||||||
|
use \OCA\OcSms\Db\SmsMapper;
|
||||||
|
|
||||||
|
class ApiController extends Controller {
|
||||||
|
|
||||||
|
private $app;
|
||||||
|
private $userId;
|
||||||
|
private $smsMapper;
|
||||||
|
private $errorMsg;
|
||||||
|
|
||||||
|
public function __construct ($appName, IRequest $request, $userId, SmsMapper $mapper, OcSmsApp $app) {
|
||||||
|
parent::__construct($appName, $request);
|
||||||
|
$this->app = $app;
|
||||||
|
$this->userId = $userId;
|
||||||
|
$this->smsMapper = $mapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
* @NoCSRFRequired
|
||||||
|
*/
|
||||||
|
public function getApiVersion () {
|
||||||
|
return new JSONResponse(array("version" => 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
* @NoCSRFRequired
|
||||||
|
*
|
||||||
|
* This function is used by API v1
|
||||||
|
* Phone will compare its own message list with this
|
||||||
|
* message list and send the missing messages
|
||||||
|
* This call will remain as secure slow sync mode (1 per hour)
|
||||||
|
*/
|
||||||
|
public function retrieveAllIds () {
|
||||||
|
$smsList = $this->smsMapper->getAllIds($this->userId);
|
||||||
|
return new JSONResponse(array("smslist" => $smsList));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
* @NoCSRFRequired
|
||||||
|
*
|
||||||
|
* This function is used by API v2
|
||||||
|
* Phone will get this ID to push recent messages
|
||||||
|
* This call will be used combined with retrieveAllIds
|
||||||
|
* but will be used more times
|
||||||
|
*/
|
||||||
|
public function retrieveLastTimestamp () {
|
||||||
|
$ts = $this->smsMapper->getLastTimestamp($this->userId);
|
||||||
|
return new JSONResponse(array("timestamp" => $ts));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
* @NoCSRFRequired
|
||||||
|
*/
|
||||||
|
public function retrieveAllIdsWithStatus () {
|
||||||
|
$smsList = $this->smsMapper->getAllIdsWithStatus($this->userId);
|
||||||
|
return new JSONResponse(array("smslist" => $smsList));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
* @NoCSRFRequired
|
||||||
|
*/
|
||||||
|
public function getPhonesSmsNumber () {
|
||||||
|
$phoneList = array();
|
||||||
|
return new JSONResponse(array("phoneList" => $phoneList));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
* @NoCSRFRequired
|
||||||
|
*/
|
||||||
|
public function push ($smsCount, $smsDatas) {
|
||||||
|
if ($this->checkPushStructure($smsCount, $smsDatas, true) === false) {
|
||||||
|
return new JSONResponse(array("status" => false, "msg" => $this->errorMsg));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->smsMapper->writeToDB($this->userId, $smsDatas);
|
||||||
|
return new JSONResponse(array("status" => true, "msg" => "OK"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
*/
|
||||||
|
public function replace($smsCount, $smsDatas) {
|
||||||
|
if ($this->checkPushStructure($smsCount, $smsDatas, true) === false) {
|
||||||
|
return new JSONResponse(array("status" => false, "msg" => $this->errorMsg));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->smsMapper->writeToDB($this->userId, $smsDatas, true);
|
||||||
|
return new JSONResponse(array("status" => true, "msg" => "OK"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkPushStructure ($smsCount, $smsDatas) {
|
||||||
|
if ($smsCount != count($smsDatas)) {
|
||||||
|
$this->errorMsg = "Error: sms count invalid";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($smsDatas as &$sms) {
|
||||||
|
if (!array_key_exists("_id", $sms) || !array_key_exists("read", $sms) ||
|
||||||
|
!array_key_exists("date", $sms) || !array_key_exists("seen", $sms) ||
|
||||||
|
!array_key_exists("mbox", $sms) || !array_key_exists("type", $sms) ||
|
||||||
|
!array_key_exists("body", $sms) || !array_key_exists("address", $sms)) {
|
||||||
|
$this->errorMsg = "Error: bad SMS entry";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_numeric($sms["_id"])) {
|
||||||
|
$this->errorMsg = sprintf("Error: Invalid SMS ID '%s'", $sms["_id"]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_numeric($sms["type"])) {
|
||||||
|
$this->errorMsg = sprintf("Error: Invalid SMS type '%s'", $sms["type"]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_numeric($sms["mbox"]) && $sms["mbox"] != 0 && $sms["mbox"] != 1 &&
|
||||||
|
$sms["mbox"] != 2) {
|
||||||
|
$this->errorMsg = sprintf("Error: Invalid Mailbox ID '%s'", $sms["mbox"]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sms["read"] !== "true" && $sms["read"] !== "false") {
|
||||||
|
$this->errorMsg = sprintf("Error: Invalid SMS Read state '%s'", $sms["read"]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sms["seen"] !== "true" && $sms["seen"] !== "false") {
|
||||||
|
$this->errorMsg = "Error: Invalid SMS Seen state";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_numeric($sms["date"]) && $sms["date"] != 0 && $sms["date"] != 1) {
|
||||||
|
$this->errorMsg = "Error: Invalid SMS date";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ TODO: test address and body ?
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -67,51 +67,6 @@ class SmsController extends Controller {
|
|||||||
return new TemplateResponse($this->appName, 'main', $params);
|
return new TemplateResponse($this->appName, 'main', $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @NoAdminRequired
|
|
||||||
* @NoCSRFRequired
|
|
||||||
*/
|
|
||||||
public function getApiVersion () {
|
|
||||||
return new JSONResponse(array("version" => 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @NoAdminRequired
|
|
||||||
* @NoCSRFRequired
|
|
||||||
*
|
|
||||||
* This function is used by API v1
|
|
||||||
* Phone will compare its own message list with this
|
|
||||||
* message list and send the missing messages
|
|
||||||
* This call will remain as secure slow sync mode (1 per hour)
|
|
||||||
*/
|
|
||||||
public function retrieveAllIds () {
|
|
||||||
$smsList = $this->smsMapper->getAllIds($this->userId);
|
|
||||||
return new JSONResponse(array("smslist" => $smsList));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @NoAdminRequired
|
|
||||||
* @NoCSRFRequired
|
|
||||||
*
|
|
||||||
* This function is used by API v2
|
|
||||||
* Phone will get this ID to push recent messages
|
|
||||||
* This call will be used combined with retrieveAllIds
|
|
||||||
* but will be used more times
|
|
||||||
*/
|
|
||||||
public function retrieveLastTimestamp () {
|
|
||||||
$ts = $this->smsMapper->getLastTimestamp($this->userId);
|
|
||||||
return new JSONResponse(array("timestamp" => $ts));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @NoAdminRequired
|
|
||||||
* @NoCSRFRequired
|
|
||||||
*/
|
|
||||||
public function retrieveAllIdsWithStatus () {
|
|
||||||
$smsList = $this->smsMapper->getAllIdsWithStatus($this->userId);
|
|
||||||
return new JSONResponse(array("smslist" => $smsList));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @NoAdminRequired
|
* @NoAdminRequired
|
||||||
* @NoCSRFRequired
|
* @NoCSRFRequired
|
||||||
@ -230,82 +185,6 @@ class SmsController extends Controller {
|
|||||||
return new JSONResponse(array("phonelist" => $phoneList, "contacts" => $contacts, "photos" => $photos));
|
return new JSONResponse(array("phonelist" => $phoneList, "contacts" => $contacts, "photos" => $photos));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @NoAdminRequired
|
|
||||||
* @NoCSRFRequired
|
|
||||||
*/
|
|
||||||
public function push ($smsCount, $smsDatas) {
|
|
||||||
if ($this->checkPushStructure($smsCount, $smsDatas, true) === false) {
|
|
||||||
return new JSONResponse(array("status" => false, "msg" => $this->errorMsg));
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->smsMapper->writeToDB($this->userId, $smsDatas);
|
|
||||||
return new JSONResponse(array("status" => true, "msg" => "OK"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @NoAdminRequired
|
|
||||||
*/
|
|
||||||
public function replace($smsCount, $smsDatas) {
|
|
||||||
if ($this->checkPushStructure($smsCount, $smsDatas, true) === false) {
|
|
||||||
return new JSONResponse(array("status" => false, "msg" => $this->errorMsg));
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->smsMapper->writeToDB($this->userId, $smsDatas, true);
|
|
||||||
return new JSONResponse(array("status" => true, "msg" => "OK"));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function checkPushStructure ($smsCount, $smsDatas) {
|
|
||||||
if ($smsCount != count($smsDatas)) {
|
|
||||||
$this->errorMsg = "Error: sms count invalid";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($smsDatas as &$sms) {
|
|
||||||
if (!array_key_exists("_id", $sms) || !array_key_exists("read", $sms) ||
|
|
||||||
!array_key_exists("date", $sms) || !array_key_exists("seen", $sms) ||
|
|
||||||
!array_key_exists("mbox", $sms) || !array_key_exists("type", $sms) ||
|
|
||||||
!array_key_exists("body", $sms) || !array_key_exists("address", $sms)) {
|
|
||||||
$this->errorMsg = "Error: bad SMS entry";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_numeric($sms["_id"])) {
|
|
||||||
$this->errorMsg = sprintf("Error: Invalid SMS ID '%s'", $sms["_id"]);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_numeric($sms["type"])) {
|
|
||||||
$this->errorMsg = sprintf("Error: Invalid SMS type '%s'", $sms["type"]);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_numeric($sms["mbox"]) && $sms["mbox"] != 0 && $sms["mbox"] != 1 &&
|
|
||||||
$sms["mbox"] != 2) {
|
|
||||||
$this->errorMsg = sprintf("Error: Invalid Mailbox ID '%s'", $sms["mbox"]);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($sms["read"] !== "true" && $sms["read"] !== "false") {
|
|
||||||
$this->errorMsg = sprintf("Error: Invalid SMS Read state '%s'", $sms["read"]);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($sms["seen"] !== "true" && $sms["seen"] !== "false") {
|
|
||||||
$this->errorMsg = "Error: Invalid SMS Seen state";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_numeric($sms["date"]) && $sms["date"] != 0 && $sms["date"] != 1) {
|
|
||||||
$this->errorMsg = "Error: Invalid SMS date";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// @ TODO: test address and body ?
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @NoAdminRequired
|
* @NoAdminRequired
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user