Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3364 | Rev 3649 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 3364 Rev 3639
Línea 1... Línea 1...
1
<?php
1
<?php
2
declare(strict_types=1);
2
declare(strict_types=1);
Línea 3... Línea 3...
3
 
3
 
Línea -... Línea 4...
-
 
4
namespace LeadersLinked\Controller;
-
 
5
 
-
 
6
use Nullix\CryptoJsAes\CryptoJsAes;
4
namespace LeadersLinked\Controller;
7
use GeoIp2\Database\Reader As GeoIp2Reader;
5
 
8
 
6
use Laminas\Authentication\AuthenticationService;
9
use Laminas\Authentication\AuthenticationService;
7
use Laminas\Authentication\Result as AuthResult;
10
use Laminas\Authentication\Result as AuthResult;
8
use Laminas\Db\Adapter\AdapterInterface;
11
use Laminas\Db\Adapter\AdapterInterface;
9
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
12
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
10
use Laminas\Http\Header\SetCookie;
13
use Laminas\Http\Header\SetCookie;
11
use Laminas\Mvc\Controller\AbstractActionController;
14
use Laminas\Mvc\Controller\AbstractActionController;
12
use Laminas\Log\LoggerInterface;
15
use Laminas\Log\LoggerInterface;
13
use Laminas\View\Model\ViewModel;
-
 
-
 
16
use Laminas\View\Model\ViewModel;
14
use Laminas\View\Model\JsonModel;
17
use Laminas\View\Model\JsonModel;
15
use GeoIp2\Database\Reader As GeoIp2Reader;
18
 
16
use LeadersLinked\Form\Auth\SigninForm;
19
use LeadersLinked\Form\Auth\SigninForm;
17
use LeadersLinked\Form\Auth\ResetPasswordForm;
20
use LeadersLinked\Form\Auth\ResetPasswordForm;
18
use LeadersLinked\Form\Auth\ForgotPasswordForm;
-
 
-
 
21
use LeadersLinked\Form\Auth\ForgotPasswordForm;
19
use LeadersLinked\Form\Auth\SignupForm;
22
use LeadersLinked\Form\Auth\SignupForm;
20
use LeadersLinked\Authentication\AuthAdapter;
23
 
-
 
24
use LeadersLinked\Mapper\ConnectionMapper;
-
 
25
use LeadersLinked\Mapper\EmailTemplateMapper;
-
 
26
use LeadersLinked\Mapper\NetworkMapper;
21
use LeadersLinked\Mapper\UserMapper;
27
use LeadersLinked\Mapper\UserMapper;
22
use LeadersLinked\Mapper\EmailTemplateMapper;
28
 
23
use LeadersLinked\Model\User;
29
use LeadersLinked\Model\User;
24
use LeadersLinked\Model\UserType;
30
use LeadersLinked\Model\UserType;
25
use LeadersLinked\Library\QueueEmail;
31
use LeadersLinked\Library\QueueEmail;
Línea 31... Línea 37...
31
use LeadersLinked\Mapper\UserIpMapper;
37
use LeadersLinked\Mapper\UserIpMapper;
32
use LeadersLinked\Model\UserIp;
38
use LeadersLinked\Model\UserIp;
33
use LeadersLinked\Form\Auth\MoodleForm;
39
use LeadersLinked\Form\Auth\MoodleForm;
34
use LeadersLinked\Library\Rsa;
40
use LeadersLinked\Library\Rsa;
35
use LeadersLinked\Library\Image;
41
use LeadersLinked\Library\Image;
-
 
42
 
-
 
43
use LeadersLinked\Authentication\AuthAdapter;
36
use LeadersLinked\Authentication\AuthEmailAdapter;
44
use LeadersLinked\Authentication\AuthEmailAdapter;
37
use Nullix\CryptoJsAes\CryptoJsAes;
-
 
-
 
45
 
38
use LeadersLinked\Model\UserPassword;
46
use LeadersLinked\Model\UserPassword;
39
use LeadersLinked\Mapper\ConnectionMapper;
-
 
-
 
47
 
40
use LeadersLinked\Model\Connection;
48
use LeadersLinked\Model\Connection;
-
 
49
use LeadersLinked\Authentication\AuthImpersonateAdapter;
Línea 41... Línea 50...
41
 
50
 
42
 
51
 
43
class AuthController extends AbstractActionController
52
class AuthController extends AbstractActionController
Línea 90... Línea 99...
90
 
99
 
Línea 91... Línea 100...
91
        
100
        
92
        $request = $this->getRequest();
-
 
-
 
101
        $request = $this->getRequest();
-
 
102
        
Línea 93... Línea 103...
93
        
