예제 #1
0
 public function check($with_csrf = false)
 {
     if ($with_csrf && !$this->isValidCsrfToken()) {
         return;
     }
     $key = !empty($_SESSION[self::IDENTIFIER]) ? $_SESSION[self::IDENTIFIER] : !1;
     $cookies = Application::$request_variables['cookie'];
     $cookie_key = !empty($cookies[self::IDENTIFIER]) ? $cookies[self::IDENTIFIER] : !1;
     if (!$key) {
         if ($cookie_key) {
             $key_manager = new KeyManager();
             list($user_id, $access_key) = $key_manager->getPair($cookie_key);
             if (!is_numeric($user_id)) {
                 $this->removeCookie(self::IDENTIFIER);
                 return;
             }
             $user = new User($this->db);
             $user->allocateById($user_id);
             if (!$user->hasAccessKey($access_key)) {
                 $this->removeCookie(self::IDENTIFIER);
                 return;
             }
             $this->setSession(self::IDENTIFIER, $cookie_key);
             $this->user_row = $user->getRowData();
             $this->result = !$user->isEmpty();
         }
     } else {
         $key_manager = new KeyManager();
         $user_id = $key_manager->getPair($key)[0];
         $user = new User($this->db);
         $user->allocateById($user_id);
         $this->user_row = $user->getRowData();
         $this->result = !$user->isEmpty();
     }
 }
예제 #2
0
 public function getAppliedFields()
 {
     try {
         $this->apply($this->user->getCompanyId() === $this->company->getId() ? $this->user->getAccessFlag() : 2, $this->company);
         return $this->result;
     } catch (NotFoundCompanyException $err) {
         return $err->getError();
     }
 }
예제 #3
0
 public function signIn()
 {
     $mEmail = $this->data['email'];
     $mPassword = $this->data['password'];
     $mCompanyDomain = $this->data['domain'];
     $user = new User($this->db);
     $user->allocateByEmail($mEmail);
     $mCompany = new Company($this->db);
     $mCompany->allocateByDomain($mCompanyDomain);
     if ($user->isEmpty() || $mCompany->isEmpty() || $mCompany->getId() != $user->getCompanyId() || !$user->isPasswordEqual($mPassword)) {
         return;
     }
     $user->updateRecentActivityTime();
     $key_manager = new KeyManager();
     $access_key = $this->generateKey();
     $key = $key_manager->createKey($user->getId(), $access_key);
     $csrf_token = sha1($key . 'success');
     $user->addAccessKey($access_key);
     $this->setCookie(CheckAuthorization::IDENTIFIER, $key, time() + 365 * 24 * 3600, '/', $_SERVER['HTTP_HOST']);
     $this->setCookie(CheckAuthorization::CSRF_TOKEN_NAME, $csrf_token, time() + 365 * 24 * 3600, '/', $_SERVER['HTTP_HOST']);
     $this->setSession(CheckAuthorization::IDENTIFIER, $key);
     $this->result = true;
 }
예제 #4
0
 public function userToggleSmsNotify()
 {
     $check_auth = new CheckAuthorization($this->getQemyDb());
     $check_auth->check(true);
     $user = new User($this->getQemyDb(), $check_auth->getUserRow());
     $user->setAuthChecker($check_auth);
     if (!$user->isAuth()) {
         Application::denied();
         $this->setData(array('result' => false));
         return $this;
     }
     $this->setData(array('result' => $user->toggleSmsEnabled()));
     return $this;
 }
예제 #5
0
 /**
  * @param int $access_flag
  * @param User $mTargetUser
  */
 private function apply($access_flag, $mTargetUser)
 {
     if ($this->context_company->isEmpty()) {
         throw new NotFoundCompanyException();
     }
     if ($access_flag == 2) {
         throw new UserAccessDeniedException();
     }
     $mAccessManager = new UserAccessManager();
     $tempUserFields = array();
     if ($mAccessManager->can($access_flag, 'id')) {
         $tempUserFields['id'] = intval($mTargetUser->getId());
     }
     if ($mAccessManager->can($access_flag, 'email')) {
         $tempUserFields['email'] = $mTargetUser->getEmail();
     }
     if ($mAccessManager->can($access_flag, 'first_name')) {
         $tempUserFields['first_name'] = $mTargetUser->getFirstName();
     }
     if ($mAccessManager->can($access_flag, 'last_name')) {
         $tempUserFields['last_name'] = $mTargetUser->getLastName();
     }
     if ($mAccessManager->can($access_flag, 'patronymic')) {
         $tempUserFields['patronymic'] = $mTargetUser->getPatronymicName();
     }
     if ($mAccessManager->can($access_flag, 'photo')) {
         $tempUserFields['photo'] = $mTargetUser->getPhoto();
     }
     if ($mAccessManager->can($access_flag, 'phone')) {
         $tempUserFields['phone'] = $mTargetUser->getPhone();
     }
     if ($mAccessManager->can($access_flag, 'register_time')) {
         $tempUserFields['register_time'] = intval($mTargetUser->getRegisterTime());
     }
     if ($mAccessManager->can($access_flag, 'last_logged_time')) {
         $tempUserFields['last_logged_time'] = intval($mTargetUser->getLastLoggedTime());
     }
     if ($mAccessManager->can($access_flag, 'company_id')) {
         $tempUserFields['company_id'] = intval($mTargetUser->getCompanyId());
     }
     if ($mAccessManager->can($access_flag, 'access_flag')) {
         $tempUserFields['access_flag'] = intval($mTargetUser->getAccessFlag());
     }
     if ($mAccessManager->can($access_flag, 'access_flag')) {
         $tempUserFields['user_group'] = $mTargetUser->getUserGroupKey();
     }
     if ($mAccessManager->can($access_flag, 'sms_notify')) {
         $tempUserFields['sms_notify'] = $mTargetUser->isSmsNotificationEnabled();
     }
     if ($mAccessManager->can($access_flag, 'recent_activity_time')) {
         $tempUserFields['recent_activity_time'] = intval($mTargetUser->getRecentActivityTime());
     }
     $this->result = $tempUserFields;
 }
