public function authenticateLdap()
 {
     if (!($settings = YumSettings::model()->find('is_active'))) {
         throw new ExceptionClass('No active YUM-Settings profile found');
     }
     $ds = @ldap_connect($settings->ldap_host, $settings->ldap_port);
     ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $settings->ldap_protocol);
     if ($settings->ldap_tls == 1) {
         ldap_start_tls($ds);
     }
     if (!@ldap_bind($ds)) {
         throw new Exception('OpenLDAP: Could not connect to LDAP-Server');
     }
     if ($r = ldap_search($ds, $settings->ldap_basedn, '(uid=' . $this->username . ')')) {
         $result = @ldap_get_entries($ds, $r);
         if ($result[0] && @ldap_bind($ds, $result[0]['dn'], $this->password)) {
             $user = YumUser::model()->find('username=:username', array(':username' => $this->username));
             if ($user == NULL) {
                 if ($settings->ldap_autocreate == 1) {
                     $user = new YumUser();
                     $user->username = $this->username;
                     if ($settings->ldap_transfer_pw == 1) {
                         $user->password = YumEncrypt::encrypt($this->password);
                     }
                     $user->lastpasswordchange = 0;
                     $user->activationKey = '';
                     $user->superuser = 0;
                     $user->createtime = time();
                     $user->status = 1;
                     if ($user->save(false)) {
                         if (Yum::module()->enableProfiles) {
                             $profile = new YumProfile();
                             $profile->user_id = $user->id;
                             $profile->privacy = 'protected';
                             if ($settings->ldap_transfer_attr == 1) {
                                 $profile->email = $result[0]['mail'][0];
                                 $profile->lastname = $result[0]['sn'][0];
                                 $profile->firstname = $result[0]['givenname'][0];
                                 $profile->street = $result[0]['postaladdress'][0];
                                 $profile->city = $result[0]['l'][0];
                             }
                             $profile->save(false);
                         }
                     } else {
                         return !($this->errorCode = self::ERROR_PASSWORD_INVALID);
                     }
                 } else {
                     return !($this->errorCode = self::ERROR_PASSWORD_INVALID);
                 }
             }
             $this->id = $user->id;
             $this->setState('id', $user->id);
             $this->username = $user->username;
             $this->user = $user;
             return !($this->errorCode = self::ERROR_NONE);
         }
     }
     return !($this->errorCode = self::ERROR_PASSWORD_INVALID);
 }
