function StartSurvey($data, $form) { try { $data = SQLDataCleaner::clean($data); $data['MembershipType'] = 'community'; Session::set("FormInfo.{$form->FormName()}.data", $data); $profile_page = EditProfilePage::get()->first(); $member = $this->member_manager->registerMobile($data, new MemberRegistrationSenderService()); //Get profile page if (!is_null($profile_page)) { //Redirect to profile page with success message Session::clear("FormInfo.{$form->FormName()}.data"); $request = Controller::curr()->getRequest(); $back_url = $request->postVar('BackURL'); $link = $profile_page->Link('?success=1'); if (!empty($back_url)) { $link .= "&BackURL=" . $back_url; } return OpenStackIdCommon::loginMember($member, $link); } } catch (EntityValidationException $ex1) { Form::messageForForm($form->FormName(), $ex1->getMessage(), 'bad'); //Return back to form SS_Log::log($ex1->getMessage(), SS_Log::WARN); return Controller::curr()->redirectBack(); } catch (Exception $ex) { Form::messageForForm($form->FormName(), "There was an error with your request, please contact your admin.", 'bad'); //Return back to form SS_Log::log($ex->getMessage(), SS_Log::ERR); return Controller::curr()->redirectBack(); } }
/** * Assertion Consumer Service * * The user gets sent back here after authenticating with the IdP, off-site. * The earlier redirection to the IdP can be found in the SAMLAuthenticator::authenticate. * * After this handler completes, we end up with a rudimentary Member record (which will be created on-the-fly * if not existent), with the user already logged in. Login triggers memberLoggedIn hooks, which allows * LDAP side of this module to finish off loading Member data. * * @throws OneLogin_Saml2_Error */ public function acs() { $auth = Injector::inst()->get('SAMLHelper')->getSAMLAuth(); $auth->processResponse(); $error = $auth->getLastErrorReason(); if (!empty($error)) { SS_Log::log($error, SS_Log::ERR); Form::messageForForm("SAMLLoginForm_LoginForm", "Authentication error: '{$error}'", 'bad'); Session::save(); return $this->getRedirect(); } if (!$auth->isAuthenticated()) { Form::messageForForm("SAMLLoginForm_LoginForm", _t('Member.ERRORWRONGCRED'), 'bad'); Session::save(); return $this->getRedirect(); } $decodedNameId = base64_decode($auth->getNameId()); // check that the NameID is a binary string (which signals that it is a guid if (ctype_print($decodedNameId)) { Form::messageForForm("SAMLLoginForm_LoginForm", "Name ID provided by IdP is not a binary GUID.", 'bad'); Session::save(); return $this->getRedirect(); } // transform the NameId to guid $guid = LDAPUtil::bin_to_str_guid($decodedNameId); if (!LDAPUtil::validGuid($guid)) { $errorMessage = "Not a valid GUID '{$guid}' recieved from server."; SS_Log::log($errorMessage, SS_Log::ERR); Form::messageForForm("SAMLLoginForm_LoginForm", $errorMessage, 'bad'); Session::save(); return $this->getRedirect(); } // Write a rudimentary member with basic fields on every login, so that we at least have something // if LDAP synchronisation fails. $member = Member::get()->filter('GUID', $guid)->limit(1)->first(); if (!($member && $member->exists())) { $member = new Member(); $member->GUID = $guid; } $attributes = $auth->getAttributes(); foreach ($member->config()->claims_field_mappings as $claim => $field) { if (!isset($attributes[$claim][0])) { SS_Log::log(sprintf('Claim rule \'%s\' configured in LDAPMember.claims_field_mappings, but wasn\'t passed through. Please check IdP claim rules.', $claim), SS_Log::WARN); continue; } $member->{$field} = $attributes[$claim][0]; } $member->SAMLSessionIndex = $auth->getSessionIndex(); // This will throw an exception if there are two distinct GUIDs with the same email address. // We are happy with a raw 500 here at this stage. $member->write(); // This will trigger LDAP update through LDAPMemberExtension::memberLoggedIn. // Both SAML and LDAP identify Members by the GUID field. $member->logIn(); return $this->getRedirect(); }
/** * Controller action that handles the "success" page * @param $r SS_HTTPRequest * @return SSViewer */ public function success(SS_HTTPRequest $r) { try { $speakers = $this->presentation->Speakers()->exclude(array('MemberID' => $this->presentation->CreatorID)); $this->presentation->markReceived()->write(); foreach ($speakers as $speaker) { $e = Email::create()->setTo($speaker->getEmail())->setUserTemplate('presentation-speaker-notification')->populateTemplate(array('RecipientMember' => $speaker->Member(), 'Presentation' => $this->presentation, 'Speaker' => $speaker, 'Creator' => $this->presentation->Creator(), 'EditLink' => Director::makeRelative($speaker->EditLink($this->presentation->ID)), 'ReviewLink' => Director::makeRelative($speaker->ReviewLink($this->presentation->ID)), 'PasswordLink' => Director::absoluteBaseURL() . '/lostpassword', 'Link' => Director::absoluteBaseURL() . Director::makeRelative($this->presentation->EditLink())))->send(); } // Email the creator Email::create()->setTo($this->presentation->Creator()->Email)->setUserTemplate('presentation-creator-notification')->populateTemplate(array('Creator' => $this->presentation->Creator(), 'Summit' => $this->presentation->Summit(), 'Link' => Director::absoluteBaseURL() . Director::makeRelative($this->presentation->EditLink()), 'PasswordLink' => Director::absoluteBaseURL() . '/lostpassword'))->send(); return $this->renderWith(array('PresentationPage_success', 'PresentationPage'), $this->parent); } catch (EntityValidationException $ex1) { SS_Log::log($ex1->getMessage(), SS_Log::ERR); Form::messageForForm('PresentationForm_PresentationForm', $ex1->getMessages(), 'bad'); return Controller::curr()->redirect($this->presentation->EditLink()); } catch (Exception $ex) { SS_Log::log($ex->getMessage(), SS_Log::ERR); return $this->httpError(404); } }
/** * Controller action that handles the "success" page * @param $r SS_HTTPRequest * @return SSViewer */ public function success(SS_HTTPRequest $r) { try { $this->getParent()->getPresentationManager()->completePresentation($this->presentation, new PresentationSpeakerNotificationEmailMessageSender(), new PresentationCreatorNotificationEmailMessageSender(), new PresentationModeratorNotificationEmailMessageSender()); return $this->renderWith(array('PresentationPage_success', 'PresentationPage'), $this->parent); } catch (EntityValidationException $ex1) { SS_Log::log($ex1->getMessage(), SS_Log::WARN); Form::messageForForm('PresentationForm_PresentationForm', $ex1, 'bad'); return Controller::curr()->redirect($this->presentation->EditLink()); } catch (Exception $ex) { SS_Log::log($ex->getMessage(), SS_Log::ERR); return $this->httpError(404); } }
/** * @param OpauthValidationException $e */ protected function handleOpauthException(OpauthValidationException $e) { $data = $e->getData(); $loginFormName = 'OpauthLoginForm_LoginForm'; $message; switch ($e->getCode()) { case 1: // provider error $message = _t('OpauthLoginForm.OAUTHFAILURE', 'There was a problem logging in with {provider}.', array('provider' => $data['provider'])); break; case 2: // validation error // validation error case 3: // invalid auth response $message = _t('OpauthLoginForm.RESPONSEVALIDATIONFAILURE', 'There was a problem logging in - {message}', array('message' => $e->getMessage())); break; } // Set form message, redirect to login with permission failure Form::messageForForm($loginFormName, $message, 'bad'); // always redirect to login Security::permissionFailure($this, $message); }
function doRegister($data, $form) { try { $data = SQLDataCleaner::clean($data, $non_check_keys = array('HiddenAffiliations')); Session::set("FormInfo.{$form->FormName()}.data", $data); $profile_page = EditProfilePage::get()->first(); $member = $this->member_manager->register($data, $profile_page, new MemberRegistrationSenderService()); //Get profile page if (!is_null($profile_page)) { //Redirect to profile page with success message Session::clear("FormInfo.{$form->FormName()}.data"); return OpenStackIdCommon::loginMember($member, $profile_page->Link('?success=1')); } } catch (EntityValidationException $ex1) { Form::messageForForm('HoneyPotForm_RegistrationForm', $ex1->getMessage(), 'bad'); //Return back to form SS_Log::log($ex1->getMessage(), SS_Log::ERR); return $this->redirectBack(); } catch (Exception $ex) { Form::messageForForm('HoneyPotForm_RegistrationForm', "There was an error with your request, please contact your admin.", 'bad'); //Return back to form SS_Log::log($ex->getMessage(), SS_Log::ERR); return $this->redirectBack(); } }
function SendMemberVerificationEmail($data, $form) { try { if (!isset($data['Email'])) { throw new EntityValidationException('Missing Email!'); } $email = trim($data['Email']); $this->member_manager->resendEmailVerification($email, new MemberRegistrationSenderService()); return $this->renderWith(array('MemberVerification_resendOK', 'Page'), array('Email' => $email)); } catch (EntityValidationException $ex1) { Form::messageForForm($form->FormName(), $ex1->getMessage(), 'bad'); //Return back to form SS_Log::log($ex1->getMessage(), SS_Log::WARN); return $this->redirectBack(); } catch (NotFoundEntityException $ex2) { Form::messageForForm($form->FormName(), "There was an error with your request, please contact your admin.", 'bad'); //Return back to form SS_Log::log($ex2->getMessage(), SS_Log::WARN); return $this->redirectBack(); } catch (Exception $ex) { Form::messageForForm($form->FormName(), "There was an error with your request, please contact your admin.", 'bad'); //Return back to form SS_Log::log($ex->getMessage(), SS_Log::ERR); return $this->redirectBack(); } }
/** * Handles the registration. Validates and creates the member, then redirects * to the appropriate place * * @param array $data * @param BootstrapForm $form * @return SSViewer */ public function doRegister($data, $form) { try { $back_url = Session::get('BackURL'); Session::set("FormInfo.{$form->getName()}.data", $data); $data = SQLDataCleaner::clean($data); $profile_page = EditProfilePage::get()->first(); $speaker_registration_token = Session::get(SpeakerRegistrationRequest::ConfirmationTokenParamName); if (!empty($speaker_registration_token)) { $data[SpeakerRegistrationRequest::ConfirmationTokenParamName] = $speaker_registration_token; } $member = $this->member_manager->registerSpeaker($data, new MemberRegistrationSenderService()); //Get profile page if (!is_null($profile_page)) { //Redirect to profile page with success message Session::clear("FormInfo.{$form->FormName()}.data"); if ($back_url) { $redirect = HTTP::setGetVar('welcome', 1, $back_url); return OpenStackIdCommon::loginMember($member, $redirect); } $form->sessionMessage('Awesome! You should receive an email shortly.', 'good'); Session::clear(SpeakerRegistrationRequest::ConfirmationTokenParamName); Session::clear('BackURL'); return OpenStackIdCommon::loginMember($member, $this->redirectBackUrl()); } } catch (EntityValidationException $ex1) { Form::messageForForm($form->FormName(), $ex1->getMessage(), 'bad'); //Return back to form SS_Log::log($ex1->getMessage(), SS_Log::WARN); return $this->redirectBack(); } catch (Exception $ex) { Form::messageForForm($form->FormName(), "There was an error with your request, please contact your admin.", 'bad'); //Return back to form SS_Log::log($ex->getMessage(), SS_Log::ERR); return $this->redirectBack(); } }