103
        if($request->isPost()) {
94
        if($request->isPost()) {
104
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
Línea 123... Línea 133...
123
                $email      = $dataPost['email'];
133
                $email      = $dataPost['email'];
124
                $password   = $dataPost['password'];
134
                $password   = $dataPost['password'];
125
                $remember   = $dataPost['remember'];
135
                $remember   = $dataPost['remember'];
Línea 126... Línea 136...
126
                
136
                
127
                $authAdapter = new AuthAdapter($this->adapter, $this->logger);
137
                $authAdapter = new AuthAdapter($this->adapter, $this->logger);
128
                $authAdapter->setData($email, $password);
138
                $authAdapter->setData($email, $password, $currentNetwork->id);
Línea 129... Línea 139...
129
                $authService = new AuthenticationService();
139
                $authService = new AuthenticationService();
130
                
140
                
Línea 524... Línea 534...
524
        }
534
        }
525
    }
535
    }
Línea 526... Línea 536...
526
    
536
    
527
    public function signoutAction()
537
    public function signoutAction()
528
    {
538
    {
-
 
539
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
540
        $currentUser = $currentUserPlugin->getRawUser();
-
 
541
        if($currentUserPlugin->hasImpersonate()) {
-
 
542
            
-
 
543
            
-
 
544
            $userMapper = UserMapper::getInstance($this->adapter);
-
 
545
            $userMapper->leaveImpersonate($currentUser->id);
-
 
546
            
-
 
547
            $networkMapper = NetworkMapper::getInstance($this->adapter);
-
 
548
            $network = $networkMapper->fetchOne($currentUser->network_id);
-
 
549
            
-
 
550
            
-
 
551
            if(!$currentUser->one_time_password) {
-
 
552
                $one_time_password = Functions::generatePassword(25);
-
 
553
                
-
 
554
                $currentUser->one_time_password = $one_time_password;
-
 
555
                
-
 
556
                $userMapper = UserMapper::getInstance($this->adapter);
-
 
557
                $userMapper->updateOneTimePassword($currentUser, $one_time_password);
-
 
558
            }
-
 
559
            
-
 
560
            
-
 
561
            $sandbox = $this->config['leaderslinked.runmode.sandbox'];
-
 
562
            if($sandbox) {
-
 
563
                $salt = $this->config['leaderslinked.backend.sandbox_salt'];
-
 
564
            } else {
-
 
565
                $salt = $this->config['leaderslinked.backend.production_salt'];
-
 
566
            }
-
 
567
            
-
 
568
            
-
 
569
            
-
 
570
            
-
 
571
            $rand = 1000 + mt_rand(1, 999);
-
 
572
            $timestamp = time();
-
 
573
            $password = md5($currentUser->one_time_password . '-' . $rand . '-' . $timestamp . '-' . $salt);
-
 
574
            
-
 
575
            $params = [
-
 
576
                'user_uuid' => $currentUser->uuid,
-
 
577
                'password' => $password,
-
 
578
                'rand' => $rand,
-
 
579
                'time' => $timestamp,
-
 
580
            ];
-
 
581
            
-
 
582
            $currentUserPlugin->clearIdentity();
-
 
583
            $url = 'https://'. $network->main_hostname . '/signin/impersonate' . '?' . http_build_query($params);
-
 
584
            return $this->redirect()->toUrl($url);
-
 
585
            
-
 
586
            
-
 
587
            
-
 
588
        } else {
-
 
589
            
529
        $currentUser = $this->plugin('currentUserPlugin');
590
            
530
        if($currentUser->hasIdentity()) {
591
            if($currentUserPlugin->hasIdentity()) {
531
 
592
    
-
 
593
                $this->logger->info('Desconexión de LeadersLinked', ['user_id' => $currentUserPlugin->getUserId(), 'ip' => Functions::getUserIP()]);
-
 
594
            }
-
 
595
            $authService = new \Laminas\Authentication\AuthenticationService();
-
 
596
            $authService->clearIdentity();
-
 
597
            
532
            $this->logger->info('Desconexión de LeadersLinked', ['user_id' => $currentUser->getUserId(), 'ip' => Functions::getUserIP()]);
598
            return $this->redirect()->toRoute('home');
533
        }
-
 
534
        $authService = new \Laminas\Authentication\AuthenticationService();
-
 
535
        $authService->clearIdentity();
-
 
536
        
-
 
537
        return $this->redirect()->toRoute('home');
599
        }
Línea 538... Línea 600...
538
    }
600
    }
539
    
601
    
Línea 752... Línea 814...
752
                    } else {
814
                    } else {
753
                        $password_reset_key = md5($user->email. time());
815
                        $password_reset_key = md5($user->email. time());
754
                        $userMapper->updatePasswordResetKey((int) $user->id, $password_reset_key);
816
                        $userMapper->updatePasswordResetKey((int) $user->id, $password_reset_key);
Línea 755... Línea 817...
755
                        
817
                        
756
                        $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
818
                        $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
757
                        $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::ID_RESET_PASSWORD);
819
                        $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::CODE_RESET_PASSWORD);
