Proyectos de Subversion LeadersLinked - Services

Rev

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