Proyectos de Subversion LeadersLinked - Services

Rev

Rev 34 | Rev 44 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
use Laminas\ModuleManager\ModuleEvent;
8
use Laminas\ModuleManager\ModuleManager;
9
use Laminas\Mvc\MvcEvent;
10
use Laminas\Config\Reader\Ini;
11
use Laminas\Permissions\Acl\Acl;
12
use Laminas\Permissions\Acl\Role\GenericRole;
13
use LeadersLinked\Plugin\CurrentUserPlugin;
14
use LeadersLinked\Mapper\UserMapper;
15
use LeadersLinked\Authentication\AuthTokenAdapter;
16
use Laminas\Authentication\AuthenticationService;
17
use Laminas\Permissions\Acl\Resource\GenericResource;
18
use LeadersLinked\Model\UserType;
19
use LeadersLinked\Plugin\CurrentNetworkPlugin;
20
use LeadersLinked\Model\Network;
21
use LeadersLinked\Model\User;
22
use LeadersLinked\Mapper\CompanyUserMapper;
23
use LeadersLinked\Model\CompanyUser;
24
use LeadersLinked\Mapper\CompanyMapper;
25
use LeadersLinked\Mapper\CompanyServiceMapper;
26
use LeadersLinked\Model\Service;
27
 
28
use LeadersLinked\Library\Functions;
29
use LeadersLinked\Mapper\DailyPulseMapper;
30
use LeadersLinked\Model\DailyPulse;
31
use LeadersLinked\Mapper\OrganizationPositionMapper;
32
use LeadersLinked\Mapper\KnowledgeAreaCategoryJobDescriptionMapper;
33
use LeadersLinked\Mapper\MyCoachCategoryJobDescriptionMapper;
34
use LeadersLinked\Mapper\KnowledgeAreaCategoryUserMapper;
35
use LeadersLinked\Mapper\MyCoachCategoryUserMapper;
23 efrain 36
use Firebase\JWT\JWT;
37
use Firebase\JWT\Key;
38
use LeadersLinked\Mapper\JwtTokenMapper;
39
use LeadersLinked\Authentication\AuthUserIdAdapter;
1 efrain 40
 