758
                        if($emailTemplate) {
820
                        if($emailTemplate) {
759
                            $arrayCont = [
821
                            $arrayCont = [
760
                                'firstname'             => $user->first_name,
822
                                'firstname'             => $user->first_name,
761
                                'lastname'              => $user->last_name,
823
                                'lastname'              => $user->last_name,
Línea 1020... Línea 1082...
1020
                        
1082
                        
1021
                        $userPasswordMapper = UserPasswordMapper::getInstance($this->adapter);
1083
                        $userPasswordMapper = UserPasswordMapper::getInstance($this->adapter);
Línea 1022... Línea 1084...
1022
                        $userPasswordMapper->insert($userPassword);
1084
                        $userPasswordMapper->insert($userPassword);
1023
                        
1085
                        
1024
                        $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
1086
                        $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
1025
                        $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::ID_USER_REGISTER);
1087
                        $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::CODE_USER_REGISTER);
1026
                        if($emailTemplate) {
1088
                        if($emailTemplate) {
1027
                            $arrayCont = [
1089
                            $arrayCont = [
1028
                                'firstname'             => $user->first_name,
1090
                                'firstname'             => $user->first_name,
Línea 1499... Línea 1561...
1499
        }
1561
        }
Línea 1500... Línea 1562...
1500
        
1562
        
1501
        return new JsonModel($data);
1563
        return new JsonModel($data);
Línea 1502... Línea -...
1502
    }
-
 
1503
    
-
 
1504
    public function testAction()
-
 
1505
    {
-
 
1506
        $authAdapter = new AuthEmailAdapter($this->adapter);
-
 
1507
        $authAdapter->setData('santiago.olivera@leaderslinked.com');
-
 
1508
        
-
 
1509
        $authService = new AuthenticationService();
-
 
1510
        $authService->setAdapter($authAdapter);
-
 
1511
        
-
 
1512
        $result = $authService->authenticate();
-
 
1513
        
-
 
1514
        
-
 
1515
        if($result->getCode() == AuthResult::SUCCESS) {
-
 
1516
        
-
 
1517
            return $this->redirect()->toRoute('dashboard');
-
 
1518
            
-
 
1519
        } else {
-
 
1520
            return new JsonModel([
-
 
1521
               'success' => true,
-
 
1522
                'data' => $result->getMessages()[0]
-
 
1523
            ]);
-
 
1524
        } 
-
 
1525
        
-
 
1526
        
-
 
1527
        
-
 
1528
    }
1564
    }
1529
    
1565
    
1530
    public function csrfAction()
1566
    public function csrfAction()
1531
    {
1567
    {
Línea 1549... Línea 1585...
1549
            ]);
1585
            ]);
1550
        }
1586
        }
Línea 1551... Línea 1587...
1551
        
1587
        
-
 
1588
        
-
 
1589
    }
-
 
1590
    
-
 
1591
    public function impersonateAction()
-
 
1592
    {
-
 
1593
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
1594
        $currentUser = $currentUserPlugin->getUser();
-
 
1595
        
-
 
1596
        
-
 
1597
        $request = $this->getRequest();
-
 
1598
        if($request->isGet()) {
-
 
1599
            $user_uuid  = filter_var($this->params()->fromQuery('user_uuid'), FILTER_SANITIZE_STRING);
-
 
1600
            $rand       = filter_var($this->params()->fromQuery('rand'), FILTER_SANITIZE_NUMBER_INT);
-
 
1601
            $timestamp  = filter_var($this->params()->fromQuery('time'), FILTER_SANITIZE_NUMBER_INT);
-
 
1602
            $password   = filter_var($this->params()->fromQuery('password'), FILTER_SANITIZE_STRING);
-
 
1603
            
-
 
1604
            
-
 
1605
            if(!$user_uuid || !$rand || !$timestamp || !$password ) {
-
 
1606
                throw new \Exception('ERROR_PARAMETERS_ARE_INVALID');
-
 
1607
            }
-
 
1608
            
-
 
1609
            
-
 
1610
 
-
 
1611
            $currentUserPlugin->clearIdentity();
-
 
1612
            
-
 
1613
            
-
 
1614
            $authAdapter = new AuthImpersonateAdapter($this->adapter, $this->config);
-
 
1615
            $authAdapter->setDataAdmin($user_uuid, $password, $timestamp, $rand);
-
 
1616
            
-
 
1617
            $authService = new AuthenticationService();
-
 
1618
            $result = $authService->authenticate($authAdapter);
-
 
1619
            
-
 
1620
            
-
 
1621
            if($result->getCode() == AuthResult::SUCCESS) {
-
 
1622
                return $this->redirect()->toRoute('dashboard');
-
 
1623
            } else {
-
 
1624
                throw new \Exception($result->getMessages()[0]);
-
 
1625
            }
-
 
1626
        }
-
 
1627
        
-
 
1628
        return new JsonModel([
-
 
1629
            'success' => false,
-
 
1630
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
Línea 1552... Línea 1631...
1552
        
1631
        ]);