Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 7134 | Rev 7141 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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