tazpanel rev 260

installer.cgi: hide and check passwords
author Dominique Corbex <domcox@slitaz.org>
date Sat Mar 03 12:14:00 2012 +0100 (2012-03-03)
parents 2091e38d34c4
children 9bcc77055db5
files installer.cgi
line diff
     1.1 --- a/installer.cgi	Fri Mar 02 20:05:01 2012 +0100
     1.2 +++ b/installer.cgi	Sat Mar 03 12:14:00 2012 +0100
     1.3 @@ -223,15 +223,13 @@
     1.4  	cat <<EOT
     1.5  <a name="source"></a>
     1.6  <h4>$(gettext "Source")</h4>
     1.7 -	<table>
     1.8 -	<tr>
     1.9 -	<td><input type="radio" name="INST_TYPE" value="cdrom" $([ "$INST_TYPE" == "cdrom" ] && echo "checked") id="cdrom" />
    1.10 -	<label for="cdrom">$(gettext "LiveCD")</td></label>
    1.11 -	</tr>
    1.12 -	<tr>
    1.13 -	<td><input type="radio" name="INST_TYPE" value="usb" $([ "$INST_TYPE" == "usb" ] && echo "checked") id="usb" />
    1.14 -	<label for="usb">$(gettext "LiveUSB"):
    1.15 -	<select name="SRC_USB">
    1.16 +<div class="box">
    1.17 +<input type="radio" name="INST_TYPE" value="cdrom" $([ "$INST_TYPE" == "cdrom" ] && echo "checked") id="cdrom" />
    1.18 +<label for="cdrom">$(gettext "LiveCD")</td></label>
    1.19 +<br />
    1.20 +<input type="radio" name="INST_TYPE" value="usb" $([ "$INST_TYPE" == "usb" ] && echo "checked") id="usb" />
    1.21 +<label for="usb">$(gettext "LiveUSB"):
    1.22 +<select name="SRC_USB">
    1.23  EOT
    1.24  	# List disks if plugged USB device
    1.25  	usb=0
    1.26 @@ -252,37 +250,32 @@
    1.27  		echo "<option value="">$(gettext "Not found")</option>"
    1.28  	fi
    1.29  	cat << EOT
    1.30 -	</select></label>
    1.31 -	</td>
    1.32 -	</tr>
    1.33 -	<tr>
    1.34 -	<td><input type="radio" name="INST_TYPE" value="iso" $([ "$INST_TYPE" == "iso" ] && echo "checked") id="iso" />
    1.35 -	<label for="iso">$(gettext "ISO file"):</label>
    1.36 -	<input type="url" size="50" name="SRC_ISO" $([ "$INST_TYPE" == "iso" ] && echo -e "value=\"$SRC_FILE\"") placeholder="$(gettext "Full path to the ISO image file")" />
    1.37 -	</td>
    1.38 -	</tr>
    1.39 -	<tr>
    1.40 -	<td><input type="radio" name="INST_TYPE" value="web" $([ "$INST_TYPE" == "web" ] && echo "checked") id="web" />
    1.41 -	<label for="web">$(gettext "Web"):
    1.42 -	<a class="button" onclick="document.forms['ConfigForm'].url.value = '$(tazinst showurl stable)'; return true;">$(gettext "Stable")</a>
    1.43 -	<a class="button" onclick="document.forms['ConfigForm'].url.value = '$(tazinst showurl cooking)'; return true;">$(gettext "Cooking")</a>
    1.44 -	$(gettext "URL:")
    1.45 -	<input id="url" type="url" size="55" name="SRC_WEB" value="$get_SRC_WEB" placeholder="$(gettext "Full url to an ISO image file")" /></td>
    1.46 -	</label>
    1.47 -	</tr>
    1.48 -	</table>
    1.49 +</select>
    1.50 +</label>
    1.51 +<br />
    1.52 +<input type="radio" name="INST_TYPE" value="iso" $([ "$INST_TYPE" == "iso" ] && echo "checked") id="iso" />
    1.53 +<label for="iso">$(gettext "ISO file"):</label>
    1.54 +<input type="url" size="50" name="SRC_ISO" $([ "$INST_TYPE" == "iso" ] && echo -e "value=\"$SRC_FILE\"") placeholder="$(gettext "Full path to the ISO image file")" />
    1.55 +<br />
    1.56 +<input type="radio" name="INST_TYPE" value="web" $([ "$INST_TYPE" == "web" ] && echo "checked") id="web" />
    1.57 +<label for="web">$(gettext "Web"):
    1.58 +<a class="button" onclick="document.forms['ConfigForm'].url.value = '$(tazinst showurl stable)'; return true;">$(gettext "Stable")</a>
    1.59 +<a class="button" onclick="document.forms['ConfigForm'].url.value = '$(tazinst showurl cooking)'; return true;">$(gettext "Cooking")</a>
    1.60 +$(gettext "URL:")
    1.61 +<input id="url" type="url" size="55" name="SRC_WEB" value="$get_SRC_WEB" placeholder="$(gettext "Full url to an ISO image file")" />
    1.62 +</label>
    1.63 +</div>
    1.64  EOT
    1.65  }
    1.66  
    1.67  select_partition()
    1.68  {
    1.69 -cat <<EOT
    1.70 +	cat <<EOT
    1.71  <a name="partition"></a>
    1.72  <h4></span>$(gettext "Main Partition")</h4>
    1.73 -<table>
    1.74 -<tr><td>
    1.75 -	$(gettext "Partition to use:")
    1.76 -	<select name="TGT_PARTITION">
    1.77 +<div class="box">
    1.78 +$(gettext "Partition to use:")
    1.79 +<select name="TGT_PARTITION">
    1.80  EOT
    1.81  	# List partitions
    1.82  	if fdisk -l | grep -q ^/dev/ ; then
    1.83 @@ -294,11 +287,11 @@
    1.84  		echo "<option value="">$(gettext "Not found")</option>"
    1.85  	fi
    1.86  	cat << EOT
    1.87 -	</select>
    1.88 -	<br />
    1.89 -	<input type="checkbox" name="MAIN_FMT" value="yes" $([ -n "$TGT_FS" ] && echo "checked") id="mainfs" />
    1.90 -	<label for="mainfs">$(gettext "Format partition as"):</label>
    1.91 -	<select name="MAIN_FS">
    1.92 +</select>
    1.93 +<br />
    1.94 +<input type="checkbox" name="MAIN_FMT" value="yes" $([ -n "$TGT_FS" ] && echo "checked") id="mainfs" />
    1.95 +<label for="mainfs">$(gettext "Format partition as"):</label>
    1.96 +<select name="MAIN_FS">
    1.97  EOT
    1.98  	scan_mkfs
    1.99  	for i in $FS
   1.100 @@ -307,20 +300,18 @@
   1.101  	done
   1.102  	cat <<EOT
   1.103  </select>
   1.104 -</td></tr>
   1.105 -</table>
   1.106 +</div>
   1.107  EOT
   1.108  }
   1.109  
   1.110  select_old_slitaz()
   1.111  {
   1.112 -cat <<EOT
   1.113 +	cat <<EOT
   1.114  <a name="partition"></a>
   1.115  <h4></span>$(gettext "Existing SliTaz Partition")</h4>
   1.116 -<table>
   1.117 -<tr><td>
   1.118 -	$(gettext "Partition in use:")
   1.119 -	<select name="TGT_PARTITION">
   1.120 +<div class="box">
   1.121 +$(gettext "Partition in use:")
   1.122 +<select name="TGT_PARTITION">
   1.123  EOT
   1.124  	# List partitions
   1.125  	if fdisk -l | grep -q ^/dev/ ; then
   1.126 @@ -333,8 +324,7 @@
   1.127  	fi
   1.128  	cat <<EOT
   1.129  </select>
   1.130 -</td></tr>
   1.131 -</table>
   1.132 +</div>
   1.133  EOT
   1.134  }
   1.135  
   1.136 @@ -344,8 +334,8 @@
   1.137  <a name="home"></a>
   1.138  <h4>$(gettext "Home partition")</h4>
   1.139  <input type="checkbox" name="HOME_SELECT" value="yes" $([ -n "$TGT_HOME" ] && echo "checked") id="homepart" />
   1.140 -	<label for="homepart">$(gettext "Use a separate partition for /home:")</label>
   1.141 -	<select name="TGT_HOME">
   1.142 +<label for="homepart">$(gettext "Use a separate partition for /home:")</label>
   1.143 +<select name="TGT_HOME">
   1.144  EOT
   1.145  	# List disk if plugged USB device
   1.146  	if fdisk -l | grep -q ^/dev/ ; then
   1.147 @@ -357,11 +347,11 @@
   1.148  		echo "<option value="">$(gettext "Not found")</option>"
   1.149  	fi
   1.150  cat <<EOT
   1.151 -	</select>
   1.152 +</select>
   1.153  	
   1.154 -	<input type="checkbox" name="HOME_FMT" value="yes" $([ -n "$TGT_HOME_FS" ] && echo "checked") id="homefs" />
   1.155 -	<label for="homefs">$(gettext "Format partition as:")</label>
   1.156 -	<select name="HOME_FS">"
   1.157 +<input type="checkbox" name="HOME_FMT" value="yes" $([ -n "$TGT_HOME_FS" ] && echo "checked") id="homefs" />
   1.158 +<label for="homefs">$(gettext "Format partition as:")</label>
   1.159 +<select name="HOME_FS">"
   1.160  EOT
   1.161  	for i in $FS
   1.162  	do
   1.163 @@ -373,32 +363,167 @@
   1.164  select_hostname()
   1.165  {
   1.166  cat << EOT
   1.167 +<script type="text/javascript">
   1.168 +    function checkHostname(){
   1.169 +		var host = document.getElementById('h1');
   1.170 +		var msg = document.getElementById('hostAlert');
   1.171 +		var enoughRegex = new RegExp("(?=.{3,}).*", "g");
   1.172 +		var incharRegex = new RegExp("^[A-Za-z0-9_]{3,20}$");
   1.173 +		if (false == enoughRegex.test(host.value)) {
   1.174 +			msg.style.color = "tomato";
   1.175 +			msg.innerHTML ="&#x2716; Too short";
   1.176 +			return false;
   1.177 +		} else if (false == incharRegex.test(host.value)) {
   1.178 +				msg.style.color = "tomato";
   1.179 +				msg.innerHTML ="&#x2716; Invalid chars";
   1.180 +				return false;
   1.181 +		} else {
   1.182 +			msg.style.color = "limegreen";
   1.183 +			msg.innerHTML = "&#x2714;";
   1.184 +		}
   1.185 +	}
   1.186 +</script>
   1.187  <a name="hostname"></a>
   1.188  <h4>$(gettext "Host")</h4>
   1.189  $(gettext "Hostname:")
   1.190 -<input type="text" name="TGT_HOSTNAME" value="$TGT_HOSTNAME" placeholder="$(gettext "Name of your system")" />
   1.191 +<input type="text" id="h1" name="TGT_HOSTNAME" value="$TGT_HOSTNAME" placeholder="$(gettext "Name of your system")" onkeyup="checkHostname(); return false;" />
   1.192 +<span id="hostAlert"></span>
   1.193  EOT
   1.194  }
   1.195  
   1.196  select_root()
   1.197  {
   1.198  cat << EOT
   1.199 +<script type="text/javascript">
   1.200 +	function checkRootPwd(){
   1.201 +		var pwd1 = document.getElementById('p1');
   1.202 +		var pwd2 = document.getElementById('p2');
   1.203 +		var msg = document.getElementById('rootPwdAlert');
   1.204 +		if(pwd1.value == pwd2.value){
   1.205 +			// passwords match. 
   1.206 +			pwd2.style.backgroundColor = "white";
   1.207 +			// various checks
   1.208 +			var enoughRegex = new RegExp("(?=.{4,}).*", "g");
   1.209 +			var incharRegex = new RegExp("^[A-Za-z0-9!@#$%^&*()_]{4,20}$");
   1.210 +			var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
   1.211 +			var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
   1.212 +			if (pwd1.value.length==0) {
   1.213 +				msg.style.color = "tomato";
   1.214 +				msg.innerHTML = "&#x2716; Missing Password";
   1.215 +				return false;
   1.216 +			} else if (false == enoughRegex.test(pwd1.value)) {
   1.217 +				msg.style.color = "tomato";
   1.218 +				msg.innerHTML ="&#x2716; Too short";
   1.219 +				return false;
   1.220 +			} else if (false == incharRegex.test(pwd1.value)) {
   1.221 +				msg.style.color = "tomato";
   1.222 +				msg.innerHTML ="&#x2716; Invalid chars";
   1.223 +				return false;
   1.224 +			} else if (strongRegex.test(pwd1.value)) {
   1.225 +				msg.style.color = "limegreen";
   1.226 +				msg.innerHTML = "&#x2714; Strong!";
   1.227 +			} else if (mediumRegex.test(pwd1.value)) {
   1.228 +				msg.style.color = "limegreen";
   1.229 +				msg.innerHTML = "&#x2714; Medium!";
   1.230 +			} else {
   1.231 +				msg.style.color = "orange";
   1.232 +				msg.innerHTML = "&#x2714; Weak";
   1.233 +			}
   1.234 +		}else{
   1.235 +			// passwords do not match.
   1.236 +			pwd2.style.backgroundColor = "lightsalmon";
   1.237 +			msg.style.color = "tomato";
   1.238 +			msg.innerHTML = "&#x2716; Do Not Match!"
   1.239 +			return false;
   1.240 +		}
   1.241 +	}  
   1.242 +</script>
   1.243 +
   1.244  <a name="root"></a>
   1.245  <h4>$(gettext "Root")</h4>
   1.246  $(gettext "Root passwd:")
   1.247 -<input type="text" name="TGT_ROOT_PWD" value="$TGT_ROOT_PWD" placeholder="$(gettext "Password of root")" />
   1.248 +<input type="password" id="p1" name="TGT_ROOT_PWD" value="$TGT_ROOT_PWD" placeholder="$(gettext "Password of root")" onkeyup="checkRootPwd(); return false;" />
   1.249 +$(gettext "Confirm password:")
   1.250 +<input type="password" id="p2" value="$TGT_ROOT_PWD" placeholder="$(gettext "Password of root")" onkeyup="checkRootPwd(); return false;" />
   1.251 +<span id="rootPwdAlert"></span>
   1.252  EOT
   1.253  }
   1.254  
   1.255  select_user()
   1.256  {
   1.257  cat << EOT
   1.258 +<script type="text/javascript">
   1.259 +    function checkUserLogin(){
   1.260 +		var user = document.getElementById('u1');
   1.261 +		var msg = document.getElementById('userLoginAlert');
   1.262 +		var enoughRegex = new RegExp("(?=.{3,}).*", "g");
   1.263 +		var incharRegex = new RegExp("^[A-Za-z0-9_]{3,20}$");
   1.264 +		if (false == enoughRegex.test(user.value)) {
   1.265 +			msg.style.color = "tomato";
   1.266 +			msg.innerHTML ="&#x2716; Too short";
   1.267 +			return false;
   1.268 +		} else if (false == incharRegex.test(user.value)) {
   1.269 +				msg.style.color = "tomato";
   1.270 +				msg.innerHTML ="&#x2716; Invalid chars";
   1.271 +				return false;		
   1.272 +		} else {
   1.273 +			msg.style.color = "limegreen";
   1.274 +			msg.innerHTML = "&#x2714;";
   1.275 +		}
   1.276 +	}
   1.277 +	function checkUserPwd(){
   1.278 +		var pwd1 = document.getElementById('p3');
   1.279 +		var pwd2 = document.getElementById('p4');
   1.280 +		var msg = document.getElementById('userPwdAlert');
   1.281 +		if(pwd1.value == pwd2.value){
   1.282 +			// passwords match. 
   1.283 +			pwd2.style.backgroundColor = "white";
   1.284 +			// various checks
   1.285 +			var enoughRegex = new RegExp("(?=.{3,}).*", "g");
   1.286 +			var incharRegex = new RegExp("^[A-Za-z0-9!@#$%^&*()_]{3,20}$");
   1.287 +			var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
   1.288 +			var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
   1.289 +			if (pwd1.value.length==0) {
   1.290 +				msg.style.color = "orange";
   1.291 +				msg.innerHTML = "&#x2714; No Password";
   1.292 +			} else if (false == enoughRegex.test(pwd1.value)) {
   1.293 +				msg.style.color = "tomato";
   1.294 +				msg.innerHTML ="&#x2716; Too short";
   1.295 +				return false;
   1.296 +			} else if (false == incharRegex.test(pwd1.value)) {
   1.297 +				msg.style.color = "tomato";
   1.298 +				msg.innerHTML ="&#x2716; Invalid chars";
   1.299 +				return false;
   1.300 +			} else if (strongRegex.test(pwd1.value)) {
   1.301 +				msg.style.color = "limegreen";
   1.302 +				msg.innerHTML = "&#x2714; Strong!";
   1.303 +			} else if (mediumRegex.test(pwd1.value)) {
   1.304 +				msg.style.color = "limegreen";
   1.305 +				msg.innerHTML = "&#x2714; Medium!";
   1.306 +			} else {
   1.307 +				msg.style.color = "orange";
   1.308 +				msg.innerHTML = "&#x2714; Weak";
   1.309 +			}
   1.310 +		}else{
   1.311 +			// passwords do not match.
   1.312 +			pwd2.style.backgroundColor = "lightsalmon";
   1.313 +			msg.style.color = "tomato";
   1.314 +			msg.innerHTML = "&#x2716; Do Not Match!"
   1.315 +			return false;
   1.316 +		}
   1.317 +	}  
   1.318 +</script>
   1.319  <a name="user"></a>
   1.320  <h4>$(gettext "User")</h4>
   1.321  $(gettext "User login:")
   1.322 -<input type="text" name="TGT_USER" value="$TGT_USER" placeholder="$(gettext "Name of the first user")" />
   1.323 +<input type="text" id="u1" name="TGT_USER" value="$TGT_USER" placeholder="$(gettext "Name of the first user")" onkeyup="checkUserLogin(); return false;" />
   1.324 +<span id="userLoginAlert"></span>
   1.325 +<br /><br />
   1.326  $(gettext "User passwd:")
   1.327 -<input type="text" name="TGT_USER_PWD" value="$TGT_USER_PWD" placeholder="$(gettext "Password of the first user")" />
   1.328 +<input type="password" id="p3" name="TGT_USER_PWD" value="$TGT_USER_PWD" placeholder="$(gettext "Password of the first user")" onkeyup="checkUserPwd(); return false;" />
   1.329 +$(gettext "Confirm password:")
   1.330 +<input type="password" id="p4" value="$TGT_USER_PWD" placeholder="$(gettext "Password of the first user")" onkeyup="checkUserPwd(); return false;" />
   1.331 +<span id="userPwdAlert"></span>
   1.332  EOT
   1.333  }
   1.334  
   1.335 @@ -435,10 +560,20 @@
   1.336  	cat <<EOT
   1.337  <script type="text/javascript">
   1.338  	function SubmitForm() {
   1.339 -		var r=confirm("$(gettext "Do you really want to continue?")");
   1.340 -		if (r==true)
   1.341 -		{
   1.342 -			document.ConfigForm.submit();
   1.343 +		if (false == checkHostname()) {
   1.344 +			alert("Hostname error");
   1.345 +		} else if (false == checkRootPwd()) {
   1.346 +			alert("Root password error");
   1.347 +		} else if (false == checkUserLogin()) {
   1.348 +			alert("User login error");
   1.349 +		} else if (false == checkUserPwd()) {
   1.350 +			alert("User password error");
   1.351 +		} else {
   1.352 +			var r=confirm("$(gettext "Do you really want to continue?")");
   1.353 +			if (r==true)
   1.354 +			{
   1.355 +				document.ConfigForm.submit();
   1.356 +			}
   1.357  		}
   1.358  	}
   1.359  </script>