Merge pull request #2443 from TDT-AG/pr/20190109-luci-mod-system-password
[oweals/luci.git] / modules / luci-mod-system / luasrc / view / admin_system / password.htm
1 <%+header%>
2
3 <input type="password" aria-hidden="true" style="position:absolute; left:-10000px" />
4
5 <script type="text/javascript">
6 function checkPassword() {
7         var pw1 = document.body.querySelector('[name="pw1"]');
8         var view  = document.getElementById("passstrength");
9
10         var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
11         var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
12         var enoughRegex = new RegExp("(?=.{6,}).*", "g");
13         if (false == enoughRegex.test(pw1.value)) {
14                 view.innerHTML = '<%:Password strength%>: <span style="color:red"><%:More Characters%></span>';
15         } else if (strongRegex.test(pw1.value)) {
16                 view.innerHTML = '<%:Password strength%>: <span style="color:green"><%:Strong%></span>';
17         } else if (mediumRegex.test(pw1.value)) {
18                 view.innerHTML = '<%:Password strength%>: <span style="color:orange"><%:Medium%></span>';
19         } else {
20                 view.innerHTML = '<%:Password strength%>: <span style="color:red"><%:Weak%></span>';
21         }
22         return true;
23 }
24 </script>
25
26 <div class="cbi-map">
27         <h2><%:Router Password%></h2>
28
29         <div class="cbi-section-descr">
30                 <%:Changes the administrator password for accessing the device%>
31         </div>
32
33         <div class="cbi-section-node">
34                 <div class="cbi-value">
35                         <label class="cbi-value-title" for="image"><%:Password%></label>
36                         <div class="cbi-value-field">
37                                 <input type="password" name="pw1" onkeyup="checkPassword()"/><!--
38                                 --><button class="cbi-button cbi-button-neutral" title="<%:Reveal/hide password%>" aria-label="<%:Reveal/hide password%>" onclick="var e = this.previousElementSibling; e.type = (e.type === 'password') ? 'text' : 'password'">∗</button>
39                         </div>
40                 </div>
41
42                 <div class="cbi-value">
43                         <label class="cbi-value-title" for="image"><%:Confirmation%></label>
44                         <div class="cbi-value-field">
45                                 <input type="password" name="pw2" onkeydown="if (event.keyCode === 13) submitPassword(event)" /><!--
46                                 --><button class="cbi-button cbi-button-neutral" title="<%:Reveal/hide password%>" aria-label="<%:Reveal/hide password%>" onclick="var e = this.previousElementSibling; e.type = (e.type === 'password') ? 'text' : 'password'">∗</button>
47                         <div id="passstrength" class="cbi-value-description"></div>
48                         </div>
49                 </div>
50         </div>
51 </div>
52
53 <div class="cbi-page-actions">
54         <button class="btn cbi-button-apply" onclick="submitPassword(event)"><%:Save%></button>
55 </div>
56
57 <script type="application/javascript" src="<%=resource%>/view/system/password.js"></script>
58
59 <%+footer%>