Proyectos de Subversion LeadersLinked - Services

Rev

Rev 210 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 210 Rev 604
Línea 1... Línea 1...
1
<?php
1
<?php
-
 
2
 
2
/**
3
/**
3
 * Controlador para manejar todo lo relacionado con las empresas
4
 * Controlador para manejar todo lo relacionado con las empresas
4
 * 
5
 * 
5
 */
6
 */
-
 
7
 
6
declare(strict_types=1);
8
declare(strict_types=1);
Línea 7... Línea 9...
7
 
9
 
Línea 8... Línea 10...
8
namespace LeadersLinked\Controller;
10
namespace LeadersLinked\Controller;
Línea 20... Línea 22...
20
    /**
22
    /**
21
     *
23
     *
22
     * @var \Laminas\Db\Adapter\AdapterInterface
24
     * @var \Laminas\Db\Adapter\AdapterInterface
23
     */
25
     */
24
    private $adapter;
26
    private $adapter;
25
    
27
 
26
    /**
28
    /**
27
     *
29
     *
28
     * @var \LeadersLinked\Cache\CacheInterface
30
     * @var \LeadersLinked\Cache\CacheInterface
29
     */
31
     */
30
    private $cache;
32
    private $cache;
31
    
33
 
32
    
34
 
33
    /**
35
    /**
34
     *
36
     *
35
     * @var \Laminas\Log\LoggerInterface
37
     * @var \Laminas\Log\LoggerInterface
36
     */
38
     */
37
    private $logger;
39
    private $logger;
38
    
40
 
39
    /**
41
    /**
40
     *
42
     *
41
     * @var array
43
     * @var array
42
     */
44
     */
43
    private $config;
45
    private $config;
44
    
46
 
45
    
47
 
46
    /**
48
    /**
47
     *
49
     *
48
     * @var \Laminas\Mvc\I18n\Translator
50
     * @var \Laminas\Mvc\I18n\Translator
49
     */
51
     */
50
    private $translator;
52
    private $translator;
51
    
53
 
52
    
54
 
53
    /**
55
    /**
54
     *
56
     *
55
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
57
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
56
     * @param \LeadersLinked\Cache\CacheInterface $cache
58
     * @param \LeadersLinked\Cache\CacheInterface $cache
57
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
59
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
Línea 64... Línea 66...
64
        $this->cache        = $cache;
66
        $this->cache        = $cache;
65
        $this->logger       = $logger;
67
        $this->logger       = $logger;
66
        $this->config       = $config;
68
        $this->config       = $config;
67
        $this->translator   = $translator;
69
        $this->translator   = $translator;
68
    }
70
    }
69
    
71
 
-
 
72
    /**
-
 
73
     * Maneja la integración con la plataforma Moodle.
-
 
74
     * 
-
 
75
     * Este método procesa las peticiones POST para generar datos de autenticación para la integración con Moodle.
-
 
76
     * Recupera la información del usuario y la red actual, prepara los datos del usuario (nombre, email, imagen),
-
 
77
     * y genera parámetros de autenticación seguros que incluyen:
-
 
78
     * - URL de Moodle (desde la configuración de la red o configuración del entorno)
-
 
79
     * - Datos del usuario encriptados usando RSA
-
 
80
     * - Credenciales de autenticación con marca de tiempo y semilla aleatoria
-
 
81
     * 
-
 
82
     * @return \Laminas\View\Model\JsonModel Retorna una respuesta JSON con:
-
 
83
     *         - success: booleano que indica el estado de la operación
-
 
84
     *         - data: array que contiene los parámetros de integración con Moodle
-
 
85
     *         - En caso de error: retorna ERROR_METHOD_NOT_ALLOWED para peticiones que no son POST
-
 
86
     */
70
    public function indexAction()
87
    public function indexAction()