예제 #6
0
 public function createCompany($params)
 {
     //TODO: create company
     /*
      * 1) Провалидировать все поля
      * 2) Сохранить (ready)
      */
     $valid = false;
     $result = false;
     $user_created = false;
     $errors = array();
     $mName = trim($params['company_name']);
     $mDomain = mb_strtolower(trim($params['company_domain']), 'utf-8');
     $mCountry = trim($params['company_country']);
     $mCity = trim($params['company_city']);
     $mWebsite = mb_strtolower(trim($params['company_site']), 'utf-8');
     $mCompanyType = trim($params['company_type']);
     $mLoginEmail = mb_strtolower(trim($params['login_email']), 'utf-8');
     $mLoginPassword = trim($params['login_password']);
     $mLoginConfirmPassword = trim($params['login_confirm_password']);
     $mContactEmail = mb_strtolower(trim($params['contacts_email']), 'utf-8');
     $mContactPhone = trim($params['contacts_phone']);
     $mValidator = new Validation();
     if (empty($mName) || strlen($mName) < 2 || strlen($mName) > 250) {
         array_push($errors, 'name');
     }
     if (empty($mCountry)) {
         array_push($errors, 'country');
     }
     if (!empty($mWebsite) && !$mValidator->isValidUrl($mWebsite)) {
         array_push($errors, 'website');
     }
     if (empty($mDomain) || !$mValidator->isValidCompanyDomain($mDomain) || $this->isDomainInUse($mDomain)) {
         array_push($errors, 'domain');
     }
     $company_types = array(-1, 1, 2, 3);
     if (!is_numeric($mCompanyType) || !$mCompanyType || !in_array($mCompanyType, $company_types)) {
         array_push($errors, 'company_type');
     }
     if (empty($mLoginEmail) || !$mValidator->isValidEmail($mLoginEmail) || $this->isEmailInUse($mLoginEmail)) {
         array_push($errors, 'login_email');
     }
     if (empty($mLoginPassword) || strlen($mLoginPassword) < 6 || strlen($mLoginPassword) > 200) {
         array_push($errors, 'login_password');
     }
     if (empty($mLoginConfirmPassword) || $mLoginPassword != $mLoginConfirmPassword) {
         array_push($errors, 'login_confirm_password');
     }
     if (empty($mContactEmail) || !$mValidator->isValidEmail($mContactEmail)) {
         array_push($errors, 'contact_email');
     }
     if (!empty($mContactPhone) && !$mValidator->isValidPhone($mContactPhone)) {
         array_push($errors, 'contact_phone');
     }
     if (!count($errors)) {
         $valid = true;
     }
     $mAdminUser = null;
     if ($valid) {
         //создаем админа, получаем его id
         $mUsersManager = new UsersManager($this->db);
         $admin_user_id = $mUsersManager->createAdminForCompany(array('email' => $mLoginEmail, 'password' => $mLoginPassword, 'confirm_password' => $mLoginConfirmPassword));
         if ($admin_user_id != -1) {
             $user_created = true;
             $mAdminUser = new User($this->db);
             $mAdminUser->allocateById($admin_user_id);
         }
     }
     if ($valid && $user_created) {
         $this->db->query("INSERT INTO `companies` (name, country, city, website, company_type, user_id, domain, contact_email,\n                contact_phone, register_time, max_count_services, employees_number, end_subscription_time, stop_company_time,\n                sms_enabled, email_enabled)\n                VALUES(?s, ?s, ?s, ?s, ?s, ?i, ?s, ?s, ?s, ?i, ?i, ?i, ?i, ?i, ?i, ?i)", $mName, $mCountry, $mCity, $mWebsite, $mCompanyType, $mAdminUser->getId(), $mDomain, $mContactEmail, $mContactPhone, time(), self::MAX_COUNT_SERVICES_TRIAL, self::DEFAULT_EMPLOYEES_NUMBER, time() + self::SUBSCRIPTION_TIME_TRIAL, time() + self::SUBSCRIPTION_TIME_TRIAL + self::ADDITIONAL_TIME_TRIAL, self::DEFAULT_SMS_ENABLED, self::DEFAULT_EMAIL_ENABLED);
         $inserted_company_id = $this->db->insertedId();
         $mAdminUser->setCompanyId($inserted_company_id);
         $result = true;
     }
     return $result;
 }