41
class Module
42
{
43
    /**
44
     *
45
     * @var Acl
46
     */
47
    private $acl;
48
 
49
    /**
50
     *
51
     * @var AdapterInterface
52
     */
53
    private $adapter;
54
 
55
    /**
56
     *
57
     * @var CurrentUserPlugin
58
     */
59
    private $currentUserPlugin;
60
 
61
    /**
62
     *
63
     * @var CurrentNetworkPlugin
64
     */
65
    private $currentNetworkPlugin;
66
 
67
    /**
68
     *
69
     * @var array
70
     */
71
    private $routesAuthorized = [];
72
 
73
    /**
74
     *
75
     * @var boolean
76
     */
23 efrain 77
    private $authByOTP = false;
1 efrain 78
 
23 efrain 79
    /**
80
     *
81
     * @var boolean
82
     */
83
    private $authByJWT = false;
1 efrain 84
 
23 efrain 85
 
1 efrain 86
    /**
87
     *
88
     * @var array
89
     */
90
    private $config;
91
 
92
 
93
 
94
    public function init(ModuleManager $moduleManager)
95
    {
96
        $events = $moduleManager->getEventManager();
97
        $events->attach(ModuleEvent::EVENT_MERGE_CONFIG, array($this, 'onMergeConfig'));
98
    }
99
 
100
    public function onMergeConfig(ModuleEvent $event)
101
    {
102
        $configListener = $event->getConfigListener();
103
        $this->config   = $configListener->getMergedConfig(false);
104
 
105
        $reader = new Ini();
106
        $data = $reader->fromFile('config/leaderslinked.ini');
107
 
108
        $prefix = 'leaderslinked';
109
        foreach($data as $section => $pairs)
110
        {
111
            foreach($pairs as $key => $value)
112
            {
113
                $this->config[$prefix . '.' . $section . '.' . $key] = $value;
114
            }
115
        }
116
        $configListener->setMergedConfig($this->config);
117
    }
118
 
119
 
120
    public function getConfig() : array
121
    {
122
        return include __DIR__ . '/../config/module.config.php';
123
    }
124
 
125
    public function onBootstrap(MvcEvent $event)
126
    {
127
        $serviceManager = $event->getApplication()->getServiceManager();
128
        $adapter = $serviceManager->get('leaders-linked-db');
129
       // $logger          = $serviceManager->get('Zend\Log\Logger');
130
 
131
 
132
        $session = $serviceManager->get('leaders-linked-session');
133
        $session->start();
134
 
135
 
136
        $translator = $serviceManager->get('MvcTranslator');
137
        $translator->addTranslationFile(
138
            'phpArray',
139
            __DIR__ . '/i18n/validate.php',
140
            'default'
141
            );
142
 
143
        $translator->addTranslationFile(
144
            'phpArray',
145
            __DIR__ . '/i18n/spanish.php',
146
            'default'
147
            );
148
 
149
        \Laminas\Validator\AbstractValidator::setDefaultTranslator($translator);
150
 
151
 
152
        $headers  = $event->getRequest()->getHeaders();
153
        if($headers->has('token')) {
154
            $device_uuid = Functions::sanitizeFilterString($headers->get('token')->getFieldValue());
155
        } else {
156
            $device_uuid = '';
157
        }
158
        if($headers->has('secret')) {
159
            $password =  Functions::sanitizeFilterString($headers->get('secret')->getFieldValue());
160
        } else {
161
            $password = '';
162
        }
163
        if($headers->has('rand')) {
164
            $rand =  Functions::sanitizeFilterString($headers->get('rand')->getFieldValue());
165
        } else {
166
            $rand = 0;
167
        }
168
        if($headers->has('created')) {
169
            $timestamp =  Functions::sanitizeFilterString($headers->get('created')->getFieldValue());
170
        } else {
171
            $timestamp = 0;
172
        }
173
 
174
 
4 efrain 175
 
1 efrain 176
        $this->currentNetworkPlugin = new CurrentNetworkPlugin($adapter);
177
        if(!$this->currentNetworkPlugin->hasNetwork()) {
43 efrain 178
 
1 efrain 179
            $response = $event->getResponse();
43 efrain 180
            $code = 401;
181
            $content = json_encode(['success' => false, 'data' => '401 Unauthorized - Private network - not found', 'fatal' => true]);
182
            $this->sendResponse($response, $code, $content);
183
 
1 efrain 184
        }
185
 
186
        if($this->currentNetworkPlugin->getNetwork()->status == Network::STATUS_INACTIVE) {
43 efrain 187
 
1 efrain 188
            $response = $event->getResponse();
43 efrain 189
            $code = 401;
190
            $content = json_encode(['success' => false, 'data' => '401 Unauthorized - Private network - inactive', 'fatal' => true]);
191
            $this->sendResponse($response, $code, $content);
192
 
1 efrain 193
        }
194
 
195
 
23 efrain 196
        $this->authByOTP = false;
1 efrain 197
        if($device_uuid && $password && $rand && $timestamp) {
23 efrain 198
            $this->authByOTP = true;
1 efrain 199
 
200
 
201
            $tokenAuthAdapter = new AuthTokenAdapter($adapter);
202
            $tokenAuthAdapter->setData($device_uuid, $password, $timestamp, $rand);
203
 
204
            $authService = new AuthenticationService();
205
            $result = $authService->authenticate($tokenAuthAdapter);
206
            if($result->getCode() != \Laminas\Authentication\Result::SUCCESS) {
43 efrain 207
 
1 efrain 208
                $response = $event->getResponse();
43 efrain 209
                $code = 200;
210
                $content = json_encode(['success' => false, 'data' => $result->getMessages()[0], 'fatal' => true]);
211
                $this->sendResponse($response, $code, $content);
212
 
1 efrain 213
            }
214
 
215
        }
23 efrain 216
 
217
        $this->authByJWT = false;
218
        $headers = getallheaders();
34 efrain 219
 
220
        if(!empty($headers['authorization']) || !empty($headers['Authorization'])) {
23 efrain 221
 
34 efrain 222
            $token = trim(empty($headers['authorization']) ? $headers['Authorization'] : $headers['authorization']);
223
 
224
 
23 efrain 225
            if (substr($token, 0, 6 ) == 'Bearer') {
43 efrain 226
 
23 efrain 227
 
228
                $token = trim(substr($token, 7));
229
 
230
                if(!empty($this->config['leaderslinked.jwt.key'])) {
231
                    $key = $this->config['leaderslinked.jwt.key'];
232
 
233
 
234
                    try {
235
                        $payload = JWT::decode($token, new Key($key, 'HS256'));
236
 
237
 
238
                        if(empty($payload->iss) || $payload->iss != $_SERVER['HTTP_HOST']) {
43 efrain 239
 
23 efrain 240
                            $response = $event->getResponse();
43 efrain 241
                            $code = 401;
242
                            $content = json_encode(['success' => false, 'data' => 'Unauthorized - JWT - Wrong server', 'fatal' => true]);
243
                            $this->sendResponse($response, $code, $content);
23 efrain 244
 
43 efrain 245
 
246
 
23 efrain 247
                        }
248
 
249
                        $uuid = empty($payload->uuid) ? '' : $payload->uuid;
250
                        if($uuid) {
251
                            $jwtTokenMapper = JwtTokenMapper::getInstance($adapter);
252
                            $jwtToken = $jwtTokenMapper->fetchOneByUuid($uuid);
253
                            if($jwtToken) {
254
 
255
                                $_SESSION['aes'] = $jwtToken->aes;
256
 
257
                                if($jwtToken->user_id) {
258
                                    $authByUserId = new AuthUserIdAdapter($adapter);
259
                                    $authByUserId->setData($jwtToken->user_id);
260
 
261
                                    $authService = new AuthenticationService();
262
                                    $result = $authService->authenticate($authByUserId);
263
                                    if($result->getCode() != \Laminas\Authentication\Result::SUCCESS) {
43 efrain 264
 
23 efrain 265
                                        $response = $event->getResponse();
43 efrain 266
                                        $code = 401;
267
                                        $content = json_encode(['success' => false, 'data' => $result->getMessages()[0], 'fatal' => true]);
268
                                        $this->sendResponse($response, $code, $content);
23 efrain 269
 
270
                                    }
24 efrain 271
 
272
                                    $this->authByJWT = true;
23 efrain 273
                                }
274
 
275
 
276
                            } else {
277
                                $response = $event->getResponse();
43 efrain 278
                                $code = 401;
279
                                $content = json_encode(['success' => false, 'data' => 'Unauthorized - JWT - Expired', 'fatal' => true]);
280
                                $this->sendResponse($response, $code, $content);
281
 
23 efrain 282
                            }
283
 
284
                        }
285
                    } catch(\Exception $e) {
43 efrain 286
 
23 efrain 287
                        $response = $event->getResponse();
43 efrain 288
                        $code = 401;
289
                        $content = json_encode(['success' => false, 'data' => 'Unauthorized - JWT - Wrong key', 'fatal' => true]);
290
                        $this->sendResponse($response, $code, $content);
291
 
23 efrain 292
                    }
293
                }
294
            }
295
        }
1 efrain 296
 
297
 
298
 
299
        if(empty($_SERVER['REDIRECT_URL'])) {
300
            if(empty($_SERVER['REQUEST_URI'])) {
301
                $routeName = '';
302
 
303
            } else {
304
                $routeName = $_SERVER['REQUEST_URI'];
305
            }
306
 
307
        } else {
308
            $routeName = $_SERVER['REDIRECT_URL'];
309
 
310
        }
311
 
312
 
313
        $routeName = strtolower(trim($routeName));
314
        if(strlen($routeName) > 0 && substr($routeName, 0, 1) == '/') {
315
            $routeName = substr($routeName, 1);
316
        }
317
 
318
        $this->currentUserPlugin = new CurrentUserPlugin($adapter);
319
 
320
 
23 efrain 321
        if($this->authByOTP && substr($routeName, 0, 8) == 'services') {
1 efrain 322
            $checkUserForNetwork = false;
323
        } else {
324
            if($this->currentUserPlugin->hasIdentity()) {
325
 
326
                $checkUserForNetwork = true;
327
            } else {
328
                $checkUserForNetwork = false;
329
            }
330
        }
331
 
332
        if($checkUserForNetwork) {
333
            if(!$routeName || in_array($routeName, ['signout', 'signin', 'home'])) {
334
                $checkUserForNetwork = false;
335
            }
336
        }
337
 
338
        if($checkUserForNetwork) {
339
 
340
 
341
 
342
            if($this->currentUserPlugin->getUser()->network_id != $this->currentNetworkPlugin->getNetworkId()) {
343
                $response = $event->getResponse();
344
                $this->sendResponse($response, ['success' => false, 'data' => '401 Unauthorized - The user is not part of this private network', 'fatal' => true]);
345
                exit;
346
            }
347
        }
348
 
349
 
350
 
351
        $this->initAcl($event);
352
        $eventManager = $event->getApplication()->getEventManager();
353
        $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, [$this,'onDispatchError'], 0);
354
        $eventManager->attach(MvcEvent::EVENT_RENDER_ERROR, [$this,'onRenderError'], 0);
355
 
356
        $sharedManager = $eventManager->getSharedManager();
357
        $sharedManager->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH, [$this, 'authPreDispatch'], 100);
358
        $sharedManager->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH, [$this, 'authPosDispatch'], -100);
359
    }
360
 
361
    public function initAcl(MvcEvent $event)
362
    {
363
 
364
        $serviceManager = $event->getApplication()->getServiceManager();
365
        $adapter = $serviceManager->get('leaders-linked-db');
366
 
367
 
368
        require_once   (dirname(__DIR__) . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'acl.config.php');
369
 
370
 
371
        $this->acl = new Acl();
372
        $resources = getAclResources();
373
 
374
        foreach($resources as $resourceName)
375
        {
376
            $this->acl->addResource(new GenericResource($resourceName));
377
        }
378
 
379
        $usertypes = getAclUsertype();
380
        foreach($usertypes as $usertype => $resources)
381
        {
382
            $this->acl->addRole(new GenericRole($usertype));
383
            foreach ($resources as $resourceName)
384
            {
385
                $this->acl->allow($usertype, $resourceName);
386
            }
387
        }
388
 
389
 
390
 
391
        if($this->currentUserPlugin->hasIdentity() && $this->currentUserPlugin->getUser()->is_super_user == User::IS_SUPER_USER_YES) {
392
 
393
            $resources =  getAclSuperAdmin();
394
            foreach($resources as $resourceName)
395
            {
396
                $this->acl->allow(UserType::ADMIN, $resourceName);
397
            }
398
        }
399
 
400
 
401
 
402
        $allowMyCoach = false;
403
        $allowKnowledgeArea = false;
404
        $allowDailyPulse = false;
405
 
406
 
407
 
408
        $companyMapper = CompanyMapper::getInstance($adapter);
409
        $company = $companyMapper->fetchDefaultForNetworkByNetworkId($this->currentNetworkPlugin->getNetwork()->id);
410
 
411
 
412
        if($company) {
413
 
414
            $companyServiceMapper = CompanyServiceMapper::getInstance($adapter);
415
            $companyService = $companyServiceMapper->fetchOneActiveByCompanyIdAndServiceId($company->id, Service::DAILY_PULSE);
416
 
417
 
418
            $companyUserMapper = CompanyUserMapper::getInstance($adapter);
419
            $companyUser = $companyUserMapper->fetchOneAcceptedByCompanyIdAndUserId($company->id,  $this->currentUserPlugin->getUserId());
420
 
421
 
422
 
423
 
424
            if($companyService) {
425
 
426
                $dailyPulseMapper = DailyPulseMapper::getInstance($adapter);
427
                $dailyPulse = $dailyPulseMapper->fetchOneByCompanyId($company->id);
428
 
429
                if($dailyPulse) {
430
                    $privacy = $dailyPulse->privacy;
431
 
432
                } else {
433
                    $privacy = DailyPulse::PRIVACY_COMPANY;
434
                }
435
 
436
                if($privacy ==  DailyPulse::PRIVACY_PUBLIC) {
437
                    $allowDailyPulse = true;
438
                } else {
439
                    $allowDailyPulse = !empty($companyUser);
440
                }
441
 
442
 
443
            }
444
 
445
            $job_description_ids = [];
446
 
447
            $organizationPositionMapper = OrganizationPositionMapper::getInstance($adapter);
448
            $records = $organizationPositionMapper->fetchAllByCompanyIdAndEmployeeId($company->id,  $this->currentUserPlugin->getUserId());
449
            foreach($records as $record)
450
            {
451
                array_push($job_description_ids, $record->job_description_id);
452
            }
453
 
454
 
455
            $companyService = $companyServiceMapper->fetchOneActiveByCompanyIdAndServiceId($company->id, Service::KNOWLEDGE_AREA);
456
            if($companyService) {
457
                if($job_description_ids) {
458
 
459
 
460
                    $knowledgeAreaCategoryJobDescriptionMapper = KnowledgeAreaCategoryJobDescriptionMapper::getInstance($adapter);
461
                    $records = $knowledgeAreaCategoryJobDescriptionMapper->fetchAllByCompanyIdAndJobDescriptionIds($company->id, $job_description_ids);
462
 
463
                    if(!empty($records)) {
464
                        $allowKnowledgeArea = true;
465
                    }
466
 
467
                }
468
 
469
                if($companyUser && !$allowKnowledgeArea) {
470
                    $knowledgeAreaCategoryUserMapper = KnowledgeAreaCategoryUserMapper::getInstance($adapter);
471
                    $records = $knowledgeAreaCategoryUserMapper->fetchAllByUserId($companyUser->user_id);
472
                    if(!empty($records)) {
473
                        $allowKnowledgeArea = true;
474
                    }
475
                }
476
            }
477
 
478
            $companyService = $companyServiceMapper->fetchOneActiveByCompanyIdAndServiceId($company->id, Service::MY_COACH);
479
            if($companyService) {
480
 
481
 
482
                if($job_description_ids) {
483
 
484
 
485
                    $myCoachCategoryJobDescriptionMapper = MyCoachCategoryJobDescriptionMapper::getInstance($adapter);
486
                    $records = $myCoachCategoryJobDescriptionMapper->fetchAllByCompanyIdAndJobDescriptionIds($company->id, $job_description_ids);
487
 
488
                    if(!empty($records)) {
489
                        $allowKnowledgeArea = true;
490
                    }
491
 
492
                }
493
 
494
                if($companyUser && !$allowMyCoach) {
495
                    $myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($adapter);
496
                    $records = $myCoachCategoryUserMapper->fetchAllByUserId($companyUser->user_id);
497
                    if(!empty($records)) {
498
                        $allowMyCoach = true;
499
                    }
500
 
501
 
502
                }
503
            }
504
 
505
        } else {
506
            $companyUser = '';
507
        }
508
 
509
 
510
        $usertype = $this->currentUserPlugin->getUserTypeId();
511
        if($allowDailyPulse) {
512
            $resources = getAclDailyPulse();
513
            foreach($resources as $resourceName)
514
            {
515
                $this->acl->allow($usertype, $resourceName);
516
            }
517
        }
518
 
519
        if($allowKnowledgeArea) {
520
            $resources = getAclKnowledgeArea();
521
            foreach($resources as $resourceName)
522
            {
523
                $this->acl->allow($usertype, $resourceName);
524
            }
525
        }
526
 
527
        if($allowMyCoach) {
528
            $resources = getAclMyCoach();
529
 
530
 
531
 
532
            foreach($resources as $resourceName)
533
            {
534
                $this->acl->allow($usertype, $resourceName);
535
            }
536
 
537
        }
538
 
539
 
540
 
541
        if($this->currentNetworkPlugin->getNetwork()->default == Network::DEFAULT_YES) {
542
 
543
            $usertypes = getAclUsertypeDefaultNetwork();
544
            foreach($usertypes as $usertype => $resources)
545
            {
546
 
547
 
548
 
549
                foreach ($resources as $resourceName)
550
                {
551
                    $this->acl->allow($usertype, $resourceName);
552
                }
553
            }
554
 
555
 
556
        } else {
557
 
558
            if($this->currentUserPlugin->hasIdentity()) {
559
 
560
 
561
                if($company) {
562
 
563
 
564
                    if($companyUser) {
565
                        $usertype = $this->currentUserPlugin->getUserTypeId();
566
 
567
                        if($companyUser->creator == CompanyUser::CREATOR_YES) {
568
 
569
                            $resources =  getAclUsertypeOtherNetworkCreator();
570
                            foreach($resources as $resourceName)
571
                            {
572
                                $this->acl->allow($usertype, $resourceName);
573
                            }
574
 
575
                        }
576
                        if($companyUser->creator == CompanyUser::CREATOR_NO) {
577
                            $resources =  getAclUsertypeOtherNetworkNonCreator();
578
                            foreach($resources as $resourceName)
579
                            {
580
                                $this->acl->allow($usertype, $resourceName);
581
                            }
582
                        }
583
                    }
584
                }
585
            }
586
        }
587
 
588
 
589
        $event->getViewModel()->setVariable('acl', $this->acl);
590
 
591
    }
