/** * Save a profile registration form. * * @param Profile $entity * @param Form $form * @param AbstractProvider $provider * @param string $providerName * * @return FormEntityHandler */ public function saveProfileRegisterForm(Profile $entity, Form $form, AbstractProvider $provider, $providerName) { // Create and store the account record $account = $this->createAccount($entity); $guid = $account->getGuid(); // Create the event $event = new MembersProfileEvent($account); // Create verification meta $this->createAccountVerificationKey($event, $guid); // Create a local OAuth account record $password = $form->get('password')->getData(); if ($password) { $this->createLocalOauthAccount($guid, $password); $this->createLocalProviderEntity($guid); } // Create a provider entry if ($this->session->isTransitional()) { $accessToken = $this->session->getTransitionalProvider()->getAccessToken(); $this->convertTransitionalProviderToEntity($guid); } else { $accessToken = $provider->getAccessToken('password', ['guid' => $account->getGuid()]); } // Set up the initial session. $this->session->addAccessToken($providerName, $accessToken)->createAuthorisation($guid); // Dispatch the account profile post-save event $this->eventDispatcher->dispatch(MembersEvents::MEMBER_PROFILE_REGISTER, $event); return $this; }
/** * Return the combined login & registration resolved form object. * * @param Request $request The client Request object being processed. * @param string $twigParent Parent Twig template to be used. * * @return ResolvedFormBuild */ protected function getFormCombinedLogin(Request $request, $twigParent) { $resolvedBuild = new ResolvedFormBuild(); $resolvedBuild->setContext(['twigparent' => $twigParent]); /** @var Builder\Associate $builder */ $builder = $this->formGenerator->getFormBuilder(MembersForms::FORM_ASSOCIATE); $builder->setAction(sprintf('/%s/login', $this->config->getUrlAuthenticate())); $associateForm = $builder->createForm([])->handleRequest($request); $resolvedBuild->addBuild(MembersForms::FORM_ASSOCIATE, $builder, $associateForm); /** @var Builder\LoginOauth $builder */ $builder = $this->formGenerator->getFormBuilder(MembersForms::FORM_LOGIN_OAUTH); $builder->setAction(sprintf('/%s/login', $this->config->getUrlAuthenticate())); $formOauth = $builder->createForm([])->handleRequest($request); $resolvedBuild->addBuild(MembersForms::FORM_LOGIN_OAUTH, $builder, $formOauth); /** @var Builder\LoginPassword $builder */ $builder = $this->formGenerator->getFormBuilder(MembersForms::FORM_LOGIN_PASSWORD); $builder->setAction(sprintf('/%s/login', $this->config->getUrlAuthenticate())); $formPassword = $builder->createForm([])->handleRequest($request); $resolvedBuild->addBuild(MembersForms::FORM_LOGIN_PASSWORD, $builder, $formPassword); /** @var Builder\ProfileRegister $builder */ $builder = $this->formGenerator->getFormBuilder(MembersForms::FORM_PROFILE_REGISTER); $builder->setAction(sprintf('/%s/profile/register', $this->config->getUrlMembers())); $formRegister = $builder->createForm([])->handleRequest($request); if ($this->session->isTransitional()) { } $resolvedBuild->addBuild(MembersForms::FORM_PROFILE_REGISTER, $builder, $formRegister); return $resolvedBuild; }
/** * Display the registration form. * * @param TwigEnvironment $twigEnvironment * @param string $template * * @return TwigMarkup */ public function renderRegister(TwigEnvironment $twigEnvironment, $template = null) { $context = ['transitional' => $this->session->isTransitional()]; $template = $template ?: $this->config->getTemplate('profile', 'register'); $form = $this->formManager->getFormProfileRegister(new Request(), false); $html = $this->formManager->renderForms($form, $twigEnvironment, $template, $context); return new TwigMarkup($html, 'UTF-8'); }
/** * Process the login request. * * @param Request $request * @param string $grantType * * @throws Ex\DisabledAccountException * @throws Ex\InvalidAuthorisationRequestException * @throws Ex\MissingAccountException */ protected function process(Request $request, $grantType) { $code = $request->query->get('code'); if ($code === null) { $this->setDebugMessage('Attempt to get an OAuth2 access token with an empty code in the request.'); throw new Ex\InvalidAuthorisationRequestException('No provider access code.'); } $options['code'] = $code; if ($this->session->hasAuthorisation()) { $options['guid'] = $this->session->getAuthorisation()->getGuid(); $accessToken = $this->getAccessToken($grantType, $options); $this->setSession($accessToken); if ($this->session->isTransitional()) { $this->handleAccountTransition($accessToken); } } else { //either no Auth or more probably a disabled account... anyway we cant continue $exceptionMsg = 'No valid authorisation, the account may be disabled'; $this->setDebugMessage($exceptionMsg); $this->feedback->error($exceptionMsg); throw new Ex\DisabledAccountException($exceptionMsg); } }