Proyectos de Subversion LeadersLinked - Services

Rev

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