Proyectos de Subversion LeadersLinked - Services

Rev

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

Rev Autor Línea Nro. Línea
314 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
 
7
use Laminas\Authentication\AuthenticationService;
8
use Laminas\Authentication\Result as AuthResult;
9
use Laminas\Db\Adapter\AdapterInterface;
10
 
11
use Laminas\Mvc\Controller\AbstractActionController;
12
use Laminas\Log\LoggerInterface;
13
use Laminas\View\Model\JsonModel;
14
 
15
use LeadersLinked\Authentication\AuthAdapter;
16
use LeadersLinked\Mapper\UserMapper;
17
use LeadersLinked\Mapper\EmailTemplateMapper;
18
use LeadersLinked\Model\User;
19
use LeadersLinked\Model\UserType;
20
 
21
use LeadersLinked\Library\AesCipher;
22
use LeadersLinked\Library\AesEncryption;
23
use LeadersLinked\Library\QueueEmail;
24
use LeadersLinked\Library\Functions;
25
use LeadersLinked\Model\EmailTemplate;
26
use LeadersLinked\Mapper\UserPasswordMapper;
27
use LeadersLinked\Mapper\DeviceMapper;
28
use LeadersLinked\Model\Device;
29
use LeadersLinked\Mapper\ApplicationMapper;
30
use LeadersLinked\Model\Application;
31
use LeadersLinked\Validator\PasswordStrengthCheck;
32
 
33
use LeadersLinked\Mapper\CompanyMapper;
34
use LeadersLinked\Model\Company;
35
use LeadersLinked\Mapper\MicrolearningTopicMapper;
36
use LeadersLinked\Mapper\MicrolearningCapsuleMapper;
37
use LeadersLinked\Mapper\MicrolearningSlideMapper;
38
use LeadersLinked\Model\MicrolearningSlide;
39
use LeadersLinked\Mapper\MicrolearningUserLogMapper;
40
use LeadersLinked\Mapper\MicrolearningUserProgressMapper;
41
use LeadersLinked\Mapper\MicrolearningQuizMapper;
42
use LeadersLinked\Mapper\MicrolearningQuestionMapper;
43
use LeadersLinked\Mapper\MicrolearningAnswerMapper;
44
use LeadersLinked\Model\MicrolearningUserProgress;
45
use LeadersLinked\Model\MicrolearningUserLog;
46
use LeadersLinked\Mapper\DeviceHistoryMapper;
47
use LeadersLinked\Model\DeviceHistory;
48
use LeadersLinked\Mapper\PushMapper;
49
use LeadersLinked\Model\Push;
50
use LeadersLinked\Mapper\MicrolearningCapsuleUserMapper;
51
use LeadersLinked\Mapper\CompanyServiceMapper;
52
use LeadersLinked\Model\Service;
53
use LeadersLinked\Model\CompanyService;
54
use LeadersLinked\Model\MicrolearningCapsuleUser;
55
use LeadersLinked\Model\MicrolearningUserQuiz;
56
use LeadersLinked\Mapper\MicrolearningUserQuizMapper;
57
use LeadersLinked\Mapper\MicrolearningUserMapper;
58
use LeadersLinked\Model\MicrolearningUser;
59
use LeadersLinked\Mapper\PushTemplateMapper;
60
use LeadersLinked\Model\PushTemplate;
61
use LeadersLinked\Mapper\SyncLogMapper;
62
use LeadersLinked\Model\SyncLog;
63
use LeadersLinked\Model\MicrolearningExtendUser;
64
use LeadersLinked\Mapper\MicrolearningExtendUserMapper;
65
use LeadersLinked\Model\MicrolearningExtendUserCompany;
66
use LeadersLinked\Mapper\MicrolearningCapsuleCommentMapper;
67
use LeadersLinked\Mapper\MicrolearningExtendUserCompanyMapper;
68
use LeadersLinked\Mapper\MicrolearningExtendUserFunctionMapper;
69
use LeadersLinked\Mapper\MicrolearningExtendUserGroupMapper;
70
use LeadersLinked\Mapper\MicrolearningExtendUserInstitutionMapper;
71
use LeadersLinked\Mapper\MicrolearningExtendUserPartnerMapper;
72
use LeadersLinked\Mapper\MicrolearningExtendUserProgramMapper;
73
use LeadersLinked\Mapper\MicrolearningExtendUserStudentTypeMapper;
74
use LeadersLinked\Mapper\MicrolearningExtendUserSectorMapper;
75
use Nullix\CryptoJsAes\CryptoJsAes;
76
use LeadersLinked\Model\MicrolearningTopic;
77
use LeadersLinked\Model\MicrolearningCapsule;
78
use LeadersLinked\Model\UserDeleted;
79
use LeadersLinked\Mapper\UserDeletedMapper;
80
use LeadersLinked\Mapper\ApplicationVariantMapper;
81
use LeadersLinked\Library\EasyAES;
82
 
