Proyectos de Subversion LeadersLinked - Services

Rev

Rev 258 | Ir a la última revisión | | 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
{
15
    /**
16
     *
17
     * @var ExternalCredentials
18
     */
19
    private static $_instancia;
20
 
21
 
22
    /**
23
     *
24
     * @var AdapterInterface
25
     */
26
    private $adapter;
27
 
28
    /**
29
     *
30
     * @var array
31
     */
32
    private $config;
33
 
34
    /**
35
     *
36
     * @var string
37
     */
38
    private $username_xmpp;
39
 
40
    /**
41
     *
42
     * @var string
43
     */
44
    private $password_xmpp;
45
 
46
 
47
 
48
    /**
49
     *
50
     * @param array $config
51
     * @param AdapterInterface $adapter
52
     * @return \LeadersLinked\Library\ExternalCredentials
53
     */
54
    public static function getInstancia($config, $adapter)
55
    {
56
        if(self::$_instancia == null) {
57
            self::$_instancia = new ExternalCredentials($config, $adapter);
58
        }
59
 
60
        return self::$_instancia;
61
    }
62
 
63
 
64
    /**
65
     *
66
     * @param array $config
67
     * @param AdapterInterface $adapter
68
     */
69
    private function __construct($config, $adapter)
70
    {
71
        $this->config = $config;
72
        $this->adapter = $adapter;
73
    }
74
 
75
 
76
    private function checkAndGetUsername($firstname, $lastname)
77
    {
78
 
79
 
80
        $firstname = strtolower(trim($firstname));
81
        if(strpos($firstname, ' ') !== -1) {
82
            $firstname = explode(' ', $firstname);
83
            $firstname = Functions::normalizeString($firstname[0]);
84
        }
85
 
86
        $lastname = Functions::normalizeString($lastname);
87
 
88
        $username = $firstname . '.' . $lastname;
89
        if(strlen($username) > 35) {
90
            $username = substr($username, 0, 30);
91
        }
92
        $username = str_replace('-', '.', $username);
93
        $username = str_replace('..', '.', $username);
94
 
95
 
96
 
97
        $userMapper = UserMapper::getInstance($this->adapter);
98
        $userCheck =  $userMapper->fetchLastLikeUsernameXmpp($username);
99
        if($userCheck) {
100
 
101
            $s = $userCheck->username_xmpp;
102
            $s = substr($s, strlen($username));
103
            $s = str_replace('.', '', $s);
104
 
105
            $count = intval($s , 10);
106
            $count++;
107
 
108
            $username = Functions::normalizeString($username . '.' . $count);
109
            $username = str_replace('..', '.', $username);
110
 
111
 
112
        }
113
 
114
        return $username;
115
 
116
    }
117
 
118
    /**
119
     *
120
     * @param User $user
121
     */
122
    public function completeDataFromNewUser($user)
123
    {
124
        $user->username_xmpp = $this->username_xmpp = $this->checkAndGetUsername($user->first_name, $user->last_name);
125
        $this->password_xmpp  = Functions::generatePassword(32);
126
 
127
 
128
        $user->external_credentials = [
129
            'password_xmpp' =>  $this->password_xmpp
130
        ];
131
 
132
 
133
        $user->password_xmpp = sha1( $this->password_xmpp);
134
    }
135
 
136
    /**
137
     *
138
     * @param int $id
139
     */
140
    public function getUserBy($id)
141
    {
142
        $this->username_xmpp = '';
143
        $this->password_xmpp = '';
144
 
145
 
146
        $userMapper = UserMapper::getInstance($this->adapter);
147
        $user = $userMapper->fetchOne($id);
148
        if($user) {
149
 
150
            if($user->status == User::STATUS_DELETED) {
151
                return;
152
            }
153
 
154
            $needSave = false;
155
 
156
            $aes = $this->config['leaderslinked.external_credentials.aes'];
157
 
158
            if($user->external_credentials) {
159
 
160
                $data = AesCipher::decrypt($aes, $user->external_credentials);
161
 
162
 
163
                $external_credentials = unserialize($data->getData());
164
                if(!$external_credentials) {
165
                    $external_credentials = [];
166
                }
167
            } else {
168
                $external_credentials = [];
169
            }
170
 
171
            if(!empty($external_credentials['password_xmpp'])) {
172
                $this->password_xmpp = $external_credentials['password_xmpp'];
173
            }
174
 
175
 
176
            if(!$user->username_xmpp || is_numeric($user->username_xmpp)) {
177
                $user->username_xmpp = $this->username_xmpp = $this->checkAndGetUsername($user->first_name, $user->last_name);
178
                $needSave = true;
179
 
180
            }
181
 
182
            $this->username_xmpp = $user->username_xmpp;
183
 
184
            if(!$user->password_xmpp || !$this->password_xmpp) {
185
                $needSave = true;
186
 
187
                $this->password_xmpp  = Functions::generatePassword(32);
188
                $external_credentials['password_xmpp'] =  $this->password_xmpp;
189
 
190
 
191
                $user->password_xmpp = sha1( $this->password_xmpp);
192
            }
193
 
194
 
195
        }
196
 
197
        if($needSave) {
198
            $user->external_credentials = AesCipher::encrypt($aes, serialize($external_credentials));
199
            if($userMapper->update($user)) {
200
 
201
            }
202
 
203
        } else {
204
 
205
        }
206
    }
207
 
208
    /**
209
     *
210
     * @return string
211
     */
212
    public function getUsernameXmpp()
213
    {
214
        return $this->username_xmpp;
215
    }
216
 
217
    /**
218
     *
219
     * @return string
220
     */
221
    public function getPasswordXmpp()
222
    {
223
        return $this->password_xmpp;
224
    }
225
 
226
}