[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / verifier / verifier / url.php
diff --git a/www/plugins/auto/verifier/verifier/url.php b/www/plugins/auto/verifier/verifier/url.php
new file mode 100644 (file)
index 0000000..dcfc9e2
--- /dev/null
@@ -0,0 +1,139 @@
+<?php\r
+\r
+// Sécurité\r
+if (!defined("_ECRIRE_INC_VERSION")) return;\r
+\r
+/**\r
+ * Vérification d'une URL\r
+ * \r
+ * Si auncune option n'est définie, vérifie uniquement si un protocole de type web est défini\r
+ *\r
+ * @param string $valeur\r
+ *   La valeur à vérifier.\r
+ * @param array $options\r
+ *      mode : protocole_seul, php_filter, complet\r
+ *              type_protocole : tous, web (http ou https), mail (imap, pop3, smtp), ftp (ftp ou sftp), exact\r
+ *     protocole : nom du protocole (si type_protocole=exact)\r
+ * @return string\r
+ *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.\r
+ */\r
+function verifier_url_dist($valeur, $options=array()){\r
+       if (!is_string($valeur))\r
+               return _T('erreur_inconnue_generique');\r
+\r
+       // Choix du mode de verification de la syntaxe des url\r
+       if (!$options['mode'] or !in_array($options['mode'], array('protocole_seul','php_filter','complet'))){\r
+               $mode = 'protocole_seul';\r
+       }\r
+       else{\r
+               $mode = $options['mode'];\r
+       }\r
+               \r
+       // Choix du type de protocole à vérifier\r
+       if (!$options['type_protocole'] or !in_array($options['type_protocole'], array('tous','web','mail','ftp','exact'))){\r
+               $type_protocole = 'web';\r
+       }\r
+       else{\r
+               $type_protocole = $options['type_protocole'];\r
+               $protocole = '' ;\r
+               if ($type_protocole=='exact' && $options['protocole']){\r
+                       $protocole = $options['protocole'];\r
+               }\r
+       }\r
+               \r
+       $fonctions_disponibles = array('protocole_seul' => 'verifier_url_protocole', 'php_filter' => 'verifier_php_filter', 'complet' => 'verifier_url_complet');\r
+       $fonction_verif = $fonctions_disponibles[$mode];\r
+       \r
+       return $fonction_verif($valeur,$type_protocole,$protocole) ;\r
+\r
+}\r
+\r
+/**\r
+ * Vérifier uniquement la présence d'un protocole\r
+ *\r
+ * @param string $valeur La valeur à vérifier\r
+ * @param string $type_protocole : tous, web (http ou https), mail (imap, pop3, smtp), ftp (ftp ou sftp), exact\r
+ * @param string $protocole : nom du protocole (si type_protocole=exact)\r
+ * @return boolean Retourne true uniquement lorsque l'url est valide\r
+ */\r
+function verifier_url_protocole($url,$type_protocole,$protocole){\r
+\r
+       $urlregex = array('tous' => "^([a-z0-9]*)\:\/\/.*$",\r
+                                                'web' => "^(https?)\:\/\/.*$",\r
+                                                'ftp' => "^(s?ftp)\:\/\/.*$",\r
+                                                'mail' => "^(pop3|smtp|imap)\:\/\/.*$",\r
+                                                'exact' => "^(".$protocole.")\:\/\/.*$");\r
+       \r
+       $msg_erreur = array('tous' => "",\r
+                                                        'web' => "http://, https://",\r
+                                                        'ftp' => "^ftp://, sftp://",\r
+                                                        'mail' => "pop3://, smtp://, imap://",\r
+                                                        'exact' => $protocole."://" );\r
+       \r
+\r
+       if (!eregi($urlregex[$type_protocole], $url)) {\r
+               if($type_protocole=="tous") {\r
+                       return _T('verifier:erreur_url_protocole_exact', array('url' => echapper_tags($url)));\r
+               } else {\r
+                       return _T('verifier:erreur_url_protocole', array('url' => echapper_tags($url),'protocole' => $msg_erreur[$type_protocole]));\r
+               }\r
+       }\r
+       return '';\r
+}\r
+\r
+/**\r
+ * Vérifier uniquement la présence d'un protocole\r
+ *\r
+ * @param string $valeur La valeur à vérifier\r
+ * @param string $type_protocole : tous, web (http ou https), mail (imap, pop3, smtp), ftp (ftp ou sftp), exact\r
+ * @param string $protocole : nom du protocole (si type_protocole=exact)\r
+ * @return boolean Retourne true uniquement lorsque l'url est valide\r
+ */\r
+function verifier_php_filter($url,$type_protocole,$protocole){\r
+\r
+       if (!filter_var($url, FILTER_VALIDATE_URL))\r
+               return _T('verifier:erreur_url', array('url' => echapper_tags($valeur)));\r
+       return '';\r
+}\r
+\r
+/**\r
+ * Vérifier la présence d'un protocole et de la bonne syntaxe du reste de l'url\r
+ *\r
+ * http://phpcentral.com/208-url-validation-in-php.html\r
+ * <http[s]|ftp> :// [user[:pass]@] hostname [port] [/path] [?getquery] [anchor]\r
+ *\r
+ * @param string $valeur La valeur à vérifier\r
+ * @param string $type_protocole : web (http ou https), mail (imap, pop3, smtp), ftp (ftp ou sftp), exact\r
+ * @param string $protocole : nom du protocole (si type_protocole=exact)\r
+ * @return boolean Retourne true uniquement lorsque l'url est valide\r
+ */\r
+function verifier_url_complet($url,$type_protocole,$protocole){\r
+       \r
+       if($msg=verifier_url_protocole($url,$type_protocole,$protocole)!=''){\r
+               return $msg;\r
+       }\r
+       // SCHEME\r
+       $urlregex = "^(.*)\:\/\/";\r
+       \r
+       // USER AND PASS (optional)\r
+       $urlregex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?";\r
+       \r
+       // HOSTNAME OR IP\r
+       $urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*"; // http://x = allowed (ex. http://localhost, http://routerlogin)\r
+       //$urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)+"; // http://x.x = minimum\r
+       //$urlregex .= "([a-z0-9+\$_-]+\.)*[a-z0-9+\$_-]{2,3}"; // http://x.xx(x) = minimum\r
+       //use only one of the above\r
+       \r
+       // PORT (optional)\r
+       $urlregex .= "(\:[0-9]{2,5})?";\r
+       // PATH (optional)\r
+       $urlregex .= "(\/([a-z0-9+\$_%,-]\.?)+)*\/?";\r
+       // GET Query (optional)\r
+       $urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?";\r
+       // ANCHOR (optional)\r
+       $urlregex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?\$";\r
+       \r
+       if (!eregi($urlregex, $url))\r
+               return _T('verifier:erreur_url', array('url' => echapper_tags($valeur)));\r
+       return '';\r
+}
\ No newline at end of file