From 6ddd8ba0b27bb3635ada951a1fc4ced77c609573 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de>
Date: Thu, 20 Sep 2018 18:06:37 +0200
Subject: [PATCH] feat: sanitizeCode

---
 ajax/frontend/redeem.php        |  1 +
 src/QUI/ERP/Coupons/Handler.php | 15 +++++++++++++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/ajax/frontend/redeem.php b/ajax/frontend/redeem.php
index b78d2ea..6ad85bd 100644
--- a/ajax/frontend/redeem.php
+++ b/ajax/frontend/redeem.php
@@ -16,6 +16,7 @@
     'package_quiqqer_coupons_ajax_frontend_redeem',
     function ($code, $orderHash) {
         try {
+            $code       = Handler::sanitizeCode($code);
             $CouponCode = Handler::getCouponCodeByCode($code);
             $CouponCode->checkRedemption(QUI::getUserBySession());
         } catch (QUI\ERP\Coupons\CouponCodeException $Exception) {
diff --git a/src/QUI/ERP/Coupons/Handler.php b/src/QUI/ERP/Coupons/Handler.php
index c437abd..122cfa1 100644
--- a/src/QUI/ERP/Coupons/Handler.php
+++ b/src/QUI/ERP/Coupons/Handler.php
@@ -130,7 +130,7 @@ public static function createCouponCode($discountIds, $settings = [])
                 ]);
             }
 
-            $code = $settings['code'];
+            $code = self::sanitizeCode($settings['code']);
         } else {
             $code = CodeGenerator::generate();
         }
@@ -221,7 +221,7 @@ public static function editCouponCode($id, $discountIds, $settings = [])
                 ]);
             }
 
-            $code = $settings['code'];
+            $code = self::sanitizeCode($settings['code']);
         } else {
             $code = CodeGenerator::generate();
         }
@@ -492,6 +492,17 @@ public static function deleteRedeemedCouponCodes($days = null)
         );
     }
 
+    /**
+     * Sanitize coupon code and allow only certain characters
+     *
+     * @param string $code
+     * @return string
+     */
+    public static function sanitizeCode($code)
+    {
+        return preg_replace('#[^A-Za-z0-9\.\-_\*&$% ]#i', '', $code);
+    }
+
     /**
      * Get CouponCode table
      *
-- 
GitLab