592
 
593
    public function onDispatchError(MvcEvent $event)
594
    {
595
        $this->processError($event);
596
    }
597
 
598
    public function onRenderError(MvcEvent $event)
599
    {
600
        $this->processError($event);
601
    }
602
 
43 efrain 603
    /**
604
     *
605
     * @param \Laminas\Http\Response $response
606
     * @param int $code
607
     * @param string $content
608
     */
609
    public function sendResponse($response, $code, $content)
1 efrain 610
    {
43 efrain 611
 
1 efrain 612
        $headers = $response->getHeaders();
613
        $headers->clearHeaders();
614
        $headers->addHeaderLine('Content-type', 'application/json; charset=UTF-8');
615
 
43 efrain 616
        Functions::addCrossSiteToResponse($response);
617
 
618
        $response->setStatusCode($code);
619
        $response->setContent($content); //json_encode($data));
1 efrain 620
        $response->send();
621
        exit;
622
    }
623
 
624
    public function processError(MvcEvent $event)
625
    {
626
        $error = $event->getError();
627
        if (!$error) {
628
            return;
629
        }
630
 
631
        $response = $event->getResponse();
632
        if('error-exception' == $error) {
633
            $exception = $event->getParam('exception');
634
            error_log($exception->getCode() . ' ' . $exception->getMessage());
635
            error_log($exception->getTraceAsString());
43 efrain 636
 
1 efrain 637
            $response = $event->getResponse();
43 efrain 638
            $code = 500;
639
            $content = json_encode(['success' => false, 'data' => $exception->getCode() . ' ' . $exception->getMessage(), 'fatal' => true]);
640
            $this->sendResponse($response, $code, $content);
1 efrain 641
 
642
        } else if('error-router-no-match' == $error) {
43 efrain 643
 
1 efrain 644
            $response = $event->getResponse();
43 efrain 645
            $code = 404;
646
            $content = json_encode(['success' => false, 'data' => 'error-router-no-match', 'fatal' => true]);
647
            $this->sendResponse($response, $code, $content);
1 efrain 648
 
649
 
650
 
651
        } else if(' error-controller-not-found' == $error) {
43 efrain 652
 
1 efrain 653
            $response = $event->getResponse();
43 efrain 654
            $code = 404;
655
            $content = json_encode(['success' => false, 'data' => 'error-controller-not-found', 'fatal' => true]);
656
            $this->sendResponse($response, $code, $content);
1 efrain 657
 
43 efrain 658
 
1 efrain 659
        } else {
660
            $response = $event->getResponse();
43 efrain 661
            $code = 500;
662
            $content = json_encode(['success' => false, 'data' => $error, 'fatal' => true]);
663
            $this->sendResponse($response, $code, $content);
1 efrain 664
 
43 efrain 665
 
1 efrain 666
        }
667
 
668
        exit;
669
 
670
    }
