From e1ceb050e19c7574bca146a8da7047ee4ff456b5 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Sun, 10 Jul 2016 05:02:35 -0400
Subject: [PATCH] Merge branch 'stable-3.1'

---
 interface/lib/classes/functions.inc.php |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index 5bbff40..03bd11d 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -186,10 +186,11 @@
 		global $app;
 
 		if($type == 'IPv4'){
-			$regex = "/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/";
+//			$regex = "/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/";
+			$regex = "/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/";
 		} else {
 			// IPv6
-			$regex = "/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i";
+			$regex = "/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/";
 		}
 
 		$server_by_id = array();
@@ -301,7 +302,7 @@
 
 		if($encode == true) {
 			if(function_exists('idn_to_ascii')) {
-				$domain = idn_to_ascii($domain);
+				$domain = idn_to_ascii($domain, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46);
 			} elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) {
 				/* use idna class:
                  * @author  Matthias Sommerfeld <mso@phlylabs.de>
@@ -318,7 +319,7 @@
 			}
 		} else {
 			if(function_exists('idn_to_utf8')) {
-				$domain = idn_to_utf8($domain);
+				$domain = idn_to_utf8($domain, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46);
 			} elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) {
 				/* use idna class:
                  * @author  Matthias Sommerfeld <mso@phlylabs.de>
@@ -380,7 +381,54 @@
 		
 		return true;
 	}
+	
+	public function getimagesizefromstring($string){
+		if (!function_exists('getimagesizefromstring')) {
+			$uri = 'data://application/octet-stream;base64,' . base64_encode($string);
+			return getimagesize($uri);
+		} else {
+			return getimagesizefromstring($string);
+		}		
+	}
+	
+	public function password($minLength = 10, $special = false){
+		global $app;
+	
+		$iteration = 0;
+		$password = "";
+		$maxLength = $minLength + 5;
+		$length = $this->getRandomInt($minLength, $maxLength);
 
+		while($iteration < $length){
+			$randomNumber = (floor(((mt_rand() / mt_getrandmax()) * 100)) % 94) + 33;
+			if(!$special){
+				if (($randomNumber >=33) && ($randomNumber <=47)) { continue; }
+				if (($randomNumber >=58) && ($randomNumber <=64)) { continue; }
+				if (($randomNumber >=91) && ($randomNumber <=96)) { continue; }
+				if (($randomNumber >=123) && ($randomNumber <=126)) { continue; }
+			}
+			$iteration++;
+			$password .= chr($randomNumber);
+		}
+		$app->uses('validate_password');
+		if($app->validate_password->password_check('', $password, '') !== false) $password = $this->password($minLength, $special);
+		return $password;
+	}
+
+	public function getRandomInt($min, $max){
+		return floor((mt_rand() / mt_getrandmax()) * ($max - $min + 1)) + $min;
+	}
+	
+	public function generate_customer_no(){
+		global $app;
+		// generate customer no.
+		$customer_no = mt_rand(100000, 999999);
+		while($app->db->queryOneRecord("SELECT client_id FROM client WHERE customer_no = ?", $customer_no)) {
+			$customer_no = mt_rand(100000, 999999);
+		}
+		
+		return $customer_no;
+	}
 }
 
 ?>

--
Gitblit v1.9.1