Proyectos de Subversion LeadersLinked - Services

Rev

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