/** * @param \Enlight_Controller_ActionEventArgs $args */ public function onPostDispatchCheckoutSecure($args) { $controller = $args->getSubject(); $request = $controller->Request(); $view = $controller->View(); if ($controller->Response()->isRedirect()) { return; } $cameFromStep2 = $this->session->offsetGet('PayPalPlusCameFromStep2'); if (!$cameFromStep2 && $request->getActionName() !== 'preRedirect') { $this->session->offsetUnset('PaypalPlusPayment'); } /** @var $shop \Shopware\Models\Shop\Shop */ $shop = $this->bootstrap->get('shop'); $templateVersion = $shop->getTemplate()->getVersion(); if ($request->getActionName() === 'finish') { $this->addInvoiceInstructionsToView($view, $templateVersion); } $allowedActions = array('confirm', 'shippingPayment'); // Check action if (!in_array($request->getActionName(), $allowedActions, true)) { $this->session->offsetUnset('PayPalPlusCameFromStep2'); return; } if ($request->get('ppplusRedirect')) { $controller->redirect(array('controller' => 'checkout', 'action' => 'payment', 'sAGB' => 1)); return; } // Paypal plus conditions $user = $view->getAssign('sUserData'); $countries = $this->bootstrap->Config()->get('paypalPlusCountries'); if ($countries instanceof \Enlight_Config) { $countries = $countries->toArray(); } else { $countries = (array) $countries; } if (!empty($this->session->PaypalResponse['TOKEN']) || empty($user['additional']['payment']['name']) || !in_array($user['additional']['country']['id'], $countries)) { return; } $this->bootstrap->registerMyTemplateDir(); if ($templateVersion < 3) { // emotion template $view->extendsTemplate('frontend/payment_paypal_plus/checkout.tpl'); } $this->addTemplateVariables($view); if ($request->getActionName() === 'shippingPayment') { $this->session->offsetSet('PayPalPlusCameFromStep2', true); $this->onPaypalPlus($controller); return; } $view->assign('cameFromStep2', $cameFromStep2); $this->session->offsetUnset('PayPalPlusCameFromStep2'); if (!$cameFromStep2 && $user['additional']['payment']['name'] === 'paypal') { $this->onPaypalPlus($controller); } }
/** * Helper function for sLogin * Called when provided user data is incorrect * Handles account lockdown detection and brute force protection * * @param $addScopeSql * @param $email * @param $sErrorMessages * @param $password * @return array */ private function failedLoginUser($addScopeSql, $email, $sErrorMessages, $password) { // Check if account is disabled $sql = "SELECT id FROM s_user WHERE email=? AND active=0 " . $addScopeSql; $getUser = $this->db->fetchOne($sql, array($email)); if ($getUser) { $sErrorMessages[] = $this->snippetManager->getNamespace('frontend/account/internalMessages')->get('LoginFailureActive', 'Your account is disabled. Please contact us.'); } else { $getLockedUntilTime = $this->db->fetchOne("SELECT 1 FROM s_user WHERE email = ? AND lockeduntil > NOW()", array($email)); if (!empty($getLockedUntilTime)) { $sErrorMessages[] = $this->snippetManager->getNamespace('frontend/account/internalMessages')->get('LoginFailureLocked', 'Too many failed logins. Your account was temporary deactivated.'); } else { $sErrorMessages[] = $this->snippetManager->getNamespace('frontend/account/internalMessages')->get('LoginFailure', 'Wrong email or password'); } } // Prevent brute force login attempts if (!empty($email)) { $sql = "\n UPDATE s_user SET\n failedlogins = failedlogins + 1,\n lockeduntil = IF(\n failedlogins > 4,\n DATE_ADD(NOW(), INTERVAL (failedlogins + 1) * 30 SECOND),\n NULL\n )\n WHERE email = ? " . $addScopeSql; $this->db->query($sql, array($email)); } $this->eventManager->notify('Shopware_Modules_Admin_Login_Failure', array('subject' => $this, 'email' => $email, 'password' => $password, 'error' => $sErrorMessages)); $this->session->offsetUnset('sUserMail'); $this->session->offsetUnset('sUserPassword'); $this->session->offsetUnset('sUserId'); return $sErrorMessages; }
/** * @param \Enlight_Controller_ActionEventArgs $args */ public function onPostDispatchCheckout($args) { $cameFromStep2 = $this->session->offsetGet('PayPalPlusCameFromStep2'); if (!$cameFromStep2) { unset($this->session->PaypalPlusPayment); } $action = $args->getSubject(); $request = $action->Request(); $response = $action->Response(); $view = $action->View(); // Secure dispatch if (!$request->isDispatched() || $response->isException() || $response->isRedirect()) { return; } /** @var $shopContext \Shopware\Models\Shop\Shop */ $shopContext = $this->bootstrap->get('shop'); $templateVersion = $shopContext->getTemplate()->getVersion(); if ($request->getActionName() == 'finish') { $this->addInvoiceInstructionsToView($view, $templateVersion); } //Fix payment description $newDescription = $this->bootstrap->Config()->get('paypalPlusDescription', ''); $newAdditionalDescription = $this->bootstrap->Config()->get('paypalPlusAdditionalDescription', ''); $payments = $view->getAssign('sPayments'); if (!empty($payments)) { foreach ($payments as $key => $payment) { if ($payment['name'] == 'paypal') { $payments[$key]['description'] = $newDescription; $payments[$key]['additionaldescription'] = $payment['additionaldescription'] . $newAdditionalDescription; break; } } $view->assign('sPayments', $payments); } $user = $view->getAssign('sUserData'); if (!empty($user['additional']['payment']['name']) && $user['additional']['payment']['name'] == 'paypal') { $user['additional']['payment']['description'] = $newDescription; $user['additional']['payment']['additionaldescription'] = $newAdditionalDescription; $view->assign('sUserData', $user); } if (method_exists($this->paypalBootstrap, 'getPayment')) { $payPalPaymentId = $this->paypalBootstrap->getPayment()->getId(); } else { //fallback for SwagPaymentPaypal verion < 3.3.4 $payPalPaymentId = $this->paypalBootstrap->Payment()->getId(); } $view->assign('PayPalPaymentId', $payPalPaymentId); $allowedActions = array('confirm', 'shippingPayment', 'saveShippingPayment'); // Check action if (!in_array($request->getActionName(), $allowedActions, true)) { return; } if ($request->get('ppplusRedirect')) { $action->redirect(array('controller' => 'checkout', 'action' => 'payment', 'sAGB' => 1)); return; } // Paypal plus conditions $user = $view->getAssign('sUserData'); $countries = $this->bootstrap->Config()->get('paypalPlusCountries'); if ($countries instanceof \Enlight_Config) { $countries = $countries->toArray(); } else { $countries = (array) $countries; } if (!empty($this->session->PaypalResponse['TOKEN']) || empty($user['additional']['payment']['name']) || !in_array($user['additional']['country']['id'], $countries)) { return; } if ($this->session->offsetExists('PaypalCookieValue') && $request->getActionName() != 'shippingPayment') { setcookie('paypalplus_session', $this->session->offsetGet('PaypalCookieValue')); $view->assign('cameFromStep2', $cameFromStep2); $this->session->offsetUnset('PaypalCookieValue'); $this->session->offsetUnset('PayPalPlusCameFromStep2'); } $this->bootstrap->registerMyTemplateDir(); if ($request->getActionName() == 'shippingPayment' || !$cameFromStep2) { $this->onPaypalPlus($action); } if ($templateVersion < 3) { // emotion template $view->extendsTemplate('frontend/payment_paypal_plus/checkout.tpl'); } }