Commit 33813a627226a9a43b4e81121ea90de0405d481a

Authored by Alex Savenko
1 parent 86777356

функция проверки доступа к проэкту /ga/check

app/library/App/Controllers/GaController.php
@@ -9,8 +9,8 @@ @@ -9,8 +9,8 @@
9 namespace App\Controllers; 9 namespace App\Controllers;
10 10
11 11
  12 +use PhalconRest\Mvc\Controllers\CrudResourceController;
12 use App\Model\Project; 13 use App\Model\Project;
13 -use Codeception\Exception\ContentNotFound;  
14 use DateTime; 14 use DateTime;
15 use Google_Client; 15 use Google_Client;
16 use Google_Service_AnalyticsReporting; 16 use Google_Service_AnalyticsReporting;
@@ -20,7 +20,9 @@ use Google_Service_AnalyticsReporting_GetReportsRequest; @@ -20,7 +20,9 @@ use Google_Service_AnalyticsReporting_GetReportsRequest;
20 use Google_Service_AnalyticsReporting_Metric; 20 use Google_Service_AnalyticsReporting_Metric;
21 use Google_Service_AnalyticsReporting_OrderBy; 21 use Google_Service_AnalyticsReporting_OrderBy;
22 use Google_Service_AnalyticsReporting_ReportRequest; 22 use Google_Service_AnalyticsReporting_ReportRequest;
23 -use PhalconRest\Mvc\Controllers\CrudResourceController; 23 +use Codeception\Exception\ContentNotFound;
  24 +use PhalconApi\Exception;
  25 +use PhalconApi\Constants\ErrorCodes;
24 26
25 class GaController extends CrudResourceController { 27 class GaController extends CrudResourceController {
26 28
@@ -28,6 +30,51 @@ class GaController extends CrudResourceController { @@ -28,6 +30,51 @@ class GaController extends CrudResourceController {
28 const VIEW_ID = '119240817'; 30 const VIEW_ID = '119240817';
29 const SCOPE = 'https://www.googleapis.com/auth/analytics.readonly'; 31 const SCOPE = 'https://www.googleapis.com/auth/analytics.readonly';
30 32
  33 + public function checkAction() {
  34 +
  35 + $data = $this->getPostedData();
  36 +
  37 + /** user params **/
  38 + $view_id = $data['view_id'];
  39 +
  40 + if (empty($view_id)) {
  41 + $msg = 'Post-data is invalid, empty `view_id` value';
  42 + throw new Exception(ErrorCodes::DATA_NOT_FOUND, $msg, ['view_id' => $view_id]);
  43 + }
  44 +
  45 + $result['view_id'] = $view_id;
  46 +
  47 + try {
  48 + putenv('GOOGLE_APPLICATION_CREDENTIALS=/var/www/phalcon/'.self::SECRET_JSON);
  49 + $client = new Google_Client();
  50 + $client->useApplicationDefaultCredentials();
  51 + $client->setScopes([self::SCOPE]);
  52 + $analytics = new Google_Service_AnalyticsReporting($client);
  53 +
  54 + $request = new Google_Service_AnalyticsReporting_ReportRequest();
  55 + $request->setViewId($view_id);
  56 +
  57 + $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
  58 + $body->setReportRequests(array($request));
  59 +
  60 + $analytics->reports->batchGet($body);
  61 + }
  62 + catch (\Exception $e) {
  63 + if ($e->getCode() == 403) {
  64 + $result['status'] = 'error';
  65 + return $result;
  66 + }
  67 + else {
  68 + return $e->getMessage();
  69 + }
  70 + }
  71 +
  72 + $result['status'] = 'success';
  73 +
  74 + return $result;
  75 +
  76 + }
  77 +
31 /** 78 /**
32 * Main action for /ga request. Send it google report api. 79 * Main action for /ga request. Send it google report api.
33 * 80 *
@@ -450,8 +497,8 @@ class GaController extends CrudResourceController { @@ -450,8 +497,8 @@ class GaController extends CrudResourceController {
450 */ 497 */
451 public static function countIterations($request_dim, $request_days) { 498 public static function countIterations($request_dim, $request_days) {
452 499
453 - if (empty($request_dim)) throw new ContentNotFound('PHP: request_dim not found');  
454 - if (empty($request_days)) throw new ContentNotFound('PHP: request_days not found'); 500 + if (empty($request_dim)) throw new ContentNotFound('PHP: request_dim not found', ErrorCodes::DATA_NOT_FOUND);
  501 + if (empty($request_days)) throw new ContentNotFound('PHP: request_days not found', ErrorCodes::DATA_NOT_FOUND);
455 switch ($request_dim) { 502 switch ($request_dim) {
456 case 'ga:nthDay': 503 case 'ga:nthDay':
457 $iterations = $request_days*1; 504 $iterations = $request_days*1;
app/library/App/Controllers/UserController.php
@@ -2,9 +2,6 @@ @@ -2,9 +2,6 @@
2 2
3 namespace App\Controllers; 3 namespace App\Controllers;
4 4
5 -use App\Model\User;  
6 -use PhalconApi\Constants\ErrorCodes;  
7 -use PhalconApi\Exception;  
8 use PhalconRest\Mvc\Controllers\CrudResourceController; 5 use PhalconRest\Mvc\Controllers\CrudResourceController;
9 6
10 class UserController extends CrudResourceController 7 class UserController extends CrudResourceController
app/library/App/Model/User.php
@@ -56,7 +56,7 @@ class User extends DateTrackingModel @@ -56,7 +56,7 @@ class User extends DateTrackingModel
56 elseif (empty($username)) 56 elseif (empty($username))
57 { 57 {
58 $msg = 'Post-data is invalid, trying to use empty value of `username`'; 58 $msg = 'Post-data is invalid, trying to use empty value of `username`';
59 - throw new Exception(ErrorCodes::POST_DATA_INVALID, $msg, ['username' => $username]); 59 + throw new Exception(ErrorCodes::DATA_NOT_FOUND, $msg, ['username' => $username]);
60 } 60 }
61 elseif (strlen($username) < 4) 61 elseif (strlen($username) < 4)
62 { 62 {
app/library/App/Resources/GaResource.php
@@ -11,6 +11,7 @@ namespace App\Resources; @@ -11,6 +11,7 @@ namespace App\Resources;
11 11
12 use App\Constants\AclRoles; 12 use App\Constants\AclRoles;
13 use App\Controllers\GaController; 13 use App\Controllers\GaController;
  14 +use PhalconApi\Constants\HttpMethods;
14 use PhalconRest\Api\ApiEndpoint; 15 use PhalconRest\Api\ApiEndpoint;
15 use PhalconRest\Api\ApiResource; 16 use PhalconRest\Api\ApiResource;
16 17
@@ -26,9 +27,9 @@ class GaResource extends ApiResource { @@ -26,9 +27,9 @@ class GaResource extends ApiResource {
26 ->deny(AclRoles::UNAUTHORIZED) 27 ->deny(AclRoles::UNAUTHORIZED)
27 ->handler(GaController::class) 28 ->handler(GaController::class)
28 29
29 - ->endpoint(ApiEndpoint::factory('', 'GET', 'getAction')  
30 - ->allow(AclRoles::USER)  
31 - ->description('Returns data from Google Analytics Api. https://developers.google.com/analytics/devguides/reporting/core/dimsmets') 30 + ->endpoint(ApiEndpoint::factory('', HttpMethods::GET, 'getAction')
  31 + ->allow(AclRoles::AUTHORIZED)
  32 + ->description('Возвращает данные с Google Core Reporting Api. https://developers.google.com/analytics/devguides/reporting/core/dimsmets')
32 ->exampleResponse([ 33 ->exampleResponse([
33 "name" => "rukzachok.com.ua", 34 "name" => "rukzachok.com.ua",
34 "(Other)" => "646", 35 "(Other)" => "646",
@@ -59,6 +60,21 @@ class GaResource extends ApiResource { @@ -59,6 +60,21 @@ class GaResource extends ApiResource {
59 ] 60 ]
60 ]) 61 ])
61 ) 62 )
  63 +
  64 + ->endpoint(ApiEndpoint::factory('/check', HttpMethods::POST, 'checkAction')
  65 + ->allow(AclRoles::AUTHORIZED)
  66 + ->expectsJsonData()
  67 + ->description('Проверяет наличие доступа к проэкту')
  68 + ->exampleResponse([
  69 + 'view_id' => 'integer(id представления проэкта с гугл аналитики)',
  70 + 'status' => 'enum(success|error)'
  71 + ])
  72 + ->paramsDescription([
  73 + 'required params' => [
  74 + 'view_id' => 'integer(id представления проэкта с гугл аналитики)'
  75 + ]
  76 + ])
  77 + )
62 ; 78 ;
63 79
64 } 80 }