Пример #2
0
 public function actionCreate()
 {
     // if some data has been entered before or the user is already logged in,
     // take the already existing data and prefill the input form
     if ($model = Shop::getCustomer()) {
         $address = $model->address;
     } else {
         $model = new Customer();
     }
     if (isset($_POST['Customer'])) {
         $model->attributes = $_POST['Customer'];
         if (isset($_POST['Address'])) {
             $address = new Address();
             $address->attributes = $_POST['Address'];
             if ($address->save()) {
                 $model->address_id = $address->id;
             }
         }
         if (!Yii::app()->user->isGuest) {
             $model->user_id = Yii::app()->user->id;
         }
         $model->validate();
         if (Shop::module()->useWithYum && isset($_POST['register']) && ($_POST['register'] = true)) {
             if (isset($_POST['Customer']['password']) && isset($_POST['Customer']['passwordRepeat'])) {
                 if ($_POST['Customer']['password'] != $_POST['Customer']['passwordRepeat']) {
                     $model->addError('password', Shop::t('Passwords do not match'));
                 } else {
                     if ($_POST['Customer']['password'] == '') {
                         $model->addError('password', Shop::t('Password is empty'));
                     } else {
                         $user = new YumUser();
                         $profile = new YumProfile();
                         $profile->attributes = $_POST['Customer'];
                         $profile->attributes = $_POST['Address'];
                         if ($user->register(strtr($model->email, array('@' => '_', '.' => '_')), $_POST['Customer']['password'], $profile)) {
                             $user->status = YumUser::STATUS_ACTIVE;
                             $user->save(false, array('status'));
                             $model->user_id = $user->id;
                             Shop::setFlash(Shop::t('Successfully registered user'));
                         } else {
                             $model->addErrors($user->getErrors());
                             $model->addErrors($profile->getErrors());
                             Shop::setFlash(Shop::t('Error while registering user'));
                         }
                     }
                 }
             }
         }
         if (!$model->hasErrors()) {
             if ($model->save()) {
                 Yii::app()->user->setState('customer_id', $model->customer_id);
                 $this->redirect(array('//shop/order/create', 'customer' => $model->customer_id));
             }
         }
     }
     $this->render('create', array('customer' => $model, 'address' => isset($address) ? $address : new Address()));
 }
 public function loginByFacebook()
 {
     if (!Yum::module()->loginType & UserModule::LOGIN_BY_FACEBOOK) {
         throw new Exception('actionFacebook was called, but is not activated in application configuration');
     }
     Yii::app()->user->logout();
     Yii::import('application.modules.user.vendors.facebook.*');
     $facebook = new Facebook(Yum::module()->facebookConfig);
     $fb_uid = $facebook->getUser();
     if ($fb_uid) {
         $profile = YumProfile::model()->findByAttributes(array('facebook_id' => $fb_uid));
         $user = $profile ? YumUser::model()->findByPk($profile->user_id) : null;
         try {
             $fb_user = $facebook->api('/me');
             if (isset($fb_user['email'])) {
                 $profile = YumProfile::model()->findByAttributes(array('email' => $fb_user['email']));
             } else {
                 return false;
             }
             if ($user === null && $profile === null) {
                 // New account
                 $user = new YumUser();
                 $user->username = '******' . YumRegistrationForm::genRandomString(Yum::module()->usernameRequirements['maxLen'] - 3);
                 $user->password = YumUser::encrypt(YumUserChangePassword::createRandomPassword());
                 $user->activationKey = YumUser::encrypt(microtime() . $user->password);
                 $user->createtime = time();
                 $user->superuser = 0;
                 if ($user->save()) {
                     $profile = new YumProfile();
                     $profile->user_id = $user->id;
                     $profile->facebook_id = $fb_user['id'];
                     $profile->email = $fb_user['email'];
                     $profile->save(false);
                 }
             } else {
                 //No superuser account can log in using Facebook
                 $user = $profile->user;
                 if ($user->superuser) {
                     Yum::log('A superuser tried to login by facebook', 'error');
                     return false;
                 }
                 //Current account and FB account blending
                 $profile->facebook_id = $fb_uid;
                 $profile->save(false);
                 $user->username = '******' . YumRegistrationForm::genRandomString(Yum::module()->usernameRequirements['maxLen'] - 3);
                 $user->superuser = 0;
                 $user->save();
             }
             $identity = new YumUserIdentity($fb_uid, $user->id);
             $identity->authenticateFacebook(true);
             switch ($identity->errorCode) {
                 case YumUserIdentity::ERROR_NONE:
                     $duration = 3600 * 24 * 30;
                     //30 days
                     Yii::app()->user->login($identity, $duration);
                     Yum::log('User ' . $user->username . ' logged in via facebook');
                     return $user;
                     break;
                 case YumUserIdentity::ERROR_STATUS_INACTIVE:
                     $user->addError('status', Yum::t('Your account is not activated.'));
                     break;
                 case YumUserIdentity::ERROR_STATUS_BANNED:
                     $user->addError('status', Yum::t('Your account is blocked.'));
                     break;
                 case YumUserIdentity::ERROR_PASSWORD_INVALID:
                     Yum::log(Yum::t('Failed login attempt for {username} via facebook', array('{username}' => $user->username)), 'error');
                     $user->addError('status', Yum::t('Password incorrect.'));
                     break;
             }
             return false;
         } catch (FacebookApiException $e) {
             /* FIXME: Workaround for avoiding the 'Error validating access token.'
              * inmediatly after a user logs out. This is nasty. Any other
              * approach to solve this issue is more than welcomed.
              */
             Yum::log('Failed login attempt for ' . $user->username . ' via facebook', 'error');
             return false;
         }
     } else {
         return false;
     }
 }
