Pārlūkot izejas kodu

Added pasword-change

Avetisyan Karen 8 gadi atpakaļ
vecāks
revīzija
e3af031a00

BIN
modules/HTTP_Server/fs/main.css


BIN
modules/HTTP_Server/fs/main.js


BIN
modules/HTTP_Server/fs/settings.html


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 640 - 638
modules/HTTP_Server/fsdata.c


+ 1 - 1
web_interface/src/wui/bat_test.cgi

@@ -10,7 +10,7 @@ print ""
 if data["func"] == "stop":
   print "Тест остановлен"
 elif data["func"] == "time" and data["time"]:
-  print "Тест зпущен на " + str(data["time"]) + " секунд"
+  print "Тест зпущен на " + str(data["time"]) + " минут"
 elif data["func"] == "discharge":
   print "Тест зпущен до разряда"
 # elif data["func"] == "run" and !data["time"]:

+ 55 - 36
web_interface/src/wui/main.css

@@ -1,11 +1,11 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
 img,legend{border:0}legend,td,th{padding:0}html{font-family:Arial, Helvetica, sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit;}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}table{border-spacing:0;border-collapse: separate;}
 
 
 /* Main style */
 body {background-color: #E8EBF1; color: #333;overflow-y: scroll; height: 100%;}
 
-.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after 
+.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after
 {display: table;content: " ";}
 input, select {
     -webkit-box-sizing: border-box;
@@ -531,7 +531,7 @@ a:hover#menu-icon {
 }
 /*MEDIA QUERY*/
 @media only print{
-  .navbar > ul, .navbar:active > ul { 
+  .navbar > ul, .navbar:active > ul {
     display: none;
   }
 }
@@ -549,7 +549,10 @@ a:hover#menu-icon {
   /*.navbar{position: fixed ; width: 100%; height: 100px; top: 0; z-index: 1000;}*/
   /*.wrapper{margin-top: 121px;}*/
   #menu-icon {display:inline-block;}
-  .navbar > ul, .navbar:active > ul { 
+  #checkUpdatePass, #changePassword, #uploadSettings, #rectifiersConfig{
+    top: 10% !important;
+  }
+  .navbar > ul, .navbar:active > ul {
     display: none;
     position: absolute;
     padding: 0;
@@ -604,9 +607,9 @@ a:hover#menu-icon {
   /*.cont-2 {width: 100%; padding: 0;}
   .cont-3 {width: 100%; padding: 0;}*/
 }
-@media only screen 
-and (min-device-width : 768px) 
-and (max-device-width : 1024px) 
+@media only screen
+and (min-device-width : 768px)
+and (max-device-width : 1024px)
 and (orientation : landscape)
 and (-webkit-min-device-pixel-ratio: 1)  {
   .navbar { min-height: 98px;}
@@ -1450,7 +1453,7 @@ div.tabset {
   width:40em; /* need width for ie < 8 */
   min-width: 100%;
 }
-div.tabpane { 
+div.tabpane {
   display:none;
   clear:both;
   padding:10px 15px;
@@ -1459,7 +1462,7 @@ div.tabpane {
   box-shadow:0 1px 5px rgba(0,0,0,0.15);
 }
 div.tabpane:after{content: "&nbsp;"; visibility: hidden;}
-div.activePane { 
+div.activePane {
   display:block;
   z-index: 2;
   overflow: hidden;
@@ -1472,7 +1475,7 @@ ul.tabnavs {
   list-style:none;
   width: 100%;
 }
-ul.tabnavs li { 
+ul.tabnavs li {
   display:inline;
   z-index: 3;
 }
@@ -1480,10 +1483,10 @@ ul.tabnavs li a {
   text-decoration:none;
   background-color:#f8f8f8;
   border:solid 1px #e7e7e7;
-  padding:10px 15px; 
+  padding:10px 15px;
   margin:0 -10px 0 0; /* gap between tabs */
   float:left; width:auto;
-  
+
   position:relative; top:1px; /* brings down over pane border-top */
 }
 ul.tabnavs li a:link, ul.tabnavs li a:visited {
@@ -1492,7 +1495,7 @@ ul.tabnavs li a:link, ul.tabnavs li a:visited {
 ul.tabnavs li a:hover {
   background-color:#fff;
 }
-ul.tabnavs li a.activeTab:link, 
+ul.tabnavs li a.activeTab:link,
 ul.tabnavs li a.activeTab:visited {
   color: #337ab7;
   background-color:#fff;
@@ -1501,15 +1504,15 @@ ul.tabnavs li a.activeTab:visited {
   z-index: 1;
 }
 
-@media only screen 
-and (min-device-width : 375px) 
+@media only screen
+and (min-device-width : 375px)
 and (max-device-width : 667px)  {
   ul.tabnavs {display: none;}
   div.tabpane {display: block; border: none; margin-bottom: 10px;}
   div.tabset {width: 100%;}
   // .spinBox input {width: 82% !important;}
 }
-@media only screen 
+@media only screen
 and (max-device-width : 768px){
   ul.tabnavs {display: none;}
   div.tabpane {display: block; border: none; margin-bottom: 10px;}
@@ -1718,7 +1721,23 @@ fieldset[disabled] .checkbox label {
 #row-batvolt4{
   transition: all 1s ease-in-out;
 }
-
+#checkUpdatePass, #changePassword, #uploadSettings, #rectifiersConfig{
+  display: none;
+  position: relative;
+  text-align: center;
+  top: 30%;
+  margin: 0 auto;
+  width: 300px;
+  padding: 16px;
+  border: 5px solid #5cb85c;
+  background-color: white;
+  box-shadow:0 1px 5px rgba(0,0,0,0.15);
+  z-index:103;
+  overflow: auto;
+}
+#changePassword, #uploadSettings{
+  border: 5px solid #337ab7;
+}
 .login-form{
   margin: 0 auto;
   padding:30px 30px;
@@ -2196,7 +2215,7 @@ input.login {
 /*  REMOVE MARGINS AS ALL GO FULL WIDTH AT 480 PIXELS */
 
 @media only screen and (max-width: 480px) {
-  .col { 
+  .col {
     margin: 1% 0 1% 0%;
   }
 }
@@ -2218,26 +2237,26 @@ h4 {
 
 @media only screen and (max-width: 480px) {
   .span_2_of_2 {
-    width: 100%; 
+    width: 100%;
   }
   .span_1_of_2 {
-    width: 100%; 
+    width: 100%;
   }
 }
 
 /*  GRID OF THREE   ============================================================================= */
 
-  
+
 .span_3_of_3 {
-  width: 100%; 
+  width: 100%;
 }
 
 .span_2_of_3 {
-  width: 66.13%; 
+  width: 66.13%;
 }
 
 .span_1_of_3 {
-  width: 32.26%; 
+  width: 32.26%;
 }
 
 
@@ -2245,10 +2264,10 @@ h4 {
 
 @media only screen and (max-width: 480px) {
   .span_3_of_3 {
-    width: 100%; 
+    width: 100%;
   }
   .span_2_of_3 {
-    width: 100%; 
+    width: 100%;
   }
   .span_1_of_3 {
     width: 100%;
@@ -2262,19 +2281,19 @@ h4.span_4_of_4 {
 }
 
 .span_4_of_4 {
-  width: 100%; 
+  width: 100%;
 }
 
 .span_3_of_4 {
-  width: 74.6%; 
+  width: 74.6%;
 }
 
 .span_2_of_4 {
-  width: 49.2%; 
+  width: 49.2%;
 }
 
 .span_1_of_4 {
-  width: 23.8%; 
+  width: 23.8%;
 }
 
 
@@ -2282,16 +2301,16 @@ h4.span_4_of_4 {
 
 @media only screen and (max-width: 480px) {
   .span_4_of_4 {
-    width: 100%; 
+    width: 100%;
   }
   .span_3_of_4 {
-    width: 100%; 
+    width: 100%;
   }
   .span_2_of_4 {
-    width: 100%; 
+    width: 100%;
   }
   .span_1_of_4 {
-    width: 100%; 
+    width: 100%;
   }
 }
 
@@ -2309,7 +2328,7 @@ h4.span_4_of_4 {
   bottom: 0;
   width: 100%;
   transition: opacity 0.3s ease-in-out;
-  opacity: 0; 
+  opacity: 0;
   height: 0;
   overflow: hidden;
 }
@@ -2320,4 +2339,4 @@ h4.span_4_of_4 {
 .span_1_of_3 > .btn {
   width: 100% !important;
   margin-bottom: 10px;
-}
+}

+ 61 - 25
web_interface/src/wui/main.js

@@ -262,6 +262,35 @@ function checkPWD(){
   countdown();
 }
 
+function checkChangePWD(){
+  var user = $('changePasswordUser').value;
+  var oldpass = $('oldpwd').value;
+  var newpass = $('newpwd').value;
+  var newpassrepeat = $('newpwdrepeat').value;
+  var letter = /^[0-9a-zA-Z]+$/;
+  if (oldpass.length === 0 || newpass.length === 0 || newpassrepeat.length === 0){
+    alert('Поля не заполнены!');
+  } else if (newpass !== newpassrepeat){
+    alert('Поля с новым паролем не совпадают!');
+    $('oldpwd').value = '';
+    $('newpwd').value = '';
+    $('newpwdrepeat').value = '';
+  } else if (user === ''){
+    alert('Не выбран пользователь для которого необходимо сменить пароль!');
+  } else {
+    if (letter.test(oldpass) && letter.test(newpass) && letter.test(newpassrepeat)) {
+      loadXMLDoc('changepwd.cgi?username=' + user + '&oldpass=' + oldpass + '&newpass=' + newpass, 'POST', function(){
+        alert(this.responseText);
+        window.location.reload();
+      });
+    } else {
+      alert('Пароль задан неправильно');
+      $('oldpwd').value = '';
+      $('newpwd').value = '';
+      $('newpwdrepeat').value = '';
+    }
+  }
+}
 function timesetType(el) {
   if (el.selectedIndex === 0) {
     $('ntpservip_l').className += ' hidden';
@@ -339,7 +368,16 @@ function radiusState() {
     $('rs_key').removeAttribute('disabled');
   }
 }
-
+function authState() {
+  if (!$('auth').checked) {
+    $('rs_enabled').setAttribute('disabled', 'disabled');
+    $('rs_enabled').checked = false;
+  } else {
+    $('rs_enabled').removeAttribute('disabled');
+    $('rs_enabled').checked = true;
+  }
+  radiusState();
+}
 //########## Info Form Validation ############
 
 function infoValidation(){
@@ -435,23 +473,6 @@ function Alarm(bitmask, num) {
   return answ;
 }
 
-
-// var UPSstates = [
-//   {mark: '<span class="mark-ok"></span>', color: ALARM_GREEN}, // Normal
-//   {mark: '<span class="mark-almaj"></span>', color: ALARM_RED}, // Alarm
-//   {mark: '<span class="mark-almin"></span>', color: ALARM_YELLOW} // Standby
-// ];
-
-// var BATstates = [
-//   {mark: '<span class="mark-ok"></span>', color: ALARM_GREEN}, // Normal
-//   {mark: '<span class="mark-almaj"></span>', color: ALARM_RED}, // Battery Low
-//   {mark: '<span class="mark-almin"></span>', color: ALARM_YELLOW} //  Test in progress
-// ];
-
-// function setStateToPanel(state, text, panelID){
-//   panelID.style.color = state.color;
-//   panelID.innerHTML = state.mark + text;
-// }
 function setIcons(containerID, icnName) {
   $(containerID).innerHTML ='';
 
@@ -521,9 +542,9 @@ function paramsRefresh() {
 var mint;
 //########## History ############
 var H_PARAM    = 0,
-    H_EVENT    = 1,
-    H_VALUE    = 2,
-    H_DATETIME = 3;
+  H_EVENT    = 1,
+  H_VALUE    = 2,
+  H_DATETIME = 3;
 function getPage(pn){
   getJSON('history.cgi?page=' + pn, function(data){
     $('history_data').textContent = '';
@@ -532,10 +553,12 @@ function getPage(pn){
     $('pagelimit').innerHTML = data.pages;
     for (var i in n){
       var tr = document.createElement('tr');
-      var td = [document.createElement('td'),
-                document.createElement('td'),
-                document.createElement('td'),
-                document.createElement('td')];
+      var td = [
+        document.createElement('td'),
+        document.createElement('td'),
+        document.createElement('td'),
+        document.createElement('td')
+      ];
       td[0].innerHTML = n[i].split(';')[H_PARAM];
       td[0].id = 'h_param_'+ i;
       tr.appendChild(td[0]);
@@ -706,6 +729,7 @@ function settingsGET(){
     $('rs_pwd').value       = data.rs_pwd;
     $('rs_key').value       = data.rs_key;
     $('rs_enabled').checked = data.rs_enabled;
+    $('auth').checked       = data.auth;
     // DateTime
     if (data.ntpservip != $('ntpservip').options[0].value &&
         data.ntpservip != $('ntpservip').options[1].value &&
@@ -733,6 +757,7 @@ function settingsGET(){
     $('ntp').value          = data.ntp;
     dhcpState();
     radiusState();
+    authState();
     timesetType($('ntp'));
     netsettings_changed     = data.netsettings_changed;
     // profilaction_changed    = data.NeedProfilaction;
@@ -743,6 +768,11 @@ function settingsGET(){
 
 function batTest(options) {
   this.options = (options ? options : {});
+  if (this.options.time) {
+    if (typeof this.options.time !== 'number' && this.options.time > 99) {
+      return alert('Ошибка заданного времени');
+    }
+  }
   var url = 'bat_test.cgi';
   loadXMLDoc(url, 'POST', function(){
     this.responseText ? alert(this.responseText) : null;
@@ -750,6 +780,12 @@ function batTest(options) {
 }
 function UPSPowerOff(options) {
   this.options = (options ? options : {});
+  if (typeof this.options.after !== 'number' && this.options.after > 9999) {
+    return alert('Ошибка заданного времени включения');
+  }
+  if (typeof this.options.to !== 'number' && this.options.to > 9999) {
+    return alert('Ошибка заданного времени выключения');
+  }
   var url = 'ups_power.cgi';
   loadXMLDoc(url, 'POST', function(){
     this.responseText ? alert(this.responseText) : null;

+ 2 - 1
web_interface/src/wui/settings.cgi

@@ -22,11 +22,12 @@ JSON = {
   "di1":2,
   "ro1":1,
   "ro2":3,
-  "rs_enabled":True,
+  "rs_enabled":1,
   "rs_server":"127.0.0.1",
   "rs_port":"1227",
   "rs_pwd":"12345",
   "rs_key":"123",
+  "auth":0,
   "ipaddr":"192.168.10.254",
   "gw":"192.168.10.1",
   "mask":"255.255.255.0",

+ 42 - 19
web_interface/src/wui/settings.html

@@ -13,12 +13,19 @@
   <div id='countdown'>
     <p>Контроллер будет перезагружен через <span id="count-number">5</span> секунд.</p>
   </div>
-  <div id='checkUpdatePass'>
+  <div id='changePassword'>
     <form action="" method="post">
-      <p>Введите пароль для входа в режим обновления ПО.</p>
-      <input id="pwd" type="password" class="form-control" placeholder="Пароль" class="login" size="20" maxlength="16" name="password"><br><br>
-      <input type="button" id="close-pass" class="btn btn-danger-inverted" value="Отмена">
-      <input type="submit" class="btn btn-success-inverted" onclick="checkPWD(); return false;" value="Отправить">
+      <p>Смена пароля на вход в систему для:</p>
+      <select name="login_name" id="changePasswordUser" class="form-control">
+        <option value="">Выберите пользователя</option>
+        <option value="user">user</option>
+        <option value="admin">admin</option>
+      </select><br><br>
+      <input id="oldpwd" type="password" class="form-control" placeholder="Текущий пароль" class="login" size="20" maxlength="16" name="oldpass"><br><br>
+      <input id="newpwd" type="password" class="form-control" placeholder="Новый пароль" class="login" size="20" maxlength="16" name="newpass"><br><br>
+      <input id="newpwdrepeat" type="password" class="form-control" placeholder="Повторить новый пароль" class="login" size="20" maxlength="16" name="newpassRepeat"><br><br>
+      <input type="button" id="close-pass-change" class="btn btn-danger-inverted" value="Отмена">
+      <input type="submit" class="btn btn-success-inverted" onclick="checkChangePWD(); return false;" value="Отправить">
     </form>
   </div>
 </div>
@@ -38,7 +45,7 @@
 <!--START-->
 <h1>Настройки</h1>
 <ul id="validation-box"></ul>
-<form id="form1" action="settings.cgi" method="GET">
+<form id="form1" action="settings.cgi" method="POST">
 <div id="tabset1" class="tabset">
 <div>
   <ul class="tabnavs">
@@ -46,7 +53,7 @@
     <li><a href="#inout">Сухие контакты</a></li>
     <li><a href="#netw">Сетевые параметры</a></li>
     <li><a href="#service">Сервис</a></li>
-    <li><a href="#raduis">RADIUS</a></li>
+    <li><a href="#raduis">Авторизация</a></li>
     <li><a href="#ntpt">Время</a></li>
   </ul>
 </div>
@@ -179,7 +186,7 @@
       <button type="button" class="btn btn-default" onclick="batTest({ 'func': 'stop' });">Остановка теста</button>
       <button type="button" class="btn btn-default" onclick="batTest({ 'func': 'discharge' });">Запуск теста до разряда</button>
       <button type="button" class="btn btn-default" onclick="batTest({ 'func': 'time', 'time': $('test_time').value });">Запуск теста</button>
-      <label for="" class="col span_1_of_2">Время теста (сек)</label>
+      <label for="" class="col span_1_of_2">Время теста (мин)</label>
       <div class="col span_1_of_2">
         <input type="text" class="form-control" value="10" maxlength="6" id="test_time">
       </div>
@@ -187,33 +194,30 @@
     <div class="col span_1_of_3">
       <h4 class="col span_2_of_2">ИБП</h4>
       <button type="button" class="btn btn-default" onclick="UPSPowerOff({'func': 'cancel'})">Отмена выключения</button>
+      <button type="button" class="btn btn-default" onclick="UPSPowerOff({'func': 'reboot'})">Перезагрузка</button>
       <button type="button" class="btn btn-default" onclick="UPSPowerOff({'func': 'off', 'after': $('upspo_after').value, 'to': $('upspo_to').value})">Выключить</button>
-      <label for="" class="col span_1_of_2">Выключить на (сек)</label>
+      <label for="" class="col span_1_of_2">Выкл. через (мин)</label>
       <div class="col span_1_of_2">
         <input type="text" class="form-control" value="10" maxlength="6" id="upspo_to">
       </div>
-      <label for="" class="col span_1_of_2">Включить через (сек)</label>
+      <label for="" class="col span_1_of_2">Вкл. через (мин)</label>
       <div class="col span_1_of_2">
         <input type="text" class="form-control" value="10" maxlength="6" id="upspo_after">
       </div>
     </div>
     <div class="col span_1_of_3">
       <h4 class="col span_2_of_2">Контроллер</h4>
-      <button type="button" class="btn btn-default" id="">Смена пароля</button>
+      <button type="button" class="btn btn-default" id="change_pass">Смена пароля</button>
       <button type="button" class="btn btn-default" id="dev-reboot">Перезагрузка</button>
       <button type="button" class="btn btn-default" id="dev-update">Обновление ПО</button>
-      <div class="checkbox col span_2_of_2">
-        <label>
-          <input type="checkbox" name="" id=""> Включить авторизацию
-        </label>
-      </div>
     </div>
   </div>
 </div>
 <div id="raduis" class="tabpane">
-  <div class="panel-heading">RADIUS авторизация</div>
+  <div class="panel-heading">Авторизация пользователя</div>
   <div class="panel-body section group">
     <div class="col span_1_of_2">
+    <h4 class="col span_2_of_2">RADIUS сервер</h4>
       <div class="checkbox col span_2_of_2">
         <label>
           <input type="checkbox" name="rs_enabled" id="rs_enabled" onchange="radiusState()"> Включить
@@ -236,6 +240,15 @@
         <input type="password" class="form-control" id="rs_key" name="rs_key">
       </div>
     </div>
+    <div class="col span_1_of_2">
+      <h4 class="col span_2_of_2">Контроллер</h4>
+      <div class="checkbox col span_2_of_2">
+        <label>
+          <input type="checkbox" name="auth" id="auth" onchange="authState()"> Включить авторизацию
+        </label>
+      </div>
+
+    </div>
   </div>
 </div>
 <div id="ntpt" class="tabpane">
@@ -333,13 +346,23 @@ settingsGET();
 // };
 $('dev-update').onclick = function(){
   if( confirm('Перевести контроллер в режим обновления ПО?') ){
+    loadXMLDoc('fw_update.cgi', 'GET');
     checkPWD();
   };
 };
 
-$('close-pass').onclick = function(){
+$('change_pass').onclick = function(){
+  $('count-wrap').style.display = 'block';
+  $('changePassword').style.display = 'block';
+};
+
+$('close-pass-change').onclick = function(){
+  $('changePasswordUser').value = '';
+  $('oldpwd').value = '';
+  $('newpwd').value = '';
+  $('newpwdrepeat').value = '';
   $('count-wrap').style.display = 'none';
-  $('checkUpdatePass').style.display = 'none';
+  $('changePassword').style.display = 'none';
 };
 
 $('dev-reset').onclick = function(){

+ 1 - 2
web_interface/src/wui/ups_power.cgi

@@ -8,9 +8,8 @@ print "Content-Type: application/json"
 print ""
 
 if data["func"] == "cancel":
-  print "Выключенеие астановлено"
+  print "Выключенеие остановлено"
 elif data["func"] == "off":
   print "ИБП выключится через " + str(data["after"]) + " секунд на " + str(data["to"]) + " секунд"
 # elif data["func"] == "run" and !data["time"]:
 #   print "Тест зпущен до разрядки АКБ"
-

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels