Proyectos de Subversion LeadersLinked - Services

Rev

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