671
 
672
 
673
    public function authPreDispatch(MvcEvent $event)
674
    {
675
 
676
 
677
 
678
 
679
        $serviceManager = $event->getApplication()->getServiceManager();
680
        $adapter = $serviceManager->get('leaders-linked-db');
681
 
682
        $routeName = $event->getRouteMatch()->getMatchedRouteName();
683
 
684
 
685
        $requestMethod = isset($_SERVER['REQUEST_METHOD']) ? trim(strtoupper($_SERVER['REQUEST_METHOD'])) : '';
686
 
687
        if($requestMethod == 'POST' || $requestMethod == 'PUT' || $requestMethod == 'DELETE') {
688
 
689
 
23 efrain 690
            if($this->authByOTP && substr($routeName, 0, 8) == 'services') {
1 efrain 691
                $exclude = true;
692
            } else {
693
                $exclude = false;
694
 
695
                $usertypes = getAclUsertype();
696
 
697
 
698
                foreach($usertypes[UserType::GUEST] as $resourceName)
699
                {
700
                   if($routeName == $resourceName) {
701
                      $exclude = true;
702
                      break;
703
                    }
704
                }
705
            }
706
 
17 efrain 707
            //$exclude = true;
1 efrain 708
 
709
            if(!$exclude) {
710
                $httpToken = isset($_SERVER['HTTP_X_CSRF_TOKEN']) ? $_SERVER['HTTP_X_CSRF_TOKEN'] : '';
711
                $sessionToken = isset($_SESSION['token']) ? $_SESSION['token'] : uniqid();
712
 
713
                unset($_SESSION['token']);
714
                if ( $httpToken != $sessionToken) {
715
                    $response = $event->getResponse();
716
                    $headers = $response->getHeaders();
717
                    $headers->clearHeaders();
718
                    $headers->addHeaderLine('Content-type', 'application/json; charset=UTF-8');
719
 
720
                    $response->setStatusCode(401);
721
                    $response->setContent(json_encode(['success' => false, 'data' => 'Unauthorized.', 'fatal' => true]));
722
                    $response->send();
723
                    exit;
724
                }
725
 
726
            }
727
        }
728
 
729
 
730
 
731
        if($this->currentUserPlugin->hasIdentity())  {
732
            $user = $this->currentUserPlugin->getUser();
733
            $userTypeId = $user->usertype_id;
734
 
735
 
736
        }  else {
737
 
738
            $userTypeId = UserType::GUEST;
739
        }
740
 
741
 
742
        if($this->acl->isAllowed($userTypeId, $routeName)) {
743
            $user = $this->currentUserPlugin->getUser();
744
 
745
 
746
            if($user) {
747
 
748
                $updateLastActivity = true;
749
                if ('chat' == substr($routeName, 0, 4)) {
750
                    $updateLastActivity = false;
751
                }
752
                if ('inmail' == substr($routeName, 0, 6)) {
753
                    $updateLastActivity = false;
754
                }
755
                if ('check-session' == $routeName) {
756
                    $updateLastActivity = false;
757
                }
758
 
759
 
760
                if($updateLastActivity) {
761
                    $userMapper = UserMapper::getInstance($adapter);
762
                    $userMapper->updateLastActivity($user->id);
763
                }
764
            }
765
 
766
 
767
 
768
        } else {
769
            $response = $event->getResponse();
770
            $headers = $response->getHeaders();
771
            $headers->clearHeaders();
772
            $headers->addHeaderLine('Content-type', 'application/json; charset=UTF-8');
773
 
774
            $response->setStatusCode(401);
775
            $response->setContent(json_encode(['success' => false, 'data' => 'Unauthorized.', 'fatal' => true]));
776
            $response->send();
777
            exit;
778
 
779
 
780
 
781
        }
782
 
783
 
784
    }
785
 
786
 
787
    public function authPosDispatch(MvcEvent $event)
788
    {
789
 
790
    }
791
 
792
 
793
 
794
 
795
}