api.restapi.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972
  1. <?php
  2. /**
  3. * REST API v1 implementation
  4. */
  5. class RestAPI {
  6. /**
  7. * Contains available objects and their methods callbacks as object=>callback=>methodName
  8. *
  9. * @var array
  10. */
  11. protected $objects = array();
  12. /**
  13. * Some predefined stuff
  14. */
  15. const PROUTE_DATA = 'data';
  16. /**
  17. * Oo
  18. */
  19. public function __construct() {
  20. $this->setAvailableObjects();
  21. }
  22. /**
  23. * Sets available objects and their methods
  24. *
  25. * @return void
  26. */
  27. protected function setAvailableObjects() {
  28. $this->objects = array(
  29. 'models' => array(
  30. 'getall' => 'modelsGetAll'
  31. ),
  32. 'storages' => array(
  33. 'getall' => 'storagesGetAll',
  34. 'getstates' => 'storagesGetStates'
  35. ),
  36. 'cameras' => array(
  37. 'getall' => 'camerasGetAll',
  38. 'create' => 'camerasCreate',
  39. 'activate' => 'camerasActivate',
  40. 'deactivate' => 'camerasDeactivate',
  41. 'setdescription' => 'camerasSetDescription',
  42. 'delete' => 'camerasDelete',
  43. 'isregistered' => 'camerasIsRegistered',
  44. 'isipportfree' => 'camerasIpPortFree'
  45. ),
  46. 'users' => array(
  47. 'getall' => 'usersGetAll',
  48. 'create' => 'usersCreate',
  49. 'delete' => 'usersDelete',
  50. 'changepassword' => 'usersChangePassword',
  51. 'isregistered' => 'usersIsRegistered',
  52. 'checkauth' => 'usersCheckAuth'
  53. ),
  54. 'acls' => array(
  55. 'getall' => 'aclsGetAll',
  56. 'getallchannels' => 'aclsGetAllChannels',
  57. 'getallcameras' => 'aclsGetAllCameras',
  58. 'getchannels' => 'aclsGetChannels',
  59. 'getcameras' => 'aclsGetCameras',
  60. 'assignchannel' => 'aclsAssignChannel',
  61. 'assigncamera' => 'aclsAssignCamera',
  62. 'deassignchannel' => 'aclsDeassignChannel',
  63. 'deassigncamera' => 'aclsDeassignCamera',
  64. ),
  65. 'channels' => array(
  66. 'getall' => 'channelsGetAll',
  67. 'getscreenshotsall' => 'channelsGetScreenshotsAll',
  68. 'getscreenshot' => 'channelsGetScreenshot',
  69. 'getlivestream' => 'channelsGetLiveStream',
  70. ),
  71. 'recorders' => array(
  72. 'getall' => 'recordersGetAll',
  73. 'isrunning' => 'recordersIsRunning'
  74. ),
  75. 'system' => array(
  76. 'gethealth' => 'systemGetHealth',
  77. 'checkconnection' => 'systemCheckConnection'
  78. ),
  79. );
  80. }
  81. /**
  82. * Performs check for availability of request fields
  83. *
  84. * @param array $required
  85. * @param array $data
  86. *
  87. * @return bool
  88. */
  89. protected function checkRequestFields($required, $data) {
  90. $result = true;
  91. if (!empty($required)) {
  92. if (!empty($data)) {
  93. foreach ($required as $io => $eachRequired) {
  94. if (!isset($data[$eachRequired])) {
  95. $result = false;
  96. }
  97. }
  98. } else {
  99. $result = false;
  100. }
  101. }
  102. return ($result);
  103. }
  104. /**
  105. * Catches some object method callback
  106. *
  107. * @return void
  108. */
  109. public function catchRequest() {
  110. $result = array(
  111. 'error' => 1,
  112. 'message' => __('No object specified')
  113. );
  114. if (!empty($this->objects)) {
  115. foreach ($this->objects as $eachObject => $objectMethods) {
  116. //object call
  117. if (ubRouting::checkGet($eachObject)) {
  118. $methodCallback = ubRouting::get($eachObject);
  119. if (isset($objectMethods[$methodCallback])) {
  120. $methodName = $objectMethods[$methodCallback];
  121. if (method_exists($this, $methodName)) {
  122. $inputData = array();
  123. if (ubRouting::checkPost(self::PROUTE_DATA)) {
  124. $unpackData = json_decode(ubRouting::post(self::PROUTE_DATA), true);
  125. if (is_array($unpackData)) {
  126. $inputData = $unpackData;
  127. }
  128. }
  129. $result = $this->$methodName($inputData);
  130. } else {
  131. $result = array(
  132. 'error' => 2,
  133. 'message' => __('Method not exists')
  134. );
  135. }
  136. } else {
  137. $result = array(
  138. 'error' => 2,
  139. 'message' => __('Method not exists')
  140. );
  141. }
  142. }
  143. }
  144. }
  145. $this->renderReply($result);
  146. }
  147. /**
  148. * Returns request reply as JSON
  149. *
  150. * @return void
  151. */
  152. protected function renderReply($data) {
  153. header('Content-Type: application/json; charset=UTF-8');
  154. $data = json_encode($data);
  155. die($data);
  156. }
  157. ///////////////////////////
  158. // Camera models methods //
  159. ///////////////////////////
  160. /**
  161. * Returns available camera models list
  162. *
  163. * @return array
  164. */
  165. protected function modelsGetAll() {
  166. $models = new Models();
  167. $result = $models->getAllModelData();
  168. return ($result);
  169. }
  170. //////////////////////
  171. // Storages methods //
  172. //////////////////////
  173. /**
  174. * Returns available storages list
  175. *
  176. * @return array
  177. */
  178. protected function storagesGetAll() {
  179. $storages = new Storages();
  180. $result = $storages->getAllStoragesData();
  181. return ($result);
  182. }
  183. /**
  184. * Returns available storages states
  185. *
  186. * @return array
  187. */
  188. protected function storagesGetStates() {
  189. $result = array();
  190. $storages = new Storages();
  191. $allStorages = $storages->getAllStoragesData();
  192. if (!empty($allStorages)) {
  193. foreach ($allStorages as $io => $each) {
  194. $storageState = ($storages->checkPath($each['path'])) ? 1 : 0;
  195. $storageTotal = @disk_total_space($each['path']);
  196. $storageFree = @disk_free_space($each['path']);
  197. $storageUsed = $storageTotal - $storageFree;
  198. $result[$each['id']]['state'] = $storageState;
  199. $result[$each['id']]['total'] = $storageTotal;
  200. $result[$each['id']]['used'] = $storageUsed;
  201. $result[$each['id']]['free'] = $storageFree;
  202. }
  203. }
  204. return ($result);
  205. }
  206. /////////////////////
  207. // Cameras methods //
  208. /////////////////////
  209. /**
  210. * Returns full available cameras data
  211. *
  212. * @return array
  213. */
  214. protected function camerasGetAll() {
  215. $cameras = new Cameras();
  216. $result = $cameras->getAllCamerasFullData();
  217. return ($result);
  218. }
  219. /**
  220. * Returns list of cameras accessible by
  221. *
  222. * @param array $request
  223. *
  224. * @return array
  225. */
  226. protected function camerasCreate($request) {
  227. $result = array();
  228. $requiredFields = array('modelid', 'ip', 'login', 'password', 'active', 'storageid', 'description');
  229. if ($this->checkRequestFields($requiredFields, $request)) {
  230. $cameras = new Cameras();
  231. $modelId = $request['modelid'];
  232. $ip = $request['ip'];
  233. $login = $request['login'];
  234. $password = $request['password'];
  235. $active = $request['active'];
  236. $storageId = $request['storageid'];
  237. $comment = $request['description'];
  238. $creationResult = $cameras->create($modelId, $ip, $login, $password, $active, $storageId, $comment);
  239. if (!empty($creationResult)) {
  240. $result = array('error' => 7, 'message' => $creationResult);
  241. } else {
  242. $result = array('error' => 0, 'message' => __('Success'));
  243. }
  244. } else {
  245. $result = array('error' => 3, 'message' => __('Wrong request data'));
  246. }
  247. return ($result);
  248. }
  249. /**
  250. * Activates existing camera
  251. *
  252. * @param array $request
  253. *
  254. * @return array
  255. */
  256. protected function camerasActivate($request) {
  257. $result = array();
  258. $requiredFields = array('cameraid');
  259. if ($this->checkRequestFields($requiredFields, $request)) {
  260. $cameras = new Cameras();
  261. $actResult = $cameras->activate($request['cameraid']);
  262. if (!empty($actResult)) {
  263. $result = array('error' => 7, 'message' => $actResult);
  264. } else {
  265. $result = array('error' => 0, 'message' => __('Success'));
  266. }
  267. } else {
  268. $result = array('error' => 3, 'message' => __('Wrong request data'));
  269. }
  270. return ($result);
  271. }
  272. /**
  273. * Deactivates existing camera
  274. *
  275. * @param array $request
  276. *
  277. * @return array
  278. */
  279. protected function camerasDeactivate($request) {
  280. $result = array();
  281. $requiredFields = array('cameraid');
  282. if ($this->checkRequestFields($requiredFields, $request)) {
  283. $cameras = new Cameras();
  284. $deactResult = $cameras->deactivate($request['cameraid']);
  285. if (!empty($deactResult)) {
  286. $result = array('error' => 7, 'message' => $deactResult);
  287. } else {
  288. $result = array('error' => 0, 'message' => __('Success'));
  289. }
  290. } else {
  291. $result = array('error' => 3, 'message' => __('Wrong request data'));
  292. }
  293. return ($result);
  294. }
  295. /**
  296. * Sets camera description
  297. *
  298. * @param array $request
  299. *
  300. * @return array
  301. */
  302. protected function camerasSetDescription($request) {
  303. $result = array();
  304. $requiredFields = array('cameraid', 'description');
  305. if ($this->checkRequestFields($requiredFields, $request)) {
  306. $cameras = new Cameras();
  307. $renameResult = $cameras->saveComment($request['cameraid'], $request['description']);
  308. if (empty($renameResult)) {
  309. $result = array('error' => 0, 'message' => __('Success'));
  310. } else {
  311. $result = array('error' => 7, 'message' => $renameResult);
  312. }
  313. } else {
  314. $result = array('error' => 3, 'message' => __('Wrong request data'));
  315. }
  316. return ($result);
  317. }
  318. /**
  319. * Deletes existing camera
  320. *
  321. * @param array $request
  322. *
  323. * @return array
  324. */
  325. protected function camerasDelete($request) {
  326. $result = array();
  327. $requiredFields = array('cameraid');
  328. if ($this->checkRequestFields($requiredFields, $request)) {
  329. $cameras = new Cameras();
  330. $delResult = $cameras->delete($request['cameraid']);
  331. if (!empty($delResult)) {
  332. $result = array('error' => 7, 'message' => $delResult);
  333. } else {
  334. $result = array('error' => 0, 'message' => __('Success'));
  335. }
  336. } else {
  337. $result = array('error' => 3, 'message' => __('Wrong request data'));
  338. }
  339. return ($result);
  340. }
  341. /**
  342. * Checks is camera registered or not by its IP
  343. *
  344. * @param array $request
  345. *
  346. * @return array
  347. */
  348. protected function camerasIsRegistered($request) {
  349. $result = array();
  350. $requiredFields = array('ip');
  351. if ($this->checkRequestFields($requiredFields, $request)) {
  352. $cameras = new Cameras();
  353. $registerId = $cameras->isRegisteredIp($request['ip']);
  354. $registerState = ($registerId) ? 1 : 0;
  355. $result = array('error' => 0, 'registered' => $registerState, 'id' => $registerId);
  356. } else {
  357. $result = array('error' => 3, 'message' => __('Wrong request data'));
  358. }
  359. return ($result);
  360. }
  361. /**
  362. * Checks is camera registered or not by its IP
  363. *
  364. * @param array $request
  365. *
  366. * @return array
  367. */
  368. protected function camerasIpPortFree($request) {
  369. $result = array();
  370. $requiredFields = array('ip', 'port');
  371. if ($this->checkRequestFields($requiredFields, $request)) {
  372. $cameras = new Cameras();
  373. $check = $cameras->isCameraIpPortFree($request['ip'], $request['port']);
  374. $freeState = ($check) ? 1 : 0;
  375. $result = array('error' => 0, 'free' => $freeState);
  376. } else {
  377. $result = array('error' => 3, 'message' => __('Wrong request data'));
  378. }
  379. return ($result);
  380. }
  381. ///////////////////////////
  382. // System object methods //
  383. ///////////////////////////
  384. /**
  385. * Just dummy callback to check API connection
  386. *
  387. * @return array
  388. */
  389. protected function systemCheckConnection() {
  390. $result = array('error' => 0, 'connection' => 1, 'message' => __('Success'));
  391. return ($result);
  392. }
  393. /**
  394. * Returns system health info
  395. *
  396. * @return array
  397. */
  398. protected function systemGetHealth() {
  399. global $ubillingConfig;
  400. $hwInfo = new SystemHwInfo();
  401. $result = array(
  402. 'storages' => 1,
  403. 'network' => 1,
  404. 'database' => 1,
  405. 'channels_total' => 0,
  406. 'channels_online' => 0,
  407. 'uptime' => 0,
  408. 'loadavg' => 0,
  409. 'cpuload' => 0,
  410. 'os' => '',
  411. );
  412. //storages diag
  413. $storagesStates = $this->storagesGetStates();
  414. if (!empty($storagesStates)) {
  415. foreach ($storagesStates as $io => $eachStorageState) {
  416. if (!$eachStorageState['state']) {
  417. $result['storages'] = 0;
  418. }
  419. }
  420. } else {
  421. $result['storages'] = 0;
  422. }
  423. //network diag
  424. if (!zb_PingICMP('wolfrecorder.com')) {
  425. $result['network'] = 0;
  426. }
  427. //cameras stats
  428. $allCamerasData = $this->camerasGetAll();
  429. $result['channels_total'] = sizeof($allCamerasData);
  430. if (!empty($allCamerasData)) {
  431. $recorder = new Recorder();
  432. $runningRecorders = $recorder->getRunningRecorders();
  433. $result['channels_online'] = sizeof($runningRecorders);
  434. }
  435. //system uptime
  436. $uptime = $hwInfo->getUptime();
  437. $result['uptime'] = $uptime;
  438. //system load averaga
  439. $loadAvg = $hwInfo->getLa1();
  440. $result['loadavg'] = $loadAvg;
  441. //system load
  442. $cpuLoad = $hwInfo->getsystemLoadPercent();
  443. $result['cpuload'] = $cpuLoad;
  444. //system name
  445. $osName = $hwInfo->getOs();
  446. $osRelease = $hwInfo->getOsRelease();
  447. $phpVer = $hwInfo->getPhpVersion();
  448. $result['os'] = 'OS: ' . $osName . ' ' . $osRelease . ' PHP: ' . $phpVer;
  449. return ($result);
  450. }
  451. ///////////////////////////
  452. // Users object methods //
  453. ///////////////////////////
  454. /**
  455. * Returns list of all available user data
  456. *
  457. * @return array
  458. */
  459. protected function usersGetAll() {
  460. $userManager = new UserManager();
  461. return ($userManager->getAllUsersData());
  462. }
  463. /**
  464. * Creates new limited user
  465. *
  466. * @param array $request
  467. *
  468. * @return array
  469. */
  470. protected function usersCreate($request) {
  471. $result = array();
  472. $requiredFields = array('login', 'password');
  473. if ($this->checkRequestFields($requiredFields, $request)) {
  474. $userManager = new UserManager();
  475. $login = $request['login'];
  476. $password = $request['password'];
  477. $role = 'LIMITED';
  478. $userRegResult = $userManager->createUser($login, $password, $password, $role);
  479. if (!empty($userRegResult)) {
  480. $result = array('error' => 7, 'message' => $userRegResult);
  481. } else {
  482. $result = array('error' => 0, 'message' => __('Success'));
  483. }
  484. } else {
  485. $result = array('error' => 3, 'message' => __('Wrong request data'));
  486. }
  487. return ($result);
  488. }
  489. /**
  490. * Changes some existing user password to new one
  491. *
  492. * @param array $request
  493. *
  494. * @return array
  495. */
  496. protected function usersChangePassword($request) {
  497. $result = array();
  498. $requiredFields = array('login', 'password');
  499. if ($this->checkRequestFields($requiredFields, $request)) {
  500. $userManager = new UserManager();
  501. $login = $request['login'];
  502. $password = $request['password'];
  503. $userSaveResult = $userManager->saveUser($login, $password, $password);
  504. if (!empty($userSaveResult)) {
  505. $result = array('error' => 7, 'message' => $userSaveResult);
  506. } else {
  507. $result = array('error' => 0, 'message' => __('Success'));
  508. }
  509. } else {
  510. $result = array('error' => 3, 'message' => __('Wrong request data'));
  511. }
  512. return ($result);
  513. }
  514. /**
  515. * Checks is user registered or not?
  516. *
  517. * @param array $request
  518. *
  519. * @return array
  520. */
  521. protected function usersIsRegistered($request) {
  522. $result = array();
  523. $requiredFields = array('login');
  524. if ($this->checkRequestFields($requiredFields, $request)) {
  525. $userManager = new UserManager();
  526. $login = $request['login'];
  527. $userCheckResult = ($userManager->isUserRegistered($login)) ? 1 : 0;
  528. $result = array('error' => 0, 'registered' => $userCheckResult);
  529. } else {
  530. $result = array('error' => 3, 'message' => __('Wrong request data'));
  531. }
  532. return ($result);
  533. }
  534. /**
  535. * Deletes an existing user
  536. *
  537. * @param array $request
  538. *
  539. * @return array
  540. */
  541. protected function usersDelete($request) {
  542. $result = array();
  543. $requiredFields = array('login');
  544. if ($this->checkRequestFields($requiredFields, $request)) {
  545. $userManager = new UserManager();
  546. $login = $request['login'];
  547. if ($userManager->isUserRegistered($login)) {
  548. $userManager->deleteUser($login);
  549. $result = array('error' => 0, 'message' => __('Success'));
  550. } else {
  551. $result = array('error' => 7, 'message' => __('User') . ' ' . __('not exists'));
  552. }
  553. } else {
  554. $result = array('error' => 3, 'message' => __('Wrong request data'));
  555. }
  556. return ($result);
  557. }
  558. /**
  559. * Checks can user be athorized with some login and password or not
  560. *
  561. * @param array $request
  562. *
  563. * @return array
  564. */
  565. protected function usersCheckAuth($request) {
  566. $result = array();
  567. $requiredFields = array('login', 'password');
  568. if ($this->checkRequestFields($requiredFields, $request)) {
  569. $login = $request['login'];
  570. $password = $request['password'];
  571. if (!empty($login) and !empty($password)) {
  572. $userManager = new UserManager();
  573. $allUsersData = $userManager->getAllUsersData();
  574. if (isset($allUsersData[$login])) {
  575. $userData = $allUsersData[$login];
  576. if (!empty($userData)) {
  577. $passwordHash = md5($password);
  578. if ($passwordHash == $userData['password']) {
  579. $result = array('error' => 0, 'auth' => 1, 'message' => __('Success'));
  580. } else {
  581. $result = array('error' => 6, 'auth' => 0, 'message' => __('Wrong credentials'));
  582. }
  583. } else {
  584. $result = array('error' => 7, 'message' => __('Error reading user profile'));
  585. }
  586. } else {
  587. $result = array('error' => 6, 'auth' => 0, 'message' => __('Wrong credentials'));
  588. }
  589. } else {
  590. $result = array('error' => 7, 'message' => __('Login') . ' ' . __('or') . ' ' . __('password') . ' ' . __('is empty'));
  591. }
  592. } else {
  593. $result = array('error' => 3, 'message' => __('Wrong request data'));
  594. }
  595. return ($result);
  596. }
  597. ///////////////////
  598. // ACLs methods //
  599. ///////////////////
  600. /**
  601. * Returns array of all available ACLs
  602. *
  603. * @return array
  604. */
  605. protected function aclsGetAll() {
  606. $result = array();
  607. $acl = new ACL();
  608. $result = $acl->getAllAclsData();
  609. return ($result);
  610. }
  611. /**
  612. * Returns array of all available user to cameras ACLs
  613. *
  614. * @return array
  615. */
  616. protected function aclsGetAllCameras() {
  617. $result = array();
  618. $acl = new ACL();
  619. $result = $acl->getAllCameraAclsData();
  620. return ($result);
  621. }
  622. /**
  623. * Returns array of all available user to channels ACLs
  624. *
  625. * @return array
  626. */
  627. protected function aclsGetAllChannels() {
  628. $result = array();
  629. $acl = new ACL();
  630. $result = $acl->getAllChannelAclsData();
  631. return ($result);
  632. }
  633. /**
  634. * Returns all channels assigned to some user as channelId=>cameraId
  635. *
  636. * @param array $request
  637. *
  638. * @return array
  639. */
  640. protected function aclsGetChannels($request) {
  641. $result = array();
  642. $requiredFields = array('login');
  643. if ($this->checkRequestFields($requiredFields, $request)) {
  644. $login = $request['login'];
  645. $acl = new ACL();
  646. $allChannelAcls = $acl->getAllChannelAclsData();
  647. if (isset($allChannelAcls[$login])) {
  648. $result = $allChannelAcls[$login];
  649. }
  650. } else {
  651. $result = array('error' => 3, 'message' => __('Wrong request data'));
  652. }
  653. return ($result);
  654. }
  655. /**
  656. * Returns all camearas assigned to some user as cameraId=>channelId
  657. *
  658. * @param array $request
  659. *
  660. * @return array
  661. */
  662. protected function aclsGetCameras($request) {
  663. $result = array();
  664. $requiredFields = array('login');
  665. if ($this->checkRequestFields($requiredFields, $request)) {
  666. $login = $request['login'];
  667. $acl = new ACL();
  668. $allCameraAcls = $acl->getAllCameraAclsData();
  669. if (isset($allCameraAcls[$login])) {
  670. $result = $allCameraAcls[$login];
  671. }
  672. } else {
  673. $result = array('error' => 3, 'message' => __('Wrong request data'));
  674. }
  675. return ($result);
  676. }
  677. /**
  678. * Creates ACL for some user by cameraId
  679. *
  680. * @param array $request
  681. *
  682. * @return array
  683. */
  684. protected function aclsAssignCamera($request) {
  685. $result = array();
  686. $requiredFields = array('login', 'cameraid');
  687. if ($this->checkRequestFields($requiredFields, $request)) {
  688. $login = $request['login'];
  689. $cameraId = $request['cameraid'];
  690. $acl = new ACL(true);
  691. $aclCreationResult = $acl->create($login, $cameraId);
  692. if (empty($aclCreationResult)) {
  693. $result = array('error' => 0, 'message' => __('Success'));
  694. } else {
  695. $result = array('error' => 7, 'message' => $aclCreationResult);
  696. }
  697. } else {
  698. $result = array('error' => 3, 'message' => __('Wrong request data'));
  699. }
  700. return ($result);
  701. }
  702. /**
  703. * Creates ACL for some user by channelId
  704. *
  705. * @param array $request
  706. *
  707. * @return array
  708. */
  709. protected function aclsAssignChannel($request) {
  710. $result = array();
  711. $requiredFields = array('login', 'channelid');
  712. if ($this->checkRequestFields($requiredFields, $request)) {
  713. $login = $request['login'];
  714. $channelId = $request['channelid'];
  715. $acl = new ACL(true);
  716. $aclCreationResult = $acl->assignChannel($login, $channelId);
  717. if (empty($aclCreationResult)) {
  718. $result = array('error' => 0, 'message' => __('Success'));
  719. } else {
  720. $result = array('error' => 7, 'message' => $aclCreationResult);
  721. }
  722. } else {
  723. $result = array('error' => 3, 'message' => __('Wrong request data'));
  724. }
  725. return ($result);
  726. }
  727. /**
  728. * Deletes ACL for some user by cameraId
  729. *
  730. * @param array $request
  731. *
  732. * @return array
  733. */
  734. protected function aclsDeassignCamera($request) {
  735. $result = array();
  736. $requiredFields = array('login', 'cameraid');
  737. if ($this->checkRequestFields($requiredFields, $request)) {
  738. $login = $request['login'];
  739. $cameraId = $request['cameraid'];
  740. $aclDeletionId = 0;
  741. $acl = new ACL();
  742. $allAcls = $acl->getAllAclsData();
  743. if (!empty($allAcls)) {
  744. foreach ($allAcls as $io => $each) {
  745. if ($each['user'] == $login and $each['cameraid'] == $cameraId) {
  746. $aclDeletionId = $each['id'];
  747. }
  748. }
  749. }
  750. if ($aclDeletionId) {
  751. $aclDeletionResult = $acl->delete($aclDeletionId);
  752. if (empty($aclDeletionResult)) {
  753. $result = array('error' => 0, 'message' => __('Success'));
  754. } else {
  755. $result = array('error' => 7, 'message' => $aclDeletionResult);
  756. }
  757. } else {
  758. $result = array('error' => 0, 'message' => __('ACL') . ' ' . __('not exists'));
  759. }
  760. } else {
  761. $result = array('error' => 3, 'message' => __('Wrong request data'));
  762. }
  763. return ($result);
  764. }
  765. /**
  766. * Deletes ACL for some user by channelId
  767. *
  768. * @param array $request
  769. *
  770. * @return array
  771. */
  772. protected function aclsDeassignChannel($request) {
  773. $result = array();
  774. $requiredFields = array('login', 'channelid');
  775. if ($this->checkRequestFields($requiredFields, $request)) {
  776. $login = $request['login'];
  777. $channelId = $request['channelid'];
  778. $aclDeletionId = 0;
  779. $acl = new ACL();
  780. $allAcls = $acl->getAllAclsData();
  781. if (!empty($allAcls)) {
  782. foreach ($allAcls as $io => $each) {
  783. if ($each['user'] == $login and $each['channel'] == $channelId) {
  784. $aclDeletionId = $each['id'];
  785. }
  786. }
  787. }
  788. if ($aclDeletionId) {
  789. $aclDeletionResult = $acl->delete($aclDeletionId);
  790. if (empty($aclDeletionResult)) {
  791. $result = array('error' => 0, 'message' => __('Success'));
  792. } else {
  793. $result = array('error' => 7, 'message' => $aclDeletionResult);
  794. }
  795. } else {
  796. $result = array('error' => 0, 'message' => __('ACL') . ' ' . __('not exists'));
  797. }
  798. } else {
  799. $result = array('error' => 3, 'message' => __('Wrong request data'));
  800. }
  801. return ($result);
  802. }
  803. ///////////////////////
  804. // Channels methods //
  805. ///////////////////////
  806. /**
  807. * Returns all available channels as channelId=>cameraId
  808. *
  809. * @return array
  810. */
  811. protected function channelsGetAll() {
  812. $result = array();
  813. $cameras = new Cameras();
  814. $result = $cameras->getAllCamerasChannels();
  815. return ($result);
  816. }
  817. /**
  818. * Returns latest channel screenshot
  819. *
  820. * @param array $request
  821. *
  822. * @return array
  823. */
  824. protected function channelsGetScreenshot($request) {
  825. $result = array();
  826. $requiredFields = array('channelid');
  827. if ($this->checkRequestFields($requiredFields, $request)) {
  828. $channelId = $request['channelid'];
  829. $chanshots = new ChanShots();
  830. $screenshotRaw = $chanshots->getChannelScreenShot($channelId);
  831. $result = array('error' => 0, 'screenshot' => $screenshotRaw);
  832. } else {
  833. $result = array('error' => 3, 'message' => __('Wrong request data'));
  834. }
  835. return ($result);
  836. }
  837. /**
  838. * Returns latest all channels screenshot as channelId=>screenshotUrl
  839. *
  840. * @return array
  841. */
  842. protected function channelsGetScreenshotsAll() {
  843. $result = array();
  844. $cameras = new Cameras();
  845. $allCamerasChannels = $cameras->getAllCamerasChannels();
  846. if (!empty($allCamerasChannels)) {
  847. $chanshots = new ChanShots();
  848. foreach ($allCamerasChannels as $eachChannelId => $eachCameraId) {
  849. $eachScreenShotUrl = $chanshots->getChannelScreenShot($eachChannelId);
  850. if (!empty($eachScreenShotUrl)) {
  851. $result[$eachChannelId] = $eachScreenShotUrl;
  852. }
  853. }
  854. }
  855. return ($result);
  856. }
  857. /**
  858. * Returns channel live pseudo stream HLS URL
  859. *
  860. * @param array $request
  861. *
  862. * @return array
  863. */
  864. protected function channelsGetLiveStream($request) {
  865. $result = array();
  866. $requiredFields = array('channelid');
  867. if ($this->checkRequestFields($requiredFields, $request)) {
  868. $channelId = $request['channelid'];
  869. $url = LiveCams::URL_PSEUDOSTREAM . '&' . LiveCams::ROUTE_PSEUDOLIVE . '=' . $channelId;
  870. $result = array('error' => 0, 'livestream' => $url);
  871. } else {
  872. $result = array('error' => 3, 'message' => __('Wrong request data'));
  873. }
  874. return ($result);
  875. }
  876. ///////////////////////
  877. // Recorders methods //
  878. ///////////////////////
  879. /**
  880. * Returns all running recorders as cameraId=>PID
  881. *
  882. * @return array
  883. */
  884. protected function recordersGetAll() {
  885. $result = array();
  886. $recorders = new Recorder();
  887. $result = $recorders->getRunningRecorders();
  888. return ($result);
  889. }
  890. /**
  891. * Returns state of running recorder for some camera
  892. *
  893. * @param array $request
  894. *
  895. * @return array
  896. */
  897. protected function recordersIsRunning($request) {
  898. $requiredFields = array('cameraid');
  899. if ($this->checkRequestFields($requiredFields, $request)) {
  900. $cameraId = $request['cameraid'];
  901. $recorders = new Recorder();
  902. $allRunning = $recorders->getRunningRecorders();
  903. $runningState = (isset($allRunning[$cameraId])) ? 1 : 0;
  904. $result = array('error' => 0, 'running' => $runningState);
  905. } else {
  906. $result = array('error' => 3, 'message' => __('Wrong request data'));
  907. }
  908. return ($result);
  909. }
  910. }