/**
  * @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);
     }
 }
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 /**
  * @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');
     }
 }