Proyectos de Subversion LeadersLinked - Services

Rev

Rev 258 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
257 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Library;
5
 
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use LeadersLinked\Mapper\UserMapper;
9
use LeadersLinked\Library\Functions;
10
use LeadersLinked\Model\User;
11
 
12
 
13
class ExternalCredentials
14
{
265 efrain 15
 
257 efrain 16
    /**
17
     *
18
     * @var ExternalCredentials
19
     */
20
    private static $_instancia;
21
 
22
 
23
    /**
24
     *
25
     * @var AdapterInterface
26
     */
27
    private $adapter;
28
 
29
    /**
30
     *
31
     * @var array
32
     */
33
    private $config;
34
 
35
    /**
36
     *
37
     * @var string
38
     */
39
    private $username_xmpp;
40
 
41
    /**
42
     *
43
     * @var string
44
     */
45
    private $password_xmpp;
46
 
265 efrain 47
 
48
    /**
49
     *
50
     * @var string
51
     */
52
    private $username_inmail;
53
 
54
    /**
55
     *
56
     * @var string
57
     */
58
    private $password_inmail;
59
 
257 efrain 60
 
61
 
62
    /**
63
     *
64
     * @param array $config
65
     * @param AdapterInterface $adapter
66
     * @return \LeadersLinked\Library\ExternalCredentials
67
     */
68
    public static function getInstancia($config, $adapter)
69
    {
70
        if(self::$_instancia == null) {
71
            self::$_instancia = new ExternalCredentials($config, $adapter);
72
        }
73
 
74
        return self::$_instancia;
75
    }
76
 
77
 
78
    /**
79
     *
80
     * @param array $config
81
     * @param AdapterInterface $adapter
82
     */
83
    private function __construct($config, $adapter)
84
    {
85
        $this->config = $config;
86
        $this->adapter = $adapter;
87
    }
88
 
89
 
90
    private function checkAndGetUsername($firstname, $lastname)
91
    {
92
 
93
 
94
        $firstname = strtolower(trim($firstname));
95
        if(strpos($firstname, ' ') !== -1) {
96
            $firstname = explode(' ', $firstname);
97
            $firstname = Functions::normalizeString($firstname[0]);
98
        }
99
 
100
        $lastname = Functions::normalizeString($lastname);
101
 
102
        $username = $firstname . '.' . $lastname;
103
        if(strlen($username) > 35) {
104
            $username = substr($username, 0, 30);
105
        }
106
        $username = str_replace('-', '.', $username);
107
        $username = str_replace('..', '.', $username);
108
 
109
 
110
 
111
        $userMapper = UserMapper::getInstance($this->adapter);
112
        $userCheck =  $userMapper->fetchLastLikeUsernameXmpp($username);
113
        if($userCheck) {
114
 
115
            $s = $userCheck->username_xmpp;
116
            $s = substr($s, strlen($username));
117
            $s = str_replace('.', '', $s);
118
 
119
            $count = intval($s , 10);
120
            $count++;
121
 
122
            $username = Functions::normalizeString($username . '.' . $count);
123
            $username = str_replace('..', '.', $username);
124
 
125
 
126
        }
127
 
128
        return $username;
129
 
130
    }
131
 
132
    /**
133
     *
134
     * @param User $user
135
     */
136
    public function completeDataFromNewUser($user)
137
    {
138
        $user->username_xmpp = $this->username_xmpp = $this->checkAndGetUsername($user->first_name, $user->last_name);
139
        $this->password_xmpp  = Functions::generatePassword(32);
140
 
141
 
265 efrain 142
        $networkMapper = \LeadersLinked\Mapper\NetworkMapper::getInstance($this->adapter);
143
        $network =  $networkMapper->fetchOne($user->network_id);
144
 
145
 
146
        $user->username_inmail = $this->username_inmail = $user->username_xmpp . '@' . $network->inmail_domain;
147
 
148
        $salt = Functions::generatePassword(16);
149
        $this->password_inmail  = Functions::generatePassword(32);
150
 
151
 
152
 
153
 
257 efrain 154
        $user->external_credentials = [
265 efrain 155
            'password_xmpp' =>  $this->password_xmpp,
156
            'password_inmail' => $this->password_inmail
257 efrain 157
        ];
158
 
265 efrain 159
        $user->password_inmail = crypt($this->password_inmail, '$6$' . $salt);
160
        $user->password_xmpp = md5( $this->password_xmpp);
257 efrain 161
    }
162
 
163
    /**
164
     *
165
     * @param int $id
166
     */
167
    public function getUserBy($id)
168
    {
169
        $this->username_xmpp = '';
170
        $this->password_xmpp = '';
265 efrain 171
        $this->username_inmail = '';
172
        $this->password_inmail = '';
257 efrain 173
 
174
 
175
        $userMapper = UserMapper::getInstance($this->adapter);
176
        $user = $userMapper->fetchOne($id);
177
        if($user) {
178
 
179
            if($user->status == User::STATUS_DELETED) {
180
                return;
181
            }
182
 
265 efrain 183
            $networkMapper = \LeadersLinked\Mapper\NetworkMapper::getInstance($this->adapter);
184
            $network =  $networkMapper->fetchOne($user->network_id);
185
 
257 efrain 186
            $needSave = false;
187
 
188
            $aes = $this->config['leaderslinked.external_credentials.aes'];
189
 
190
            if($user->external_credentials) {
191
 
192
                $data = AesCipher::decrypt($aes, $user->external_credentials);
193
 
194
 
195
                $external_credentials = unserialize($data->getData());
196
                if(!$external_credentials) {
197
                    $external_credentials = [];
198
                }
199
            } else {
200
                $external_credentials = [];
201
            }
202
 
203
            if(!empty($external_credentials['password_xmpp'])) {
204
                $this->password_xmpp = $external_credentials['password_xmpp'];
205
            }
206
 
265 efrain 207
            if(!empty($external_credentials['password_inmail'])) {
208
                $this->password_inmail = $external_credentials['password_inmail'];
209
            }
257 efrain 210
 
265 efrain 211
 
257 efrain 212
            if(!$user->username_xmpp || is_numeric($user->username_xmpp)) {
213
                $user->username_xmpp = $this->username_xmpp = $this->checkAndGetUsername($user->first_name, $user->last_name);
214
                $needSave = true;
215
 
216
            }
217
 
265 efrain 218
            if(!$user->username_inmail || is_numeric($user->username_inmail)) {
219
 
220
                if(!is_numeric($user->username_xmpp)) {
221
                    $user->username_inmail = $user->username_xmpp . '@' . $network->inmail_domain;
222
                    $needSave = true;
223
                }
224
            }
225
 
257 efrain 226
            $this->username_xmpp = $user->username_xmpp;
265 efrain 227
            $this->username_inmail = $user->username_inmail;
257 efrain 228
 
229
            if(!$user->password_xmpp || !$this->password_xmpp) {
230
                $needSave = true;
231
 
232
                $this->password_xmpp  = Functions::generatePassword(32);
233
                $external_credentials['password_xmpp'] =  $this->password_xmpp;
234
 
235
 
258 efrain 236
                $user->password_xmpp = md5( $this->password_xmpp);
257 efrain 237
            }
238
 
265 efrain 239
            if(!$user->password_inmail|| !$this->password_inmail) {
240
                $needSave = true;
241
 
242
                $salt = Functions::generatePassword(16);
243
 
244
                $this->password_inmail  = Functions::generatePassword(32);
245
                $external_credentials['password_inmail'] =  $this->password_inmail;
246
 
247
 
248
                $user->password_inmail = crypt($this->password_inmail, '$6$' . $salt);
249
 
250
            }
257 efrain 251
 
252
        }
253
 
254
        if($needSave) {
255
            $user->external_credentials = AesCipher::encrypt($aes, serialize($external_credentials));
256
            if($userMapper->update($user)) {
257
 
258
            }
259
 
260
        } else {
261
 
262
        }
263
    }
264
 
265
    /**
266
     *
267
     * @return string
268
     */
269
    public function getUsernameXmpp()
270
    {
271
        return $this->username_xmpp;
272
    }
273
 
274
    /**
275
     *
276
     * @return string
277
     */
278
    public function getPasswordXmpp()
279
    {
280
        return $this->password_xmpp;
281
    }
282
 
265 efrain 283
    /**
284
     *
285
     * @return string
286
     */
287
    public function getUsernameInmail()
288
    {
289
        return $this->username_inmail;
290
    }
291
 
292
    /**
293
     *
294
     * @return string
295
     */
296
    public function getPasswordInmail()
297
    {
298
        return $this->password_inmail;
299
    }
300
 
301
 
302
 
257 efrain 303
}