71
    {
88
    {
-
 
89
        // Obtener la petición HTTP
72
        $request = $this->getRequest();
90
        $request = $this->getRequest();
73
        if($request->isPost()) {
91
        if ($request->isPost()) {
74
  
92
 
-
 
93
            // Obtener información del usuario actual
75
            $currentUserPlugin = $this->plugin('currentUserPlugin');
94
            $currentUserPlugin = $this->plugin('currentUserPlugin');
76
            $currentUser = $currentUserPlugin->getUser();
95
            $currentUser = $currentUserPlugin->getUser();
77
        
96
 
-
 
97
            // Obtener información de la red actual
78
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
98
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
79
            $currentNetwork = $currentNetworkPlugin->getNetwork();
99
            $currentNetwork = $currentNetworkPlugin->getNetwork();
80
            
-
 
81
            
100
 
-
 
101
            // Determinar la URL de Moodle según la configuración
82
            if($currentNetwork->moodle_url) {
102
            if ($currentNetwork->moodle_url) {
83
                $url = $currentNetwork->moodle_url; 
103
                $url = $currentNetwork->moodle_url;
84
            } else {
104
            } else {
85
            
-
 
86
            
-
 
87
                $sandbox = $this->config['leaderslinked.runmode.sandbox'];
105
                $sandbox = $this->config['leaderslinked.runmode.sandbox'];
88
                
106
 
89
                if($sandbox) {
107
                if ($sandbox) {
90
                    $url = $this->config['leaderslinked.moodle.url_sandbox'];
108
                    $url = $this->config['leaderslinked.moodle.url_sandbox'];
91
                } else {
109
                } else {
92
                    $url = $this->config['leaderslinked.moodle.url_production'];
110
                    $url = $this->config['leaderslinked.moodle.url_production'];
93
                }
111
                }
94
            }
112
            }
95
            
113
 
-
 
114
            // Obtener credenciales y configuración RSA
96
            $username = $this->config['leaderslinked.moodle.username'];
115
            $username = $this->config['leaderslinked.moodle.username'];
97
            $password = $this->config['leaderslinked.moodle.password'];
116
            $password = $this->config['leaderslinked.moodle.password'];
98
            $rsa_n = $this->config['leaderslinked.moodle.rsa_n'];
117
            $rsa_n = $this->config['leaderslinked.moodle.rsa_n'];
99
            //$rsa_d = $this->config['leaderslinked.moodle.rsa_d'];
-
 
100
            $rsa_e = $this->config['leaderslinked.moodle.rsa_e'];
118
            $rsa_e = $this->config['leaderslinked.moodle.rsa_e'];
101
            
119
 
-
 
120
            // Obtener información detallada del usuario
102
            $userMapper = UserMapper::getInstance($this->adapter);
121
            $userMapper = UserMapper::getInstance($this->adapter);
103
            $user = $userMapper->fetchOne($currentUser->id);
122
            $user = $userMapper->fetchOne($currentUser->id);
104
            
123
 
-
 
124
            // Procesar la imagen del usuario si existe
105
            if($user->image) {
125
            if ($user->image) {
106
                
-
 
107
                $image = file_get_contents($this->config['leaderslinked.fullpath.user'] .$user->uuid.  DIRECTORY_SEPARATOR . '/' . $user->image); 
126
                $image = file_get_contents($this->config['leaderslinked.fullpath.user'] . $user->uuid .  DIRECTORY_SEPARATOR . '/' . $user->image);
108
                
-
 
109
            } else {
127
            } else {
110
                $image = '';
128
                $image = '';
111
            }
129
            }
112
            
-
 
113
            
130
 
-
 
131
            // Preparar datos del usuario para la integración
114
            $data = new \stdClass();
132
            $data = new \stdClass();
115
            $data->first_name = $user->first_name;
133
            $data->first_name = $user->first_name;
116
            $data->last_name = $user->last_name;
134
            $data->last_name = $user->last_name;
117
            $data->email = $user->email;
135
            $data->email = $user->email;
118
            $data->image_filename = '';
136
            $data->image_filename = '';
119
            $data->image_content = '';
137
            $data->image_content = '';
120
            
138
 
121
            //$data->image_filename =  $user->image;
-
 
122
            //$data->image_content = $image ? base64_encode($image) : ''; 
-
 
123
    
-
 
124
            $data = json_encode($data);
139
            $data = json_encode($data);
125
            
140
 
-
 
141
            // Generar semilla aleatoria y timestamp para la autenticación
126
            list($usec, $sec) = explode(' ', microtime());
142
            list($usec, $sec) = explode(' ', microtime());
127
            $seed = intval($sec + ((float) $usec * 100000));
143
            $seed = intval($sec + ((float) $usec * 100000));
128
            
144
 
129
            $timestamp  = date('Y-m-d\TH:i:s');
145
            $timestamp  = date('Y-m-d\TH:i:s');
130
            mt_srand($seed, MT_RAND_MT19937);
146
            mt_srand($seed, MT_RAND_MT19937);
131
            $rand =  mt_rand();
147
            $rand =  mt_rand();
132
            $password  = password_hash($username.'-'. $password. '-' . $rand. '-' . $timestamp, PASSWORD_DEFAULT);
-
 
Línea -... Línea 148...
-
 
148
 
-
 
149
            // Generar contraseña segura para la autenticación
-
 
150
            $password  = password_hash($username . '-' . $password . '-' . $rand . '-' . $timestamp, PASSWORD_DEFAULT);
-
 
151
 
133
 
152
            // Encriptar datos usando RSA
134
            $rsa = Rsa::getInstance();
153
            $rsa = Rsa::getInstance();
Línea -... Línea 154...
-
 
154
            $data = $rsa->encrypt($data, $rsa_e, $rsa_n);
135
            $data = $rsa->encrypt($data, $rsa_e, $rsa_n);
155
 
136
 
156
            // Preparar respuesta exitosa
137
            $response = [
157
            $response = [
138
                'success' => true,
158
                'success' => true,
139
                'data' => [
159
                'data' => [
140
                    'url' => $url,
160
                    'url' => $url,
141
                    'username' => $username,
161
                    'username' => $username,
142
                    'password' => $password,
162
                    'password' => $password,
143
                    'rand' => $rand,
163
                    'rand' => $rand,
144
                    'timestamp' => $timestamp,
-
 
145
                    'data' => base64_encode($data),
164
                    'timestamp' => $timestamp,
146
                
165
                    'data' => base64_encode($data),
147
                ]
-
 
Línea 148... Línea 166...
148
            ];
166
                ]
149
            
-
 
150
 
167
            ];
-
 
168
 
151
            return new JsonModel($response);
169
            return new JsonModel($response);
152
  
170
        } else {
153
        } else {
171
            // Preparar respuesta de error para métodos no permitidos
154
            $data = [
172
            $data = [
155
                'success' => false,
173
                'success' => false,
156
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
174
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
157
            ];
175
            ];
158
            
176
 
159
            return new JsonModel($data);
177
            return new JsonModel($data);
160
        }
178
        }
161
        
-
 
162
        return new JsonModel($data);
-
 
163
    }
-
 
164
    
179
 
165
    
-