83
 
84
class ServiceController extends AbstractActionController
85
{
86
    /**
87
     *
88
     * @var \Laminas\Db\Adapter\AdapterInterface
89
     */
90
    private $adapter;
91
 
92
    /**
93
     *
94
     * @var \LeadersLinked\Cache\CacheInterface
95
     */
96
    private $cache;
97
 
98
 
99
    /**
100
     *
101
     * @var \Laminas\Log\LoggerInterface
102
     */
103
    private $logger;
104
 
105
    /**
106
     *
107
     * @var array
108
     */
109
    private $config;
110
 
111
 
112
    /**
113
     *
114
     * @var \Laminas\Mvc\I18n\Translator
115
     */
116
    private $translator;
117
 
118
 
119
    /**
120
     *
121
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
122
     * @param \LeadersLinked\Cache\CacheInterface $cache
123
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
124
     * @param array $config
125
     * @param \Laminas\Mvc\I18n\Translator $translator
126
     */
127
    public function __construct($adapter, $cache, $logger, $config, $translator)
128
    {
129
        $this->adapter      = $adapter;
130
        $this->cache        = $cache;
131
        $this->logger       = $logger;
132
        $this->config       = $config;
133
        $this->translator   = $translator;
134
    }
135
 
136
    public function indexAction()
137
    {
138
        return new JsonModel(['ok' => false]);
139
    }
140
 
141
    public function signinAction()
142
    {
316 www 143
        $rawdata = file_get_contents("php://input");
144
        error_log('$rawdata = ' . $rawdata );
145
 
314 www 146
        $request = $this->getRequest();
147
 
148
        if($request->isPost()) {
149
 
150
 
151
            $seed   = $this->config['leaderslinked.services.seed'];
152
            $min    = strtotime('-1 day');
153
            $max    = strtotime('+1 day');
154
 
155
 
156
 
157
 
158
            $device_uuid    = Functions::sanitizeFilterString($this->params()->fromPost('device', ''));
159
            $user_uuid      = Functions::sanitizeFilterString($this->params()->fromPost('user', ''));
160
            $rand           = Functions::sanitizeFilterString($this->params()->fromPost('rand', ''));
161
            $timestamp      = Functions::sanitizeFilterString($this->params()->fromPost('timestamp', ''));
162
            $password       = Functions::sanitizeFilterString($this->params()->fromPost('password', ''));
163
            $sync_id        = Functions::sanitizeFilterString($this->params()->fromPost('sync_id', ''));
164
 
165
 
166
            $ok = $device_uuid && strlen($device_uuid) == 36;
167
            $ok = $ok && $rand > 0;
168
            $ok = $ok && $timestamp >= $min;
169
            $ok = $ok && $timestamp <= $max;
170
            $ok = $ok && strlen($password) == 32;
171
            $ok = $ok && strlen($user_uuid)  == 36;
172
            $ok = $ok && $sync_id;
173
 
174
            if(!$ok) {
175
                return new JsonModel([
176
                    'success' => false,
177
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID',
178
                ]);
179
            }
180
 
181
            $password_md5 = md5($device_uuid . '-' . $seed . '-' . $rand . '-' . $timestamp . '-' . $user_uuid );
182
            if($password != $password_md5) {
183
                return new JsonModel([
184
                    'success' => false,
185
                    'data' => 'ERROR_WEBSERVICE_PASSWORD',
186
                ]);
187
 
188
 
189
            }
190
 
191
 
192
            $deviceMapper = DeviceMapper::getInstance($this->adapter);
193
            $device = $deviceMapper->fetchOne($device_uuid);
194
            if(!$device) {
195
                return new JsonModel([
196
                    'success' => false,
197
                    'data' => 'ERROR_DEVICE_NOT_FOUND',
198
                ]);
199
            }
200
 
201
            $userMapper = UserMapper::getInstance($this->adapter);
202
            $user = $userMapper->fetchOneByUuid($user_uuid);
203
            if(!$user) {
204
                return new JsonModel([
205
                    'success' => false,
206
                    'data' => 'ERROR_USER_NOT_FOUND',
207
                ]);
208
            }
209
 
210
 
211
            $syncLog = new SyncLog();
212
            $syncLog->data          = json_encode(['user' => $user_uuid]);
213
            $syncLog->type          = 'signin';
214
            $syncLog->device_uuid   = $device->id;
215
            $syncLog->ip            = Functions::getUserIP();
216
 
217
            $syncLogMapper = SyncLogMapper::getInstance($this->adapter);
218
            $syncLogMapper->insert($syncLog);
219
 
220
            $device->user_id        = $user->id;
221
            $device->ip             = Functions::getUserIP();
222
            $result                 = $deviceMapper->update($device);
223
 
224
            if($result) {
225
 
226
                $deviceHistory = new DeviceHistory();
227
                $deviceHistory->device_id   = $device->ip;
228
                $deviceHistory->user_id     = $user->id;
229
                $deviceHistory->ip          = Functions::getUserIP();
230
 
231
                $deviceHistoryMapper = DeviceHistoryMapper::getInstance($this->adapter);
232
                $deviceHistoryMapper->insert($deviceHistory);
233
 
234
 
235
 
236
                return new JsonModel([
237
                    'success' => true,
238
                    'data' => [
239
                        'sync_id' => $sync_id
240
                    ]
241
                ]);
242
            } else {
243
                return new JsonModel([
244
                    'success' => false,
245
                    'data' => 'ERROR_THERE_WAS_AN_ERROR',
246
                ]);
247
            }
248
 
249
        }
250
 
251
        return new JsonModel([
252
            'success' => false,
253
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
254
        ]);
255
 
256
 
257
    }
258
 
259
    public function fcmAction()
260
    {
316 www 261
        $rawdata = file_get_contents("php://input");
262
        error_log('$rawdata = ' . $rawdata );
263
 
314 www 264
        $request = $this->getRequest();
265
 
316 www 266
 
314 www 267
        if($request->isPost()) {
268
 
269
 
270
            $seed   = $this->config['leaderslinked.services.seed'];
271
            $min    = strtotime('-1 day');
272
            $max    = strtotime('+1 day');
273
 
274
 
275
 
276
 
277
            $device_uuid    = Functions::sanitizeFilterString($this->params()->fromPost('device', ''));
278
            $token          = Functions::sanitizeFilterString($this->params()->fromPost('token', ''));
279
            $rand           = Functions::sanitizeFilterString($this->params()->fromPost('rand', ''));
280
            $timestamp      = Functions::sanitizeFilterString($this->params()->fromPost('timestamp', ''));
281
            $password       = Functions::sanitizeFilterString($this->params()->fromPost('password', ''));
282
            $sync_id        = Functions::sanitizeFilterString($this->params()->fromPost('sync_id', ''));
283
 
284
 
285
            $ok = $device_uuid && strlen($device_uuid) == 36;
286
            $ok = $ok && $rand > 0;
287
            $ok = $ok && $timestamp >= $min;
288
            $ok = $ok && $timestamp <= $max;
289
            $ok = $ok && strlen($password) == 32;
290
            $ok = $ok && strlen($token) <= 512;
291
            $ok = $ok && $sync_id;
292
 
293
            if(!$ok) {
294
                return new JsonModel([
295
                    'success' => false,
296
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID',
297
                ]);
298
            }
299
 
300
            $password_md5 = md5($device_uuid . '-' . $seed . '-' . $rand . '-' . $timestamp . '-' . $token );
301
            if($password != $password_md5) {
302
                return new JsonModel([
303
                    'success' => false,
304
                    'data' => 'ERROR_WEBSERVICE_PASSWORD',
305
                ]);
306
 
307
 
308
            }
309
 
310
 
311
            $deviceMapper = DeviceMapper::getInstance($this->adapter);
312
            $device = $deviceMapper->fetchOne($device_uuid);
313
            if(!$device) {
314
                return new JsonModel([
315
                    'success' => false,
316
                    'data' => 'ERROR_DEVICE_NOT_FOUND',
317
                ]);
318
            }
319
 
320
 
321
            $syncLog = new SyncLog();
322
            $syncLog->data          = json_encode(['token' => $token]);
323
            $syncLog->type          = 'token';
324
            $syncLog->device_uuid   = $device->id;
325
            $syncLog->ip            = Functions::getUserIP();
326
 
327
            $syncLogMapper = SyncLogMapper::getInstance($this->adapter);
328
            $syncLogMapper->insert($syncLog);
329
 
330
            $device->token          = $token;
331
            $device->ip             = Functions::getUserIP();
332
            $result                 = $deviceMapper->update($device);
333
 
334
            if($result) {
335
                return new JsonModel([
336
                    'success' => true,
337
                    'data' => [
338
                        'sync_id' => $sync_id
339
                    ]
340
                ]);
341
            } else {
342
                return new JsonModel([
343
                    'success' => false,
344
                    'data' => 'ERROR_THERE_WAS_AN_ERROR',
345
                ]);
346
            }
347
 
348
        }
349
 
350
        return new JsonModel([
351
            'success' => false,
352
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
353
        ]);
354
    }
355
 
356
 
357
    public function deviceAction()
358
    {
316 www 359
        $rawdata = file_get_contents("php://input");
360
        error_log('$rawdata = ' . $rawdata );
314 www 361
 
362
        $request = $this->getRequest();
363
 
364
        if($request->isPost()) {
365
 
366
            $seed   = $this->config['leaderslinked.services.seed'];
367
            $min    = strtotime('-1 day');
368
            $max    = strtotime('+1 day');
369
 
370
 
371
            $device_uuid    = Functions::sanitizeFilterString($this->params()->fromPost('device_uuid', ''));
372
            $manufacturer   = Functions::sanitizeFilterString($this->params()->fromPost('manufacturer', ''));
373
            $platform       = Functions::sanitizeFilterString($this->params()->fromPost('platform', ''));
374
            $brand          = Functions::sanitizeFilterString($this->params()->fromPost('brand', ''));
375
            $version        = Functions::sanitizeFilterString($this->params()->fromPost('version', ''));
376
            $model          = Functions::sanitizeFilterString($this->params()->fromPost('model', ''));
377
            $rand           = Functions::sanitizeFilterString($this->params()->fromPost('rand', ''));
378
            $timestamp      = Functions::sanitizeFilterString($this->params()->fromPost('timestamp', ''));
379
            $password       = Functions::sanitizeFilterString($this->params()->fromPost('password', ''));
380
            $sync_id        = Functions::sanitizeFilterString($this->params()->fromPost('sync_id', ''));
381
 
382
            $ok = $device_uuid && strlen($device_uuid) == 36 && $sync_id;
383
            $ok = $ok && strlen($manufacturer) <= 250;
384
            $ok = $ok && strlen($brand) <= 250;
385
            $ok = $ok && strlen($version) <= 250;
386
            $ok = $ok && strlen($model) <= 250;
387
            $ok = $ok && $rand > 0;
388
            $ok = $ok && $timestamp >= $min;
389
            $ok = $ok && $timestamp <= $max;
390
            $ok = $ok && strlen($password) == 32;
391
            $ok = $ok && $sync_id;
392
 
393
 
394
            $password_md5 = md5($device_uuid . '-' . $seed . '-' . $rand . '-' . $timestamp . '-' . $manufacturer . '-' . $brand . '-' . $version . '-' . $model);
395
            if($password != $password_md5) {
396
                return new JsonModel([
397
                    'success' => false,
398
                    'data' => 'ERROR_WEBSERVICE_PASSWORD',
399
                ]);
400
 
401
 
402
            }
403
 
404
 
405
            if(!$ok) {
406
                return new JsonModel([
407
                    'success' => false,
408
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID',
409
                ]);
410
            }
411
 
412
 
413
 
414
 
415
            $syncLog = new SyncLog();
416
            $syncLog->data = json_encode([
417
                'platform' => $platform,
418
                'manufacturer' => $manufacturer,
419
                'brand' => $brand,
420
                'version' => $version,
421
                'model' => $model,
422
            ]);
423
            $syncLog->type          = 'device';
424
            $syncLog->device_uuid   = $device_uuid;
425
            $syncLog->ip            = Functions::getUserIP();
426
 
427
            $syncLogMapper = SyncLogMapper::getInstance($this->adapter);
428
            $syncLogMapper->insert($syncLog);
429
 
430
 
431
            $deviceMapper = DeviceMapper::getInstance($this->adapter);
432
            $device = $deviceMapper->fetchOne($device_uuid);
433
 
434
 
435
 
436
 
437
            if($device) {
438
                $device->platform       = $platform;
439
                $device->manufacturer   = $manufacturer;
440
                $device->brand          = $brand;
441
                $device->version        = $version;
442
                $device->model          = $model;
443
                $device->ip             = Functions::getUserIP();
444
                $result                 = $deviceMapper->update($device);
445
 
446
            } else {
447
                $device                 = new Device();
448
                $device->id             = $device_uuid;
449
                $device->manufacturer   = $manufacturer;
450
                $device->brand          = $brand;
451
                $device->version        = $version;
452
                $device->model          = $model;
453
                $device->platform       = $platform;
454
                $device->ip             = Functions::getUserIP();
455
                $result                 = $deviceMapper->insert($device);
456
            }
457
 
458
 
459
 
460
            if($result) {
461
                return new JsonModel([
462
                    'success' => true,
463
                    'data' => [
464
                        'sync_id'   => $sync_id,
465
                    ]
466
                ]);
467
            } else {
468
                return new JsonModel([
469
                    'success' => false,
470
                    'data' => 'ERROR_THERE_WAS_AN_ERROR',
471
                ]);
472
            }
473
 
474
        }
475
 
476
        return new JsonModel([
477
            'success' => false,
478
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
479
        ]);
480
 
481
    }
482
 
483
 
484
 
485
    public function signoutAction()
486
    {
316 www 487
        $rawdata = file_get_contents("php://input");
488
        error_log('$rawdata = ' . $rawdata );
489
 
314 www 490
        $request = $this->getRequest();
491
 
492
        if($request->isPost()) {
493
 
494
 
495
            $seed   = $this->config['leaderslinked.services.seed'];
496
            $min    = strtotime('-1 day');
497
            $max    = strtotime('+1 day');
498
 
499
 
500
 
501
 
502
            $device_uuid    = Functions::sanitizeFilterString($this->params()->fromPost('device', ''));
503
            $user_uuid      = Functions::sanitizeFilterString($this->params()->fromPost('user', ''));
504
            $rand           = Functions::sanitizeFilterString($this->params()->fromPost('rand', ''));
505
            $timestamp      = Functions::sanitizeFilterString($this->params()->fromPost('timestamp', ''));
506
            $password       = Functions::sanitizeFilterString($this->params()->fromPost('password', ''));
507
            $sync_id        = Functions::sanitizeFilterString($this->params()->fromPost('sync_id', ''));
508
 
509
 
510
            $ok = $device_uuid && strlen($device_uuid) == 36;
511
            $ok = $ok && $rand > 0;
512
            $ok = $ok && $timestamp >= $min;
513
            $ok = $ok && $timestamp <= $max;
514
            $ok = $ok && strlen($password) == 32;
515
            $ok = $ok && strlen($user_uuid)  == 36;
516
            $ok = $ok && $sync_id;
517
 
518
            if(!$ok) {
519
                return new JsonModel([
520
                    'success' => false,
521
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID',
522
                ]);
523
            }
524
 
525
            $password_md5 = md5($device_uuid . '-' . $seed . '-' . $rand . '-' . $timestamp . '-' . $user_uuid );
526
            if($password != $password_md5) {
527
                return new JsonModel([
528
                    'success' => false,
529
                    'data' => 'ERROR_WEBSERVICE_PASSWORD',
530
                ]);
531
 
532
 
533
            }
534
 
535
 
536
            $deviceMapper = DeviceMapper::getInstance($this->adapter);
537
            $device = $deviceMapper->fetchOne($device_uuid);
538
            if(!$device) {
539
                return new JsonModel([
540
                    'success' => false,
541
                    'data' => 'ERROR_DEVICE_NOT_FOUND',
542
                ]);
543
            }
544
 
545
            $userMapper = UserMapper::getInstance($this->adapter);
546
            $user = $userMapper->fetchOneByUuid($user_uuid);
547
            if(!$user) {
548
                return new JsonModel([
549
                    'success' => false,
550
                    'data' => 'ERROR_USER_NOT_FOUND',
551
                ]);
552
            }
553
 
554
 
555
            $syncLog = new SyncLog();
556
            $syncLog->data          = json_encode(['user' => $user_uuid]);
557
            $syncLog->type          = 'signin';
558
            $syncLog->device_uuid   = $device->id;
559
            $syncLog->ip            = Functions::getUserIP();
560
 
561
            $syncLogMapper = SyncLogMapper::getInstance($this->adapter);
562
            $syncLogMapper->insert($syncLog);
563
 
564
            $device->user_id        =
565
            $device->ip             = Functions::getUserIP();
566
            $result                 = $deviceMapper->update($device);
567
 
568
            if($result) {
569
                return new JsonModel([
570
                    'success' => true,
571
                    'data' => [
572
                        'sync_id' => $sync_id
573
                    ]
574
                ]);
575
            } else {
576
                return new JsonModel([
577
                    'success' => false,
578
                    'data' => 'ERROR_THERE_WAS_AN_ERROR',
579
                ]);
580
            }
581
 
582
        }
583
 
584
        return new JsonModel([
585
            'success' => false,
586
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
587
        ]);
588
 
589
 
590
    }
591
 
592
 
593
 
594
 
595
 
596
 
597
}
598
 
599