Rev 317 | Rev 319 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace LeadersLinked\Controller;use Laminas\Authentication\AuthenticationService;use Laminas\Authentication\Result as AuthResult;use Laminas\Db\Adapter\AdapterInterface;use Laminas\Mvc\Controller\AbstractActionController;use Laminas\Log\LoggerInterface;use Laminas\View\Model\JsonModel;use LeadersLinked\Authentication\AuthAdapter;use LeadersLinked\Mapper\UserMapper;use LeadersLinked\Mapper\EmailTemplateMapper;use LeadersLinked\Model\User;use LeadersLinked\Model\UserType;use LeadersLinked\Library\AesCipher;use LeadersLinked\Library\AesEncryption;use LeadersLinked\Library\QueueEmail;use LeadersLinked\Library\Functions;use LeadersLinked\Model\EmailTemplate;use LeadersLinked\Mapper\UserPasswordMapper;use LeadersLinked\Mapper\DeviceMapper;use LeadersLinked\Model\Device;use LeadersLinked\Mapper\ApplicationMapper;use LeadersLinked\Model\Application;use LeadersLinked\Validator\PasswordStrengthCheck;use LeadersLinked\Mapper\CompanyMapper;use LeadersLinked\Model\Company;use LeadersLinked\Mapper\MicrolearningTopicMapper;use LeadersLinked\Mapper\MicrolearningCapsuleMapper;use LeadersLinked\Mapper\MicrolearningSlideMapper;use LeadersLinked\Model\MicrolearningSlide;use LeadersLinked\Mapper\MicrolearningUserLogMapper;use LeadersLinked\Mapper\MicrolearningUserProgressMapper;use LeadersLinked\Mapper\MicrolearningQuizMapper;use LeadersLinked\Mapper\MicrolearningQuestionMapper;use LeadersLinked\Mapper\MicrolearningAnswerMapper;use LeadersLinked\Model\MicrolearningUserProgress;use LeadersLinked\Model\MicrolearningUserLog;use LeadersLinked\Mapper\DeviceHistoryMapper;use LeadersLinked\Model\DeviceHistory;use LeadersLinked\Mapper\PushMapper;use LeadersLinked\Model\Push;use LeadersLinked\Mapper\MicrolearningCapsuleUserMapper;use LeadersLinked\Mapper\CompanyServiceMapper;use LeadersLinked\Model\Service;use LeadersLinked\Model\CompanyService;use LeadersLinked\Model\MicrolearningCapsuleUser;use LeadersLinked\Model\MicrolearningUserQuiz;use LeadersLinked\Mapper\MicrolearningUserQuizMapper;use LeadersLinked\Mapper\MicrolearningUserMapper;use LeadersLinked\Model\MicrolearningUser;use LeadersLinked\Mapper\PushTemplateMapper;use LeadersLinked\Model\PushTemplate;use LeadersLinked\Mapper\SyncLogMapper;use LeadersLinked\Model\SyncLog;use LeadersLinked\Model\MicrolearningExtendUser;use LeadersLinked\Mapper\MicrolearningExtendUserMapper;use LeadersLinked\Model\MicrolearningExtendUserCompany;use LeadersLinked\Mapper\MicrolearningCapsuleCommentMapper;use LeadersLinked\Mapper\MicrolearningExtendUserCompanyMapper;use LeadersLinked\Mapper\MicrolearningExtendUserFunctionMapper;use LeadersLinked\Mapper\MicrolearningExtendUserGroupMapper;use LeadersLinked\Mapper\MicrolearningExtendUserInstitutionMapper;use LeadersLinked\Mapper\MicrolearningExtendUserPartnerMapper;use LeadersLinked\Mapper\MicrolearningExtendUserProgramMapper;use LeadersLinked\Mapper\MicrolearningExtendUserStudentTypeMapper;use LeadersLinked\Mapper\MicrolearningExtendUserSectorMapper;use Nullix\CryptoJsAes\CryptoJsAes;use LeadersLinked\Model\MicrolearningTopic;use LeadersLinked\Model\MicrolearningCapsule;use LeadersLinked\Model\UserDeleted;use LeadersLinked\Mapper\UserDeletedMapper;use LeadersLinked\Mapper\ApplicationVariantMapper;use LeadersLinked\Library\EasyAES;class ServiceController extends AbstractActionController{/**** @var \Laminas\Db\Adapter\AdapterInterface*/private $adapter;/**** @var \LeadersLinked\Cache\CacheInterface*/private $cache;/**** @var \Laminas\Log\LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var \Laminas\Mvc\I18n\Translator*/private $translator;/**** @param \Laminas\Db\Adapter\AdapterInterface $adapter* @param \LeadersLinked\Cache\CacheInterface $cache* @param \Laminas\Log\LoggerInterface LoggerInterface $logger* @param array $config* @param \Laminas\Mvc\I18n\Translator $translator*/public function __construct($adapter, $cache, $logger, $config, $translator){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;$this->translator = $translator;}public function indexAction(){return new JsonModel(['ok' => false]);}public function signinAction(){$rawdata = file_get_contents("php://input");error_log('URL = ' . $_SERVER['REQUEST_URI'] );error_log('$rawdata = ' . $rawdata );$request = $this->getRequest();if($request->isPost()) {$seed = $this->config['leaderslinked.services.seed'];$min = strtotime('-1 day');$max = strtotime('+1 day');$device_uuid = Functions::sanitizeFilterString($this->params()->fromPost('device_uuid', ''));$user_uuid = Functions::sanitizeFilterString($this->params()->fromPost('user_uuid', ''));$rand = Functions::sanitizeFilterString($this->params()->fromPost('rand', ''));$timestamp = Functions::sanitizeFilterString($this->params()->fromPost('timestamp', ''));$password = Functions::sanitizeFilterString($this->params()->fromPost('password', ''));$sync_id = Functions::sanitizeFilterString($this->params()->fromPost('sync_id', ''));$ok = $device_uuid && strlen($device_uuid) == 32;$ok = $ok && $rand > 0;$ok = $ok && ($timestamp / 1000) >= $min;$ok = $ok && ($timestamp / 1000) <= $max;$ok = $ok && strlen($password) == 32;$ok = $ok && strlen($user_uuid) == 36;$ok = $ok && $sync_id;if(!$ok) {return new JsonModel(['success' => false,'data' => 'ERROR_PARAMETERS_ARE_INVALID',]);}$password_md5 = md5($device_uuid . '-' . $seed . '-' . $rand . '-' . $timestamp . '-' . $user_uuid );if($password != $password_md5) {return new JsonModel(['success' => false,'data' => 'ERROR_WEBSERVICE_PASSWORD',]);}$deviceMapper = DeviceMapper::getInstance($this->adapter);$device = $deviceMapper->fetchOne($device_uuid);if(!$device) {return new JsonModel(['success' => false,'data' => 'ERROR_DEVICE_NOT_FOUND',]);}$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOneByUuid($user_uuid);if(!$user) {return new JsonModel(['success' => false,'data' => 'ERROR_USER_NOT_FOUND',]);}$syncLog = new SyncLog();$syncLog->data = json_encode(['user' => $user_uuid]);$syncLog->type = 'signin';$syncLog->device_uuid = $device->id;$syncLog->ip = Functions::getUserIP();$syncLogMapper = SyncLogMapper::getInstance($this->adapter);$syncLogMapper->insert($syncLog);$device->user_id = $user->id;$device->ip = Functions::getUserIP();$result = $deviceMapper->update($device);if($result) {$deviceHistory = new DeviceHistory();$deviceHistory->device_id = $device->ip;$deviceHistory->user_id = $user->id;$deviceHistory->ip = Functions::getUserIP();$deviceHistoryMapper = DeviceHistoryMapper::getInstance($this->adapter);$deviceHistoryMapper->insert($deviceHistory);return new JsonModel(['success' => true,'data' => ['sync_id' => $sync_id]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR',]);}}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function fcmAction(){$rawdata = file_get_contents("php://input");error_log('URL = ' . $_SERVER['REQUEST_URI'] );error_log('$rawdata = ' . $rawdata );$request = $this->getRequest();if($request->isPost()) {$seed = $this->config['leaderslinked.services.seed'];$min = strtotime('-1 day');$max = strtotime('+1 day');$device_uuid = Functions::sanitizeFilterString($this->params()->fromPost('device_uuid', ''));$token = Functions::sanitizeFilterString($this->params()->fromPost('token', ''));$rand = Functions::sanitizeFilterString($this->params()->fromPost('rand', ''));$timestamp = Functions::sanitizeFilterString($this->params()->fromPost('timestamp', ''));$password = Functions::sanitizeFilterString($this->params()->fromPost('password', ''));$sync_id = Functions::sanitizeFilterString($this->params()->fromPost('sync_id', ''));$ok = $device_uuid && strlen($device_uuid) == 32;$ok = $ok && $rand > 0;$ok = $ok && ($timestamp / 1000) >= $min;$ok = $ok && ($timestamp / 1000) <= $max;$ok = $ok && strlen($password) == 32;$ok = $ok && strlen($token) <= 512;$ok = $ok && $sync_id;if(!$ok) {return new JsonModel(['success' => false,'data' => 'ERROR_PARAMETERS_ARE_INVALID',]);}$password_md5 = md5($device_uuid . '-' . $seed . '-' . $rand . '-' . $timestamp . '-' . $token );if($password != $password_md5) {return new JsonModel(['success' => false,'data' => 'ERROR_WEBSERVICE_PASSWORD',]);}$deviceMapper = DeviceMapper::getInstance($this->adapter);$device = $deviceMapper->fetchOne($device_uuid);if(!$device) {return new JsonModel(['success' => false,'data' => 'ERROR_DEVICE_NOT_FOUND',]);}$syncLog = new SyncLog();$syncLog->data = json_encode(['token' => $token]);$syncLog->type = 'token';$syncLog->device_uuid = $device->id;$syncLog->ip = Functions::getUserIP();$syncLogMapper = SyncLogMapper::getInstance($this->adapter);$syncLogMapper->insert($syncLog);$device->token = $token;$device->ip = Functions::getUserIP();$result = $deviceMapper->update($device);if($result) {return new JsonModel(['success' => true,'data' => ['sync_id' => $sync_id]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR',]);}}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function deviceAction(){$rawdata = file_get_contents("php://input");error_log('URL = ' . $_SERVER['REQUEST_URI'] );error_log('$rawdata = ' . $rawdata );$request = $this->getRequest();if($request->isPost()) {$seed = $this->config['leaderslinked.services.seed'];$min = strtotime('-1 day');$max = strtotime('+1 day');$device_uuid = Functions::sanitizeFilterString($this->params()->fromPost('device_uuid', ''));$manufacturer = Functions::sanitizeFilterString($this->params()->fromPost('manufacturer', ''));$platform = Functions::sanitizeFilterString($this->params()->fromPost('platform', ''));$brand = Functions::sanitizeFilterString($this->params()->fromPost('brand', ''));$version = Functions::sanitizeFilterString($this->params()->fromPost('version', ''));$model = Functions::sanitizeFilterString($this->params()->fromPost('model', ''));$rand = Functions::sanitizeFilterString($this->params()->fromPost('rand', ''));$timestamp = Functions::sanitizeFilterString($this->params()->fromPost('timestamp', ''));$password = Functions::sanitizeFilterString($this->params()->fromPost('password', ''));$sync_id = Functions::sanitizeFilterString($this->params()->fromPost('sync_id', ''));$ok = $device_uuid && strlen($device_uuid) == 32;$ok = $ok && strlen($manufacturer) <= 250;$ok = $ok && strlen($brand) <= 250;$ok = $ok && strlen($version) <= 250;$ok = $ok && strlen($model) <= 250;$ok = $ok && $rand > 0;$ok = $ok && ($timestamp / 1000) >= $min;$ok = $ok && ($timestamp / 1000) <= $max;$ok = $ok && strlen($password) == 32;$ok = $ok && $sync_id;$password_md5 = md5($device_uuid . '-' . $seed . '-' . $rand . '-' . $timestamp . '-' . $manufacturer . '-' . $brand . '-' . $version . '-' . $model);if($password != $password_md5) {return new JsonModel(['success' => false,'data' => 'ERROR_WEBSERVICE_PASSWORD',]);}if(!$ok) {return new JsonModel(['success' => false,'data' => 'ERROR_PARAMETERS_ARE_INVALID',]);}$syncLog = new SyncLog();$syncLog->data = json_encode(['platform' => $platform,'manufacturer' => $manufacturer,'brand' => $brand,'version' => $version,'model' => $model,]);$syncLog->type = 'device';$syncLog->device_uuid = $device_uuid;$syncLog->ip = Functions::getUserIP();$syncLogMapper = SyncLogMapper::getInstance($this->adapter);$syncLogMapper->insert($syncLog);$deviceMapper = DeviceMapper::getInstance($this->adapter);$device = $deviceMapper->fetchOne($device_uuid);if($device) {$device->platform = $platform;$device->manufacturer = $manufacturer;$device->brand = $brand;$device->version = $version;$device->model = $model;$device->ip = Functions::getUserIP();$result = $deviceMapper->update($device);} else {$device = new Device();$device->id = $device_uuid;$device->manufacturer = $manufacturer;$device->brand = $brand;$device->version = $version;$device->model = $model;$device->platform = $platform;$device->ip = Functions::getUserIP();$result = $deviceMapper->insert($device);}if($result) {return new JsonModel(['success' => true,'data' => ['sync_id' => $sync_id,]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR',]);}}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function signoutAction(){$rawdata = file_get_contents("php://input");error_log('URL = ' . $_SERVER['REQUEST_URI'] );error_log('$rawdata = ' . $rawdata );$request = $this->getRequest();if($request->isPost()) {$seed = $this->config['leaderslinked.services.seed'];$min = strtotime('-1 day');$max = strtotime('+1 day');$device_uuid = Functions::sanitizeFilterString($this->params()->fromPost('device_uuid', ''));$user_uuid = Functions::sanitizeFilterString($this->params()->fromPost('user_uuid', ''));$rand = Functions::sanitizeFilterString($this->params()->fromPost('rand', ''));$timestamp = Functions::sanitizeFilterString($this->params()->fromPost('timestamp', ''));$password = Functions::sanitizeFilterString($this->params()->fromPost('password', ''));$sync_id = Functions::sanitizeFilterString($this->params()->fromPost('sync_id', ''));$ok = $device_uuid && strlen($device_uuid) == 32;$ok = $ok && $rand > 0;$ok = $ok && ($timestamp / 1000) >= $min;$ok = $ok && ($timestamp / 1000) <= $max;$ok = $ok && strlen($password) == 32;$ok = $ok && strlen($user_uuid) == 36;$ok = $ok && $sync_id;if(!$ok) {return new JsonModel(['success' => false,'data' => 'ERROR_PARAMETERS_ARE_INVALID',]);}$password_md5 = md5($device_uuid . '-' . $seed . '-' . $rand . '-' . $timestamp . '-' . $user_uuid );if($password != $password_md5) {return new JsonModel(['success' => false,'data' => 'ERROR_WEBSERVICE_PASSWORD',]);}$deviceMapper = DeviceMapper::getInstance($this->adapter);$device = $deviceMapper->fetchOne($device_uuid);if(!$device) {return new JsonModel(['success' => false,'data' => 'ERROR_DEVICE_NOT_FOUND',]);}$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOneByUuid($user_uuid);if(!$user) {return new JsonModel(['success' => false,'data' => 'ERROR_USER_NOT_FOUND',]);}$syncLog = new SyncLog();$syncLog->data = json_encode(['user' => $user_uuid]);$syncLog->type = 'signin';$syncLog->device_uuid = $device->id;$syncLog->ip = Functions::getUserIP();$syncLogMapper = SyncLogMapper::getInstance($this->adapter);$syncLogMapper->insert($syncLog);$device->user_id =$device->ip = Functions::getUserIP();$result = $deviceMapper->update($device);if($result) {return new JsonModel(['success' => true,'data' => ['sync_id' => $sync_id]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR',]);}}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}