public function perform() { $this->req->onSessionRead(function () { if (!isset($_SESSION['extAuth'])) { $this->req->setResult(['success' => false, 'errors' => ['email' => 'Session expired']]); return; } if (($email = Request::getString($_REQUEST['email'])) === '') { $this->req->setResult(['success' => false, 'errors' => ['email' => 'Empty E-Mail']]); return; } if (!isset($_SESSION['credentials']['email'])) { $_SESSION['credentials']['email'] = $email; $this->req->updatedSession = true; } //send $credentials = $_SESSION['extAuth']; $this->appInstance->externalSignupRequests->getRequestByCredentials($credentials, function ($request) use($email, $credentials) { if (!$request || !isset($request['code'])) { $code = $this->cmp->getConfirmationCode($email); $this->appInstance->externalSignupRequests->save(['email' => $email, 'code' => $code, 'credentials' => $credentials, 'add' => Request::getArray($_SESSION['extAuthAdd'])], function ($lastError) use($email, $code) { if (isset($lastError['err']) || isset($lastError['$err'])) { $this->req->setResult(['success' => false, 'errors' => ['email' => 'Sorry, internal error.']]); return; } $this->req->appInstance->Sendmail->mailTemplate('mailAccountCompleteSignup', $email, ['email' => $email, 'code' => $code, 'locale' => $this->req->appInstance->getLocaleName(Request::getString($_REQUEST['LC']))]); $this->req->setResult(['success' => true, 'status' => 'sent']); return; }); } else { if ('' === ($user_code = Request::getString($_REQUEST['code']))) { $this->req->appInstance->Sendmail->mailTemplate('mailAccountCompleteSignup', $email, ['email' => $email, 'code' => $request['code'], 'locale' => $this->req->appInstance->getLocaleName(Request::getString($_REQUEST['LC']))]); $this->req->setResult(['success' => true, 'status' => 'sent']); return; } if ($user_code === $request['code']) { $account = $this->appInstance->accounts->getAccountBase($this->req); $account['email'] = $email; $account['credentials'] = [$credentials]; $account = $_SESSION['extAuthAdd'] + $account; $this->appInstance->accounts->saveAccount($account, function ($lastError) use($email, $request) { if (isset($lastError['err']) || isset($lastError['$err'])) { $this->req->setResult(['success' => false, 'errors' => ['email' => 'Sorry, internal error.']]); return; } $this->appInstance->accounts->getAccountByEmail($email, function ($account) use($request) { if (!$account) { $this->req->setResult(['success' => false, 'errors' => ['email' => 'Sorry, internal error.']]); return; } $this->appInstance->externalSignupRequests->remove(['_id' => new \MongoId($request['_id'])]); $this->cmp->loginAs($account); $this->req->setResult(['success' => true, 'status' => 'verified']); return; }); }); } else { $this->req->setResult(['success' => false, 'errors' => ['code' => 'Wrong code']]); return; } } }); }); }