Proyectos de Subversion LeadersLinked - Services

Rev

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