rev |
line source |
domcox@265
|
1 /*
|
domcox@265
|
2 Login and password validation
|
domcox@265
|
3 Copyright (C) 2012 SliTaz GNU/linux - GNU gpl v3
|
domcox@265
|
4 */
|
domcox@265
|
5
|
domcox@265
|
6 ////
|
al@293
|
7 // i18n for this javascript
|
al@293
|
8
|
al@293
|
9 function i18n(text){
|
al@293
|
10 var lang = document.getElementsByTagName("html")[0].getAttribute("lang");
|
al@293
|
11 var orig = ["Too short!", "Too long!", "Invalid chars!", "(No Password!)", "(Strong)", "(Medium!)", "(Weak!)", "Do Not Match!"];
|
al@293
|
12 var translate = ["es", "fr", "pt", "ru"];
|
al@293
|
13 translate['ru'] = ["Слишком короткий!", "Слишком длинный!", "Недопустимые символы!", "(Нет пароля!)", "(Сильный)", "(Средний!)", "(Слабый!)", "Не совпадает!"];
|
al@293
|
14 translate['fr'] = [ ];
|
al@293
|
15
|
al@293
|
16 var output = text;
|
al@293
|
17 for (var i=0; i<orig.length; i++) {
|
al@293
|
18 if (translate[lang] !== undefined && orig[i] == text) {
|
al@293
|
19 var transTry = translate[lang][i];
|
al@293
|
20 if (transTry !== undefined && transTry !== '') {
|
al@293
|
21 var output = transTry;
|
al@293
|
22 }
|
al@293
|
23 break
|
al@293
|
24 }
|
al@293
|
25 }
|
al@293
|
26 return(output);
|
al@293
|
27 }
|
al@293
|
28
|
al@293
|
29 ////
|
domcox@265
|
30 // Login validation - typical use:
|
domcox@265
|
31 // <input id="login1" onkeyup="checkLogin('login1','msg1'); return false;" />
|
domcox@265
|
32 // <span id="msg1"></span>
|
domcox@265
|
33
|
domcox@265
|
34 function checkLogin(user,message){
|
domcox@265
|
35 var login = document.getElementById(user);
|
al@293
|
36 var msg = document.getElementById(message);
|
domcox@265
|
37 var enoughRegex = new RegExp("(?=.{3,}).*", "g");
|
domcox@265
|
38 var incharRegex = new RegExp("^[A-Za-z0-9_-]{3,32}$");
|
al@293
|
39 // html fragments
|
al@293
|
40 var nok='<span class="msg-nok">✖ ';
|
al@293
|
41 var s='</span>';
|
al@293
|
42
|
al@293
|
43 if (login.value == '') {
|
al@293
|
44 msg.innerHTML = '';
|
al@293
|
45 } else if (false == enoughRegex.test(login.value)) {
|
al@293
|
46 msg.innerHTML = nok + i18n('Too short!') + s;
|
domcox@265
|
47 return false;
|
al@293
|
48 } else if (login.value.length > 32) {
|
al@293
|
49 msg.innerHTML = nok + i18n('Too long!') + s;
|
domcox@265
|
50 return false;
|
domcox@265
|
51 } else if (false == incharRegex.test(login.value)) {
|
al@293
|
52 msg.innerHTML = nok + i18n('Invalid chars!') + s;
|
al@293
|
53 return false;
|
domcox@265
|
54 } else {
|
al@293
|
55 msg.innerHTML = '<span class="msg-ok">✔'+s;
|
domcox@265
|
56 }
|
domcox@265
|
57 }
|
domcox@265
|
58
|
domcox@265
|
59 ////
|
domcox@265
|
60 // Password validation - typical use:
|
al@293
|
61 // <input type="password" id="pass1" onkeyup="checkPwd('pass1','pass2','msg2'); return false;" />
|
al@293
|
62 // <input type="password" id="pass2" onkeyup="checkPwd('pass1','pass2','msg2'); return false;" />
|
domcox@265
|
63 // <span id="msg2"></span>
|
domcox@265
|
64
|
domcox@265
|
65 function checkPwd(password,confirm,message){
|
domcox@265
|
66 var pwd1 = document.getElementById(password);
|
domcox@265
|
67 var pwd2 = document.getElementById(confirm);
|
al@293
|
68 var msg = document.getElementById(message);
|
al@293
|
69 // html fragments
|
al@293
|
70 var nok = '<span class="msg-nok">✖ ';
|
al@293
|
71 var okw = '<span class="msg-ok">✔ </span><span class="msg-warn">';
|
al@293
|
72 var s = '</span>';
|
al@293
|
73
|
domcox@265
|
74 if(pwd1.value == pwd2.value){
|
al@293
|
75 // passwords match.
|
domcox@265
|
76 pwd2.classList.remove('alert');
|
domcox@265
|
77 // various checks
|
domcox@265
|
78 var enoughRegex = new RegExp("(?=.{3,}).*", "g");
|
domcox@265
|
79 var incharRegex = new RegExp("^[A-Za-z0-9!@#$%^&*()_]{3,40}$");
|
domcox@265
|
80 var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
|
domcox@265
|
81 var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
|
domcox@265
|
82 if (pwd1.value.length==0) {
|
al@293
|
83 msg.innerHTML = okw + i18n('(No Password!)') + s;
|
domcox@265
|
84 } else if (pwd1.value.length > 40) {
|
al@293
|
85 msg.innerHTML = nok + i18n('Too long!') + s;
|
domcox@265
|
86 return false;
|
domcox@265
|
87 } else if (false == enoughRegex.test(pwd1.value)) {
|
al@293
|
88 msg.innerHTML = nok + i18n('Too short!') + s;
|
domcox@265
|
89 return false;
|
domcox@265
|
90 } else if (false == incharRegex.test(pwd1.value)) {
|
al@293
|
91 msg.innerHTML = nok + i18n('Invalid chars!') + s;
|
domcox@265
|
92 return false;
|
domcox@265
|
93 } else if (strongRegex.test(pwd1.value)) {
|
al@293
|
94 msg.innerHTML = '<span class="msg-ok">✔ ' + i18n('(Strong)') + s;
|
domcox@265
|
95 } else if (mediumRegex.test(pwd1.value)) {
|
al@293
|
96 msg.innerHTML = okw + i18n('(Medium!)') + s;
|
domcox@265
|
97 } else {
|
al@293
|
98 msg.innerHTML = okw + i18n('(Weak!)') + s;
|
domcox@265
|
99 }
|
domcox@265
|
100 } else {
|
domcox@265
|
101 // passwords do not match.
|
domcox@265
|
102 pwd2.classList.add('alert');
|
al@293
|
103 msg.innerHTML = nok + i18n('Do Not Match!') + s;
|
domcox@265
|
104 return false;
|
domcox@265
|
105 }
|
al@293
|
106 }
|