Пример #4
0
	/**
	 * Creates a new User.
	 */
	public function actionCreate() {
		$model = new YumUser;
		if(Yum::hasModule('profile'))
			$profile = new YumProfile;
		$passwordform = new YumUserChangePassword;

		// When opening a empty user creation mask, we most probably want to
		// insert an _active_ user
		if(!isset($model->status))
			$model->status = 1;

		if(isset($_POST['YumUser'])) {
			$model->attributes=$_POST['YumUser'];

			if(Yum::hasModule('role'))
				$model->roles = Relation::retrieveValues($_POST);

			if(Yum::hasModule('profile') && isset($_POST['YumProfile']) )
				$profile->attributes = $_POST['YumProfile'];

			if(isset($_POST['YumUserChangePassword'])) {
				if($_POST['YumUserChangePassword']['password'] == '') {
					$password = YumUser::generatePassword();
					$model->setPassword($password);
					Yum::setFlash(Yum::t('The generated Password is {password}', array(
									'{password}' => $password)));
				} else {
					$passwordform->attributes = $_POST['YumUserChangePassword'];

					if($passwordform->validate())
						$model->setPassword($_POST['YumUserChangePassword']['password']);
				}
			}

			$model->activationKey = YumUser::encrypt(microtime() . $model->password);

			if($model->username == '' && isset($profile))
				$model->username = $profile->email;

			$model->validate();

			if(isset($profile))
				$profile->validate();

			if(!$model->hasErrors()
					&& !$passwordform->hasErrors()) {
				$model->save();
				if(isset($profile)) {
					$profile->user_id = $model->id;
					$profile->save(array('user_id'), false);
				}
			        Yii::import('application.modules.registration.controllers.YumRegistrationController');
				YumRegistrationController::sendRegistrationEmail($model);
				$this->redirect(array('view', 'id'=>$model->id));
			}
		}

		$this->render('create',array(
					'model' => $model,
					'passwordform' => $passwordform,
					'profile' => isset($profile) ? $profile : null,
					));
	}
 /**
  * Creates a new User.
  */
 public function actionCreate()
 {
     $user = new YumUser();
     if (Yum::hasModule('profile')) {
         $profile = new YumProfile();
     }
     $passwordform = new YumUserChangePassword();
     // When opening a empty user creation mask, we most probably want to
     // insert an _active_ user
     if (!$user->status) {
         $user->status = 1;
     }
     if (isset($_POST['YumUser'])) {
         $user->attributes = $_POST['YumUser'];
         if (isset($_POST['YumUserChangePassword'])) {
             if ($_POST['YumUserChangePassword']['password'] == '') {
                 Yii::import('user.components.EPasswordGenerator');
                 $generatorOptions = Yum::module()->passwordGeneratorOptions;
                 $password = EPasswordGenerator::generate($generatorOptions['length'], $generatorOptions['capitals'], $generatorOptions['numerals'], $generatorOptions['symbols']);
                 $user->setPassword($password);
                 Yum::setFlash(Yum::t('The generated Password is {password}', array('{password}' => $password)));
             } else {
                 $passwordform->attributes = $_POST['YumUserChangePassword'];
                 if ($passwordform->validate()) {
                     $user->setPassword($_POST['YumUserChangePassword']['password']);
                 }
             }
         }
         $user->validate();
         if (Yum::hasModule('profile') && isset($_POST['YumProfile'])) {
             $profile->attributes = $_POST['YumProfile'];
         }
         if (!$user->hasErrors()) {
             $user->activationKey = CPasswordHelper::hashPassword(microtime() . $user->password, Yum::module()->passwordHashCost);
             if ($user->username == '' && isset($profile)) {
                 $user->username = $profile->email;
             }
             if (isset($profile)) {
                 $profile->validate();
             }
             if (!$user->hasErrors() && !$passwordform->hasErrors()) {
                 $user->save();
                 if (isset($_POST['YumUser']['roles'])) {
                     $user->syncRoles($_POST['YumUser']['roles']);
                 } else {
                     $user->syncRoles();
                 }
                 if (isset($profile)) {
                     $profile->user_id = $user->id;
                     $profile->save(array('user_id'), false);
                 }
                 $this->redirect(array('view', 'id' => $user->id));
             }
         }
     }
     $this->render('create', array('user' => $user, 'passwordform' => $passwordform, 'profile' => isset($profile) ? $profile : null));
 }
Пример #6
0
 public static function import($data, $delimiter = ',', $enclosure = '"', $escape = '\\', $roles = '')
 {
     if (!$data) {
         throw new CException('No data given');
     }
     $rows = explode("\n", $data);
     $firstrow = str_getcsv($rows[0], $delimiter, $enclosure, $escape);
     $attributes = array();
     $i = 0;
     foreach ($firstrow as $row) {
         $attributes[$i] = $row;
         $i++;
     }
     unset($rows[0]);
     foreach ($rows as $row) {
         $values = str_getcsv($row, $delimiter, $enclosure, $escape);
         $user = YumUser::model()->findByPk($values[0]);
         // Update existing User
         if ($user) {
             $profile = $user->profile;
             foreach ($attributes as $key => $attribute) {
                 if (isset($user->{$attribute}) && isset($values[$key])) {
                     $user->{$attribute} = htmlentities($values[$key], ENT_IGNORE, 'utf-8', FALSE);
                 } else {
                     if (isset($profile->{$attribute}) && isset($values[$key])) {
                         $profile->{$attribute} = htmlentities($values[$key], ENT_IGNORE, 'utf-8', FALSE);
                     }
                 }
             }
             $user->save(false);
             if ($profile instanceof YumProfile) {
                 $profile->save(false);
             }
             if ($roles) {
                 foreach (explode(',', $roles) as $role) {
                     $user->assignRole(trim($role));
                 }
             }
         } else {
             if (!$user) {
                 // Create new User
                 $user = new YumUser();
                 $profile = new YumProfile();
                 foreach ($attributes as $key => $attribute) {
                     if (isset($user->{$attribute}) && isset($values[$key])) {
                         $user->{$attribute} = htmlentities($values[$key], ENT_IGNORE, 'utf-8', FALSE);
                     } else {
                         if (isset($profile->{$attribute}) && isset($values[$key])) {
                             $profile->{$attribute} = htmlentities($values[$key], ENT_IGNORE, 'utf-8', FALSE);
                         }
                     }
                 }
                 $user->id = $values[0];
                 if (!$user->username && $profile->email) {
                     $user->username = $profile->email;
                 }
                 if (!$user->status) {
                     $user->status = 1;
                 }
                 $user->createtime = time();
                 if ($user->username) {
                     $user->save(false);
                     $profile->user_id = $user->id;
                     $profile->save(false);
                 }
             }
         }
     }
 }