better debugging for web errors
authorKonrad Rosenbaum <konrad@silmor.de>
Tue, 4 Jul 2017 20:57:46 +0000 (22:57 +0200)
committerKonrad Rosenbaum <konrad@silmor.de>
Tue, 4 Jul 2017 20:57:46 +0000 (22:57 +0200)
Change-Id: I2b3ab19bdddf076a19b79b321a254fa99bbbf314

www/config.php.template
www/inc/global_functions.php
www/inc/wext/customer.php
www/index.php
www/template/de/error.html [new file with mode: 0644]
www/template/de/loginerror.html [new file with mode: 0644]

index b702f03..1cd587d 100644 (file)
@@ -76,6 +76,7 @@ $olddb->setCharacterSet("utf8");
 //set to false for production, mail goes to real recipient
 $IsDemoSystem=true;
 $DemoMailAddr="konrad@localhost";
+$ErrorMailAddr="konrad@localhost";
 
 
 ////////////
index 367f43c..4afc4c1 100644 (file)
@@ -1,8 +1,9 @@
 <?php
 // +----------------------------------------------------------------------
-// | PHP Source                                                           
+// | PHP Source: some global basic functions
 // +----------------------------------------------------------------------
 // | Copyright (C) 2008 by Peter Keller <peter@silmor.de>
+// |           (c) Konrad Rosenbaum <konrad@silmor.de>, 2010-2017
 // +----------------------------------------------------------------------
 // |
 // | Copyright: See COPYING file that comes with this distribution
@@ -19,7 +20,10 @@ function isEmpty($var)
 \returns true if the value has e-mail syntax */
 function isEmail($value)
 {
-       return preg_match("/^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+$/", $value) != false;
+       if(defined('FILTER_FLAG_EMAIL_UNICODE'))$opt=FILTER_FLAG_EMAIL_UNICODE;
+       else $opt=0;
+       return filter_var($value,FILTER_VALIDATE_EMAIL,$opt) != false;
+       //old regex: preg_match("/^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+$/", $value)
 }
 
 /**redirects the browser to index.php*/
index 4f23041..5d8d106 100644 (file)
@@ -533,7 +533,9 @@ class WOCustomer extends WOCustomerAbstract
                if(!isset($HTTPARGS[$nameidx]) || !isset($HTTPARGS[$passidx]) || !isset($HTTPARGS[$passidx2]))
                        return self::loginError("create");
                //check whether the chosen email is valid and does not exist yet
-               $mail=$HTTPARGS[$nameidx];
+               $mail=trim($HTTPARGS[$nameidx]);
+               if(!isEmail($mail))
+                       return self::loginError("invalid");
                $ct=WTcustomer::selectFromDB("email=".$db->escapeString($mail));
                if(count($ct)>0)
                        return self::loginError("exist");
index 2cca618..133cab2 100644 (file)
@@ -117,6 +117,13 @@ try{
 }catch(Exception $ex){
        //log to (Apache) log file
        error_log($ex->getMessage());
+       //try to send error mail
+       if(isset($ErrorMailAddr)){
+               try{
+                       $txt=$ex->getMessage();
+                       mail($ErrorMailAddr, "MagicSmoke Error: $txt", "An error occured in MagicSmoke:\n$txt\nMode: $mode\n\nStack Trace:\n".$ex->getTraceAsString());
+               }catch(Exception $x){}
+       }
        //get error template (or fallback for it)
        try{
                $p=$twig->loadTemplate("error.html");
diff --git a/www/template/de/error.html b/www/template/de/error.html
new file mode 100644 (file)
index 0000000..e74ef98
--- /dev/null
@@ -0,0 +1,20 @@
+<html>
+<title>Error</title>
+<body>
+<h1>Fehler</h1>
+
+Ein Fehler ist aufgetreten:
+
+{{ErrorText}}<p/>
+
+{# have the following only in development mode!
+It prints a full stack trace, which you probably do not want in production. 
+<pre>
+{{ErrorTrace}}
+</pre>#}
+
+<hr/>
+<a href="{{script.root}}">Zur&uuml;ck zum Shop</a><p/>
+
+<a href="{{script.basedir}}/..">Zur Homepage</a>
+</html>
\ No newline at end of file
diff --git a/www/template/de/loginerror.html b/www/template/de/loginerror.html
new file mode 100644 (file)
index 0000000..10ce1dc
--- /dev/null
@@ -0,0 +1,25 @@
+{% extends 'layout.html' %}
+{% block title %}Loginfehler{% endblock %}
+
+{% block page %}
+{% if(errorType=="login") %}
+  Der Login existiert nicht, ist keine e-Mail-Adresse oder das Passwort ist falsch (Gro&szlig;- &amp; Kleinschreibung beachten).
+{% elseif(errorType=="exist") %}
+  Der Login existiert bereits, bitte w&auml;hlen Sie eine andere Mailadresse (Gro&szlig;- &amp; Kleinschreibung beachten).
+{% elseif(errorType=="mismatch") %}
+  Das Passwort stimmt nicht &uuml;berein oder ist leer. Bitte gehen Sie zur&uuml;ck und versuchen Sie es noch einmal.
+{% elseif(errorType=="invalid") %}
+  Die E-Mail-Adresse ist nicht g&uuml;ltig. Bitte gehen Sie zur&uuml;ck und geben Sie eine g&uuml;ltige Adresse ein.
+{% else %}
+Unbekannte Fehlerart: {{errorType}}
+{% endif %}
+<p/>
+Falls Sie Ihr Passwort vergessen haben, bitte senden Sie uns über unser Kontaktfomular (<a href="../kontakt/formular-a.php">info@DasZauberschloss.de</a>) eine E-Mail.
+<p/>
+
+<a href="{{backUrl|raw}}">Nochmal versuchen</a><p>
+
+<hr/>
+<a href="{{script.root}}">Zur&uuml;ck zum Shop</a>
+
+{% endblock page %}