Compare commits
43 Commits
11_0_0-71_
...
lex-audit-
| Author | SHA1 | Date | |
|---|---|---|---|
| c60ad54aab | |||
| 237f2f21ab | |||
| 1708fbe3fa | |||
| 9f6e45d98c | |||
| 5ba77e4526 | |||
| 1d00f2aeb2 | |||
| b0c6bea0a2 | |||
| 5a57ffaa34 | |||
| 717d34a53d | |||
| bec39af49c | |||
| ff9c2fee8c | |||
| 21255abf46 | |||
| 8ada3f36e0 | |||
| ab42f986e8 | |||
| 803bfd1cec | |||
| 0f2e2b82aa | |||
| 0341d02608 | |||
| c208419704 | |||
| d1f2013375 | |||
| 0733537064 | |||
| dcc098b206 | |||
| 1a8f935431 | |||
| e8d6d39583 | |||
| 91201b7b02 | |||
| c85022c49e | |||
| fd076895ba | |||
|
|
d993bd9d19 | ||
|
|
a31806f205 | ||
| b44f1c5000 | |||
| 2538ac9ea0 | |||
| dbfeaa18a3 | |||
| ced08b28d4 | |||
| c74a71dee1 | |||
| 96b002e7a9 | |||
| f30b4ab2b5 | |||
| fa286e966d | |||
| 9bb2128891 | |||
| accf96df0d | |||
| 1c601f0ace | |||
| cffbe53fb4 | |||
| aad1a458f4 | |||
| 252bf20410 | |||
| ebbe7af9a7 |
12
createlinks
12
createlinks
@@ -8,12 +8,12 @@ use esmith::Build::CreateLinks qw(:all);
|
|||||||
my $mngrdir = '/usr/share/smanager';
|
my $mngrdir = '/usr/share/smanager';
|
||||||
|
|
||||||
# templates to expand
|
# templates to expand
|
||||||
for ( qw( sme_core.css sme_main.css sme_menu.css styles.css ) )
|
#for ( qw( sme_core.css sme_main.css sme_menu.css styles.css ) )
|
||||||
{
|
#{
|
||||||
templates2events("$mngrdir/themes/default/public/css/$_", qw(
|
# templates2events("$mngrdir/themes/default/public/css/$_", qw(
|
||||||
bootstrap-console-save smeserver-manager-update
|
# bootstrap-console-save smeserver-manager-update
|
||||||
));
|
# ));
|
||||||
}
|
#}
|
||||||
|
|
||||||
templates2events("$mngrdir/conf/srvmngr.conf",
|
templates2events("$mngrdir/conf/srvmngr.conf",
|
||||||
qw( smeserver-manager-update smanager-theme-change smanager-modify bootstrap-console-save ));
|
qw( smeserver-manager-update smanager-theme-change smanager-modify bootstrap-console-save ));
|
||||||
|
|||||||
@@ -1,250 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = <<'EOF';
|
|
||||||
|
|
||||||
/* from e-smith-manager to smanager (smeserver_manager2) */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
|
||||||
* copyright (C) 1999-2003 Mitel Networks Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* Technical support for this program is available from Mitel Networks
|
|
||||||
* Please visit our web site www.mitel.com for details.
|
|
||||||
*----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This is the stylesheet used as the basis for older broswers.
|
|
||||||
|
|
||||||
Note that you CANNOT simly add styles here and hope they work. ONLY CSS
|
|
||||||
level 1 styles should be in this file. Everyting else goes into the other 3
|
|
||||||
files.
|
|
||||||
|
|
||||||
These basic styles ensire that browsers that don't understand the @import
|
|
||||||
method will still be usable. All modern browsers will use the styles in
|
|
||||||
sme_main.css, sme_menu.css or sme_header.css depending on the frame in which
|
|
||||||
the page is found.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Default HTML styles */
|
|
||||||
body {
|
|
||||||
background: #ffffff;
|
|
||||||
color: #000000;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
border-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table, tr, td, div, p, form {
|
|
||||||
color: #000000;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-top: 8px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
form {
|
|
||||||
margin-top: 2px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notsmall {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1, .h1 {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
color: #333333;
|
|
||||||
font-size: 18px;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
margin-top: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2, .h2 {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
color: #333333;
|
|
||||||
font-size: 14px;
|
|
||||||
margin-bottom: 3px;
|
|
||||||
margin-top: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3, .h3 {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
color: #333333;
|
|
||||||
font-size: 12px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
margin-top: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4, .h4 {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-style: italic;
|
|
||||||
color: #333333;
|
|
||||||
font-size: 12px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol, ul, li {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 10px;
|
|
||||||
font-weight: normal;
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
list-style-type: circle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Core styles for use with sme_header.css*/
|
|
||||||
body.header {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
background: #cccccc;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-right: 0px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
margin-left: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hilightbar {
|
|
||||||
background-color: #ffc50a;
|
|
||||||
font-size: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.infobar {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
background-color: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.darkergrey {
|
|
||||||
color: #666666;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.darkgrey {
|
|
||||||
background-color: #888888;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.update {
|
|
||||||
color: red;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
background: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Core styles for use with sme_menu.css */
|
|
||||||
|
|
||||||
body.menu {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.section {
|
|
||||||
padding-bottom: 2px;
|
|
||||||
padding-top: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.section {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.item {
|
|
||||||
color: #00008b;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
background: #e8f3e1;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.sl {
|
|
||||||
color: green;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
background: #e8f3e1;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.alert {
|
|
||||||
color: red;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
background: #e8f3e1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Core styles for use with sme_main.css */
|
|
||||||
body.main {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
background-color: #ffffff;
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.sme-noborders-label {
|
|
||||||
font-weight: bold;
|
|
||||||
width: 33%;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.sectionbar {
|
|
||||||
color: #666666;
|
|
||||||
background-color: #666666;
|
|
||||||
height: 1px;
|
|
||||||
width: 80%;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.sme-copyrightbar {
|
|
||||||
color: #dddddd;
|
|
||||||
background-color: #dddddd;
|
|
||||||
height: 1px;
|
|
||||||
width: 100%;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sme-copyright {
|
|
||||||
color: #777777;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*These style definitions were found int he old css file (manager.css)
|
|
||||||
but don't seem to ever be referenced in the code. They're here
|
|
||||||
for reference.
|
|
||||||
|
|
||||||
.centerit {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.highlight {
|
|
||||||
background: #ffc61e;
|
|
||||||
}
|
|
||||||
.subheading {
|
|
||||||
background: #ffffff;
|
|
||||||
color: #1e385b;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT =<<'HERE';
|
|
||||||
|
|
||||||
/* from e-smith-manager to smanager (smeserver_manager2) */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
|
||||||
* copyright (C) 1999-2003 Mitel Networks Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* Technical support for this program is available from Mitel Networks
|
|
||||||
* Please visit our web site www.mitel.com for details.
|
|
||||||
*----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*contribs.org styling
|
|
||||||
*/
|
|
||||||
body.header {
|
|
||||||
background: #bee6a2;
|
|
||||||
}
|
|
||||||
.hilightbar {
|
|
||||||
background-color: #ffffff;
|
|
||||||
}
|
|
||||||
.infobar {
|
|
||||||
background-color: #98d36e;
|
|
||||||
}
|
|
||||||
a.update {
|
|
||||||
font-size: 11px;
|
|
||||||
background: #98d36e;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Core styles for use with sme_menu.css */
|
|
||||||
body.menu {
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
}
|
|
||||||
td.section {
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
}
|
|
||||||
a.item {
|
|
||||||
background: #e8f3e1;
|
|
||||||
}
|
|
||||||
a.sl {
|
|
||||||
background: #e8f3e1;
|
|
||||||
}
|
|
||||||
a.alert {
|
|
||||||
background: #e8f3e1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Core Styles for use with sme_main.css */
|
|
||||||
hr.sectionbar {
|
|
||||||
color: #8ebe43;
|
|
||||||
background-color: #8ebe43;
|
|
||||||
}
|
|
||||||
hr.sme-copyrightbar {
|
|
||||||
color: #8ebe43;
|
|
||||||
background-color: #8ebe43;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* flag container*/
|
|
||||||
#flag-container span {
|
|
||||||
font-size: 24px;
|
|
||||||
display: flex; /* Allows for easy centering */
|
|
||||||
justify-content: center; /* Center horizontally */
|
|
||||||
align-items: center; /* Center vertically */
|
|
||||||
width: 100%; /* Full width of parent */
|
|
||||||
height: 24px; /* Set a fixed height */
|
|
||||||
border: 1px solid #ccc; /* Light gray border */
|
|
||||||
border-radius: 5px; /* Rounded corners */
|
|
||||||
cursor: default; /* Prevent text cursor */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.fallback-box {
|
|
||||||
display: inline-block; /* Make it inline-block to fit around the content */
|
|
||||||
border: 2px solid gray; /* Change the border color as desired */
|
|
||||||
padding: 10px; /* Add some padding */
|
|
||||||
border-radius: 10px; /* Round the corners of the box */
|
|
||||||
font-size: 60px; /* Adjust size if needed */
|
|
||||||
margin-top: 10px; /* Add some margin */
|
|
||||||
text-align: center; /* Center text inside the box */
|
|
||||||
}
|
|
||||||
|
|
||||||
HERE
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
/* DO NOT MODIFY THIS FILE! It is updated automatically */
|
|
||||||
@@ -1,277 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = <<'EOF';
|
|
||||||
|
|
||||||
/* from e-smith-manager to smanager (smeserver_manager2) */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
|
||||||
* copyright (C) 1999-2003 Mitel Networks Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* Technical support for this program is available from Mitel Networks
|
|
||||||
* Please visit our web site www.mitel.com for details.
|
|
||||||
*----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This is the stylesheet used in the main panels only.
|
|
||||||
|
|
||||||
This file inherits the styles use in sme_core in the "header" section, and
|
|
||||||
as noted in the code below. Note that some of the styles here are empty.
|
|
||||||
This is because the style definition has moved safely to sme_core.css
|
|
||||||
and the placeholder is left here for reference or future use.
|
|
||||||
|
|
||||||
There are a lot of styles in here, so read carefully. Each one is documented.
|
|
||||||
|
|
||||||
Styles that were in the old stylesheets, but are not used in the UI are at the
|
|
||||||
bottom, commented out. These can be removed at the end of the 6.0 cycle */
|
|
||||||
|
|
||||||
/* general page properties */
|
|
||||||
body, body.main {
|
|
||||||
margin-top: 5px;
|
|
||||||
margin-right: 20px;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
/* Table properties ****************************************/
|
|
||||||
/* There are THREE types of tables 1. *.sme-layout* is used for layout purposes. It is the "master container" on a page. It controls the top-level table inside of which everything else is put. 2. *.sme-noborders* is used for layout, and defines a borderless table and cells used within it. 2. *.sme-border* is used for tabular data, and defines a header row and borders for tables that need borders */
|
|
||||||
/*First, some defaults */
|
|
||||||
td {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
/* sme-layout* : Used for top-level layout */
|
|
||||||
table.sme-layout {
|
|
||||||
border-collapse: collapse;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
margin-top: 2px;
|
|
||||||
}
|
|
||||||
tr.sme-layout {
|
|
||||||
border: 1px solid #dddddd;
|
|
||||||
}
|
|
||||||
td.sme-layout {
|
|
||||||
border: 1px solid #dddddd;
|
|
||||||
}
|
|
||||||
/*This special style is actually used only for the button row along the bottom of each page*/
|
|
||||||
th.sme-layout {
|
|
||||||
border: 1px solid #dddddd;
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 9pt;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #000000;
|
|
||||||
text-align: right;
|
|
||||||
padding: 4px;
|
|
||||||
}
|
|
||||||
/* sme-noborders* : Used for mid-level layout */
|
|
||||||
table.sme-noborders {
|
|
||||||
padding: 0px;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
margin-left: 0px;
|
|
||||||
margin-right: 0px;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
td.sme-noborders-label {
|
|
||||||
font-weight: bold;
|
|
||||||
/*width: 250px;
|
|
||||||
*/
|
|
||||||
text-align: right;
|
|
||||||
/*vertical-align: top;
|
|
||||||
*/
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
td.sme-noborders-content {
|
|
||||||
text-align: left;
|
|
||||||
vertical-align: top;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
td.sme-noborders-info, div.sme-noborders-info {
|
|
||||||
text-align: left;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
/* Used for a left-most column of radio buttons (see date/time panel) */
|
|
||||||
td.sme-radiobutton {
|
|
||||||
width: 30px;
|
|
||||||
}
|
|
||||||
/* sme-border* : Used for tabular data */
|
|
||||||
table.sme-border {
|
|
||||||
border-collapse: collapse;
|
|
||||||
border: 2px solid #cccccc;
|
|
||||||
empty-cells: show;
|
|
||||||
margin: 5px 5px 5px 2px;
|
|
||||||
}
|
|
||||||
td.sme-border, td.sme-border-warning, td.sme-border-right, td.sme-border-center {
|
|
||||||
border: 1px solid #cccccc;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 10px;
|
|
||||||
font-weight: normal;
|
|
||||||
color: #000000;
|
|
||||||
text-align: left;
|
|
||||||
padding-left: 2px;
|
|
||||||
padding-right: 2px;
|
|
||||||
padding-top: 3px;
|
|
||||||
padding-bottom: 3px;
|
|
||||||
}
|
|
||||||
td.sme-border-warning {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
td.sme-border-right {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
td.sme-border-center {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
th.sme-border {
|
|
||||||
border: 1px solid #cccccc;
|
|
||||||
background-color: #bee6a2;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 10px;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #000000;
|
|
||||||
text-align: center;
|
|
||||||
vertical-align: bottom;
|
|
||||||
padding-left: 3px;
|
|
||||||
padding-right: 3px;
|
|
||||||
padding-top: 3px;
|
|
||||||
padding-bottom: 3px;
|
|
||||||
/*border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #F2F0EE #75736E #75736E #F2F0EE ;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
td.sme-border a, td.sme-border-right a, td.sme-border-center a {
|
|
||||||
font-size: 10px;
|
|
||||||
}
|
|
||||||
/* misc layout stuff*/
|
|
||||||
/* these two are for any error messages that pop up*/
|
|
||||||
div.error, div.sme-error, span.error, span.sme-error {
|
|
||||||
color: red;
|
|
||||||
background-color: #ffffff;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: red ;
|
|
||||||
padding: 2px;
|
|
||||||
/* margin-left: 20px;
|
|
||||||
/*margin-right: 20px;*/
|
|
||||||
/(margin-top:0;*/
|
|
||||||
/*margin-bottom:0;*/
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
div.error-noborders, div.sme-error-noborders, span.error-noborders, span.sme-error-noborders {
|
|
||||||
color: red;
|
|
||||||
background-color: #ffffff;
|
|
||||||
border-width: 0px;
|
|
||||||
}
|
|
||||||
div.error h2, span.error h2, div.error p, span.error p {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
/* These are for the special case of a link being inside an error message */
|
|
||||||
div.sme-error a, div.error a, span.error a, span.sme-error a, div.error-noborders a, div.sme-error-noborders a, span.error-noborders a, span.sme-error-noborders a {
|
|
||||||
color: #ff0000;
|
|
||||||
font-weight: bold;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
/* For when a link is the error message */
|
|
||||||
a.error:link, a.error:visited, a.error:hover, a.error:active {
|
|
||||||
color: #ff0000;
|
|
||||||
font-weight: normal;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
/* these two are for any success messages that pop up*/
|
|
||||||
div.success, span.success {
|
|
||||||
color: #006400;
|
|
||||||
/* background-color: #ffffff;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #006400 ;
|
|
||||||
padding: 2px;
|
|
||||||
/*
|
|
||||||
margin-left: 20px;
|
|
||||||
margin-right: 20px;
|
|
||||||
/*
|
|
||||||
/*margin-top:0;*/
|
|
||||||
/*margin-bottom:4px;*/
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
/* These two are for the special case of a link being inside a success message */
|
|
||||||
div.success a, span.success a {
|
|
||||||
color: #006400;
|
|
||||||
font-weight: bold;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
div.success h2, span.success h2, div.success p, span.success p {
|
|
||||||
color: green;
|
|
||||||
}
|
|
||||||
/*These two define the copyright footer styles, one for the line and one for the text*/
|
|
||||||
hr.sme-copyrightbar {
|
|
||||||
}
|
|
||||||
.sme-copyright {
|
|
||||||
}
|
|
||||||
/* These ones define styles for the links that are made to look like standard form submit buttons */
|
|
||||||
a.button-like:link, a.button-like:visited, a.button-like:hover, a.button-like:active, a.button-like-small:link, a.button-like-small:visited, a.button-like-small:hover, a.button-like-small:active {
|
|
||||||
font-family: sans-serif;
|
|
||||||
font-size: 13px;
|
|
||||||
color: black;
|
|
||||||
background: #D4D0C8;
|
|
||||||
text-decoration: none;
|
|
||||||
text-align: left;
|
|
||||||
border-color: #F2F0EE #75736E #75736E #F2F0EE ;
|
|
||||||
margin-top: 10px;
|
|
||||||
margin-right: 2px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
margin-left: 2px;
|
|
||||||
border-style: solid;
|
|
||||||
border-top-width: 2px;
|
|
||||||
border-right-width: 2px;
|
|
||||||
border-bottom-width: 2px;
|
|
||||||
border-left-width: 2px;
|
|
||||||
padding-top: 2px;
|
|
||||||
padding-bottom: 2px;
|
|
||||||
padding-left: 6px;
|
|
||||||
padding-right: 6px;
|
|
||||||
}
|
|
||||||
a.button-like-small:link, a.button-like-small:visited, a.button-like-small:hover, a.button-like-small:active {
|
|
||||||
border-top-width: 1px;
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-left-width: 1px;
|
|
||||||
font-size: 10px;
|
|
||||||
padding-top: 0px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
padding-left: 1px;
|
|
||||||
padding-right: 1px;
|
|
||||||
}
|
|
||||||
a.button-like:active, a.button-like-small:active {
|
|
||||||
border-color: #75736E #F2F0EE #F2F0EE #75736E ;
|
|
||||||
}
|
|
||||||
/* EXPERIMENTAL SECTION */
|
|
||||||
/* These are styles used to experiment with. */
|
|
||||||
/* class for links, similar to the class in sme_menu.css, but for a red button */
|
|
||||||
a.button-like-red:link, a.button-like-red:visited, a.button-like-red:hover, a.button-like-red:active {
|
|
||||||
border-left: #F1726C 2px solid;
|
|
||||||
border-right: #B42025 2px solid;
|
|
||||||
border-top: #F1726C 2px solid;
|
|
||||||
border-bottom: #B42025 2px solid;
|
|
||||||
}
|
|
||||||
a.button-like-red:active {
|
|
||||||
border-color: #75736E #F2F0EE #F2F0EE #75736E ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT =<<'HERE';
|
|
||||||
|
|
||||||
/* from e-smith-manager to smanager (smeserver_manager2) */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
|
||||||
* copyright (C) 1999-2003 Mitel Networks Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* Technical support for this program is available from Mitel Networks
|
|
||||||
* Please visit our web site www.mitel.com for details.
|
|
||||||
*----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
/*contribs.org styling */
|
|
||||||
|
|
||||||
/* This special style is actually used only for the button row along the bottom of each page */
|
|
||||||
th.sme-layout {
|
|
||||||
border: 1px solid #8ebe43;
|
|
||||||
background-color: #bee6a2;
|
|
||||||
}
|
|
||||||
table.sme-border {
|
|
||||||
border: 2px solid #dddddd;
|
|
||||||
}
|
|
||||||
td.sme-border-warning,
|
|
||||||
td.sme-border-right,
|
|
||||||
td.sme-border-center {
|
|
||||||
border: 1px solid #dddddd;
|
|
||||||
}
|
|
||||||
td.sme-border-right {text-align: right;}
|
|
||||||
td.sme-border-center {text-align: center;}
|
|
||||||
th.sme-border {
|
|
||||||
border: 1px solid #dddddd;
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
}
|
|
||||||
HERE
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
/* DO NOT MODIFY THIS FILE! It is updated automatically */
|
|
||||||
@@ -1,229 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = <<'EOF';
|
|
||||||
|
|
||||||
/* from e-smith-manager to smanager (smeserver_manager2) */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
|
||||||
* copyright (C) 1999-2003 Mitel Networks Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* Technical support for this program is available from Mitel Networks
|
|
||||||
* Please visit our web site www.mitel.com for details.
|
|
||||||
*----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This is the stylesheet used in the navigation panel only
|
|
||||||
|
|
||||||
This file inherits the styles use in sme_core in the "navigation" section,
|
|
||||||
and as noted in the code below. Note that some of the styles here are empty.
|
|
||||||
This is because the style definition has moved safely to sme_core.css and
|
|
||||||
the placeholder is left here for reference or future use.
|
|
||||||
|
|
||||||
There are a lot of styles in here, so read carefully. Each one is
|
|
||||||
documented.
|
|
||||||
|
|
||||||
Styles that were in the old stylesheets, but are not used in the UI are at
|
|
||||||
the bottom, commented out. These can be removed at the end of the 6.0
|
|
||||||
cycle */
|
|
||||||
|
|
||||||
/* Sets the general page properties */
|
|
||||||
body, body.menu {
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-right: 0px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
margin-left: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is the section heading style */
|
|
||||||
.section {
|
|
||||||
}
|
|
||||||
|
|
||||||
td.menu-cell {
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-right: 0px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
margin-left: 0px;
|
|
||||||
padding-left: 0px;
|
|
||||||
padding-right: 0px;
|
|
||||||
padding-top: 0px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
All the a links use pseudoclasses to control the two visual link styles.
|
|
||||||
For example:
|
|
||||||
a.item:link the general link item
|
|
||||||
a.item-current:link: the active link item
|
|
||||||
|
|
||||||
The switch from item to item-current is done with a javascript script in the head of the
|
|
||||||
navigation page, using the onClick event.
|
|
||||||
|
|
||||||
We are making heavy use of the cascade with these.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* a:link controls the look of a link when the mouse is nowhere near it */
|
|
||||||
a.item:link, a.item-current:link,
|
|
||||||
a.warn:link, a.warn-current:link {
|
|
||||||
display: block;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 10px;
|
|
||||||
color: black;
|
|
||||||
background: #e8f3e1;
|
|
||||||
text-decoration: none;
|
|
||||||
text-align: left;
|
|
||||||
border-color: #e8f3e1;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-right: 0px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
margin-left: 0px;
|
|
||||||
border-style: solid;
|
|
||||||
border-top-width: 1px;
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-left-width: 1px;
|
|
||||||
padding-right: 10px;
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-top: 0px;
|
|
||||||
padding-bottom: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* a:visited controls the look of a visited link (one that has been clicked) */
|
|
||||||
a.item:visited, a.item-current:visited,
|
|
||||||
a.warn:visited, a.warn-current:visited {
|
|
||||||
display: block;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 10px;
|
|
||||||
color: black;
|
|
||||||
background: #e8f3e1;
|
|
||||||
text-decoration: none;
|
|
||||||
border-color: #e8f3e1;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-right: 0px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
margin-left: 0px;
|
|
||||||
border-style: solid;
|
|
||||||
border-top-width: 1px;
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-left-width: 1px;
|
|
||||||
padding-right: 10px;
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-bottom: 2px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* a:hover controls the look of a link under the curser*/
|
|
||||||
a.item:hover, a.item-current:hover,
|
|
||||||
a.warn:hover, a.warn-current:hover {
|
|
||||||
display: block;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 10px;
|
|
||||||
color: black;
|
|
||||||
text-decoration: none;
|
|
||||||
background: #cccccc;
|
|
||||||
border-color: #888888;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-right: 0px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
margin-left: 0px;
|
|
||||||
border-style: solid;
|
|
||||||
border-top-width: 1px;
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-left-width: 1px;
|
|
||||||
padding-right: 10px;
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-bottom: 2px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* a:active controls the look of a link as it is selected*/
|
|
||||||
a.item:active, a.item-current:active,
|
|
||||||
a.warn:active, a.warn-current:active {
|
|
||||||
display: block;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 10px;
|
|
||||||
color: white;
|
|
||||||
background: black;
|
|
||||||
text-decoration: none ;
|
|
||||||
border-color: #000000;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-right: 0px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
margin-left: 0px;
|
|
||||||
border-style: solid;
|
|
||||||
border-top-width: 1px;
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-left-width: 1px;
|
|
||||||
padding-right: 10px;
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-bottom: 2px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
These styles are to ensure that a selected link appears selected, even if the link
|
|
||||||
opens in another frame. This uses a javascript chunk in the head of the navigation
|
|
||||||
frame to change the style using the onClick event.
|
|
||||||
*/
|
|
||||||
a.item-current:link, a.warn-current:link,
|
|
||||||
a.item-current:visited, a.warn-current:visited,
|
|
||||||
a.item-current:active, a.warn-current:active,
|
|
||||||
a.item-current:hover, a.warn-current:hover {
|
|
||||||
display: block;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 10px;
|
|
||||||
color: black;
|
|
||||||
text-decoration: none;
|
|
||||||
background: #ffffff;
|
|
||||||
border-color: #888888;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-right: 0px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
margin-left: 0px;
|
|
||||||
border-style: solid;
|
|
||||||
border-top-width: 1px;
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-left-width: 1px;
|
|
||||||
padding-right: 10px;
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-bottom: 2px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* these two add a border on the styles defined directly above when
|
|
||||||
the mouse is hovering over them */
|
|
||||||
a.item-current:hover, a.warn-current:hover {
|
|
||||||
border-color: #888888;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* These redefine a few elements to make room for the icon to the left of the warn class*/
|
|
||||||
a.warn:link, a.warn-current:link,
|
|
||||||
a.warn:visited, a.warn-current:visited,
|
|
||||||
a.warn:active, a.warn-current:active,
|
|
||||||
a.warn:hover, a.warn-current:hover {
|
|
||||||
background-image: url(/server-common/warn.gif);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: 10px;
|
|
||||||
padding-left: 25px;
|
|
||||||
}
|
|
||||||
/*end*/
|
|
||||||
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
/* DO NOT MODIFY THIS FILE! It is updated automatically */
|
|
||||||
@@ -1,358 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = <<'EOF';
|
|
||||||
|
|
||||||
/* smeserver_manager2 */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
|
||||||
* copyright (C) 1999-2003 Mitel Networks Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* Technical support for this program is available from Mitel Networks
|
|
||||||
* Please visit our web site www.mitel.com for details.
|
|
||||||
*----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* DO NOT MODIFY THIS FILE! It is updated automatically */
|
|
||||||
|
|
||||||
/* smeserver_manager2 */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
|
||||||
* copyright (C) 1999-2003 Mitel Networks Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* Technical support for this program is available from Mitel Networks
|
|
||||||
* Please visit our web site www.mitel.com for details.
|
|
||||||
*----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This is the basic stylesheet originally used in the mojo version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
body{
|
|
||||||
background-color: #FFF;
|
|
||||||
}
|
|
||||||
#container{
|
|
||||||
max-width: 100%;
|
|
||||||
position: relative;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
#header2 {
|
|
||||||
width:94.2%;
|
|
||||||
margin-left:1px;
|
|
||||||
/*margin-right:0;*/
|
|
||||||
margin-top:4px;
|
|
||||||
}
|
|
||||||
.module {
|
|
||||||
padding: 20px;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-radius: 10px;
|
|
||||||
background-color: #f9f9f9;
|
|
||||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
|
||||||
margin-left:10px!important;
|
|
||||||
margin-top:10px!important;
|
|
||||||
/*margin-right:10px !important;*/
|
|
||||||
}
|
|
||||||
#navigation{
|
|
||||||
width: 190px;
|
|
||||||
position: absolute;
|
|
||||||
/*margin-left: 0px;*/
|
|
||||||
padding: 5px;
|
|
||||||
background-color: #E8F3E1;
|
|
||||||
/* height: 600px;
|
|
||||||
*/
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
#main{
|
|
||||||
margin-left: 195px;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
#central{
|
|
||||||
/*margin-left: 0px;*/
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
#footer{
|
|
||||||
/*margin-left: 0px;
|
|
||||||
*/
|
|
||||||
padding-left : 5px;
|
|
||||||
}
|
|
||||||
#header {
|
|
||||||
/*background: #bee6a2;
|
|
||||||
*/
|
|
||||||
width:100%;
|
|
||||||
margin:auto;
|
|
||||||
}
|
|
||||||
#header h1, a:link, a:visited {
|
|
||||||
color: black;
|
|
||||||
text-decoration: none;
|
|
||||||
/* contribs.org styling */
|
|
||||||
}
|
|
||||||
a:link {
|
|
||||||
color: #006921;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: #063;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #F00;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a:active {
|
|
||||||
color: #606060;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.sme-error {
|
|
||||||
color: red;
|
|
||||||
display:block;
|
|
||||||
background-color: #ffffff;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: red ;
|
|
||||||
padding: 2px;
|
|
||||||
/* margin-left: 10px;*/
|
|
||||||
/* margin-right: 10px;*/
|
|
||||||
/*margin-top:0;*/
|
|
||||||
/*margin-bottom:0;*/
|
|
||||||
}
|
|
||||||
.sme-warning {
|
|
||||||
color: orange;
|
|
||||||
display:block;
|
|
||||||
background-color: #ffffff;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: orange ;
|
|
||||||
padding: 2px;
|
|
||||||
/* margin-left: 20px;
|
|
||||||
/* margin-right: 20px;*/
|
|
||||||
/*margin-top:2px;*/
|
|
||||||
/*margin-bottom:2px;*/
|
|
||||||
}
|
|
||||||
#footer img {
|
|
||||||
float: right;
|
|
||||||
position: fixed;
|
|
||||||
/*margin-left: 40%;*/
|
|
||||||
}
|
|
||||||
label.field-with-error {
|
|
||||||
color: #dd7e5e
|
|
||||||
}
|
|
||||||
input.field-with-error {
|
|
||||||
background-color: #fd9e7e
|
|
||||||
}
|
|
||||||
span.label {
|
|
||||||
display: inline-block;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
/*lightgreen;
|
|
||||||
*/
|
|
||||||
width: 30%;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
td.label {
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
/*lightgreen;
|
|
||||||
*/
|
|
||||||
width: 30%;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
span.label2 {
|
|
||||||
display: inline-block;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #e8f3e1;
|
|
||||||
/*lightgreen;
|
|
||||||
*/
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
span.data {
|
|
||||||
padding: 2px;
|
|
||||||
font-weight: bold;
|
|
||||||
margin-left:0;
|
|
||||||
/* background-color: lightblue;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
span.data2 {
|
|
||||||
padding: 2px;
|
|
||||||
/* background-color: lightblue;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
input.action {
|
|
||||||
margin-left: 0px;
|
|
||||||
background-color: #bee6a2;
|
|
||||||
/*lightgreen;
|
|
||||||
*/
|
|
||||||
color: darkgreen;
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 2px solid #4CAF50;
|
|
||||||
/* Green */
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
input.action:hover {
|
|
||||||
background-color: #3e8e41;
|
|
||||||
color:white;
|
|
||||||
}
|
|
||||||
input.action:active {
|
|
||||||
background-color: #3e8e41;
|
|
||||||
transform: translate(-2px,2px);
|
|
||||||
}
|
|
||||||
.center {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
input.action2 {
|
|
||||||
margin-left: 0px;
|
|
||||||
color: black;
|
|
||||||
background-color: #d4d0c8;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
#modul.desc {
|
|
||||||
padding: 3px;
|
|
||||||
background-color: grey;
|
|
||||||
}
|
|
||||||
[type = 'text'] {
|
|
||||||
margin-left: 0px;
|
|
||||||
/*background-color: lightblue;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
.a, .return {
|
|
||||||
color: #661866;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
a.section {
|
|
||||||
}
|
|
||||||
.a, .item {
|
|
||||||
line-height: 12px;
|
|
||||||
}
|
|
||||||
a.section-title {
|
|
||||||
display: inline-block;
|
|
||||||
color: #6CA345;
|
|
||||||
/*#888;
|
|
||||||
*/
|
|
||||||
padding-left: 5px;
|
|
||||||
padding-right: 5px;
|
|
||||||
line-height: 18px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.toggle-password {
|
|
||||||
margin-left: -30px;
|
|
||||||
}
|
|
||||||
.tg-icon {
|
|
||||||
position: relative;
|
|
||||||
top: 5px;
|
|
||||||
left: 2px;
|
|
||||||
}
|
|
||||||
.roundcube div {
|
|
||||||
height:462px;
|
|
||||||
width:85%;
|
|
||||||
margin-bottom:1%;
|
|
||||||
}
|
|
||||||
.roundcube object {
|
|
||||||
margin-top:1%;
|
|
||||||
height:95%;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
#help-button {
|
|
||||||
text-decoration: none;
|
|
||||||
/* Remove underline from link */
|
|
||||||
font-size: 20px;
|
|
||||||
/* Adjust font size as needed */
|
|
||||||
padding: 8px 12px;
|
|
||||||
/* Add padding to the help link */
|
|
||||||
background-color: #98d36e;
|
|
||||||
/* Background for visibility */
|
|
||||||
border-radius: 4px;
|
|
||||||
/* Rounded corners */
|
|
||||||
color: #000;
|
|
||||||
/* Button text color */
|
|
||||||
}
|
|
||||||
#help-button:hover {
|
|
||||||
background-color: #82c961;
|
|
||||||
/* Change background on hover */
|
|
||||||
}
|
|
||||||
.gradient-panel {
|
|
||||||
width: 100%;
|
|
||||||
height: 40px;
|
|
||||||
/* Fixed height for the panel */
|
|
||||||
background: linear-gradient(to right, white , #c0e7a5 );
|
|
||||||
/* Deep green to light green */
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
position:relative;
|
|
||||||
}
|
|
||||||
.logo {
|
|
||||||
height: 142%;
|
|
||||||
/* Fixed height for the logo */
|
|
||||||
width: auto;
|
|
||||||
/* Width will adjust to maintain aspect ratio */
|
|
||||||
margin-left: -16px;
|
|
||||||
}
|
|
||||||
.login-button {
|
|
||||||
position: absolute;
|
|
||||||
left: 7%;
|
|
||||||
/* Positions the button 2/3 across the panel */
|
|
||||||
transform: translateX(-50%);
|
|
||||||
/* Centers the button on its position */
|
|
||||||
background-color: #4caf50b8;
|
|
||||||
color: white !important;
|
|
||||||
border: none;
|
|
||||||
padding: 8px 16px;
|
|
||||||
text-align: center;
|
|
||||||
text-decoration: none;
|
|
||||||
display: inline-block;
|
|
||||||
font-size: 14px;
|
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 4px;
|
|
||||||
margin-left:77%
|
|
||||||
}
|
|
||||||
.login-button:hover {
|
|
||||||
background-color: #45a049;
|
|
||||||
}
|
|
||||||
.flag-style {
|
|
||||||
position: absolute;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
left: 95%;
|
|
||||||
/*right: 20px;
|
|
||||||
*/
|
|
||||||
width: 24px;
|
|
||||||
height: 14px;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.no-visited-state:visited {
|
|
||||||
color: inherit;
|
|
||||||
/* Or specify the desired color */
|
|
||||||
text-decoration: none;
|
|
||||||
/* Or any other style you want to reset */
|
|
||||||
}
|
|
||||||
/*end*/
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
/* DO NOT MODIFY THIS FILE! It is updated automatically */
|
|
||||||
@@ -4,6 +4,7 @@ package SrvMngr;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use utf8;
|
use utf8;
|
||||||
|
binmode(STDOUT);
|
||||||
|
|
||||||
use Mojo::Base 'Mojolicious';
|
use Mojo::Base 'Mojolicious';
|
||||||
|
|
||||||
@@ -29,9 +30,14 @@ use SrvMngr::Model::Main;
|
|||||||
use SrvMngr::Plugin::WithoutCache;
|
use SrvMngr::Plugin::WithoutCache;
|
||||||
|
|
||||||
use esmith::I18N;
|
use esmith::I18N;
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
|
use esmith::NavigationDB; # no UTF8 raw is ok for ASCII only flat file
|
||||||
|
|
||||||
|
# Import the function(s) you need
|
||||||
|
use SrvMngr_Auth qw(check_admin_access);
|
||||||
|
|
||||||
#this is overwrittrn with the "release" by the spec file - release can be "99.el8.sme"
|
#this is overwrittrn with the "release" by the spec file - release can be "99.el8.sme"
|
||||||
our $VERSION = '70.el8.sme';
|
our $VERSION = '94.el8.sme';
|
||||||
#Extract the release value
|
#Extract the release value
|
||||||
if ($VERSION =~ /^(\d+)/) {
|
if ($VERSION =~ /^(\d+)/) {
|
||||||
$VERSION = $1; # $1 contains the matched numeric digits
|
$VERSION = $1; # $1 contains the matched numeric digits
|
||||||
@@ -46,7 +52,7 @@ our @EXPORT_OK = qw(
|
|||||||
getNavigation ip_number validate_password is_normal_password email_simple
|
getNavigation ip_number validate_password is_normal_password email_simple
|
||||||
mac_address_or_blank mac_address ip_number_or_blank
|
mac_address_or_blank mac_address ip_number_or_blank
|
||||||
lang_space get_routes_list subnet_mask get_reg_mask
|
lang_space get_routes_list subnet_mask get_reg_mask
|
||||||
gen_locale_date_string get_public_ip_address
|
gen_locale_date_string get_public_ip_address simpleNavMerge
|
||||||
);
|
);
|
||||||
|
|
||||||
has home => sub {
|
has home => sub {
|
||||||
@@ -301,10 +307,11 @@ sub setup_routing {
|
|||||||
$if_logged_in->get('/userpassword')->to('userpassword#main')->name('passwd');
|
$if_logged_in->get('/userpassword')->to('userpassword#main')->name('passwd');
|
||||||
$if_logged_in->post('/userpassword')->to('userpassword#change_password')->name('passwd2');
|
$if_logged_in->post('/userpassword')->to('userpassword#change_password')->name('passwd2');
|
||||||
|
|
||||||
my $if_admin = $r->under( sub {
|
my $if_admin = $r->under( sub {
|
||||||
my $c =shift;
|
my $c = shift;
|
||||||
return $c->is_admin || $c->auth_fail($c->l("acs_ADMIN"));
|
# Call the imported function directly
|
||||||
});
|
return check_admin_access($c) || $c->auth_fail($c->l("acs_ADMIN"));
|
||||||
|
});
|
||||||
|
|
||||||
$if_admin->get('/backup')->to('backup#main')->name('backup');
|
$if_admin->get('/backup')->to('backup#main')->name('backup');
|
||||||
$if_admin->post('/backup')->to('backup#do_display')->name('backupd');
|
$if_admin->post('/backup')->to('backup#do_display')->name('backupd');
|
||||||
@@ -319,7 +326,10 @@ sub setup_routing {
|
|||||||
$if_admin->post('/clamav')->to('clamav#do_update')->name('clamav2');
|
$if_admin->post('/clamav')->to('clamav#do_update')->name('clamav2');
|
||||||
|
|
||||||
$if_admin->get('/datetime')->to('datetime#main')->name('datetime');
|
$if_admin->get('/datetime')->to('datetime#main')->name('datetime');
|
||||||
$if_admin->post('/datetime')->to('datetime#do_update')->name('datetime2');
|
$if_admin->post('/datetimeu')->to('datetime#do_update')->name('datetimeu');
|
||||||
|
$if_admin->get('/datetimed')->to('datetime#do_display')->name('datetimed');
|
||||||
|
$if_admin->post('/datetimet')->to('datetime#do_testntp')->name('datetimet');
|
||||||
|
|
||||||
|
|
||||||
$if_admin->get('/directory')->to('directory#main')->name('directory');
|
$if_admin->get('/directory')->to('directory#main')->name('directory');
|
||||||
$if_admin->post('/directory')->to('directory#do_update')->name('directory2');
|
$if_admin->post('/directory')->to('directory#do_update')->name('directory2');
|
||||||
@@ -414,28 +424,59 @@ sub setup_routing {
|
|||||||
# additional routes (for contribs) got from 'routes' db
|
# additional routes (for contribs) got from 'routes' db
|
||||||
#my @routes = @{SrvMngr::get_routes_list()};
|
#my @routes = @{SrvMngr::get_routes_list()};
|
||||||
|
|
||||||
foreach (@{SrvMngr::get_routes_list()}) {
|
#foreach (@{SrvMngr::get_routes_list()}) {
|
||||||
|
#if ( defined $_->{method} and defined $_->{url} and defined $_->{ctlact} and defined $_->{name} ) {
|
||||||
if ( defined $_->{method} and defined $_->{url} and defined $_->{ctlact} and defined $_->{name} ) {
|
#my $menu = defined $_->{menu} ? $_->{menu} : 'A';
|
||||||
my $menu = defined $_->{menu} ? $_->{menu} : 'A';
|
#if ( $menu eq 'N' ) {
|
||||||
if ( $menu eq 'N' ) {
|
#$r->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||||
$r->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
#if ( $_->{method} eq 'get');
|
||||||
if ( $_->{method} eq 'get');
|
#$r->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||||
$r->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
#if ( $_->{method} eq 'post');
|
||||||
if ( $_->{method} eq 'post');
|
#} elsif ( $menu eq 'U' ) {
|
||||||
} elsif ( $menu eq 'U' ) {
|
#$if_logged_in->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||||
$if_logged_in->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
#if ( $_->{method} eq 'get');
|
||||||
if ( $_->{method} eq 'get');
|
#$if_logged_in->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||||
$if_logged_in->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
#if ( $_->{method} eq 'post');
|
||||||
if ( $_->{method} eq 'post');
|
#} else {
|
||||||
} else {
|
#$if_admin->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||||
$if_admin->get($_->{url})->to($_->{ctlact})->name($_->{name})
|
#if ( $_->{method} eq 'get');
|
||||||
if ( $_->{method} eq 'get');
|
#$if_admin->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
||||||
$if_admin->post($_->{url})->to($_->{ctlact})->name($_->{name})
|
#if ( $_->{method} eq 'post');
|
||||||
if ( $_->{method} eq 'post');
|
#}
|
||||||
}
|
#}
|
||||||
|
#}
|
||||||
|
|
||||||
|
foreach my $route (@{SrvMngr::get_routes_list()}) {
|
||||||
|
if (defined $route->{method} && defined $route->{url} && defined $route->{ctlact} && defined $route->{name}) {
|
||||||
|
my $menu = defined $route->{menu} ? $route->{menu} : 'A';
|
||||||
|
|
||||||
|
# Fix controller case: convert "ControllerName" to "controllername" in "ControllerName#action"
|
||||||
|
# this is so that AdminLTE breadcrumb works - it appears that perl Packages names are NOT case sensitive
|
||||||
|
# and that the breadcrumb package assumes that the package name is the same as the main route.
|
||||||
|
my ($controller, $action) = split /#/, $route->{ctlact}, 2;
|
||||||
|
my $fixed_ctlact = lc($controller) . '#' . $action;
|
||||||
|
|
||||||
|
if ($menu eq 'N') {
|
||||||
|
$r->get($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||||
|
if $route->{method} eq 'get';
|
||||||
|
$r->post($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||||
|
if $route->{method} eq 'post';
|
||||||
|
}
|
||||||
|
elsif ($menu eq 'U') {
|
||||||
|
$if_logged_in->get($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||||
|
if $route->{method} eq 'get';
|
||||||
|
$if_logged_in->post($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||||
|
if $route->{method} eq 'post';
|
||||||
|
}
|
||||||
|
else { # Default: menu 'A'
|
||||||
|
$if_admin->get($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||||
|
if $route->{method} eq 'get';
|
||||||
|
$if_admin->post($route->{url})->to($fixed_ctlact)->name($route->{name})
|
||||||
|
if $route->{method} eq 'post';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$if_admin->get('/config/:key' => {key => qr/[a-z0-9]{2,32}/})->to('request#getconfig')->name('getconfig');
|
$if_admin->get('/config/:key' => {key => qr/[a-z0-9]{2,32}/})->to('request#getconfig')->name('getconfig');
|
||||||
$if_admin->get('/account/:key' => {key => qr/[a-z0-9]{2,32}/})->to('request#getaccount')->name('getaccount');
|
$if_admin->get('/account/:key' => {key => qr/[a-z0-9]{2,32}/})->to('request#getaccount')->name('getaccount');
|
||||||
@@ -546,12 +587,10 @@ sub theme_list {
|
|||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
|
|
||||||
sub getNavigation {
|
sub getNavigation {
|
||||||
|
my $class = shift; #not the controller as it is called as an external, not part of the controller.
|
||||||
use esmith::NavigationDB;
|
|
||||||
|
|
||||||
my $c = shift;
|
|
||||||
my $lang = shift || 'en-us';
|
my $lang = shift || 'en-us';
|
||||||
my $menu = shift || 'N';
|
my $menu = shift || 'N';
|
||||||
|
my $username = shift || ''; #Username when logged in as a user not admin
|
||||||
|
|
||||||
# my $lang = $c->session->{lang} || 'en-us';
|
# my $lang = $c->session->{lang} || 'en-us';
|
||||||
|
|
||||||
@@ -560,6 +599,26 @@ sub getNavigation {
|
|||||||
|
|
||||||
my @files = ();
|
my @files = ();
|
||||||
my %files_hash = ();
|
my %files_hash = ();
|
||||||
|
|
||||||
|
# Added: Store allowed admin panels for non-admin users
|
||||||
|
my @allowed_admin_panels = ();
|
||||||
|
my $is_admin = 1; # Default to admin (full access)
|
||||||
|
|
||||||
|
# Added: Check if user is non-admin and get their allowed panels
|
||||||
|
if ($username ne '') {
|
||||||
|
# Get the AccountsDB to check user permissions
|
||||||
|
my $accountsdb = esmith::AccountsDB::UTF8->open_ro() or
|
||||||
|
die "Couldn't open AccountsDB\n";
|
||||||
|
|
||||||
|
# Check if user has AdminPanels property
|
||||||
|
my $user_rec = $accountsdb->get($username);
|
||||||
|
if (defined $user_rec && $user_rec->prop('AdminPanels')) {
|
||||||
|
$is_admin = 0; # User is non-admin with specific panel access
|
||||||
|
# Get comma-separated list of allowed admin panels
|
||||||
|
my $admin_panels = $user_rec->prop('AdminPanels');
|
||||||
|
@allowed_admin_panels = split(/,/, $admin_panels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#-----------------------------------------------------
|
#-----------------------------------------------------
|
||||||
# Determine the directory where the functions are kept
|
# Determine the directory where the functions are kept
|
||||||
@@ -621,8 +680,7 @@ sub getNavigation {
|
|||||||
|
|
||||||
my $navinfo = NAVIGATIONDIR . "/navigation.$lang";
|
my $navinfo = NAVIGATIONDIR . "/navigation.$lang";
|
||||||
|
|
||||||
my $navdb = esmith::NavigationDB->open_ro( $navinfo ) or
|
my $navdb = esmith::NavigationDB->open_ro( $navinfo ) or die "Couldn't open $navinfo\n"; # no UTF8
|
||||||
die "Couldn't open $navinfo\n";
|
|
||||||
|
|
||||||
# Check the navdb for anything with a UrlPath, which means that it doesn't
|
# Check the navdb for anything with a UrlPath, which means that it doesn't
|
||||||
# have a cgi file to be picked up by the above code. Ideally, only pages
|
# have a cgi file to be picked up by the above code. Ideally, only pages
|
||||||
@@ -638,70 +696,110 @@ sub getNavigation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach my $file (keys %files_hash)
|
foreach my $file (keys %files_hash)
|
||||||
{
|
{
|
||||||
#my $heading = 'Unknown';
|
#my $heading = 'Unknown';
|
||||||
my $heading = 'Legacy';
|
my $heading = 'Legacy';
|
||||||
|
|
||||||
my $description = $file;
|
my $description = $file;
|
||||||
my $headingWeight = 99999;
|
my $headingWeight = 99999;
|
||||||
my $descriptionWeight = 99999;
|
my $descriptionWeight = 99999;
|
||||||
my $urlpath = '';
|
my $urlpath = '';
|
||||||
my $menucat = 'A'; # admin menu (default)
|
my $menucat = 'A'; # admin menu (default)
|
||||||
|
|
||||||
my $rec = $navdb->get($file);
|
my $rec = $navdb->get($file);
|
||||||
|
|
||||||
if (defined $rec)
|
if (defined $rec)
|
||||||
{
|
{
|
||||||
$heading = $rec->prop('Heading');
|
$heading = $rec->prop('Heading');
|
||||||
$description = $rec->prop('Description');
|
$description = $rec->prop('Description');
|
||||||
$headingWeight = $rec->prop('HeadingWeight') || 99999; #Stop noise in logs if file in dir does not have nav header.
|
$headingWeight = $rec->prop('HeadingWeight') || 99999; #Stop noise in logs if file in dir does not have nav header.
|
||||||
$descriptionWeight = $rec->prop('DescriptionWeight');
|
$descriptionWeight = $rec->prop('DescriptionWeight');
|
||||||
$urlpath = $rec->prop('UrlPath') || '';
|
$urlpath = $rec->prop('UrlPath') || '';
|
||||||
$menucat = $rec->prop('MenuCat') || 'A'; # admin menu (default)
|
$menucat = $rec->prop('MenuCat') || 'A'; # admin menu (default)
|
||||||
}
|
}
|
||||||
next if $menu ne $menucat;
|
|
||||||
|
# Added: Check if this is an admin menu item and if user has access
|
||||||
|
if ($menucat eq 'A' && !$is_admin) {
|
||||||
|
# Skip this admin panel if user doesn't have access to it
|
||||||
|
my $has_access = 0;
|
||||||
|
my $file_no_ext = $file;
|
||||||
|
$file_no_ext =~ s/\.pm$//; # Remove .pm extension if present
|
||||||
|
foreach my $allowed_panel (@allowed_admin_panels) {
|
||||||
|
if ($file_no_ext eq lc($allowed_panel)) {
|
||||||
|
#die("Here!!$file $file_no_ext $allowed_panel ");
|
||||||
|
$has_access = 1;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next if !$has_access;
|
||||||
|
}
|
||||||
|
|
||||||
#--------------------------------------------------
|
next if $menu ne $menucat;
|
||||||
# add heading, description and weight information to data structure
|
|
||||||
#--------------------------------------------------
|
|
||||||
|
|
||||||
unless (exists $nav {$heading})
|
#--------------------------------------------------
|
||||||
{
|
# add heading, description and weight information to data structure
|
||||||
$nav {$heading} = { COUNT => 0, WEIGHT => 0, DESCRIPTIONS => [] };
|
#--------------------------------------------------
|
||||||
}
|
|
||||||
|
|
||||||
$nav {$heading} {'COUNT'} ++;
|
unless (exists $nav {$heading})
|
||||||
$nav {$heading} {'WEIGHT'} += $headingWeight;
|
{
|
||||||
|
$nav {$heading} = { COUNT => 0, WEIGHT => 0, DESCRIPTIONS => [] };
|
||||||
|
}
|
||||||
|
|
||||||
# Check for manager panel, and assign the appropriate
|
$nav {$heading} {'COUNT'} ++;
|
||||||
# cgi-bin prefix for the links.
|
$nav {$heading} {'WEIGHT'} += $headingWeight;
|
||||||
# Grab the last 2 directories by splitting for '/'s and
|
|
||||||
# then concatenating the last 2
|
|
||||||
# probably a better way, but I don't know it.
|
|
||||||
|
|
||||||
my $path;
|
# Check for manager panel, and assign the appropriate
|
||||||
if ( $files_hash{$file} eq 'ctrl') {
|
# cgi-bin prefix for the links.
|
||||||
$path = "2";
|
# Grab the last 2 directories by splitting for '/'s and
|
||||||
} elsif ( $files_hash{$file} eq 'cgim') {
|
# then concatenating the last 2
|
||||||
$path = "/cgi-bin";
|
# probably a better way, but I don't know it.
|
||||||
} else {
|
|
||||||
my @filename = split /\//, $files_hash{$file};
|
|
||||||
$path = "/$filename[scalar @filename - 2]/$filename[scalar @filename - 1]";
|
|
||||||
};
|
|
||||||
|
|
||||||
push @{ $nav {$heading} {'DESCRIPTIONS'} },
|
my $path;
|
||||||
{ DESCRIPTION => $description,
|
if ( $files_hash{$file} eq 'ctrl') {
|
||||||
WEIGHT => $descriptionWeight,
|
$path = "2";
|
||||||
FILENAME => $urlpath ? $urlpath : "$path/$file",
|
} elsif ( $files_hash{$file} eq 'cgim') {
|
||||||
CGIPATH => $path,
|
$path = "/cgi-bin";
|
||||||
MENUCAT => $menucat
|
} else {
|
||||||
|
my @filename = split /\//, $files_hash{$file};
|
||||||
|
$path = "/$filename[scalar @filename - 2]/$filename[scalar @filename - 1]";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
push @{ $nav {$heading} {'DESCRIPTIONS'} },
|
||||||
|
{ DESCRIPTION => $description,
|
||||||
|
WEIGHT => $descriptionWeight,
|
||||||
|
FILENAME => $urlpath ? $urlpath : "$path/$file",
|
||||||
|
CGIPATH => $path,
|
||||||
|
MENUCAT => $menucat
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return \%nav;
|
return \%nav;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub simpleNavMerge {
|
||||||
|
#Used to merge two nav structures - used for the user and selected admin menu.
|
||||||
|
my ($class,$nav1, $nav2) = @_;
|
||||||
|
my %result = %$nav1; # Start with a copy of first nav
|
||||||
|
|
||||||
|
# Merge in second nav
|
||||||
|
foreach my $heading (keys %$nav2) {
|
||||||
|
if (exists $result{$heading}) {
|
||||||
|
# Add counts and weights
|
||||||
|
$result{$heading}{COUNT} += $nav2->{$heading}{COUNT};
|
||||||
|
$result{$heading}{WEIGHT} += $nav2->{$heading}{WEIGHT};
|
||||||
|
# Append descriptions
|
||||||
|
push @{$result{$heading}{DESCRIPTIONS}}, @{$nav2->{$heading}{DESCRIPTIONS}};
|
||||||
|
} else {
|
||||||
|
# Just copy the heading
|
||||||
|
$result{$heading} = $nav2->{$heading};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return \%result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub _lang_space {
|
sub _lang_space {
|
||||||
|
|
||||||
@@ -749,7 +847,7 @@ sub get_routes_list {
|
|||||||
|
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
|
||||||
my $rtdb = esmith::ConfigDB->open_ro('routes') || die 'Cannot open Routes db';
|
my $rtdb = esmith::ConfigDB::UTF8->open_ro('routes') || die 'Cannot open Routes db';
|
||||||
my @routes = $rtdb->get_all();
|
my @routes = $rtdb->get_all();
|
||||||
my @rt;
|
my @rt;
|
||||||
|
|
||||||
@@ -831,7 +929,7 @@ sub gen_locale_date_string
|
|||||||
sub get_public_ip_address
|
sub get_public_ip_address
|
||||||
{
|
{
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
my $cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
my $sysconfig = $cdb->get('sysconfig');
|
my $sysconfig = $cdb->get('sysconfig');
|
||||||
if ($sysconfig)
|
if ($sysconfig)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Backup;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : System
|
# heading : System
|
||||||
# description : Backup or restore
|
# description : Backup or restore
|
||||||
# navigation : 4000 200
|
# navigation : 4000 100
|
||||||
# Copyright (C) 2002 Mitel Networks Corporation
|
# Copyright (C) 2002 Mitel Networks Corporation
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# routes : end
|
# routes : end
|
||||||
@@ -20,14 +20,14 @@ use Locale::gettext;
|
|||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session ip_number_or_blank);
|
use SrvMngr qw(theme_list init_session ip_number_or_blank);
|
||||||
use Quota;
|
use Quota;
|
||||||
use esmith::ConfigDB;
|
use esmith::ConfigDB::UTF8;
|
||||||
use esmith::AccountsDB;
|
use esmith::AccountsDB::UTF8;
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Find;
|
use File::Find;
|
||||||
use File::Path qw(make_path remove_tree);
|
use File::Path qw(make_path remove_tree);
|
||||||
use esmith::Backup;
|
use esmith::Backup;
|
||||||
use esmith::BackupHistoryDB;
|
use esmith::BackupHistoryDB; #no UTF8 and not in use
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
use esmith::lockfile;
|
use esmith::lockfile;
|
||||||
use esmith::BlockDevices;
|
use esmith::BlockDevices;
|
||||||
@@ -36,9 +36,6 @@ use constant DEBUG => $ENV{MOJO_SMANAGER_DEBUG} || 0;
|
|||||||
use constant FALSE => 0;
|
use constant FALSE => 0;
|
||||||
use constant TRUE => 1;
|
use constant TRUE => 1;
|
||||||
|
|
||||||
#our $cdb = esmith::ConfigDB->open || die "Couldn't open config db"; #remove as cached gives problems
|
|
||||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
#our $rdb = esmith::ConfigDB->open('/etc/e-smith/restore') || die "Couldn't open restore db";
|
|
||||||
my ($cdb,$adb,$rdb);
|
my ($cdb,$adb,$rdb);
|
||||||
my $es_backup = new esmith::Backup or die "Couldn't create Backup object\n";
|
my $es_backup = new esmith::Backup or die "Couldn't create Backup object\n";
|
||||||
my @directories = $es_backup->restore_list;
|
my @directories = $es_backup->restore_list;
|
||||||
@@ -56,9 +53,9 @@ sub main {
|
|||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my %bac_datas = ();
|
my %bac_datas = ();
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$rdb = esmith::ConfigDB->open('/etc/e-smith/restore');
|
$rdb = esmith::ConfigDB::UTF8->open('/etc/e-smith/restore');
|
||||||
my $title = $c->l('bac_BACKUP_TITLE');
|
my $title = $c->l('bac_BACKUP_TITLE');
|
||||||
my $notif;
|
my $notif;
|
||||||
$bac_datas{'function'} = 'desktop_backup';
|
$bac_datas{'function'} = 'desktop_backup';
|
||||||
@@ -115,9 +112,9 @@ sub do_display {
|
|||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my ($res, $result) = '';
|
my ($res, $result) = '';
|
||||||
my $function = $c->param('Function');
|
my $function = $c->param('Function');
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$rdb = esmith::ConfigDB->open('/etc/e-smith/restore');
|
$rdb = esmith::ConfigDB::UTF8->open('/etc/e-smith/restore');
|
||||||
|
|
||||||
if ($function =~ /^(\S+)$/) {
|
if ($function =~ /^(\S+)$/) {
|
||||||
$function = $1;
|
$function = $1;
|
||||||
@@ -142,7 +139,7 @@ sub do_display {
|
|||||||
$c->render(template=>"backdown");
|
$c->render(template=>"backdown");
|
||||||
#sleep(30);
|
#sleep(30);
|
||||||
# Redirect to the front page
|
# Redirect to the front page
|
||||||
#$c->redirect_to('/backup');
|
#$c->redirect_to('/backup');
|
||||||
return ""
|
return ""
|
||||||
} ## end if ($function eq 'desktop_backup')
|
} ## end if ($function eq 'desktop_backup')
|
||||||
|
|
||||||
@@ -279,9 +276,9 @@ sub do_update {
|
|||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$rdb = esmith::ConfigDB->open('/etc/e-smith/restore');
|
$rdb = esmith::ConfigDB::UTF8->open('/etc/e-smith/restore');
|
||||||
my $function = $c->param('Function');
|
my $function = $c->param('Function');
|
||||||
DEBUG && warn("do_update $function");
|
DEBUG && warn("do_update $function");
|
||||||
my %bac_datas = ();
|
my %bac_datas = ();
|
||||||
@@ -2132,4 +2129,4 @@ sub vmount {
|
|||||||
return (qx(/bin/mount -t nfs -o nolock,timeo=30,retrans=1,retry=0 "$host:/$share" $mountdir 2>&1));
|
return (qx(/bin/mount -t nfs -o nolock,timeo=30,retrans=1,retry=0 "$host:/$share" $mountdir 2>&1));
|
||||||
}
|
}
|
||||||
} ## end sub vmount
|
} ## end sub vmount
|
||||||
1;
|
1;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Bugreport;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : Investigation
|
# heading : Investigation
|
||||||
# description : Report a bug
|
# description : Report a bug
|
||||||
# navigation : 7000 500
|
# navigation : 7000 300
|
||||||
# routes : end
|
# routes : end
|
||||||
#------------------------------
|
#------------------------------
|
||||||
use strict;
|
use strict;
|
||||||
@@ -15,7 +15,8 @@ use SrvMngr qw(theme_list init_session);
|
|||||||
use Text::Template;
|
use Text::Template;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use SrvMngr qw( gen_locale_date_string );
|
use SrvMngr qw( gen_locale_date_string );
|
||||||
our $cdb = esmith::ConfigDB->open or die "Couldn't open ConfigDB\n";
|
use esmith::ConfigDB::UTF8;
|
||||||
|
our $cdb = esmith::ConfigDB::UTF8->open or die "Couldn't open ConfigDB\n";
|
||||||
|
|
||||||
use constant FALSE => 0;
|
use constant FALSE => 0;
|
||||||
use constant TRUE => 1;
|
use constant TRUE => 1;
|
||||||
@@ -173,4 +174,4 @@ sub download_config_report {
|
|||||||
'cleanup' => 1,
|
'cleanup' => 1,
|
||||||
);
|
);
|
||||||
} ## end sub download_config_report
|
} ## end sub download_config_report
|
||||||
1;
|
1;
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
|
|
||||||
#package esmith::FormMagick::Panel::clamav;
|
our $db;
|
||||||
our $db = esmith::ConfigDB->open() || die "Couldn't open config db";
|
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
@@ -23,6 +23,7 @@ sub main {
|
|||||||
my %clm_datas = ();
|
my %clm_datas = ();
|
||||||
my $title = $c->l('clm_FORM_TITLE');
|
my $title = $c->l('clm_FORM_TITLE');
|
||||||
my $modul = $c->render_to_string(inline => $c->l('clm_DESC_FILESYSTEM_SCAN_PERIOD'));
|
my $modul = $c->render_to_string(inline => $c->l('clm_DESC_FILESYSTEM_SCAN_PERIOD'));
|
||||||
|
$db = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
$clm_datas{'FilesystemScan'} = ($db->get_prop('clamav', 'FilesystemScan')) || 'disabled';
|
$clm_datas{'FilesystemScan'} = ($db->get_prop('clamav', 'FilesystemScan')) || 'disabled';
|
||||||
$clm_datas{'Quarantine'} = ($db->get_prop('clamav', 'Quarantine')) || 'disabled';
|
$clm_datas{'Quarantine'} = ($db->get_prop('clamav', 'Quarantine')) || 'disabled';
|
||||||
$clm_datas{'clam_versions'} = get_clam_versions();
|
$clm_datas{'clam_versions'} = get_clam_versions();
|
||||||
@@ -53,6 +54,7 @@ sub do_update {
|
|||||||
|
|
||||||
sub change_settings {
|
sub change_settings {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
my $status = $c->param('status');
|
my $status = $c->param('status');
|
||||||
my $FilesystemScan = ($c->param('FilesystemScan') || 'disabled');
|
my $FilesystemScan = ($c->param('FilesystemScan') || 'disabled');
|
||||||
my $Quarantine = ($c->param('Quarantine') || 'disabled');
|
my $Quarantine = ($c->param('Quarantine') || 'disabled');
|
||||||
|
|||||||
@@ -0,0 +1,359 @@
|
|||||||
|
#
|
||||||
|
# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-15 12:45:47
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Routines to be edited by the developer to provide content and validation for parameters
|
||||||
|
# and provison of the control data for table(s)
|
||||||
|
#
|
||||||
|
use esmith::util;
|
||||||
|
use esmith::util::network;
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
|
use esmith::AccountsDB;
|
||||||
|
use esmith::NetworksDB::UTF8;
|
||||||
|
use esmith::HostsDB;
|
||||||
|
use esmith::DomainsDB::UTF8;
|
||||||
|
|
||||||
|
use DateTime;
|
||||||
|
|
||||||
|
use constant FALSE => 0;
|
||||||
|
use constant TRUE => 1;
|
||||||
|
|
||||||
|
|
||||||
|
#The most common ones - open DB when required.
|
||||||
|
my $cdb;
|
||||||
|
my $adb;
|
||||||
|
my $ndb;
|
||||||
|
my $hdb;
|
||||||
|
my $ddb;
|
||||||
|
|
||||||
|
#The most common ones - you might want to use these if you need to make sure that the DB is refreshed.
|
||||||
|
#$cdb = esmith::ConfigDB::UTF8->open() || die("Couldn't open config db");
|
||||||
|
#$adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||||
|
#$ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||||
|
#$hdb = esmith::HostsDB::UTF8->open() || die("Couldn't open Hosts db");
|
||||||
|
#$ddb = esmith::DomainsDB::UTF8->open() || die("Couldn't open Domains db");
|
||||||
|
|
||||||
|
|
||||||
|
# Validation routines - parameters for each panel
|
||||||
|
|
||||||
|
sub validate_PARAMS {
|
||||||
|
my $c = shift;
|
||||||
|
my $dat_data = shift; #Data hash as parameter
|
||||||
|
# Validation for each field
|
||||||
|
my $ret = '';
|
||||||
|
|
||||||
|
if (! TRUE) #validate $c->param('time_mode')
|
||||||
|
{$ret .= 'Validation for time_mode failed';}
|
||||||
|
if (! TRUE) #validate $c->param('ntpserver')
|
||||||
|
{$ret .= 'Validation for ntpserver failed';}
|
||||||
|
if (! TRUE) #validate $c->param('year')
|
||||||
|
{$ret .= 'Validation for year failed';}
|
||||||
|
if (! TRUE) #validate $c->param('month')
|
||||||
|
{$ret .= 'Validation for month failed';}
|
||||||
|
if (! TRUE) #validate $c->param('day')
|
||||||
|
{$ret .= 'Validation for day failed';}
|
||||||
|
if (! TRUE) #validate $c->param('hour')
|
||||||
|
{$ret .= 'Validation for hour failed';}
|
||||||
|
if (! TRUE) #validate $c->param('minute')
|
||||||
|
{$ret .= 'Validation for minute failed';}
|
||||||
|
if (! TRUE) #validate $c->param('second')
|
||||||
|
{$ret .= 'Validation for second failed';}
|
||||||
|
if ($ret eq '') {$ret = 'ok';}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Get singleton data for each panel
|
||||||
|
|
||||||
|
sub get_data_for_panel_PARAMS {
|
||||||
|
# Return a hash with the fields required which will be loaded into the shared data
|
||||||
|
my $c = shift;
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open() || die("Couldn't open config db");
|
||||||
|
# --- Setup options ---
|
||||||
|
# Get today's date and time
|
||||||
|
my ($today_sec, $today_min, $today_hour, $today_mday, $today_mon, $today_year) = localtime;
|
||||||
|
$today_year += 1900;
|
||||||
|
$today_mon += 1;
|
||||||
|
my $today_mon = sprintf('%02d', $today_mon);
|
||||||
|
my $today_mday = sprintf('%02d', $today_mday);
|
||||||
|
my $now_hour = sprintf('%02d', $today_hour);
|
||||||
|
my $now_min = sprintf('%02d', $today_min);
|
||||||
|
my $now_sec = sprintf('%02d', $today_sec);
|
||||||
|
my $current_year = $today_year;
|
||||||
|
my $ntpserverurl = $cdb->get_prop('ntpd','NTPServer');
|
||||||
|
my $now = DateTime->now( time_zone => 'local' );
|
||||||
|
my %ret = (
|
||||||
|
# fields from Inputs
|
||||||
|
'time_mode'=>($ntpserverurl eq '' ? 'dat_manually_set' : 'dat_ntp_server'),
|
||||||
|
'ntpserver'=>"$ntpserverurl",
|
||||||
|
'year'=>"$today_year",
|
||||||
|
'month'=>"$today_mon",
|
||||||
|
'day'=>"$today_mday",,
|
||||||
|
'hour'=>"$now_hour",
|
||||||
|
'minute'=>"$now_min",
|
||||||
|
'second'=>"$now_sec",
|
||||||
|
'ntpstatus' => $cdb->get_prop('ntpd','status') || 'disabled',
|
||||||
|
# and the current time as a full format
|
||||||
|
'currentdatetime' => $now->strftime('%Y-%m-%dT%H:%M:%S')
|
||||||
|
|
||||||
|
);
|
||||||
|
return %ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Get control data for table(s)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Return hash with values from row in which link clicked on table
|
||||||
|
|
||||||
|
sub get_selected_PARAMS {
|
||||||
|
my $c = shift;
|
||||||
|
my $selected = shift; #Parameter is name of selected row.
|
||||||
|
my $is_new_record = shift; #Indicates new record required (defaults)
|
||||||
|
my %ret = ();
|
||||||
|
#gather the values here
|
||||||
|
return %ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#after sucessful modify or create or whatever and submit then perfom (if the params validate)
|
||||||
|
|
||||||
|
sub perform_PARAMS {
|
||||||
|
my $c = shift;
|
||||||
|
my $dat_data = shift; #Data hash as parameter
|
||||||
|
my $ret = '';
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open() || die("Couldn't open config db");
|
||||||
|
my $db = $cdb; #maybe one of the others
|
||||||
|
my $dbkey = 'ntpd';
|
||||||
|
# To make it write to DB as comment, delete this (regex) string in each if statement "TRUE\) \#copy or perform with value: .* e.g."
|
||||||
|
#$ntpserverurl = ( $c->param('time_mode') eq 'dat_manually_set' ? '' : $c->param('ntpserver'));
|
||||||
|
#if (!$db->set_prop($dbkey,'NTPServer',$ntpserverurl,type=>'service'))
|
||||||
|
#{$ret .= 'Perform/save failed for NTPServer';}
|
||||||
|
#if (! TRUE) #copy or perform with value: year e.g. $db->set_prop($dbkey,'year',$c->param('year'),type=>'service'))
|
||||||
|
#{$ret .= 'Perform/save failed for year';}
|
||||||
|
#if (! TRUE) #copy or perform with value: month e.g. $db->set_prop($dbkey,'month',$c->param('month'),type=>'service'))
|
||||||
|
#{$ret .= 'Perform/save failed for month';}
|
||||||
|
#if (! TRUE) #copy or perform with value: day e.g. $db->set_prop($dbkey,'day',$c->param('day'),type=>'service'))
|
||||||
|
#{$ret .= 'Perform/save failed for day';}
|
||||||
|
#if (! TRUE) #copy or perform with value: hour e.g. $db->set_prop($dbkey,'hour',$c->param('hour'),type=>'service'))
|
||||||
|
#{$ret .= 'Perform/save failed for hour';}
|
||||||
|
#if (! TRUE) #copy or perform with value: minute e.g. $db->set_prop($dbkey,'minute',$c->param('minute'),type=>'service'))
|
||||||
|
#{$ret .= 'Perform/save failed for minute';}
|
||||||
|
#if (! TRUE) #copy or perform with value: second e.g. $db->set_prop($dbkey,'second',$c->param('second'),type=>'service'))
|
||||||
|
#{$ret .= 'Perform/save failed for second';}
|
||||||
|
if ($c->param('time_mode') eq 'dat_manually_set'){
|
||||||
|
# Time and date set manually
|
||||||
|
$ret .= $c->disable_ntp();
|
||||||
|
$ret .= $c->validate_change_datetime()
|
||||||
|
} else {
|
||||||
|
# Time set by ntp server - set up parameters to it
|
||||||
|
$ret = $c->update_ntpserver($c->param('ntpserver'))
|
||||||
|
}
|
||||||
|
if ($ret eq '') {$ret = 'ok';}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub create_link{
|
||||||
|
# WIP
|
||||||
|
my ($c,$route, $panel, $index) = @_;
|
||||||
|
my $link = "$route?trt=$panel&Selected=$index";
|
||||||
|
return $link;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub getZone_list {
|
||||||
|
my $c = shift;
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# Get a sorted list of time zones
|
||||||
|
#--------------------------------------------------
|
||||||
|
$ENV{BASH_ENV} = '';
|
||||||
|
|
||||||
|
if (!open(ZONES, "cd /usr/share/zoneinfo; /usr/bin/find . -type f -or -type l | /bin/grep '^./[A-Z]' |")) {
|
||||||
|
warn($c->l('COULD_NOT_OPEN_TZ_FILE') . $! . '.');
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
my $zone;
|
||||||
|
my @zones = ();
|
||||||
|
|
||||||
|
while (defined($zone = <ZONES>)) {
|
||||||
|
chop($zone);
|
||||||
|
$zone =~ s/^.\///;
|
||||||
|
push @zones, $zone;
|
||||||
|
} ## end while (defined($zone = <ZONES>...))
|
||||||
|
close ZONES;
|
||||||
|
my @zt = sort @zones;
|
||||||
|
return \@zt;
|
||||||
|
} ## end sub getZone_list
|
||||||
|
|
||||||
|
sub getTimezone {
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# Figure out time zone by looking first looking at
|
||||||
|
# the configuration database value of TimeZone.
|
||||||
|
# If that is not defined, try and get it from /etc/localtime.
|
||||||
|
# If that doesn't work, default to US/Eastern.
|
||||||
|
#--------------------------------------------------
|
||||||
|
my $localtime;
|
||||||
|
my $timezonedefault = "US/Eastern";
|
||||||
|
|
||||||
|
if (defined $cdb->get('TimeZone')) {
|
||||||
|
$timezonedefault = $cdb->get('TimeZone')->value;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (defined($localtime = readlink '/etc/localtime')) {
|
||||||
|
my $pos = index $localtime, 'zoneinfo/';
|
||||||
|
|
||||||
|
if ($pos > -1) {
|
||||||
|
$timezonedefault = substr $localtime, ($pos + 9);
|
||||||
|
}
|
||||||
|
} ## end if (defined($localtime...))
|
||||||
|
} ## end else [ if (defined $cdb->get(...))]
|
||||||
|
return $timezonedefault;
|
||||||
|
} ## end sub getTimezone
|
||||||
|
|
||||||
|
sub validate_change_datetime {
|
||||||
|
my $c = shift;
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# Untaint parameters and check for validity
|
||||||
|
#--------------------------------------------------
|
||||||
|
my $timezone = $c->param('Timezone');
|
||||||
|
|
||||||
|
if ($timezone =~ /^([\w\-]+\/?[\w\-+]*)$/) {
|
||||||
|
$timezone = $1;
|
||||||
|
} else {
|
||||||
|
$timezone = "US/Eastern";
|
||||||
|
}
|
||||||
|
my $month = $c->param('month');
|
||||||
|
my $day = $c->param('day');
|
||||||
|
my $year = $c->param('year');
|
||||||
|
if (!is_valid_date($year, $month, $day)){
|
||||||
|
return $c->l('dat_Invalid_date')
|
||||||
|
}
|
||||||
|
|
||||||
|
my $hour = $c->param('hour');
|
||||||
|
|
||||||
|
if ($hour =~ /^(\d{1,2})$/) {
|
||||||
|
$hour = $1;
|
||||||
|
} else {
|
||||||
|
$hour = "12";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($hour < 1) || ($hour > 23)) {
|
||||||
|
return $c->l('dat_INVALID_HOUR') . " $hour. " . $c->l('dat_BETWEEN_0_AND_23');
|
||||||
|
}
|
||||||
|
my $minute = $c->param('minute');
|
||||||
|
|
||||||
|
if ($minute =~ /^(\d{1,2})$/) {
|
||||||
|
$minute = $1;
|
||||||
|
} else {
|
||||||
|
$minute = "0";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($minute < 0) || ($minute > 59)) {
|
||||||
|
return $c->l('dat_INVALID_MINUTE') . " $minute. " . $c->l('dat_BETWEEN_0_AND_59');
|
||||||
|
}
|
||||||
|
my $second = $c->param('second');
|
||||||
|
|
||||||
|
if ($second =~ /^(\d{1,2})$/) {
|
||||||
|
$second = $1;
|
||||||
|
} else {
|
||||||
|
$second = "0";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($second < 0) || ($second > 59)) {
|
||||||
|
return $c->l('dat_INVALID_SECOND') . " $second. " . $c->l('dat_BETWEEN_0_AND_59');
|
||||||
|
}
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# Store time zone in configuration database
|
||||||
|
#--------------------------------------------------
|
||||||
|
my $old = $cdb->get('UnsavedChanges')->value;
|
||||||
|
my $rec = $cdb->get('TimeZone');
|
||||||
|
|
||||||
|
unless ($rec) {
|
||||||
|
$rec = $cdb->new_record('TimeZone', undef);
|
||||||
|
}
|
||||||
|
$rec->set_value($timezone);
|
||||||
|
$cdb->get('UnsavedChanges')->set_value($old);
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# Signal event to change time zone, system time
|
||||||
|
# and hardware clock
|
||||||
|
#--------------------------------------------------
|
||||||
|
my $newdate = sprintf "%02d%02d%02d%02d%04d.%02d", $month, $day, $hour, $minute, $year, $second;
|
||||||
|
$c->app->log->info("Changing date manually to $newdate");
|
||||||
|
esmith::util::backgroundCommand(2, "/sbin/e-smith/signal-event", "timezone-update", $newdate); #TEMP!!!
|
||||||
|
return '';
|
||||||
|
} ## end sub validate_change_datetime
|
||||||
|
|
||||||
|
sub is_valid_date {
|
||||||
|
my ($year, $month, $day) = @_;
|
||||||
|
|
||||||
|
# Check if all parts are defined and integers
|
||||||
|
return 0 unless defined $year && defined $month && defined $day;
|
||||||
|
return 0 unless $year =~ /^\d+$/ && $month =~ /^\d+$/ && $day =~ /^\d+$/;
|
||||||
|
|
||||||
|
# Try to construct a DateTime object
|
||||||
|
eval {
|
||||||
|
DateTime->new(year => $year, month => $month, day => $day);
|
||||||
|
1;
|
||||||
|
} or return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub update_ntpserver {
|
||||||
|
my $c = shift;
|
||||||
|
my $ntpserver = shift;
|
||||||
|
my $msg = '';
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
|
|
||||||
|
#------------------------------------------------------------
|
||||||
|
# Looks good; go ahead and change the parameters.
|
||||||
|
#------------------------------------------------------------
|
||||||
|
my $old = $cdb->get('UnsavedChanges')->value;
|
||||||
|
my $rec = $cdb->get('ntpd');
|
||||||
|
|
||||||
|
if ($rec) {
|
||||||
|
$rec->set_prop('status', 'enabled');
|
||||||
|
$rec->set_prop('NTPServer', $ntpserver);
|
||||||
|
} else {
|
||||||
|
$rec = $cdb->new_record('ntpd',
|
||||||
|
{ type => 'service', status => 'enabled', SyncToHWClockSupported => 'yes', NTPServer => $ntpserver });
|
||||||
|
}
|
||||||
|
$cdb->get('UnsavedChanges')->set_value($old);
|
||||||
|
$msg = ''; #$c->l('dat_SETTINGS_CHANGED');
|
||||||
|
|
||||||
|
if ($ntpserver =~ /^\s*$/) {
|
||||||
|
$rec->set_prop('status', ($rec->prop('SyncToHWClockSupported') || 'yes') eq 'yes' ? 'enabled' : 'disabled');
|
||||||
|
$rec->set_prop('NTPServer', '');
|
||||||
|
$msg = $c->l('dat_INVALID_NTP_SERVER') if ($rec->prop('SyncToHWClockSupported') || 'yes') ne 'yes';
|
||||||
|
} ## end if ($ntpserver =~ /^\s*$/)
|
||||||
|
esmith::util::backgroundCommand(2, "/sbin/e-smith/signal-event", "timeserver-update");
|
||||||
|
return $msg;
|
||||||
|
} ## end sub update_ntpserver
|
||||||
|
|
||||||
|
sub disable_ntp {
|
||||||
|
|
||||||
|
# make sure that the parameters are set for disabled
|
||||||
|
my $old = $cdb->get('UnsavedChanges')->value;
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
|
my $rec = $cdb->get('ntpd');
|
||||||
|
|
||||||
|
if ($rec) {
|
||||||
|
$rec->set_prop('status', ($rec->prop('SyncToHWClockSupported') || 'yes') eq 'yes' ? 'enabled' : 'disabled');
|
||||||
|
$rec->set_prop('NTPServer', '');
|
||||||
|
} else {
|
||||||
|
$rec = $cdb->new_record('ntpd',
|
||||||
|
{ type => 'service', status => 'enabled', SyncToHWClockSupported => 'yes', NTPServer => '' });
|
||||||
|
}
|
||||||
|
$cdb->get('UnsavedChanges')->set_value($old);
|
||||||
|
return '';
|
||||||
|
} ## end sub disable_ntp
|
||||||
|
|
||||||
|
1;
|
||||||
@@ -1,356 +1,333 @@
|
|||||||
package SrvMngr::Controller::Datetime;
|
package SrvMngr::Controller::Datetime;
|
||||||
|
#
|
||||||
|
# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-15 12:45:47
|
||||||
|
# Remember that each route must be unique (else they just overwrite each other).
|
||||||
|
# you cannot have get and post on the same name and url.
|
||||||
|
#
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : System
|
# heading : System
|
||||||
# description : Date and time
|
# description : Date and time
|
||||||
# navigation : 4000 400
|
# navigation : 4000 300
|
||||||
|
#
|
||||||
|
# ######name : datetimet, method : post, url : /datetimet, ctlact : datetime#testntp
|
||||||
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
#------------------------------
|
#
|
||||||
|
# Documentation: https://wiki.contribs.org/Datetime
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
#
|
||||||
|
# Scheme of things:
|
||||||
|
#
|
||||||
|
# TBA!!
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Mojo::Base 'Mojolicious::Controller';
|
use Mojo::Base 'Mojolicious::Controller';
|
||||||
|
|
||||||
|
use constant FALSE => 0;
|
||||||
|
use constant TRUE => 1;
|
||||||
|
|
||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
use SrvMngr qw( gen_locale_date_string );
|
use esmith::util::network;
|
||||||
our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
use esmith::ConfigDB::UTF8;
|
||||||
|
use esmith::AccountsDB;
|
||||||
|
use esmith::NetworksDB;
|
||||||
|
use esmith::HostsDB::UTF8;
|
||||||
|
use esmith::DomainsDB::UTF8;
|
||||||
|
|
||||||
|
my $cdb;
|
||||||
|
my $adb;
|
||||||
|
my $ndb;
|
||||||
|
my $hdb;
|
||||||
|
my $ddb;
|
||||||
|
|
||||||
|
my %dat_data;
|
||||||
|
|
||||||
|
require '/usr/share/smanager/lib/SrvMngr/Controller/Datetime-Custom.pm'; #The code that is to be added by the developer
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
|
#
|
||||||
|
# Initial entry - route is "/<whatever>"
|
||||||
|
#
|
||||||
|
#set initial panel
|
||||||
|
#for initial panel:
|
||||||
|
#Specifiy panel to enter
|
||||||
|
#load up _data hash with DB fields
|
||||||
|
#load up stash with pointer(s) to control fields hash(= get-))
|
||||||
|
#and a pointer to the prefix_data hash
|
||||||
|
#render initial panel
|
||||||
|
|
||||||
|
my $c = shift;
|
||||||
|
$c->app->log->info( $c->log_req );
|
||||||
|
|
||||||
|
#The most common ones - you might want to delete some of these if they are not used.
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open() || die("Couldn't open config db");
|
||||||
|
$adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||||
|
$ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||||
|
$hdb = esmith::HostsDB::UTF8->open() || die("Couldn't open Hosts db");
|
||||||
|
$ddb = esmith::DomainsDB::UTF8->open() || die("Couldn't open Domains db");
|
||||||
|
|
||||||
|
%dat_data = ();
|
||||||
|
my $title = $c->l('dat_FORM_TITLE');
|
||||||
|
my $modul = $c->l('dat_INITIAL_DESC');
|
||||||
|
|
||||||
|
$dat_data{'trt'} = 'PARAMS';
|
||||||
|
|
||||||
|
#Load any DB entries into the <prefix>_data area so as they are preset in the form
|
||||||
|
# which DB - this only really works if the initial panel is a PARAMS type panel and not a TABLE
|
||||||
|
my $db = $cdb; #pickup local or global db or Default to config
|
||||||
|
|
||||||
|
|
||||||
|
$c->do_display($dat_data{'trt'});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Post request with params - submit from the form
|
||||||
|
sub do_update {
|
||||||
|
#
|
||||||
|
# Return after submit pushed on panel (this is a post) - route is "/<whatever>u"
|
||||||
|
# parameters in the params hash.
|
||||||
|
#
|
||||||
|
#load up all params into prefix_data hash:
|
||||||
|
#By panel (series of if statements - only one executed):
|
||||||
|
#call validate-PANEL() - return ret = ok or error message
|
||||||
|
|
||||||
|
#if validation not ok:
|
||||||
|
#render back to current panel with error message in stash
|
||||||
|
#otherwise:
|
||||||
|
#By panel (series of if statements - only one executed):
|
||||||
|
#do whatever is required: call perform-PANEL() - return 'ok' or Error Message
|
||||||
|
#call signal-event for any global actions specified (check it exists - error and continue?)
|
||||||
|
#if action smeserver-<whatever>-update exists
|
||||||
|
#signal_event smeserver-<whatever>-update
|
||||||
|
#call signal-event for any specific actions for thids panel (check it exists first - error and continue)
|
||||||
|
#set success in stash
|
||||||
|
#if no "nextpanel" entry:
|
||||||
|
#set firstpanel
|
||||||
|
#else
|
||||||
|
#set nextpanel
|
||||||
|
#call render
|
||||||
|
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my %dat_datas = ();
|
|
||||||
|
#$c->app->log->info($c->param('month'));
|
||||||
|
|
||||||
|
|
||||||
|
#The most common ones - you might want to delete some of these if they are not used.
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open() || die("Couldn't open config db");
|
||||||
|
$adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||||
|
$ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||||
|
$hdb = esmith::HostsDB::UTF8->open() || die("Couldn't open Hosts db");
|
||||||
|
$ddb = esmith::DomainsDB::UTF8->open() || die("Couldn't open Domains db");
|
||||||
|
|
||||||
my $title = $c->l('dat_FORM_TITLE');
|
my $title = $c->l('dat_FORM_TITLE');
|
||||||
my $modul = $c->l('dat_INITIAL_DESC');
|
my $modul = $c->l('dat_INITIAL_DESC');
|
||||||
$dat_datas{ntpstatus} = 'disabled';
|
|
||||||
my $rec = $cdb->get('ntpd');
|
|
||||||
|
|
||||||
if ($rec) {
|
# Accessing all POST/GET parameters
|
||||||
$dat_datas{'ntpserver'} = $rec->prop('NTPServer') || '';
|
#my $params = $c->req->params->to_hash;
|
||||||
|
|
||||||
if ($rec->prop('status') eq 'enabled') {
|
# Get number of POST parameters
|
||||||
$dat_datas{ntpstatus} = 'enabled'
|
#my $num_params = keys scaler %$params;
|
||||||
unless ($rec->prop('SyncToHWClockSupported') || 'yes') eq 'yes' and $dat_datas{ntpserver} =~ m#^\s*$#;
|
|
||||||
}
|
#Params are available in the hash "params" - copy to the prefix_data hash
|
||||||
} ## end if ($rec)
|
#while (my ($key, $value) = each %{$c->req->params->to_hash}) {
|
||||||
( $dat_datas{weekday}, $dat_datas{monthname}, $dat_datas{month}, $dat_datas{day}, $dat_datas{year},
|
# $dat_data{$key} = $value;
|
||||||
$dat_datas{hour}, $dat_datas{minute}, $dat_datas{second}, $dat_datas{ampm}
|
#}
|
||||||
)
|
|
||||||
= split /\|/,
|
|
||||||
`/bin/date '+%A|%B|%-m|%-d|%Y|%-I|%M|%S|%p'`;
|
|
||||||
|
|
||||||
# get rid of trailing carriage return on last field
|
# the value of trt will tell you which panel has returned
|
||||||
chop($dat_datas{ampm});
|
my $trt = $c->param('trt') || 'PARAMS'; #hidden control on every form.
|
||||||
$dat_datas{'now_string'} = gen_locale_date_string;
|
my $ret = 'ok';
|
||||||
$c->stash(title => $title, modul => $modul, dat_datas => \%dat_datas);
|
|
||||||
$c->render('datetime');
|
|
||||||
} ## end sub main
|
|
||||||
|
|
||||||
sub do_update {
|
#Validate the parameters in a custom sub one for each panel (although only one of these will be executed)
|
||||||
my $c = shift;
|
my $thispanel;
|
||||||
my %dat_datas = ();
|
|
||||||
|
if ($trt eq 'PARAMS'){
|
||||||
|
#Validate form parameters for panel PARAMS
|
||||||
|
$ret = $c->validate_PARAMS(\%dat_data);
|
||||||
|
$thispanel = 'PARAMS';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ret ne 'ok'){
|
||||||
|
$c->stash(error => $c->l($ret));
|
||||||
|
$c->do_display($thispanel);
|
||||||
|
} else {
|
||||||
|
#Do whatever is needed, including writing values to the DB
|
||||||
|
|
||||||
|
|
||||||
|
if ($trt eq 'PARAMS'){
|
||||||
|
#do whatever is required ...
|
||||||
|
$ret = $c->perform_PARAMS(\%dat_data);
|
||||||
|
if ($ret ne 'ok') {
|
||||||
|
# return to the panel with error message
|
||||||
|
$c->stash(error => $c->l($ret));
|
||||||
|
$c->stash(
|
||||||
|
title => $title,
|
||||||
|
modul => $modul,
|
||||||
|
dat_data => \%dat_data
|
||||||
|
);
|
||||||
|
$c->render(template => "datetime");
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
if ($c->param('time_mode') eq 'dat_manually_set') {
|
||||||
|
$c->stash( success => $c->l('dat_UPDATING_CLOCK'));
|
||||||
|
} else {
|
||||||
|
$c->stash( success => $c->l('dat_SETTINGS_CHANGED'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# and call any signal-events needed
|
||||||
|
#TBD
|
||||||
|
# Setup shared data and call panel
|
||||||
|
if ('none' eq 'none') {
|
||||||
|
$dat_data{'trt'} = 'PARAMS';
|
||||||
|
} else {
|
||||||
|
$dat_data{'trt'} = 'none';
|
||||||
|
}
|
||||||
|
$c->do_display($dat_data{'trt'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub do_display {
|
||||||
|
#
|
||||||
|
# Return after link clicked in table (this is a get) - route is "/<whatever>d"
|
||||||
|
# Expects ?trt=PANEL&selected="TableRowName" plus any other required
|
||||||
|
#
|
||||||
|
# OR it maybe a post from the main panel to add a new record
|
||||||
|
#
|
||||||
|
#load up all supplied params into prefix_data hash
|
||||||
|
#call get-selected-PANEL() - returns hash of all relevent parameters
|
||||||
|
#load up returned hash into prefix_data
|
||||||
|
#render - to called panel
|
||||||
|
|
||||||
|
my ($c,$trt) = @_;
|
||||||
|
$c->app->log->info($c->log_req);
|
||||||
|
|
||||||
|
#The most common ones - you might want to delete some of these if they are not used.
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open() || die("Couldn't open config db");
|
||||||
|
$adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
|
||||||
|
$ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
|
||||||
|
$hdb = esmith::HostsDB::UTF8->open() || die("Couldn't open Hosts db");
|
||||||
|
$ddb = esmith::DomainsDB::UTF8->open() || die("Couldn't open Domains db");
|
||||||
|
|
||||||
my $title = $c->l('dat_FORM_TITLE');
|
my $title = $c->l('dat_FORM_TITLE');
|
||||||
my $modul = $c->l('dat_INITIAL_DESC');
|
my $modul = $c->l('dat_INITIAL_DESC');
|
||||||
my $result;
|
|
||||||
my $success;
|
|
||||||
my $old_ntpstatus = $c->param('Old_ntpstatus');
|
|
||||||
$dat_datas{ntpstatus} = $c->param('Ntpstatus');
|
|
||||||
|
|
||||||
if ($dat_datas{ntpstatus} ne $old_ntpstatus) {
|
# Accessing all parameters
|
||||||
if ($dat_datas{ntpstatus} eq 'disabled') {
|
#my $params = $c->req->params->to_hash;
|
||||||
( $dat_datas{weekday}, $dat_datas{monthname}, $dat_datas{month},
|
|
||||||
$dat_datas{day}, $dat_datas{year}, $dat_datas{hour},
|
|
||||||
$dat_datas{minute}, $dat_datas{second}, $dat_datas{ampm}
|
|
||||||
)
|
|
||||||
= split /\|/,
|
|
||||||
`/bin/date '+%A|%B|%-m|%-d|%Y|%-I|%M|%S|%p'`;
|
|
||||||
|
|
||||||
# get rid of trailing carriage return on last field
|
# Get number of parameters
|
||||||
chop($dat_datas{ampm});
|
#my $num_params = keys %$params;
|
||||||
} else {
|
|
||||||
$dat_datas{ntpserver} = ($cdb->get_prop('ntpd', 'NTPServer')) || '';
|
#Tag as Post or Get (ie. create new entry or edit existing one
|
||||||
}
|
my $is_new_record = ($c->req->method() eq 'POST');
|
||||||
$dat_datas{now_string} = esmith::FormMagick->gen_locale_date_string();
|
|
||||||
$c->stash(title => $title, modul => $modul, dat_datas => \%dat_datas);
|
#Params are available in the hash "params" - copy to the prefix_data hash
|
||||||
return $c->render('datetime');
|
#while (my ($key, $value) = each %{$c->req->params->to_hash}) {
|
||||||
} ## end if ($dat_datas{ntpstatus...})
|
# $dat_data{$key} = $value;
|
||||||
|
#}
|
||||||
|
|
||||||
if ($dat_datas{ntpstatus} eq 'enabled') {
|
# the value of trt will tell you which panel has returned
|
||||||
|
if (! $trt){
|
||||||
|
$trt = $c->param('trt') || 'PARAMS'; #Indicates where to go now
|
||||||
|
}
|
||||||
|
|
||||||
|
# Now add in the params from the selected row from the table
|
||||||
|
|
||||||
|
my %selectedrow;
|
||||||
|
|
||||||
|
if ($trt eq 'PARAMS'){
|
||||||
|
#Validate Get selected row (if applicable) PARAMS
|
||||||
|
%selectedrow = $c->get_selected_PARAMS($dat_data{'Selected'},$is_new_record);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#Copy in the selected row params to the prefix_data hash to pass to the panel
|
||||||
|
while (my ($key, $value) = each %selectedrow){
|
||||||
|
$dat_data{$key} = $value;
|
||||||
|
}
|
||||||
|
# Where to go now
|
||||||
|
$dat_data{'trt'} = $trt;
|
||||||
|
|
||||||
|
# Set up other shared data according to the panel to go to
|
||||||
|
|
||||||
|
if ($trt eq 'PARAMS'){
|
||||||
|
# pickup any other contents needed and load them into hash shared with panel
|
||||||
|
my %returned_hash;
|
||||||
|
# subroutine returns a hash directly
|
||||||
|
%returned_hash = $c->get_data_for_panel_PARAMS();
|
||||||
|
# Copy each key-value pair from the returned hash to the prefix data hash
|
||||||
|
while (my ($key, $value) = each %returned_hash) {
|
||||||
|
$dat_data{$key} = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# and table control fields
|
||||||
|
|
||||||
|
|
||||||
|
# Data for panel
|
||||||
|
$c->stash(
|
||||||
|
title => $title,
|
||||||
|
modul => $modul,
|
||||||
|
dat_data => \%dat_data
|
||||||
|
);
|
||||||
|
$c->render(template => "datetime");
|
||||||
|
}
|
||||||
|
|
||||||
# update ntpserver
|
sub do_testntp {
|
||||||
$dat_datas{ntpserver} = $c->param('Ntpserver') || '';
|
|
||||||
|
|
||||||
if ($dat_datas{ntpserver} eq "pool.ntp.org") {
|
|
||||||
$result .= $c->l('dat_INVALID_NTP_ADDR');
|
|
||||||
} elsif ($dat_datas{ntpserver} =~ /^([a-zA-Z0-9\.\-]+)$/) {
|
|
||||||
$dat_datas{ntpserver} = $1;
|
|
||||||
|
|
||||||
# } elsif ( $dat_datas{ntpserver} =~ /^\s*$/ ) {
|
|
||||||
# $dat_datas{ntpserver} = "";
|
|
||||||
} else {
|
|
||||||
$result .= $c->l('dat_INVALID_NTP_ADDR');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$result) {
|
|
||||||
$success = update_ntpserver($c, $dat_datas{ntpserver});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
# set Locale time & clean ntpserver
|
|
||||||
#my $servername = ($c->param('ServerName') || 'WS');
|
|
||||||
if (!$result) {
|
|
||||||
$result = validate_change_datetime($c);
|
|
||||||
|
|
||||||
if ($result eq 'OK') {
|
|
||||||
$success = $c->l('dat_UPDATING_CLOCK');
|
|
||||||
$result = '';
|
|
||||||
disable_ntp();
|
|
||||||
$success .= '<br>' . $c->l('dat_SERVER_DISABLED_DESC');
|
|
||||||
} ## end if ($result eq 'OK')
|
|
||||||
} ## end if (!$result)
|
|
||||||
} ## end else [ if ($dat_datas{ntpstatus...})]
|
|
||||||
|
|
||||||
if ($result) {
|
|
||||||
$c->stash(error => $result);
|
|
||||||
$c->stash(title => $title, modul => $modul, dat_datas => \%dat_datas);
|
|
||||||
return $c->render('datetime');
|
|
||||||
} ## end if ($result)
|
|
||||||
|
|
||||||
#$result = $c->l('dat_SUCCESS');
|
|
||||||
my $message = "'Datetime' update DONE";
|
|
||||||
$c->app->log->info($message);
|
|
||||||
$c->flash(success => $success);
|
|
||||||
$c->redirect_to('/datetime');
|
|
||||||
} ## end sub do_update
|
|
||||||
|
|
||||||
sub validate_change_datetime {
|
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
my $server = $c->req->json->{ntpserver} // '';
|
||||||
|
|
||||||
#--------------------------------------------------
|
# Strict validation: hostname or IPv4
|
||||||
# Untaint parameters and check for validity
|
unless ($server =~ /^(?=.{1,253}$)([a-zA-Z0-9](?:[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?)*|\d{1,3}(?:\.\d{1,3}){3})$/) {
|
||||||
#--------------------------------------------------
|
return $c->render(json => { success => 0, error => 'Invalid server name or IP' });
|
||||||
my $timezone = $c->param('Timezone');
|
|
||||||
|
|
||||||
if ($timezone =~ /^([\w\-]+\/?[\w\-+]*)$/) {
|
|
||||||
$timezone = $1;
|
|
||||||
} else {
|
|
||||||
$timezone = "US/Eastern";
|
|
||||||
}
|
|
||||||
my $month = $c->param('Month');
|
|
||||||
|
|
||||||
if ($month =~ /^(\d{1,2})$/) {
|
|
||||||
$month = $1;
|
|
||||||
} else {
|
|
||||||
$month = "1";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($month < 1) || ($month > 12)) {
|
my $timeout = 5;
|
||||||
return $c->l('dat_INVALID_MONTH') . " $month. " . $c->l('dat_MONTH_BETWEEN_1_AND_12');
|
my @cmd = ('timeout', $timeout, 'ntpdate', '-q', $server);
|
||||||
}
|
|
||||||
my $day = $c->param('Day');
|
|
||||||
|
|
||||||
if ($day =~ /^(\d{1,2})$/) {
|
# Run ntpdate and capture output
|
||||||
$day = $1;
|
my $output = qx{@cmd 2>&1};
|
||||||
} else {
|
$c->app->log->info($output);
|
||||||
$day = "1";
|
my $exit_code = $? >> 8;
|
||||||
|
|
||||||
|
# Parse for known errors
|
||||||
|
if ($exit_code == 124) {
|
||||||
|
return $c->render(json => { success => 0, error => "Timeout: NTP server did not respond within $timeout seconds" });
|
||||||
|
}
|
||||||
|
if ($output =~ /no server suitable for synchronization found/i) {
|
||||||
|
return $c->render(json => { success => 0, error => "No suitable NTP server found or server unreachable" });
|
||||||
|
}
|
||||||
|
if ($output =~ /Name or service not known|Temporary failure in name resolution/i) {
|
||||||
|
return $c->render(json => { success => 0, error => "DNS resolution failed for $server" });
|
||||||
|
}
|
||||||
|
if ($output =~ /ntpdig: no eligible servers/i) {
|
||||||
|
return $c->render(json => { success => 0, error => "Not a an NTP server" });
|
||||||
|
}
|
||||||
|
if ($output =~ /permission denied/i) {
|
||||||
|
return $c->render(json => { success => 0, error => "Permission denied running ntpdate" });
|
||||||
|
}
|
||||||
|
if ($exit_code != 0) {
|
||||||
|
return $c->render(json => { success => 0, error => "ntpdate failed (exit code $exit_code): $output" });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($day < 1) || ($day > 31)) {
|
# Extract date and time down to seconds from adjust line
|
||||||
return $c->l('dat_INVALID_DAY') . " $day. " . $c->l('dat_BETWEEN_1_AND_31');
|
my ($datetime) = $output =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/m;
|
||||||
}
|
|
||||||
my $year = $c->param('Year');
|
|
||||||
|
|
||||||
if ($year =~ /^(\d{4})$/) {
|
if ($datetime) {
|
||||||
$year = $1;
|
return $c->render(json => { success => 1, time => $datetime });
|
||||||
} else {
|
} else {
|
||||||
$year = "2000";
|
return $c->render(json => { success => 0, error => "Could not parse date/time from NTP server response." });}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($year < 1900) || ($year > 2200)) {
|
1;
|
||||||
return $c->l('dat_INVALID_YEAR') . " $year. " . $c->l('dat_FOUR_DIGIT_YEAR');
|
|
||||||
}
|
|
||||||
my $hour = $c->param('Hour');
|
|
||||||
|
|
||||||
if ($hour =~ /^(\d{1,2})$/) {
|
|
||||||
$hour = $1;
|
|
||||||
} else {
|
|
||||||
$hour = "12";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($hour < 1) || ($hour > 12)) {
|
|
||||||
return $c->l('dat_INVALID_HOUR') . " $hour. " . $c->l('dat_BETWEEN_1_AND_12');
|
|
||||||
}
|
|
||||||
my $minute = $c->param('Minute');
|
|
||||||
|
|
||||||
if ($minute =~ /^(\d{1,2})$/) {
|
|
||||||
$minute = $1;
|
|
||||||
} else {
|
|
||||||
$minute = "0";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($minute < 0) || ($minute > 59)) {
|
|
||||||
return $c->l('datINVALID_MINUTE') . " $minute. " . $c->l('dat_BETWEEN_0_AND_59');
|
|
||||||
}
|
|
||||||
my $second = $c->param('Second');
|
|
||||||
|
|
||||||
if ($second =~ /^(\d{1,2})$/) {
|
|
||||||
$second = $1;
|
|
||||||
} else {
|
|
||||||
$second = "0";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($second < 0) || ($second > 59)) {
|
|
||||||
return $c->l('dat_INVALID_SECOND') . " $second. " . $c->l('dat_BETWEEN_0_AND_59');
|
|
||||||
}
|
|
||||||
my $ampm = $c->param('Ampm');
|
|
||||||
|
|
||||||
if ($ampm =~ /^(AM|PM)$/) {
|
|
||||||
$ampm = $1;
|
|
||||||
} else {
|
|
||||||
$ampm = "AM";
|
|
||||||
}
|
|
||||||
|
|
||||||
# convert to 24 hour time
|
|
||||||
$hour = $hour % 12;
|
|
||||||
|
|
||||||
if ($ampm eq "PM") {
|
|
||||||
$hour = $hour + 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
|
||||||
# Store time zone in configuration database
|
|
||||||
#--------------------------------------------------
|
|
||||||
my $conf = esmith::ConfigDB->open();
|
|
||||||
my $old = $conf->get('UnsavedChanges')->value;
|
|
||||||
my $rec = $conf->get('TimeZone');
|
|
||||||
|
|
||||||
unless ($rec) {
|
|
||||||
$rec = $conf->new_record('TimeZone', undef);
|
|
||||||
}
|
|
||||||
$rec->set_value($timezone);
|
|
||||||
$conf->get('UnsavedChanges')->set_value($old);
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
|
||||||
# Signal event to change time zone, system time
|
|
||||||
# and hardware clock
|
|
||||||
#--------------------------------------------------
|
|
||||||
my $newdate = sprintf "%02d%02d%02d%02d%04d.%02d", $month, $day, $hour, $minute, $year, $second;
|
|
||||||
esmith::util::backgroundCommand(2, "/sbin/e-smith/signal-event", "timezone-update", $newdate);
|
|
||||||
return 'OK';
|
|
||||||
} ## end sub validate_change_datetime
|
|
||||||
|
|
||||||
sub update_ntpserver {
|
|
||||||
my $c = shift;
|
|
||||||
my $ntpserver = shift;
|
|
||||||
my $msg;
|
|
||||||
|
|
||||||
#------------------------------------------------------------
|
|
||||||
# Looks good; go ahead and change the parameters.
|
|
||||||
#------------------------------------------------------------
|
|
||||||
my $old = $cdb->get('UnsavedChanges')->value;
|
|
||||||
my $rec = $cdb->get('ntpd');
|
|
||||||
|
|
||||||
if ($rec) {
|
|
||||||
$rec->set_prop('status', 'enabled');
|
|
||||||
$rec->set_prop('NTPServer', $ntpserver);
|
|
||||||
} else {
|
|
||||||
$rec = $cdb->new_record('ntpd',
|
|
||||||
{ type => 'service', status => 'enabled', SyncToHWClockSupported => 'yes', NTPServer => $ntpserver });
|
|
||||||
}
|
|
||||||
$cdb->get('UnsavedChanges')->set_value($old);
|
|
||||||
$msg = $c->l('dat_SETTINGS_CHANGED');
|
|
||||||
|
|
||||||
if ($ntpserver =~ /^\s*$/) {
|
|
||||||
$rec->set_prop('status', ($rec->prop('SyncToHWClockSupported') || 'yes') eq 'yes' ? 'enabled' : 'disabled');
|
|
||||||
$rec->set_prop('NTPServer', '');
|
|
||||||
$msg = $c->l('dat_INVALID_NTP_SERVER') if ($rec->prop('SyncToHWClockSupported') || 'yes') ne 'yes';
|
|
||||||
} ## end if ($ntpserver =~ /^\s*$/)
|
|
||||||
esmith::util::backgroundCommand(2, "/sbin/e-smith/signal-event", "timeserver-update");
|
|
||||||
return $msg;
|
|
||||||
} ## end sub update_ntpserver
|
|
||||||
|
|
||||||
sub disable_ntp {
|
|
||||||
|
|
||||||
# make sure that the parameters are set for disabled
|
|
||||||
my $old = $cdb->get('UnsavedChanges')->value;
|
|
||||||
my $rec = $cdb->get('ntpd');
|
|
||||||
|
|
||||||
if ($rec) {
|
|
||||||
$rec->set_prop('status', ($rec->prop('SyncToHWClockSupported') || 'yes') eq 'yes' ? 'enabled' : 'disabled');
|
|
||||||
$rec->set_prop('NTPServer', '');
|
|
||||||
} else {
|
|
||||||
$rec = $cdb->new_record('ntpd',
|
|
||||||
{ type => 'service', status => 'enabled', SyncToHWClockSupported => 'yes', NTPServer => '' });
|
|
||||||
}
|
|
||||||
$cdb->get('UnsavedChanges')->set_value($old);
|
|
||||||
} ## end sub disable_ntp
|
|
||||||
|
|
||||||
sub getTimezone {
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
|
||||||
# Figure out time zone by looking first looking at
|
|
||||||
# the configuration database value of TimeZone.
|
|
||||||
# If that is not defined, try and get it from /etc/localtime.
|
|
||||||
# If that doesn't work, default to US/Eastern.
|
|
||||||
#--------------------------------------------------
|
|
||||||
my $localtime;
|
|
||||||
my $timezonedefault = "US/Eastern";
|
|
||||||
|
|
||||||
if (defined $cdb->get('TimeZone')) {
|
|
||||||
$timezonedefault = $cdb->get('TimeZone')->value;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (defined($localtime = readlink '/etc/localtime')) {
|
|
||||||
my $pos = index $localtime, 'zoneinfo/';
|
|
||||||
|
|
||||||
if ($pos > -1) {
|
|
||||||
$timezonedefault = substr $localtime, ($pos + 9);
|
|
||||||
}
|
|
||||||
} ## end if (defined($localtime...))
|
|
||||||
} ## end else [ if (defined $cdb->get(...))]
|
|
||||||
return $timezonedefault;
|
|
||||||
} ## end sub getTimezone
|
|
||||||
|
|
||||||
sub getZone_list {
|
|
||||||
my $c = shift;
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
|
||||||
# Get a sorted list of time zones
|
|
||||||
#--------------------------------------------------
|
|
||||||
$ENV{BASH_ENV} = '';
|
|
||||||
|
|
||||||
if (!open(ZONES, "cd /usr/share/zoneinfo; /usr/bin/find . -type f -or -type l | /bin/grep '^./[A-Z]' |")) {
|
|
||||||
warn($c->l('COULD_NOT_OPEN_TZ_FILE') . $! . '.');
|
|
||||||
return undef;
|
|
||||||
}
|
|
||||||
my $zone;
|
|
||||||
my @zones = ();
|
|
||||||
|
|
||||||
while (defined($zone = <ZONES>)) {
|
|
||||||
chop($zone);
|
|
||||||
$zone =~ s/^.\///;
|
|
||||||
push @zones, $zone;
|
|
||||||
} ## end while (defined($zone = <ZONES>...))
|
|
||||||
close ZONES;
|
|
||||||
my @zt = sort @zones;
|
|
||||||
return \@zt;
|
|
||||||
} ## end sub getZone_list
|
|
||||||
|
|
||||||
sub getMonth_list {
|
|
||||||
my $c = shift;
|
|
||||||
return [
|
|
||||||
[ $c->l('dat_JANUARY') => '1' ],
|
|
||||||
[ $c->l('dat_FEBRUARY') => '2' ],
|
|
||||||
[ $c->l('dat_MARCH') => '3' ],
|
|
||||||
[ $c->l('dat_APRIL') => '4' ],
|
|
||||||
[ $c->l('dat_MAY') => '5' ],
|
|
||||||
[ $c->l('dat_JUNE') => '6' ],
|
|
||||||
[ $c->l('dat_JULY') => '7' ],
|
|
||||||
[ $c->l('dat_AUGUST') => '8' ],
|
|
||||||
[ $c->l('dat_SEPTEMBER') => '9' ],
|
|
||||||
[ $c->l('dat_OCTOBER') => '10' ],
|
|
||||||
[ $c->l('dat_NOVEMBER') => '11' ],
|
|
||||||
[ $c->l('dat_DECEMBER') => '12' ]
|
|
||||||
];
|
|
||||||
} ## end sub getMonth_list
|
|
||||||
1;
|
|
||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Directory;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : User management
|
# heading : User management
|
||||||
# description : Directory
|
# description : Directory
|
||||||
# navigation : 2000 300
|
# navigation : 2000 400
|
||||||
#
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
@@ -12,13 +12,16 @@ use warnings;
|
|||||||
use Mojo::Base 'Mojolicious::Controller';
|
use Mojo::Base 'Mojolicious::Controller';
|
||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
|
use esmith::AccountsDB::UTF8;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
|
||||||
our $db = esmith::ConfigDB->open() || die "Couldn't open config db";
|
our $db;
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
|
$db = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
my %dir_datas = ();
|
my %dir_datas = ();
|
||||||
my $title = $c->l('dir_FORM_TITLE');
|
my $title = $c->l('dir_FORM_TITLE');
|
||||||
my $modul = $c->render_to_string(inline => $c->l('dir_DESCRIPTION'));
|
my $modul = $c->render_to_string(inline => $c->l('dir_DESCRIPTION'));
|
||||||
@@ -36,6 +39,7 @@ sub main {
|
|||||||
sub do_update {
|
sub do_update {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
|
$db = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
my $access = $c->param('access');
|
my $access = $c->param('access');
|
||||||
my $department = $c->param('department');
|
my $department = $c->param('department');
|
||||||
my $company = $c->param('company');
|
my $company = $c->param('company');
|
||||||
@@ -52,7 +56,7 @@ sub do_update {
|
|||||||
$db->get('ldap')->set_prop('defaultPhoneNumber', $phonenumber);
|
$db->get('ldap')->set_prop('defaultPhoneNumber', $phonenumber);
|
||||||
|
|
||||||
if ($existing eq 'update') {
|
if ($existing eq 'update') {
|
||||||
my $ac = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
my $ac = esmith::AccountsDB::UTF8->open() || die "Couldn't open accounts db";
|
||||||
my @users = $ac->users();
|
my @users = $ac->users();
|
||||||
|
|
||||||
foreach my $user (@users) {
|
foreach my $user (@users) {
|
||||||
@@ -81,7 +85,7 @@ sub get_ldap_base {
|
|||||||
sub get_value {
|
sub get_value {
|
||||||
my $fm = shift;
|
my $fm = shift;
|
||||||
my $item = shift;
|
my $item = shift;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
my $record = $db->get($item);
|
my $record = $db->get($item);
|
||||||
if ($record) {
|
if ($record) {
|
||||||
return $record->value();
|
return $record->value();
|
||||||
@@ -90,4 +94,4 @@ sub get_value {
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
1;
|
1;
|
||||||
@@ -13,16 +13,10 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
use esmith::DomainsDB::UTF8;
|
||||||
|
use esmith::AccountsDB::UTF8;
|
||||||
|
|
||||||
#use Data::Dumper;
|
our ($ddb,$cdb,$adb);
|
||||||
#use esmith::FormMagick::Panel::domains;
|
|
||||||
use esmith::DomainsDB;
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
|
|
||||||
#use URI::Escape;
|
|
||||||
my ($ddb,$cdb,$adb);
|
|
||||||
#our $cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
|
||||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
our $REGEXP_DOMAIN = qq([a-zA-Z0-9\-\.]+);
|
our $REGEXP_DOMAIN = qq([a-zA-Z0-9\-\.]+);
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
@@ -30,9 +24,9 @@ sub main {
|
|||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my %dom_datas = ();
|
my %dom_datas = ();
|
||||||
my $title = $c->l('dom_FORM_TITLE');
|
my $title = $c->l('dom_FORM_TITLE');
|
||||||
$ddb = esmith::DomainsDB->open || die "Couldn't open domains db";
|
$ddb = esmith::DomainsDB::UTF8->open || die "Couldn't open domains db";
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open configuration db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$dom_datas{trt} = 'LST';
|
$dom_datas{trt} = 'LST';
|
||||||
my @domains;
|
my @domains;
|
||||||
|
|
||||||
@@ -57,9 +51,9 @@ sub do_display {
|
|||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my $trt = $c->param('trt');
|
my $trt = $c->param('trt');
|
||||||
my $domain = $c->param('Domain') || '';
|
my $domain = $c->param('Domain') || '';
|
||||||
$ddb = esmith::DomainsDB->open || die "Couldn't open domains db";
|
$ddb = esmith::DomainsDB::UTF8->open || die "Couldn't open domains db";
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open configuration db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
|
|
||||||
#$trt = 'DEL' if ( $rt eq 'domaindel1' );
|
#$trt = 'DEL' if ( $rt eq 'domaindel1' );
|
||||||
#$trt = 'UPD' if ( $rt eq 'domainupd1' );
|
#$trt = 'UPD' if ( $rt eq 'domainupd1' );
|
||||||
@@ -127,9 +121,9 @@ sub do_update {
|
|||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my $trt = $c->param('trt');
|
my $trt = $c->param('trt');
|
||||||
$ddb = esmith::DomainsDB->open || die "Couldn't open domains db";
|
$ddb = esmith::DomainsDB::UTF8->open || die "Couldn't open domains db";
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open configuration db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
my %dom_datas = ();
|
my %dom_datas = ();
|
||||||
my ($res, $result) = '';
|
my ($res, $result) = '';
|
||||||
|
|
||||||
@@ -246,6 +240,7 @@ sub create_modify_domain {
|
|||||||
. ' Ctl'
|
. ' Ctl'
|
||||||
);
|
);
|
||||||
} ## end unless ($domain)
|
} ## end unless ($domain)
|
||||||
|
$ddb = esmith::DomainsDB::UTF8->open || die "Couldn't open domains db";
|
||||||
my $rec = $ddb->get($domain);
|
my $rec = $ddb->get($domain);
|
||||||
|
|
||||||
if ($rec and $action eq 'create') {
|
if ($rec and $action eq 'create') {
|
||||||
@@ -375,6 +370,7 @@ sub nameserver_options_list {
|
|||||||
|
|
||||||
sub get_nameserver_value {
|
sub get_nameserver_value {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
$ddb = esmith::DomainsDB::UTF8->open || die "Couldn't open domains db";
|
||||||
my $domain = $c->param('Domain') || undef;
|
my $domain = $c->param('Domain') || undef;
|
||||||
return ($ddb->get_prop($domain, 'Nameservers') || 'internet');
|
return ($ddb->get_prop($domain, 'Nameservers') || 'internet');
|
||||||
} ## end sub get_nameserver_value
|
} ## end sub get_nameserver_value
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -14,21 +14,18 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
use esmith::AccountsDB::UTF8;
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
|
|
||||||
#use Data::Dumper;
|
our ($cdb,$adb);
|
||||||
#use esmith::FormMagick::Panel::groups;
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
#our $cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
|
||||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
my ($cdb,$adb);
|
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my %grp_datas = ();
|
my %grp_datas = ();
|
||||||
my $title = $c->l('grp_FORM_TITLE');
|
my $title = $c->l('grp_FORM_TITLE');
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open configuration db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$grp_datas{trt} = 'LST';
|
$grp_datas{trt} = 'LST';
|
||||||
my @groups;
|
my @groups;
|
||||||
|
|
||||||
@@ -47,8 +44,8 @@ sub do_display {
|
|||||||
my $group = $c->param('group');
|
my $group = $c->param('group');
|
||||||
my %grp_datas = ();
|
my %grp_datas = ();
|
||||||
my $title = $c->l('grp_FORM_TITLE');
|
my $title = $c->l('grp_FORM_TITLE');
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open configuration db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$grp_datas{'trt'} = $trt;
|
$grp_datas{'trt'} = $trt;
|
||||||
|
|
||||||
if ($trt eq 'ADD') {
|
if ($trt eq 'ADD') {
|
||||||
@@ -104,8 +101,8 @@ sub do_update {
|
|||||||
my $title = $c->l('grp_FORM_TITLE');
|
my $title = $c->l('grp_FORM_TITLE');
|
||||||
my ($res, $result) = '';
|
my ($res, $result) = '';
|
||||||
my %grp_datas = ();
|
my %grp_datas = ();
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open configuration db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$grp_datas{'trt'} = $trt;
|
$grp_datas{'trt'} = $trt;
|
||||||
$grp_datas{'group'} = $groupName;
|
$grp_datas{'group'} = $groupName;
|
||||||
my @members = ();
|
my @members = ();
|
||||||
@@ -135,7 +132,7 @@ sub do_update {
|
|||||||
# Untaint groupName before use in system()
|
# Untaint groupName before use in system()
|
||||||
($groupName) = ($groupName =~ /^([a-z][\-\_\.a-z0-9]*)$/);
|
($groupName) = ($groupName =~ /^([a-z][\-\_\.a-z0-9]*)$/);
|
||||||
system("/sbin/e-smith/signal-event", "group-create", "$groupName") == 0
|
system("/sbin/e-smith/signal-event", "group-create", "$groupName") == 0
|
||||||
or $result .= $c->l('qgp_CREATE_ERROR') . "\n";
|
or $result .= $c->l('grp_CREATE_ERROR') . "\n";
|
||||||
} ## end if (!$result)
|
} ## end if (!$result)
|
||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
@@ -164,7 +161,7 @@ sub do_update {
|
|||||||
# Untaint groupName before use in system()
|
# Untaint groupName before use in system()
|
||||||
($groupName) = ($groupName =~ /^([a-z][\-\_\.a-z0-9]*)$/);
|
($groupName) = ($groupName =~ /^([a-z][\-\_\.a-z0-9]*)$/);
|
||||||
system("/sbin/e-smith/signal-event", "group-modify", "$groupName") == 0
|
system("/sbin/e-smith/signal-event", "group-modify", "$groupName") == 0
|
||||||
or $result .= $c->l('qgp_MODIFY_ERROR') . "\n";
|
or $result .= $c->l('grp_MODIFY_ERROR') . "\n";
|
||||||
} ## end if (!$result)
|
} ## end if (!$result)
|
||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
@@ -417,4 +414,4 @@ sub validate_description {
|
|||||||
return ($c->l('FM_ERR_UNEXPECTED_DESC'));
|
return ($c->l('FM_ERR_UNEXPECTED_DESC'));
|
||||||
}
|
}
|
||||||
} ## end sub validate_description
|
} ## end sub validate_description
|
||||||
1
|
1
|
||||||
@@ -14,22 +14,14 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
|
||||||
#use Data::Dumper;
|
|
||||||
#use esmith::FormMagick::Panel::hostentries;
|
|
||||||
use esmith::DomainsDB;
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
use esmith::HostsDB;
|
|
||||||
use esmith::NetworksDB;
|
|
||||||
use HTML::Entities;
|
use HTML::Entities;
|
||||||
use Net::IPv4Addr qw(ipv4_in_network);
|
use Net::IPv4Addr qw(ipv4_in_network);
|
||||||
|
use esmith::DomainsDB::UTF8;
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
|
use esmith::HostsDB::UTF8;
|
||||||
|
use esmith::NetworksDB::UTF8;
|
||||||
|
|
||||||
#use URI::Escape;
|
our ($ddb,$cdb,$hdb,$ndb);
|
||||||
#our $ddb = esmith::DomainsDB->open || die "Couldn't open hostentries db";
|
|
||||||
#our $cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
|
||||||
#our $hdb = esmith::HostsDB->open || die "Couldn't open hosts db";
|
|
||||||
#our $ndb = esmith::NetworksDB->open || die "Couldn't open networks db";
|
|
||||||
my ($ddb,$cdb,$hdb,$ndb);
|
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
@@ -37,10 +29,9 @@ sub main {
|
|||||||
my %hos_datas = ();
|
my %hos_datas = ();
|
||||||
my $title = $c->l('hos_FORM_TITLE');
|
my $title = $c->l('hos_FORM_TITLE');
|
||||||
my $notif = '';
|
my $notif = '';
|
||||||
#my $ddb = esmith::DomainsDB->open || die "Couldn't open hostentries db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open configuration db";
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$hdb = esmith::HostsDB::UTF8->open || die "Couldn't open hosts db";
|
||||||
$hdb = esmith::HostsDB->open || die "Couldn't open hosts db";
|
$ndb = esmith::NetworksDB::UTF8->open || die "Couldn't open networks db";
|
||||||
$ndb = esmith::NetworksDB->open || die "Couldn't open networks db";
|
|
||||||
$hos_datas{trt} = 'LIST';
|
$hos_datas{trt} = 'LIST';
|
||||||
my %dom_hosts = ();
|
my %dom_hosts = ();
|
||||||
|
|
||||||
@@ -73,9 +64,9 @@ sub do_display {
|
|||||||
$trt = 'LST' if ($trt ne 'DEL' && $trt ne 'UPD' && $trt ne 'ADD');
|
$trt = 'LST' if ($trt ne 'DEL' && $trt ne 'UPD' && $trt ne 'ADD');
|
||||||
my %hos_datas = ();
|
my %hos_datas = ();
|
||||||
my $title = $c->l('hos_FORM_TITLE');
|
my $title = $c->l('hos_FORM_TITLE');
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open configuration db";
|
||||||
$hdb = esmith::HostsDB->open || die "Couldn't open hosts db";
|
$hdb = esmith::HostsDB::UTF8->open || die "Couldn't open hosts db";
|
||||||
$ndb = esmith::NetworksDB->open || die "Couldn't open networks db";
|
$ndb = esmith::NetworksDB::UTF8->open || die "Couldn't open networks db";
|
||||||
my $notif = '';
|
my $notif = '';
|
||||||
$hos_datas{'trt'} = $trt;
|
$hos_datas{'trt'} = $trt;
|
||||||
|
|
||||||
@@ -120,9 +111,9 @@ sub do_update {
|
|||||||
my $trt = ($c->param('trt') || 'LIST');
|
my $trt = ($c->param('trt') || 'LIST');
|
||||||
my %hos_datas = ();
|
my %hos_datas = ();
|
||||||
my $title = $c->l('hos_FORM_TITLE');
|
my $title = $c->l('hos_FORM_TITLE');
|
||||||
$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open configuration db";
|
||||||
$hdb = esmith::HostsDB->open || die "Couldn't open hosts db";
|
$hdb = esmith::HostsDB::UTF8->open || die "Couldn't open hosts db";
|
||||||
$ndb = esmith::NetworksDB->open || die "Couldn't open networks db";
|
$ndb = esmith::NetworksDB::UTF8->open || die "Couldn't open networks db";
|
||||||
my $notif = '';
|
my $notif = '';
|
||||||
my $result = '';
|
my $result = '';
|
||||||
$hos_datas{'name'} = lc $c->param('Name');
|
$hos_datas{'name'} = lc $c->param('Name');
|
||||||
@@ -379,10 +370,10 @@ sub delete_hostentry {
|
|||||||
} ## end sub delete_hostentry
|
} ## end sub delete_hostentry
|
||||||
|
|
||||||
sub domains_list {
|
sub domains_list {
|
||||||
my $d = esmith::DomainsDB->open_ro() or die "Couldn't open DomainsDB";
|
$ddb = esmith::DomainsDB::UTF8->open_ro() or die "Couldn't open DomainsDB";
|
||||||
my @domains;
|
my @domains;
|
||||||
|
|
||||||
for ($d->domains) {
|
for ($ddb->domains) {
|
||||||
my $ns = $_->prop("Nameservers") || 'localhost';
|
my $ns = $_->prop("Nameservers") || 'localhost';
|
||||||
push @domains, $_->key if ($ns eq 'localhost');
|
push @domains, $_->key if ($ns eq 'localhost');
|
||||||
}
|
}
|
||||||
@@ -516,7 +507,7 @@ sub must_be_local {
|
|||||||
my $localip = shift;
|
my $localip = shift;
|
||||||
|
|
||||||
# Make sure that the IP is indeed local.
|
# Make sure that the IP is indeed local.
|
||||||
#my $ndb = esmith::NetworksDB->open_ro;
|
#$ndb = esmith::NetworksDB::UTF8->open_ro;
|
||||||
my @local_list = $ndb->local_access_spec;
|
my @local_list = $ndb->local_access_spec;
|
||||||
|
|
||||||
foreach my $spec (@local_list) {
|
foreach my $spec (@local_list) {
|
||||||
|
|||||||
@@ -14,12 +14,10 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw( theme_list init_session validate_password );
|
use SrvMngr qw( theme_list init_session validate_password );
|
||||||
use esmith::AccountsDB;
|
use esmith::AccountsDB::UTF8;
|
||||||
use esmith::ConfigDB;
|
use esmith::ConfigDB::UTF8;
|
||||||
use esmith::DomainsDB;
|
use esmith::DomainsDB::UTF8;
|
||||||
|
|
||||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
#our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
|
||||||
my ($adb,$cdb);
|
my ($adb,$cdb);
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
@@ -27,9 +25,9 @@ sub main {
|
|||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my %iba_datas = ();
|
my %iba_datas = ();
|
||||||
my $title = $c->l('iba_FORM_TITLE');
|
my $title = $c->l('iba_FORM_TITLE');
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
$iba_datas{'trt'} = 'LIST';
|
$iba_datas{'trt'} = 'LIST';
|
||||||
my @ibays;
|
my @ibays;
|
||||||
|
|
||||||
if ($adb) {
|
if ($adb) {
|
||||||
@@ -44,8 +42,8 @@ sub do_display {
|
|||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my $trt = ($c->param('trt') || 'LIST');
|
my $trt = ($c->param('trt') || 'LIST');
|
||||||
my $ibay = $c->param('ibay') || '';
|
my $ibay = $c->param('ibay') || '';
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
|
|
||||||
#$trt = 'DEL' if ( $ibay );
|
#$trt = 'DEL' if ( $ibay );
|
||||||
#$trt = 'ADD' if ( $rt eq 'ibayadd' );
|
#$trt = 'ADD' if ( $rt eq 'ibayadd' );
|
||||||
@@ -99,7 +97,7 @@ sub do_display {
|
|||||||
|
|
||||||
if ($trt eq 'LIST') {
|
if ($trt eq 'LIST') {
|
||||||
my @ibays;
|
my @ibays;
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
|
|
||||||
if ($adb) {
|
if ($adb) {
|
||||||
@ibays = $adb->ibays();
|
@ibays = $adb->ibays();
|
||||||
@@ -120,8 +118,8 @@ sub do_update {
|
|||||||
$iba_datas{'trt'} = $trt;
|
$iba_datas{'trt'} = $trt;
|
||||||
my $result = '';
|
my $result = '';
|
||||||
my $res;
|
my $res;
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
|
|
||||||
if ($trt eq 'ADD') {
|
if ($trt eq 'ADD') {
|
||||||
my $name = ($c->param('ibay') || '');
|
my $name = ($c->param('ibay') || '');
|
||||||
@@ -306,7 +304,7 @@ sub print_vhost_message {
|
|||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $name = $c->param('ibay');
|
my $name = $c->param('ibay');
|
||||||
my $result = '';
|
my $result = '';
|
||||||
my $domaindb = esmith::DomainsDB->open();
|
my $domaindb = esmith::DomainsDB::UTF8->open();
|
||||||
my @domains = $domaindb->get_all_by_prop(Content => $name);
|
my @domains = $domaindb->get_all_by_prop(Content => $name);
|
||||||
my $vhostListItems = join "\n", (map ($_->key . " " . $_->prop('Description'), @domains));
|
my $vhostListItems = join "\n", (map ($_->key . " " . $_->prop('Description'), @domains));
|
||||||
|
|
||||||
@@ -328,7 +326,7 @@ sub remove_ibay {
|
|||||||
if (my $acct = $adb->get($name)) {
|
if (my $acct = $adb->get($name)) {
|
||||||
if ($acct->prop('type') eq 'ibay') {
|
if ($acct->prop('type') eq 'ibay') {
|
||||||
$acct->set_prop('type', 'ibay-deleted');
|
$acct->set_prop('type', 'ibay-deleted');
|
||||||
my $domains_db = esmith::DomainsDB->open();
|
my $domains_db = esmith::DomainsDB::UTF8->open();
|
||||||
my @domains = $domains_db->get_all_by_prop(Content => $name);
|
my @domains = $domains_db->get_all_by_prop(Content => $name);
|
||||||
|
|
||||||
foreach my $d (@domains) {
|
foreach my $d (@domains) {
|
||||||
|
|||||||
@@ -5,6 +5,12 @@ package SrvMngr::Controller::Localnetworks;
|
|||||||
# description : Local networks
|
# description : Local networks
|
||||||
# navigation : 6000 500
|
# navigation : 6000 500
|
||||||
#
|
#
|
||||||
|
#$if_admin->get('/localnetworks')->to('localnetworks#main')->name('localnetworks');
|
||||||
|
#$if_admin->post('/localnetworks')->to('localnetworks#do_display')->name('localnetworks');
|
||||||
|
#$if_admin->post('/localnetworksa')->to('localnetworks#do_display')->name('localnetworksadd');
|
||||||
|
#$if_admin->post('/localnetworksb')->to('localnetworks#do_display')->name('localnetworksadd1');
|
||||||
|
#$if_admin->get('/localnetworksd')->to('localnetworks#do_display')->name('localnetworksdel');
|
||||||
|
#$if_admin->post('/localnetworkse')->to('localnetworks#do_display')->name('localnetworksdel1');
|
||||||
# routes : end
|
# routes : end
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
use strict;
|
use strict;
|
||||||
@@ -13,13 +19,12 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session subnet_mask get_reg_mask ip_number);
|
use SrvMngr qw(theme_list init_session subnet_mask get_reg_mask ip_number);
|
||||||
|
|
||||||
#use Data::Dumper;
|
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
use esmith::HostsDB;
|
use esmith::HostsDB::UTF8;
|
||||||
#my $network_db = esmith::NetworksDB->open() || die("Couldn't open networks db");
|
use esmith::NetworksDB::UTF8;
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
my $ret = "OK";
|
my $ret = "OK";
|
||||||
my ($network_db);
|
our ($network_db,$config_db);
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
@@ -27,7 +32,7 @@ sub main {
|
|||||||
my %ln_datas = ();
|
my %ln_datas = ();
|
||||||
$ln_datas{return} = "";
|
$ln_datas{return} = "";
|
||||||
my $title = $c->l('ln_LOCAL NETWORKS');
|
my $title = $c->l('ln_LOCAL NETWORKS');
|
||||||
$network_db = esmith::NetworksDB->open() || die("Couldn't open networks db");
|
$network_db = esmith::NetworksDB::UTF8->open() || die("Couldn't open networks db");
|
||||||
my $modul = '';
|
my $modul = '';
|
||||||
$ln_datas{trt} = 'LIST';
|
$ln_datas{trt} = 'LIST';
|
||||||
my @localnetworks;
|
my @localnetworks;
|
||||||
@@ -49,11 +54,12 @@ sub do_display {
|
|||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my $trt = ($c->param('trt') || 'LIST');
|
my $trt = ($c->param('trt') || 'LIST');
|
||||||
$network_db = esmith::NetworksDB->open() || die("Couldn't open networks db");
|
$network_db = esmith::NetworksDB::UTF8->open() || die("Couldn't open networks db");
|
||||||
$trt = 'DEL' if ($rt eq 'localnetworksdel');
|
$trt = 'DEL' if ($rt eq 'localnetworksdel');
|
||||||
$trt = 'ADD' if ($rt eq 'localnetworksadd');
|
$trt = 'ADD' if ($rt eq 'localnetworksadd');
|
||||||
$trt = 'ADD1' if ($rt eq 'localnetworksadd1');
|
$trt = 'ADD1' if ($rt eq 'localnetworksadd1');
|
||||||
$trt = 'DEL1' if ($rt eq 'localnetworksdel1');
|
$trt = 'DEL1' if ($rt eq 'localnetworksdel1');
|
||||||
|
$c->app->log->info("Localnetworks:trt:$trt");
|
||||||
my %ln_datas = ();
|
my %ln_datas = ();
|
||||||
my $title = $c->l('ln_LOCAL NETWORKS');
|
my $title = $c->l('ln_LOCAL NETWORKS');
|
||||||
my $modul = '';
|
my $modul = '';
|
||||||
@@ -68,32 +74,37 @@ sub do_display {
|
|||||||
|
|
||||||
#Add a network - called after new network details filled in
|
#Add a network - called after new network details filled in
|
||||||
my %ret = add_network($c);
|
my %ret = add_network($c);
|
||||||
|
$network_db = esmith::NetworksDB::UTF8->open();
|
||||||
|
|
||||||
#Return to list page if success
|
#Return to list page if success
|
||||||
if ((index($ret{ret}, "SUCCESS") != -1)) {
|
if ((index($ret{ret}, "SUCCESS") != -1)) {
|
||||||
$trt = "LIST";
|
$trt = "LIST";
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
#Error - return to Add page
|
#Error - return to Add page
|
||||||
$trt = "ADD";
|
$trt = "ADD";
|
||||||
}
|
}
|
||||||
$network_db = esmith::NetworksDB->open() || die("Failed to open Networkdb-3"); #Refresh the network DB
|
#$network_db = esmith::NetworksDB::UTF8->open() || die("Failed to open Networkdb-3"); #Refresh the network DB
|
||||||
$c->stash(ret => \%ret); #stash it away for the template
|
$c->stash(ret => \%ret); #stash it away for the template
|
||||||
} ## end if ($trt eq 'ADD1')
|
} ## end if ($trt eq 'ADD1')
|
||||||
|
|
||||||
if ($trt eq 'DEL1') {
|
if ($trt eq 'DEL1') {
|
||||||
|
|
||||||
#After Remove clicked on Delete network panel
|
#After Remove clicked on Delete network panel
|
||||||
$network_db = esmith::NetworksDB->open() || die("Failed to open Networkdb-1");
|
#$network_db = esmith::NetworksDB::UTF8->open() || die("Failed to open Networkdb-1");
|
||||||
my $localnetwork = $c->param("localnetwork");
|
my $localnetwork = $c->param("localnetwork");
|
||||||
my $delete_hosts = $c->param("deletehost") || "1"; #default to deleting them.
|
my $delete_hosts = $c->param("deletehost") || "1"; #default to deleting them.
|
||||||
my $rec = $network_db->get($localnetwork) || die("Failed to find network on db:$localnetwork");
|
$c->app->log->info("Localnetworks:deleting $localnetwork");
|
||||||
|
my ($rec,%ret);
|
||||||
if ($rec and $rec->prop('type') eq 'localnetwork') {
|
if ($rec = $network_db->get($localnetwork)){ #|| die("Failed to find network on db:$localnetwork");
|
||||||
$ln_datas{localnetwork} = $localnetwork;
|
if ($rec and $rec->prop('type') eq 'localnetwork') {
|
||||||
}
|
$ln_datas{localnetwork} = $localnetwork;
|
||||||
my %ret = remove_network($localnetwork, $delete_hosts);
|
}
|
||||||
$network_db = esmith::NetworksDB->open() || die("Failed to open Networkdb-2"); #Refresh the network DB
|
%ret = $c->remove_network($localnetwork, $delete_hosts);
|
||||||
|
} else {
|
||||||
|
$c->app->log->info("Local network: delete failed to find network in db: $localnetwork");
|
||||||
|
%ret = (ret => "");
|
||||||
|
}
|
||||||
|
#$network_db = esmith::NetworksDB::UTF8->open() || die("Failed to open Networkdb-2"); #Refresh the network DB
|
||||||
my @localnetworks;
|
my @localnetworks;
|
||||||
|
|
||||||
if ($network_db) {
|
if ($network_db) {
|
||||||
@@ -101,8 +112,10 @@ sub do_display {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Load up ln_datas with values need by template
|
# Load up ln_datas with values need by template
|
||||||
$ln_datas{subnet} = $rec->prop('Mask');
|
if ($rec){
|
||||||
$ln_datas{router} = $rec->prop('Router');
|
$ln_datas{subnet} = $rec->prop('Mask');
|
||||||
|
$ln_datas{router} = $rec->prop('Router');
|
||||||
|
}
|
||||||
$c->stash(ln_datas => \%ln_datas, localnetworks => \@localnetworks, ret => \%ret);
|
$c->stash(ln_datas => \%ln_datas, localnetworks => \@localnetworks, ret => \%ret);
|
||||||
} ## end if ($trt eq 'DEL1')
|
} ## end if ($trt eq 'DEL1')
|
||||||
|
|
||||||
@@ -110,14 +123,20 @@ sub do_display {
|
|||||||
|
|
||||||
#Initial delete panel requiring confirmation
|
#Initial delete panel requiring confirmation
|
||||||
my $localnetwork = $c->param("localnetwork") || '';
|
my $localnetwork = $c->param("localnetwork") || '';
|
||||||
|
my ($rec,%ret);
|
||||||
$c->stash(localnetwork => $localnetwork);
|
$c->stash(localnetwork => $localnetwork);
|
||||||
my $rec = $network_db->get($localnetwork) || die("Failed to get local network in db::$localnetwork");
|
if ($rec = $network_db->get($localnetwork)){
|
||||||
my $subnet = $rec->prop('Mask');
|
my $subnet = $rec->prop('Mask');
|
||||||
$ln_datas{subnet} = $subnet;
|
$ln_datas{subnet} = $subnet;
|
||||||
$ln_datas{router} = $rec->prop('Router');
|
$ln_datas{router} = $rec->prop('Router');
|
||||||
my $numhosts = hosts_on_network($localnetwork, $subnet);
|
my $numhosts =$c->hosts_on_network($localnetwork, $subnet);
|
||||||
$ln_datas{localnetwork} = $localnetwork;
|
$ln_datas{localnetwork} = $localnetwork;
|
||||||
$ln_datas{deletehosts} = $numhosts > 0 ? 1 : 0;
|
$ln_datas{deletehosts} = $numhosts > 0 ? 1 : 0;
|
||||||
|
} else {
|
||||||
|
$c->app->log->info("Local network:Initial Failed to find network in Db: $localnetwork");
|
||||||
|
$c->flash('error',$c->l('ln_Failed to find network in Db'));
|
||||||
|
$trt = 'LIST';
|
||||||
|
}
|
||||||
} ## end if ($trt eq 'DEL')
|
} ## end if ($trt eq 'DEL')
|
||||||
|
|
||||||
if ($trt eq 'LIST') {
|
if ($trt eq 'LIST') {
|
||||||
@@ -137,8 +156,9 @@ sub do_display {
|
|||||||
} ## end sub do_display
|
} ## end sub do_display
|
||||||
|
|
||||||
sub remove_network {
|
sub remove_network {
|
||||||
|
my $c = shift;
|
||||||
my $network = shift;
|
my $network = shift;
|
||||||
$network_db = esmith::NetworksDB->open();
|
$network_db = esmith::NetworksDB::UTF8->open();
|
||||||
my $record = $network_db->get($network);
|
my $record = $network_db->get($network);
|
||||||
my $delete_hosts = shift;
|
my $delete_hosts = shift;
|
||||||
|
|
||||||
@@ -153,7 +173,7 @@ sub remove_network {
|
|||||||
|
|
||||||
if (system("/sbin/e-smith/signal-event", "network-delete", $network) == 0) {
|
if (system("/sbin/e-smith/signal-event", "network-delete", $network) == 0) {
|
||||||
if ($delete_hosts) {
|
if ($delete_hosts) {
|
||||||
my @hosts_to_delete = hosts_on_network($network, $subnet);
|
my @hosts_to_delete = $c->hosts_on_network($network, $subnet);
|
||||||
|
|
||||||
foreach my $host (@hosts_to_delete) {
|
foreach my $host (@hosts_to_delete) {
|
||||||
$host->delete;
|
$host->delete;
|
||||||
@@ -170,11 +190,12 @@ sub remove_network {
|
|||||||
} ## end sub remove_network
|
} ## end sub remove_network
|
||||||
|
|
||||||
sub hosts_on_network {
|
sub hosts_on_network {
|
||||||
|
my $c = shift;
|
||||||
my $network = shift;
|
my $network = shift;
|
||||||
my $netmask = shift;
|
my $netmask = shift;
|
||||||
die if not $network and $netmask;
|
die if not $network and $netmask;
|
||||||
my $cidr = "$network/$netmask";
|
my $cidr = "$network/$netmask";
|
||||||
my $hosts = esmith::HostsDB->open() || die("Couldn't open hosts db");
|
my $hosts = esmith::HostsDB::UTF8->open() || die("Couldn't open hosts db");
|
||||||
my @localhosts = grep { $_->prop('HostType') eq 'Local' } $hosts->hosts;
|
my @localhosts = grep { $_->prop('HostType') eq 'Local' } $hosts->hosts;
|
||||||
my @hosts_on_network = ();
|
my @hosts_on_network = ();
|
||||||
|
|
||||||
@@ -192,24 +213,27 @@ sub hosts_on_network {
|
|||||||
} ## end sub hosts_on_network
|
} ## end sub hosts_on_network
|
||||||
|
|
||||||
sub add_network {
|
sub add_network {
|
||||||
my ($fm) = @_;
|
my ($c) = @_;
|
||||||
my $networkAddress = $fm->param('networkAddress');
|
my $networkAddress = $c->param('networkAddress');
|
||||||
my $networkMask = $fm->param('networkMask');
|
my $networkMask = $c->param('networkMask');
|
||||||
my $networkRouter = $fm->param('networkRouter');
|
my $networkRouter = $c->param('networkRouter');
|
||||||
|
|
||||||
|
#Start by checking that the network does not already exist
|
||||||
|
|
||||||
|
|
||||||
#Validate Ips and subnet mask
|
#Validate Ips and subnet mask
|
||||||
my $res = ip_number($fm, $networkAddress);
|
my $res = ip_number($c, $networkAddress);
|
||||||
return (ret => 'ln_INVALID_IP_ADDRESS', vars => "Network Address $res") unless $res eq 'OK';
|
return (ret => 'ln_INVALID_IP_ADDRESS', vars => "Network Address $res") unless $res eq 'OK';
|
||||||
$res = subnet_mask($networkMask);
|
$res = subnet_mask($networkMask);
|
||||||
return (ret => 'ln_INVALID_SUBNET_MASK', vars => "$networkMask") unless $res eq 'OK';
|
return (ret => 'ln_INVALID_SUBNET_MASK', vars => "$networkMask") unless $res eq 'OK';
|
||||||
$res = ip_number($fm, $networkRouter);
|
$res = ip_number($c, $networkRouter);
|
||||||
return (ret => 'ln_INVALID_IP_ADDRESS', vars => "Routeur Address $res") unless $res eq 'OK';
|
return (ret => 'ln_INVALID_IP_ADDRESS', vars => "Routeur Address $res") unless $res eq 'OK';
|
||||||
|
|
||||||
# we transform bit mask to regular mask
|
# we transform bit mask to regular mask
|
||||||
$networkMask = get_reg_mask($networkAddress, $networkMask);
|
$networkMask = get_reg_mask($networkAddress, $networkMask);
|
||||||
my $network_db = esmith::NetworksDB->open()
|
my $network_db = esmith::NetworksDB::UTF8->open()
|
||||||
|| esmith::NetworksDB->create();
|
|| esmith::NetworksDB::UTF8->create();
|
||||||
my $config_db = esmith::ConfigDB->open();
|
my $config_db = esmith::ConfigDB::UTF8->open();
|
||||||
my $localIP = $config_db->get('LocalIP');
|
my $localIP = $config_db->get('LocalIP');
|
||||||
my $localNetmask = $config_db->get('LocalNetmask');
|
my $localNetmask = $config_db->get('LocalNetmask');
|
||||||
my ($localNetwork, $localBroadcast)
|
my ($localNetwork, $localBroadcast)
|
||||||
@@ -222,31 +246,38 @@ sub add_network {
|
|||||||
# in the form itself, but it just seemed too fiddly to do that
|
# in the form itself, but it just seemed too fiddly to do that
|
||||||
# at the moment. -- Skud 2002-04-11
|
# at the moment. -- Skud 2002-04-11
|
||||||
# I agree --bjr 2020-04-18
|
# I agree --bjr 2020-04-18
|
||||||
if ($routerNetwork ne $localNetwork) {
|
|
||||||
return (ret => 'ln_NOT_ACCESSIBLE_FROM_LOCAL_NETWORK');
|
|
||||||
}
|
|
||||||
my ($network, $broadcast) = esmith::util::computeNetworkAndBroadcast($networkAddress, $networkMask);
|
my ($network, $broadcast) = esmith::util::computeNetworkAndBroadcast($networkAddress, $networkMask);
|
||||||
|
|
||||||
|
if ($routerNetwork ne $localNetwork) {
|
||||||
|
return (ret => 'ln_NOT_ACCESSIBLE_FROM_LOCAL_NETWORK', vars => "$network,$networkMask,$networkRouter");
|
||||||
|
}
|
||||||
|
|
||||||
if ($network eq $localNetwork) {
|
if ($network eq $localNetwork) {
|
||||||
return (ret => 'ln_NETWORK_ALREADY_LOCAL');
|
return (ret => 'ln_NETWORK_ALREADY_LOCAL', vars => "$network,$networkMask,$networkRouter");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($network_db->get($network)) {
|
if ($network_db->get($network)) {
|
||||||
return (ret => 'ln_NETWORK_ALREADY_ADDED');
|
return (ret => 'ln_NETWORK_ALREADY_ADDED', vars => "$network,$networkMask,$networkRouter");
|
||||||
}
|
}
|
||||||
$network_db->new_record(
|
$res = $network_db->new_record(
|
||||||
$network,
|
$network,
|
||||||
{ Mask => $networkMask,
|
{ Mask => $networkMask,
|
||||||
Router => $networkRouter,
|
Router => $networkRouter,
|
||||||
type => 'network',
|
type => 'network',
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
if (! $res) {
|
||||||
# Untaint $network before use in system()
|
#Record already existed
|
||||||
$network =~ /(.+)/;
|
$c->app->log->info("Local Network:Network already exists:$network");
|
||||||
$network = $1;
|
#return success message
|
||||||
system("/sbin/e-smith/signal-event", "network-create", $network) == 0
|
} else {
|
||||||
or (return (ret => 'ln_ERROR_CREATING_NETWORK'));
|
#Only call underlying batch if new record created
|
||||||
|
# Untaint $network before use in system()
|
||||||
|
$network =~ /(.+)/;
|
||||||
|
$network = $1;
|
||||||
|
system("/sbin/e-smith/signal-event", "network-create", $network) == 0
|
||||||
|
or (return (ret => 'ln_ERROR_CREATING_NETWORK', vars => "$network,$networkMask,$networkRouter"));
|
||||||
|
}
|
||||||
my ($totalHosts, $firstAddr, $lastAddr) = esmith::util::computeHostRange($network, $networkMask);
|
my ($totalHosts, $firstAddr, $lastAddr) = esmith::util::computeHostRange($network, $networkMask);
|
||||||
my $msg;
|
my $msg;
|
||||||
|
|
||||||
@@ -268,4 +299,4 @@ sub add_network {
|
|||||||
);
|
);
|
||||||
} ## end else [ if ($totalHosts == 1) ]
|
} ## end else [ if ($totalHosts == 1) ]
|
||||||
} ## end sub add_network
|
} ## end sub add_network
|
||||||
1;
|
1;
|
||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Login;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : Support
|
# heading : Support
|
||||||
# description : Login
|
# description : Login
|
||||||
# navigation : 0000 001
|
# navigation : 0 200
|
||||||
# menu : N
|
# menu : N
|
||||||
#
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
@@ -18,7 +18,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Mojo::Base 'Mojolicious::Controller';
|
use Mojo::Base 'Mojolicious::Controller';
|
||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use esmith::AccountsDB;
|
use esmith::AccountsDB::UTF8;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr::Model::Main;
|
use SrvMngr::Model::Main;
|
||||||
use SrvMngr qw( theme_list init_session );
|
use SrvMngr qw( theme_list init_session );
|
||||||
@@ -26,7 +26,7 @@ my $MAX_LOGIN_ATTEMPTS = 3;
|
|||||||
my $DURATION_BLOCKED = 30 * 60; # access blocked for 30 min
|
my $DURATION_BLOCKED = 30 * 60; # access blocked for 30 min
|
||||||
my $TIMEOUT_FAILED_LOGIN = 1;
|
my $TIMEOUT_FAILED_LOGIN = 1;
|
||||||
my $RESET_DURATION = 2 * 60 * 60; # 2 hours for resetting
|
my $RESET_DURATION = 2 * 60 * 60; # 2 hours for resetting
|
||||||
our $adb = esmith::AccountsDB->open() or die "Couldn't open DB Accounts\n";
|
our $adb;
|
||||||
my $allowed_user_re = qr/^\w{5,10}$/;
|
my $allowed_user_re = qr/^\w{5,10}$/;
|
||||||
my %Login_Attempts;
|
my %Login_Attempts;
|
||||||
|
|
||||||
@@ -39,6 +39,7 @@ sub main {
|
|||||||
sub login {
|
sub login {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $trt = $c->param('Trt');
|
my $trt = $c->param('Trt');
|
||||||
|
$adb = esmith::AccountsDB::UTF8->open() or die "Couldn't open DB Accounts\n";
|
||||||
|
|
||||||
# password reset request
|
# password reset request
|
||||||
if ($trt eq 'RESET') {
|
if ($trt eq 'RESET') {
|
||||||
@@ -85,13 +86,13 @@ sub login {
|
|||||||
$c->session(logged_in => 1); # set the logged_in flag
|
$c->session(logged_in => 1); # set the logged_in flag
|
||||||
$c->session(username => $name); # keep a copy of the username
|
$c->session(username => $name); # keep a copy of the username
|
||||||
|
|
||||||
# if ( $name eq 'admin' || $adb->is_user_in_group($name, 'AdmiN') ) # for futur use
|
# if ( $name eq 'admin' || $adb->is_user_in_group($name, 'Admin') ) # for futur use
|
||||||
if ($name eq 'admin') {
|
if ($name eq 'admin') {
|
||||||
$c->session(is_admin => 1);
|
$c->session(is_admin => 1);
|
||||||
} else {
|
} else {
|
||||||
$c->session(is_admin => 0);
|
$c->session(is_admin => 0);
|
||||||
}
|
}
|
||||||
$c->session(expiration => 600); # expire this session in 10 minutes
|
$c->session(expiration => $c->config->{timeout} ); # expire this session in the time set in config
|
||||||
$c->flash(success => $c->l('use_WELCOME'));
|
$c->flash(success => $c->l('use_WELCOME'));
|
||||||
record_login_attempt($c, 'SUCCESS');
|
record_login_attempt($c, 'SUCCESS');
|
||||||
} else {
|
} else {
|
||||||
@@ -114,6 +115,7 @@ sub mail_rescue {
|
|||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $name = $c->param('Username');
|
my $name = $c->param('Username');
|
||||||
my $from = $c->param('From');
|
my $from = $c->param('From');
|
||||||
|
$adb = esmith::AccountsDB::UTF8->open() or die "Couldn't open DB Accounts\n";
|
||||||
my $res;
|
my $res;
|
||||||
$res .= $c->l('use_TOO_MANY_LOGIN') if (is_denied($c));
|
$res .= $c->l('use_TOO_MANY_LOGIN') if (is_denied($c));
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Logout;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : Current User
|
# heading : Current User
|
||||||
# description : Logout
|
# description : Logout
|
||||||
# navigation : 1000 900
|
# navigation : 1000 1000
|
||||||
# menu : U
|
# menu : U
|
||||||
#
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Manual;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : Support
|
# heading : Support
|
||||||
# description : Online manual
|
# description : Online manual
|
||||||
# navigation : 0000 100
|
# navigation : 0 300
|
||||||
# menu : N
|
# menu : N
|
||||||
#
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
|
|||||||
@@ -13,14 +13,10 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
|
||||||
#use Regexp::Common qw /net/;
|
#use Regexp::Common qw /net/;
|
||||||
#use Data::Dumper;
|
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
use esmith::HostsDB;
|
use esmith::ConfigDB::UTF8;
|
||||||
#our $db = esmith::ConfigDB->open || die "Can't open configuration database: $!\n";
|
|
||||||
#our $tcp_db = esmith::ConfigDB->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
|
|
||||||
#our $udp_db = esmith::ConfigDB->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
|
|
||||||
my ($cdb,$tcp_db,$udp_db);
|
my ($cdb,$tcp_db,$udp_db);
|
||||||
|
|
||||||
my %ret = ();
|
my %ret = ();
|
||||||
@@ -34,9 +30,9 @@ sub main {
|
|||||||
$pf_datas{return} = "";
|
$pf_datas{return} = "";
|
||||||
my $title = $c->l('pf_FORM_TITLE');
|
my $title = $c->l('pf_FORM_TITLE');
|
||||||
my $modul = '';
|
my $modul = '';
|
||||||
$cdb = esmith::ConfigDB->open || die "Can't open configuration database: $!\n";
|
$cdb = esmith::ConfigDB::UTF8->open || die "Can't open configuration database: $!\n";
|
||||||
$tcp_db = esmith::ConfigDB->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
|
$tcp_db = esmith::ConfigDB::UTF8->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
|
||||||
$udp_db = esmith::ConfigDB->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
|
$udp_db = esmith::ConfigDB::UTF8->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
|
||||||
$pf_datas{trt} = 'LIST';
|
$pf_datas{trt} = 'LIST';
|
||||||
my @tcpforwards = $tcp_db->get_all;
|
my @tcpforwards = $tcp_db->get_all;
|
||||||
my @udpforwards = $udp_db->get_all;
|
my @udpforwards = $udp_db->get_all;
|
||||||
@@ -57,9 +53,9 @@ sub do_display {
|
|||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my $trt = ($c->param('trt') || 'LIST');
|
my $trt = ($c->param('trt') || 'LIST');
|
||||||
my $cdb = esmith::ConfigDB->open || die "Can't open configuration database: $!\n";
|
my $cdb = esmith::ConfigDB::UTF8->open || die "Can't open configuration database: $!\n";
|
||||||
my $tcp_db = esmith::ConfigDB->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
|
my $tcp_db = esmith::ConfigDB::UTF8->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
|
||||||
my $udp_db = esmith::ConfigDB->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
|
my $udp_db = esmith::ConfigDB::UTF8->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
|
||||||
$trt = 'DEL' if ($rt eq 'portforwardingdel');
|
$trt = 'DEL' if ($rt eq 'portforwardingdel');
|
||||||
$trt = 'ADD' if ($rt eq 'portforwardingadd');
|
$trt = 'ADD' if ($rt eq 'portforwardingadd');
|
||||||
$trt = 'ADD1' if ($rt eq 'portforwardingadd1');
|
$trt = 'ADD1' if ($rt eq 'portforwardingadd1');
|
||||||
@@ -142,6 +138,10 @@ sub do_display {
|
|||||||
if ($trt eq 'LIST') {
|
if ($trt eq 'LIST') {
|
||||||
|
|
||||||
#List all the port forwards
|
#List all the port forwards
|
||||||
|
# Open them again as maybe written to above
|
||||||
|
$tcp_db = esmith::ConfigDB::UTF8->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
|
||||||
|
$udp_db = esmith::ConfigDB::UTF8->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
|
||||||
|
|
||||||
my @tcpforwards = $tcp_db->get_all;
|
my @tcpforwards = $tcp_db->get_all;
|
||||||
my @udpforwards = $udp_db->get_all;
|
my @udpforwards = $udp_db->get_all;
|
||||||
my $empty = 1 if not @tcpforwards and not @udpforwards;
|
my $empty = 1 if not @tcpforwards and not @udpforwards;
|
||||||
@@ -168,10 +168,10 @@ sub add_portforward {
|
|||||||
my $fdb;
|
my $fdb;
|
||||||
|
|
||||||
if ($proto eq 'TCP') {
|
if ($proto eq 'TCP') {
|
||||||
$tcp_db = esmith::ConfigDB->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
|
$tcp_db = esmith::ConfigDB::UTF8->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n";
|
||||||
$fdb = $tcp_db;
|
$fdb = $tcp_db;
|
||||||
} else {
|
} else {
|
||||||
$udp_db = esmith::ConfigDB->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
|
$udp_db = esmith::ConfigDB::UTF8->open('portforward_udp') || die "Can't open portforward_udp database: $!\n";
|
||||||
$fdb = $udp_db;
|
$fdb = $udp_db;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,6 +211,7 @@ sub add_portforward {
|
|||||||
|
|
||||||
sub get_destination_host {
|
sub get_destination_host {
|
||||||
my $q = shift;
|
my $q = shift;
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open || die "Can't open configuration database: $!\n";
|
||||||
my $dhost = $q->param("dhost");
|
my $dhost = $q->param("dhost");
|
||||||
my $localip = $cdb->get_prop('InternalInterface', 'IPAddress');
|
my $localip = $cdb->get_prop('InternalInterface', 'IPAddress');
|
||||||
my $external_ip = $cdb->get_prop('ExternalInterface', 'IPAddress') || $localip;
|
my $external_ip = $cdb->get_prop('ExternalInterface', 'IPAddress') || $localip;
|
||||||
@@ -357,6 +358,7 @@ sub isValidPort() {
|
|||||||
|
|
||||||
sub validate_destination_host {
|
sub validate_destination_host {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open || die "Can't open configuration database: $!\n";
|
||||||
my $dhost = $c->param('dhost');
|
my $dhost = $c->param('dhost');
|
||||||
$dhost =~ s/^\s+|\s+$//g;
|
$dhost =~ s/^\s+|\s+$//g;
|
||||||
my $localip = $cdb->get_prop('InternalInterface', 'IPAddress');
|
my $localip = $cdb->get_prop('InternalInterface', 'IPAddress');
|
||||||
|
|||||||
@@ -14,15 +14,15 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
use esmith::AccountsDB::UTF8;
|
||||||
my $adb;
|
our $adb;
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my %prt_datas = ();
|
my %prt_datas = ();
|
||||||
my $title = $c->l('prt_FORM_TITLE');
|
my $title = $c->l('prt_FORM_TITLE');
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$prt_datas{'trt'} = 'LIST';
|
$prt_datas{'trt'} = 'LIST';
|
||||||
my @printerDrivers;
|
my @printerDrivers;
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ sub do_display {
|
|||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my $trt = ($c->param('trt') || 'LIST');
|
my $trt = ($c->param('trt') || 'LIST');
|
||||||
my $printer = $c->param('printer') || '';
|
my $printer = $c->param('printer') || '';
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
|
|
||||||
#$trt = 'DEL' if ( $printer );
|
#$trt = 'DEL' if ( $printer );
|
||||||
#$trt = 'ADD' if ( $rt eq 'printeradd' );
|
#$trt = 'ADD' if ( $rt eq 'printeradd' );
|
||||||
@@ -79,7 +79,7 @@ sub do_update {
|
|||||||
my $trt = ($c->param('trt') || 'LIST');
|
my $trt = ($c->param('trt') || 'LIST');
|
||||||
my %prt_datas = ();
|
my %prt_datas = ();
|
||||||
my $title = $c->l('prt_FORM_TITLE');
|
my $title = $c->l('prt_FORM_TITLE');
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$prt_datas{'trt'} = $trt;
|
$prt_datas{'trt'} = $trt;
|
||||||
my ($res, $result) = '';
|
my ($res, $result) = '';
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Proxy;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : System
|
# heading : System
|
||||||
# description : Proxy settings
|
# description : Proxy settings
|
||||||
# navigation : 4000 710
|
# navigation : 4000 200
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
@@ -14,11 +14,14 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
our $db = esmith::ConfigDB->open || die "Couldn't open config db";
|
use esmith::ConfigDB::UTF8;
|
||||||
|
|
||||||
|
our $db;
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
my %prx_datas = ();
|
my %prx_datas = ();
|
||||||
my $title = $c->l('prx_TITLE');
|
my $title = $c->l('prx_TITLE');
|
||||||
my $modul = $c->render_to_string(inline => $c->l('prx_FIRST_PAGE_DESCRIPTION'));
|
my $modul = $c->render_to_string(inline => $c->l('prx_FIRST_PAGE_DESCRIPTION'));
|
||||||
@@ -40,6 +43,7 @@ sub do_update {
|
|||||||
my $http_proxy_status = $c->param('http_proxy_status') || 'disabled';
|
my $http_proxy_status = $c->param('http_proxy_status') || 'disabled';
|
||||||
my $smtp_proxy_status = $c->param('smtp_proxy_status') || '';
|
my $smtp_proxy_status = $c->param('smtp_proxy_status') || '';
|
||||||
my $result = "";
|
my $result = "";
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
my $squid = $db->get('squid') or $result = $c->l('prx_ERR_NO_SQUID_REC');
|
my $squid = $db->get('squid') or $result = $c->l('prx_ERR_NO_SQUID_REC');
|
||||||
|
|
||||||
# smtpd is allowed to not exist, as the relevant packages may not be
|
# smtpd is allowed to not exist, as the relevant packages may not be
|
||||||
@@ -51,10 +55,10 @@ sub do_update {
|
|||||||
# Update the system
|
# Update the system
|
||||||
#
|
#
|
||||||
system("/sbin/e-smith/signal-event proxy-update") == 0
|
system("/sbin/e-smith/signal-event proxy-update") == 0
|
||||||
or $result = $c->l('prx_ERR_PROXY_UPDATE_FAILED');
|
or $result = $c->l('prx_ERR_PROXY_UPDATE_FAILED');
|
||||||
my $title = $c->l('prx_TITLE');
|
my $title = $c->l('prx_TITLE');
|
||||||
if ($result eq '') { $result = $c->l('prx_SUCCESS'); }
|
if ($result eq '') { $result = $c->l('prx_SUCCESS'); }
|
||||||
$c->stash(title => $title, modul => $result);
|
$c->stash(title => $title, modul => $result);
|
||||||
$c->render(template => 'module');
|
$c->render(template => 'module');
|
||||||
} ## end sub do_update
|
} ## end sub do_update
|
||||||
1;
|
1;
|
||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Pseudonyms;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : User management
|
# heading : User management
|
||||||
# description : Pseudonyms
|
# description : Pseudonyms
|
||||||
# navigation : 2000 210
|
# navigation : 2000 300
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
@@ -14,15 +14,10 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
use esmith::AccountsDB::UTF8;
|
||||||
|
use esmith::DomainsDB::UTF8;
|
||||||
|
|
||||||
#use Data::Dumper;
|
our ($cdb,$adb);
|
||||||
#use esmith::FormMagick::Panel::pseudonyms;
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
|
|
||||||
#use URI::Escape;
|
|
||||||
#our $cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
|
||||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
my ($cdb,$adb);
|
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
@@ -32,8 +27,7 @@ sub main {
|
|||||||
my $notif = '';
|
my $notif = '';
|
||||||
$pse_datas{trt} = 'LST';
|
$pse_datas{trt} = 'LST';
|
||||||
my @pseudonyms;
|
my @pseudonyms;
|
||||||
#$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
|
|
||||||
if ($adb) {
|
if ($adb) {
|
||||||
@pseudonyms = $adb->pseudonyms();
|
@pseudonyms = $adb->pseudonyms();
|
||||||
@@ -50,8 +44,7 @@ sub do_display {
|
|||||||
my $pseudonym = $c->param('pseudonym') || '';
|
my $pseudonym = $c->param('pseudonym') || '';
|
||||||
my $title = $c->l('pse_FORM_TITLE');
|
my $title = $c->l('pse_FORM_TITLE');
|
||||||
my %pse_datas = ();
|
my %pse_datas = ();
|
||||||
#$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
$pse_datas{'trt'} = $trt;
|
$pse_datas{'trt'} = $trt;
|
||||||
|
|
||||||
if ($trt eq 'ADD') {
|
if ($trt eq 'ADD') {
|
||||||
@@ -97,8 +90,7 @@ sub do_update {
|
|||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my $trt = ($c->param('trt') || 'LST');
|
my $trt = ($c->param('trt') || 'LST');
|
||||||
my $title = $c->l('pse_FORM_TITLE');
|
my $title = $c->l('pse_FORM_TITLE');
|
||||||
#$cdb = esmith::ConfigDB->open || die "Couldn't open configuration db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
my %pse_datas = ();
|
my %pse_datas = ();
|
||||||
$pse_datas{'trt'} = $trt;
|
$pse_datas{'trt'} = $trt;
|
||||||
my ($res, $result) = '';
|
my ($res, $result) = '';
|
||||||
@@ -331,8 +323,7 @@ sub validate_new_pseudonym_name {
|
|||||||
if (defined $acct) {
|
if (defined $acct) {
|
||||||
return ($c->l('pse_NAME_IN_USE'));
|
return ($c->l('pse_NAME_IN_USE'));
|
||||||
} elsif ($pseudonym =~ /@/) {
|
} elsif ($pseudonym =~ /@/) {
|
||||||
use esmith::DomainsDB;
|
my $ddb = esmith::DomainsDB::UTF8->open_ro
|
||||||
my $ddb = esmith::DomainsDB->open_ro
|
|
||||||
or die "Couldn't open DomainsDB\n";
|
or die "Couldn't open DomainsDB\n";
|
||||||
my ($lhs, $rhs) = split /@/, $pseudonym;
|
my ($lhs, $rhs) = split /@/, $pseudonym;
|
||||||
return ($c->l('pse_PSEUDONYM_INVALID_DOMAIN')) unless ($ddb->get($rhs));
|
return ($c->l('pse_PSEUDONYM_INVALID_DOMAIN')) unless ($ddb->get($rhs));
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Quota;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : User management
|
# heading : User management
|
||||||
# description : Quotas
|
# description : Quotas
|
||||||
# navigation : 2000 300
|
# navigation : 2000 500
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
@@ -16,8 +16,8 @@ use Scalar::Util qw(looks_like_number);
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
use esmith::AccountsDB::UTF8;
|
||||||
|
|
||||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
my $adb;
|
my $adb;
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
@@ -25,7 +25,7 @@ sub main {
|
|||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my %quo_datas = ();
|
my %quo_datas = ();
|
||||||
my $title = $c->l('quo_FORM_TITLE');
|
my $title = $c->l('quo_FORM_TITLE');
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$quo_datas{'trt'} = 'LIST';
|
$quo_datas{'trt'} = 'LIST';
|
||||||
my @userAccounts;
|
my @userAccounts;
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ sub do_display {
|
|||||||
$trt = 'UPD' if ($user);
|
$trt = 'UPD' if ($user);
|
||||||
my %quo_datas = ();
|
my %quo_datas = ();
|
||||||
my $title = $c->l('quo_FORM_TITLE');
|
my $title = $c->l('quo_FORM_TITLE');
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$quo_datas{'trt'} = $trt;
|
$quo_datas{'trt'} = $trt;
|
||||||
|
|
||||||
if ($trt eq 'UPD') {
|
if ($trt eq 'UPD') {
|
||||||
@@ -73,7 +73,7 @@ sub do_update {
|
|||||||
$quo_datas{trt} = $trt;
|
$quo_datas{trt} = $trt;
|
||||||
my $result = '';
|
my $result = '';
|
||||||
my $res;
|
my $res;
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
|
|
||||||
if ($trt eq 'UPD') {
|
if ($trt eq 'UPD') {
|
||||||
$quo_datas{user} = ($c->param('user') || '');
|
$quo_datas{user} = ($c->param('user') || '');
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session ip_number subnet_mask get_reg_mask);
|
use SrvMngr qw(theme_list init_session ip_number subnet_mask get_reg_mask);
|
||||||
use esmith::ConfigDB;
|
use esmith::ConfigDB::UTF8;
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
@@ -30,7 +30,7 @@ our @EXPORT = qw( networkAccess_list passwordLogin_list get_ssh_permit_root_logi
|
|||||||
);
|
);
|
||||||
|
|
||||||
# get_pptp_sessions
|
# get_pptp_sessions
|
||||||
our $db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
|
our $db;
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
@@ -38,7 +38,7 @@ sub main {
|
|||||||
my $title = $c->l('rma_FORM_TITLE');
|
my $title = $c->l('rma_FORM_TITLE');
|
||||||
my $notif = '';
|
my $notif = '';
|
||||||
my %rma_datas = ();
|
my %rma_datas = ();
|
||||||
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
|
|
||||||
#$rma_datas{ipsecrwSess} = $c->get_ipsecrw_sessions();
|
#$rma_datas{ipsecrwSess} = $c->get_ipsecrw_sessions();
|
||||||
#$rma_datas{pptpSessions} = $c->get_pptp_sessions();
|
#$rma_datas{pptpSessions} = $c->get_pptp_sessions();
|
||||||
@@ -60,7 +60,7 @@ sub do_action {
|
|||||||
my $title = $c->l('rma_FORM_TITLE');
|
my $title = $c->l('rma_FORM_TITLE');
|
||||||
my ($result, $res, $trt) = '';
|
my ($result, $res, $trt) = '';
|
||||||
my %rma_datas = ();
|
my %rma_datas = ();
|
||||||
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
$rma_datas{ipsecrwSess} = ($c->param('IpsecrwSess') || '');
|
$rma_datas{ipsecrwSess} = ($c->param('IpsecrwSess') || '');
|
||||||
$rma_datas{ipsecrwReset} = ($c->param('IpsecrwReset') || '');
|
$rma_datas{ipsecrwReset} = ($c->param('IpsecrwReset') || '');
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ sub networkAccess_list {
|
|||||||
return [
|
return [
|
||||||
[ $c->l('rma_NO_ACCESS') => 'off' ],
|
[ $c->l('rma_NO_ACCESS') => 'off' ],
|
||||||
[ $c->l('NETWORKS_ALLOW_LOCAL') => 'private' ],
|
[ $c->l('NETWORKS_ALLOW_LOCAL') => 'private' ],
|
||||||
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'normal' ]
|
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public' ]
|
||||||
];
|
];
|
||||||
} ## end sub networkAccess_list
|
} ## end sub networkAccess_list
|
||||||
|
|
||||||
@@ -144,6 +144,7 @@ sub passwordLogin_list {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub get_prop {
|
sub get_prop {
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
my ($c, $item, $prop) = @_;
|
my ($c, $item, $prop) = @_;
|
||||||
warn "You must specify a record key" unless $item;
|
warn "You must specify a record key" unless $item;
|
||||||
warn "You must specify a property name" unless $prop;
|
warn "You must specify a property name" unless $prop;
|
||||||
@@ -154,6 +155,7 @@ sub get_prop {
|
|||||||
sub get_value {
|
sub get_value {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $item = shift;
|
my $item = shift;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
return ($db->get($item)->value());
|
return ($db->get($item)->value());
|
||||||
} ## end sub get_value
|
} ## end sub get_value
|
||||||
|
|
||||||
@@ -179,8 +181,8 @@ sub get_ssh_password_auth {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub get_ssh_access {
|
sub get_ssh_access {
|
||||||
my $status = get_prop('', 'sshd', 'status');
|
my $c = shift;
|
||||||
|
my $status = $c->get_prop('sshd', 'status');
|
||||||
if (defined($status) && ($status eq 'enabled')) {
|
if (defined($status) && ($status eq 'enabled')) {
|
||||||
my $access = get_prop('', 'sshd', 'access');
|
my $access = get_prop('', 'sshd', 'access');
|
||||||
$access = ($access eq 'public') ? 'public' : 'private';
|
$access = ($access eq 'public') ? 'public' : 'private';
|
||||||
@@ -202,6 +204,7 @@ sub get_ftp_password_login_access {
|
|||||||
} ## end sub get_ftp_password_login_access
|
} ## end sub get_ftp_password_login_access
|
||||||
|
|
||||||
sub get_telnet_mode {
|
sub get_telnet_mode {
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
my $telnet = $db->get('telnet');
|
my $telnet = $db->get('telnet');
|
||||||
return ('off') unless $telnet;
|
return ('off') unless $telnet;
|
||||||
my $status = $telnet->prop('status') || 'disabled';
|
my $status = $telnet->prop('status') || 'disabled';
|
||||||
@@ -211,8 +214,8 @@ sub get_telnet_mode {
|
|||||||
} ## end sub get_telnet_mode
|
} ## end sub get_telnet_mode
|
||||||
|
|
||||||
sub get_ipsecrw_sessions {
|
sub get_ipsecrw_sessions {
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
my $status = $db->get('ipsec')->prop('RoadWarriorStatus');
|
my $status = $db->get('ipsec')->prop('RoadWarriorStatus');
|
||||||
|
|
||||||
if (defined($status) && ($status eq 'enabled')) {
|
if (defined($status) && ($status eq 'enabled')) {
|
||||||
return ($db->get('ipsec')->prop('RoadWarriorSessions') || '0');
|
return ($db->get('ipsec')->prop('RoadWarriorSessions') || '0');
|
||||||
} else {
|
} else {
|
||||||
@@ -221,6 +224,7 @@ sub get_ipsecrw_sessions {
|
|||||||
} ## end sub get_ipsecrw_sessions
|
} ## end sub get_ipsecrw_sessions
|
||||||
|
|
||||||
sub get_ipsecrw_status {
|
sub get_ipsecrw_status {
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
return undef unless ($db->get('ipsec'));
|
return undef unless ($db->get('ipsec'));
|
||||||
return $db->get('ipsec')->prop('RoadWarriorStatus');
|
return $db->get('ipsec')->prop('RoadWarriorStatus');
|
||||||
}
|
}
|
||||||
@@ -228,6 +232,7 @@ sub get_ipsecrw_status {
|
|||||||
sub pptp_and_dhcp_range {
|
sub pptp_and_dhcp_range {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $val = shift || 0;
|
my $val = shift || 0;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
my $dhcp_status = $db->get_prop('dhcpd', 'status') || 'disabled';
|
my $dhcp_status = $db->get_prop('dhcpd', 'status') || 'disabled';
|
||||||
my $dhcp_end = $db->get_prop('dhcpd', 'end') || '';
|
my $dhcp_end = $db->get_prop('dhcpd', 'end') || '';
|
||||||
my $dhcp_start = $db->get_prop('dhcpd', 'start') || '';
|
my $dhcp_start = $db->get_prop('dhcpd', 'start') || '';
|
||||||
@@ -245,6 +250,7 @@ sub pptp_and_dhcp_range {
|
|||||||
|
|
||||||
sub _get_valid_from {
|
sub _get_valid_from {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
my $rec = $db->get('httpd-admin');
|
my $rec = $db->get('httpd-admin');
|
||||||
return undef unless ($rec);
|
return undef unless ($rec);
|
||||||
my @vals = (split ',', ($rec->prop('ValidFrom') || ''));
|
my @vals = (split ',', ($rec->prop('ValidFrom') || ''));
|
||||||
@@ -287,12 +293,12 @@ sub validate_network_and_mask {
|
|||||||
|
|
||||||
sub change_settings {
|
sub change_settings {
|
||||||
my ($c, %rma_datas) = @_;
|
my ($c, %rma_datas) = @_;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
# good; go ahead and change the access.
|
# good; go ahead and change the access.
|
||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
my $rec = $db->get('telnet');
|
my $rec = $db->get('telnet');
|
||||||
|
|
||||||
if ($rec) {
|
if ($rec) {
|
||||||
if ($rma_datas{telnetAccess} eq "off") {
|
if ($rma_datas{telnetAccess} eq "off") {
|
||||||
$rec->set_prop('status', 'disabled');
|
$rec->set_prop('status', 'disabled');
|
||||||
@@ -363,7 +369,7 @@ sub change_settings {
|
|||||||
sub set_ipsecrw_sessions {
|
sub set_ipsecrw_sessions {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $sessions = shift;
|
my $sessions = shift;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
if (defined $sessions) {
|
if (defined $sessions) {
|
||||||
$db->get('ipsec')->set_prop('RoadWarriorSessions', $sessions);
|
$db->get('ipsec')->set_prop('RoadWarriorSessions', $sessions);
|
||||||
|
|
||||||
@@ -378,6 +384,7 @@ sub add_new_valid_from {
|
|||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $net = shift;
|
my $net = shift;
|
||||||
my $mask = shift;
|
my $mask = shift;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
|
|
||||||
# we transform bit mask to regular mask
|
# we transform bit mask to regular mask
|
||||||
$mask = get_reg_mask($net, $mask);
|
$mask = get_reg_mask($net, $mask);
|
||||||
@@ -400,6 +407,7 @@ sub remove_valid_from {
|
|||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $remove_nets = shift;
|
my $remove_nets = shift;
|
||||||
my @remove = split /,/, $remove_nets;
|
my @remove = split /,/, $remove_nets;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || warn "Couldn't open configuration database";
|
||||||
|
|
||||||
# my @remove = $c->param('Remove_nets');
|
# my @remove = $c->param('Remove_nets');
|
||||||
my @vals = $c->_get_valid_from();
|
my @vals = $c->_get_valid_from();
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
|
use esmith::ConfigDB::UTF8 qw(open_ro);
|
||||||
|
use esmith::AccountsDB::UTF8 qw(open_ro);
|
||||||
|
|
||||||
# retrieve a configuration db record
|
# retrieve a configuration db record
|
||||||
sub getconfig {
|
sub getconfig {
|
||||||
@@ -16,8 +18,7 @@ sub getconfig {
|
|||||||
$c->app->log->info($c->log_req . ' ' . $key);
|
$c->app->log->info($c->log_req . ' ' . $key);
|
||||||
|
|
||||||
if ($key) {
|
if ($key) {
|
||||||
use esmith::ConfigDB qw(open_ro);
|
my $cdb = esmith::ConfigDB::UTF8->open_ro;
|
||||||
my $cdb = esmith::ConfigDB->open_ro;
|
|
||||||
return getdb($c, $cdb, $key);
|
return getdb($c, $cdb, $key);
|
||||||
} ## end if ($key)
|
} ## end if ($key)
|
||||||
} ## end sub getconfig
|
} ## end sub getconfig
|
||||||
@@ -29,8 +30,7 @@ sub getaccount {
|
|||||||
$c->app->log->info($c->log_req . ' ' . $key);
|
$c->app->log->info($c->log_req . ' ' . $key);
|
||||||
|
|
||||||
if ($key) {
|
if ($key) {
|
||||||
use esmith::AccountsDB qw(open_ro);
|
my $adb = esmith::AccountsDB::UTF8->open_ro;
|
||||||
my $adb = esmith::AccountsDB->open_ro;
|
|
||||||
return getdb($c, $adb, $key);
|
return getdb($c, $adb, $key);
|
||||||
} ## end if ($key)
|
} ## end if ($key)
|
||||||
} ## end sub getaccount
|
} ## end sub getaccount
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
package SrvMngr::Controller::Review;
|
package SrvMngr::Controller::Review;
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : Support
|
# heading : Investigation
|
||||||
# description : Review configuration
|
# description : Review configuration
|
||||||
# navigation : 000 500
|
# navigation : 7000 400
|
||||||
# menu : N
|
|
||||||
# routes : end
|
# routes : end
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading-o : Configuration
|
|
||||||
# description-o : Review configuration
|
|
||||||
# navigation-o : 6000 6800
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Mojo::Base 'Mojolicious::Controller';
|
use Mojo::Base 'Mojolicious::Controller';
|
||||||
@@ -18,17 +13,20 @@ use Locale::gettext;
|
|||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
use SrvMngr qw(gen_locale_date_string);
|
use SrvMngr qw(gen_locale_date_string);
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
|
use esmith::DomainsDB::UTF8;
|
||||||
|
use esmith::NetworksDB::UTF8;
|
||||||
|
|
||||||
#use SrvMngr::Review_sub qw(print_page);
|
#use SrvMngr::Review_sub qw(print_page);
|
||||||
#use smeserver::Panel::review;
|
#use smeserver::Panel::review;
|
||||||
our $db = esmith::ConfigDB->open_ro || die "Couldn't open config db";
|
our $db;
|
||||||
our $domains = esmith::DomainsDB->open_ro || die "Couldn't open domains";
|
our $domains ;
|
||||||
our $networks = esmith::NetworksDB->open_ro || die "Couldn't open networks";
|
our $networks;
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
|
$db = esmith::ConfigDB::UTF8->open_ro || die "Couldn't open config db";
|
||||||
my $title = $c->l('rvw_FORM_TITLE');
|
my $title = $c->l('rvw_FORM_TITLE');
|
||||||
my $modul = $c->render_to_string(inline => $c->l('rvw_DESCRIPTION'));
|
my $modul = $c->render_to_string(inline => $c->l('rvw_DESCRIPTION'));
|
||||||
my %rvw_datas = ();
|
my %rvw_datas = ();
|
||||||
@@ -102,6 +100,7 @@ sub gen2_email_addresses {
|
|||||||
|
|
||||||
sub gen2_domains {
|
sub gen2_domains {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
$domains = esmith::DomainsDB::UTF8->open_ro || die "Couldn't open domains";
|
||||||
my @virtual = $domains->get_all_by_prop(type => 'domain');
|
my @virtual = $domains->get_all_by_prop(type => 'domain');
|
||||||
my $numvirtual = @virtual;
|
my $numvirtual = @virtual;
|
||||||
|
|
||||||
@@ -130,6 +129,7 @@ serving. (mojo ver)
|
|||||||
|
|
||||||
sub get2_local_networks {
|
sub get2_local_networks {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
$networks = esmith::NetworksDB::UTF8->open_ro || die "Couldn't open networks";
|
||||||
my @nets = $networks->get_all_by_prop('type' => 'network');
|
my @nets = $networks->get_all_by_prop('type' => 'network');
|
||||||
my $numNetworks = @nets;
|
my $numNetworks = @nets;
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ sub get_net_prop {
|
|||||||
my $fm = shift;
|
my $fm = shift;
|
||||||
my $item = shift;
|
my $item = shift;
|
||||||
my $prop = shift;
|
my $prop = shift;
|
||||||
|
$networks = esmith::NetworksDB::UTF8->open_ro || die "Couldn't open networks";
|
||||||
my $record = $networks->get($item);
|
my $record = $networks->get($item);
|
||||||
if ($record) {
|
if ($record) {
|
||||||
return $record->prop($prop);
|
return $record->prop($prop);
|
||||||
@@ -170,7 +170,7 @@ sub get_net_prop {
|
|||||||
|
|
||||||
sub get_local_networks {
|
sub get_local_networks {
|
||||||
my $fm = shift;
|
my $fm = shift;
|
||||||
|
$networks = esmith::NetworksDB::UTF8->open_ro || die "Couldn't open networks";
|
||||||
my @nets = $networks->get_all_by_prop('type' => 'network');
|
my @nets = $networks->get_all_by_prop('type' => 'network');
|
||||||
|
|
||||||
my $numNetworks = @nets;
|
my $numNetworks = @nets;
|
||||||
@@ -270,6 +270,7 @@ sub print2_dhcp_stanza {
|
|||||||
sub get_value {
|
sub get_value {
|
||||||
my $fm = shift;
|
my $fm = shift;
|
||||||
my $item = shift;
|
my $item = shift;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open_ro || die "Couldn't open config db";
|
||||||
my $record = $db->get($item);
|
my $record = $db->get($item);
|
||||||
if ($record) {
|
if ($record) {
|
||||||
return $record->value();
|
return $record->value();
|
||||||
@@ -286,7 +287,7 @@ sub get_prop {
|
|||||||
#otherwise, we don't want to grab it
|
#otherwise, we don't want to grab it
|
||||||
my $item = shift;
|
my $item = shift;
|
||||||
my $prop = shift;
|
my $prop = shift;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open_ro || die "Couldn't open config db";
|
||||||
my $record = $db->get($item);
|
my $record = $db->get($item);
|
||||||
if ($record) {
|
if ($record) {
|
||||||
return $record->prop($prop);
|
return $record->prop($prop);
|
||||||
@@ -300,6 +301,7 @@ sub get_prop {
|
|||||||
sub get_public_ip_address
|
sub get_public_ip_address
|
||||||
{
|
{
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
$db = esmith::ConfigDB::UTF8->open_ro || die "Couldn't open config db";
|
||||||
my $sysconfig = $db->get('sysconfig');
|
my $sysconfig = $db->get('sysconfig');
|
||||||
if ($sysconfig)
|
if ($sysconfig)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package SrvMngr::Controller::Roundcubepanel;
|
package SrvMngr::Controller::Roundcubepanel;
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : System
|
# heading : Network
|
||||||
# description : Webmail
|
# description : Webmail
|
||||||
# navigation : 99999 9999
|
# navigation : 6000 900
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# name : roundcubepanel, method : get, url : /roundcubepanel, ctlact : Roundcubepanel#main
|
# name : roundcubepanel, method : get, url : /roundcubepanel, ctlact : Roundcubepanel#main
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package SrvMngr::Controller::Support;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : Support
|
# heading : Support
|
||||||
# description : Support and licensing
|
# description : Support and licensing
|
||||||
# navigation : 0000 200
|
# navigation : 0 400
|
||||||
# menu : N
|
# menu : N
|
||||||
#
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
|
|||||||
@@ -5,19 +5,18 @@ package SrvMngr::Controller::Swttheme;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Mojo::Base 'Mojolicious::Controller';
|
use Mojo::Base 'Mojolicious::Controller';
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
#use SrvMngr qw(theme_list init_session);
|
#use SrvMngr qw(theme_list init_session);
|
||||||
our $db = esmith::ConfigDB->open() || die "Couldn't open config db";
|
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
my $db = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
my $from = $c->param('From') || '/';
|
my $from = $c->param('From') || '/';
|
||||||
my $theme = $c->param('Theme');
|
my $theme = $c->param('Theme');
|
||||||
$c->app->log->info(" swt theme '$from' '$theme' ");
|
$c->app->log->info(" swt theme '$from' '$theme' ");
|
||||||
my $oldTheme = $c->session->{CurrentTheme};
|
my $oldTheme = $c->session->{CurrentTheme};
|
||||||
|
|
||||||
if ($theme ne $oldTheme) {
|
if ($theme ne $oldTheme) {
|
||||||
|
|
||||||
# $c->app->renderer->paths([$c->app->home->rel_file('themes/default/templates')]);
|
# $c->app->renderer->paths([$c->app->home->rel_file('themes/default/templates')]);
|
||||||
# $c->app->static->paths([$c->app->home->rel_file('themes/default/public')]);
|
# $c->app->static->paths([$c->app->home->rel_file('themes/default/public')]);
|
||||||
# if ( $theme ne 'default' ) {
|
# if ( $theme ne 'default' ) {
|
||||||
@@ -31,7 +30,7 @@ sub main {
|
|||||||
system("/sbin/e-smith/signal-event smanager-theme-change") == 0
|
system("/sbin/e-smith/signal-event smanager-theme-change") == 0
|
||||||
or warn "$c->l('ERROR_UPDATING')";
|
or warn "$c->l('ERROR_UPDATING')";
|
||||||
} ## end if ($theme ne $oldTheme)
|
} ## end if ($theme ne $oldTheme)
|
||||||
## (not sure) $c->flash( warning => $c->l('swt_LOGIN_AGAIN') );
|
## (not sure) $c->flash( warning => $c->l('swt_LOGIN_AGAIN') );
|
||||||
$from = '/initial' if $from eq '/';
|
$from = '/initial' if $from eq '/';
|
||||||
$from = '/' . $from if ($from !~ m|^\/|);
|
$from = '/' . $from if ($from !~ m|^\/|);
|
||||||
$c->redirect_to($from);
|
$c->redirect_to($from);
|
||||||
|
|||||||
@@ -15,28 +15,20 @@ use Locale::gettext;
|
|||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session
|
use SrvMngr qw(theme_list init_session
|
||||||
validate_password email_simple);
|
validate_password email_simple);
|
||||||
|
use esmith::AccountsDB::UTF8;
|
||||||
#use esmith::FormMagick qw( validate_password );
|
use esmith::ConfigDB::UTF8;
|
||||||
#use CGI::FormMagick::Validator qw( call_fm_validation );
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
use esmith::ConfigDB;
|
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
|
|
||||||
#use esmith::FormMagick;
|
|
||||||
#use esmith::cgi;
|
|
||||||
#use File::Basename;
|
#use File::Basename;
|
||||||
#use Exporter;
|
#use Exporter;
|
||||||
#use Carp qw(verbose);
|
#use Carp qw(verbose);
|
||||||
#use esmith::FormMagick::Panel::useraccounts;
|
|
||||||
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
|
||||||
#our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
|
||||||
my ($cdb,$adb);
|
my ($cdb,$adb);
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
my $notif = '';
|
my $notif = '';
|
||||||
my %usr_datas = ();
|
my %usr_datas = ();
|
||||||
my $title = $c->l('usr_FORM_TITLE');
|
my $title = $c->l('usr_FORM_TITLE');
|
||||||
@@ -55,8 +47,8 @@ sub do_display {
|
|||||||
my %usr_datas = ();
|
my %usr_datas = ();
|
||||||
my $title = $c->l('usr_FORM_TITLE');
|
my $title = $c->l('usr_FORM_TITLE');
|
||||||
my ($notif, $modul) = '';
|
my ($notif, $modul) = '';
|
||||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
$usr_datas{'trt'} = $trt;
|
$usr_datas{'trt'} = $trt;
|
||||||
|
|
||||||
if ($trt eq 'ADD') {
|
if ($trt eq 'ADD') {
|
||||||
@@ -143,8 +135,8 @@ sub do_update {
|
|||||||
$usr_datas{trt} = $trt;
|
$usr_datas{trt} = $trt;
|
||||||
my $title = $c->l('usr_FORM_TITLE');
|
my $title = $c->l('usr_FORM_TITLE');
|
||||||
my ($res, $result) = '';
|
my ($res, $result) = '';
|
||||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
$adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
$adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
|
|
||||||
if ($trt eq 'ADD') {
|
if ($trt eq 'ADD') {
|
||||||
|
|
||||||
@@ -184,7 +176,7 @@ sub do_update {
|
|||||||
$result .= $res unless $res eq 'OK';
|
$result .= $res unless $res eq 'OK';
|
||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$result = $c->l('usrUSER_CREATED') . ' ' . $user;
|
$result = $c->l('usr_USER_CREATED') . ' ' . $user;
|
||||||
$usr_datas{trt} = 'SUC';
|
$usr_datas{trt} = 'SUC';
|
||||||
}
|
}
|
||||||
} ## end if (!$result)
|
} ## end if (!$result)
|
||||||
@@ -363,13 +355,13 @@ sub lock_account {
|
|||||||
$user = $1;
|
$user = $1;
|
||||||
|
|
||||||
if (system("/sbin/e-smith/signal-event", "user-lock", $user)) {
|
if (system("/sbin/e-smith/signal-event", "user-lock", $user)) {
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
return $c->l("usr_ERR_OCCURRED_LOCKING");
|
return $c->l("usr_ERR_OCCURRED_LOCKING");
|
||||||
}
|
}
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
return 'OK';
|
return 'OK';
|
||||||
} else {
|
} else {
|
||||||
return $c->l('NO_SUCH_USER', $user);
|
return $c->l('usr_NO_SUCH_USER', $user);
|
||||||
}
|
}
|
||||||
} ## end sub lock_account
|
} ## end sub lock_account
|
||||||
|
|
||||||
@@ -387,14 +379,14 @@ sub remove_account {
|
|||||||
$user = $1;
|
$user = $1;
|
||||||
|
|
||||||
if (system("/sbin/e-smith/signal-event", "user-delete", $user)) {
|
if (system("/sbin/e-smith/signal-event", "user-delete", $user)) {
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
return $c->l("ERR_OCCURRED_DELETING");
|
return $c->l("usr_ERR_OCCURRED_DELETING");
|
||||||
}
|
}
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
$adb->get($user)->delete;
|
$adb->get($user)->delete;
|
||||||
return 'OK';
|
return 'OK';
|
||||||
} else {
|
} else {
|
||||||
return $c->l('NO_SUCH_USER', $user);
|
return $c->l('usr_NO_SUCH_USER', $user);
|
||||||
}
|
}
|
||||||
} ## end sub remove_account
|
} ## end sub remove_account
|
||||||
|
|
||||||
@@ -406,7 +398,7 @@ sub reset_password {
|
|||||||
return $c->l('usr_TAINTED_USER');
|
return $c->l('usr_TAINTED_USER');
|
||||||
}
|
}
|
||||||
$user = $1;
|
$user = $1;
|
||||||
my $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
|
my $adb = esmith::AccountsDB::UTF8->open || die "Couldn't open accounts db";
|
||||||
my $acct = $adb->get($user);
|
my $acct = $adb->get($user);
|
||||||
|
|
||||||
if ($acct->prop('type') eq "user") {
|
if ($acct->prop('type') eq "user") {
|
||||||
@@ -415,13 +407,13 @@ sub reset_password {
|
|||||||
undef $adb;
|
undef $adb;
|
||||||
|
|
||||||
if (system("/sbin/e-smith/signal-event", "password-modify", $user)) {
|
if (system("/sbin/e-smith/signal-event", "password-modify", $user)) {
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
return $c->l("usr_ERR_OCCURRED_MODIFYING_PASSWORD");
|
return $c->l("usr_ERR_OCCURRED_MODIFYING_PASSWORD");
|
||||||
}
|
}
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
return 'OK';
|
return 'OK';
|
||||||
} else {
|
} else {
|
||||||
return $c->l('NO_SUCH_USER', $user);
|
return $c->l('usr_NO_SUCH_USER', $user);
|
||||||
}
|
}
|
||||||
} ## end sub reset_password
|
} ## end sub reset_password
|
||||||
|
|
||||||
@@ -671,10 +663,10 @@ sub modify_user {
|
|||||||
undef $adb;
|
undef $adb;
|
||||||
|
|
||||||
unless (system("/sbin/e-smith/signal-event", "user-modify", $acctName) == 0) {
|
unless (system("/sbin/e-smith/signal-event", "user-modify", $acctName) == 0) {
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
return $c->l('usr_CANNOT_MODIFY_USER');
|
return $c->l('usr_CANNOT_MODIFY_USER');
|
||||||
}
|
}
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
} ## end if ($acctType eq "user")
|
} ## end if ($acctType eq "user")
|
||||||
return 'OK';
|
return 'OK';
|
||||||
} ## end sub modify_user
|
} ## end sub modify_user
|
||||||
@@ -707,10 +699,10 @@ sub create_user {
|
|||||||
$acctName = $1;
|
$acctName = $1;
|
||||||
|
|
||||||
if (system("/sbin/e-smith/signal-event", "user-create", $acctName)) {
|
if (system("/sbin/e-smith/signal-event", "user-create", $acctName)) {
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
return $c->l("usr_ERR_OCCURRED_CREATING");
|
return $c->l("usr_ERR_OCCURRED_CREATING");
|
||||||
}
|
}
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
$c->set_groups();
|
$c->set_groups();
|
||||||
return 'OK';
|
return 'OK';
|
||||||
} ## end sub create_user
|
} ## end sub create_user
|
||||||
@@ -735,7 +727,7 @@ sub modify_admin {
|
|||||||
$acct->merge_props(%newProperties);
|
$acct->merge_props(%newProperties);
|
||||||
undef $adb;
|
undef $adb;
|
||||||
my $status = system("/sbin/e-smith/signal-event", "user-modify-admin", 'admin');
|
my $status = system("/sbin/e-smith/signal-event", "user-modify-admin", 'admin');
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
|
|
||||||
if ($status == 0) {
|
if ($status == 0) {
|
||||||
return 'OK';
|
return 'OK';
|
||||||
@@ -759,8 +751,7 @@ sub system_validate_password {
|
|||||||
sub system_check_password {
|
sub system_check_password {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $pass1 = shift;
|
my $pass1 = shift;
|
||||||
use esmith::ConfigDB;
|
my $conf = esmith::ConfigDB::UTF8->open();
|
||||||
my $conf = esmith::ConfigDB->open();
|
|
||||||
my ($check_type, $rec);
|
my ($check_type, $rec);
|
||||||
|
|
||||||
if ($conf) {
|
if ($conf) {
|
||||||
@@ -797,7 +788,7 @@ sub system_change_password {
|
|||||||
if ($result == 0) {
|
if ($result == 0) {
|
||||||
return 'OK';
|
return 'OK';
|
||||||
} else {
|
} else {
|
||||||
return $c->l("Error occurred while modifying password for admin.", 'First');
|
return $c->l("Error occurred while modifying password for admin.");
|
||||||
}
|
}
|
||||||
} ## end sub system_change_password
|
} ## end sub system_change_password
|
||||||
1
|
1
|
||||||
@@ -12,16 +12,16 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Mojo::Base 'Mojolicious::Controller';
|
use Mojo::Base 'Mojolicious::Controller';
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
use esmith::ConfigDB;
|
use esmith::ConfigDB::UTF8;
|
||||||
use esmith::AccountsDB;
|
use esmith::AccountsDB::UTF8;
|
||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw( theme_list init_session validate_password );
|
use SrvMngr qw( theme_list init_session validate_password );
|
||||||
#our $cdb = esmith::ConfigDB->open_ro || die "Couldn't open configuration db";
|
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
my %pwd_datas = ();
|
my %pwd_datas = ();
|
||||||
|
my $title = $c->l("pwd_ACCOUNT_PASSWORD_CHANGE");
|
||||||
|
|
||||||
if ($c->is_logged_in) {
|
if ($c->is_logged_in) {
|
||||||
$pwd_datas{Account} = $c->session->{username};
|
$pwd_datas{Account} = $c->session->{username};
|
||||||
@@ -35,7 +35,7 @@ sub main {
|
|||||||
|
|
||||||
# request already treated or outdated
|
# request already treated or outdated
|
||||||
if ($c->pwdrst->{$name}{confirmed} != 1 or $c->pwdrst->{$name}{date} < time()) {
|
if ($c->pwdrst->{$name}{confirmed} != 1 or $c->pwdrst->{$name}{date} < time()) {
|
||||||
$mess = $c->l('use_INVALID_REQUEST') . ' -step 1-';
|
$mess = $c->l('pwd_INVALID_REQUEST') . ' -step 1-';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($mess) {
|
if ($mess) {
|
||||||
@@ -48,7 +48,7 @@ sub main {
|
|||||||
$pwd_datas{Account} = $name;
|
$pwd_datas{Account} = $name;
|
||||||
$pwd_datas{trt} = 'RESET';
|
$pwd_datas{trt} = 'RESET';
|
||||||
$pwd_datas{jwt} = $jwt;
|
$pwd_datas{jwt} = $jwt;
|
||||||
$c->flash(success => $c->l('use_OK_FOR_RESET'));
|
$c->flash(success => $c->l('pwd_OK_FOR_RESET'));
|
||||||
} ## end else [ if ($c->is_logged_in) ]
|
} ## end else [ if ($c->is_logged_in) ]
|
||||||
$c->stash(pwd_datas => \%pwd_datas);
|
$c->stash(pwd_datas => \%pwd_datas);
|
||||||
$c->render('userpassword');
|
$c->render('userpassword');
|
||||||
@@ -75,7 +75,7 @@ sub change_password {
|
|||||||
|
|
||||||
# request already treated or outdated
|
# request already treated or outdated
|
||||||
if ($c->pwdrst->{$name}{confirmed} != 2 or $c->pwdrst->{$name}{date} < time()) {
|
if ($c->pwdrst->{$name}{confirmed} != 2 or $c->pwdrst->{$name}{date} < time()) {
|
||||||
$mess = $c->l('use_INVALID_REQUEST') . ' -step 2-';
|
$mess = $c->l('pwd_INVALID_REQUEST') . ' -step 2-';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$name or $c->is_logged_in or $name ne $acctName) {
|
if (!$name or $c->is_logged_in or $name ne $acctName) {
|
||||||
@@ -159,9 +159,9 @@ sub change_password {
|
|||||||
sub reset_password {
|
sub reset_password {
|
||||||
my ($c, $trt, $user, $password, $oldpassword) = @_;
|
my ($c, $trt, $user, $password, $oldpassword) = @_;
|
||||||
my $ret;
|
my $ret;
|
||||||
return $c->l('usr_TAINTED_USER') unless (($user) = ($user =~ /^(\w[\-\w_\.]*)$/));
|
return $c->l('pwd_TAINTED_USER') unless (($user) = ($user =~ /^(\w[\-\w_\.]*)$/));
|
||||||
$user = $1;
|
$user = $1;
|
||||||
my $adb = esmith::AccountsDB->open();
|
my $adb = esmith::AccountsDB::UTF8->open();
|
||||||
my $acct = $adb->get($user);
|
my $acct = $adb->get($user);
|
||||||
return $c->l('NO_SUCH_USER', $user) unless ($acct->prop('type') eq 'user');
|
return $c->l('NO_SUCH_USER', $user) unless ($acct->prop('type') eq 'user');
|
||||||
$ret = esmith::util::setUserPasswordRequirePrevious($user, $oldpassword, $password) if $trt ne 'RESET';
|
$ret = esmith::util::setUserPasswordRequirePrevious($user, $oldpassword, $password) if $trt ne 'RESET';
|
||||||
@@ -171,10 +171,10 @@ sub reset_password {
|
|||||||
undef $adb;
|
undef $adb;
|
||||||
|
|
||||||
if (system("/sbin/e-smith/signal-event", "password-modify", $user)) {
|
if (system("/sbin/e-smith/signal-event", "password-modify", $user)) {
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
return $c->l("usr_ERR_OCCURRED_MODIFYING_PASSWORD");
|
return $c->l("pwd_ERR_OCCURRED_MODIFYING_PASSWORD");
|
||||||
}
|
}
|
||||||
$adb = esmith::AccountsDB->open();
|
$adb = esmith::AccountsDB::UTF8->open();
|
||||||
return 'OK';
|
return 'OK';
|
||||||
} ## end sub reset_password
|
} ## end sub reset_password
|
||||||
|
|
||||||
@@ -194,10 +194,10 @@ sub check_password {
|
|||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $password = shift;
|
my $password = shift;
|
||||||
my $strength;
|
my $strength;
|
||||||
my $cdb = esmith::ConfigDB->open_ro || die "Couldn't open configuration db";
|
my $cdb = esmith::ConfigDB::UTF8->open_ro || die "Couldn't open configuration db";
|
||||||
my $rec = $cdb->get('passwordstrength');
|
my $rec = $cdb->get('passwordstrength');
|
||||||
$strength = ($rec ? ($rec->prop('Users') || 'none') : 'none');
|
$strength = ($rec ? ($rec->prop('Users') || 'none') : 'none');
|
||||||
return validate_password($c, $strength, $password);
|
return validate_password($c, $strength, $password);
|
||||||
} ## end sub check_password
|
} ## end sub check_password
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@@ -15,14 +15,15 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
use esmith::ConfigDB;
|
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use HTML::Entities;
|
use HTML::Entities;
|
||||||
use SrvMngr qw(gen_locale_date_string);
|
use SrvMngr qw(gen_locale_date_string);
|
||||||
use File::Temp qw(tempfile);
|
use File::Temp qw(tempfile);
|
||||||
use constant TRUE => 1;
|
use constant TRUE => 1;
|
||||||
use constant FALSE => 0;
|
use constant FALSE => 0;
|
||||||
our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
use esmith::ConfigDB::UTF8;
|
||||||
|
|
||||||
|
our $cdb;
|
||||||
our @logfiles = (); # with array
|
our @logfiles = (); # with array
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
@@ -31,7 +32,9 @@ sub main {
|
|||||||
my %log_datas = ();
|
my %log_datas = ();
|
||||||
my $title = $c->l('log_FORM_TITLE');
|
my $title = $c->l('log_FORM_TITLE');
|
||||||
my $notif = '';
|
my $notif = '';
|
||||||
$log_datas{default_op} = ($cdb->get('viewlogfiles')->prop('DefaultOperation')) || 'view';
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
|
my $viewlog = $cdb->get('viewlogfiles');
|
||||||
|
$log_datas{default_op} = ($viewlog ? $viewlog->prop('DefaultOperation') : undef) || 'view';
|
||||||
$c->stash(title => $title, notif => $notif, log_datas => \%log_datas);
|
$c->stash(title => $title, notif => $notif, log_datas => \%log_datas);
|
||||||
$c->render(template => 'viewlogfiles');
|
$c->render(template => 'viewlogfiles');
|
||||||
} ## end sub main
|
} ## end sub main
|
||||||
@@ -230,6 +233,7 @@ sub showlogFile {
|
|||||||
sub download_logFile {
|
sub download_logFile {
|
||||||
my ($c, %log_datas) = @_;
|
my ($c, %log_datas) = @_;
|
||||||
my $fullpath = "/var/log/$log_datas{filename}";
|
my $fullpath = "/var/log/$log_datas{filename}";
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
|
|
||||||
# Save this information for later.
|
# Save this information for later.
|
||||||
$cdb->get('viewlogfiles')->merge_props('DefaultOperation', $log_datas{operation});
|
$cdb->get('viewlogfiles')->merge_props('DefaultOperation', $log_datas{operation});
|
||||||
|
|||||||
@@ -13,11 +13,13 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session);
|
use SrvMngr qw(theme_list init_session);
|
||||||
our $db = esmith::ConfigDB->open || die "Couldn't open config db";
|
use esmith::ConfigDB::UTF8;
|
||||||
|
our $db ;
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
my %wkg_datas = ();
|
my %wkg_datas = ();
|
||||||
my $title = $c->l('wkg_FORM_TITLE');
|
my $title = $c->l('wkg_FORM_TITLE');
|
||||||
my $modul = '';
|
my $modul = '';
|
||||||
@@ -32,6 +34,7 @@ sub main {
|
|||||||
sub do_update {
|
sub do_update {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
|
$db = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
my $result = "";
|
my $result = "";
|
||||||
my $workgroup = ($c->param('Workgroup') || 'no');
|
my $workgroup = ($c->param('Workgroup') || 'no');
|
||||||
my $servername = ($c->param('ServerName') || 'WS');
|
my $servername = ($c->param('ServerName') || 'WS');
|
||||||
@@ -76,4 +79,4 @@ sub validate2_workgroup {
|
|||||||
return $c->l('INVALID_WORKGROUP_MATCHES_SERVERNAME') if ($servername eq $workgroup);
|
return $c->l('INVALID_WORKGROUP_MATCHES_SERVERNAME') if ($servername eq $workgroup);
|
||||||
return ('OK');
|
return ('OK');
|
||||||
} ## end sub validate2_workgroup
|
} ## end sub validate2_workgroup
|
||||||
1;
|
1;
|
||||||
@@ -3,7 +3,13 @@ package SrvMngr::Controller::Yum;
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# heading : System
|
# heading : System
|
||||||
# description : Software installer
|
# description : Software installer
|
||||||
# navigation : 4000 300
|
# navigation : 4000 500
|
||||||
|
|
||||||
|
#$if_admin->get('/yum')->to('yum#main')->name('yum');
|
||||||
|
#$if_admin->post('/yum')->to('yum#do_display')->name('yumd1');
|
||||||
|
#$if_admin->get('/yumd')->to('yum#do_display')->name('yumd');
|
||||||
|
#$if_admin->post('/yumd')->to('yum#do_update')->name('yumu');
|
||||||
|
|
||||||
#
|
#
|
||||||
# routes : end
|
# routes : end
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
@@ -13,28 +19,30 @@ use Mojo::Base 'Mojolicious::Controller';
|
|||||||
use Locale::gettext;
|
use Locale::gettext;
|
||||||
use SrvMngr::I18N;
|
use SrvMngr::I18N;
|
||||||
use SrvMngr qw(theme_list init_session ip_number_or_blank);
|
use SrvMngr qw(theme_list init_session ip_number_or_blank);
|
||||||
use esmith::ConfigDB;
|
# dnf_* should remain ASCII; yum_repositories do not need to be UTF-8
|
||||||
|
use esmith::ConfigDB::UTF8;
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
our $cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
our $cdb;
|
||||||
my $dnf_status_file = '/var/cache/dnf/dnf.status';
|
my $dnf_status_file = '/var/cache/dnf/dnf.status';
|
||||||
|
|
||||||
#use File::stat;
|
#use File::stat;
|
||||||
our %dbs;
|
our %dbs;
|
||||||
|
|
||||||
for (qw(available installed updates)) {
|
|
||||||
$dbs{$_} = esmith::ConfigDB->open_ro("dnf_$_")
|
|
||||||
or die "Couldn't open dnf_$_ DB\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
for (qw(repositories)) {
|
|
||||||
$dbs{$_} = esmith::ConfigDB->open("yum_$_")
|
|
||||||
or die "Couldn't open yum_$_ DB\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
|
for (qw(available installed updates)) {
|
||||||
|
$dbs{$_} = esmith::ConfigDB::UTF8->open_ro("dnf_$_")
|
||||||
|
or die "Couldn't open dnf_$_ DB\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (qw(repositories)) {
|
||||||
|
$dbs{$_} = esmith::ConfigDB::UTF8->open("yum_$_")
|
||||||
|
or die "Couldn't open yum_$_ DB\n";
|
||||||
|
}
|
||||||
my %yum_datas = ();
|
my %yum_datas = ();
|
||||||
my $title = $c->l('yum_FORM_TITLE');
|
my $title = $c->l('yum_FORM_TITLE');
|
||||||
my $dest = 'yum';
|
my $dest = 'yum';
|
||||||
@@ -60,6 +68,16 @@ sub do_display {
|
|||||||
my $c = shift;
|
my $c = shift;
|
||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my $trt = ($c->param('trt') || 'STAT');
|
my $trt = ($c->param('trt') || 'STAT');
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
|
for (qw(available installed updates)) {
|
||||||
|
$dbs{$_} = esmith::ConfigDB::UTF8->open_ro("dnf_$_")
|
||||||
|
or die "Couldn't open dnf_$_ DB\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (qw(repositories)) {
|
||||||
|
$dbs{$_} = esmith::ConfigDB::UTF8->open("yum_$_")
|
||||||
|
or die "Couldn't open yum_$_ DB\n";
|
||||||
|
}
|
||||||
my %yum_datas = ();
|
my %yum_datas = ();
|
||||||
my $title = $c->l('yum_FORM_TITLE');
|
my $title = $c->l('yum_FORM_TITLE');
|
||||||
my ($notif, $dest) = '';
|
my ($notif, $dest) = '';
|
||||||
@@ -110,6 +128,16 @@ sub do_update {
|
|||||||
$c->app->log->info($c->log_req);
|
$c->app->log->info($c->log_req);
|
||||||
my $rt = $c->current_route;
|
my $rt = $c->current_route;
|
||||||
my $trt = $c->param('trt');
|
my $trt = $c->param('trt');
|
||||||
|
$cdb = esmith::ConfigDB::UTF8->open || die "Couldn't open config db";
|
||||||
|
for (qw(available installed updates)) {
|
||||||
|
$dbs{$_} = esmith::ConfigDB::UTF8->open_ro("dnf_$_")
|
||||||
|
or die "Couldn't open dnf_$_ DB\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (qw(repositories)) {
|
||||||
|
$dbs{$_} = esmith::ConfigDB::UTF8->open("yum_$_")
|
||||||
|
or die "Couldn't open yum_$_ DB\n";
|
||||||
|
}
|
||||||
my %yum_datas = ();
|
my %yum_datas = ();
|
||||||
$yum_datas{trt} = $trt;
|
$yum_datas{trt} = $trt;
|
||||||
my $title = $c->l('yum_FORM_TITLE');
|
my $title = $c->l('yum_FORM_TITLE');
|
||||||
@@ -453,4 +481,4 @@ sub show_yum_log {
|
|||||||
my $yum_log = $cdb->get_prop_and_delete('dnf', 'LogFile');
|
my $yum_log = $cdb->get_prop_and_delete('dnf', 'LogFile');
|
||||||
return $out;
|
return $out;
|
||||||
} ## end sub show_yum_log
|
} ## end sub show_yum_log
|
||||||
1;
|
1;
|
||||||
@@ -1,5 +1,12 @@
|
|||||||
'bac_No suitable local devices found' => 'No suitable local devices found',
|
#
|
||||||
'bac_BACKUP_TITLE' => 'Backup or restore server data',
|
# Lex file for Backup generated on 2025-07-17 09:52:30
|
||||||
|
#
|
||||||
|
'bac_ALL_BACKUPS' => 'All backups',
|
||||||
|
'bac_AM' => 'AM',
|
||||||
|
'bac_AM/PM' => 'AM/PM',
|
||||||
|
'bac_ANOTHER_RESTORE_IN_PROGRESS' => 'Another restore is in progress. Please try again later.',
|
||||||
|
'bac_BACKUP_CHOICE' => 'Selecting files to display',
|
||||||
|
'bac_BACKUP_CONFIG_STATUS' => 'Backup configuration and status',
|
||||||
'bac_BACKUP_DESC' => '<P>The server provides two ways to back up and restore
|
'bac_BACKUP_DESC' => '<P>The server provides two ways to back up and restore
|
||||||
your server: using your local desktop or a tape drive.</P>
|
your server: using your local desktop or a tape drive.</P>
|
||||||
<P>The first method creates a copy of your server configuration and user
|
<P>The first method creates a copy of your server configuration and user
|
||||||
@@ -46,127 +53,125 @@ copy it to a local removable disk such as a USB disk.</P>
|
|||||||
<P>All backup methods allow you to restore your configuration and user
|
<P>All backup methods allow you to restore your configuration and user
|
||||||
data files. Workstation backup provides individual file restore. <b>Ideally,
|
data files. Workstation backup provides individual file restore. <b>Ideally,
|
||||||
full restore should be performed on a freshly installed server</b>.</P>',
|
full restore should be performed on a freshly installed server</b>.</P>',
|
||||||
'bac_BACKUP_CONFIG_STATUS' => 'Backup configuration and status',
|
'bac_BACKUP_DESKTOP_TOO_BIG' => 'Your server has too much data for a reliable backup to desktop.',
|
||||||
|
'bac_BACKUP_FILE_INCOMPLETE' => 'The backup file was incomplete',
|
||||||
|
'bac_BACKUP_TITLE' => 'Backup or restore server data',
|
||||||
'bac_BACKUPS_RUN_AT' => 'Regular tape backups will run at: ',
|
'bac_BACKUPS_RUN_AT' => 'Regular tape backups will run at: ',
|
||||||
'bac_REMINDER_MESSAGE_AT' => 'Reminder messages will be sent at: ',
|
'bac_BETWEEN_0_AND_12' => 'Please choose an hour between 0 and 12.',
|
||||||
'bac_TAPE_BACKUPS' => 'Tape backups are ',
|
'bac_BETWEEN_0_AND_59' => 'Please choose a minute between 0 and 59.',
|
||||||
|
'bac_CHECK_INTEGRITY_WARNING' => 'Warning : For large backups, checking integrity may be a long task and should be made with daily workstation backup disabled.',
|
||||||
|
'bac_CHECK_TO_VERIFY_FULL_RESTORE' => 'Check here to test integrity of all backups needed for a full restore with the selected backup ',
|
||||||
|
'bac_cifs' => 'cifs',
|
||||||
|
'bac_COMPRESSION_LEVEL' => 'Backup compression level ~[0-9~]',
|
||||||
|
'bac_CONFIGURATION_TO_BE_DONE' => 'Please configure the backup settings.',
|
||||||
|
'bac_CONFIGURE_TAPE_BACKUP' => 'Configure tape backup',
|
||||||
|
'bac_CONFIGURE_WORKSTN_BACKUP' => 'Configure Workstation Backup',
|
||||||
|
'bac_CONFIGURE_WORKSTN_BACKUP_DESC' => 'You can set the number of
|
||||||
|
successive backup sets to keep on the workstation, with automatic rotation.
|
||||||
|
Each set may contain saved data for several consecutive days.
|
||||||
|
In this case first backup of the set is full backup, others daily backups are
|
||||||
|
incremental. You can also set a time limit for each backup session or for incremental
|
||||||
|
backups only. When this limit occurs, backup is cleanly stopped and the next
|
||||||
|
incremental backup will safely continue with unsaved and modified datas.',
|
||||||
|
'bac_COULD_NOT_DECODE' => 'Could not decode backup file: ',
|
||||||
|
'bac_COULD_NOT_EXEC_PIPELINE' => 'Could not execute backup pipeline: ',
|
||||||
|
'bac_COULD_NOT_FORK' => 'Could not fork: ',
|
||||||
'bac_DESKTOP_BACKUP' => 'Backup to desktop',
|
'bac_DESKTOP_BACKUP' => 'Backup to desktop',
|
||||||
'bac_DESKTOP_RESTORE' => 'Restore from desktop',
|
'bac_DESKTOP_RESTORE' => 'Restore from desktop',
|
||||||
|
'bac_DESKTOP_RESTORE_DESC' => 'This process will upload a server backup file from your local desktop to your server and restore the configuration and user data files. <B>The restore should be performed on a freshly installed server</B>.',
|
||||||
'bac_DESKTOP_VERIFY' => 'Verify desktop backup file',
|
'bac_DESKTOP_VERIFY' => 'Verify desktop backup file',
|
||||||
'bac_TAPE_CONFIGURE' => 'Configure tape backup',
|
'bac_DOW' => 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Everyday',
|
||||||
'bac_TAPE_RESTORE' => 'Restore from tape',
|
'bac_ENABLE_DISABLE_TAPE' => 'Enable/Disable Nightly Tape Backup',
|
||||||
'bac_RESTORE_IN_PROGRESS_BEGAN_AT' => 'A system restore is in progress. It began at: ',
|
'bac_ENABLE_DISABLE_WORKSTN' => 'Enable/Disable Daily Workstation Backup',
|
||||||
'bac_REFRESH_THIS_DISPLAY' => 'Refresh this display',
|
'bac_ENABLE_TAPE_BACKUP' => 'Enable tape backup',
|
||||||
'bac_CONFIGURE_TAPE_BACKUP' => 'Configure tape backup',
|
'bac_ENABLE_WORKSTN_BACKUP' => 'Enable Workstation Backup',
|
||||||
'bac_RESTORE_COMPLETED' => 'A system restore has completed',
|
'bac_ERR_ALREADY_MOUNTED' => 'Backup directory is already mounted',
|
||||||
'bac_STARTED_AT' => 'It began at: ',
|
'bac_ERR_CONF_BACKUP' => 'Error occurred during conf-backup event.',
|
||||||
'bac_FINISHED_AT' => 'and finished at: ',
|
'bac_ERR_DAR_CATALOG' => 'Error when using Dar catalog',
|
||||||
'bac_YOU_MUST_REBOOT' => 'You must reboot the server to activate any configuration changes that were
|
'bac_ERR_EXTRACT' => 'Error when extracting with Dar',
|
||||||
made as a result of this restore.',
|
'bac_ERR_INVALID_COMPRESSION' => 'Compression level must be set between 0 (no compression) and 9 (maximum compression)',
|
||||||
'bac_REBOOT' => 'Reboot',
|
'bac_ERR_INVALID_FILES_IN_SET_NUMBER' => 'This number must be 1 or greater. First backup in set is <b>full</b> others are <b>incrementals</b>',
|
||||||
'bac_SELECT_AN_ACTION' => 'Select an action',
|
'bac_ERR_INVALID_FOLDER' => 'Invalid share name',
|
||||||
'bac_X_BACKUP_OR_RESTORE' => 'X Backup or restore server data',
|
'bac_ERR_INVALID_HOUR' => 'Error: invalid backup hour: ',
|
||||||
|
'bac_ERR_INVALID_LOGIN' => 'Invalid Login',
|
||||||
|
'bac_ERR_INVALID_MINUTE' => 'Error: invalid backup minute: ',
|
||||||
|
'bac_ERR_INVALID_PASSWORD' => 'Invalid Password',
|
||||||
|
'bac_ERR_INVALID_REMINDER_HOUR' => 'Error: invalid reminder hour: ',
|
||||||
|
'bac_ERR_INVALID_REMINDER_MINUTE' => 'Error: invalid reminder minute: ',
|
||||||
|
'bac_ERR_INVALID_SELDATE' => 'Date format is invalid, must be ~[~[~[yyyy/~]mm/~]dd-~]hh:mm~[:ss~]. ie: 2005/12/31-08:23:32 or
|
||||||
|
10-08:32 or 08:32',
|
||||||
|
'bac_ERR_INVALID_SETS_NUMBER' => 'Sets number must be 1 or greater',
|
||||||
|
'bac_ERR_INVALID_TIMEOUT' => 'Maximum backup time must be set between 1 and 24 hours',
|
||||||
|
'bac_ERR_INVALID_WORKSTN' => 'Invalid Workstation IP or Hostname ',
|
||||||
|
'bac_ERR_MOUNTING_SMBSHARE' => 'Unable to mount workstation shared folder',
|
||||||
|
'bac_ERR_NO_FULL_BACKUP' => 'Aborting restore because needed full backup is missing or unreadable.',
|
||||||
|
'bac_ERR_NO_HOST_DIR' => 'No directory for your host in shared folder. Maybe your host name is different from backup ones',
|
||||||
|
'bac_ERR_NO_INC_BACKUP' => 'Aborting restore because the set has missing or unreadable incremental backup number',
|
||||||
|
'bac_ERR_NO_MOUNTED_DISK' => 'Error : No mounted disk available. Please mount a disk or select another type of workstation backup.',
|
||||||
|
'bac_ERR_NO_USB_DISK' => 'Error : No removable disk available. Please connect a removable disk or select another type of workstation backup.',
|
||||||
|
'bac_ERR_NOT_MOUNTED' => 'Backup directory is not mounted',
|
||||||
|
'bac_ERR_POST_BACKUP' => 'Error occurred during post-backup actions.',
|
||||||
'bac_ERR_PRE_BACKUP' => 'Error occurred during pre-backup actions.',
|
'bac_ERR_PRE_BACKUP' => 'Error occurred during pre-backup actions.',
|
||||||
'bac_ERR_PRE_RESTORE' => 'Error occurred during pre-restore actions.',
|
'bac_ERR_PRE_RESTORE' => 'Error occurred during pre-restore actions.',
|
||||||
'bac_ERR_POST_BACKUP' => 'Error occurred during post-backup actions.',
|
'bac_ERR_READING_FILE' => 'There was an error in reading the backup file.',
|
||||||
'bac_RESTORE_SERVER_CONFIG' => 'Restore server configuration',
|
'bac_ERR_RESTORING_FROM_TAPE' => 'Error occurred restoring files from tape.',
|
||||||
'bac_DESKTOP_RESTORE_DESC' => 'This process will upload a server backup file from your local desktop to your server and restore the configuration and user data files. <B>The restore should be performed on a freshly installed server</B>.',
|
'bac_ERR_RESTORING_FROM_WORKSTN' => 'Error occurred restoring files from workstation.',
|
||||||
|
'bac_ERR_RESTORING_GID' => 'Error occurred while restoring gid of "www"',
|
||||||
|
'bac_ERR_RESTORING_INITIAL_GRP' => 'Error occurred while restoring initial group of "www".',
|
||||||
|
'bac_ERR_UPDATING_CONF_AFTER_TAPE_RESTORE' => 'Error occurred while updating system configuration after tape
|
||||||
|
restore.',
|
||||||
|
'bac_ERR_UPDATING_CONF_AFTER_WORKSTN_RESTORE' => 'Error occurred while updating system configuration after workstation
|
||||||
|
restore.',
|
||||||
|
'bac_ERR_WHILE_UNMOUNTING' => 'Error occurs when unmounting distant share',
|
||||||
|
'bac_ERROR_READING_FILE' => 'Error while reading files from',
|
||||||
|
'bac_ERROR_WHEN_TESTING_REMOTE_SERVER' => 'The parameters have been saved, however the remote host is not reachable, please check your settings.',
|
||||||
|
'bac_FILE_TO_RESTORE' => 'Backup file to restore from',
|
||||||
|
'bac_FILES_HAVE_BEEN_RESTORED' => 'The following files and directories have been restored:',
|
||||||
|
'bac_FILES_IN_BACKUP' => 'The following files are considered in the backup :',
|
||||||
|
'bac_FILTER_EXPRESSION' => 'Names filtered by',
|
||||||
|
'bac_FINISHED_AT' => 'and finished at: ',
|
||||||
'bac_FREE_SPACE' => 'You have approximately [_1] free space on the server.
|
'bac_FREE_SPACE' => 'You have approximately [_1] free space on the server.
|
||||||
Check that desktop backup file is less than [_2] before
|
Check that desktop backup file is less than [_2] before
|
||||||
commencing the restore.',
|
commencing the restore.',
|
||||||
'bac_MUST_REBOOT_AFTER_RESTORE' => 'After the restore completes you must reboot the server.',
|
'bac_FULL_ONLY_ON' => 'Full backup is allowed on',
|
||||||
'bac_FILE_TO_RESTORE' => 'Backup file to restore from',
|
'bac_HOURS' => 'hours.',
|
||||||
'bac_VERIFY_BACKUP_DESC' => '
|
'bac_INC_ONLY_TIMEOUT' => 'Don"t timeout full backup sessions',
|
||||||
<p>This option will display the names of all files
|
|
||||||
in a previously created desktop backup file. You
|
|
||||||
can use this option to verify the contents of the
|
|
||||||
backup file.</p> ',
|
|
||||||
'bac_SELECT_BACKUP_FILE' => 'Select backup file',
|
|
||||||
'bac_VERIFY' => 'Verify',
|
|
||||||
'bac_RESTORE_CANNOT_PROCEED' => 'Unable to proceed with restore of server configuration',
|
|
||||||
'bac_ANOTHER_RESTORE_IN_PROGRESS' => 'Another restore is in progress. Please try again later.',
|
|
||||||
'bac_RESTORE_IN_PROGRESS' => 'Restore in progress',
|
|
||||||
'bac_RESTORE_IN_PROGRESS_DESC' => 'After the restore completes you must reboot the server. Your restore is
|
|
||||||
complete when the words "Restore complete" appear at the bottom of your screen.
|
|
||||||
',
|
|
||||||
'bac_FILES_HAVE_BEEN_RESTORED' => 'The following files and directories have been restored:',
|
|
||||||
'bac_RESTORE_FAILED_MSG' => 'Restore failed! There was an error in reading the backup file.',
|
|
||||||
'bac_RESTORE_COMPLETE' => 'Restore complete',
|
|
||||||
'bac_ERR_RESTORING_GID' => 'Error occurred while restoring gid of \'www\'',
|
|
||||||
'bac_ERR_RESTORING_INITIAL_GRP' => 'Error occurred while restoring initial group of \'www\'.',
|
|
||||||
'bac_RESTORE_FAILED' => 'Restore failed! The backup file was incomplete.',
|
|
||||||
'bac_COULD_NOT_EXEC_PIPELINE' => 'Could not execute backup pipeline: ',
|
|
||||||
'bac_COULD_NOT_DECODE' => 'Could not decode backup file: ',
|
|
||||||
'bac_FILES_IN_BACKUP' => 'The following files are considered in the backup :',
|
|
||||||
'bac_VERIFY_COMPLETE' => 'Verification is complete',
|
|
||||||
'bac_BACKUP_FILE_INCOMPLETE' => 'The backup file was incomplete',
|
|
||||||
'bac_ERR_READING_FILE' => 'There was an error in reading the backup file.',
|
|
||||||
'bac_ENABLE_DISABLE_TAPE' => 'Enable/Disable Nightly Tape Backup',
|
|
||||||
'bac_TAPE_CONFIG_DESC' => '<p>Select whether you wish to enable nightly backups. Then indicate the
|
|
||||||
desired times for the backup and the load tape reminder.</p> <p>The tape
|
|
||||||
backup requires a supported tape drive. A warning message will be sent to
|
|
||||||
the administrator at the designated reminder time if the tape drive is
|
|
||||||
empty.</p>',
|
|
||||||
'bac_ENABLE_TAPE_BACKUP' => 'Enable tape backup',
|
|
||||||
'bac_TAPE_BACKUP_TIME' => 'Tape backup time of day (hour/min)',
|
|
||||||
'bac_LOAD_TAPE_REMINDER_TIME' => 'Load tape reminder time of day (hour/min)',
|
'bac_LOAD_TAPE_REMINDER_TIME' => 'Load tape reminder time of day (hour/min)',
|
||||||
'bac_AM/PM' => 'AM/PM',
|
'bac_local removable disk' => 'Local removable disk',
|
||||||
'bac_AM' => 'AM',
|
'bac_LOGIN' => 'Login is ',
|
||||||
|
'bac_Mounted disk' => 'Mounted disk',
|
||||||
|
'bac_MUST_REBOOT_AFTER_RESTORE' => 'After the restore completes you must reboot the server.',
|
||||||
|
'bac_nfs' => 'nfs',
|
||||||
|
'bac_No suitable local devices found' => 'No suitable local devices found',
|
||||||
|
'bac_NO_BACKUPS_TO_RESTORE' => 'There is no backup set on configured workstation shared folder. Verify your configuration settings.',
|
||||||
|
'bac_NO_UID_FOR_NAME' => 'Could not get uid for user named: ',
|
||||||
|
'bac_NOW_RESTORING_FROM_TAPE' => 'Your server configuration and user data
|
||||||
|
files are now being restored from tape.',
|
||||||
|
'bac_NOW_RESTORING_FROM_WORKSTN' => 'Your server configuration and user data
|
||||||
|
files are now being restored from workstation shared folder.',
|
||||||
|
'bac_NUMBER_OF_FILES_IN_SET' => 'Daily backups in each set',
|
||||||
|
'bac_NUMBER_OF_SETS' => 'Number of rotating backup sets',
|
||||||
|
'bac_PAGE_REFRESH_IN' => 'This page will refresh to the status display in [_1] seconds, or
|
||||||
|
click <a href="/server-manager/cgi-bin/backup">here</a>.',
|
||||||
|
'bac_PASSWORD' => 'Password is ',
|
||||||
'bac_PM' => 'PM',
|
'bac_PM' => 'PM',
|
||||||
'bac_UPDATE_CONF' => 'Update',
|
'bac_READ_COMPLETE' => 'You can choose all the directories and files you want to restore in the displayed list
|
||||||
'bac_UPDATING_TAPE_CONF' => 'Updating tape backup configuration',
|
(use ctrl or shift for multiple selection). <br/> <b>Warning :</b> If you select a directory,
|
||||||
'bac_ERR_INVALID_HOUR' => 'Error: invalid backup hour: ',
|
all contained files and directories will be restored.<p/>
|
||||||
'bac_BETWEEN_0_AND_12' => 'Please choose an hour between 0 and 12.',
|
By default the most recent version of selected files is restored, but if you specify a date
|
||||||
'bac_ERR_INVALID_MINUTE' => 'Error: invalid backup minute: ',
|
in the format <i>~[~[~[yyyy/~]mm/~]dd-~]hh:mm~[:ss~]</i> the process
|
||||||
'bac_BETWEEN_0_AND_59' => 'Please choose a minute between 0 and 59.',
|
will restore only the most recent version modified <b>before the given date</b>.',
|
||||||
'bac_ERR_INVALID_REMINDER_HOUR' => 'Error: invalid reminder hour: ',
|
'bac_REFRESH_THIS_DISPLAY' => 'Refresh this display',
|
||||||
'bac_ERR_INVALID_REMINDER_MINUTE' => 'Error: invalid reminder minute: ',
|
'bac_REMINDER_MESSAGE_AT' => 'Reminder messages will be sent at: ',
|
||||||
'bac_ERR_CONF_BACKUP' => 'Error occurred during conf-backup event.',
|
'bac_RESTORE_CANNOT_PROCEED' => 'Unable to proceed with restore of server configuration',
|
||||||
'bac_SUCCESSFULLY_ENABLED_TAPE' => 'Successfully enabled tape backups',
|
'bac_RESTORE_COMPLETE' => 'Restore complete',
|
||||||
'bac_WITH_BACKUP_TIME' => 'with backup time: ',
|
'bac_RESTORE_COMPLETED' => 'A system restore has completed',
|
||||||
'bac_WITH_REMINDER_TIME' => 'and load tape reminder time: ',
|
|
||||||
'bac_SUCCESSFULLY_DISABLED' => 'Successfully disabled tape backups',
|
|
||||||
'bac_RESTORE_CONF_FROM_TAPE' => 'Restore server configuration from tape backup',
|
'bac_RESTORE_CONF_FROM_TAPE' => 'Restore server configuration from tape backup',
|
||||||
'bac_RESTORE_CONF_FROM_TAPE_DESC' => '<P>This process will restore the configuration and user data files from a
|
'bac_RESTORE_CONF_FROM_TAPE_DESC' => '<P>This process will restore the configuration and user data files from a
|
||||||
server tape backup. <B>The restore should be performed on a freshly installed server</B>.</P>
|
server tape backup. <B>The restore should be performed on a freshly installed server</B>.</P>
|
||||||
<P>Ensure that you have loaded the desired backup tape into the tape drive
|
<P>Ensure that you have loaded the desired backup tape into the tape drive
|
||||||
before proceeding.</P>
|
before proceeding.</P>
|
||||||
<P>After the restore completes you must reboot the server.</P>',
|
<P>After the restore completes you must reboot the server.</P>',
|
||||||
'bac_RESTORE_FROM_TAPE' => 'Restore From Tape',
|
|
||||||
'bac_UNABLE_TO_RESTORE_CONF' => 'Unable to restore server configuration',
|
|
||||||
'bac_RESTORING_FROM_TAPE' => 'Restoring From Tape',
|
|
||||||
'bac_NOW_RESTORING_FROM_TAPE' => 'Your server configuration and user data
|
|
||||||
files are now being restored from tape.',
|
|
||||||
'bac_ERR_RESTORING_FROM_TAPE' => 'Error occurred restoring files from tape.',
|
|
||||||
'bac_ERR_UPDATING_CONF_AFTER_TAPE_RESTORE' => 'Error occurred while updating system configuration after tape
|
|
||||||
restore.',
|
|
||||||
'bac_COULD_NOT_FORK' => 'Could not fork: ',
|
|
||||||
'bac_SERVER_REBOOT' => 'Server reboot',
|
|
||||||
'bac_SERVER_WILL_REBOOT' => 'Your server will now reboot.',
|
|
||||||
'bac_NO_UID_FOR_NAME' => 'Could not get uid for user named: ',
|
|
||||||
'bac_PAGE_REFRESH_IN' => 'This page will refresh to the status display in [_1] seconds, or
|
|
||||||
click <a href="/server-manager/cgi-bin/backup">here</a>.',
|
|
||||||
'Backup or restore' => 'Backup or restore',
|
|
||||||
'bac_BACKUP_DESKTOP_TOO_BIG' => 'Your server has too much data for a reliable backup to desktop.',
|
|
||||||
'bac_WORKSTN_BACKUPS' => 'Workstation backups are ',
|
|
||||||
'bac_WKBACKUPS_RUN_AT' => 'Regular workstation backups will run at: ',
|
|
||||||
'bac_WORKSTN_CONFIGURE' => 'Configure workstation backup',
|
|
||||||
'bac_WORKSTN_VERIFY' => 'Verify workstation backup',
|
|
||||||
'bac_WORKSTN_RESTORE' => 'Restore from workstation',
|
|
||||||
'bac_CONFIGURE_WORKSTN_BACKUP' => 'Configure Workstation Backup',
|
|
||||||
'bac_ENABLE_DISABLE_WORKSTN' => 'Enable/Disable Daily Workstation Backup',
|
|
||||||
'bac_ENABLE_WORKSTN_BACKUP' => 'Enable Workstation Backup',
|
|
||||||
'bac_WORKSTN_BACKUP_TIME' => 'Workstation backup time of day (hour/min)',
|
|
||||||
'bac_UPDATING_WORKSTN_CONF' => 'Updating workstation backup configuration',
|
|
||||||
'bac_SUCCESSFULLY_ENABLED_WORKSTN' => 'Successfully enabled workstation backups',
|
|
||||||
'bac_SUCCESSFULLY_DISABLED_WORKSTN' => 'Successfully disabled workstation backups',
|
|
||||||
'bac_VERIFY_WORKSTN_BACKUP_FILE' => 'Verify workstation backup',
|
|
||||||
'bac_VERIFY_WORKSTN_BACKUP_DESC' => '<p>This option will display the names of all files
|
|
||||||
in a previously created workstation daily backup. You
|
|
||||||
can use this option to verify the contents of the
|
|
||||||
backup.<b>You must choose the backup you want to verify</b></p>
|
|
||||||
<p>Only files flagged with (Saved) are contained in the backup.</p>
|
|
||||||
<br/>Backup files are verified from shared folder :',
|
|
||||||
'bac_RESTORE_CONF_FROM_WORKSTN' => 'Restore server configuration from workstation backup',
|
'bac_RESTORE_CONF_FROM_WORKSTN' => 'Restore server configuration from workstation backup',
|
||||||
'bac_RESTORE_CONF_FROM_WORKSTN_DESC' => '<p>This process will restore the configuration and user data files from a
|
'bac_RESTORE_CONF_FROM_WORKSTN_DESC' => '<p>This process will restore the configuration and user data files from a
|
||||||
Server workstation backup. <b>The restore
|
Server workstation backup. <b>The restore
|
||||||
@@ -175,109 +180,104 @@ should be performed on a freshly installed Server</b>.</p>
|
|||||||
before proceeding.</p>
|
before proceeding.</p>
|
||||||
<p>After the restore completes you must reboot the server.</p>
|
<p>After the restore completes you must reboot the server.</p>
|
||||||
Backup will be restored from : ',
|
Backup will be restored from : ',
|
||||||
|
'bac_RESTORE_FAILED' => 'Restore failed! The backup file was incomplete.',
|
||||||
|
'bac_RESTORE_FAILED_MSG' => 'Restore failed! There was an error in reading the backup file.',
|
||||||
|
'bac_RESTORE_FROM_TAPE' => 'Restore From Tape',
|
||||||
'bac_RESTORE_FROM_WORKSTN' => 'Restore From Workstation',
|
'bac_RESTORE_FROM_WORKSTN' => 'Restore From Workstation',
|
||||||
|
'bac_RESTORE_IN_PROGRESS' => 'Restore in progress',
|
||||||
|
'bac_RESTORE_IN_PROGRESS_BEGAN_AT' => 'A system restore is in progress. It began at: ',
|
||||||
|
'bac_RESTORE_IN_PROGRESS_DESC' => 'After the restore completes you must reboot the server. Your restore is
|
||||||
|
complete when the words "Restore complete" appear at the bottom of your screen.
|
||||||
|
',
|
||||||
|
'bac_RESTORE_SERVER_CONFIG' => 'Restore server configuration',
|
||||||
|
'bac_RESTORE_VERIFY_FAILED' => 'Verify integrity failed',
|
||||||
|
'bac_RESTORING_FROM_TAPE' => 'Restoring From Tape',
|
||||||
'bac_RESTORING_FROM_WORKSTN' => 'Restoring From Workstation',
|
'bac_RESTORING_FROM_WORKSTN' => 'Restoring From Workstation',
|
||||||
'bac_NOW_RESTORING_FROM_WORKSTN' => 'Your server configuration and user data
|
'bac_SELECT_AN_ACTION' => 'Select an action',
|
||||||
files are now being restored from workstation shared folder.',
|
'bac_SELECT_BACKUP_FILE' => 'Select backup file',
|
||||||
'bac_ERR_RESTORING_FROM_WORKSTN' => 'Error occurred restoring files from workstation.',
|
'bac_SELECT_DATE_BEFORE' => 'Restore most recent before',
|
||||||
'bac_ERR_UPDATING_CONF_AFTER_WORKSTN_RESTORE' => 'Error occurred while updating system configuration after workstation
|
'bac_SELECT_FILES_TO_RESTORE' => 'Select files to restore',
|
||||||
restore.',
|
'bac_SELECT_VFS_TYPE' => 'Select the type of share for backup destination',
|
||||||
'bac_WORKSTN_NAME' => 'Workstation IP or hostname',
|
'bac_SERVER_REBOOT' => 'Server reboot',
|
||||||
'bac_WORKSTN_BACKUP_SETTINGS' => 'Workstation Backup Settings',
|
'bac_SERVER_WILL_REBOOT' => 'Your server will now reboot.',
|
||||||
'bac_SHARED_FOLDER_NAME' => 'Backup share',
|
'bac_SHARED_FOLDER_NAME' => 'Backup share',
|
||||||
'bac_WORKSTN_LOGIN' => 'Login name',
|
'bac_STARTED_AT' => 'It began at: ',
|
||||||
|
'bac_SUCCESSFULLY_DISABLED' => 'Successfully disabled tape backups',
|
||||||
|
'bac_SUCCESSFULLY_DISABLED_WORKSTN' => 'Successfully disabled workstation backups',
|
||||||
|
'bac_SUCCESSFULLY_ENABLED_TAPE' => 'Successfully enabled tape backups',
|
||||||
|
'bac_SUCCESSFULLY_ENABLED_WORKSTN' => 'Successfully enabled workstation backups',
|
||||||
|
'bac_TAPE_BACKUP_TIME' => 'Tape backup time of day (hour/min)',
|
||||||
|
'bac_TAPE_BACKUPS' => 'Tape backups are ',
|
||||||
|
'bac_TAPE_CONFIG_DESC' => '<p>Select whether you wish to enable nightly backups. Then indicate the
|
||||||
|
desired times for the backup and the load tape reminder.</p> <p>The tape
|
||||||
|
backup requires a supported tape drive. A warning message will be sent to
|
||||||
|
the administrator at the designated reminder time if the tape drive is
|
||||||
|
empty.</p>',
|
||||||
|
'bac_TAPE_CONFIGURE' => 'Configure tape backup',
|
||||||
|
'bac_TAPE_RESTORE' => 'Restore from tape',
|
||||||
|
'bac_TESTED_BACKUP' => 'Testing integrity of backup',
|
||||||
|
'bac_TESTING_NEEDED_BACKUPS_FOR_RESTORE' => 'Testing all backups needed for a full restore with selected backup',
|
||||||
|
'bac_UNABLE_TO_RESTORE_CONF' => 'Unable to restore server configuration',
|
||||||
|
'bac_UPDATING_TAPE_CONF' => 'Updating tape backup configuration',
|
||||||
|
'bac_UPDATING_WORKSTN_CONF' => 'Updating workstation backup configuration',
|
||||||
|
'bac_VERIFY_BACKUP_DESC' => '
|
||||||
|
<p>This option will display the names of all files
|
||||||
|
in a previously created desktop backup file. You
|
||||||
|
can use this option to verify the contents of the
|
||||||
|
backup file.</p> ',
|
||||||
|
'bac_VERIFY_COMPLETE' => 'Verification is complete',
|
||||||
|
'bac_VERIFY_WORKSTN_BACKUP_DESC' => '<p>This option will display the names of all files
|
||||||
|
in a previously created workstation daily backup. You
|
||||||
|
can use this option to verify the contents of the
|
||||||
|
backup.<b>You must choose the backup you want to verify</b></p>
|
||||||
|
<p>Only files flagged with (Saved) are contained in the backup.</p>
|
||||||
|
<br/>Backup files are verified from shared folder :',
|
||||||
|
'bac_VERIFY_WORKSTN_BACKUP_FILE' => 'Verify workstation backup',
|
||||||
|
'bac_WITH_BACKUP_TIME' => 'with backup time: ',
|
||||||
|
'bac_WITH_REMINDER_TIME' => 'and load tape reminder time: ',
|
||||||
|
'bac_WKBACKUPS_RUN_AT' => 'Regular workstation backups will run at: ',
|
||||||
'bac_WORKSTATION_BACKUP_DEST' => 'Backup workstation settings',
|
'bac_WORKSTATION_BACKUP_DEST' => 'Backup workstation settings',
|
||||||
'bac_CONFIGURE_WORKSTN_BACKUP_DESC' => 'You can set the number of
|
'bac_WORKSTATION_BACKUP_SETCONF' => 'Create or modify workstation backup configuration',
|
||||||
successive backup sets to keep on the workstation, with automatic rotation.
|
'bac_WORKSTN_BACKUP_COMPRESSION' => 'Compression level (0-9) of backup is ',
|
||||||
Each set may contain saved data for several consecutive days.
|
'bac_WORKSTN_BACKUP_DAYSINSET' => 'Number of daily backups contained in each set is ',
|
||||||
In this case first backup of the set is full backup, others daily backups are
|
'bac_WORKSTN_BACKUP_DESC' => '<p>This panel displays the present workstation backup configuration. You can
|
||||||
incremental. You can also set a time limit for each backup session or for incremental
|
change it in this panel and the next one.</p><p/>',
|
||||||
backups only. When this limit occurs, backup is cleanly stopped and the next
|
'bac_WORKSTN_BACKUP_ENABLED' => 'Backup is ',
|
||||||
incremental backup will safely continue with unsaved and modified datas.',
|
'bac_WORKSTN_BACKUP_HOST' => 'Backup is made on LAN workstation ',
|
||||||
'bac_ERR_INVALID_WORKSTN' => 'Invalid Workstation IP or Hostname ',
|
'bac_WORKSTN_BACKUP_INCONLY_TIMEOUT' => 'except full backups which are cleanly timed out after 24 hours',
|
||||||
'bac_ERR_INVALID_FOLDER' => 'Invalid share name',
|
'bac_WORKSTN_BACKUP_MNT' => 'Backup is made on mounted disk',
|
||||||
'bac_ERR_INVALID_LOGIN' => 'Invalid Login',
|
'bac_WORKSTN_BACKUP_NOT_CONFIGURED' => '<p>Presently, workstation backup is not configured. You can set this configuration
|
||||||
'bac_ERR_INVALID_PASSWORD' => 'Invalid Password',
|
with this panel and the next one.</p><p/>',
|
||||||
'bac_ERR_ALREADY_MOUNTED' => 'Backup directory is already mounted',
|
'bac_WORKSTN_BACKUP_SETSNUM' => 'Number of rotating backup sets is ',
|
||||||
'bac_ERR_MOUNTING_SMBSHARE' => 'Unable to mount workstation shared folder',
|
'bac_WORKSTN_BACKUP_SETTINGS' => 'Workstation Backup Settings',
|
||||||
'bac_ERR_NOT_MOUNTED' => 'Backup directory is not mounted',
|
'bac_WORKSTN_BACKUP_SHARE' => 'Destination backup share folder is ',
|
||||||
|
'bac_WORKSTN_BACKUP_TIME' => 'Workstation backup time of day (hour/min)',
|
||||||
|
'bac_WORKSTN_BACKUP_TIMEOUT' => 'Each daily backup session is cleanly timed out after ',
|
||||||
|
'bac_WORKSTN_BACKUP_TOD' => 'Daily backup occurs at ',
|
||||||
|
'bac_WORKSTN_BACKUP_USB' => 'Backup is made on local removable disk',
|
||||||
|
'bac_WORKSTN_BACKUP_VFSTYPE' => ' via ',
|
||||||
|
'bac_WORKSTN_BACKUPS' => 'Workstation backups are ',
|
||||||
|
'bac_WORKSTN_CONFIGURE' => 'Configure workstation backup',
|
||||||
|
'bac_WORKSTN_FULL_BACKUP_DAY' => 'Full backup session (new backup sets) is allowed only on',
|
||||||
|
'bac_WORKSTN_FULL_BACKUP_EVERYDAY' => 'Full backup sessions (new backup set) are allowed everyday',
|
||||||
|
'bac_WORKSTN_LOGIN' => 'Login name',
|
||||||
|
'bac_WORKSTN_NAME' => 'Workstation IP or hostname',
|
||||||
'bac_WORKSTN_NOT_SET' => 'You must first correctly configure your workstation backup',
|
'bac_WORKSTN_NOT_SET' => 'You must first correctly configure your workstation backup',
|
||||||
'bac_NO_BACKUPS_TO_RESTORE' => 'There is no backup set on configured workstation shared folder. Verify your configuration settings.',
|
'bac_WORKSTN_RESTORE' => 'Restore from workstation',
|
||||||
'bac_NUMBER_OF_SETS' => 'Number of rotating backup sets',
|
|
||||||
'bac_NUMBER_OF_FILES_IN_SET' => 'Daily backups in each set',
|
|
||||||
'bac_ERR_INVALID_SETS_NUMBER' => 'Sets number must be 1 or greater',
|
|
||||||
'bac_ERR_INVALID_FILES_IN_SET_NUMBER' => 'This number must be 1 or greater. First backup in set is <b>full</b> others are <b>incrementals</b>',
|
|
||||||
'bac_WORKSTN_TIMEOUT' => 'Optional backup session timeout (hours)',
|
|
||||||
'bac_INC_ONLY_TIMEOUT' => 'Don\'t timeout full backup sessions',
|
|
||||||
'bac_ERR_INVALID_TIMEOUT' => 'Maximum backup time must be set between 1 and 24 hours',
|
|
||||||
'bac_ERR_NO_HOST_DIR' => 'No directory for your host in shared folder. Maybe your host name is different from backup ones',
|
|
||||||
'bac_ERROR_READING_FILE' => 'Error while reading files from',
|
|
||||||
'bac_WORKSTN_SEL_RESTORE' => 'Selective file restore from workstation',
|
|
||||||
'bac_WORKSTN_SELECTIVE_RESTORE' => 'Workstation selective file restore',
|
|
||||||
'bac_ALL_BACKUPS' => 'All backups',
|
|
||||||
'bac_WORKSTN_SEL_REST_DESC' => 'This process will restore only specified files and directories. You must first choose
|
'bac_WORKSTN_SEL_REST_DESC' => 'This process will restore only specified files and directories. You must first choose
|
||||||
the backup from which the files will be restored. If you don\'t know in which backup
|
the backup from which the files will be restored. If you don"t know in which backup
|
||||||
are the required files, you can select \'All backups\' option. <br/><br/>
|
are the required files, you can select "All backups" option. <br/><br/>
|
||||||
The next panel will display available files and directories,
|
The next panel will display available files and directories,
|
||||||
so you can choose the ones to restore. To restrict the number of files and directories
|
so you can choose the ones to restore. To restrict the number of files and directories
|
||||||
displayed in this panel, you have the option to give now a filtering expression,
|
displayed in this panel, you have the option to give now a filtering expression,
|
||||||
applied as a regular expression to the displayed names.<br/><br/>
|
applied as a regular expression to the displayed names.<br/><br/>
|
||||||
You have the responsibility not to restore files which could break the
|
You have the responsibility not to restore files which could break the
|
||||||
functioning of your server.<br/> <br/>Currently, files will be restored from :',
|
functioning of your server.<br/> <br/>Currently, files will be restored from :',
|
||||||
'bac_BACKUP_CHOICE' => 'Selecting files to display',
|
'bac_WORKSTN_SEL_RESTORE' => 'Selective file restore from workstation',
|
||||||
'bac_SELECT_DATE_BEFORE' => 'Restore most recent before',
|
'bac_WORKSTN_SELECTIVE_RESTORE' => 'Workstation selective file restore',
|
||||||
'bac_FILTER_EXPRESSION' => 'Names filtered by',
|
'bac_WORKSTN_TIMEOUT' => 'Optional backup session timeout (hours)',
|
||||||
'bac_READ_COMPLETE' => 'You can choose all the directories and files you want to restore in the displayed list
|
'bac_WORKSTN_VERIFY' => 'Verify workstation backup',
|
||||||
(use ctrl or shift for multiple selection). <br/> <b>Warning :</b> If you select a directory,
|
'bac_X_BACKUP_OR_RESTORE' => 'X Backup or restore server data',
|
||||||
all contained files and directories will be restored.<p/>
|
'bac_YOU_MUST_REBOOT' => 'You must reboot the server to activate any configuration changes that were
|
||||||
By default the most recent version of selected files is restored, but if you specify a date
|
made as a result of this restore.',
|
||||||
in the format <i>~[~[~[yyyy/~]mm/~]dd-~]hh:mm~[:ss~]</i> the process
|
'Backup or restore' => 'Backup or restore',
|
||||||
will restore only the most recent version modified <b>before the given date</b>.',
|
|
||||||
'bac_ERR_INVALID_SELDATE' => 'Date format is invalid, must be ~[~[~[yyyy/~]mm/~]dd-~]hh:mm~[:ss~]. ie: 2005/12/31-08:23:32 or
|
|
||||||
10-08:32 or 08:32',
|
|
||||||
'bac_SELECT_FILES_TO_RESTORE' => 'Select files to restore',
|
|
||||||
'bac_ERR_WHILE_UNMOUNTING' => 'Error occurs when unmounting distant share',
|
|
||||||
'bac_ERR_DAR_CATALOG' => 'Error when using Dar catalog',
|
|
||||||
'bac_COMPRESSION_LEVEL' => 'Backup compression level ~[0-9~]',
|
|
||||||
'bac_FULL_ONLY_ON' => 'Full backup is allowed on',
|
|
||||||
'bac_ERR_INVALID_COMPRESSION' => 'Compression level must be set between 0 (no compression) and 9 (maximum compression)',
|
|
||||||
'bac_DOW' => 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Everyday',
|
|
||||||
'bac_CONFIGURATION_TO_BE_DONE' => 'Please configure the backup settings.',
|
|
||||||
'bac_WORKSTN_BACKUP_DESC' => '<p>This panel displays the present workstation backup configuration. You can
|
|
||||||
change it in this panel and the next one.</p><p/>',
|
|
||||||
'bac_WORKSTN_BACKUP_NOT_CONFIGURED' => '<p>Presently, workstation backup is not configured. You can set this configuration
|
|
||||||
with this panel and the next one.</p><p/>',
|
|
||||||
'bac_WORKSTN_BACKUP_ENABLED' => 'Backup is ',
|
|
||||||
'bac_WORKSTN_BACKUP_USB' => 'Backup is made on local removable disk',
|
|
||||||
'bac_WORKSTN_BACKUP_MNT' => 'Backup is made on mounted disk',
|
|
||||||
'bac_WORKSTN_BACKUP_HOST' => 'Backup is made on LAN workstation ',
|
|
||||||
'bac_WORKSTN_BACKUP_VFSTYPE' => ' via ',
|
|
||||||
'bac_WORKSTN_BACKUP_SHARE' => 'Destination backup share folder is ',
|
|
||||||
'bac_WORKSTN_BACKUP_TOD' => 'Daily backup occurs at ',
|
|
||||||
'bac_LOGIN' => 'Login is ',
|
|
||||||
'bac_PASSWORD' => 'Password is ',
|
|
||||||
'bac_WORKSTN_BACKUP_SETSNUM' => 'Number of rotating backup sets is ',
|
|
||||||
'bac_WORKSTN_BACKUP_DAYSINSET' => 'Number of daily backups contained in each set is ',
|
|
||||||
'bac_WORKSTN_BACKUP_COMPRESSION' => 'Compression level (0-9) of backup is ',
|
|
||||||
'bac_WORKSTN_BACKUP_TIMEOUT' => 'Each daily backup session is cleanly timed out after ',
|
|
||||||
'bac_WORKSTN_BACKUP_INCONLY_TIMEOUT' => 'except full backups which are cleanly timed out after 24 hours',
|
|
||||||
'bac_WORKSTN_FULL_BACKUP_EVERYDAY' => 'Full backup sessions (new backup set) are allowed everyday',
|
|
||||||
'bac_WORKSTN_FULL_BACKUP_DAY' => 'Full backup session (new backup sets) is allowed only on',
|
|
||||||
'bac_WORKSTATION_BACKUP_SETCONF' => 'Create or modify workstation backup configuration',
|
|
||||||
'bac_SELECT_VFS_TYPE' => 'Select the type of share for backup destination',
|
|
||||||
'bac_ERR_NO_USB_DISK' => 'Error : No removable disk available. Please connect a removable disk or select another type of workstation backup.',
|
|
||||||
'bac_ERR_NO_MOUNTED_DISK' => 'Error : No mounted disk available. Please mount a disk or select another type of workstation backup.',
|
|
||||||
'bac_HOURS' => 'hours.',
|
|
||||||
'bac_ERR_NO_FULL_BACKUP' => 'Aborting restore because needed full backup is missing or unreadable.',
|
|
||||||
'bac_ERR_NO_INC_BACKUP' => 'Aborting restore because the set has missing or unreadable incremental backup number',
|
|
||||||
'bac_CHECK_TO_VERIFY_FULL_RESTORE' => 'Check here to test integrity of all backups needed for a full restore with the selected backup ',
|
|
||||||
'bac_TESTING_NEEDED_BACKUPS_FOR_RESTORE' => 'Testing all backups needed for a full restore with selected backup',
|
|
||||||
'bac_TESTED_BACKUP' => 'Testing integrity of backup',
|
|
||||||
'bac_RESTORE_VERIFY_FAILED' => 'Verify integrity failed',
|
|
||||||
'bac_CHECK_INTEGRITY_WARNING' => 'Warning : For large backups, checking integrity may be a long task and should be made with daily workstation backup disabled.',
|
|
||||||
'bac_cifs' => 'cifs',
|
|
||||||
'bac_nfs' => 'nfs',
|
|
||||||
'bac_local removable disk' => 'Local removable disk',
|
|
||||||
'bac_Mounted disk' => 'Mounted disk',
|
|
||||||
'bac_ERROR_WHEN_TESTING_REMOTE_SERVER' => 'The parameters have been saved, however the remote host is not reachable, please check your settings.',
|
|
||||||
'bac_ERR_EXTRACT' => 'Error when extracting with Dar',
|
|
||||||
|
|||||||
@@ -1,24 +1,27 @@
|
|||||||
'bugr_FORM_TITLE' => 'Report a Bug',
|
#
|
||||||
'bugr_DO_NOT_PANIC' => 'Don\'t Panic!',
|
# Lex file for Bugreport generated on 2025-07-17 09:52:30
|
||||||
'bugr_SME_EXPERIENCE' => 'Unfortunately there is no software without bugs, and you probably came to this page because of an issue you are experiencing with your SME-server installation.',
|
#
|
||||||
'bugr_PLEASE_REPORT_HERE' => 'In order to help developers to diagnose and fix your issue, please download one of the following text templates, fill it out and paste it into your bug report at',
|
|
||||||
'bugr_USE_TEMPLATE' => 'Please refer to the following link on how to report efficiency a bug and use its template',
|
|
||||||
'bugr_FOLLOWING_REPORT_MIGHT_HELP' => 'It will also help if you provide some vital information on the configuration of your SME-server in your bug report. By clicking on the "Create configuration report" button below, you can create and download a text file containing this information. Please attach this file to your bug report as well.',
|
|
||||||
'bugr_REPORT_CONTENT' => 'The report will contain the following information',
|
|
||||||
'bugr_SME_VERSION' => 'Koozali SME Server version',
|
|
||||||
'bugr_SERVER_MODE' => 'Server mode',
|
|
||||||
'bugr_PREVIOUS_SERVER_MODE' => 'Previous server mode',
|
|
||||||
'bugr_KERNEL_AND_ARCH' => 'Current running kernel version and architecture',
|
|
||||||
'bugr_INSTALLED_RPMS' => 'A list of additional RPMs installed on your server',
|
|
||||||
'bugr_ALTERED_TEMPLATES' => 'A list of SME templates that have been altered on your server from a base install',
|
|
||||||
'bugr_ALTERED_EVENTS' => 'A list of SME events that have been altered on your server from a base install',
|
'bugr_ALTERED_EVENTS' => 'A list of SME events that have been altered on your server from a base install',
|
||||||
'bugr_YUM_REPOS' => 'A list of additional software repositories configured on your server',
|
'bugr_ALTERED_TEMPLATES' => 'A list of SME templates that have been altered on your server from a base install',
|
||||||
'bugr_PRIVACY' => 'No privacy related data (ie. users, passwords, IP addresses) will be included in the report.',
|
|
||||||
'bugr_CREATE_REPORT' => 'Create configuration report',
|
|
||||||
'bugr_DONATING' => 'Have you considered donating?',
|
|
||||||
'bugr_AWARE_SME' => 'You are probaly aware that SME server is developed and supported by a collaborative community of volunteers from all over the world. While SME server is free to download and use, maintaining the infrastructure behind the project (eg. hosting the forums and wiki, providing repositories and build servers etc.) costs real money in the real world.',
|
'bugr_AWARE_SME' => 'You are probaly aware that SME server is developed and supported by a collaborative community of volunteers from all over the world. While SME server is free to download and use, maintaining the infrastructure behind the project (eg. hosting the forums and wiki, providing repositories and build servers etc.) costs real money in the real world.',
|
||||||
'bugr_YOUR_HELP' => 'In very much the same way you need us to address your current issue, we need YOUR help to keep this project alive!',
|
|
||||||
'bugr_CONSIDER_DONATING' => 'Please consider donating to the project by clicking on the image link below:',
|
'bugr_CONSIDER_DONATING' => 'Please consider donating to the project by clicking on the image link below:',
|
||||||
'bugr_THANK_YOU' => 'Thank you for your support!',
|
'bugr_CREATE_REPORT' => 'Create configuration report',
|
||||||
|
'bugr_DO_NOT_PANIC' => 'Don"t Panic!',
|
||||||
|
'bugr_DONATING' => 'Have you considered donating?',
|
||||||
'bugr_Download this report' => 'Download this report !',
|
'bugr_Download this report' => 'Download this report !',
|
||||||
|
'bugr_FOLLOWING_REPORT_MIGHT_HELP' => 'It will also help if you provide some vital information on the configuration of your SME-server in your bug report. By clicking on the "Create configuration report" button below, you can create and download a text file containing this information. Please attach this file to your bug report as well.',
|
||||||
|
'bugr_FORM_TITLE' => 'Report a Bug',
|
||||||
|
'bugr_INSTALLED_RPMS' => 'A list of additional RPMs installed on your server',
|
||||||
|
'bugr_KERNEL_AND_ARCH' => 'Current running kernel version and architecture',
|
||||||
|
'bugr_PLEASE_REPORT_HERE' => 'In order to help developers to diagnose and fix your issue, please download one of the following text templates, fill it out and paste it into your bug report at',
|
||||||
|
'bugr_PREVIOUS_SERVER_MODE' => 'Previous server mode',
|
||||||
|
'bugr_PRIVACY' => 'No privacy related data (ie. users, passwords, IP addresses) will be included in the report.',
|
||||||
|
'bugr_REPORT_CONTENT' => 'The report will contain the following information',
|
||||||
|
'bugr_SERVER_MODE' => 'Server mode',
|
||||||
|
'bugr_SME_EXPERIENCE' => 'Unfortunately there is no software without bugs, and you probably came to this page because of an issue you are experiencing with your SME-server installation.',
|
||||||
|
'bugr_SME_VERSION' => 'Koozali SME Server version',
|
||||||
|
'bugr_THANK_YOU' => 'Thank you for your support!',
|
||||||
|
'bugr_USE_TEMPLATE' => 'Please refer to the following link on how to report efficiency a bug and use its template',
|
||||||
|
'bugr_YOUR_HELP' => 'In very much the same way you need us to address your current issue, we need YOUR help to keep this project alive!',
|
||||||
|
'bugr_YUM_REPOS' => 'A list of additional software repositories configured on your server',
|
||||||
'Report a bug' => 'Report a bug',
|
'Report a bug' => 'Report a bug',
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
'clm_FORM_TITLE' => 'Antivirus settings',
|
#
|
||||||
'clm_LABEL_FILESYSTEM_SCAN_PERIOD' => 'Scan filesystem',
|
# Lex file for Clamav generated on 2025-07-17 09:52:30
|
||||||
|
#
|
||||||
'clm_DESC_FILESYSTEM_SCAN_PERIOD' => '<h2>General Settings</h2>
|
'clm_DESC_FILESYSTEM_SCAN_PERIOD' => '<h2>General Settings</h2>
|
||||||
If this option is enabled then the filesystem will be
|
If this option is enabled then the filesystem will be
|
||||||
scanned for viruses. A report of any found viruses will be
|
scanned for viruses. A report of any found viruses will be
|
||||||
emailed to the administrator.',
|
emailed to the administrator.',
|
||||||
'clm_LABEL_QUARANTINE' => 'Quarantine infected files',
|
'clm_FORM_TITLE' => 'Antivirus settings',
|
||||||
'clm_LABEL_CLAM_VERSIONS' => 'ClamAV and db versions',
|
'clm_LABEL_CLAM_VERSIONS' => 'ClamAV and db versions',
|
||||||
'clm_WEEKLY' => 'Weekly',
|
'clm_LABEL_FILESYSTEM_SCAN_PERIOD' => 'Scan filesystem',
|
||||||
'clm_NEVER' => 'Never',
|
'clm_LABEL_QUARANTINE' => 'Quarantine infected files',
|
||||||
'clm_DAILY' => 'Daily',
|
|
||||||
'clm_SUCCESS' => 'The new clamav antivirus settings have been saved.',
|
'clm_SUCCESS' => 'The new clamav antivirus settings have been saved.',
|
||||||
|
|||||||
@@ -1,59 +1,65 @@
|
|||||||
|
#
|
||||||
|
# Lex file for Datetime generated on 2025-07-17 09:52:31
|
||||||
|
#
|
||||||
|
'dat_APRIL' => 'April',
|
||||||
|
'dat_AUGUST' => 'August',
|
||||||
|
'dat_BETWEEN_0_AND_59' => 'Please choose a minute between 0 and 59.',
|
||||||
|
'dat_BETWEEN_1_AND_12' => 'Please choose an hour between 1 and 12.',
|
||||||
|
'dat_BETWEEN_1_AND_31' => 'Please choose a day between 1 and 31.',
|
||||||
|
'dat_COULD_NOT_OPEN_TZ_FILE' => 'Error: Could not open timezone file for reading: ',
|
||||||
|
'dat_CURRENT_SETTING' => 'Current setting',
|
||||||
|
'dat_DECEMBER' => 'December',
|
||||||
|
'dat_ERR_CHANGING_TS' => 'Error while changing network time server setting',
|
||||||
|
'dat_ERR_SETTING_CLOCK' => 'Error occurred while setting system time and hardware clock.',
|
||||||
|
'dat_FEBRUARY' => 'February',
|
||||||
'dat_FORM_TITLE' => 'Date and time configuration',
|
'dat_FORM_TITLE' => 'Date and time configuration',
|
||||||
|
'dat_FOUR_DIGIT_YEAR' => 'Please choose a four-digit year between 1900 and 2200.',
|
||||||
'dat_INITIAL_DESC' => 'This is where you configure the date and time of this server. You may use an existing network time server or
|
'dat_INITIAL_DESC' => 'This is where you configure the date and time of this server. You may use an existing network time server or
|
||||||
manually set the date and time for your time zone.',
|
manually set the date and time for your time zone.',
|
||||||
'dat_SET_DATE_TITLE' => 'Set Date and Time',
|
'dat_Invalid_date' => 'Invalid date',
|
||||||
'dat_COULD_NOT_OPEN_TZ_FILE' => 'Error: Could not open timezone file for reading: ',
|
'dat_INVALID_DAY' => 'Error: invalid day of month: ',
|
||||||
|
'dat_INVALID_HOUR' => 'Error: invalid hour: ',
|
||||||
|
'dat_INVALID_MINUTE' => 'Error: invalid minute: ',
|
||||||
|
'dat_INVALID_MONTH' => 'Error: invalid month',
|
||||||
|
'dat_INVALID_NTP_ADDR' => 'Invalid NTP server address: ',
|
||||||
|
'dat_INVALID_NTP_SERVER' => 'Invalid NTP server, the server <b>will not</b> try to synchronize from a time server.',
|
||||||
|
'dat_INVALID_SECOND' => 'Error: invalid second',
|
||||||
|
'dat_INVALID_YEAR' => 'Error: invalid year: ',
|
||||||
'dat_JANUARY' => 'January',
|
'dat_JANUARY' => 'January',
|
||||||
'dat_FEBRUARY' => 'February',
|
|
||||||
'dat_MARCH' => 'March',
|
|
||||||
'dat_APRIL' => 'April',
|
|
||||||
'dat_MAY' => 'May',
|
|
||||||
'dat_JUNE' => 'June',
|
|
||||||
'dat_JULY' => 'July',
|
'dat_JULY' => 'July',
|
||||||
'dat_AUGUST' => 'August',
|
'dat_JUNE' => 'June',
|
||||||
'dat_SEPTEMBER' => 'September',
|
'dat_manually_set' => 'Set manually',
|
||||||
'dat_OCTOBER' => 'October',
|
'dat_MARCH' => 'March',
|
||||||
'dat_NOVEMBER' => 'November',
|
'dat_MAY' => 'May',
|
||||||
'dat_DECEMBER' => 'December',
|
'dat_MONTH_BETWEEN_1_AND_12' => 'Please choose a month value between 1 and 12.',
|
||||||
'dat_NEW_M/D/Y' => 'New month/day/year:',
|
'dat_NETWORK_TIME_SERVER' => 'Network Time Server',
|
||||||
|
'dat_NEW_DATE_AND_TIME' => 'New date and time setting:',
|
||||||
'dat_NEW_H/M/S' => 'New hour/min/sec:',
|
'dat_NEW_H/M/S' => 'New hour/min/sec:',
|
||||||
'dat_AM/PM_AND_TZ' => 'AM/PM and time zone:',
|
'dat_NEW_M/D/Y' => 'New month/day/year:',
|
||||||
'dat_NTP_ENABLE_DESC' => 'The server can periodically synchronize the system clock to a network time protocol (NTP) server. If you select this option, enter the hostname or IP address of the NTP server below.',
|
'dat_NOVEMBER' => 'November',
|
||||||
'dat_NTP_CONFIGURE_DESC' => 'The server is periodically synchronizing the system clock to the network time protocol (NTP) server specified below. To synchronize to a different NTP server, enter a different hostname or IP address in the field below.',
|
'dat_NTP_CONFIGURE_DESC' => 'The server is periodically synchronizing the system clock to the network time protocol (NTP) server specified below. To synchronize to a different NTP server, enter a different hostname or IP address in the field below.',
|
||||||
|
'dat_NTP_CONFIGURE_TITLE' => 'Configure Network Time Server',
|
||||||
'dat_NTP_DISABLE_DESC' => 'Choose this option to stop syncronizing the system clock to the NTP
|
'dat_NTP_DISABLE_DESC' => 'Choose this option to stop syncronizing the system clock to the NTP
|
||||||
server.When the NTP service is disabled, you can set the system date and time manually from this page.',
|
server.When the NTP service is disabled, you can set the system date and time manually from this page.',
|
||||||
|
'dat_NTP_DISABLE_TITLE' => 'Disable Network Time Server',
|
||||||
|
'dat_NTP_ENABLE_DESC' => 'The server can periodically synchronize the system clock to a network time protocol (NTP) server. If you select this option, enter the hostname or IP address of the NTP server below.',
|
||||||
|
'dat_NTP_ENABLE_TITLE' => 'Enable Network Time Server',
|
||||||
'dat_NTP_SERVER' => 'NTP Server',
|
'dat_NTP_SERVER' => 'NTP Server',
|
||||||
'dat_VERIFY_DATE_AND_TIME' => 'Verify date and time',
|
'dat_ntp_server' => 'NTP server',
|
||||||
'dat_NEW_DATE_AND_TIME' => 'New date and time setting:',
|
'dat_NTP_Server_URL' => 'NTP Server URL:',
|
||||||
'dat_SETTING_DATE_AND_TIME' => 'Setting date and time',
|
'dat_OCTOBER' => 'October',
|
||||||
'dat_INVALID_DAY' => 'Error: invalid day of month: ',
|
'dat_SEPTEMBER' => 'September',
|
||||||
'dat_BETWEEN_1_AND_31' => 'Please choose a day between 1 and 31.',
|
|
||||||
'dat_INVALID_YEAR' => 'Error: invalid year: ',
|
|
||||||
'dat_FOUR_DIGIT_YEAR' => 'Please choose a four-digit year between 1900 and 2200.',
|
|
||||||
'dat_INVALID_HOUR' => 'Error: invalid hour: ',
|
|
||||||
'dat_BETWEEN_1_AND_12' => 'Please choose an hour between 1 and 12.',
|
|
||||||
'dat_INVALID_MINUTE' => 'Error: invalid minute: ',
|
|
||||||
'dat_BETWEEN_0_AND_59' => 'Please choose a minute between 0 and 59.',
|
|
||||||
'dat_INVALID_SECOND' => 'Error: invalid second',
|
|
||||||
'dat_MONTH_BETWEEN_1_AND_12' => 'Please choose a month value between 1 and 12.',
|
|
||||||
'dat_INVALID_MONTH' => 'Error: invalid month',
|
|
||||||
'dat_UPDATING_CLOCK' => 'System clock is being updated. Please wait for a few seconds,
|
|
||||||
then click <A HREF="datetime?page=1&wherenext=Verify" TARGET="main">here</A>
|
|
||||||
to verify changes.',
|
|
||||||
'dat_ERR_SETTING_CLOCK' => 'Error occurred while setting system time and hardware clock.',
|
|
||||||
'dat_SERVER_DISABLED' => 'Network time server disabled successfully',
|
'dat_SERVER_DISABLED' => 'Network time server disabled successfully',
|
||||||
'dat_SERVER_DISABLED_DESC' => 'You have disabled this service: The server will rely on its internal
|
'dat_SERVER_DISABLED_DESC' => 'You have disabled this service: The server will rely on its internal
|
||||||
clock, and <b>will not</b> try to synchronize from a time server.',
|
clock, and <b>will not</b> try to synchronize from a time server.',
|
||||||
'dat_ERR_CHANGING_TS' => 'Error while changing network time server setting',
|
'dat_SET_DATE_TITLE' => 'Set Date and Time',
|
||||||
'dat_INVALID_NTP_ADDR' => 'Invalid NTP server address: ',
|
'dat_set_manually' => 'Set Date and Time:',
|
||||||
|
'dat_SETTING_DATE_AND_TIME' => 'Setting date and time',
|
||||||
'dat_SETTINGS_CHANGED' => 'Network time server setting changed successfully',
|
'dat_SETTINGS_CHANGED' => 'Network time server setting changed successfully',
|
||||||
'dat_SYNC_WITH' => 'This server is now configured to synchronize periodically
|
'dat_SYNC_WITH' => 'This server is now configured to synchronize periodically
|
||||||
(via the Internet) with:',
|
(via the Internet) with:',
|
||||||
'dat_INVALID_NTP_SERVER' => 'Invalid NTP server, the server <b>will not</b> try to synchronize from a time server.',
|
'dat_The_time_is_currently' => 'The time is currently:',
|
||||||
'dat_NETWORK_TIME_SERVER' => 'Network Time Server',
|
'dat_TZ' => 'Time zone:',
|
||||||
'dat_NTP_CONFIGURE_TITLE' => 'Configure Network Time Server',
|
'dat_UPDATING_CLOCK' => 'System clock is being updated',
|
||||||
'dat_NTP_ENABLE_TITLE' => 'Enable Network Time Server',
|
'dat_VERIFY_DATE_AND_TIME' => 'Verify date and time',
|
||||||
'dat_NTP_DISABLE_TITLE' => 'Disable Network Time Server',
|
|
||||||
'dat_CURRENT_SETTING' => 'Current setting',
|
|
||||||
'Date and time' => 'Date and time',
|
'Date and time' => 'Date and time',
|
||||||
|
|||||||
@@ -1,28 +1,30 @@
|
|||||||
|
#
|
||||||
'dir_FORM_TITLE' => 'Change LDAP directory settings',
|
# Lex file for Directory generated on 2025-07-17 09:52:31
|
||||||
'dir_LABEL_ROOT' => 'Server root',
|
#
|
||||||
'dir_DESCRIPTION' => 'The LDAP server provides a network-available listing of the user accounts
|
'dir_CITY' => 'Default City',
|
||||||
and groups on your server, and can be accessed using an LDAP client such as the Address Book feature
|
'dir_COMPANY' => 'Default company',
|
||||||
in Netscape Communicator. Configure your LDAP client with the local IP address of your server,
|
'dir_DEPARTMENT' => 'Default department',
|
||||||
port number 389, and the server root parameter shown below.',
|
|
||||||
'dir_DESC_DIRECTORY_ACCESS' => ' You can control access to your LDAP directory:
|
|
||||||
the private setting allows access only from your local network, and the public setting allows access from anywhere on the Internet. ',
|
|
||||||
'dir_DIRECTORY_ACCESS' => 'LDAP directory access',
|
|
||||||
'dir_DESC_DEPARTMENT' => 'These fields are the LDAP defaults for your organization.
|
'dir_DESC_DEPARTMENT' => 'These fields are the LDAP defaults for your organization.
|
||||||
Whenever you create a new user account, you will be prompted
|
Whenever you create a new user account, you will be prompted
|
||||||
to enter all of these fields (they can be different for each
|
to enter all of these fields (they can be different for each
|
||||||
user) but the values you set here
|
user) but the values you set here
|
||||||
will show up as defaults. This is a convenience to make it
|
will show up as defaults. This is a convenience to make it
|
||||||
faster to create user accounts.',
|
faster to create user accounts.',
|
||||||
'dir_DEPARTMENT' => 'Default department',
|
'dir_DESC_DIRECTORY_ACCESS' => ' You can control access to your LDAP directory:
|
||||||
'dir_COMPANY' => 'Default company',
|
the private setting allows access only from your local network, and the public setting allows access from anywhere on the Internet. ',
|
||||||
'dir_STREET' => 'Default Street address',
|
|
||||||
'dir_CITY' => 'Default City',
|
|
||||||
'dir_PHONENUMBER' => 'Default Phone Number',
|
|
||||||
'dir_DESC_EXISTING' => 'You can either leave existing user accounts as they are, using the above defaults only for
|
'dir_DESC_EXISTING' => 'You can either leave existing user accounts as they are, using the above defaults only for
|
||||||
new users, or you can apply the above defaults to all existing users as well.',
|
new users, or you can apply the above defaults to all existing users as well.',
|
||||||
|
'dir_DESCRIPTION' => 'The LDAP server provides a network-available listing of the user accounts
|
||||||
|
and groups on your server, and can be accessed using an LDAP client such as the Address Book feature
|
||||||
|
in Netscape Communicator. Configure your LDAP client with the local IP address of your server,
|
||||||
|
port number 389, and the server root parameter shown below.',
|
||||||
|
'dir_DIRECTORY_ACCESS' => 'LDAP directory access',
|
||||||
'dir_EXISTING' => 'Existing users',
|
'dir_EXISTING' => 'Existing users',
|
||||||
'dir_SUCCESS' => 'The new LDAP default settings have been saved.',
|
'dir_FORM_TITLE' => 'Change LDAP directory settings',
|
||||||
|
'dir_LABEL_ROOT' => 'Server root',
|
||||||
'dir_LEAVE' => 'Leave as they are',
|
'dir_LEAVE' => 'Leave as they are',
|
||||||
|
'dir_PHONENUMBER' => 'Default Phone Number',
|
||||||
|
'dir_STREET' => 'Default Street address',
|
||||||
|
'dir_SUCCESS' => 'The new LDAP default settings have been saved.',
|
||||||
'dir_UPDATE' => 'Update with new defaults',
|
'dir_UPDATE' => 'Update with new defaults',
|
||||||
'Directory' => 'Directory',
|
'Directory' => 'Directory',
|
||||||
|
|||||||
@@ -1,59 +1,60 @@
|
|||||||
|
#
|
||||||
|
# Lex file for Domains generated on 2025-07-17 09:52:31
|
||||||
|
#
|
||||||
|
'dom_ABOUT_TO_REMOVE' => 'Are you sure you wish to remove this domain ?',
|
||||||
'dom_ADD_DOMAIN' => 'Add domain',
|
'dom_ADD_DOMAIN' => 'Add domain',
|
||||||
'dom_FORM_TITLE' => 'Manage domains',
|
|
||||||
'dom_FORM_DESCRIPTION' => 'When you create a domain, your server will be able to
|
|
||||||
receive e-mail for that domain and will also be able to host a
|
|
||||||
web site for that domain.',
|
|
||||||
'dom_ADD_DOMAIN' => 'Add domain',
|
|
||||||
'dom_NO_VIRTUAL_DOMAINS' => 'There are no domains in the system',
|
|
||||||
'dom_CURRENT_DOMAINS' => 'Current list of domains',
|
|
||||||
'dom_PRIMARY_SITE' => 'primary site',
|
|
||||||
'dom_CONTENT' => '[_1] i-bay',
|
'dom_CONTENT' => '[_1] i-bay',
|
||||||
'dom_CREATE_TITLE' => 'Create a new domain',
|
|
||||||
'dom_CONTENT_FIELD_DESCRIPTION' => 'For the web site, you may choose your primary web site or any
|
'dom_CONTENT_FIELD_DESCRIPTION' => 'For the web site, you may choose your primary web site or any
|
||||||
i-bay as the content.',
|
i-bay as the content.',
|
||||||
'dom_DOMAIN_NAME_VALIDATION_ERROR' => 'Error: unexpected or missing characters in domain name
|
'dom_corporate' => 'Corporate DNS servers',
|
||||||
[_1].The domain name should contain one or more
|
'dom_CREATE_TITLE' => 'Create a new domain',
|
||||||
letters, numbers, periods and minus signs. Did not create new domain.',
|
'dom_CURRENT_DOMAINS' => 'Current list of domains',
|
||||||
'dom_DOMAIN_DESCRIPTION_VALIDATION_ERROR' => 'Error: unexpected or missing characters in domain description
|
|
||||||
[_1]. Did not create new domain.',
|
|
||||||
'dom_DOMAIN_IN_USE_ERROR' => 'Error: domain [_1] is already in use. Did not create
|
|
||||||
new domain.',
|
|
||||||
'dom_SYSTEM_DOMAIN_ERROR' => 'Error: domain [_1] is your system domain name. You
|
|
||||||
cannot have a domain with the same name. Did not create new domain.',
|
|
||||||
'dom_SUCCESSFULLY_CREATED' => 'Successfully created domain [_1].Your web
|
|
||||||
server is now being restarted. The links on this page will be
|
|
||||||
inactive until the web server restart is complete.',
|
|
||||||
'dom_MODIFY_TITLE' => 'Modify domain',
|
|
||||||
'dom_NONEXISTENT_DOMAIN_ERROR' => 'Error: [_1] is not an existing domain.',
|
|
||||||
'dom_SUCCESSFULLY_MODIFIED' => 'Successfully modified domain [_1].Your web
|
|
||||||
server is now being restarted. The links on this page will be inactive until the web server restart is complete.',
|
|
||||||
'dom_REMOVE_TITLE' => 'Remove domain',
|
|
||||||
'dom_REMOVE_DESCRIPTION' => 'You are about to remove the domain "[_1]" ([_2]).',
|
|
||||||
'dom_ABOUT_TO_REMOVE' => 'Are you sure you wish to remove this domain ?',
|
|
||||||
'dom_ERROR_WHILE_REMOVING_DOMAIN' => 'Error: internal failure while removing domain [_1].',
|
|
||||||
'dom_SUCCESSFULLY_DELETED' => 'Successfully deleted domain [_1]. Your web server
|
|
||||||
is now being restarted. The links on this page will be inactive
|
|
||||||
until the web server restart is complete.',
|
|
||||||
'dom_DESC_CORPORATE_DNS_CURRENT' => 'Corporate DNS Settings',
|
|
||||||
'dom_DOMAINS_PAGE_CORPORATE_DNS' => 'Modify corporate DNS settings',
|
|
||||||
'dom_DESC_CORPORATE_DNS' => 'If this server does not have access to the Internet, or
|
'dom_DESC_CORPORATE_DNS' => 'If this server does not have access to the Internet, or
|
||||||
you have special requirements for DNS resolution,
|
you have special requirements for DNS resolution,
|
||||||
enter the DNS server IP addresses here.
|
enter the DNS server IP addresses here.
|
||||||
These fields should be left blank unless
|
These fields should be left blank unless
|
||||||
you have a specific reason to configure other DNS servers.
|
you have a specific reason to configure other DNS servers.
|
||||||
You should not enter the address of your ISP\'s DNS servers
|
You should not enter the address of your ISP"s DNS servers
|
||||||
here, as the server is capable of resolving all
|
here, as the server is capable of resolving all
|
||||||
Internet DNS names without this additional configuration.',
|
Internet DNS names without this additional configuration.',
|
||||||
'dom_LABEL_CORPORATE_DNS_PRIMARY' => 'Primary corporate DNS server',
|
'dom_DESC_CORPORATE_DNS_CURRENT' => 'Corporate DNS Settings',
|
||||||
'dom_LABEL_CORPORATE_DNS_SECONDARY' => 'Secondary corporate DNS server',
|
|
||||||
'dom_DESC_NAMESERVERS' => 'You can select whether this domain is resolved locally,
|
'dom_DESC_NAMESERVERS' => 'You can select whether this domain is resolved locally,
|
||||||
passed to the corporate DNS servers, or resolved by
|
passed to the corporate DNS servers, or resolved by
|
||||||
the Internet DNS servers. The default will be correct
|
the Internet DNS servers. The default will be correct
|
||||||
for most networks.',
|
for most networks.',
|
||||||
|
'dom_DOMAIN_DESCRIPTION_VALIDATION_ERROR' => 'Error: unexpected or missing characters in domain description
|
||||||
|
[_1]. Did not create new domain.',
|
||||||
|
'dom_DOMAIN_IN_USE_ERROR' => 'Error: domain [_1] is already in use. Did not create
|
||||||
|
new domain.',
|
||||||
|
'dom_DOMAIN_NAME_VALIDATION_ERROR' => 'Error: unexpected or missing characters in domain name
|
||||||
|
[_1].The domain name should contain one or more
|
||||||
|
letters, numbers, periods and minus signs. Did not create new domain.',
|
||||||
|
'dom_DOMAINS_PAGE_CORPORATE_DNS' => 'Modify corporate DNS settings',
|
||||||
|
'dom_ERROR_WHILE_REMOVING_DOMAIN' => 'Error: internal failure while removing domain [_1].',
|
||||||
|
'dom_FORM_DESCRIPTION' => 'When you create a domain, your server will be able to
|
||||||
|
receive e-mail for that domain and will also be able to host a
|
||||||
|
web site for that domain.',
|
||||||
|
'dom_FORM_TITLE' => 'Manage domains',
|
||||||
|
'dom_internet' => 'Internet DNS servers',
|
||||||
|
'dom_LABEL_CORPORATE_DNS_PRIMARY' => 'Primary corporate DNS server',
|
||||||
|
'dom_LABEL_CORPORATE_DNS_SECONDARY' => 'Secondary corporate DNS server',
|
||||||
'dom_LABEL_NAMESERVERS' => 'Domain DNS servers',
|
'dom_LABEL_NAMESERVERS' => 'Domain DNS servers',
|
||||||
'dom_localhost' => 'Resolve locally',
|
'dom_localhost' => 'Resolve locally',
|
||||||
'dom_internet' => 'Internet DNS servers',
|
'dom_MODIFY_TITLE' => 'Modify domain',
|
||||||
'dom_corporate' => 'Corporate DNS servers',
|
'dom_NO_VIRTUAL_DOMAINS' => 'There are no domains in the system',
|
||||||
|
'dom_NONEXISTENT_DOMAIN_ERROR' => 'Error: [_1] is not an existing domain.',
|
||||||
|
'dom_PRIMARY_SITE' => 'primary site',
|
||||||
'dom_REMOVE_DESC' => 'You are about to remove the domain ',
|
'dom_REMOVE_DESC' => 'You are about to remove the domain ',
|
||||||
'dom_REMOVE_DESC2' => ' Are you sure you wish to remove this Domain ? ',
|
'dom_REMOVE_DESC2' => ' Are you sure you wish to remove this Domain ? ',
|
||||||
|
'dom_REMOVE_DESCRIPTION' => 'You are about to remove the domain "[_1]" ([_2]).',
|
||||||
|
'dom_REMOVE_TITLE' => 'Remove domain',
|
||||||
|
'dom_SUCCESSFULLY_CREATED' => 'Successfully created domain [_1].Your web
|
||||||
|
server is now being restarted. The links on this page will be
|
||||||
|
inactive until the web server restart is complete.',
|
||||||
|
'dom_SUCCESSFULLY_DELETED' => 'Successfully deleted domain [_1]. Your web server
|
||||||
|
is now being restarted. The links on this page will be inactive
|
||||||
|
until the web server restart is complete.',
|
||||||
|
'dom_SUCCESSFULLY_MODIFIED' => 'Successfully modified domain [_1].Your web
|
||||||
|
server is now being restarted. The links on this page will be inactive until the web server restart is complete.',
|
||||||
|
'dom_SYSTEM_DOMAIN_ERROR' => 'Error: domain [_1] is your system domain name. You
|
||||||
|
cannot have a domain with the same name. Did not create new domain.',
|
||||||
|
|||||||
@@ -1,129 +1,60 @@
|
|||||||
|
#
|
||||||
'mai_FORM_TITLE' => 'E-mail settings',
|
# Lex file for Emailsettings generated on 2025-07-17 09:52:31
|
||||||
'E-mail' => 'E-mail',
|
#
|
||||||
'mai_SUCCESS' => 'The new e-mail settings have been saved.',
|
'mai_ACC_panel_action_was_successful' => 'Email access settings saved sucessfully',
|
||||||
'mai_NEVER' => 'not at all',
|
'mai_ALLOW_PRIVATE' => 'Allow private',
|
||||||
'mai_EVERY5MIN' => 'Every 5 minutes',
|
'mai_AUTO' => 'Automatic',
|
||||||
'mai_EVERY15MIN' => 'Every 15 minutes',
|
'mai_DEL_panel_action_was_successful' => 'Email delivery settings saved sucessfully',
|
||||||
'mai_EVERY30MIN' => 'Every 30 minutes',
|
'mai_DESC_BLOCK_EXECUTABLE_CONTENT' => 'You can block executable content in e-mail attachments
|
||||||
'mai_EVERYHOUR' => 'Every hour',
|
by highlighting the executable attachment types you wish to
|
||||||
'mai_EVERY2HRS' => 'Every 2 hours',
|
block. E-mail containing these attachment types will
|
||||||
'mai_STANDARD' => 'Standard (SMTP)',
|
be automatically returned to the sender.',
|
||||||
'mai_ETRN' => 'ETRN (SMTP with client request)',
|
'mai_DESC_DELEGATE' => 'Your server includes a complete, full-featured e-mail server. However,
|
||||||
'mai_DEFAULT' => 'Default',
|
if for some reason you wish to delegate e-mail processing to
|
||||||
'mai_SPECIFY_BELOW' => 'Specify below',
|
another system, specify the IP address of the delegate system
|
||||||
'mai_MULTIDROP' => 'multi-drop',
|
here. For normal operation, leave this field blank.',
|
||||||
'mai_LABEL_MODE' => 'E-mail retrieval mode',
|
'mai_DESC_FETCH_PERIOD' => 'For ETRN or multi-drop, you can control how frequently this server
|
||||||
|
contacts your secondary e-mail server to fetch e-mail. More
|
||||||
|
frequent connections mean that you receive your e-mail more
|
||||||
|
quickly, but also cause Internet requests to be sent more often,
|
||||||
|
possibly increasing your phone and Internet charges.',
|
||||||
|
'mai_DESC_IMAP_ACCESS_CONTROL' => 'You can control IMAP server access. The setting "Allow access
|
||||||
|
only from local networks" allows IMAP access only from your
|
||||||
|
local network(s). The IMAPS setting can be used to provide
|
||||||
|
encrypted external access to your IMAP server. We recommend
|
||||||
|
leaving this setting "Allow access only from local networks"
|
||||||
|
unless you have a specific reason to do otherwise.',
|
||||||
'mai_DESC_MODE' => 'The e-mail retrieval mode can be set to
|
'mai_DESC_MODE' => 'The e-mail retrieval mode can be set to
|
||||||
standard (for dedicated Internet connections), ETRN (recommended
|
standard (for dedicated Internet connections), ETRN (recommended
|
||||||
for dialup connections), or multi-drop (for dialup connections if
|
for dialup connections), or multi-drop (for dialup connections if
|
||||||
ETRN is not supported by your Internet provider). Note that
|
ETRN is not supported by your Internet provider). Note that
|
||||||
multi-drop mode is the only option available when the server is
|
multi-drop mode is the only option available when the server is
|
||||||
configured in private server and gateway mode.',
|
configured in private server and gateway mode.',
|
||||||
'mai_LABEL_DELEGATE' => 'Address of internal mail server',
|
'mai_DESC_POP_ACCESS_CONTROL' => 'You can control POP3 server access. The setting "Allow access
|
||||||
'mai_TITLE_DELEGATE' => 'Delegate mail servers',
|
only from local networks" allows POP3 access only from your
|
||||||
'mai_DESC_DELEGATE' => 'Your server includes a complete, full-featured e-mail server. However,
|
local network(s). The POP3S setting can be used to provide
|
||||||
if for some reason you wish to delegate e-mail processing to
|
encrypted external access to your POP3 server. We recommend
|
||||||
another system, specify the IP address of the delegate system
|
leaving this setting "Allow access only from local networks"
|
||||||
here. For normal operation, leave this field blank.',
|
unless you have a specific reason to do otherwise.',
|
||||||
'mai_LABEL_SECONDARY' => 'Secondary mail server',
|
|
||||||
'mai_TITLE_SECONDARY' => 'ETRN or multi-drop settings',
|
|
||||||
'mai_DESC_SECONDARY' => 'For ETRN or multi-drop, specify the hostname or IP address of your
|
|
||||||
secondary mail server. (If using the standard e-mail setup, this
|
|
||||||
field can be left blank.)',
|
|
||||||
'mai_DESC_FETCH_PERIOD' => 'For ETRN or multi-drop, you can control how frequently this server
|
|
||||||
contacts your secondary e-mail server to fetch e-mail. More
|
|
||||||
frequent connections mean that you receive your e-mail more
|
|
||||||
quickly, but also cause Internet requests to be sent more often,
|
|
||||||
possibly increasing your phone and Internet charges.',
|
|
||||||
'mai_LABEL_FETCH_PERIOD' => 'During office hours (8:00 AM to 6:00 PM) on weekdays',
|
|
||||||
'mai_LABEL_FETCH_PERIOD_NIGHTS' => 'Outside office hours (6:00 PM to 8:00 AM) on weekdays',
|
|
||||||
'mai_LABEL_FETCH_PERIOD_WEEKENDS' => 'During the weekend',
|
|
||||||
'mai_DESC_POP_ACCOUNT' => 'For multi-drop e-mail, specify the POP user account and password.
|
'mai_DESC_POP_ACCOUNT' => 'For multi-drop e-mail, specify the POP user account and password.
|
||||||
(If using standard or ETRN e-mail, these fields can be blank.)
|
(If using standard or ETRN e-mail, these fields can be blank.)
|
||||||
Also, for multi-drop, you can either use the default mail sorting
|
Also, for multi-drop, you can either use the default mail sorting
|
||||||
method, or you can specify a particular message header to use for
|
method, or you can specify a particular message header to use for
|
||||||
mail sorting.',
|
mail sorting.',
|
||||||
'mai_LABEL_POP_PASS' => 'POP user password (for multi-drop)',
|
'mai_DESC_SECONDARY' => 'For ETRN or multi-drop, specify the hostname or IP address of your
|
||||||
'mai_LABEL_POP_ACCOUNT' => 'POP user account (for multi-drop)',
|
secondary mail server. (If using the standard e-mail setup, this
|
||||||
'mai_LABEL_SORT_METHOD' => 'Select sort method (for multi-drop)',
|
field can be left blank.)',
|
||||||
'mai_LABEL_SORT_HEADER' => 'Select sort header (for multi-drop)',
|
|
||||||
'mai_LABEL_FETCH_PROTO' => 'Protocol (for multi-drop)',
|
|
||||||
'mai_LABEL_FETCH_SECURE' => 'Tunnel over SSL (for multi-drop)',
|
|
||||||
'mai_AUTO' => 'Automatic',
|
|
||||||
'mai_ENABLED_BOTH' => 'Allow both HTTP and HTTPS',
|
|
||||||
'mai_ENABLED_SECURE_ONLY' => 'Allow HTTPS (secure)',
|
|
||||||
'mai_ONLY_LOCAL_NETWORK_SSL' => 'Allow HTTPS (secure) from local networks',
|
|
||||||
'mai_INSECURE_POP3' => 'Allow both POP3 and POP3S',
|
|
||||||
'mai_ALLOW_PRIVATE' => 'Allow private',
|
|
||||||
'mai_SECURE_POP3' => 'Allow private and public (secure POP3S)',
|
|
||||||
'mai_INSECURE_IMAP' => 'Allow both IMAP and IMAPS',
|
|
||||||
'mai_SECURE_IMAP' => 'Allow private and public (secure IMAPS)',
|
|
||||||
'mai_INSECURE_SMTP' => 'Allow both SMTP and SSMTP',
|
|
||||||
'mai_SECURE_SMTP' => 'Allow SSMTP (secure)',
|
|
||||||
'mai_LABEL_POP_ACCESS_CONTROL' => 'POP3 server access',
|
|
||||||
'mai_LABEL_IMAP_ACCESS_CONTROL' => 'IMAP server access',
|
|
||||||
'mai_LABEL_SMTP_AUTH_CONTROL' => 'SMTP authentication',
|
|
||||||
'mai_FORWARD_TO_ADMIN' => 'Send to administrator',
|
|
||||||
'mai_FORWARD_TO' => 'Send to',
|
|
||||||
'mai_RETURN_TO_SENDER' => 'Reject',
|
|
||||||
'mai_LABEL_UNKNOWN' => 'E-mail to unknown users',
|
|
||||||
'mai_TITLE_UNKNOWN' => 'Unknown Users',
|
|
||||||
'mai_DESC_UNKNOWN' => 'Selecting Reject (recommended setting) will configure the server to only
|
|
||||||
accept mail for valid email addresses (for example users, groups, pseudonyms).
|
|
||||||
Mail for other addresses will be rejected.',
|
|
||||||
'mai_LABEL_SMARTHOST' => 'Address of Internet provider\'s mail server',
|
|
||||||
'mai_TITLE_SMARTHOST' => 'SMTP server',
|
|
||||||
'mai_DESC_SMARTHOST' => 'The server can deliver outgoing messages directly to their
|
'mai_DESC_SMARTHOST' => 'The server can deliver outgoing messages directly to their
|
||||||
destination (recommended in most cases) or can deliver them via
|
destination (recommended in most cases) or can deliver them via
|
||||||
your Internet provider\'s SMTP server (recommended if you have an
|
your Internet provider"s SMTP server (recommended if you have an
|
||||||
unreliable Internet connection or are using a residential Internet
|
unreliable Internet connection or are using a residential Internet
|
||||||
service). If using your Internet provider\'s SMTP server, specify
|
service). If using your Internet provider"s SMTP server, specify
|
||||||
its hostname or IP address below. Otherwise leave this field
|
its hostname or IP address below. Otherwise leave this field blank.',
|
||||||
blank.',
|
|
||||||
'mai_INVALID_SMARTHOST' => 'The smarthost name you entered is not a valid internet domain name
|
|
||||||
and is not blank',
|
|
||||||
'mai_DESC_POP_ACCESS_CONTROL' => 'You can control POP3 server access. The setting \'Allow access
|
|
||||||
only from local networks\' allows POP3 access only from your
|
|
||||||
local network(s). The POP3S setting can be used to provide
|
|
||||||
encrypted external access to your POP3 server. We recommend
|
|
||||||
leaving this setting \'Allow access only from local networks\'
|
|
||||||
unless you have a specific reason to do otherwise.',
|
|
||||||
'mai_DESC_IMAP_ACCESS_CONTROL' => 'You can control IMAP server access. The setting \'Allow access
|
|
||||||
only from local networks\' allows IMAP access only from your
|
|
||||||
local network(s). The IMAPS setting can be used to provide
|
|
||||||
encrypted external access to your IMAP server. We recommend
|
|
||||||
leaving this setting \'Allow access only from local networks\'
|
|
||||||
unless you have a specific reason to do otherwise.',
|
|
||||||
'mai_DESC_SMTP_AUTH_CONTROL' => 'You can provide authenticated access to your SMTP server, or
|
'mai_DESC_SMTP_AUTH_CONTROL' => 'You can provide authenticated access to your SMTP server, or
|
||||||
set it to Disabled.
|
set it to Disabled.
|
||||||
The SSMTP setting requires <b>all</b> users to use SSL/TLS
|
The SSMTP setting requires <b>all</b> users to use SSL/TLS
|
||||||
authentication. The SMTP and SSMTP option additionally allows
|
authentication. The SMTP and SSMTP option additionally allows
|
||||||
STARTTLS to be used to ensure secure authentication.',
|
STARTTLS to be used to ensure secure authentication.',
|
||||||
'mai_DESC_WEBMAIL' => 'You can enable or disable webmail on this system. Webmail allows
|
|
||||||
users to access their mail through a regular web browser by
|
|
||||||
pointing the browser to https://[_1]/webmail,and
|
|
||||||
logging in to their account.',
|
|
||||||
'mai_LABEL_WEBMAIL' => 'Webmail access',
|
|
||||||
'mai_LABEL_BLOCK_EXECUTABLE_CONTENT' => 'Executable content blocking',
|
|
||||||
'mai_LABEL_CONTENT_TO_BLOCK' => 'Content to block',
|
|
||||||
'mai_DESC_BLOCK_EXECUTABLE_CONTENT' => 'You can block executable content in e-mail attachments
|
|
||||||
by highlighting the executable attachment types you wish to
|
|
||||||
block. E-mail containing these attachment types will
|
|
||||||
be automatically returned to the sender.',
|
|
||||||
'mai_UNACCEPTABLE_CHARS' => 'This field requires a valid e-mail address, which must include
|
|
||||||
the @ symbol and a domain name.',
|
|
||||||
'mai_DESC_STATE_ACCESS' => 'E-mail access',
|
|
||||||
'mai_DESC_STATE_ACCESS_BUTTON' => 'Change e-mail access settings',
|
|
||||||
'mai_DESC_STATE_RECEPTION' => 'E-mail reception',
|
|
||||||
'mai_DESC_STATE_RECEPTION_BUTTON' => 'Change e-mail reception settings',
|
|
||||||
'mai_DESC_STATE_DELIVERY' => 'E-mail delivery',
|
|
||||||
'mai_DESC_STATE_DELIVERY_BUTTON' => 'Change e-mail delivery settings',
|
|
||||||
'mai_DESC_STATE_FILTERING_BUTTON' => 'Change e-mail filtering settings',
|
|
||||||
'mai_LABEL_VIRUS_SCAN' => 'Virus scanning',
|
|
||||||
'mai_DESC_VIRUS_SCAN' => 'You can scan incoming and outgoing e-mail for viruses. If scanning is enabled and a virus is detected, the e-mail will be rejected and returned to the
|
|
||||||
sender.',
|
|
||||||
'mai_LABEL_SPAM_SCAN' => 'Spam filtering',
|
|
||||||
'mai_DESC_SPAM_SCAN' => 'You can scan e-mail for spam. If Spam filtering is
|
'mai_DESC_SPAM_SCAN' => 'You can scan e-mail for spam. If Spam filtering is
|
||||||
enabled, an X-Spam-Status: header is added to each
|
enabled, an X-Spam-Status: header is added to each
|
||||||
message, which can be used for filtering spam.
|
message, which can be used for filtering spam.
|
||||||
@@ -132,23 +63,98 @@ process from the default of medium. For fine-grained
|
|||||||
control, you can set the Spam sensitivity to Custom
|
control, you can set the Spam sensitivity to Custom
|
||||||
and then choose a custom tagging level, and
|
and then choose a custom tagging level, and
|
||||||
optionally a level at which to reject the message.',
|
optionally a level at which to reject the message.',
|
||||||
'mai_LABEL_SPAM_SUBJECT' => 'SPAM subject prefix',
|
|
||||||
'mai_DESC_SPAM_SUBJECT' => 'You can enable to add a tag to the subject of each
|
'mai_DESC_SPAM_SUBJECT' => 'You can enable to add a tag to the subject of each
|
||||||
message that is classified as SPAM.
|
message that is classified as SPAM.
|
||||||
The value for this tag can be defined below.',
|
The value for this tag can be defined below.',
|
||||||
'mai_LABEL_SPAM_SENSITIVITY' => 'Spam sensitivity',
|
'mai_DESC_STATE_ACCESS' => 'E-mail access',
|
||||||
'mai_LABEL_SPAM_TAGLEVEL' => 'Custom spam tagging level',
|
'mai_DESC_STATE_ACCESS_BUTTON' => 'Change e-mail access settings',
|
||||||
'mai_LABEL_SPAM_REJECTLEVEL' => 'Custom spam rejection level',
|
'mai_DESC_STATE_DELIVERY' => 'E-mail delivery',
|
||||||
'mai_LABEL_SPAM_SUBJECTTAG' => 'Modify subject of spam messages',
|
'mai_DESC_STATE_DELIVERY_BUTTON' => 'Change e-mail delivery settings',
|
||||||
'mai_LABEL_SORTSPAM' => 'Sort spam into junkmail folder',
|
'mai_DESC_STATE_FILTERING_BUTTON' => 'Change e-mail filtering settings',
|
||||||
'mai_VERYHIGH' => 'Very high',
|
'mai_DESC_STATE_RECEPTION' => 'E-mail reception',
|
||||||
'mai_HIGH' => 'High',
|
'mai_DESC_STATE_RECEPTION_BUTTON' => 'Change e-mail reception settings',
|
||||||
'mai_MEDIUM' => 'Medium',
|
'mai_DESC_UNKNOWN' => 'Selecting Reject (recommended setting) will configure the server to only
|
||||||
'mai_LOW' => 'Low',
|
accept mail for valid email addresses (for example users, groups, pseudonyms).
|
||||||
'mai_VERYLOW' => 'Very low',
|
Mail for other addresses will be rejected.',
|
||||||
'mai_CUSTOM' => 'Custom',
|
'mai_DESC_VIRUS_SCAN' => 'You can scan incoming and outgoing e-mail for viruses. If scanning is enabled and a virus is detected, the e-mail will be rejected and returned to the
|
||||||
|
sender.',
|
||||||
|
'mai_DESC_WEBMAIL' => 'You can enable or disable webmail on this system. Webmail allows
|
||||||
|
users to access their mail through a regular web browser by
|
||||||
|
pointing the browser to https://[_1]/webmail,and
|
||||||
|
logging in to their account.',
|
||||||
|
'mai_E-Mail' => 'E-mail',
|
||||||
|
'mai_ENABLED_BOTH' => 'Allow both HTTP and HTTPS',
|
||||||
|
'mai_ENABLED_SECURE_ONLY' => 'Allow HTTPS (secure)',
|
||||||
|
'mai_ETRN' => 'ETRN (SMTP with client request)',
|
||||||
|
'mai_EVERY15MIN' => 'Every 15 minutes',
|
||||||
|
'mai_EVERY2HRS' => 'Every 2 hours',
|
||||||
|
'mai_EVERY30MIN' => 'Every 30 minutes',
|
||||||
|
'mai_EVERY5MIN' => 'Every 5 minutes',
|
||||||
|
'mai_EVERYHOUR' => 'Every hour',
|
||||||
|
'mai_FIL_panel_action_was_successful' => 'Email filtering settings saved sucessfully',
|
||||||
|
'mai_FORM_TITLE' => 'E-mail settings',
|
||||||
|
'mai_FORWARD_TO' => 'Send to',
|
||||||
|
'mai_FORWARD_TO_ADMIN' => 'Send to administrator',
|
||||||
|
'mai_INSECURE_IMAP' => 'Allow both IMAP and IMAPS',
|
||||||
|
'mai_INSECURE_POP3' => 'Allow both POP3 and POP3S',
|
||||||
|
'mai_INSECURE_SMTP' => 'Allow both SMTP and SSMTP',
|
||||||
|
'mai_INVALID_DELEGATE' => 'The delegate host name you entered is not a valid IP Address and is not blank',
|
||||||
|
'mai_INVALID_SMARTHOST' => 'The smarthost name you entered is not a valid internet domain name and is not blank',
|
||||||
|
'mai_LABEL_BLOCK_EXECUTABLE_CONTENT' => 'Executable content blocking',
|
||||||
|
'mai_LABEL_CONTENT_TO_BLOCK' => 'Content to block',
|
||||||
|
'mai_LABEL_DELEGATE' => 'IP Address of internal mail server',
|
||||||
|
'mai_LABEL_FETCH_PERIOD' => 'During office hours (8:00 AM to 6:00 PM) on weekdays',
|
||||||
|
'mai_LABEL_FETCH_PERIOD_NIGHTS' => 'Outside office hours (6:00 PM to 8:00 AM) on weekdays',
|
||||||
|
'mai_LABEL_FETCH_PERIOD_WEEKENDS' => 'During the weekend',
|
||||||
|
'mai_LABEL_FETCH_PROTO' => 'Protocol (for multi-drop)',
|
||||||
|
'mai_LABEL_FETCH_SECURE' => 'Tunnel over SSL (for multi-drop)',
|
||||||
|
'mai_LABEL_IMAP_ACCESS_CONTROL' => 'IMAP server access',
|
||||||
|
'mai_LABEL_MODE' => 'E-mail retrieval mode',
|
||||||
|
'mai_LABEL_POP_ACCESS_CONTROL' => 'POP3 server access',
|
||||||
|
'mai_LABEL_POP_ACCOUNT' => 'POP user account (for multi-drop)',
|
||||||
|
'mai_LABEL_POP_PASS' => 'POP user password (for multi-drop)',
|
||||||
|
'mai_LABEL_SECONDARY' => 'Secondary mail server',
|
||||||
|
'mai_LABEL_SMARTHOST' => 'Address of Internet provider"s mail server',
|
||||||
|
'mai_LABEL_SMARTHOST_SMTPAUTH_PASSWD' => 'Mail server password',
|
||||||
'mai_LABEL_SMARTHOST_SMTPAUTH_STATUS' => 'SMTP Authentication for Internet provider',
|
'mai_LABEL_SMARTHOST_SMTPAUTH_STATUS' => 'SMTP Authentication for Internet provider',
|
||||||
'mai_LABEL_SMARTHOST_SMTPAUTH_USERID' => 'Mail server user id',
|
'mai_LABEL_SMARTHOST_SMTPAUTH_USERID' => 'Mail server user id',
|
||||||
'mai_LABEL_SMARTHOST_SMTPAUTH_PASSWD' => 'Mail server password',
|
'mai_LABEL_SMTP_AUTH_CONTROL' => 'SMTP authentication',
|
||||||
'mai_VALIDATION_SMTPAUTH_NONBLANK' => 'This field cannot be left blank if SMTP Authentication is
|
'mai_LABEL_SORT_HEADER' => 'Select sort header (for multi-drop)',
|
||||||
|
'mai_LABEL_SORT_METHOD' => 'Select sort method (for multi-drop)',
|
||||||
|
'mai_LABEL_SORTSPAM' => 'Sort spam into junkmail folder',
|
||||||
|
'mai_LABEL_SPAM_REJECTLEVEL' => 'Custom spam rejection level',
|
||||||
|
'mai_LABEL_SPAM_SCAN' => 'Spam filtering',
|
||||||
|
'mai_LABEL_SPAM_SENSITIVITY' => 'Spam sensitivity',
|
||||||
|
'mai_LABEL_SPAM_SUBJECT' => 'SPAM subject prefix',
|
||||||
|
'mai_LABEL_SPAM_SUBJECTTAG' => 'Modify subject of spam messages',
|
||||||
|
'mai_LABEL_SPAM_TAGLEVEL' => 'Custom spam tagging level',
|
||||||
|
'mai_LABEL_UNKNOWN' => 'E-mail to unknown users',
|
||||||
|
'mai_LABEL_VIRUS_SCAN' => 'Virus scanning',
|
||||||
|
'mai_LABEL_WEBMAIL' => 'Webmail access',
|
||||||
|
'mai_MULTIDROP' => 'multi-drop',
|
||||||
|
'mai_NEVER' => 'not at all',
|
||||||
|
'mai_ONLY_LOCAL_NETWORK_SSL' => 'Allow HTTPS (secure) from local networks',
|
||||||
|
'mai_REC_panel_action_was_successful' => 'Email receive settings saved sucessfully',
|
||||||
|
'mai_SECURE_IMAP' => 'Allow private and public (secure IMAPS)',
|
||||||
|
'mai_SECURE_POP3' => 'Allow private and public (secure POP3S)',
|
||||||
|
'mai_SECURE_SMTP' => 'Allow SSMTP (secure)',
|
||||||
|
'mai_SMTP_port_(25)' => 'Smtp port (25) main purpose is to receive emails from another server, starttls is always offered, but auth if offered is only if starttls is also used by client.',
|
||||||
|
'mai_SMTP_port_authenticate' => 'Smtp port %u allow client to authenticate:',
|
||||||
|
'mai_SMTP_Submission' => 'Smtp submission port (587) will require starttls, then authenticate to send.',
|
||||||
|
'mai_SMTPS_port_(465)' => 'Smtps port (465) will require implicit ssl/tls then authenticate to send.',
|
||||||
|
'mai_SMTPS_SSL/TLS' => 'Smtps ssl/tls auth: port %u status:',
|
||||||
|
'mai_SPECIFY_BELOW' => 'Specify below',
|
||||||
|
'mai_STANDARD' => 'Standard (SMTP)',
|
||||||
|
'mai_Submission_port' => 'Submission port %u status:',
|
||||||
|
'mai_SUCCESS' => 'The new e-mail settings have been saved.',
|
||||||
|
'mai_TITLE_DELEGATE' => 'Delegate mail servers',
|
||||||
|
'mai_TITLE_SECONDARY' => 'ETRN or multi-drop settings',
|
||||||
|
'mai_TITLE_SMARTHOST' => 'SMTP server',
|
||||||
|
'mai_TITLE_UNKNOWN' => 'Unknown Users',
|
||||||
|
'mai_UNACCEPTABLE_CHARS' => 'This field requires a valid e-mail address, which must include
|
||||||
|
the @ symbol and a domain name.',
|
||||||
|
'mai_VALIDATION_SMTPAUTH_NONBLANK' => 'The user id and password fields cannot be left blank if SMTP Authentication is
|
||||||
enabled.',
|
enabled.',
|
||||||
|
'mai_VERYHIGH' => 'Very high',
|
||||||
|
'mai_VERYLOW' => 'Very low',
|
||||||
|
'mai_RETURN_TO_SENDER' => 'Reject',
|
||||||
@@ -1,155 +1,155 @@
|
|||||||
'edit' => 'edit',
|
#
|
||||||
'del' => 'del',
|
# Lex file for General generated on 2025-07-17 09:52:34
|
||||||
'exit' => 'Exit',
|
#
|
||||||
'cancel' => 'Cancel',
|
|
||||||
'hello' => 'hello',
|
|
||||||
'All rights reserved' => 'All Rights Reserved',
|
|
||||||
'Collaboration' => 'Collaboration',
|
|
||||||
'Administration' => 'Administration',
|
|
||||||
'Security' => 'Security',
|
|
||||||
'Configuration' => 'Configuration',
|
|
||||||
'Miscellaneous' => 'Miscellaneous',
|
|
||||||
'Your Settings' => 'Your Settings',
|
|
||||||
'SAVE' => 'Save',
|
|
||||||
'CANCEL' => 'Cancel',
|
|
||||||
'ENABLED' => 'Enabled',
|
|
||||||
'DISABLED' => 'Disabled',
|
|
||||||
'NO' => 'No',
|
|
||||||
'YES' => 'Yes',
|
|
||||||
'ADD' => 'Add',
|
|
||||||
'CREATE' => 'Create',
|
|
||||||
'MODIFY' => 'Modify',
|
|
||||||
'REMOVE' => 'Remove',
|
|
||||||
'COMMENT' => 'Comment',
|
|
||||||
'NEXT' => 'Next',
|
|
||||||
'SELF' => 'Self',
|
|
||||||
'REMOTE' => 'Remote',
|
|
||||||
'LOCAL' => 'Local',
|
|
||||||
'ACTION' => 'Action',
|
|
||||||
'NETWORK' => 'Network',
|
|
||||||
'ROUTER' => 'Router',
|
|
||||||
'OPERATION_STATUS_REPORT' => 'Operation status report',
|
|
||||||
'ACCOUNT' => 'Account',
|
'ACCOUNT' => 'Account',
|
||||||
'GROUP' => 'Group',
|
|
||||||
'DESC_SECTIONBAR' => '<hr class="sectionbar"/>',
|
|
||||||
'NO_PIPES_ALLOWED' => 'Pipe symbols (|) are not permitted in this field',
|
|
||||||
'ERROR_BELOW' => 'ERROR: There was an error in the validation of this page. Please scroll down and find the specific problem.',
|
|
||||||
'ACCESS' => 'Access',
|
|
||||||
'ACCOUNT_LOCKED' => 'Account is locked',
|
|
||||||
'GROUP_ADD' => 'Add group',
|
|
||||||
'NETWORKS_ALLOW_LOCAL' => 'Allow access only from local networks',
|
|
||||||
'NETWORKS_ALLOW_PUBLIC' => 'Allow public access (entire Internet)',
|
|
||||||
'ERROR_PASSWORD_CHANGE' => 'An error occurred while attempting to change your password. Please make sure that the old password entered is correct.',
|
|
||||||
'BACK' => 'Back',
|
|
||||||
'BACKUP' => 'Backup',
|
|
||||||
'DESCRIPTION_BRIEF' => 'Brief description',
|
|
||||||
'PASSWORD_CHANGE' => 'Change Password',
|
|
||||||
'RESET_PASSWORD_TITLE' => 'Reset user password',
|
|
||||||
'ACCOUNT_PASSWORD_CHANGE' => 'Change account password',
|
|
||||||
'CONTENT' => 'Content',
|
|
||||||
'CREATE_GROUP' => 'Create user group',
|
|
||||||
'USER_LIST_CURRENT' => 'Current list of users',
|
|
||||||
'DESCRIPTION' => 'Description',
|
|
||||||
'DESTINATION' => 'Destination',
|
|
||||||
'DOMAIN_NAME' => 'Domain name',
|
|
||||||
'DOMAIN' => 'Domain',
|
|
||||||
'DOMAINS' => 'Domains',
|
|
||||||
'DOWNLOAD' => 'Download',
|
|
||||||
'ERROR_UPDATING_CONFIGURATION' => 'Error occurred while updating system configuration.',
|
|
||||||
'GROUP_MEMBERS' => 'Group Members',
|
|
||||||
'GROUP_NAME' => 'Group Name',
|
|
||||||
'GROUPS' => 'Groups',
|
|
||||||
'IP_ADDRESS' => 'IP Address',
|
|
||||||
'IP_ADDRESS_OR_FQDN' => 'IP Address or FQDN',
|
|
||||||
'USER_INVALID' => 'Invalid user',
|
|
||||||
'LOCATION' => 'Location',
|
|
||||||
'MB' => 'Mb',
|
|
||||||
'MODIFY_USER_GROUP' => 'Modify user group',
|
|
||||||
'NAME' => 'Name',
|
|
||||||
'PASSWORD_VERIFY_NEW' => 'New password (verify):',
|
|
||||||
'PASSWORD_NEW' => 'New password:',
|
|
||||||
'OFF' => 'Off',
|
|
||||||
'OK' => 'Ok',
|
|
||||||
'PASSWORD_OLD' => 'Old password:',
|
|
||||||
'ON' => 'On',
|
|
||||||
'PASSWORD' => 'Password',
|
|
||||||
'PERFORM' => 'Perform',
|
|
||||||
'RECONFIGURE' => 'Reconfigure',
|
|
||||||
'REMOVE_USER_GROUP' => 'Remove user group',
|
|
||||||
'PASSWORD_RESET' => 'Reset password',
|
|
||||||
'RESTORE' => 'Restore',
|
|
||||||
'SHUTDOWN' => 'Shutdown',
|
|
||||||
'SUCCESS' => 'Success',
|
|
||||||
'ACCOUNT_NAME_INVALID' => 'The account name entered is invalid.',
|
|
||||||
'ACCOUNT_NAME_INVALID_CHARS' => 'The account name you entered contained invalid characters.',
|
|
||||||
'PASSWORD_OLD_INVALID_CHARS' => 'The old password you entered contained invalid characters.',
|
|
||||||
'PASSWORD_INVALID_CHARS' => 'The password you entered contained invalid characters.',
|
|
||||||
'PASSWORD_VERIFY_ERROR' => 'The passwords you entered did not match.',
|
|
||||||
'ACCOUNT_USER_NONE' => 'There are no user accounts in the system.',
|
|
||||||
'ACCOUNT_GROUP_NONE' => 'There are no user groups in the system.',
|
'ACCOUNT_GROUP_NONE' => 'There are no user groups in the system.',
|
||||||
'ERROR_INVALID_CHARS' => 'Unexpected characters in description.',
|
'ACCOUNT_LOCKED' => 'Account is locked',
|
||||||
'USER_NAME' => 'User Name',
|
'ACCOUNT_USER_NONE' => 'There are no user accounts in the system.',
|
||||||
'YOUR_ACCOUNT' => 'Your account:',
|
'ACTION' => 'Action',
|
||||||
'YOUR_ACCOUNT_INVALID' => 'The account name entered is invalid.',
|
'ADD' => 'Add',
|
||||||
'PASSWORD_CHANGE_SUCCESS' => 'Your password has been successfully changed.',
|
'ALL_BACKUPS' => 'All backups',
|
||||||
'FM_NONBLANK' => 'This field must not be left blank',
|
'Allow_local_access_only' => 'Allow local access only',
|
||||||
'FM_INTEGER' => 'This field must contain a positive integer',
|
'Allow_public_access' => 'Allow public access',
|
||||||
'FM_NUMBER' => 'This field must contain a number',
|
'AM/PM:' => 'Am/pm:',
|
||||||
'FM_WORD' => 'This field must look like a single word.',
|
'Apply' => 'Apply',
|
||||||
'FM_DATE' => 'The data entered could not be parsed as a date',
|
'Back' => 'Back',
|
||||||
'FM_CREDIT_CARD_NUMBER1' => 'You must enter a credit card number',
|
'Blocked' => 'Blocked',
|
||||||
'FM_CREDIT_CARD_NUMBER2' => 'Credit card numbers shouldn\'t have anything but numbers, spaces or dashes',
|
'Check' => 'Check',
|
||||||
'FM_CREDIT_CARD_NUMBER3' => 'Must be at least 14 characters in length',
|
'Check_Domain' => 'Check domain',
|
||||||
'FM_CREDIT_CARD_NUMBER4' => 'Doesn\'t appear to be a valid credit card number',
|
'cifs' => 'Cifs',
|
||||||
'FM_CREDIT_CARD_EXPIRY1' => 'No expiry date entered.',
|
'City' => 'City',
|
||||||
'FM_CREDIT_CARD_EXPIRY2' => 'Expiry date must be in the format MM/YY or MM/YYYY',
|
'COMMENT' => 'Comment',
|
||||||
'FM_CREDIT_CARD_EXPIRY3' => 'This expiry date appears to have already passed',
|
'Company' => 'Company',
|
||||||
'FM_CREDIT_CARD_EXPIRY4' => 'This expiry date appears to be too far in the future',
|
'Config' => 'Config',
|
||||||
'FM_ISO_COUNTRY_CODE1' => 'You must provide a country code',
|
'Content' => 'Content',
|
||||||
'FM_ISO_COUNTRY_CODE2' => 'This field does not contain an ISO country code',
|
'COULD_NOT_GET_UID' => 'Could not get uid',
|
||||||
'FM_US_STATE' => 'This doesn\'t appear to be a valid 2-letter US state abbreviation',
|
'COULD_NOT_OPEN_TZ_FILE' => 'Could not open tz file',
|
||||||
'FM_US_ZIPCODE' => 'US zip codes must contain 5 or 9 numbers',
|
'CREATE_GROUP' => 'Create user group',
|
||||||
'FM_MINLENGTH1' => 'Minimum length has been specified meaninglessly as [_1]',
|
'Custom' => 'Custom',
|
||||||
'FM_MINLENGTH2' => 'This field must be at least [_1] characters',
|
'Daily' => 'Daily',
|
||||||
'FM_MAXLENGTH1' => 'Maximum length has been specified meaninglessly as [_1]',
|
'Date' => 'Date',
|
||||||
'FM_MAXLENGTH2' => 'This field must be no more than [_1] characters',
|
'Day:' => 'Day:',
|
||||||
'FM_EXACTLENGTH1' => 'You must specify the length for the field.',
|
'Default' => 'Default',
|
||||||
'FM_EXACTLENGTH2' => 'You must specify the exactlength of the field with an integer',
|
'DELETE_ERROR' => 'Delete error',
|
||||||
'FM_EXACTLENGTH3' => 'This field must be exactly [_1] characters',
|
'Department' => 'Department',
|
||||||
'FM_LENGTHRANGE1' => 'You must specify the maximum and minimum length for the field.',
|
'DESCRIPTION' => 'Description',
|
||||||
'FM_LENGTHRANGE2' => 'You must specify the maximum and minimum lengths of the field with an integer',
|
'DESCRIPTION_BRIEF' => 'Brief description',
|
||||||
'FM_LENGTHRANGE3' => 'This field must be between [_1] and [_2] characters',
|
'DISABLED' => 'Disabled',
|
||||||
'FM_URL' => 'This field must contain a URL starting with http:// or ftp://',
|
'DOMAIN' => 'Domain',
|
||||||
'FM_EMAIL_SIMPLE1' => 'You must enter an email address.',
|
'DOMAIN_NAME' => 'Domain name',
|
||||||
'FM_EMAIL_SIMPLE2' => 'This field doesn\'t look like an RFC822-compliant email address',
|
'DOWNLOAD' => 'Download',
|
||||||
'FM_DOMAIN_NAME' => 'This field doesn\'t look like a valid Internet domain name or hostname.',
|
'Email' => 'Email',
|
||||||
|
'ENABLED' => 'Enabled',
|
||||||
|
'END_OF_REPORT' => 'End of Report',
|
||||||
|
'ENTIRE_INTERNET_NO_PASSWORD' => 'Entire internet no password',
|
||||||
|
'ENTIRE_INTERNET_PASSWORD' => 'Entire internet password',
|
||||||
|
'ENTIRE_INTERNET_PASSWORD_REMOTE' => 'Entire internet password remote',
|
||||||
|
'Error_occurred_while_modifying_password_for_admin.' => 'Error occurred while modifying password for admin.',
|
||||||
|
'ERROR_UPDATING' => 'Error updating',
|
||||||
|
'ERROR_UPDATING_CONFIGURATION' => 'Error occurred while updating system configuration.',
|
||||||
|
'EVERYONE' => 'Everyone',
|
||||||
|
'Everyone' => 'Everyone',
|
||||||
|
'Expiry' => 'Expiry',
|
||||||
|
'files' => 'files',
|
||||||
|
'firstname' => 'firstname',
|
||||||
|
'FM_ERR_UNEXPECTED_DESC' => 'Error: unexpected or missing characters in description',
|
||||||
'FM_IP_NUMBER1' => 'This field must contain a valid IP number and can not be left blank.',
|
'FM_IP_NUMBER1' => 'This field must contain a valid IP number and can not be left blank.',
|
||||||
'FM_IP_NUMBER2' => 'Invalid IP address format (expected X.X.X.X)',
|
'FM_IP_NUMBER2' => 'Invalid IP address format (expected X.X.X.X)',
|
||||||
'FM_IP_NUMBER3' => '[_1] is more than 255',
|
|
||||||
'FM_USERNAME' => 'This field must look like a valid username (3 to 8 letters and numbers)',
|
|
||||||
'FM_PASSWORD1' => 'You must provide a password.',
|
|
||||||
'FM_PASSWORD2' => 'The password you provided was not a good password. A good password must contain all of the following: upper case letter, lower case letter, number, non-alphanumeric character, be at least 7 characters long.',
|
|
||||||
'FM_MAC_ADDRESS1' => 'You must provide a MAC address.',
|
'FM_MAC_ADDRESS1' => 'You must provide a MAC address.',
|
||||||
'FM_MAC_ADDRESS2' => 'The MAC address you provided was not valid.',
|
'FM_MAC_ADDRESS2' => 'The MAC address you provided was not valid.',
|
||||||
'FM_ERR_UNEXPECTED_DESC' => 'Error: unexpected or missing characters in description',
|
'FM_NONBLANK' => 'This field must not be left blank',
|
||||||
swt_THEME => 'Theme',
|
'Gateway' => 'Gateway',
|
||||||
swt_LOGIN_AGAIN => 'You may need to login again to see the choosed theme',
|
'GROUP' => 'Group',
|
||||||
acs_NO => 'Not Authorized',
|
'GROUP_ADD' => 'Add group',
|
||||||
acs_LOGIN => 'Login required',
|
'GROUP_MEMBERS' => 'Group Members',
|
||||||
acs_ADMIN => 'Admin rights required',
|
'GROUP_NAME' => 'Group Name',
|
||||||
'User password' => 'User password',
|
'High' => 'High',
|
||||||
Logout => 'Logout',
|
'Hostname' => 'Hostname',
|
||||||
Home => 'Home',
|
'Hour:' => 'Hour:',
|
||||||
CSRF_VALIDATION_FAILURE => 'Error: CSRF token is invalid or outdated.',
|
'Install' => 'Install',
|
||||||
Empty => 'Empty',
|
'INVALID_REPORT_TYPE' => 'Invalid report type',
|
||||||
Active => 'Active',
|
'INVALID_SERVERNAME' => 'Invalid servername',
|
||||||
MINUTE => 'Minute',
|
'INVALID_WORKGROUP' => 'Invalid workgroup',
|
||||||
MINUTES => 'Minutes',
|
'INVALID_WORKGROUP_MATCHES_SERVERNAME' => 'Invalid workgroup matches servername',
|
||||||
HOUR => 'Hour',
|
'IP_ADDRESS_OR_FQDN' => 'IP Address or FQDN',
|
||||||
HOURS => 'Hours',
|
'Issuer' => 'Issuer',
|
||||||
SMALL => 'Small',
|
'lastname' => 'lastname',
|
||||||
MEDIUM => 'Medium',
|
'LOCAL' => 'Local',
|
||||||
LARGE => 'Large',
|
'LOCAL_NETWORK_NO_PASSWORD' => 'Local network no password',
|
||||||
FIELD_INVALID_CHARS => 'A field you entered contains invalid characters.',
|
'LOCAL_NETWORK_PASSWORD' => 'Local network password',
|
||||||
'REPORT_GENERATED' => "Report generated",
|
'local_removable_disk' => 'Local removable disk',
|
||||||
'END_OF_REPORT' => 'End of Report',
|
'LOCATION' => 'Location',
|
||||||
|
'Location' => 'Location',
|
||||||
|
'Lock' => 'Lock',
|
||||||
|
'Low' => 'Low',
|
||||||
|
'Medium' => 'Medium',
|
||||||
|
'megabytes' => 'megabytes',
|
||||||
|
'Minute:' => 'Minute:',
|
||||||
|
'MODIFY' => 'Modify',
|
||||||
|
'Modify' => 'Modify',
|
||||||
|
'MODIFY_USER_GROUP' => 'Modify user group',
|
||||||
|
'Month:' => 'Month:',
|
||||||
|
'Monthly' => 'Monthly',
|
||||||
|
'Mounted_disk' => 'Mounted disk',
|
||||||
|
'NAME' => 'Name',
|
||||||
|
'NETWORK' => 'Network',
|
||||||
|
'NETWORKS_ALLOW_LOCAL' => 'Allow access only from local networks',
|
||||||
|
'NETWORKS_ALLOW_PUBLIC' => 'Allow public access (entire Internet)',
|
||||||
|
'Never' => 'Never',
|
||||||
|
'NEXT' => 'Next',
|
||||||
|
'nfs' => 'Nfs',
|
||||||
|
'NO' => 'No',
|
||||||
|
'NONE' => 'None',
|
||||||
|
'NOT_A_PSEUDONYM' => 'Not a pseudonym',
|
||||||
|
'NUM_OF_HOSTS' => 'Num of hosts',
|
||||||
|
'Only_allow_insecure_access' => 'Only allow insecure access',
|
||||||
|
'Operation' => 'Operation',
|
||||||
|
'PASSWORD' => 'Password',
|
||||||
|
'PASSWORD_NEW' => 'New password:',
|
||||||
|
'PASSWORD_RESET' => 'Reset password',
|
||||||
|
'PASSWORD_VERIFY_ERROR' => 'The passwords you entered did not match.',
|
||||||
|
'PASSWORD_VERIFY_NEW' => 'New password (verify):',
|
||||||
|
'PERFORM' => 'Perform',
|
||||||
|
'PptpSessions' => 'Pptpsessions',
|
||||||
|
'Protocol' => 'Protocol',
|
||||||
|
'Pseudonym' => 'Pseudonym',
|
||||||
|
'Reboot' => 'Reboot',
|
||||||
|
'RECONFIGURE' => 'Reconfigure',
|
||||||
|
'Reject' => 'Reject',
|
||||||
|
'REMOTE' => 'Remote',
|
||||||
|
'REMOVE' => 'Remove',
|
||||||
|
'REMOVE_USER_GROUP' => 'Remove user group',
|
||||||
|
'REPORT_GENERATED' => 'Report generated',
|
||||||
|
'RESET_PASSWORD_TITLE' => 'Reset user password',
|
||||||
|
'ROUTER' => 'Router',
|
||||||
|
'SAVE' => 'Save',
|
||||||
|
'Save' => 'Save',
|
||||||
|
'Second:' => 'Second:',
|
||||||
|
'SELF' => 'Self',
|
||||||
|
'SHUTDOWN' => 'Shutdown',
|
||||||
|
'SMTP_port_%u_allow_client_to_authenticate:' => 'Smtp port %u allow client to authenticate:',
|
||||||
|
'SMTP_port_(25)_main_purpose_is_to_receive_emails_from_another_server,_STARTTLS_is_always_offered,_but_auth_if_offered_is_only_if_STARTTLS_is_also_used_by_client.' => 'Smtp port (25) main purpose is to receive emails from another server, starttls is always offered, but auth if offered is only if starttls is also used by client.',
|
||||||
|
'SMTP_Submission_port_(587)_will_require_STARTTLS,_then_authenticate_to_send.' => 'Smtp submission port (587) will require starttls, then authenticate to send.',
|
||||||
|
'SMTPS_port_(465)_will_require_implicit_SSL/TLS_then_authenticate_to_send.' => 'Smtps port (465) will require implicit ssl/tls then authenticate to send.',
|
||||||
|
'SMTPS_SSL/TLS_auth:_port_%u_status:' => 'Smtps ssl/tls auth: port %u status:',
|
||||||
|
'Submission_port_%u_status:' => 'Submission port %u status:',
|
||||||
|
'SUBNET_MASK' => 'Subnet mask',
|
||||||
|
'SUCCESS' => 'Success',
|
||||||
|
'THEME' => 'Theme',
|
||||||
|
'Time' => 'Time',
|
||||||
|
'Time_Configuration' => 'Time configuration',
|
||||||
|
'Time_Setting_Mode:' => 'Time setting mode:',
|
||||||
|
'Update' => 'Update',
|
||||||
|
'USER_DIFFERENT' => 'User different',
|
||||||
|
'USER_NAME' => 'User Name',
|
||||||
|
'useraccount' => 'useraccount',
|
||||||
|
'ValidFromMask' => 'Validfrommask',
|
||||||
|
'ValidFromNetwork' => 'Validfromnetwork',
|
||||||
|
'Verify' => 'Verify',
|
||||||
|
'WARG' => 'Warg',
|
||||||
|
'Webmail' => 'Webmail',
|
||||||
|
'Weekly' => 'Weekly',
|
||||||
|
'WGRE' => 'Wgre',
|
||||||
|
'WGRG' => 'Wgrg',
|
||||||
|
'Year:' => 'Year:',
|
||||||
|
'YES' => 'Yes',
|
||||||
@@ -1,32 +1,33 @@
|
|||||||
|
#
|
||||||
'grp_FORM_TITLE' => 'Create, modify, or remove user groups',
|
# Lex file for Groups generated on 2025-07-17 09:52:31
|
||||||
'grp_GROUP_TOO_LONG' => 'Error: group name is too long. The maximum is [_1] characters.',
|
#
|
||||||
'grp_ACCOUNT_CONFLICT' => 'Error: the group "[_1]" can\'t be created because there is
|
'grp_ACCOUNT_CONFLICT' => 'Error: the group "[_1]" can"t be created because there is
|
||||||
already a [_2] account of that name.',
|
already a [_2] account of that name.',
|
||||||
'grp_INVALID_GROUP_DESCRIPTION' => 'Error: unexpected or missing characters in group description',
|
'grp_CONFIRM_DELETE_GROUP' => 'Are you sure you wish to remove this group?',
|
||||||
'grp_NO_MEMBERS' => 'Error: no members in group. Did not create new group.',
|
|
||||||
'grp_CREATED_GROUP' => 'Successfully created user group',
|
|
||||||
'grp_DELETED_GROUP' => 'Successfully removed user group',
|
|
||||||
'grp_MODIFIED_GROUP' => 'Successfully modifed user group',
|
|
||||||
'grp_CREATE_ERROR' => 'An error occurred while creating user group.',
|
'grp_CREATE_ERROR' => 'An error occurred while creating user group.',
|
||||||
|
'grp_CREATED_GROUP' => 'Successfully created user group',
|
||||||
|
'grp_CURRENT_LIST' => 'Current list of User Groups',
|
||||||
|
'grp_DELETE_DESCRIPTION' => 'You are about to remove the user group "[_1]."',
|
||||||
'grp_DELETE_ERROR' => 'An error occurred while removing user group.',
|
'grp_DELETE_ERROR' => 'An error occurred while removing user group.',
|
||||||
'grp_MODIFY_ERROR' => 'An error occurred while modifying user group.',
|
'grp_DELETED_GROUP' => 'Successfully removed user group',
|
||||||
|
'grp_FORM_TITLE' => 'Create, modify, or remove user groups',
|
||||||
|
'grp_GROUP_DESC' => 'Brief Description/Windows Group Alias',
|
||||||
|
'grp_GROUP_DESC_EXPL' => 'Input a brief group description in the field below.
|
||||||
|
This field also designates the group name viewable by
|
||||||
|
Windows clients.',
|
||||||
|
'grp_GROUP_HAS_MEMBERS' => 'This group contains the following members:',
|
||||||
'grp_GROUP_NAMING' => 'The group name should contain only lower-case
|
'grp_GROUP_NAMING' => 'The group name should contain only lower-case
|
||||||
letters, numbers, hyphens, periods, and underscores,
|
letters, numbers, hyphens, periods, and underscores,
|
||||||
and should start with a lower-case letter. For
|
and should start with a lower-case letter. For
|
||||||
example "sales", "beta5", and "reseller_partners" are
|
example "sales", "beta5", and "reseller_partners" are
|
||||||
all valid group names, but "3rd-event", "Marketing Team"
|
all valid group names, but "3rd-event", "Marketing Team"
|
||||||
and "lost&found" are not.',
|
and "lost&found" are not.',
|
||||||
'grp_GROUP_HAS_MEMBERS' => 'This group contains the following members:',
|
'grp_GROUP_TOO_LONG' => 'Error: group name is too long. The maximum is [_1] characters.',
|
||||||
'grp_NOT_A_GROUP' => 'Error: That is not an existing group account.',
|
|
||||||
'grp_GROUP_DESC' => 'Brief Description/Windows Group Alias',
|
|
||||||
'grp_GROUP_DESC_EXPL' => 'Input a brief group description in the field below.
|
|
||||||
This field also designates the group name viewable by
|
|
||||||
Windows clients.',
|
|
||||||
'grp_IBAYS_WILL_BE_CHANGED' => 'The following information bays were assigned to this group and
|
'grp_IBAYS_WILL_BE_CHANGED' => 'The following information bays were assigned to this group and
|
||||||
will be changed to the Administrator group (you can change them to
|
will be changed to the Administrator group (you can change them to
|
||||||
something else afterward):',
|
something else afterward):',
|
||||||
'grp_CONFIRM_DELETE_GROUP' => 'Are you sure you wish to remove this group?',
|
'grp_INVALID_GROUP_DESCRIPTION' => 'Error: unexpected or missing characters in group description',
|
||||||
'grp_CURRENT_LIST' => 'Current list of User Groups',
|
'grp_MODIFIED_GROUP' => 'Successfully modifed user group',
|
||||||
'grp_DELETE_DESCRIPTION' => 'You are about to remove the user group "[_1]."',
|
'grp_MODIFY_ERROR' => 'An error occurred while modifying user group.',
|
||||||
|
'grp_NO_MEMBERS' => 'Error: no members in group. Did not create new group.',
|
||||||
|
'grp_NOT_A_GROUP' => 'Error: That is not an existing group account.',
|
||||||
|
|||||||
@@ -1,74 +1,73 @@
|
|||||||
|
#
|
||||||
'hos_FORM_TITLE' => 'Hostnames and addresses',
|
# Lex file for Hostentries generated on 2025-07-17 09:52:32
|
||||||
'hos_UNABLE_TO_OPEN_CONFIGDB' => 'Unable to open configuration database',
|
#
|
||||||
|
'hos_ABOUT_TO_REMOVE' => 'Are you sure you wish to remove this hostname?',
|
||||||
|
'hos_ADD_HOSTNAME' => 'Add hostname',
|
||||||
|
'hos_ADDR_IN_DHCP_RANGE' => 'Address is inside the DHCP assigned dynamic range',
|
||||||
|
'hos_CONFIRM_DESCRIPTION' => 'Please confirm the following details.',
|
||||||
|
'hos_CREATE_LOCAL_HOST_TITLE' => 'Create a new hostname referring to a local host.',
|
||||||
|
'hos_CREATE_REMOTE_HOST_TITLE' => 'Create a new hostname referring to a remote host',
|
||||||
|
'hos_CREATE_TITLE' => 'Create or modify hostname',
|
||||||
|
'hos_CURRENT_HOSTNAMES_FOR_DOMAIN' => 'Current list of hostnames for [_1].',
|
||||||
|
'hos_CURRENT_HOSTNAMES_FOR_LOCAL_DOMAIN' => 'Current list of hostnames for [_1]',
|
||||||
|
'hos_DIDNT_ENTER_LOCAL_IP' => 'Error: You did not specify a Local IP address. IP
|
||||||
|
addresses must contain only numbers and periods and
|
||||||
|
be in the form "aaa.bbb.ccc.ddd".Did not create hostname.',
|
||||||
'hos_DNS_FORWARDER_ENABLED' => 'A DNS forwarder has been configured. This means that all DNS
|
'hos_DNS_FORWARDER_ENABLED' => 'A DNS forwarder has been configured. This means that all DNS
|
||||||
lookups will be handled by the DNS forwarder. Hostnames
|
lookups will be handled by the DNS forwarder. Hostnames
|
||||||
and addresses cannot be modified on this server while
|
and addresses cannot be modified on this server while
|
||||||
a DNS forwarder is configured.',
|
a DNS forwarder is configured.',
|
||||||
'hos_ADD_HOSTNAME' => 'Add hostname',
|
|
||||||
'hos_HOSTNAME' => 'Hostname',
|
|
||||||
'hos_HOSTTYPE' => 'Location',
|
|
||||||
'hos_LOCAL_IP' => 'Local IP',
|
|
||||||
'hos_ETHERNET_ADDRESS' => 'Ethernet address',
|
|
||||||
'hos_CURRENT_HOSTNAMES_FOR_DOMAIN' => 'Current list of hostnames for [_1].',
|
|
||||||
'hos_NO_HOSTNAMES_FOR_SERVICENAME' => 'There are no hostnames in the system for [_1].',
|
|
||||||
'hos_CURRENT_HOSTNAMES_FOR_LOCAL_DOMAIN' => 'Current list of hostnames for [_1]',
|
|
||||||
'hos_NO_HOSTNAMES_FOR_LOCAL_DOMAIN' => 'There are no hostnames in the system for [_1].',
|
|
||||||
'hos_STATIC_HOST_MESSAGE' => '- This host represents your system name and cannot be modifiedor removed.',
|
|
||||||
'hos_CREATE_LOCAL_HOST_TITLE' => 'Create a new hostname for this server',
|
|
||||||
'hos_HOSTNAME_VALIDATION_ERROR' => 'Error: unexpected characters in host name: "[_1]".
|
|
||||||
The host name should contain only
|
|
||||||
letters, numbers, and hyphens and must start
|
|
||||||
with a letter or a number.',
|
|
||||||
'hos_HOSTNAME_LENGTH_ERROR' => 'Error: account name [_1] is too long. The
|
|
||||||
maximum is 32 characters.',
|
|
||||||
'hos_DOMAIN_VALIDATION_ERROR' => 'Error: unexpected or missing characters in domain name
|
'hos_DOMAIN_VALIDATION_ERROR' => 'Error: unexpected or missing characters in domain name
|
||||||
[_1]. The domain name should contain one or more
|
[_1]. The domain name should contain one or more
|
||||||
letters, numbers, periods and minus signs. Did not create new
|
letters, numbers, periods and minus signs. Did not create new
|
||||||
domain.',
|
domain.',
|
||||||
'hos_HOSTNAME_EXISTS_ERROR' => 'Error: account [_1] hostname.',
|
'hos_ERR_IP_IS_LOCAL_OR_GATEWAY' => 'Error: IP cannot be server IP or Gateway IP.',
|
||||||
'hos_SUCCESSFULLY_CREATED' => 'Successfully created hostname.',
|
'hos_ERR_IP_NOT_LOCAL' => 'Error: This IP address is not on any of our local networks.',
|
||||||
'hos_HOSTNAME_DESCRIPTION' => 'The hostname must contain only letters, numbers, and hyphens, and must start with a letter or number. ',
|
'hos_ERROR_WHILE_CREATING_HOST' => 'Error occurred while creating hostname.',
|
||||||
'hos_LOCAL_IP_DESCRIPTION' => 'The Local IP address is the IP address of another machine on
|
'hos_ERROR_WHILE_DELETING_HOST' => 'Error occurred while deleting hostname.',
|
||||||
the local network. Please enter a valid IP address in the
|
'hos_ERROR_WHILE_MODIFYING_HOST' => 'Error occurred while modifying hostname.',
|
||||||
format "aaa.bbb.ccc.ddd".',
|
'hos_ETHERNET_ADDRESS' => 'Ethernet address',
|
||||||
'hos_ETHERNET_ADDRESS_DESCRIPTION' => 'The ethernet address is optional and causes the DHCP server to
|
'hos_ETHERNET_ADDRESS_DESCRIPTION' => 'The ethernet address is optional and causes the DHCP server to
|
||||||
statically bind the local IP address to the computer with this
|
statically bind the local IP address to the computer with this
|
||||||
ethernet address. If specified, it must be of the form
|
ethernet address. If specified, it must be of the form
|
||||||
"AA:BB:CC:DD:EE:FF" and must contain only the numbers 0-9 and
|
"AA:BB:CC:DD:EE:FF" and must contain only the numbers 0-9 and
|
||||||
the letters A-F.',
|
the letters A-F.',
|
||||||
'hos_CREATE_LOCAL_HOST_TITLE' => 'Create a new hostname referring to a local host.',
|
'hos_FORM_TITLE' => 'Hostnames and addresses',
|
||||||
'hos_DIDNT_ENTER_LOCAL_IP' => 'Error: You did not specify a Local IP address. IP
|
'hos_HOSTNAME_COMMENT_ERROR' => 'Error: unexpected characters in the comment of "[_1]".
|
||||||
addresses must contain only numbers and periods and
|
The comment must contain only letters, spaces, numbers, dots, commas, undescores, hyphens and must start with a letter or number.',
|
||||||
be in the form "aaa.bbb.ccc.ddd".Did not create hostname.',
|
'hos_HOSTNAME_DESCRIPTION' => 'The hostname must contain only letters, numbers, and hyphens, and must start with a letter or number. ',
|
||||||
|
'hos_HOSTNAME_EXISTS_ERROR' => 'Error: account [_1] hostname.',
|
||||||
|
'hos_HOSTNAME_LENGTH_ERROR' => 'Error: account name [_1] is too long. The
|
||||||
|
maximum is 32 characters.',
|
||||||
|
'hos_HOSTNAME_VALIDATION_ERROR' => 'Error: unexpected characters in host name: "[_1]".
|
||||||
|
The host name should contain only
|
||||||
|
letters, numbers, and hyphens and must start
|
||||||
|
with a letter or a number.',
|
||||||
|
'hos_HOSTNAME_VALIDATOR_ERROR' => 'Error: unexpected characters in host name: "[_1]". The host name should contain only
|
||||||
|
letters, numbers, and hyphens and must start with a letter or a number. ',
|
||||||
'hos_IP_VALIDATION_ERROR' => 'Error: IP Address [_1] is
|
'hos_IP_VALIDATION_ERROR' => 'Error: IP Address [_1] is
|
||||||
invalid. IP Addresses must contain only numbers and periodsand be in the form "aaa.bbb.ccc.ddd". Did not create hostname.',
|
invalid. IP Addresses must contain only numbers and periodsand be in the form "aaa.bbb.ccc.ddd". Did not create hostname.',
|
||||||
|
'hos_LOCAL_IP' => 'Local IP',
|
||||||
|
'hos_LOCAL_IP_DESCRIPTION' => 'The Local IP address is the IP address of another machine on
|
||||||
|
the local network. Please enter a valid IP address in the
|
||||||
|
format "aaa.bbb.ccc.ddd".',
|
||||||
|
'hos_LOCAL_PAGE_DESCRIPTION' => 'Please enter the following additional details for a localhost:',
|
||||||
'hos_MAC_ADDRESS_VALIDATION_ERROR' => 'Error: Ethernet address [_1]
|
'hos_MAC_ADDRESS_VALIDATION_ERROR' => 'Error: Ethernet address [_1]
|
||||||
is invalid. Ethernet addresses must be in the
|
is invalid. Ethernet addresses must be in the
|
||||||
form "AA:BB:CC:DD:EE:FF" and only contain the
|
form "AA:BB:CC:DD:EE:FF" and only contain the
|
||||||
numbers 0-9 and the letters A-F. Did not create
|
numbers 0-9 and the letters A-F. Did not create
|
||||||
hostname.',
|
hostname.',
|
||||||
'hos_CREATE_REMOTE_HOST_TITLE' => 'Create a new hostname referring to a remote host',
|
|
||||||
'hos_CREATE_TITLE' => 'Create or modify hostname',
|
|
||||||
'hos_MODIFY_TITLE' => 'Modify hostname',
|
'hos_MODIFY_TITLE' => 'Modify hostname',
|
||||||
'hos_LOCAL_PAGE_DESCRIPTION' => 'Please enter the following additional details for a localhost:',
|
'hos_MUST_BE_VALID_HOSTNAME_OR_IP' => 'Must be a valid hostname or IP number',
|
||||||
|
'hos_NO_HOSTNAMES_FOR_LOCAL_DOMAIN' => 'There are no hostnames in the system for [_1].',
|
||||||
|
'hos_NO_HOSTNAMES_FOR_SERVICENAME' => 'There are no hostnames in the system for [_1].',
|
||||||
|
'hos_NO_HOSTS_FOR_THIS_DOMAIN' => 'There are no hosts for this domain.',
|
||||||
'hos_REMOTE_PAGE_DESCRIPTION' => 'Please enter the following additional details for a remotehost:',
|
'hos_REMOTE_PAGE_DESCRIPTION' => 'Please enter the following additional details for a remotehost:',
|
||||||
|
'hos_REMOVE_PAGE_DESCRIPTION' => 'You are about to remove the hostname "[_1]"',
|
||||||
|
'hos_REMOVE_TITLE' => 'Remove hostname',
|
||||||
|
'hos_STATIC_HOST_MESSAGE' => '- This host represents your system name and cannot be modifiedor removed.',
|
||||||
|
'hos_SUCCESSFULLY_CREATED' => 'Successfully created hostname.',
|
||||||
'hos_SUCCESSFULLY_DELETED' => 'Successfully deleted host.',
|
'hos_SUCCESSFULLY_DELETED' => 'Successfully deleted host.',
|
||||||
'hos_SUCCESSFULLY_MODIFIED' => 'Successfully modified host.',
|
'hos_SUCCESSFULLY_MODIFIED' => 'Successfully modified host.',
|
||||||
'hos_REMOVE_TITLE' => 'Remove hostname',
|
'hos_UNABLE_TO_OPEN_CONFIGDB' => 'Unable to open configuration database',
|
||||||
'hos_REMOVE_PAGE_DESCRIPTION' => 'You are about to remove the hostname "[_1]"',
|
|
||||||
'hos_ABOUT_TO_REMOVE' => 'Are you sure you wish to remove this hostname?',
|
|
||||||
'hos_CONFIRM_DESCRIPTION' => 'Please confirm the following details.',
|
|
||||||
'hos_NO_HOSTS_FOR_THIS_DOMAIN' => 'There are no hosts for this domain.',
|
|
||||||
'hos_ADDR_IN_DHCP_RANGE' => 'Address is inside the DHCP assigned dynamic range',
|
|
||||||
'hos_ERROR_WHILE_CREATING_HOST' => 'Error occurred while creating hostname.',
|
|
||||||
'hos_ERROR_WHILE_MODIFYING_HOST' => 'Error occurred while modifying hostname.',
|
|
||||||
'hos_ERROR_WHILE_DELETING_HOST' => 'Error occurred while deleting hostname.',
|
|
||||||
'hos_ERR_IP_IS_LOCAL_OR_GATEWAY' => 'Error: IP cannot be server IP or Gateway IP.',
|
|
||||||
'hos_ERR_IP_NOT_LOCAL' => 'Error: This IP address is not on any of our local networks.',
|
|
||||||
'hos_MUST_BE_VALID_HOSTNAME_OR_IP' => 'Must be a valid hostname or IP number',
|
|
||||||
'hos_HOSTNAME_COMMENT_ERROR' => 'Error: unexpected characters in the comment of "[_1]".
|
|
||||||
The comment must contain only letters, spaces, numbers, dots, commas, undescores, hyphens and must start with a letter or number.',
|
|
||||||
'hos_HOSTNAME_VALIDATOR_ERROR' => 'Error: unexpected characters in host name: "[_1]". The host name should contain only
|
|
||||||
letters, numbers, and hyphens and must start with a letter or a number. ',
|
|
||||||
'Hostnames and addresses' => 'Hostnames and addresses',
|
'Hostnames and addresses' => 'Hostnames and addresses',
|
||||||
|
|||||||
@@ -1,13 +1,37 @@
|
|||||||
|
#
|
||||||
'iba_FORM_TITLE' => 'Create, modify, or remove i-bays',
|
# Lex file for Ibays generated on 2025-07-17 09:52:32
|
||||||
|
#
|
||||||
|
'ENTIRE_INTERNET_NO_PASSWORD' => 'Entire Internet (no password required)',
|
||||||
|
'ENTIRE_INTERNET_PASSWORD' => 'Entire Internet (password required)',
|
||||||
|
'ENTIRE_INTERNET_PASSWORD_REMOTE' => 'Entire Internet (password required outside local network)',
|
||||||
|
'iba_ACCOUNT_EXISTS' => 'The account "[_1]" is an existing [_2] account.',
|
||||||
|
'iba_ACCT_CLASHES_WITH_PSEUDONYM' => 'The account "[_1]" clashes with pseudonym
|
||||||
|
details for [_2] account "[_3]".
|
||||||
|
<p>[_1] is a pseudonym for [_2].</p>',
|
||||||
|
'iba_ACCT_NAME_HAS_INVALID_CHARS' => 'The i-bay name "[_1]" contains invalid characters.
|
||||||
|
I-bay names must start with a lower case letter and contain
|
||||||
|
only lower case letters, numbers, and hyphens.',
|
||||||
'iba_ADD_IBAY' => 'Add ibay',
|
'iba_ADD_IBAY' => 'Add ibay',
|
||||||
|
'iba_ADD_TITLE' => 'Create or modify an i-bay',
|
||||||
|
'iba_ALLOW_DYNAMIC_CONTENT' => 'Execution of dynamic content (CGI, PHP, SSI)',
|
||||||
|
'iba_CANT_CREATE_IBAY' => 'Can"t create new account for [_1] (does it already exist?)',
|
||||||
|
'iba_CANT_FIND_IBAY' => 'Can"t find account for [_1] (does it exist?)',
|
||||||
|
'iba_ERROR_WHILE_CREATING_IBAY' => 'An error occurred while creating the i-bay.',
|
||||||
|
'iba_ERROR_WHILE_DELETING_IBAY' => 'An error occurred while deleting the i-bay.',
|
||||||
|
'iba_ERROR_WHILE_MODIFYING_IBAY' => 'An error occurred while modifying the i-bay.',
|
||||||
|
'iba_ERROR_WHILE_RESETTING_PASSWORD' => 'Error while resetting password.',
|
||||||
'iba_FIRSTPAGE_DESC' => 'You can remove any information bay or reset its password by
|
'iba_FIRSTPAGE_DESC' => 'You can remove any information bay or reset its password by
|
||||||
clicking on the corresponding command
|
clicking on the corresponding command
|
||||||
next to the information bay. If the information bay shows up
|
next to the information bay. If the information bay shows up
|
||||||
in red, that means that the password has not
|
in red, that means that the password has not
|
||||||
yet been changed from the default, and should be changed
|
yet been changed from the default, and should be changed
|
||||||
soon.',
|
soon.',
|
||||||
'iba_ADD_TITLE' => 'Create or modify an i-bay',
|
'iba_FORM_TITLE' => 'Create, modify, or remove i-bays',
|
||||||
|
'iba_HTTPS_Only' => 'Force secure connections',
|
||||||
|
'iba_IBAY_PASSWD_VALIDATION_ERROR' => 'The password may contain only letters and numbers.',
|
||||||
|
'iba_IBAY_PASSWD_VERIFY_ERROR' => 'The passwords do not match.',
|
||||||
|
'iba_MAX_IBAY_NAME_LENGTH_ERROR' => 'The i-bay name "[_1]" is too long. The maximum is
|
||||||
|
[_2] characters.',
|
||||||
'iba_NAME_FIELD_DESC' => 'The information bay name should contain only lower-case
|
'iba_NAME_FIELD_DESC' => 'The information bay name should contain only lower-case
|
||||||
letters, numbers, periods, hyphens and underscores, and
|
letters, numbers, periods, hyphens and underscores, and
|
||||||
should start with a lower-case letter. For example
|
should start with a lower-case letter. For example
|
||||||
@@ -15,57 +39,35 @@ should start with a lower-case letter. For example
|
|||||||
names, but "3associates", "John Smith" and
|
names, but "3associates", "John Smith" and
|
||||||
"Bus!Partner" are not. The name is limited to [_1] characters.',
|
"Bus!Partner" are not. The name is limited to [_1] characters.',
|
||||||
'iba_NAME_LABEL' => 'Information bay name',
|
'iba_NAME_LABEL' => 'Information bay name',
|
||||||
'iba_USER_ACCESS' => 'User access via file sharing or user ftp',
|
'iba_NO_IBAYS' => 'There are no i-bays currently configured.',
|
||||||
|
'iba_PASSWORD_DESC' => 'You are about to change the password for the i-bay [_1].',
|
||||||
'iba_PUBLIC_ACCESS' => 'Public access via web or anonymous ftp',
|
'iba_PUBLIC_ACCESS' => 'Public access via web or anonymous ftp',
|
||||||
'iba_PUBLIC_ACCESS_DESCRIPTION' => 'The public access mode "password required outside local
|
'iba_PUBLIC_ACCESS_DESCRIPTION' => 'The public access mode "password required outside local
|
||||||
network" is not supported by the FTP server component. If
|
network" is not supported by the FTP server component. If
|
||||||
you select this mode, the FTP server will require a
|
you select this mode, the FTP server will require a
|
||||||
password both inside and outside the local network for this
|
password both inside and outside the local network for this
|
||||||
i-bay.',
|
i-bay.',
|
||||||
'iba_ALLOW_DYNAMIC_CONTENT' => 'Execution of dynamic content (CGI, PHP, SSI)',
|
|
||||||
'iba_HTTPS_Only' => 'Force secure connections',
|
|
||||||
'iba_REMOVE_TITLE' => 'Remove information bay',
|
|
||||||
'iba_REMOVE_DESC' => '<p>You are about to remove the information bay [_1] ([_2]).
|
'iba_REMOVE_DESC' => '<p>You are about to remove the information bay [_1] ([_2]).
|
||||||
</p><p>All files belonging to this information bay will be deleted.
|
</p><p>All files belonging to this information bay will be deleted.
|
||||||
</p><p>Are you sure you wish to remove this information bay?
|
</p><p>Are you sure you wish to remove this information bay?
|
||||||
</p>',
|
</p>',
|
||||||
'iba_ERROR_WHILE_CREATING_IBAY' => 'An error occurred while creating the i-bay.',
|
'iba_REMOVE_TITLE' => 'Remove information bay',
|
||||||
'iba_SUCCESSFULLY_CREATED_IBAY' => 'Successfully created i-bay.',
|
'iba_SUCCESSFULLY_CREATED_IBAY' => 'Successfully created i-bay.',
|
||||||
'iba_NO_IBAYS' => 'There are no i-bays currently configured.',
|
|
||||||
'iba_CANT_FIND_IBAY' => 'Can\'t find account for [_1] (does it exist?)',
|
|
||||||
'iba_CANT_CREATE_IBAY' => 'Can\'t create new account for [_1] (does it already exist?)',
|
|
||||||
'iba_ERROR_WHILE_MODIFYING_IBAY' => 'An error occurred while modifying the i-bay.',
|
|
||||||
'iba_SUCCESSFULLY_MODIFIED_IBAY' => 'Successfully modified i-bay.',
|
|
||||||
'iba_VIRTUAL_HOST_MESSAGE' => 'The following virtual domains were using this information
|
|
||||||
bay as their content and will be changed to the primary web
|
|
||||||
site (you can change them to something else afterward).',
|
|
||||||
'iba_SUCCESSFULLY_DELETED_IBAY' => 'Successfully deleted i-bay.',
|
'iba_SUCCESSFULLY_DELETED_IBAY' => 'Successfully deleted i-bay.',
|
||||||
'iba_ERROR_WHILE_DELETING_IBAY' => 'An error occurred while deleting the i-bay.',
|
'iba_SUCCESSFULLY_MODIFIED_IBAY' => 'Successfully modified i-bay.',
|
||||||
'iba_PASSWORD_DESC' => 'You are about to change the password for the i-bay [_1].',
|
|
||||||
'iba_IBAY_PASSWD_VALIDATION_ERROR' => 'The password may contain only letters and numbers.',
|
|
||||||
'iba_IBAY_PASSWD_VERIFY_ERROR' => 'The passwords do not match.',
|
|
||||||
'iba_SUCCESSFULLY_RESET_PASSWORD' => 'Successfully reset password.',
|
'iba_SUCCESSFULLY_RESET_PASSWORD' => 'Successfully reset password.',
|
||||||
'iba_ERROR_WHILE_RESETTING_PASSWORD' => 'Error while resetting password.',
|
'iba_USER_ACCESS' => 'User access via file sharing or user ftp',
|
||||||
'iba_VHOST_MESSAGE' => '<P>The following virtual domains were using this information bay
|
'iba_VHOST_MESSAGE' => '<P>The following virtual domains were using this information bay
|
||||||
as their content and will be changed to the primary web site
|
as their content and will be changed to the primary web site
|
||||||
(you can change them to something else afterward):</P>',
|
(you can change them to something else afterward):</P>',
|
||||||
|
'iba_VIRTUAL_HOST_MESSAGE' => 'The following virtual domains were using this information
|
||||||
|
bay as their content and will be changed to the primary web
|
||||||
|
site (you can change them to something else afterward).',
|
||||||
'Information bays' => 'Information bays',
|
'Information bays' => 'Information bays',
|
||||||
'WGRG' => 'Write = group, Read = group',
|
'INVALID_IBAY_DESCRIPTION' => 'Error: unexpected or missing characters in i-bay description',
|
||||||
'WGRE' => 'Write = group, Read = everyone',
|
|
||||||
'WARG' => 'Write = admin, Read = group',
|
|
||||||
'NONE' => 'No access',
|
|
||||||
'LOCAL_NETWORK_NO_PASSWORD' => 'Local network (no password required)',
|
'LOCAL_NETWORK_NO_PASSWORD' => 'Local network (no password required)',
|
||||||
'LOCAL_NETWORK_PASSWORD' => 'Local network (password required)',
|
'LOCAL_NETWORK_PASSWORD' => 'Local network (password required)',
|
||||||
'ENTIRE_INTERNET_NO_PASSWORD' => 'Entire Internet (no password required)',
|
'NONE' => 'No access',
|
||||||
'ENTIRE_INTERNET_PASSWORD' => 'Entire Internet (password required)',
|
'WARG' => 'Write = admin, Read = group',
|
||||||
'ENTIRE_INTERNET_PASSWORD_REMOTE' => 'Entire Internet (password required outside local network)',
|
'WGRE' => 'Write = group, Read = everyone',
|
||||||
'INVALID_IBAY_DESCRIPTION' => 'Error: unexpected or missing characters in i-bay description',
|
'WGRG' => 'Write = group, Read = group',
|
||||||
'iba_ACCT_NAME_HAS_INVALID_CHARS' => 'The i-bay name "[_1]" contains invalid characters.
|
|
||||||
I-bay names must start with a lower case letter and contain
|
|
||||||
only lower case letters, numbers, and hyphens.',
|
|
||||||
'iba_MAX_IBAY_NAME_LENGTH_ERROR' => 'The i-bay name "[_1]" is too long. The maximum is
|
|
||||||
[_2] characters.',
|
|
||||||
'iba_ACCT_CLASHES_WITH_PSEUDONYM' => 'The account "[_1]" clashes with pseudonym
|
|
||||||
details for [_2] account "[_3]".
|
|
||||||
<p>[_1] is a pseudonym for [_2].</p>',
|
|
||||||
'iba_ACCOUNT_EXISTS' => 'The account "[_1]" is an existing [_2] account.',
|
|
||||||
|
|||||||
@@ -1,30 +1,34 @@
|
|||||||
'ln_LOCAL NETWORKS' => 'Local networks',
|
#
|
||||||
'Local networks' => 'Local networks',
|
# Lex file for Localnetworks generated on 2025-07-17 09:52:32
|
||||||
'ln_FIRSTPAGE_DESC' => 'For security reasons, several services on your server are available only to your local network. However you can grant these local access privileges to additional networks by listing them below. Most installations should leave this list empty.',
|
#
|
||||||
|
'ln_ADD_DESC' => 'Each parameter must be in the form #.#.#.# (each # is a number from 0 to 255). The server software will zero out the ending (host identifier) part of the network address according to the subnet mask, to ensure that the network address is valid. </P><P> "Router" should be the IP address of the router on your local network via which the additional network is reached.',
|
||||||
'ln_ADD_TITLE' => 'Add a local network ',
|
'ln_ADD_TITLE' => 'Add a local network ',
|
||||||
'ln_ADD_DESC' =>'Each parameter must be in the form #.#.#.# (each # is a number from 0 to 255). The server software will zero out the ending (host identifier) part of the network address according to the subnet mask, to ensure that the network address is valid. </P><P> "Router" should be the IP address of the router on your local network via which the additional network is reached.',
|
'ln_DEFAULT' => 'default',
|
||||||
'ln_NETWORK_ADDRESS' => 'Network address',
|
'ln_ERROR_CREATING_NETWORK' => 'Error occurred while creating network.',
|
||||||
'ln_SUBNET_MASK' => 'Subnet mask',
|
'ln_ERROR_DELETING_NETWORK' => 'Error occurred while deleting network.',
|
||||||
|
'ln_extra' => '[_1]/[_2] via router $networkRouter}.',
|
||||||
|
'ln_Failed to find network in Db' => 'Failed to find network in Db',
|
||||||
|
'ln_FIRSTPAGE_DESC' => 'For security reasons, several services on your server are available only to your local network. However you can grant these local access privileges to additional networks by listing them below. Most installations should leave this list empty.',
|
||||||
'ln_INVALID_IP_ADDRESS' => 'Invalid IP address - [_1]',
|
'ln_INVALID_IP_ADDRESS' => 'Invalid IP address - [_1]',
|
||||||
'ln_INVALID_SUBNET_MASK' => 'Invalid subnet mask',
|
'ln_INVALID_SUBNET_MASK' => 'Invalid subnet mask',
|
||||||
'ln_REMOVE_TITLE' => 'Remove local network',
|
'ln_LOCAL NETWORKS' => 'Local networks',
|
||||||
'ln_REMOVE_DESC' => 'You are about to remove the following local network.',
|
'ln_LOCALNETWORK_ADD' => 'Add network',
|
||||||
'ln_REMOVE_CONFIRM' => 'Are you sure you wish to remove this network?',
|
'ln_NETWORK_ADDRESS' => 'Network address',
|
||||||
'ln_DEFAULT' => 'default',
|
'ln_NETWORK_ALREADY_ADDED' => 'Error: network [_1] (derived from network [_1] and subnet mask [_2]) has already been added. Did not add new network.',
|
||||||
'ln_NUMBER_OF_HOSTS' => 'Number of hosts',
|
'ln_NETWORK_ALREADY_LOCAL' => ' Error: network [_1] (derived from network [_1] and subnet mask [_2]) is already considered local. Did not add new network. ',
|
||||||
'ln_NOT_ACCESSIBLE_FROM_LOCAL_NETWORK' => 'Error: router address {$networkRouter} is not accessible from local network. Did not add network.',
|
|
||||||
'ln_LOCALNETWORK_ADD'=>'Add network',
|
|
||||||
'ln_NETWORK_ALREADY_LOCAL' => ' Error: network {$network} (derived from network {$networkAddress} and subnet mask {$networkMask}) is already considered local. Did not add new network. ',
|
|
||||||
'ln_NETWORK_ALREADY_ADDED' => 'Error: network {$network} (derived from network {$networkAddress} and subnet mask {$networkMask}) has already been added. Did not add new network.',
|
|
||||||
'ln_ERROR_CREATING_NETWORK' => 'Error occurred while creating network.',
|
|
||||||
'ln_SUCCESS' =>'Successfully added network [_1]/[_2] via router [_3].',
|
|
||||||
'ln_SUCCESS_SINGLE_ADDRESS' =>'Successfully added network {$network}/{$networkMask} via router {$networkRouter}. Your server will grant local access privileges to the single IP address {$network}. ',
|
|
||||||
'ln_SUCCESS_NETWORK_RANGE' =>'Successfully added network [_1]/[_2] via router [_3]. Your server will grant local access privileges to [_4] IP addresses in the range [_5] to [_6]. ',
|
|
||||||
'ln_NO_SUCH_NETWORK' =>'Network not found in network db',
|
|
||||||
'ln_SUCCESS_REMOVED_NETWORK' =>'Successfully removed network [_1]/[_2] via router [_3].',
|
|
||||||
'ln_ERROR_DELETING_NETWORK' => 'Error occurred while deleting network.',
|
|
||||||
'ln_NO_ADDITIONAL_NETWORKS' => 'No additional networks',
|
'ln_NO_ADDITIONAL_NETWORKS' => 'No additional networks',
|
||||||
|
'ln_NO_SUCH_NETWORK' => 'Network not found in network db',
|
||||||
|
'ln_NOT_ACCESSIBLE_FROM_LOCAL_NETWORK' => 'Error: router address [_3] is not accessible from local network. Did not add network.',
|
||||||
|
'ln_NUMBER_OF_HOSTS' => 'Number of hosts',
|
||||||
|
'ln_REMOVE_CONFIRM' => 'Are you sure you wish to remove this network?',
|
||||||
|
'ln_REMOVE_DESC' => 'You are about to remove the following local network.',
|
||||||
'ln_REMOVE_HOSTS_DESC' => 'Local hosts configured on the network you are about to remove have been detected. By default, they will also be removed. Uncheck this box if, for some reason, you do not wish this to happen. Note that they will not be treated as local, and may not even be reachable, after this network is removed. ',
|
'ln_REMOVE_HOSTS_DESC' => 'Local hosts configured on the network you are about to remove have been detected. By default, they will also be removed. Uncheck this box if, for some reason, you do not wish this to happen. Note that they will not be treated as local, and may not even be reachable, after this network is removed. ',
|
||||||
'ln_REMOVE_HOSTS_LABEL' => 'Remove hosts on network',
|
'ln_REMOVE_HOSTS_LABEL' => 'Remove hosts on network',
|
||||||
'ln_extra' => '{$network}/{$networkMask} via router $networkRouter}.',
|
'ln_REMOVE_TITLE' => 'Remove local network',
|
||||||
'ln_SUCCESS_NONSTANDARD_RANGE' =>'<p>Successfully added network [_1]/[_2] via router [_3].</p><p> Your server will grant local access privileges to [_4] IP addresses in the range [_5] to [_6].</p><p> Warning: the ProFTPd FTP server cannot handle this nonstandard subnet mask. The simpler specification <b>[_7]</b> will be used instead.</p>',
|
'ln_SUBNET_MASK' => 'Subnet mask',
|
||||||
|
'ln_SUCCESS' => 'Successfully added network [_1]/[_2] via router [_3].',
|
||||||
|
'ln_SUCCESS_NETWORK_RANGE' => 'Successfully added network [_1]/[_2] via router [_3]. Your server will grant local access privileges to [_4] IP addresses in the range [_5] to [_6]. ',
|
||||||
|
'ln_SUCCESS_NONSTANDARD_RANGE' => '<p>Successfully added network [_1]/[_2] via router [_3].</p><p> Your server will grant local access privileges to [_4] IP addresses in the range [_5] to [_6].</p><p> Warning: the ProFTPd FTP server cannot handle this nonstandard subnet mask. The simpler specification <b>[_7]</b> will be used instead.</p>',
|
||||||
|
'ln_SUCCESS_REMOVED_NETWORK' => 'Successfully removed network [_1]/[_2] via router [_3].',
|
||||||
|
'ln_SUCCESS_SINGLE_ADDRESS' => 'Successfully added network [_1]/[_2] via router [_3]. Your server will grant local access privileges to the single IP address [_1]. ',
|
||||||
|
'Local networks' => 'Local networks',
|
||||||
|
|||||||
@@ -1,56 +1,55 @@
|
|||||||
'pf_FORM_TITLE' => 'Configure Port Forwarding',
|
#
|
||||||
'pf_FIRST_PAGE_DESCRIPTION' => '<p>
|
# Lex file for Portforwarding generated on 2025-07-17 09:52:32
|
||||||
You can use this panel to modify your firewall rules so
|
#
|
||||||
as to open a specific port on this server and forward it
|
'pf_ALLOW_HOSTS' => 'Allow Hosts',
|
||||||
to another port on another host. Doing so will permit
|
'pf_CREATE_PAGE_DESCRIPTION' => 'Select the protocol, the port you wish to forward, the
|
||||||
incoming traffic to directly access a private host on
|
|
||||||
your LAN.
|
|
||||||
</p><p>
|
|
||||||
WARNING: Misuse of this feature can seriously compromise the
|
|
||||||
security of your network. Do not use this feature
|
|
||||||
lightly, or without fully understanding the implications
|
|
||||||
of your actions.
|
|
||||||
</p>',
|
|
||||||
'pf_CREATE_RULE' => 'Create portforwarding rule',
|
|
||||||
'pf_SUMMARY_ADD_DESC' => 'The following summarizes the port-forwarding rule
|
|
||||||
that you are about to add. If you are satisfied with the rule,
|
|
||||||
click the \'Add\' button.',
|
|
||||||
'pf_SUMMARY_REMOVE_DESC' => 'The following summarizes the port-forwarding rule
|
|
||||||
that you are about to remove. If you are sure you want to
|
|
||||||
remove the rule, click the \'Remove\' button.',
|
|
||||||
'pf_SHOW_FORWARDS' => 'Below you will find a table summarizing the current
|
|
||||||
port-forwarding rules installed on this server. Click on the
|
|
||||||
\'Remove\' link to remove the corresponding rule.',
|
|
||||||
'pf_NO_FORWARDS' => 'There are currently no forwarded ports on the system.',
|
|
||||||
'pf_CREATE_PAGE_DESCRIPTION' => '<p>Select the protocol, the port you wish to forward, the
|
|
||||||
destination host, and the port on the destination host
|
destination host, and the port on the destination host
|
||||||
that you wish to forward to. If you wish to specify a port
|
that you wish to forward to. If you wish to specify a port
|
||||||
range, enter the lower and upper boundaries separated by a
|
range, enter the lower and upper boundaries separated by a
|
||||||
hyphen. The destination port may be left blank, which will
|
hyphen. The destination port may be left blank, which will
|
||||||
instruct the firewall to leave the source port
|
instruct the firewall to leave the source port
|
||||||
unaltered.</p>',
|
unaltered',
|
||||||
'pf_LABEL_SOURCE_PORT' => 'Source Port(s)',
|
'pf_CREATE_RULE' => 'Create portforwarding rule',
|
||||||
'pf_LABEL_PROTOCOL' => 'Protocol',
|
'pf_ERR_BADAHOST' => 'This does not appear to be a valid IP address list.
|
||||||
'pf_LABEL_DESTINATION_PORT' => 'Destination Port(s)',
|
ie: 192.168.0.1,192.168.1.1/24',
|
||||||
'pf_LABEL_DESTINATION_HOST' => 'Destination Host IP Address',
|
|
||||||
'pf_LABEL_RULE_COMMENT' => 'Rule Comment',
|
|
||||||
'pf_LABEL_ALLOW_HOSTS' => 'Allow Hosts',
|
|
||||||
'Port forwarding' => 'Port forwarding',
|
|
||||||
'pf_SUCCESS' => 'Your change to the port forwarding rules has been successfully saved.',
|
|
||||||
'pf_RULE_COMMENT' => 'Rule Comment',
|
|
||||||
'pf_ALLOW_HOSTS' => 'Allow Hosts',
|
|
||||||
'pf_ERR_NO_MASQ_RECORD' => 'Cannot retrieve masq record from the configuration database.',
|
|
||||||
'pf_ERR_UNSUPPORTED_MODE' => 'Unsupported mode.',
|
|
||||||
'pf_ERR_CANNOT_REMOVE_NORULE' => 'Cannot remove non-existant rule.',
|
|
||||||
'pf_ERR_NONZERO_RETURN_EVENT' => 'Event returned a non-zero return value.',
|
|
||||||
'pf_ERR_BADPORT' => 'The ports must be a positive integer less than 65536.',
|
|
||||||
'pf_ERR_BADIP' => 'This does not appear to be an IP address. You must use
|
'pf_ERR_BADIP' => 'This does not appear to be an IP address. You must use
|
||||||
dotted-quad notation, and each of the four numbers should be less
|
dotted-quad notation, and each of the four numbers should be less
|
||||||
than 256. ie: 192.168.0.5',
|
than 256. ie: 192.168.0.5',
|
||||||
|
'pf_ERR_BADPORT' => 'The ports must be a positive integer less than 65536.',
|
||||||
|
'pf_ERR_CANNOT_REMOVE_NORULE' => 'Cannot remove non-existant rule.',
|
||||||
'pf_ERR_DUPRULE' => 'This rule has already been added, it cannot be added twice.',
|
'pf_ERR_DUPRULE' => 'This rule has already been added, it cannot be added twice.',
|
||||||
|
'pf_ERR_NO_MASQ_RECORD' => 'Cannot retrieve masq record from the configuration database.',
|
||||||
|
'pf_ERR_NONZERO_RETURN_EVENT' => 'Event returned a non-zero return value.',
|
||||||
'pf_ERR_PORT_COLLISION' => 'ERROR: This port or port range conflicts with an existing
|
'pf_ERR_PORT_COLLISION' => 'ERROR: This port or port range conflicts with an existing
|
||||||
rule. Please modify this new rule, or remove the old rule.',
|
rule. Please modify this new rule, or remove the old rule.',
|
||||||
'pf_ERR_BADAHOST' => 'This does not appear to be a valid IP address list.
|
'pf_ERR_UNSUPPORTED_MODE' => 'Unsupported mode.',
|
||||||
ie: 192.168.0.1,192.168.1.1/24',
|
'pf_FIRST_PAGE_DESCRIPTION' => 'You can use this panel to modify your firewall rules so
|
||||||
|
as to open a specific port on this server and forward it
|
||||||
|
to another port on another host. Doing so will permit
|
||||||
|
incoming traffic to directly access a private host on
|
||||||
|
your LAN.
|
||||||
|
WARNING: Misuse of this feature can seriously compromise the
|
||||||
|
security of your network. Do not use this feature
|
||||||
|
lightly, or without fully understanding the implications
|
||||||
|
of your actions.',
|
||||||
|
'pf_FORM_TITLE' => 'Configure Port Forwarding',
|
||||||
'pf_IN_SERVERONLY' => 'This server is currently in serveronly mode and portforwarding
|
'pf_IN_SERVERONLY' => 'This server is currently in serveronly mode and portforwarding
|
||||||
is possible only to localhost.',
|
is possible only to localhost.',
|
||||||
|
'pf_LABEL_ALLOW_HOSTS' => 'Allow Hosts',
|
||||||
|
'pf_LABEL_DESTINATION_HOST' => 'Destination Host IP Address',
|
||||||
|
'pf_LABEL_DESTINATION_PORT' => 'Destination Port(s)',
|
||||||
|
'pf_LABEL_RULE_COMMENT' => 'Rule Comment',
|
||||||
|
'pf_LABEL_SOURCE_PORT' => 'Source Port(s)',
|
||||||
|
'pf_NO_FORWARDS' => 'There are currently no forwarded ports on the system.',
|
||||||
|
'pf_RULE_COMMENT' => 'Rule Comment',
|
||||||
|
'pf_SHOW_FORWARDS' => 'Below you will find a table summarizing the current
|
||||||
|
port-forwarding rules installed on this server. Click on the
|
||||||
|
"Remove" link to remove the corresponding rule.',
|
||||||
|
'pf_SUCCESS' => 'Your change to the port forwarding rules has been successfully saved.',
|
||||||
|
'pf_SUMMARY_ADD_DESC' => 'The following summarizes the port-forwarding rule
|
||||||
|
that you are about to add. If you are satisfied with the rule,
|
||||||
|
click the "Add" button.',
|
||||||
|
'pf_SUMMARY_REMOVE_DESC' => 'The following summarizes the port-forwarding rule
|
||||||
|
that you are about to remove. If you are sure you want to
|
||||||
|
remove the rule, click the "Remove" button.',
|
||||||
|
'Port forwarding' => 'Port forwarding',
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
|
#
|
||||||
'prt_FORM_TITLE' => 'Add or remove printers',
|
# Lex file for Printers generated on 2025-07-17 09:52:33
|
||||||
'prt_INITIAL_BTN' => 'Add printer',
|
#
|
||||||
'prt_INITIAL_DESC' => '<P><A class="button-like" HREF="printers?page=0&Next=Add">Add printer</A></P>',
|
'Printers' => 'Printers',
|
||||||
'prt_NO_PRINTERS' => 'There are no printers in the system.',
|
'prt_ABOUT_TO_REMOVE' => 'You are about to remove the printer: ',
|
||||||
'prt_CURRENT_LIST' => 'Current List of printers',
|
'prt_ARE_YOU_SURE' => 'Are you sure you wish to remove this printer?',
|
||||||
'prt_REMOTE_ADDRESS' => 'Remote address',
|
'prt_CREATE_NETWORK_DESC' => 'Please enter the address and name of the network printer',
|
||||||
'prt_REMOTE_NAME' => 'Remote name',
|
'prt_CREATE_NETWORK_PRINTER' => 'Create a new network printer',
|
||||||
'prt_CREATE_NEW_PRINTER' => 'Create a new printer',
|
|
||||||
'prt_CREATE_NEW_DESC' => 'Please choose a unique name for the printer and enter a brief
|
'prt_CREATE_NEW_DESC' => 'Please choose a unique name for the printer and enter a brief
|
||||||
description. The printer name should contain only lower-case
|
description. The printer name should contain only lower-case
|
||||||
letters and numbers, and should start with a lower-case
|
letters and numbers, and should start with a lower-case
|
||||||
@@ -17,36 +16,39 @@ letter. For example "hplaser", "epsonlp", and
|
|||||||
Avoid names and descriptions that contain these terms,
|
Avoid names and descriptions that contain these terms,
|
||||||
"offline", "disabled", "down", "off", "waiting", "jam",
|
"offline", "disabled", "down", "off", "waiting", "jam",
|
||||||
"paper", "error" and "responding". ',
|
"paper", "error" and "responding". ',
|
||||||
'prt_PRINTER_NAME' => 'Printer name',
|
'prt_CREATE_NEW_PRINTER' => 'Create a new printer',
|
||||||
'prt_LOCAL_PRINTER_0' => 'Local printer port 0 (LPT1)',
|
'prt_CREATED_SUCCESSFULLY' => 'Successfully created printer: ',
|
||||||
'prt_LOCAL_PRINTER_1' => 'Local printer port 1 (LPT2)',
|
'prt_CURRENT_LIST' => 'Current List of printers',
|
||||||
'prt_LOCAL_PRINTER_2' => 'Local printer port 2 (LPT3)',
|
'prt_DELETED_SUCCESSFULLY' => 'Successfully deleted printer: ',
|
||||||
'prt_NET_PRINTER' => 'Network printer ...',
|
'prt_ERR_CREATING' => 'Error occurred while creating printer.',
|
||||||
'prt_FIRST_USB_PRINTER' => 'First USB attached printer',
|
'prt_ERR_DELETING' => 'Error occurred while deleting printer.',
|
||||||
'prt_SECOND_USB_PRINTER' => 'Second USB attached printer',
|
'prt_ERR_EXISTS' => 'Error: An account with the same name exists with type: ',
|
||||||
|
'prt_ERR_INTERNAL_FAILURE' => 'Error: internal failure while removing printer: ',
|
||||||
|
'prt_ERR_INVALID_ADDRESS' => 'Error: invalid network address. Did not create new printer.',
|
||||||
|
'prt_ERR_INVALID_REMOTE_NAME' => 'Error: invalid network printer name. Did not create new printer.',
|
||||||
|
'prt_ERR_OPENING_DB' => 'Error occurred while opening accounts database.',
|
||||||
|
'prt_ERR_UNEXPECTED_DESC' => 'Error: unexpected or missing characters in description.
|
||||||
|
Did not create new printer.',
|
||||||
'prt_ERR_UNEXPECTED_NAME' => '<P>Error: unexpected characters in printer name.</P>
|
'prt_ERR_UNEXPECTED_NAME' => '<P>Error: unexpected characters in printer name.</P>
|
||||||
<P>The printer name should contain only lower-case
|
<P>The printer name should contain only lower-case
|
||||||
letters and numbers, and should start with a lower-case
|
letters and numbers, and should start with a lower-case
|
||||||
letter. For example "hplaser", "epsonlp", and
|
letter. For example "hplaser", "epsonlp", and
|
||||||
"canonbj" are valid names.</P>',
|
"canonbj" are valid names.</P>',
|
||||||
'prt_ERR_UNEXPECTED_DESC' => 'Error: unexpected or missing characters in description.
|
'prt_FIRST_USB_PRINTER' => 'First USB attached printer',
|
||||||
Did not create new printer.',
|
'prt_FORM_TITLE' => 'Add or remove printers',
|
||||||
'prt_ERR_EXISTS' => 'Error: An account with the same name exists with type: ',
|
|
||||||
'prt_ERR_INVALID_ADDRESS' => 'Error: invalid network address. Did not create new printer.',
|
|
||||||
'prt_ERR_INVALID_REMOTE_NAME' => 'Error: invalid network printer name. Did not create new printer.',
|
|
||||||
'prt_ERR_CREATING' => 'Error occurred while creating printer.',
|
|
||||||
'prt_CREATED_SUCCESSFULLY' => 'Successfully created printer: ',
|
|
||||||
'prt_CREATE_NETWORK_PRINTER' => 'Create a new network printer',
|
|
||||||
'prt_ERR_OPENING_DB' => 'Error occurred while opening accounts database.',
|
|
||||||
'prt_CREATE_NETWORK_DESC' => 'Please enter the address and name of the network printer',
|
|
||||||
'prt_HOSTNAME_OR_IP' => 'Hostname or IP address of the network printer',
|
'prt_HOSTNAME_OR_IP' => 'Hostname or IP address of the network printer',
|
||||||
|
'prt_INITIAL_BTN' => 'Add printer',
|
||||||
|
'prt_INITIAL_DESC' => '<P><A class="button-like" HREF="printers?page=0&Next=Add">Add printer</A></P>',
|
||||||
|
'prt_LOCAL_PRINTER_0' => 'Local printer port 0 (LPT1)',
|
||||||
|
'prt_LOCAL_PRINTER_1' => 'Local printer port 1 (LPT2)',
|
||||||
|
'prt_LOCAL_PRINTER_2' => 'Local printer port 2 (LPT3)',
|
||||||
|
'prt_MUST_BE_VALID_HOSTNAME_OR_IP' => 'Must be a valid hostname or IP number',
|
||||||
|
'prt_NET_PRINTER' => 'Network printer ...',
|
||||||
|
'prt_NO_PRINTERS' => 'There are no printers in the system.',
|
||||||
|
'prt_PRINTER_NAME' => 'Printer name',
|
||||||
|
'prt_REMOTE_ADDRESS' => 'Remote address',
|
||||||
|
'prt_REMOTE_NAME' => 'Remote name',
|
||||||
'prt_REMOTE_NAME_DESC' => 'Network printer name (enter raw if not sure)',
|
'prt_REMOTE_NAME_DESC' => 'Network printer name (enter raw if not sure)',
|
||||||
'prt_REMOVE_PRINTER' => 'Remove printer',
|
'prt_REMOVE_PRINTER' => 'Remove printer',
|
||||||
'prt_ABOUT_TO_REMOVE' => 'You are about to remove the printer: ',
|
'prt_SECOND_USB_PRINTER' => 'Second USB attached printer',
|
||||||
'prt_SPOOL_FILE_WARNING' => 'All the spool files for this printer will be deleted.',
|
'prt_SPOOL_FILE_WARNING' => 'All the spool files for this printer will be deleted.',
|
||||||
'prt_ARE_YOU_SURE' => 'Are you sure you wish to remove this printer?',
|
|
||||||
'prt_ERR_INTERNAL_FAILURE' => 'Error: internal failure while removing printer: ',
|
|
||||||
'prt_ERR_DELETING' => 'Error occurred while deleting printer.',
|
|
||||||
'prt_DELETED_SUCCESSFULLY' => 'Successfully deleted printer: ',
|
|
||||||
'prt_MUST_BE_VALID_HOSTNAME_OR_IP' => 'Must be a valid hostname or IP number',
|
|
||||||
'Printers' => 'Printers',
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
|
#
|
||||||
'prx_TITLE' => 'Proxy settings',
|
# Lex file for Proxy generated on 2025-07-17 09:52:33
|
||||||
'prx_FIRST_PAGE_DESCRIPTION' => 'This page allows configuration of the server\'s
|
#
|
||||||
|
'Proxy settings' => 'Proxy settings',
|
||||||
|
'prx_ERR_NO_SQUID_REC' => 'ERROR: There is no squid record in the configuration database.',
|
||||||
|
'prx_ERR_PROXY_UPDATE_FAILED' => 'ERROR: The proxy-update event returned an error.',
|
||||||
|
'prx_FIRST_PAGE_DESCRIPTION' => 'This page allows configuration of the server"s
|
||||||
proxy settings.
|
proxy settings.
|
||||||
The server includes a transparent proxy and cache for
|
The server includes a transparent proxy and cache for
|
||||||
HTTP traffic. This is enabled by default, but not enforced
|
HTTP traffic. This is enabled by default, but not enforced
|
||||||
@@ -8,12 +12,12 @@ if the server is in "serveronly" mode.
|
|||||||
If this server is acting as an e-mail server, connections
|
If this server is acting as an e-mail server, connections
|
||||||
from local network clients to external SMTP servers
|
from local network clients to external SMTP servers
|
||||||
will default to being redirected to the local e-mail server.',
|
will default to being redirected to the local e-mail server.',
|
||||||
'prx_HTTP_PROXY_STATUS_DESCRIPTION' => 'The server\'s HTTP proxy works to reduce overall uplink usage by
|
'prx_HTTP_PROXY_STATUS_DESCRIPTION' => 'The server"s HTTP proxy works to reduce overall uplink usage by
|
||||||
caching recently-visited pages. It is transparent to web browsers
|
caching recently-visited pages. It is transparent to web browsers
|
||||||
using this server as their gateway. Enable or disable this proxy
|
using this server as their gateway. Enable or disable this proxy
|
||||||
with the following toggle.',
|
with the following toggle.',
|
||||||
'prx_HTTP_PROXY_STATUS_LABEL' => 'HTTP proxy status',
|
'prx_HTTP_PROXY_STATUS_LABEL' => 'HTTP proxy status',
|
||||||
'prx_SMTP_PROXY_STATUS_DESCRIPTION' => 'The server\'s transparent SMTP proxy works to reduce virus traffic
|
'prx_SMTP_PROXY_STATUS_DESCRIPTION' => 'The server"s transparent SMTP proxy works to reduce virus traffic
|
||||||
from infected client hosts by forcing all outgoing SMTP traffic
|
from infected client hosts by forcing all outgoing SMTP traffic
|
||||||
through this server if set to "enabled".
|
through this server if set to "enabled".
|
||||||
If you wish to use an alternate SMTP server, and this server is
|
If you wish to use an alternate SMTP server, and this server is
|
||||||
@@ -22,9 +26,5 @@ proxy to "blocked" prevents all SMTP traffic to other servers,
|
|||||||
this is the default. The proxy only intercepts/blocks normal smtp
|
this is the default. The proxy only intercepts/blocks normal smtp
|
||||||
(port 25) traffic.',
|
(port 25) traffic.',
|
||||||
'prx_SMTP_PROXY_STATUS_LABEL' => 'SMTP proxy status',
|
'prx_SMTP_PROXY_STATUS_LABEL' => 'SMTP proxy status',
|
||||||
'prx_ERR_PROXY_UPDATE_FAILED' => 'ERROR: The proxy-update event returned an error.',
|
|
||||||
'prx_ERR_NO_SQUID_REC' => 'ERROR: There is no squid record in the configuration database.',
|
|
||||||
'prx_SUCCESS' => 'The new proxy settings were applied successfully.',
|
'prx_SUCCESS' => 'The new proxy settings were applied successfully.',
|
||||||
'prx_BLOCKED' => 'Blocked',
|
'prx_TITLE' => 'Proxy settings',
|
||||||
'Proxy settings' => 'Proxy settings',
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
|
#
|
||||||
'pse_NO_PSEUDONYMS' => ' <b>There are no pseudonyms in the system.</b> ',
|
# Lex file for Pseudonyms generated on 2025-07-17 09:52:33
|
||||||
'pse_REMOVE_PSEUDONYM' => 'Remove pseudonym',
|
#
|
||||||
'pse_ABOUT_TO_REMOVE' => 'You are about to remove the pseudonym: [_1]<br>
|
'pse_ABOUT_TO_REMOVE' => 'You are about to remove the pseudonym: [_1]<br>
|
||||||
<b>Are you sure you wish to continue?</b>',
|
<b>Are you sure you wish to continue?</b>',
|
||||||
'pse_FORM_TITLE' => 'Create, modify, or remove pseudonyms',
|
'pse_CLICK_TO_CREATE' => 'Add pseudonym',
|
||||||
|
'pse_CREATE_SUCCEEDED' => 'Successfully created pseudonym',
|
||||||
|
'pse_CURRENT_PSEUDONYMS' => 'Current List of Pseudonyms',
|
||||||
|
'pse_DESC_PSEUDONYM_NAME' => ' Please select an existing account or group for the pseudonym from the pulldown menu below',
|
||||||
'pse_DESCRIPTION' => '<p>The server automatically creates
|
'pse_DESCRIPTION' => '<p>The server automatically creates
|
||||||
an e-mail alias for each group. If you want to define an e-mail
|
an e-mail alias for each group. If you want to define an e-mail
|
||||||
alias for a list of users, simply create a group and the
|
alias for a list of users, simply create a group and the
|
||||||
@@ -28,22 +31,28 @@ is limited to one further level. For example the pseudonym
|
|||||||
"webmaster" can forward to the pseudonym "techsupport" which
|
"webmaster" can forward to the pseudonym "techsupport" which
|
||||||
then forwards to a specified user "ray". This is useful where
|
then forwards to a specified user "ray". This is useful where
|
||||||
one user is responsiblefor multiple roles and saves having
|
one user is responsiblefor multiple roles and saves having
|
||||||
to change the pseudonym\'s associated with that user many times
|
to change the pseudonym"s associated with that user many times
|
||||||
in the event that the user departs the organisation.</p>
|
in the event that the user departs the organisation.</p>
|
||||||
<p>You can modify or remove a
|
<p>You can modify or remove a
|
||||||
pseudonym by clicking on the corresponding
|
pseudonym by clicking on the corresponding
|
||||||
command next to the pseudonym.</p>',
|
command next to the pseudonym.</p>',
|
||||||
|
'pse_FORM_TITLE' => 'Create, modify, or remove pseudonyms',
|
||||||
'pse_LOCAL_ONLY' => '(local network only)',
|
'pse_LOCAL_ONLY' => '(local network only)',
|
||||||
|
'pse_MODIFY_PSEUDONYM' => 'Modify Pseudonym',
|
||||||
|
'pse_MODIFY_SUCCEEDED' => 'Successfully modified pseudonym',
|
||||||
|
'pse_NAME_IN_USE' => 'Error: That name is in use You cannot create a pseudonym with that name.',
|
||||||
|
'pse_NO_PSEUDONYMS' => ' <b>There are no pseudonyms in the system.</b> ',
|
||||||
|
'pse_NOT_A_PSEUDONYM' => 'That account is not a pseudonym',
|
||||||
|
'pse_PSEUDONYM_INVALID_DOMAIN' => 'That domain is not hosted on this server',
|
||||||
|
'pse_PSEUDONYM_INVALID_NOACCT' => 'That account is not hosted on this server',
|
||||||
|
'pse_PSEUDONYM_INVALID_SAMEACCT' => 'A pseudonym cannot point to the same account',
|
||||||
|
'pse_PSEUDONYM_NAME' => 'Pseudonym name',
|
||||||
|
'pse_REMOVE_PSEUDONYM' => 'Remove pseudonym',
|
||||||
|
'pse_REMOVE_SUCCEEDED' => 'Successfully removed pseudonym',
|
||||||
'pse_SELECT_ACCOUNT' => 'Select account or group',
|
'pse_SELECT_ACCOUNT' => 'Select account or group',
|
||||||
'pse_SELECT_INTERNAL' => 'Local network only',
|
'pse_SELECT_INTERNAL' => 'Local network only',
|
||||||
'pse_CLICK_TO_CREATE' => 'Add pseudonym',
|
|
||||||
'pse_PSEUDONYM' => 'Pseudonym',
|
|
||||||
'pse_USER_OR_GROUP' => 'User or group',
|
|
||||||
'pse_CURRENT_PSEUDONYMS' => 'Current List of Pseudonyms',
|
|
||||||
'pse_TITLE_CREATE' => 'Create a pseudonym',
|
'pse_TITLE_CREATE' => 'Create a pseudonym',
|
||||||
'pse_DESC_PSEUDONYM_NAME' => ' Please select an existing account or group for the pseudonym from the pulldown menu below',
|
'pse_USER_OR_GROUP' => 'User or group',
|
||||||
'pse_MODIFY_PSEUDONYM' => 'Modify Pseudonym',
|
|
||||||
'pse_PSEUDONYM_NAME' => 'Pseudonym name',
|
|
||||||
'pse_VALID_PSEUDONYM_NAMES' => ' The pseudonym
|
'pse_VALID_PSEUDONYM_NAMES' => ' The pseudonym
|
||||||
should contain only lower-case letters, numbers, period,
|
should contain only lower-case letters, numbers, period,
|
||||||
hyphen and underscore
|
hyphen and underscore
|
||||||
@@ -55,13 +64,4 @@ command next to the pseudonym.</p>',
|
|||||||
domains that are valid on this server. For example
|
domains that are valid on this server. For example
|
||||||
"fred@virtualdomain.com" can be forwarded to "mary"
|
"fred@virtualdomain.com" can be forwarded to "mary"
|
||||||
(or to another valid user account).</p> ',
|
(or to another valid user account).</p> ',
|
||||||
'pse_NAME_IN_USE' => 'Error: That name is in use You cannot create a pseudonym with that name.',
|
|
||||||
'pse_NOT_A_PSEUDONYM' => 'That account is not a pseudonym',
|
|
||||||
'pse_PSEUDONYM_INVALID_DOMAIN' => 'That domain is not hosted on this server',
|
|
||||||
'pse_PSEUDONYM_INVALID_NOACCT' => 'That account is not hosted on this server',
|
|
||||||
'pse_PSEUDONYM_INVALID_SAMEACCT' => 'A pseudonym cannot point to the same account',
|
|
||||||
'pse_CREATE_SUCCEEDED' => 'Successfully created pseudonym',
|
|
||||||
'pse_MODIFY_SUCCEEDED' => 'Successfully modified pseudonym',
|
|
||||||
'pse_REMOVE_SUCCEEDED' => 'Successfully removed pseudonym',
|
|
||||||
'pse_EVERYONE' => 'Everyone',
|
|
||||||
'Pseudonyms' => 'Pseudonyms',
|
'Pseudonyms' => 'Pseudonyms',
|
||||||
|
|||||||
@@ -1,32 +1,32 @@
|
|||||||
|
#
|
||||||
|
# Lex file for Qmailanalog generated on 2025-07-17 09:52:33
|
||||||
|
#
|
||||||
|
'Mail log file analysis' => 'Mail log file analysis',
|
||||||
|
'qma_BASIC_STATS' => 'Basic statistics',
|
||||||
|
'qma_Daily_Summary_Report_all' => 'Summary report for all time up to now',
|
||||||
|
'qma_Daily_Summary_Report_today' => 'Summary report for today up to now',
|
||||||
|
'qma_Daily_Summary_Report_yesterday' => 'Summary report for yesterday',
|
||||||
|
'qma_END_OF_REPORT' => 'End of Report',
|
||||||
'qma_FORM_TITLE' => 'Mail Log File Analysis',
|
'qma_FORM_TITLE' => 'Mail Log File Analysis',
|
||||||
|
'qma_GENERATE_REPORT' => 'Generate report',
|
||||||
'qma_INITIAL_DESC' => '<P>Analysing the mail system log files can aid both in
|
'qma_INITIAL_DESC' => '<P>Analysing the mail system log files can aid both in
|
||||||
understanding how your system is performing and in
|
understanding how your system is performing and in
|
||||||
diagnosing delivery problems. Several different
|
diagnosing delivery problems. Several different
|
||||||
reports are available.</P>
|
reports are available.</P>
|
||||||
<P>Please note that it may take several minutes to generate
|
<P>Please note that it may take several minutes to generate
|
||||||
these reports</P>',
|
these reports</P>',
|
||||||
'qma_REPORT_TYPE' => 'Choose a report type',
|
|
||||||
'qma_GENERATE_REPORT' => 'Generate report',
|
|
||||||
'qma_INVALID_REPORT_TYPE' => 'Invalid report type: ',
|
'qma_INVALID_REPORT_TYPE' => 'Invalid report type: ',
|
||||||
'qma_REPORT_GENERATED' => 'Report generated: ',
|
|
||||||
'qma_END_OF_REPORT' => 'End of Report',
|
|
||||||
'Mail log file analysis' => 'Mail log file analysis',
|
|
||||||
|
|
||||||
'qma_Daily_Summary_Report_yesterday' => 'Summary report for yesterday',
|
|
||||||
'qma_Daily_Summary_Report_today' => 'Summary report for today up to now',
|
|
||||||
'qma_Daily_Summary_Report_all' => 'Summary report for all time up to now',
|
|
||||||
|
|
||||||
'qma_LIST_OUTGOING' => 'List outgoing messages and recipients',
|
'qma_LIST_OUTGOING' => 'List outgoing messages and recipients',
|
||||||
'qma_SUMMARIZE_QUEUE' => 'Summarize status of mail queue',
|
|
||||||
'qma_SUCCESSFUL_DELIVERY_DELAY' => 'Successful delivery delay distribution',
|
|
||||||
'qma_REASONS_DEFERRAL' => 'Reasons for deferral',
|
'qma_REASONS_DEFERRAL' => 'Reasons for deferral',
|
||||||
'qma_REASONS_FAILURE' => 'Reasons for failure',
|
'qma_REASONS_FAILURE' => 'Reasons for failure',
|
||||||
'qma_BASIC_STATS' => 'Basic statistics',
|
'qma_REASONS_SUCCESS' => 'Reasons for success',
|
||||||
'qma_RECIP_STATS' => 'Recipients statistics',
|
|
||||||
'qma_RECIP_HOSTS' => 'Recipient hosts',
|
'qma_RECIP_HOSTS' => 'Recipient hosts',
|
||||||
'qma_RECIP_ORDERED' => 'Recipients in best order for mailing lists',
|
'qma_RECIP_ORDERED' => 'Recipients in best order for mailing lists',
|
||||||
|
'qma_RECIP_STATS' => 'Recipients statistics',
|
||||||
|
'qma_REPORT_GENERATED' => 'Report generated: ',
|
||||||
|
'qma_REPORT_TYPE' => 'Choose a report type',
|
||||||
'qma_SENDER_STATS' => 'Sender statistics',
|
'qma_SENDER_STATS' => 'Sender statistics',
|
||||||
|
'qma_SENDER_UIDS' => 'Sender uids',
|
||||||
'qma_SENDMAIL_STYLE' => 'Sendmail style log',
|
'qma_SENDMAIL_STYLE' => 'Sendmail style log',
|
||||||
'qma_REASONS_SUCCESS' => 'Reasons for success',
|
'qma_SUCCESSFUL_DELIVERY_DELAY' => 'Successful delivery delay distribution',
|
||||||
'qma_SENDER_UIDS' => 'Sender uids',
|
'qma_SUMMARIZE_QUEUE' => 'Summarize status of mail queue',
|
||||||
|
|||||||
@@ -1,40 +1,39 @@
|
|||||||
|
#
|
||||||
|
# Lex file for Quota generated on 2025-07-17 09:52:33
|
||||||
|
#
|
||||||
|
'quo_ABS_LIMIT' => 'Absolute limit',
|
||||||
|
'quo_ABS_LIMIT_MB' => 'Absolute limit (MB)',
|
||||||
|
'quo_ACCOUNT_IS_TYPE' => 'It is an account of type: ',
|
||||||
|
'quo_COULD_NOT_GET_UID' => 'Could not determine the uid for user: ',
|
||||||
|
'quo_CURRENT_USAGE' => 'Current usage (MB)',
|
||||||
|
'quo_CURRENT_USAGE_AND_SETTINGS' => 'Current Quota Usage and Settings',
|
||||||
|
'quo_CURRENTLY_HAS' => 'currently has: ',
|
||||||
|
'quo_ERR_HARD_LT_SOFT' => ' Error: absolute limit must be greater than limit with grace time. ',
|
||||||
|
'quo_ERR_MODIFYING' => 'Error occurred while modifying user.',
|
||||||
|
'quo_ERR_NO_SUCH_ACCT' => 'Error: there is no account named: ',
|
||||||
|
'quo_ERR_NOT_A_USER_ACCT' => 'Error: the account is not a user account: ',
|
||||||
'quo_FORM_TITLE' => 'Create, modify, or remove user account quotas',
|
'quo_FORM_TITLE' => 'Create, modify, or remove user account quotas',
|
||||||
'quo_UNABLE_TO_OPEN_ACCOUNTS' => 'Unable to open accounts db',
|
'quo_HARD_VAL_MUST_BE_NUMBER' => 'Error: absolute limit must be a number, optionally followed by one of the unit suffixes K, M, G, or T.',
|
||||||
|
'quo_INSTRUCTIONS' => 'Enter the quota with optional unit suffix of "K" for kilobytes, "M" for megabytes,
|
||||||
|
"G" for gigabytes or "T" for terabytes.
|
||||||
|
Entries with no suffix are assumed to be in megabytes. A setting of "0"
|
||||||
|
for either limit disables that limit for the corresponding user.',
|
||||||
|
'quo_LIMIT_WITH_GRACE' => 'Limit with grace period',
|
||||||
|
'quo_LIMIT_WITH_GRACE_MB' => 'Limit with grace period (MB)',
|
||||||
|
'quo_MODIFY_USER_TITLE' => 'Modify user quota limits',
|
||||||
|
'quo_OCCUPYING' => 'occupying: ',
|
||||||
'quo_QUOTA_DESC' => '<p>You can set filesystem quotas for users on your system by clicking
|
'quo_QUOTA_DESC' => '<p>You can set filesystem quotas for users on your system by clicking
|
||||||
the "Modify" button next to the user you wish to update.
|
the "Modify" button next to the user you wish to update.
|
||||||
<p>If the user exceeds the "Limit with grace period", warnings will be
|
<p>If the user exceeds the "Limit with grace period", warnings will be
|
||||||
generated. If this limit is exceeded for longer than a week or if the
|
generated. If this limit is exceeded for longer than a week or if the
|
||||||
"Absolute limit" is reached, the user will be unable to store any more
|
"Absolute limit" is reached, the user will be unable to store any more
|
||||||
files or receive any more e-mail.
|
files or receive any more e-mail.
|
||||||
<p>A setting of \'0\' for either limit disables that limit for the
|
<p>A setting of "0" for either limit disables that limit for the
|
||||||
corresponding user.
|
corresponding user.
|
||||||
<p>The disk space for each user includes the user\'s home directory,
|
<p>The disk space for each user includes the user"s home directory,
|
||||||
e-mail, and any files owned by the user in information bays.',
|
e-mail, and any files owned by the user in information bays.',
|
||||||
'quo_CURRENT_USAGE_AND_SETTINGS' => 'Current Quota Usage and Settings',
|
|
||||||
'quo_LIMIT_WITH_GRACE' => 'Limit with grace period',
|
|
||||||
'quo_LIMIT_WITH_GRACE_MB' => 'Limit with grace period (MB)',
|
|
||||||
'quo_ABS_LIMIT' => 'Absolute limit',
|
|
||||||
'quo_ABS_LIMIT_MB' => 'Absolute limit (MB)',
|
|
||||||
'quo_CURRENT_USAGE' => 'Current usage (MB)',
|
|
||||||
'quo_COULD_NOT_GET_UID' => 'Could not determine the uid for user: ',
|
|
||||||
'quo_ERR_NO_SUCH_ACCT' => 'Error: there is no account named: ',
|
|
||||||
'quo_ERR_NOT_A_USER_ACCT' => 'Error: the account is not a user account: ',
|
|
||||||
'quo_ACCOUNT_IS_TYPE' => 'It is an account of type: ',
|
|
||||||
'quo_MODIFY_USER_TITLE' => 'Modify user quota limits',
|
|
||||||
'quo_USER' => 'User: ',
|
|
||||||
'quo_CURRENTLY_HAS' => 'currently has: ',
|
|
||||||
'quo_FILES' => 'files',
|
|
||||||
'quo_OCCUPYING' => 'occupying: ',
|
|
||||||
'quo_MEGABYTES' => 'megabytes',
|
|
||||||
'quo_INSTRUCTIONS' => 'Enter the quota with optional unit suffix of \'K\' for kilobytes, \'M\' for megabytes,
|
|
||||||
\'G\' for gigabytes or \'T\' for terabytes.
|
|
||||||
Entries with no suffix are assumed to be in megabytes. A setting of \'0\'
|
|
||||||
for either limit disables that limit for the corresponding user.',
|
|
||||||
'quo_SOFT_VAL_MUST_BE_NUMBER' => 'Error: limit with grace period must be a number, optionally followed by one of the unit suffixes K, M, G, or T.',
|
'quo_SOFT_VAL_MUST_BE_NUMBER' => 'Error: limit with grace period must be a number, optionally followed by one of the unit suffixes K, M, G, or T.',
|
||||||
'quo_HARD_VAL_MUST_BE_NUMBER' => 'Error: absolute limit must be a number, optionally followed by one of the unit suffixes K, M, G, or T.',
|
|
||||||
'quo_ERR_HARD_LT_SOFT' => ' Error: absolute limit must be greater than limit with grace time. ',
|
|
||||||
'quo_ERR_MODIFYING' => 'Error occurred while modifying user.',
|
|
||||||
'quo_SUCCESSFULLY_MODIFIED' => 'Successfully modified quota for user account: ',
|
'quo_SUCCESSFULLY_MODIFIED' => 'Successfully modified quota for user account: ',
|
||||||
|
'quo_UNABLE_TO_OPEN_ACCOUNTS' => 'Unable to open accounts db',
|
||||||
|
'quo_USER' => 'User: ',
|
||||||
'Quotas' => 'Quotas',
|
'Quotas' => 'Quotas',
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,20 @@
|
|||||||
|
#
|
||||||
'rbo_FORM_TITLE' => 'Shutdown or reboot',
|
# Lex file for Reboot generated on 2025-07-17 09:52:33
|
||||||
'rbo_REBOOT' => 'Reboot',
|
#
|
||||||
'rbo_REBOOT_SUCCEEDED' => 'Reboot request initiated successfully.',
|
|
||||||
'rbo_DESC_REBOOT' => 'Your server has initiated the reboot process.',
|
'rbo_DESC_REBOOT' => 'Your server has initiated the reboot process.',
|
||||||
'rbo_RECONFIGURE_SUCCEEDED' => 'Reconfiguration request initiated successfully.',
|
|
||||||
'rbo_DESC_RECONFIGURE' => 'Your server has initiated a full system reconfiguration and reboot.',
|
'rbo_DESC_RECONFIGURE' => 'Your server has initiated a full system reconfiguration and reboot.',
|
||||||
'rbo_SHUTDOWN_SUCCEEDED' => 'Shutdown request initiated successfully.',
|
|
||||||
'rbo_DESC_SHUTDOWN' => 'Your server has initiated the shutdown process.
|
'rbo_DESC_SHUTDOWN' => 'Your server has initiated the shutdown process.
|
||||||
The process will take several minutes to complete, after which
|
The process will take several minutes to complete, after which
|
||||||
you can switch off the power.',
|
you can switch off the power.',
|
||||||
'rbo_LABEL_REBOOT' => 'Select Shutdown, Reboot or Reconfigure',
|
|
||||||
'rbo_DESCRIPTION' => 'You can reboot, shut down your server or perform a full system
|
'rbo_DESCRIPTION' => 'You can reboot, shut down your server or perform a full system
|
||||||
reconfiguration from this screen. You must perform a shutdown
|
reconfiguration from this screen. You must perform a shutdown
|
||||||
before switching the power off. All of these functions take
|
before switching the power off. All of these functions take
|
||||||
several minutes to complete.
|
several minutes to complete.
|
||||||
When you click <b>perform</b> the operation will be initiated immediately, so be ready!',
|
When you click <b>perform</b> the operation will be initiated immediately, so be ready!',
|
||||||
|
'rbo_FORM_TITLE' => 'Shutdown or reboot',
|
||||||
|
'rbo_LABEL_REBOOT' => 'Select Shutdown, Reboot or Reconfigure',
|
||||||
|
'rbo_REBOOT_SUCCEEDED' => 'Reboot request initiated successfully.',
|
||||||
|
'rbo_RECONFIGURE_SUCCEEDED' => 'Reconfiguration request initiated successfully.',
|
||||||
|
'rbo_SHUTDOWN_SUCCEEDED' => 'Shutdown request initiated successfully.',
|
||||||
'Reboot or shutdown' => 'Reboot or shutdown',
|
'Reboot or shutdown' => 'Reboot or shutdown',
|
||||||
|
'rbo_REBOOT'=> 'Reboot',
|
||||||
@@ -1,37 +1,9 @@
|
|||||||
|
#
|
||||||
'rma_FORM_TITLE' => 'Change remote access settings',
|
# Lex file for Remoteaccess generated on 2025-07-17 09:52:33
|
||||||
'rma_DESCRIPTION' => 'For each of the options below, the private setting allows anyone
|
#
|
||||||
from your local network to access your server. The
|
'Remote access' => 'Remote access',
|
||||||
public setting allows access from anywhere on the Internet. The no
|
|
||||||
access setting disables access. To understand the security
|
|
||||||
implications of changing these options from the default settings, you
|
|
||||||
should read the user\'s guide section on remote access.',
|
|
||||||
'rma_SUCCESS' => 'The new remote access settings have been saved.',
|
|
||||||
'rma_NO_ACCESS' => 'No Access',
|
|
||||||
'rma_PASSWORD_LOGIN_PRIVATE' => 'Accept passwords only from local networks',
|
|
||||||
'rma_PASSWORD_LOGIN_PUBLIC' => 'Accept passwords from anywhere',
|
|
||||||
'rma_LABEL_TELNET_ACCESS' => 'Telnet access',
|
|
||||||
'rma_LABEL_FTP_ACCESS' => 'FTP access',
|
|
||||||
'rma_LABEL_FTP_LOGIN' => 'FTP password access',
|
|
||||||
'rma_LABEL_PPTP' => 'Number of PPTP clients',
|
|
||||||
'rma_NUMBER_OF_PPTP_CLIENTS_MUST_BE_LESSER_THAN_NUMBER_OF_IP_IN_DHCP_RANGE' => 'The number of pptp clients is greater than the number of reserved IP for DHCP. You should take a smaller number.',
|
|
||||||
'rma_LABEL_SSH_PORT' => 'TCP Port for secure shell access',
|
|
||||||
'rma_LABEL_SSH' => 'Secure shell access',
|
|
||||||
'rma_LABEL_SSH_ADMIN' => 'Allow administrative command line access over secure shell',
|
|
||||||
'rma_LABEL_SSH_PASSWORD_ACCESS' => 'Allow secure shell access using standard passwords',
|
|
||||||
'rma_TITLE_SSH' => 'Secure Shell Settings',
|
|
||||||
'rma_DESC_SSH' => 'You can control Secure Shell access to your server.
|
|
||||||
The public setting should only be enabled by
|
|
||||||
experienced administrators
|
|
||||||
for remote problem diagnosis and resolution.
|
|
||||||
We recommend leaving this
|
|
||||||
parameter set to "No Access"
|
|
||||||
unless you have a specific reason to do otherwise.
|
|
||||||
Note that an "Autoblock" feature is enabled by default when public access is enabled; to disable or tune this feature, refer to the manual at https://wiki.koozali.org/AutoBlock
|
|
||||||
',
|
|
||||||
'rma_TITLE_FTP_ACCESS' => 'FTP Settings',
|
|
||||||
'rma_DESC_FTP_ACCESS' => 'You can also control <b>FTP</b> access to your server. We
|
'rma_DESC_FTP_ACCESS' => 'You can also control <b>FTP</b> access to your server. We
|
||||||
recommend leaving this parameter set to \'no access\' unless you
|
recommend leaving this parameter set to "no access" unless you
|
||||||
have a specific reason to do otherwise.
|
have a specific reason to do otherwise.
|
||||||
<p>
|
<p>
|
||||||
Note: these settings limit access to the server and override other
|
Note: these settings limit access to the server and override other
|
||||||
@@ -46,36 +18,28 @@ server, if remote access via the secure shell is enabled.
|
|||||||
This method of access protects the
|
This method of access protects the
|
||||||
passwords and data of the FTP session, whereas standard FTP
|
passwords and data of the FTP session, whereas standard FTP
|
||||||
provides no protection.</p>',
|
provides no protection.</p>',
|
||||||
'rma_TITLE_PPTP' => 'PPTP Settings',
|
'rma_DESC_IPSECRW' => 'You can allow IPSEC client access to your server, authenticated by
|
||||||
|
digital certificates. You should leave this feature disabled by setting the value
|
||||||
|
to the number 0 unless you require IPSEC client access.',
|
||||||
|
'rma_DESC_IPSECRW_RESET' => 'If you wish to reset all digital certificates, you
|
||||||
|
can do so here.<br>Any old certificates will no longer
|
||||||
|
authenticate against the server, so <b><i>all IPSEC clients will
|
||||||
|
need to import a new certificate!</i></b>.',
|
||||||
'rma_DESC_PPTP' => 'You can allow PPTP access to your server.
|
'rma_DESC_PPTP' => 'You can allow PPTP access to your server.
|
||||||
You should leave this feature disabled by setting the value
|
You should leave this feature disabled by setting the value
|
||||||
to the number 0 unless you require PPTP access.',
|
to the number 0 unless you require PPTP access.',
|
||||||
'rma_VALUE_ZERO_OR_POSITIVE' => 'Value must be zero or a positive integer',
|
|
||||||
'rma_REMOTE_MANAGEMENT' => 'Remote Management',
|
|
||||||
'rma_VALIDFROM_TITLE' => '[_1]',
|
|
||||||
'rma_VALIDFROM_DESC' => 'It is possible to allow hosts on remote networks to access the
|
|
||||||
server manager by entering those networks here. Use a subnet
|
|
||||||
mask of 255.255.255.255 to limit the access to the specified host.
|
|
||||||
Any hosts within the specified range will be able to access the
|
|
||||||
server manager using HTTPS.',
|
|
||||||
'rma_DESC_VALID_FROM_ENTRIES' => 'To add a new remote management network,
|
|
||||||
enter the details below.',
|
|
||||||
'rma_SUBNET_MASK' => 'Subnet mask',
|
|
||||||
'rma_NUM_OF_HOSTS' => 'Number of hosts',
|
|
||||||
'rma_NO_ENTRIES_YET' => 'There are no entries yet',
|
|
||||||
'rma_INVALID_SUBNET_MASK' => 'Invalid subnet mask',
|
|
||||||
'rma_ERR_INVALID_PARAMS' => 'Either provide both a network and subnet mask, or leave both
|
|
||||||
fields blank.',
|
|
||||||
'rma_ERR_NO_RECORD' => 'Unable to locate httpd-admin record in configuration db',
|
|
||||||
'Remote access' => 'Remote access',
|
|
||||||
'rma_LABEL_SERIAL_CONSOLE_ACCESS' => 'Serial console',
|
|
||||||
'rma_DESC_SERIAL_CONSOLE_ACCESS' => ' <hr class="sectionbar" /><h2>Serial console</h2>
|
'rma_DESC_SERIAL_CONSOLE_ACCESS' => ' <hr class="sectionbar" /><h2>Serial console</h2>
|
||||||
You can allow access to the server console from a terminal
|
You can allow access to the server console from a terminal
|
||||||
connected to a server serial port.',
|
connected to a server serial port.',
|
||||||
'rma_PORT1_ENABLED' => 'Enabled on serial port 1',
|
'rma_DESC_SSH' => 'You can control Secure Shell access to your server.
|
||||||
'rma_PORT2_ENABLED' => 'Enabled on serial port 2',
|
The public setting should only be enabled by
|
||||||
'rma_LABEL_PPTP_ACCESS' => 'PPTP default user access',
|
experienced administrators
|
||||||
'rma_TITLE_TELNET_ACCESS' => 'Telnet Settings',
|
for remote problem diagnosis and resolution.
|
||||||
|
We recommend leaving this
|
||||||
|
parameter set to "No Access"
|
||||||
|
unless you have a specific reason to do otherwise.
|
||||||
|
Note that an "Autoblock" feature is enabled by default when public access is enabled; to disable or tune this feature, refer to the manual at https://wiki.koozali.org/AutoBlock
|
||||||
|
',
|
||||||
'rma_DESC_TELNET_ACCESS' => 'WARNING:Telnet is currently enabled, but this feature is
|
'rma_DESC_TELNET_ACCESS' => 'WARNING:Telnet is currently enabled, but this feature is
|
||||||
no longer supported. Telnet is inherently insecure and should only
|
no longer supported. Telnet is inherently insecure and should only
|
||||||
be used in circumstances where no practical alternative exists. You
|
be used in circumstances where no practical alternative exists. You
|
||||||
@@ -83,13 +47,51 @@ should change option to [_1] and use
|
|||||||
secure shell if remote access is
|
secure shell if remote access is
|
||||||
required. Once disabled, telnet will no longer appear on this
|
required. Once disabled, telnet will no longer appear on this
|
||||||
screen. ',
|
screen. ',
|
||||||
'rma_TITLE_IPSECRW' => 'IPSEC Client (Roadwarrior) Settings',
|
'rma_DESC_VALID_FROM_ENTRIES' => 'To add a new remote management network,
|
||||||
'rma_DESC_IPSECRW' => 'You can allow IPSEC client access to your server, authenticated by
|
enter the details below.',
|
||||||
digital certificates. You should leave this feature disabled by setting the value
|
'rma_DESCRIPTION' => 'For each of the options below, the private setting allows anyone
|
||||||
to the number 0 unless you require IPSEC client access.',
|
from your local network to access your server. The
|
||||||
|
public setting allows access from anywhere on the Internet. The no
|
||||||
|
access setting disables access. To understand the security
|
||||||
|
implications of changing these options from the default settings, you
|
||||||
|
should read the user"s guide section on remote access.',
|
||||||
|
'rma_ERR_INVALID_PARAMS' => 'Either provide both a network and subnet mask, or leave both
|
||||||
|
fields blank.',
|
||||||
|
'rma_ERR_NO_RECORD' => 'Unable to locate httpd-admin record in configuration db',
|
||||||
|
'rma_FORM_TITLE' => 'Change remote access settings',
|
||||||
|
'rma_INVALID_SUBNET_MASK' => 'Invalid subnet mask',
|
||||||
|
'rma_LABEL_FTP_ACCESS' => 'FTP access',
|
||||||
|
'rma_LABEL_FTP_LOGIN' => 'FTP password access',
|
||||||
|
'rma_LABEL_IPSECRW_RESET' => 'Reset digital certificates',
|
||||||
'rma_LABEL_IPSECRW_SESS' => 'Number of IPSEC clients',
|
'rma_LABEL_IPSECRW_SESS' => 'Number of IPSEC clients',
|
||||||
'rma_DESC_IPSECRW_RESET' => 'If you wish to reset all digital certificates, you
|
'rma_LABEL_PPTP' => 'Number of PPTP clients',
|
||||||
can do so here.<br>Any old certificates will no longer
|
'rma_LABEL_PPTP_ACCESS' => 'PPTP default user access',
|
||||||
authenticate against the server, so <b><i>all IPSEC clients will
|
'rma_LABEL_SERIAL_CONSOLE_ACCESS' => 'Serial console',
|
||||||
need to import a new certificate!</i></b>.',
|
'rma_LABEL_SSH' => 'Secure shell access',
|
||||||
'rma_LABEL_IPSECRW_RESET' => 'Reset digital certificates',
|
'rma_LABEL_SSH_ADMIN' => 'Allow administrative command line access over secure shell',
|
||||||
|
'rma_LABEL_SSH_PASSWORD_ACCESS' => 'Allow secure shell access using standard passwords',
|
||||||
|
'rma_LABEL_SSH_PORT' => 'TCP Port for secure shell access',
|
||||||
|
'rma_LABEL_TELNET_ACCESS' => 'Telnet access',
|
||||||
|
'rma_NO_ACCESS' => 'No Access',
|
||||||
|
'rma_NO_ENTRIES_YET' => 'There are no entries yet',
|
||||||
|
'rma_NUM_OF_HOSTS' => 'Number of hosts',
|
||||||
|
'rma_NUMBER_OF_PPTP_CLIENTS_MUST_BE_LESSER_THAN_NUMBER_OF_IP_IN_DHCP_RANGE' => 'The number of pptp clients is greater than the number of reserved IP for DHCP. You should take a smaller number.',
|
||||||
|
'rma_PASSWORD_LOGIN_PRIVATE' => 'Accept passwords only from local networks',
|
||||||
|
'rma_PASSWORD_LOGIN_PUBLIC' => 'Accept passwords from anywhere',
|
||||||
|
'rma_PORT1_ENABLED' => 'Enabled on serial port 1',
|
||||||
|
'rma_PORT2_ENABLED' => 'Enabled on serial port 2',
|
||||||
|
'rma_REMOTE_MANAGEMENT' => 'Remote Management',
|
||||||
|
'rma_SUBNET_MASK' => 'Subnet mask',
|
||||||
|
'rma_SUCCESS' => 'The new remote access settings have been saved.',
|
||||||
|
'rma_TITLE_FTP_ACCESS' => 'FTP Settings',
|
||||||
|
'rma_TITLE_IPSECRW' => 'IPSEC Client (Roadwarrior) Settings',
|
||||||
|
'rma_TITLE_PPTP' => 'PPTP Settings',
|
||||||
|
'rma_TITLE_SSH' => 'Secure Shell Settings',
|
||||||
|
'rma_TITLE_TELNET_ACCESS' => 'Telnet Settings',
|
||||||
|
'rma_VALIDFROM_DESC' => 'It is possible to allow hosts on remote networks to access the
|
||||||
|
server manager by entering those networks here. Use a subnet
|
||||||
|
mask of 255.255.255.255 to limit the access to the specified host.
|
||||||
|
Any hosts within the specified range will be able to access the
|
||||||
|
server manager using HTTPS.',
|
||||||
|
'rma_VALIDFROM_TITLE' => '[_1]',
|
||||||
|
'rma_VALUE_ZERO_OR_POSITIVE' => 'Value must be zero or a positive integer',
|
||||||
|
|||||||
@@ -1,37 +1,37 @@
|
|||||||
|
#
|
||||||
'rvw_FORM_TITLE' => 'Review configuration',
|
# Lex file for Review generated on 2025-07-17 09:52:34
|
||||||
|
#
|
||||||
|
'Review configuration' => 'Review configuration',
|
||||||
|
'rvw_ADDITIONAL_LOCAL_NETWORKS' => 'Additional local networks',
|
||||||
|
'rvw_BEGINNING_OF_DHCP_ADDRESS_RANGE' => 'Beginning of DHCP address range',
|
||||||
'rvw_DESCRIPTION' => 'This report summarizes the networking, server, and domain
|
'rvw_DESCRIPTION' => 'This report summarizes the networking, server, and domain
|
||||||
parameters on this server relevant to configuring
|
parameters on this server relevant to configuring
|
||||||
the client computers on your network. You may wish to print this
|
the client computers on your network. You may wish to print this
|
||||||
page and use it as a reference.',
|
page and use it as a reference.',
|
||||||
'rvw_NETWORKING_PARAMS' => 'Networking Parameters',
|
|
||||||
'rvw_SERVER_MODE' => 'Server Mode',
|
|
||||||
'rvw_LOCAL_IP_ADDRESS_SUBNET_MASK' => 'Local IP address / subnet mask',
|
|
||||||
'rvw_EXTERNAL_IP_ADDRESS_SUBNET_MASK' => 'External IP address / subnet mask',
|
|
||||||
'rvw_GATEWAY' => 'Gateway',
|
|
||||||
'rvw_ADDITIONAL_LOCAL_NETWORKS' => 'Additional local networks',
|
|
||||||
'rvw_DHCP_SERVER' => 'DHCP server',
|
'rvw_DHCP_SERVER' => 'DHCP server',
|
||||||
'rvw_BEGINNING_OF_DHCP_ADDRESS_RANGE' => 'Beginning of DHCP address range',
|
|
||||||
'rvw_END_OF_DHCP_ADDRESS_RANGE' => 'End of DHCP address range',
|
|
||||||
'rvw_SERVER_NAMES' => 'Server names',
|
|
||||||
'rvw_DNS_SERVER' => 'DNS server',
|
'rvw_DNS_SERVER' => 'DNS server',
|
||||||
'rvw_WEB_SERVER' => 'Web server',
|
|
||||||
'rvw_PROXY_SERVER' => 'Proxy server',
|
|
||||||
'rvw_FTP_SERVER' => 'FTP server',
|
|
||||||
'rvw_SMTP_POP_AND_IMAP_MAIL_SERVERS' => 'SMTP, POP, and IMAP mail servers',
|
|
||||||
'rvw_HOSTS' => 'Hosts',
|
|
||||||
'rvw_DOMAIN_INFORMATION' => 'Domain information',
|
'rvw_DOMAIN_INFORMATION' => 'Domain information',
|
||||||
'rvw_PRIMARY_DOMAIN' => 'Primary domain',
|
|
||||||
'rvw_VIRTUAL_DOMAINS' => 'Virtual domains',
|
|
||||||
'rvw_PRIMARY_WEB_SITE' => 'Primary web site',
|
|
||||||
'rvw_SERVER_MANAGER' => 'Server manager',
|
|
||||||
'rvw_USER_PASSWORD_PANEL' => 'User password panel',
|
|
||||||
'rvw_EMAIL_ADDRESSES' => 'Email Addresses',
|
'rvw_EMAIL_ADDRESSES' => 'Email Addresses',
|
||||||
'rvw_EMAIL_USERACCOUNT' => 'useraccount',
|
'rvw_EMAIL_USERACCOUNT' => 'useraccount',
|
||||||
'rvw_EMAIL_FIRSTNAME' => 'firstname',
|
'rvw_EMAIL_FIRSTNAME' => 'firstname',
|
||||||
'rvw_EMAIL_LASTNAME' => 'lastname',
|
'rvw_EMAIL_LASTNAME' => 'lastname',
|
||||||
'rvw_NO_VIRTUAL_DOMAINS' => 'No virtual domains defined',
|
'rvw_END_OF_DHCP_ADDRESS_RANGE' => 'End of DHCP address range',
|
||||||
'rvw_NO_NETWORKS' => 'No additional networks defined',
|
'rvw_EXTERNAL_IP_ADDRESS_SUBNET_MASK' => 'External IP address / subnet mask',
|
||||||
|
'rvw_FORM_TITLE' => 'Review configuration',
|
||||||
|
'rvw_FTP_SERVER' => 'FTP server',
|
||||||
|
'rvw_HOSTS' => 'Hosts',
|
||||||
'rvw_INTERNET_VISIBLE_ADDRESS' => 'Internet Visible IP Address',
|
'rvw_INTERNET_VISIBLE_ADDRESS' => 'Internet Visible IP Address',
|
||||||
'Review configuration' => 'Review configuration',
|
'rvw_LOCAL_IP_ADDRESS_SUBNET_MASK' => 'Local IP address / subnet mask',
|
||||||
|
'rvw_NETWORKING_PARAMS' => 'Networking Parameters',
|
||||||
|
'rvw_NO_NETWORKS' => 'No additional networks defined',
|
||||||
|
'rvw_NO_VIRTUAL_DOMAINS' => 'No virtual domains defined',
|
||||||
|
'rvw_PRIMARY_DOMAIN' => 'Primary domain',
|
||||||
|
'rvw_PRIMARY_WEB_SITE' => 'Primary web site',
|
||||||
|
'rvw_PROXY_SERVER' => 'Proxy server',
|
||||||
|
'rvw_SERVER_MANAGER' => 'Server manager',
|
||||||
|
'rvw_SERVER_MODE' => 'Server Mode',
|
||||||
|
'rvw_SERVER_NAMES' => 'Server names',
|
||||||
|
'rvw_SMTP_POP_AND_IMAP_MAIL_SERVERS' => 'SMTP, POP, and IMAP mail servers',
|
||||||
|
'rvw_USER_PASSWORD_PANEL' => 'User password panel',
|
||||||
|
'rvw_VIRTUAL_DOMAINS' => 'Virtual domains',
|
||||||
|
'rvw_WEB_SERVER' => 'Web server',
|
||||||
@@ -1,62 +1,60 @@
|
|||||||
|
#
|
||||||
'usr_FORM_TITLE' => 'Create, modify, or remove user accounts',
|
# Lex file for Useraccounts generated on 2025-07-17 09:52:29
|
||||||
'usr_FIRSTPAGE_DESC' => '<p>You can modify, lock or remove any account or reset the account\'s password by clicking on the corresponding command next to the account. </p><p>If the account is marked as locked, that means that the user\'s password needs to be reset. Please note that newly created accounts are automatically locked until the password is changed. </p>',
|
#
|
||||||
'usr_P2_TITLE' => 'Create or modify',
|
'Users' => 'Users',
|
||||||
'usr_CREATE_MODIFY_DESC' => '<p>The account name should contain only lower-case letters, numbers, hyphens, periods, underscores and should start with a lower-case letter. For example "betty","hjohnson", and "mary-jane" are all valid account names, but "3friends", "John Smith", and "henry:miller" are not. </p><p>Note that two special pseudonyms will be created for each new account. These pseudonyms provide the ability to have alternative mail accounts for that user which include their first name and last name separated with a period (.) and underscore (_). So, for the account "betty" with first name "Betty" and last name "Rubble" two pseudonyms are created as betty.rubble and betty_rubble. </p><p>The directory information (department, company, etc.) can be changed from the defaults shown below. The changes will apply only to this user. </p>',
|
'usr_ACCOUNT_CONFLICT' => 'Error: the account "[_1]" can"t be created because there is already a [_1] account of that name.',
|
||||||
'usr_ADD_USER' => 'Add user account',
|
|
||||||
'usr_MODIFY_ADMIN_TITLE' => 'Modify the admin account',
|
|
||||||
'usr_USER_CREATED' => 'Successfully created user account. ',
|
|
||||||
'usr_USER_MODIFIED' => 'Successfully modified user account. ',
|
|
||||||
'usr_CANNOT_MODIFY_USER' => 'Error: an internal error occurred while attempting to modify the user "[_1]".',
|
|
||||||
'usr_CANNOT_MODIFY_USER_GROUPS' =>'Error: an internal error occurred while attempting to modify the group "[_1]" for user "[_2]".',
|
|
||||||
'usr_TAINTED_USER' => 'The account name "[_1]" contains invalid characters.',
|
|
||||||
'usr_ACCOUNT_NAME' => 'Account name',
|
'usr_ACCOUNT_NAME' => 'Account name',
|
||||||
'usr_FIRSTNAME' => 'First name',
|
'usr_ACCOUNT_TOO_LONG' => 'Error: account name is too long. The maximum is [_1] characters.',
|
||||||
'usr_LASTNAME' => 'Last name',
|
'usr_ACCT_NAME_HAS_INVALID_CHARS' => 'The account name "[_1]" contains invalid characters. Account names must start with a lower case letter and contain only lower case letters, numbers, hyphens, periods and underscores.',
|
||||||
'usr_DEPARTMENT' => 'Department',
|
'usr_ADD_USER' => 'Add user account',
|
||||||
'usr_COMPANY' => 'Company',
|
'usr_CANNOT_CONTAIN_WHITESPACE' => 'This field cannot contain white-space',
|
||||||
'usr_STREET_ADDRESS' => 'Street address',
|
'usr_CANNOT_MODIFY_USER' => 'Error: an internal error occurred while attempting to modify the user "[_1]".',
|
||||||
'usr_CITY' => 'City',
|
'usr_CANNOT_MODIFY_USER_GROUPS' => 'Error: an internal error occurred while attempting to modify the group "[_1]" for user "[_2]".',
|
||||||
'usr_PHONE_NUMBER' => 'Phone number',
|
'usr_CREATE_MODIFY_DESC' => '<p>The account name should contain only lower-case letters, numbers, hyphens, periods, underscores and should start with a lower-case letter. For example "betty","hjohnson", and "mary-jane" are all valid account names, but "3friends", "John Smith", and "henry:miller" are not. </p><p>Note that two special pseudonyms will be created for each new account. These pseudonyms provide the ability to have alternative mail accounts for that user which include their first name and last name separated with a period (.) and underscore (_). So, for the account "betty" with first name "Betty" and last name "Rubble" two pseudonyms are created as betty.rubble and betty_rubble. </p><p>The directory information (department, company, etc.) can be changed from the defaults shown below. The changes will apply only to this user. </p>',
|
||||||
'usr_EMAIL_DELIVERY' => 'Email delivery',
|
'usr_CURRENT_SYSTEM_PASSWORD' => 'Current system password',
|
||||||
'usr_DELIVER_EMAIL_LOCALLY' => 'Deliver email locally',
|
|
||||||
'usr_FORWARD_EMAIL' => 'Forward email to address below',
|
|
||||||
'usr_DELIVER_AND_FORWARD' => 'Both deliver locally and forward',
|
'usr_DELIVER_AND_FORWARD' => 'Both deliver locally and forward',
|
||||||
|
'usr_DELIVER_EMAIL_LOCALLY' => 'Deliver email locally',
|
||||||
|
'usr_EMAIL_DELIVERY' => 'Email delivery',
|
||||||
|
'usr_ERR_OCCURRED_CREATING' => 'An error occurred creating the user.',
|
||||||
|
'usr_ERR_OCCURRED_DELETING' => 'An error occurred while trying to delete the user.',
|
||||||
|
'usr_ERR_OCCURRED_MODIFYING_PASSWORD' => 'An error occurred while updating the password',
|
||||||
|
'usr_FIRSTNAME' => 'First name',
|
||||||
|
'usr_FIRSTPAGE_DESC' => '<p>You can modify, lock or remove any account or reset the account"s password by clicking on the corresponding command next to the account. </p><p>If the account is marked as locked, that means that the user"s password needs to be reset. Please note that newly created accounts are automatically locked until the password is changed. </p>',
|
||||||
|
'usr_FORM_TITLE' => 'Create, modify, or remove user accounts',
|
||||||
|
'usr_FORWARD_EMAIL' => 'Forward email to address below',
|
||||||
'usr_FORWARDING_ADDRESS' => 'Forwarding address',
|
'usr_FORWARDING_ADDRESS' => 'Forwarding address',
|
||||||
'usr_GROUP_MEMBERSHIPS' => 'Group memberships',
|
'usr_GROUP_MEMBERSHIPS' => 'Group memberships',
|
||||||
'usr_RESET_DESC' => 'You are about to change the password for the user account "[_1]" ([_2])',
|
'usr_LABEL_IPSECRW_DOWNLOAD' => 'Download digital certificate to IPSec client',
|
||||||
'usr_RESET_DESC2' => 'Enter the new password in the fields below',
|
'usr_LASTNAME' => 'Last name',
|
||||||
'usr_ERR_OCCURRED_MODIFYING_PASSWORD' => 'An error occurred while updating the password',
|
|
||||||
'usr_PASSWORD_CHANGE_SUCCEEDED' => 'Successfully changed password for user "[_1]".',
|
|
||||||
'usr_LOCK_DESC' => 'You are about to lock the user account "[_1]" ([_2])',
|
|
||||||
'usr_LOCKED_ACCOUNT' => 'Successfully locked account for user "[_1]".',
|
|
||||||
'usr_NO_SUCH_USER' => 'Error: the user account "[_1]" does not exist.',
|
|
||||||
'usr_PSEUDONYM_CLASH' => 'Error: the pseudonym "[_1]" is already taken by the existing user account "[_1]".To differentiate, add initials to this field.',
|
|
||||||
'usr_LOCK_ACCOUNT' => 'Lock account',
|
'usr_LOCK_ACCOUNT' => 'Lock account',
|
||||||
'usr_LOCK_ACCOUNT_TITLE' => 'Lock user account',
|
'usr_LOCK_ACCOUNT_TITLE' => 'Lock user account',
|
||||||
|
'usr_LOCK_DESC' => 'You are about to lock the user account "[_1]" ([_2])',
|
||||||
'usr_LOCK_DESC2' => 'This user account will be locked. This means that this user will not be able to log in, and will not be able to collect e-mail. Any e-mail arriving will still be stored and/or forwarded to an external e-mail address, as configured. The account may be activated in the future by setting a new password. The current password will not be retained.</p><p><b>Are you sure you wish to lock this account?</b>',
|
'usr_LOCK_DESC2' => 'This user account will be locked. This means that this user will not be able to log in, and will not be able to collect e-mail. Any e-mail arriving will still be stored and/or forwarded to an external e-mail address, as configured. The account may be activated in the future by setting a new password. The current password will not be retained.</p><p><b>Are you sure you wish to lock this account?</b>',
|
||||||
|
'usr_LOCKED_ACCOUNT' => 'Successfully locked account for user "[_1]".',
|
||||||
|
'usr_MEMBER' => 'Member?',
|
||||||
|
'usr_MODIFY_ADMIN_TITLE' => 'Modify the admin account',
|
||||||
|
'usr_NEW_SYSTEM_PASSWORD' => 'New system password',
|
||||||
|
'usr_NEW_SYSTEM_PASSWORD_VERIFY' => 'New system password (verify)',
|
||||||
|
'usr_NO_SUCH_USER' => 'Error: the user account "[_1]" does not exist.',
|
||||||
|
'usr_NO_USER_ACCOUNTS' => 'There are no user accounts on this system.',
|
||||||
|
'usr_P2_TITLE' => 'Create or modify',
|
||||||
|
'usr_PASSWORD_CHANGE_SUCCEEDED' => 'Successfully changed password for user "[_1]".',
|
||||||
|
'usr_PHONE_NUMBER' => 'Phone number',
|
||||||
|
'usr_PSEUDONYM_CLASH' => 'Error: the pseudonym "[_1]" is already taken by the existing user account "[_1]".To differentiate, add initials to this field.',
|
||||||
'usr_REMOVE_ACCOUNT_TITLE' => 'Remove user account',
|
'usr_REMOVE_ACCOUNT_TITLE' => 'Remove user account',
|
||||||
'usr_REMOVE_DESC' => 'You are about to remove the user account "[_1]" ([_2])',
|
'usr_REMOVE_DESC' => 'You are about to remove the user account "[_1]" ([_2])',
|
||||||
'usr_REMOVE_DESC2' => 'All files belonging to this user account will be deleted. Also, any e-mail for this user account still remaining on the server (i.e. that has not yet been retrieved by the user) will be discarded. </p><p><b>Are you sure you wish to remove this account?</b>',
|
'usr_REMOVE_DESC2' => 'All files belonging to this user account will be deleted. Also, any e-mail for this user account still remaining on the server (i.e. that has not yet been retrieved by the user) will be discarded. </p><p><b>Are you sure you wish to remove this account?</b>',
|
||||||
'usr_LOCK' => 'Lock',
|
'usr_RESET_DESC' => 'You are about to change the password for the user account "[_1]" ([_2])',
|
||||||
'usr_NO_USER_ACCOUNTS' => 'There are no user accounts on this system.',
|
'usr_RESET_DESC2' => 'Enter the new password in the fields below',
|
||||||
'Users' => 'Users',
|
'usr_STREET_ADDRESS' => 'Street address',
|
||||||
'usr_ACCT_NAME_HAS_INVALID_CHARS' => 'The account name "[_1]" contains invalid characters. Account names must start with a lower case letter and contain only lower case letters, numbers, hyphens, periods and underscores.',
|
|
||||||
'usr_ACCOUNT_TOO_LONG' => 'Error: account name is too long. The maximum is [_1] characters.',
|
|
||||||
'usr_ACCOUNT_CONFLICT' => 'Error: the account "[_1]" can\'t be created because there is already a [_1] account of that name.',
|
|
||||||
'usr_ERR_OCCURRED_CREATING' => 'An error occurred creating the user.',
|
|
||||||
'usr_CANNOT_CONTAIN_WHITESPACE' => 'This field cannot contain white-space',
|
|
||||||
'usr_UNACCEPTABLE_CHARS' => 'This field must contain only letters, numbers, dots, hypens and underscores and start with a letter',
|
|
||||||
'usr_MEMBER' => 'Member?',
|
|
||||||
'usr_VPN_CLIENT_ACCESS' => 'VPN Client Access',
|
|
||||||
'usr_SYSTEM_PASSWORD_FORM_TITLE' => 'Change system password',
|
|
||||||
'usr_SYSTEM_PASSWORD_DESCRIPTION' => 'Certain services on this server installation require a username and password (for example this web page for the server manager application). The username is always admin. You can change the system password using the fields below.',
|
|
||||||
'usr_SYSTEM_PASSWORD_UNPRINTABLES_IN_PASS' => 'Password must contain only printable characters',
|
|
||||||
'usr_SYSTEM_PASSWORD_VERIFY_ERROR' => 'The two passwords are not identical.',
|
|
||||||
'usr_SYSTEM_PASSWORD_AUTH_ERROR' => 'The current password is incorrect.',
|
'usr_SYSTEM_PASSWORD_AUTH_ERROR' => 'The current password is incorrect.',
|
||||||
'usr_SYSTEM_PASSWORD_CHANGED' => 'The system password has been changed.',
|
'usr_SYSTEM_PASSWORD_CHANGED' => 'The system password has been changed.',
|
||||||
'usr_CURRENT_SYSTEM_PASSWORD' => 'Current system password',
|
'usr_SYSTEM_PASSWORD_DESCRIPTION' => 'Certain services on this server installation require a username and password (for example this web page for the server manager application). The username is always admin. You can change the system password using the fields below.',
|
||||||
'usr_NEW_SYSTEM_PASSWORD' => 'New system password',
|
'usr_SYSTEM_PASSWORD_FORM_TITLE' => 'Change system password',
|
||||||
'usr_NEW_SYSTEM_PASSWORD_VERIFY' => 'New system password (verify)',
|
'usr_SYSTEM_PASSWORD_UNPRINTABLES_IN_PASS' => 'Password must contain only printable characters',
|
||||||
'usr_LABEL_IPSECRW_DOWNLOAD' => 'Download digital certificate to IPSec client',
|
'usr_SYSTEM_PASSWORD_VERIFY_ERROR' => 'The two passwords are not identical.',
|
||||||
'usr_ERR_OCCURRED_DELETING' => 'An error occurred while trying to delete the user.',
|
'usr_TAINTED_USER' => 'The account name "[_1]" contains invalid characters.',
|
||||||
|
'usr_UNACCEPTABLE_CHARS' => 'This field must contain only letters, numbers, dots, hypens and underscores and start with a letter',
|
||||||
|
'usr_USER_CREATED' => 'Successfully created user account. ',
|
||||||
|
'usr_USER_MODIFIED' => 'Successfully modified user account. ',
|
||||||
|
'usr_VPN_CLIENT_ACCESS' => 'VPN Client Access',
|
||||||
|
|||||||
@@ -1,21 +1,26 @@
|
|||||||
'pwd_FIELDS_REQUIRED' => 'All fields are required',
|
#
|
||||||
'pwd_ERROR_PASSWORD_CHANGE' => 'An error occurred while attempting to change your password. Please make sure that the old password entered is correct.',
|
# Lex file for Userpassword generated on 2025-07-17 09:52:29
|
||||||
'pwd_PASSWORD_CHANGE' => 'Change Password',
|
#
|
||||||
'pwd_RESET_PASSWORD_TITLE' => 'Reset user password',
|
'pwd_ACCOUNT_GROUP_NONE' => 'There are no user groups in the system.',
|
||||||
'pwd_ACCOUNT_PASSWORD_CHANGE' => 'Change account password',
|
|
||||||
'pwd_PASSWORD_VERIFY_NEW' => 'New password (verify):',
|
|
||||||
'pwd_PASSWORD_NEW' => 'New password:',
|
|
||||||
'pwd_PASSWORD_OLD' => 'Old password:',
|
|
||||||
'pwd_PASSWORD_RESET' => 'Reset password',
|
|
||||||
'pwd_ACCOUNT_NAME_INVALID' => 'The account name entered is invalid.',
|
'pwd_ACCOUNT_NAME_INVALID' => 'The account name entered is invalid.',
|
||||||
'pwd_ACCOUNT_NAME_INVALID_CHARS' => 'The account name you entered contained invalid characters.',
|
'pwd_ACCOUNT_NAME_INVALID_CHARS' => 'The account name you entered contained invalid characters.',
|
||||||
'pwd_PASSWORD_OLD_INVALID_CHARS' => 'The old password you entered contained invalid characters.',
|
'pwd_ACCOUNT_PASSWORD_CHANGE' => 'Change account password',
|
||||||
'pwd_PASSWORD_INVALID_CHARS' => 'The password you entered contained invalid characters.',
|
|
||||||
'pwd_PASSWORD_VERIFY_ERROR' => 'The new passwords you entered did not match.',
|
|
||||||
'pwd_ACCOUNT_USER_NONE' => 'There are no user accounts in the system.',
|
'pwd_ACCOUNT_USER_NONE' => 'There are no user accounts in the system.',
|
||||||
'pwd_ACCOUNT_GROUP_NONE' => 'There are no user groups in the system.',
|
|
||||||
'pwd_YOUR_ACCOUNT' => 'Your account:',
|
|
||||||
'pwd_YOUR_ACCOUNT_INVALID' => 'The account name entered is invalid.',
|
|
||||||
'pwd_PASSWORD_CHANGE_SUCCESS' => 'Your password has been successfully changed.',
|
|
||||||
'pwd_DESCRIPTION' => '<P>To change your account password, please fill out the following form. You will need to provide the name of your account, your old password, and your desired new password. (You must type the new password twice.)</P><P>If you cannot change your password because you have forgotten the old one, your local system administrator can reset your password using the <EM>server manager</EM>.</P>',
|
'pwd_DESCRIPTION' => '<P>To change your account password, please fill out the following form. You will need to provide the name of your account, your old password, and your desired new password. (You must type the new password twice.)</P><P>If you cannot change your password because you have forgotten the old one, your local system administrator can reset your password using the <EM>server manager</EM>.</P>',
|
||||||
'pwd_DESCRIPTION_RESET' => '<P>To reset your account password, please fill out the following form. You will need to provide your desired new password. (You must type it twice.)</P><P>In cas of problem, your local system administrator can reset your password using the <EM>server manager</EM>.</P>',
|
'pwd_DESCRIPTION_RESET' => '<P>To reset your account password, please fill out the following form. You will need to provide your desired new password. (You must type it twice.)</P><P>In cas of problem, your local system administrator can reset your password using the <EM>server manager</EM>.</P>',
|
||||||
|
'pwd_ERROR_PASSWORD_CHANGE' => 'An error occurred while attempting to change your password. Please make sure that the old password entered is correct.',
|
||||||
|
'pwd_FIELDS_REQUIRED' => 'All fields are required',
|
||||||
|
'pwd_PASSWORD_CHANGE' => 'Change Password',
|
||||||
|
'pwd_PASSWORD_CHANGE_SUCCESS' => 'Your password has been successfully changed.',
|
||||||
|
'pwd_PASSWORD_DESCRIPTION' => 'The password must be composed of at least twelve characters with uppercase and lowercase letters, numbers and non-alphanumeric characters.',
|
||||||
|
'pwd_PASSWORD_INVALID_CHARS' => 'The password you entered contained invalid characters.',
|
||||||
|
'pwd_PASSWORD_NEW' => 'New password:',
|
||||||
|
'pwd_PASSWORD_OLD' => 'Old password:',
|
||||||
|
'pwd_PASSWORD_OLD_INVALID_CHARS' => 'The old password you entered contained invalid characters.',
|
||||||
|
'pwd_PASSWORD_RESET' => 'Reset password',
|
||||||
|
'pwd_PASSWORD_VERIFY_ERROR' => 'The new passwords you entered did not match.',
|
||||||
|
'pwd_PASSWORD_VERIFY_NEW' => 'New password (verify):',
|
||||||
|
'pwd_PASSWORD_WIKI' => 'If you want to know more about passwords, then please refer to the <a href="https://wiki.koozali.org/Useful_Commands#Password_strength">Wiki</a>',
|
||||||
|
'pwd_RESET_PASSWORD_TITLE' => 'Reset user password',
|
||||||
|
'pwd_YOUR_ACCOUNT' => 'Your account:',
|
||||||
|
'pwd_YOUR_ACCOUNT_INVALID' => 'The account name entered is invalid.',
|
||||||
|
|||||||
@@ -1,39 +1,40 @@
|
|||||||
|
#
|
||||||
'log_FORM_TITLE' => 'View log files',
|
# Lex file for Viewlogfiles generated on 2025-07-17 09:52:29
|
||||||
'log_FIRSTPAGE_DESC' => 'This panel allows you to view or download the log files generated
|
#
|
||||||
by the services running on your server.',
|
'log_DOWNLOAD_FILE' => 'Preparing to download the logfile [_1].',
|
||||||
'log_LOG_FILE_SELECT_DESC' => 'Choose a log file to view',
|
'log_DOWNLOAD_PAGE_DESC' => 'Your logfile download is now prepared. It will proceed as soon
|
||||||
|
as you click on the "Next" button below, and instruct
|
||||||
|
your browser to accept the download via the pop-up window that
|
||||||
|
will appear.',
|
||||||
|
'log_END_DESC' => 'Please note that it may take quite some time to generate these
|
||||||
|
reports.',
|
||||||
|
'log_FILENAME_ERROR' => '<p>Error while specifying log file name.</p>
|
||||||
|
<p>Invalid report type "[_1]".</p>',
|
||||||
'log_FILTER_PATTERN_DESC' => 'You may optionally specify a filter pattern to display only the
|
'log_FILTER_PATTERN_DESC' => 'You may optionally specify a filter pattern to display only the
|
||||||
lines from the log file which match this pattern. If you leave
|
lines from the log file which match this pattern. If you leave
|
||||||
this field blank, all available lines of the log file will be
|
this field blank, all available lines of the log file will be
|
||||||
displayed. Note that this option is not used if you download the
|
displayed. Note that this option is not used if you download the
|
||||||
logfile.',
|
logfile.',
|
||||||
'log_FILTER_PATTERN_LABEL' => 'Filter Pattern (optional)',
|
'log_FILTER_PATTERN_LABEL' => 'Filter Pattern (optional)',
|
||||||
|
'log_FIRSTPAGE_DESC' => 'This panel allows you to view or download the log files generated
|
||||||
|
by the services running on your server.',
|
||||||
|
'log_FORM_TITLE' => 'View log files',
|
||||||
|
'log_HIGHLIGHT_HEADER' => 'Highlighting lines matching: "[_1]".',
|
||||||
|
'log_LOG_FILE_EMPTY' => 'Log file "[_1]" is empty!',
|
||||||
|
'log_LOG_FILE_SELECT_DESC' => 'Choose a log file to view',
|
||||||
|
'log_MATCH_HEADER' => 'Displaying lines matching: "[_1]".',
|
||||||
'log_MATCH_PATTERN_DESC' => 'You may also optionally specify a highlight pattern to mark in bold
|
'log_MATCH_PATTERN_DESC' => 'You may also optionally specify a highlight pattern to mark in bold
|
||||||
any lines from the log file which match the highlight pattern. The
|
any lines from the log file which match the highlight pattern. The
|
||||||
highlight pattern is applied to any lines which have already
|
highlight pattern is applied to any lines which have already
|
||||||
matched the filter pattern. Note that this option is not used if
|
matched the filter pattern. Note that this option is not used if
|
||||||
you download the logfile.',
|
you download the logfile.',
|
||||||
'log_MATCH_PATTERN_LABEL' => 'Highlight Pattern (optional)',
|
'log_MATCH_PATTERN_LABEL' => 'Highlight Pattern (optional)',
|
||||||
'log_END_DESC' => 'Please note that it may take quite some time to generate these
|
|
||||||
reports.',
|
|
||||||
'log_VIEW' => 'View log file',
|
|
||||||
'log_LOG_FILE_EMPTY' => 'Log file "[_1]" is empty!',
|
|
||||||
'log_VIEWING_TIME' => 'Viewed at [_1].',
|
|
||||||
'log_MATCH_HEADER' => 'Displaying lines matching: "[_1]".',
|
|
||||||
'log_HIGHLIGHT_HEADER' => 'Highlighting lines matching: "[_1]".',
|
|
||||||
'log_NO_MATCHING_LINES' => 'No matching lines displayed.',
|
'log_NO_MATCHING_LINES' => 'No matching lines displayed.',
|
||||||
'log_FILENAME_ERROR' => '<p>Error while specifying log file name.</p>
|
|
||||||
<p>Invalid report type "[_1]".</p>',
|
|
||||||
'log_REFRESH' => 'Refresh this logfile',
|
|
||||||
'log_OP_DESC' => 'You must choose between viewing the logfile in your browser, or
|
'log_OP_DESC' => 'You must choose between viewing the logfile in your browser, or
|
||||||
downloading the logfile to your computer. If the logfile is
|
downloading the logfile to your computer. If the logfile is
|
||||||
particularly large, you may wish to download it instead of
|
particularly large, you may wish to download it instead of
|
||||||
attempting to open it in your browser, as this is a problem for
|
attempting to open it in your browser, as this is a problem for
|
||||||
some web browsers.',
|
some web browsers.',
|
||||||
'log_OP_LABEL' => 'Operation',
|
'log_REFRESH' => 'Refresh this logfile',
|
||||||
'log_DOWNLOAD_PAGE_DESC' => 'Your logfile download is now prepared. It will proceed as soon
|
'log_VIEW' => 'View log file',
|
||||||
as you click on the "Next" button below, and instruct
|
'log_VIEWING_TIME' => 'Viewed at [_1].',
|
||||||
your browser to accept the download via the pop-up window that
|
|
||||||
will appear.',
|
|
||||||
'log_DOWNLOAD_FILE' => 'Preparing to download the logfile [_1].',
|
|
||||||
|
|||||||
@@ -1,28 +1,29 @@
|
|||||||
|
#
|
||||||
'wkg_FORM_TITLE' => 'Change workgroup settings',
|
# Lex file for Workgroup generated on 2025-07-17 09:52:29
|
||||||
'wkg_DESC_WORKGROUP' => 'Enter the name of the Windows workgroup that this server should appear in.',
|
#
|
||||||
'wkg_LABEL_WORKGROUP' => 'Windows workgroup',
|
|
||||||
'wkg_DESC_SERVERNAME' => 'Enter the name that this server should use for
|
|
||||||
Windows and Macintosh file sharing.',
|
|
||||||
'wkg_LABEL_SERVERNAME' => 'Server Name',
|
|
||||||
'wkg_DESC_PDC' => 'Should this server act as the workgroup
|
'wkg_DESC_PDC' => 'Should this server act as the workgroup
|
||||||
and domain controller on your Windows network? You should leave
|
and domain controller on your Windows network? You should leave
|
||||||
this set to <b>No</b> if another server is already performing this
|
this set to <b>No</b> if another server is already performing this
|
||||||
role on your network.',
|
role on your network.',
|
||||||
'wkg_LABEL_PDC' => 'Workgroup and Domain Controller',
|
|
||||||
'wkg_DESC_ROAM' => 'Should this server support roaming profiles?
|
'wkg_DESC_ROAM' => 'Should this server support roaming profiles?
|
||||||
You should leave this set to the default of <b>No</b> unless you have
|
You should leave this set to the default of <b>No</b> unless you have
|
||||||
experience administering server-based Windows roaming profiles and
|
experience administering server-based Windows roaming profiles and
|
||||||
know that this feature is required.',
|
know that this feature is required.',
|
||||||
'wkg_LABEL_ROAM' => 'Roaming profiles',
|
'wkg_DESC_SERVERNAME' => 'Enter the name that this server should use for
|
||||||
'wkg_SUCCESS' => 'The new workgroup settings have been saved',
|
Windows and Macintosh file sharing.',
|
||||||
'wkg_INVALID_WORKGROUP' => 'The workgroup name must begin with a letter (upper or lower
|
'wkg_DESC_WORKGROUP' => 'Enter the name of the Windows workgroup that this server should appear in.',
|
||||||
case), followed by any combination of letters, numbers,
|
'wkg_FORM_TITLE' => 'Change workgroup settings',
|
||||||
underscores, periods and hyphens.',
|
|
||||||
'wkg_INVALID_SERVERNAME' => 'The server name must begin with a letter (upper or lower case),
|
'wkg_INVALID_SERVERNAME' => 'The server name must begin with a letter (upper or lower case),
|
||||||
followed by any combination of letters, numbers, underscores and
|
followed by any combination of letters, numbers, underscores and
|
||||||
hyphens.',
|
hyphens.',
|
||||||
|
'wkg_INVALID_WORKGROUP' => 'The workgroup name must begin with a letter (upper or lower
|
||||||
|
case), followed by any combination of letters, numbers,
|
||||||
|
underscores, periods and hyphens.',
|
||||||
'wkg_INVALID_WORKGROUP_MATCHES_SERVERNAME' => 'The server and workgroup names match, when compared in lower case.
|
'wkg_INVALID_WORKGROUP_MATCHES_SERVERNAME' => 'The server and workgroup names match, when compared in lower case.
|
||||||
These values must be different in order for filesharing to be turned on. ',
|
These values must be different in order for filesharing to be turned on. ',
|
||||||
|
'wkg_LABEL_PDC' => 'Workgroup and Domain Controller',
|
||||||
|
'wkg_LABEL_ROAM' => 'Roaming profiles',
|
||||||
|
'wkg_LABEL_SERVERNAME' => 'Server Name',
|
||||||
|
'wkg_LABEL_WORKGROUP' => 'Windows workgroup',
|
||||||
|
'wkg_SUCCESS' => 'The new workgroup settings have been saved',
|
||||||
'Workgroup' => 'Workgroup',
|
'Workgroup' => 'Workgroup',
|
||||||
|
|
||||||
|
|||||||
@@ -1,59 +1,53 @@
|
|||||||
|
#
|
||||||
'yum_FORM_TITLE' => 'Software installer',
|
# Lex file for Yum generated on 2025-07-17 09:52:30
|
||||||
'yum_SUCCESS' => 'The new settings have been saved.',
|
#
|
||||||
'yum_LABEL_YUM_STATUS' => 'Check for updates',
|
'yum_BUTTON_CONFIGURATION' => 'Change software installer settings',
|
||||||
'yum_LABEL_YUM_AUTOINSTALLUPDATES' => 'Automatically install updates',
|
'yum_BUTTON_INSTALL_AVAILABLE' => 'Install additional software',
|
||||||
'yum_DESC_YUM_AUTOINSTALLUPDATES' => 'If enabled this will take precedence over the simple check for updates notification and predownload features. Instead it will install the available updates from enabled repositories. For more information refer to yum and yum-cron manual page.',
|
'yum_BUTTON_INSTALL_UPDATES' => 'List available updates',
|
||||||
'yum_LABEL_YUM_PACKAGEFUNCTIONS' => 'Manage individual packages',
|
'yum_BUTTON_REMOVE' => 'Remove installed software',
|
||||||
'yum_DESC_YUM_PACKAGEFUNCTIONS' => 'The software installer can manage groups of
|
'yum_DESC_AVAILABLE_GROUPS' => 'You can select software groups
|
||||||
related package or individual packages. By
|
to install from the list below.',
|
||||||
default, only groups of packages are presented.
|
'yum_DESC_AVAILABLE_PACKAGES' => 'You can also select individual packages
|
||||||
If you wish to manage individual packages,
|
to install from the list below.',
|
||||||
enable this option. This should only be done
|
'yum_DESC_AVAILABLE_UPDATES' => 'The following updates are available for your system.
|
||||||
by experienced administrators.',
|
You should normally install all available updates.
|
||||||
'yum_LABEL_ENABLED_REPOSITORIES' => 'Enabled repositories',
|
If there are updates you do not wish to install, de-select
|
||||||
|
them from the list below.',
|
||||||
'yum_DESC_ENABLED_REPOSITORIES' => 'The software installer can install software
|
'yum_DESC_ENABLED_REPOSITORIES' => 'The software installer can install software
|
||||||
from any of enabled repositories. To enable
|
from any of enabled repositories. To enable
|
||||||
a repository, select it from the list.
|
a repository, select it from the list.
|
||||||
To disable a repository, de-select it from the list.
|
To disable a repository, de-select it from the list.
|
||||||
By default, only stable, tested software is available
|
By default, only stable, tested software is available
|
||||||
for installation.',
|
for installation.',
|
||||||
'yum_TITLE_UPTODATE' => 'This system is up to date.',
|
'yum_DESC_INSTALLED_GROUPS' => 'You can select software groups
|
||||||
'yum_DESC_UPTODATE' => 'All updates have been installed.',
|
to remove from the list below.',
|
||||||
'yum_TITLE_UPDATES_AVAILABLE' => 'Updates Available',
|
'yum_DESC_INSTALLED_PACKAGES' => 'You can also select individual packages
|
||||||
|
you wish to remove from the list below.',
|
||||||
'yum_DESC_UPDATES_AVAILABLE' => 'There are updates available for your system. These updates
|
'yum_DESC_UPDATES_AVAILABLE' => 'There are updates available for your system. These updates
|
||||||
should be installed as soon as possible.',
|
should be installed as soon as possible.',
|
||||||
'yum_LABEL_AVAILABLE_UPDATES' => 'Updates available',
|
'yum_DESC_UPTODATE' => 'All updates have been installed.',
|
||||||
'yum_DESC_AVAILABLE_UPDATES' => 'The following updates are available for your system.
|
'yum_DESC_YUM_AUTOINSTALLUPDATES' => 'If enabled this will take precedence over the simple check for updates notification and predownload features. Instead it will install the available updates from enabled repositories. For more information refer to yum and yum-cron manual page.',
|
||||||
You should normally install all available updates.
|
'yum_DESC_YUM_DELTARPMPROCESS' => 'A deltarpm contains the difference between an old and a new version of a rpm,
|
||||||
If there are updates you do not wish to install, de-select
|
which can save bandwith. The drawback is that update
|
||||||
them from the list below.',
|
operations consume considerably more CPU cycles',
|
||||||
'yum_INSTALL_UPDATES' => 'Install selected updates',
|
'yum_DESC_YUM_DOWNLOADONLY' => 'The rpm updates can be downloaded during the night,
|
||||||
'yum_BUTTON_INSTALL_UPDATES' => 'List available updates',
|
this will ease and give faster the yum update process
|
||||||
|
(only enabled repositories will be used).',
|
||||||
|
'yum_DESC_YUM_PACKAGEFUNCTIONS' => 'The software installer can manage groups of
|
||||||
|
related package or individual packages. By
|
||||||
|
default, only groups of packages are presented.
|
||||||
|
If you wish to manage individual packages,
|
||||||
|
enable this option. This should only be done
|
||||||
|
by experienced administrators.',
|
||||||
|
'yum_FORM_TITLE' => 'Software installer',
|
||||||
'yum_HEADER_AVAILABLE_SOFTWARE' => 'The following software is available to be installed
|
'yum_HEADER_AVAILABLE_SOFTWARE' => 'The following software is available to be installed
|
||||||
onto your system. You should only install additional
|
onto your system. You should only install additional
|
||||||
software onto this system if you are aware
|
software onto this system if you are aware
|
||||||
of the consequences of doing so.',
|
of the consequences of doing so.',
|
||||||
'yum_DESC_AVAILABLE_GROUPS' => 'You can select software groups
|
|
||||||
to install from the list below.',
|
|
||||||
'yum_LABEL_AVAILABLE_GROUPS' => 'Available groups',
|
|
||||||
'yum_DESC_AVAILABLE_PACKAGES' => 'You can also select individual packages
|
|
||||||
to install from the list below.',
|
|
||||||
'yum_LABEL_AVAILABLE_PACKAGES' => 'Available packages',
|
|
||||||
'yum_INSTALL_SOFTWARE' => 'Install',
|
|
||||||
'yum_HEADER_INSTALLED_SOFTWARE' => 'The following software is installed
|
'yum_HEADER_INSTALLED_SOFTWARE' => 'The following software is installed
|
||||||
on this system. You should only remove
|
on this system. You should only remove
|
||||||
software from this system if you are aware
|
software from this system if you are aware
|
||||||
of the consequences of doing so.',
|
of the consequences of doing so.',
|
||||||
'yum_DESC_INSTALLED_GROUPS' => 'You can select software groups
|
|
||||||
to remove from the list below.',
|
|
||||||
'yum_LABEL_INSTALLED_GROUPS' => 'Installed groups',
|
|
||||||
'yum_DESC_INSTALLED_PACKAGES' => 'You can also select individual packages
|
|
||||||
you wish to remove from the list below.',
|
|
||||||
'yum_LABEL_INSTALLED_PACKAGES' => 'Installed packages',
|
|
||||||
'yum_BUTTON_CONFIGURATION' => 'Change software installer settings',
|
|
||||||
'yum_BUTTON_INSTALL_AVAILABLE' => 'Install additional software',
|
|
||||||
'yum_BUTTON_REMOVE' => 'Remove installed software',
|
|
||||||
'yum_HEADER_POSTUPGRADE_REQUIRED' => ' The system needs to be reconfigured
|
'yum_HEADER_POSTUPGRADE_REQUIRED' => ' The system needs to be reconfigured
|
||||||
after adding or removing software,
|
after adding or removing software,
|
||||||
or applying updates.
|
or applying updates.
|
||||||
@@ -63,17 +57,21 @@ this page to start the reconfiguration process.
|
|||||||
<b>An automatic reboot will be
|
<b>An automatic reboot will be
|
||||||
initiated as part of this reconfiguration process</b>
|
initiated as part of this reconfiguration process</b>
|
||||||
</p> ',
|
</p> ',
|
||||||
|
'yum_INSTALL_UPDATES' => 'Install selected updates',
|
||||||
|
'yum_LABEL_AVAILABLE_GROUPS' => 'Available groups',
|
||||||
|
'yum_LABEL_AVAILABLE_PACKAGES' => 'Available packages',
|
||||||
|
'yum_LABEL_AVAILABLE_UPDATES' => 'Updates available',
|
||||||
|
'yum_LABEL_ENABLED_REPOSITORIES' => 'Enabled repositories',
|
||||||
|
'yum_LABEL_INSTALLED_GROUPS' => 'Installed groups',
|
||||||
|
'yum_LABEL_INSTALLED_PACKAGES' => 'Installed packages',
|
||||||
|
'yum_LABEL_YUM_AUTOINSTALLUPDATES' => 'Automatically install updates',
|
||||||
|
'yum_LABEL_YUM_DELTARPMPROCESS' => 'Delta Rpm Update',
|
||||||
|
'yum_LABEL_YUM_DOWNLOADONLY' => 'Predownload updates',
|
||||||
|
'yum_LABEL_YUM_PACKAGEFUNCTIONS' => 'Manage individual packages',
|
||||||
|
'yum_LABEL_YUM_STATUS' => 'Check for updates',
|
||||||
|
'yum_SUCCESS' => 'The new settings have been saved.',
|
||||||
'yum_SYSTEM_BEING_RECONFIGURED' => 'Your system is being automatically rebooted to
|
'yum_SYSTEM_BEING_RECONFIGURED' => 'Your system is being automatically rebooted to
|
||||||
complete the reconfiguraton process.',
|
complete the reconfiguraton process.',
|
||||||
'yum_1DAILY' => 'Daily',
|
'yum_TITLE_UPDATES_AVAILABLE' => 'Updates Available',
|
||||||
'yum_2WEEKLY' => 'Weekly',
|
'yum_TITLE_UPTODATE' => 'This system is up to date.',
|
||||||
'yum_3MONTHLY' => 'Monthly',
|
|
||||||
'yum_LABEL_YUM_DELTARPMPROCESS' => 'Delta Rpm Update',
|
|
||||||
'yum_DESC_YUM_DELTARPMPROCESS' => 'A deltarpm contains the difference between an old and a new version of a rpm,
|
|
||||||
which can save bandwith. The drawback is that update
|
|
||||||
operations consume considerably more CPU cycles',
|
|
||||||
'yum_LABEL_YUM_DOWNLOADONLY' => 'Predownload updates',
|
|
||||||
'yum_DESC_YUM_DOWNLOADONLY' => 'The rpm updates can be downloaded during the night,
|
|
||||||
this will ease and give faster the yum update process
|
|
||||||
(only enabled repositories will be used).',
|
|
||||||
'yum_UPDATE_SUCCESS' => 'The requested changes have been successfully implemented.',
|
'yum_UPDATE_SUCCESS' => 'The requested changes have been successfully implemented.',
|
||||||
|
|||||||
@@ -4,19 +4,19 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use utf8;
|
use utf8;
|
||||||
|
|
||||||
use esmith::ConfigDB;
|
use esmith::ConfigDB::UTF8;
|
||||||
use esmith::AccountsDB;
|
use esmith::AccountsDB::UTF8;
|
||||||
use esmith::util;
|
use esmith::util;
|
||||||
|
|
||||||
use Net::LDAP qw/LDAP_INVALID_CREDENTIALS/;
|
use Net::LDAP qw/LDAP_INVALID_CREDENTIALS/;
|
||||||
|
our ($cdb,$adb);
|
||||||
|
|
||||||
|
|
||||||
sub init_data {
|
sub init_data {
|
||||||
|
|
||||||
my %datas = ();
|
my %datas = ();
|
||||||
|
|
||||||
my $cdb = esmith::ConfigDB->open_ro() or die("can't open Config DB");
|
$cdb = esmith::ConfigDB::UTF8->open_ro() or die("can't open Config DB");
|
||||||
my $sysconfig = $cdb->get("sysconfig");
|
my $sysconfig = $cdb->get("sysconfig");
|
||||||
|
|
||||||
$datas{'lang'} = $sysconfig->prop('Language') || 'en_US';
|
$datas{'lang'} = $sysconfig->prop('Language') || 'en_US';
|
||||||
@@ -42,7 +42,7 @@ sub init_data {
|
|||||||
|
|
||||||
sub reconf_needed {
|
sub reconf_needed {
|
||||||
|
|
||||||
my $cdb = esmith::ConfigDB->open_ro() or die("can't open Config DB");
|
$cdb = esmith::ConfigDB::UTF8->open_ro() or die("can't open Config DB");
|
||||||
#my $unsafe = ($cdb->get('bootstrap-console') and $cdb->get('bootstrap-console')->prop('Run') eq 'yes') ||
|
#my $unsafe = ($cdb->get('bootstrap-console') and $cdb->get('bootstrap-console')->prop('Run') eq 'yes') ||
|
||||||
# ($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';
|
# ($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';
|
||||||
my $unsafe = ($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';
|
my $unsafe = ($cdb->get('UnsavedChanges') and $cdb->get('UnsavedChanges')->value eq 'yes') || '0';
|
||||||
@@ -55,7 +55,7 @@ sub check_credentials {
|
|||||||
my ($c, $username, $password) = @_;
|
my ($c, $username, $password) = @_;
|
||||||
return unless $username || $password;
|
return unless $username || $password;
|
||||||
|
|
||||||
my $cdb = esmith::ConfigDB->open_ro() or die("can't open Configuration DB");
|
$cdb = esmith::ConfigDB::UTF8->open_ro() or die("can't open Configuration DB");
|
||||||
my $l = $cdb->get('ldap');
|
my $l = $cdb->get('ldap');
|
||||||
my $status = $l->prop('status') || "disabled";
|
my $status = $l->prop('status') || "disabled";
|
||||||
unless ($status eq "enabled" ) {
|
unless ($status eq "enabled" ) {
|
||||||
@@ -88,13 +88,13 @@ sub check_adminalias {
|
|||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
|
||||||
my $alias;
|
my $alias;
|
||||||
my $cdb = esmith::ConfigDB->open_ro() or die("can't open Configuration DB");
|
$cdb = esmith::ConfigDB::UTF8->open_ro() or die("can't open Configuration DB");
|
||||||
if (defined $cdb->get('AdminAlias')) {
|
if (defined $cdb->get('AdminAlias')) {
|
||||||
$alias = $cdb->get('AdminAlias')->value;
|
$alias = $cdb->get('AdminAlias')->value;
|
||||||
}
|
}
|
||||||
return undef unless $alias;
|
return undef unless $alias;
|
||||||
|
|
||||||
my $adb = esmith::AccountsDB->open_ro() or die("can't open Accounts DB");
|
$adb = esmith::AccountsDB::UTF8->open_ro() or die("can't open Accounts DB");
|
||||||
my $arec = $adb->get( $alias );
|
my $arec = $adb->get( $alias );
|
||||||
return undef unless $arec;
|
return undef unless $arec;
|
||||||
|
|
||||||
@@ -105,4 +105,4 @@ sub check_adminalias {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|||||||
100
root/usr/share/smanager/lib/SrvMngr_Auth.pm
Normal file
100
root/usr/share/smanager/lib/SrvMngr_Auth.pm
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
# Optimized SrvMngr_Auth module using stash caching and Exporter
|
||||||
|
|
||||||
|
package SrvMngr_Auth;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter qw(import); # Import the Exporter module
|
||||||
|
use esmith::AccountsDB::UTF8;
|
||||||
|
|
||||||
|
# Define functions to be exported upon request
|
||||||
|
our @EXPORT_OK = qw(check_admin_access load_user_auth_info has_panel_access get_panel_from_path);
|
||||||
|
|
||||||
|
# Helper function to extract panel name from path
|
||||||
|
sub get_panel_from_path {
|
||||||
|
my ($path) = @_;
|
||||||
|
|
||||||
|
if ($path =~ m{^/([^/]+)}) {
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ''; # Return empty string if no panel found
|
||||||
|
}
|
||||||
|
|
||||||
|
# Load user authentication info and cache it in the stash
|
||||||
|
sub load_user_auth_info {
|
||||||
|
my ($c) = @_;
|
||||||
|
|
||||||
|
# Check if auth info is already cached in the stash
|
||||||
|
return if exists $c->stash->{auth_info};
|
||||||
|
|
||||||
|
my %auth_info = (
|
||||||
|
username => '', # Initialize username
|
||||||
|
is_admin => 0,
|
||||||
|
allowed_panels => [],
|
||||||
|
);
|
||||||
|
|
||||||
|
# Get username from session
|
||||||
|
$auth_info{username} = $c->session->{username} || ''; # Provide default empty string
|
||||||
|
|
||||||
|
# Check if user is admin
|
||||||
|
$auth_info{is_admin} = $c->is_admin || 0;
|
||||||
|
|
||||||
|
# If not admin, get allowed panels
|
||||||
|
if (!$auth_info{is_admin} && $auth_info{username}) {
|
||||||
|
my $accountsdb = esmith::AccountsDB::UTF8->open_ro();
|
||||||
|
if ($accountsdb) {
|
||||||
|
my $user_rec = $accountsdb->get($auth_info{username});
|
||||||
|
# Check if the property exists before trying to get its value
|
||||||
|
if (defined $user_rec && $user_rec->prop('AdminPanels')) {
|
||||||
|
# Get comma-separated list of allowed admin panels
|
||||||
|
my $admin_panels = $user_rec->prop('AdminPanels');
|
||||||
|
$auth_info{allowed_panels} = [split(/,/, $admin_panels)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Store the calculated info in the stash
|
||||||
|
$c->stash(auth_info => \%auth_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if a user has access to a specific panel (uses cached info)
|
||||||
|
sub has_panel_access {
|
||||||
|
my ($c, $panel) = @_;
|
||||||
|
|
||||||
|
# Ensure auth info is loaded
|
||||||
|
load_user_auth_info($c);
|
||||||
|
|
||||||
|
my $auth_info = $c->stash->{auth_info};
|
||||||
|
|
||||||
|
# Check if requested panel is in allowed panels
|
||||||
|
foreach my $allowed_panel (@{$auth_info->{allowed_panels}}) {
|
||||||
|
return 1 if lc($panel) eq lc($allowed_panel)
|
||||||
|
|| lc(substr($panel, 0, length($allowed_panel))) eq lc($allowed_panel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main function to check admin access (uses cached info)
|
||||||
|
sub check_admin_access {
|
||||||
|
my ($c) = @_;
|
||||||
|
|
||||||
|
# Ensure auth info is loaded
|
||||||
|
load_user_auth_info($c);
|
||||||
|
|
||||||
|
my $auth_info = $c->stash->{auth_info};
|
||||||
|
|
||||||
|
# First check if user is admin
|
||||||
|
return 1 if $auth_info->{is_admin};
|
||||||
|
|
||||||
|
# If not admin, check if they have access to the specific panel
|
||||||
|
my $current_path = $c->req->url->path;
|
||||||
|
my $requested_panel = $current_path;
|
||||||
|
return 0 unless $requested_panel;
|
||||||
|
|
||||||
|
# Check if user has access to this panel using the cached info
|
||||||
|
return has_panel_access($c, $requested_panel);
|
||||||
|
}
|
||||||
|
|
||||||
|
1; # Return true value for module loading
|
||||||
@@ -5,11 +5,11 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
use esmith::ConfigDB;
|
use esmith::ConfigDB::UTF8;
|
||||||
|
|
||||||
use constant WEBFUNCTIONS => '/usr/share/smanager/lib/SrvMngr/Controller/';
|
use constant WEBFUNCTIONS => '/usr/share/smanager/lib/SrvMngr/Controller/';
|
||||||
|
|
||||||
my $rtdb = esmith::ConfigDB->open('routes') or
|
my $rtdb = esmith::ConfigDB::UTF8->open('routes') or
|
||||||
die "Couldn't access Routes database\n";
|
die "Couldn't access Routes database\n";
|
||||||
|
|
||||||
my @routes = $rtdb->get_all_by_prop( type => 'route' );
|
my @routes = $rtdb->get_all_by_prop( type => 'route' );
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
use esmith::ConfigDB;
|
use esmith::ConfigDB::UTF8;
|
||||||
|
|
||||||
sub gen_pwd {
|
sub gen_pwd {
|
||||||
use MIME::Base64 qw(encode_base64);
|
use MIME::Base64 qw(encode_base64);
|
||||||
@@ -29,7 +29,7 @@ sub gen_pwd {
|
|||||||
return $p;
|
return $p;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
my $cdb = esmith::ConfigDB::UTF8->open() || die "Couldn't open config db";
|
||||||
|
|
||||||
my $pwds = $cdb->get_prop('smanager','Secrets');
|
my $pwds = $cdb->get_prop('smanager','Secrets');
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ BEGIN
|
|||||||
$ENV{'HOME'} = '/usr/share/smanager';
|
$ENV{'HOME'} = '/usr/share/smanager';
|
||||||
delete $ENV{'ENV'};
|
delete $ENV{'ENV'};
|
||||||
esmith::util::setRealToEffective();
|
esmith::util::setRealToEffective();
|
||||||
|
#to help debug UTF8, see perlrun and perlvar -CSAD or -CLSD
|
||||||
|
#print '$ENV{PERL_UNICODE}='.$ENV{'PERL_UNICODE'}."\n" if $ENV{'PERL_UNICODE'};
|
||||||
|
#print '${^UNICODE}='.${^UNICODE}.' ; ${^UTF8LOCALE}='.${^UTF8LOCALE} ."\n";
|
||||||
|
#print '${^OPEN}'.${^OPEN}."\n" if ${^OPEN} ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ use Test::Mojo;
|
|||||||
use FindBin;
|
use FindBin;
|
||||||
use lib "$FindBin::Bin/../lib";
|
use lib "$FindBin::Bin/../lib";
|
||||||
|
|
||||||
eval "use esmith::ConfigDB";
|
eval "use esmith::ConfigDB::UTF8";
|
||||||
plan skip_all => 'esmith::ConfigDB (and others) required for testing 002_basic' if $@;
|
plan skip_all => 'esmith::ConfigDB::UTF8 (and others) required for testing 002_basic' if $@;
|
||||||
|
|
||||||
plan tests => 3;
|
plan tests => 3;
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ use Test::Mojo;
|
|||||||
use FindBin;
|
use FindBin;
|
||||||
use lib "$FindBin::Bin/../lib";
|
use lib "$FindBin::Bin/../lib";
|
||||||
|
|
||||||
eval "use esmith::ConfigDB";
|
eval "use esmith::ConfigDB::UTF8";
|
||||||
plan skip_all => 'esmith::ConfigDB (and others) required for testing 004_panels' if $@;
|
plan skip_all => 'esmith::ConfigDB::UTF8 (and others) required for testing 004_panels' if $@;
|
||||||
|
|
||||||
my $tests;
|
my $tests;
|
||||||
plan tests => $tests;
|
plan tests => $tests;
|
||||||
@@ -17,8 +17,8 @@ BEGIN { $tests += 2 * 3 };
|
|||||||
my $t = Test::Mojo->new('SrvMngr');
|
my $t = Test::Mojo->new('SrvMngr');
|
||||||
$t->ua->max_redirects(1);
|
$t->ua->max_redirects(1);
|
||||||
|
|
||||||
$t->get_ok('/')->status_is(200)->content_like(qr/SME Server 10/);
|
$t->get_ok('/')->status_is(200)->content_like(qr/SME Server 11/);
|
||||||
$t->get_ok('/manual')->status_is(200)->content_like(qr/SME Server 10/);
|
$t->get_ok('/manual')->status_is(200)->content_like(qr/SME Server 11/);
|
||||||
|
|
||||||
BEGIN { $tests += 5 * 2 };
|
BEGIN { $tests += 5 * 2 };
|
||||||
my @panels = qw/ Initial Login Manual Support Request /;
|
my @panels = qw/ Initial Login Manual Support Request /;
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
.datetime-config-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: stretch;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime-label-col {
|
||||||
|
background: #e8f3e2; /* light green */
|
||||||
|
padding: 1em 0em 0em 0em;
|
||||||
|
min-width: 30%;
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
justify-content: flex-end;
|
||||||
|
font-weight: bold;
|
||||||
|
border-radius: 4px 0 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime-label {
|
||||||
|
display:inline-flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime-fields-col {
|
||||||
|
background: #fff;
|
||||||
|
padding: 1em;
|
||||||
|
flex: 1;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-left: none;
|
||||||
|
border-radius: 0 4px 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime-clock {
|
||||||
|
min-width: 20em;
|
||||||
|
display:inline-flex;
|
||||||
|
border:0px;
|
||||||
|
padding:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime-clock-label {
|
||||||
|
background-color:#e8f3e2;
|
||||||
|
display:inline-flex;
|
||||||
|
width:30%;
|
||||||
|
font-weight:bold;
|
||||||
|
text-align:right;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntp-test-result { font-weight: bold; }
|
||||||
|
.ntp-test-success { color: green; }
|
||||||
|
.ntp-test-error { color: red; }
|
||||||
|
.ntp-test-wait { color: #333; }
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
Generated by: SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||||
|
*/
|
||||||
|
.Emailsettings-panel {}
|
||||||
|
.name {}
|
||||||
|
.rout {}
|
||||||
|
.name {}
|
||||||
|
.rout {}
|
||||||
|
.name {}
|
||||||
|
.rout {}
|
||||||
|
.name {}
|
||||||
|
.rout {}
|
||||||
|
.name {}
|
||||||
|
.rout {}
|
||||||
@@ -0,0 +1,505 @@
|
|||||||
|
{
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.alert {
|
||||||
|
color: red;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
background: #e8f3e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.item {
|
||||||
|
color: #00008b;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
background: #e8f3e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.item-current:hover, a.warn-current:hover {
|
||||||
|
border-color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.item-current:link, a.warn-current:link,
|
||||||
|
a.item-current:visited, a.warn-current:visited,
|
||||||
|
a.item-current:active, a.warn-current:active,
|
||||||
|
a.item-current:hover, a.warn-current:hover {
|
||||||
|
display: block;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
color: black;
|
||||||
|
text-decoration: none;
|
||||||
|
background: #fff;
|
||||||
|
border-color: #888;
|
||||||
|
margin: 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.item:active, a.item-current:active,
|
||||||
|
a.warn:active, a.warn-current:active {
|
||||||
|
display: block;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
color: white;
|
||||||
|
background: black;
|
||||||
|
text-decoration: none;
|
||||||
|
border-color: #000;
|
||||||
|
margin: 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.item:hover, a.item-current:hover,
|
||||||
|
a.warn:hover, a.warn-current:hover {
|
||||||
|
display: block;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
color: black;
|
||||||
|
text-decoration: none;
|
||||||
|
background: #ccc;
|
||||||
|
border-color: #888;
|
||||||
|
margin: 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.item:link, a.item-current:link,
|
||||||
|
a.warn:link, a.warn-current:link {
|
||||||
|
display: block;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
color: black;
|
||||||
|
background: #e8f3e1;
|
||||||
|
text-decoration: none;
|
||||||
|
text-align: left;
|
||||||
|
border-color: #e8f3e1;
|
||||||
|
margin: 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
padding: 0 10px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.item:visited, a.item-current:visited,
|
||||||
|
a.warn:visited, a.warn-current:visited {
|
||||||
|
display: block;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
color: black;
|
||||||
|
background: #e8f3e1;
|
||||||
|
text-decoration: none;
|
||||||
|
border-color: #e8f3e1;
|
||||||
|
margin: 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.section-title {
|
||||||
|
display: inline-block;
|
||||||
|
color: #6CA345;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
line-height: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.sl {
|
||||||
|
color: green;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
background: #e8f3e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.update {
|
||||||
|
color: red;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
background: #98d36e;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.warn:link, a.warn-current:link,
|
||||||
|
a.warn:visited, a.warn-current:visited,
|
||||||
|
a.warn:active, a.warn-current:active,
|
||||||
|
a.warn:hover, a.warn-current:hover {
|
||||||
|
background-image: url("/server-common/warn.gif");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 10px;
|
||||||
|
padding-left: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:active {
|
||||||
|
color: #606060;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #F00;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link {
|
||||||
|
color: #006921;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
color: #063;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #FFF;
|
||||||
|
color: #000;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
border-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body, body.main {
|
||||||
|
margin: 5px 20px 5px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body, body.menu {
|
||||||
|
margin: 0 0 0 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.header {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
background-color: #bee6a2;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.main {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
background-color: #fff;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.menu {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
background-color: #e8f3e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.error, div.sme-error, span.error, span.sme-error {
|
||||||
|
color: red;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: red;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
margin-top: 2px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, .h1 {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
color: #333;
|
||||||
|
font-size: 18px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2, .h2 {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
color: #333;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3, .h3 {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
color: #333;
|
||||||
|
font-size: 12px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4, .h4 {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-style: italic;
|
||||||
|
color: #333;
|
||||||
|
font-size: 12px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr.sectionbar {
|
||||||
|
color: #8ebe43;
|
||||||
|
background-color: #8ebe43;
|
||||||
|
height: 1px;
|
||||||
|
width: 80%;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr.sme-copyrightbar {
|
||||||
|
color: #8ebe43;
|
||||||
|
background-color: #8ebe43;
|
||||||
|
height: 1px;
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.action {
|
||||||
|
margin-left: 0;
|
||||||
|
background-color: #bee6a2;
|
||||||
|
color: darkgreen;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 2px solid #4CAF50;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.action2 {
|
||||||
|
margin-left: 0;
|
||||||
|
color: black;
|
||||||
|
background-color: #d4d0c8;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.action:active {
|
||||||
|
background-color: #3e8e41;
|
||||||
|
transform: translate(-2px,2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
input.action:hover {
|
||||||
|
background-color: #3e8e41;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.field-with-error {
|
||||||
|
background-color: #fd9e7e;
|
||||||
|
}
|
||||||
|
|
||||||
|
label.field-with-error {
|
||||||
|
color: #dd7e5e;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol, ul, li {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: normal;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.data {
|
||||||
|
padding: 2px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.data2 {
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.label {
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: #e8f3e1;
|
||||||
|
width: 30%;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.label2 {
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: #e8f3e1;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
table, tr, td, div, p, form {
|
||||||
|
color: #000;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.sme-border {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border: 2px solid #cccccc;
|
||||||
|
empty-cells: show;
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.sme-layout {
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.sme-noborders {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 0 20px;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.darkgrey {
|
||||||
|
background-color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.label {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: #e8f3e1;
|
||||||
|
width: 30%;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.menu-cell {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.section {
|
||||||
|
padding-bottom: 2px;
|
||||||
|
padding-top: 8px;
|
||||||
|
background-color: #e8f3e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sme-border a, td.sme-border-right a, td.sme-border-center a {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sme-border, td.sme-border-warning, td.sme-border-right, td.sme-border-center {
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #000;
|
||||||
|
text-align: left;
|
||||||
|
padding: 3px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sme-border-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sme-border-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sme-border-warning {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sme-layout* : Used for top-level layout */
|
||||||
|
table.sme-layout {
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
tr.sme-layout {
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
}
|
||||||
|
td.sme-layout {
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sme-noborders-content {
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sme-noborders-info, div.sme-noborders-info {
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sme-noborders-label {
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: right;
|
||||||
|
background-color: #e8f3e1;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
width: 33%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sme-radiobutton {
|
||||||
|
width: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.sme-border {
|
||||||
|
border: 1px;
|
||||||
|
background-color: #bee6a2;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: bottom;
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.sme-layout {
|
||||||
|
border: 1px;
|
||||||
|
background-color: #e8f3e1;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 9pt;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000;
|
||||||
|
text-align: right;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.sme-layout {
|
||||||
|
border: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style-type: circle;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.success, span.success {
|
||||||
|
color: #006400;
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: #006400 ;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.roundcube #roundcube{
|
||||||
|
width:100%;
|
||||||
|
height:600px;
|
||||||
|
}
|
||||||
293
root/usr/share/smanager/themes/default/public/css/new_sme.css
Normal file
293
root/usr/share/smanager/themes/default/public/css/new_sme.css
Normal file
@@ -0,0 +1,293 @@
|
|||||||
|
/* css/sme-password.css */
|
||||||
|
.input-container {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.sme-password {
|
||||||
|
padding-right: 5px; /* Ensure space for the toggle icon */
|
||||||
|
}
|
||||||
|
.toggle-password {
|
||||||
|
position: absolute;
|
||||||
|
right: 4px; /* Position it towards the right */
|
||||||
|
top: 50%; /* Center vertically */
|
||||||
|
transform: translateY(-50%); /* Adjust for exact centering */
|
||||||
|
cursor: pointer;
|
||||||
|
width: 20px; /* Set the width of the icon */
|
||||||
|
height: 20px; /* Set the height of the icon */
|
||||||
|
}
|
||||||
|
|
||||||
|
.module {
|
||||||
|
padding: 20px;
|
||||||
|
border: 1px ;
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
margin-left: 10px !important;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sme-copyright {
|
||||||
|
color: #777;
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
height: 142%;
|
||||||
|
width: auto;
|
||||||
|
margin-left: -16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradient-panel {
|
||||||
|
width: 100%;
|
||||||
|
height: 40px;
|
||||||
|
background: linear-gradient(to right, white ,#c0e7a5 );
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sme-error {
|
||||||
|
color: #d9534f;
|
||||||
|
display: block;
|
||||||
|
background-color: #fff;
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: red;
|
||||||
|
padding: 2px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-button {
|
||||||
|
position: absolute;
|
||||||
|
left: 7%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
background-color: #4caf50b8;
|
||||||
|
color: white !important;
|
||||||
|
border: none;
|
||||||
|
padding: 8px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 14px;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-left: 77%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sme-warning {
|
||||||
|
color: orange;
|
||||||
|
display: block;
|
||||||
|
background-color: #fff;
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: orange;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.infobar {
|
||||||
|
font-family: Verdana, Tahoma, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
background-color: #98d36e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.module-content {
|
||||||
|
font-family: Georgia, Garamond, serif;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 1.2;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
#help-button {
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 20px;
|
||||||
|
padding: 8px;
|
||||||
|
background-color: #98d36e;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#module {
|
||||||
|
padding: 20px;
|
||||||
|
border: 1px;
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#container {
|
||||||
|
max-width: 100%;
|
||||||
|
position: relative;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header2 {
|
||||||
|
width:96%;
|
||||||
|
margin-left: 1px;
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main {
|
||||||
|
margin-left: 200px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#central {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer {
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
width: 100%;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navigation {
|
||||||
|
width: 190px;
|
||||||
|
position: absolute;
|
||||||
|
padding: 5px;
|
||||||
|
background-color: #E8F3E1;
|
||||||
|
overflow: auto;
|
||||||
|
margin-top:20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer img {
|
||||||
|
float: right;
|
||||||
|
position: fixed;
|
||||||
|
/*margin-left: 40%;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.flag-style {
|
||||||
|
position: absolute;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
left: 95%;
|
||||||
|
/*right: 20px;
|
||||||
|
*/
|
||||||
|
width: 24px;
|
||||||
|
height: 14px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* flag container*/
|
||||||
|
#flag-container span {
|
||||||
|
font-size: 24px;
|
||||||
|
display: flex; /* Allows for easy centering */
|
||||||
|
justify-content: center; /* Center horizontally */
|
||||||
|
align-items: center; /* Center vertically */
|
||||||
|
width: 100%; /* Full width of parent */
|
||||||
|
height: 24px; /* Set a fixed height */
|
||||||
|
border: 1px solid #ccc; /* Light gray border */
|
||||||
|
border-radius: 5px; /* Rounded corners */
|
||||||
|
cursor: default; /* Prevent text cursor */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-box {
|
||||||
|
display: inline-block; /* Make it inline-block to fit around the content */
|
||||||
|
border: 2px solid gray; /* Change the border color as desired */
|
||||||
|
padding: 10px; /* Add some padding */
|
||||||
|
border-radius: 10px; /* Round the corners of the box */
|
||||||
|
font-size: 60px; /* Adjust size if needed */
|
||||||
|
margin-top: 10px; /* Add some margin */
|
||||||
|
text-align: center; /* Center text inside the box */
|
||||||
|
}
|
||||||
|
|
||||||
|
table.sme-border {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border: 2px solid #cccccc;
|
||||||
|
empty-cells: show;
|
||||||
|
margin: 5px 5px 5px 2px;
|
||||||
|
}
|
||||||
|
td.sme-border, td.sme-border-warning, td.sme-border-right, td.sme-border-center {
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #000000;
|
||||||
|
text-align: left;
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 2px;
|
||||||
|
padding-top: 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
}
|
||||||
|
td.sme-border-warning {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
td.sme-border-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
td.sme-border-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
th.sme-border {
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
background-color: #bee6a2;
|
||||||
|
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000000;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: bottom;
|
||||||
|
padding-left: 3px;
|
||||||
|
padding-right: 3px;
|
||||||
|
padding-top: 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
/*border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: #F2F0EE #75736E #75736E #F2F0EE ;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
td.sme-border a, td.sme-border-right a, td.sme-border-center a {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.sme-layout {
|
||||||
|
border: 1px solid #8ebe43;
|
||||||
|
background-color: #bee6a2;
|
||||||
|
}
|
||||||
|
table.sme-border {
|
||||||
|
border: 2px solid #dddddd;
|
||||||
|
}
|
||||||
|
td.sme-border-warning,
|
||||||
|
td.sme-border-right,
|
||||||
|
td.sme-border-center {
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
}
|
||||||
|
td.sme-border-right {text-align: right;}
|
||||||
|
td.sme-border-center {text-align: center;}
|
||||||
|
th.sme-border {
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
background-color: #e8f3e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-visited-state {
|
||||||
|
color: inherit;
|
||||||
|
/* Or specify the desired color */
|
||||||
|
text-decoration: none;
|
||||||
|
/* Or any other style you want to reset */
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-visited-state:visited {
|
||||||
|
color: inherit;
|
||||||
|
/* Or specify the desired color */
|
||||||
|
text-decoration: none;
|
||||||
|
/* Or any other style you want to reset */
|
||||||
|
}
|
||||||
|
|
||||||
|
#busy-indicator {
|
||||||
|
display: none;
|
||||||
|
margin-top: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.busy {
|
||||||
|
cursor: wait; /* Change the cursor to a 'wait' cursor */
|
||||||
|
}
|
||||||
101
root/usr/share/smanager/themes/default/public/js/datetime.js
Normal file
101
root/usr/share/smanager/themes/default/public/js/datetime.js
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
var select = document.getElementById('time_mode_select');
|
||||||
|
var ntpSection = document.getElementById('ntp_section');
|
||||||
|
var manualSection = document.getElementById('manual_section');
|
||||||
|
|
||||||
|
function toggleSections() {
|
||||||
|
if (select.value === 'dat_manually_set') {
|
||||||
|
ntpSection.style.display = 'none';
|
||||||
|
manualSection.style.display = 'block';
|
||||||
|
} else {
|
||||||
|
ntpSection.style.display = 'block';
|
||||||
|
manualSection.style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
select.addEventListener('change', toggleSections);
|
||||||
|
toggleSections(); // Set initial state
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
// Parse the initial server time from the input value
|
||||||
|
const clockElement = document.getElementById('real-time-clock');
|
||||||
|
if (!clockElement) return;
|
||||||
|
|
||||||
|
// Get the initial server time from the input's value
|
||||||
|
let serverTime = new Date(clockElement.value.replace(' ', 'T'));
|
||||||
|
|
||||||
|
function updateDateTime() {
|
||||||
|
// Format the date/time string as desired
|
||||||
|
const daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
||||||
|
const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
||||||
|
|
||||||
|
const dayOfWeek = daysOfWeek[serverTime.getDay()];
|
||||||
|
const month = months[serverTime.getMonth()];
|
||||||
|
const day = serverTime.getDate();
|
||||||
|
const year = serverTime.getFullYear();
|
||||||
|
|
||||||
|
let hours = serverTime.getHours();
|
||||||
|
const ampm = hours >= 12 ? 'PM' : 'AM';
|
||||||
|
hours = hours % 12 || 12;
|
||||||
|
|
||||||
|
const minutes = serverTime.getMinutes().toString().padStart(2, '0');
|
||||||
|
const seconds = serverTime.getSeconds().toString().padStart(2, '0');
|
||||||
|
|
||||||
|
const dateTimeString = `${dayOfWeek}, ${month} ${day}, ${year} ${hours}:${minutes}:${seconds} ${ampm}`;
|
||||||
|
clockElement.value = dateTimeString;
|
||||||
|
|
||||||
|
// Advance serverTime by one second
|
||||||
|
serverTime.setSeconds(serverTime.getSeconds() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateDateTime();
|
||||||
|
setInterval(updateDateTime, 1000);
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
const btn = document.getElementById('test-ntp-btn');
|
||||||
|
const input = document.getElementById('ntpserver');
|
||||||
|
const result = document.getElementById('ntp-test-result');
|
||||||
|
|
||||||
|
btn.addEventListener('click', function() {
|
||||||
|
const server = input.value.trim();
|
||||||
|
result.className = 'ntp-test-result'; // reset
|
||||||
|
|
||||||
|
if (!server) {
|
||||||
|
result.textContent = "Please enter a server address.";
|
||||||
|
result.classList.add('ntp-test-error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
result.textContent = "Testing...";
|
||||||
|
result.classList.add('ntp-test-wait');
|
||||||
|
|
||||||
|
fetch('/smanager/datetimet', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {'Content-Type': 'application/json'},
|
||||||
|
body: JSON.stringify({ ntpserver: server })
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
// HTTP error, e.g., 404, 500
|
||||||
|
throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(data => {
|
||||||
|
result.className = 'ntp-test-result'; // reset
|
||||||
|
if (data.success) {
|
||||||
|
result.textContent = `Server time: ${data.time}`;
|
||||||
|
result.classList.add('ntp-test-success');
|
||||||
|
} else {
|
||||||
|
result.textContent = `Error: ${data.error}`;
|
||||||
|
result.classList.add('ntp-test-error');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
// Network error or thrown HTTP error
|
||||||
|
result.className = 'ntp-test-result ntp-test-error';
|
||||||
|
result.textContent = `Request failed: ${error.message}`;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
//
|
||||||
|
//Generated by: SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||||
|
//
|
||||||
|
$(document).ready(function() {
|
||||||
|
});
|
||||||
@@ -28,4 +28,16 @@ $(document).ready(function() {
|
|||||||
var iconSrc = inputType === 'password' ? 'images/visible.png' : 'images/visible-slash.png';
|
var iconSrc = inputType === 'password' ? 'images/visible.png' : 'images/visible-slash.png';
|
||||||
$(this).attr('src', iconSrc);
|
$(this).attr('src', iconSrc);
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// and busy cursor
|
||||||
|
$(document).ready(function() {
|
||||||
|
// Handle form submission for any form
|
||||||
|
$('form').on('submit', function(event) {
|
||||||
|
// Disable all submit buttons and update their labels
|
||||||
|
$(this).find('button[type="submit"]').prop('disabled', true).text('Please wait...');
|
||||||
|
$(this).find('input[type="submit"]').prop('disabled', true).val('Please wait...');
|
||||||
|
// Add busy cursor
|
||||||
|
$('body').addClass('busy');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
% layout 'default', title => "Sme server 2 - backup";
|
% layout "default", title => "Sme server 2 - backup";
|
||||||
|
|
||||||
% content_for 'module' => begin
|
% content_for "module" => begin
|
||||||
|
|
||||||
<div id='module' class='module back_tape_configure-panel'>
|
<div id="module" class="module back_tape_configure-panel">
|
||||||
% if (config->{debug} == 1) {
|
% if (config->{debug} == 1) {
|
||||||
<p>
|
<p>
|
||||||
%= dumper $c->current_route
|
%= dumper $c->current_route
|
||||||
@@ -10,30 +10,30 @@
|
|||||||
</p>
|
</p>
|
||||||
% }
|
% }
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
% if ( stash "error" ) {
|
||||||
<br><div class=sme-error>
|
<br><div class=sme-error>
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
%= $c->render_to_string(inline => stash "error")
|
||||||
</div>
|
</div>
|
||||||
%}
|
%}
|
||||||
|
|
||||||
<h1><%= $title%></h1>
|
<h1><%= $title%></h1>
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
%=l 'bac_ENABLE_DISABLE_TAPE'
|
%=l "bac_ENABLE_DISABLE_TAPE"
|
||||||
</h2><br>
|
</h2><br>
|
||||||
|
|
||||||
%= $c->render_to_string(inline => (l 'bac_TAPE_CONFIG_DESC'))
|
%= $c->render_to_string(inline => (l "bac_TAPE_CONFIG_DESC"))
|
||||||
|
|
||||||
%= form_for '/backupd' => (method => 'POST') => begin
|
%= form_for "/backupd" => (method => "POST") => begin
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_ENABLE_TAPE_BACKUP'
|
%=l "bac_ENABLE_TAPE_BACKUP"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% if ( $bac_datas->{status} eq 'checked' ) {
|
% if ( $bac_datas->{status} eq "checked" ) {
|
||||||
<input type='checkbox' name='Tapebackup' checked >
|
<input type="checkbox" name="Tapebackup" checked >
|
||||||
%} else {
|
%} else {
|
||||||
%= check_box 'Tapebackup'
|
%= check_box "Tapebackup"
|
||||||
%}
|
%}
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
@@ -41,40 +41,40 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_TAPE_BACKUP_TIME'
|
%=l "bac_TAPE_BACKUP_TIME"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'BackupHour' => $bac_datas->{backupHour} unless param 'BackupHour';
|
% param "BackupHour" => $bac_datas->{backupHour} unless param "BackupHour";
|
||||||
%= text_field 'BackupHour', size => '2'
|
%= text_field "BackupHour", size => "2"
|
||||||
% param 'BackupMin' => $bac_datas->{backupMin} unless param 'BackupMin';
|
% param "BackupMin" => $bac_datas->{backupMin} unless param "BackupMin";
|
||||||
%= text_field 'BackupMin', size => '2'
|
%= text_field "BackupMin", size => "2"
|
||||||
</span>
|
</span>
|
||||||
<!--span class=label-->
|
<!--span class=label-->
|
||||||
%=l 'AM/PM:'
|
%=l "AM/PM:"
|
||||||
<!--/span--><span class=data>
|
<!--/span--><span class=data>
|
||||||
% param 'BackupAMPM' => $bac_datas->{backupAMPM} unless param 'BackupAMPM';
|
% param "BackupAMPM" => $bac_datas->{backupAMPM} unless param "BackupAMPM";
|
||||||
%= select_field 'BackupAMPM' => ['AM', 'PM'], class => 'input'
|
%= select_field "BackupAMPM" => ["AM", "PM"], class => "input"
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_LOAD_TAPE_REMINDER_TIME'
|
%=l "bac_LOAD_TAPE_REMINDER_TIME"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'ReminderHour' => $bac_datas->{reminderHour} unless param 'ReminderHour';
|
% param "ReminderHour" => $bac_datas->{reminderHour} unless param "ReminderHour";
|
||||||
%= text_field 'ReminderHour', size => '2'
|
%= text_field "ReminderHour", size => "2"
|
||||||
% param 'ReminderMin' => $bac_datas->{reminderMin} unless param 'ReminderMin';
|
% param "ReminderMin" => $bac_datas->{reminderMin} unless param "ReminderMin";
|
||||||
%= text_field 'ReminderMin', size => '2'
|
%= text_field "ReminderMin", size => "2"
|
||||||
</span>
|
</span>
|
||||||
<!--span class=label-->
|
<!--span class=label-->
|
||||||
%=l 'AM/PM:'
|
%=l "AM/PM:"
|
||||||
<!--/span--><span class=data>
|
<!--/span--><span class=data>
|
||||||
% param 'ReminderAMPM' => $bac_datas->{reminderAMPM} unless param 'ReminderAMPM';
|
% param "ReminderAMPM" => $bac_datas->{reminderAMPM} unless param "ReminderAMPM";
|
||||||
%= select_field 'ReminderAMPM' => ['AM', 'PM'], class => 'input'
|
%= select_field "ReminderAMPM" => ["AM", "PM"], class => "input"
|
||||||
</span>
|
</span>
|
||||||
</p><br>
|
</p><br>
|
||||||
|
|
||||||
%= hidden_field 'Function' => $bac_datas->{'function'}
|
%= hidden_field "Function" => $bac_datas->{"function"}
|
||||||
%= submit_button $c->l('bac_UPDATE_CONF'), class => 'action'
|
%= submit_button $c->l("Update"), class => "action"
|
||||||
|
|
||||||
% end
|
% end
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
% layout 'default', title => "Sme server 2 - backup - conf";
|
% layout "default", title => "Sme server 2 - backup - conf";
|
||||||
|
|
||||||
% content_for 'module' => begin
|
% content_for "module" => begin
|
||||||
|
|
||||||
<div id='module' class='module back_workstn_configure1-panel'>
|
<div id="module" class="module back_workstn_configure1-panel">
|
||||||
% if (config->{debug} == 1) {
|
% if (config->{debug} == 1) {
|
||||||
<p>
|
<p>
|
||||||
%= dumper $c->current_route
|
%= dumper $c->current_route
|
||||||
@@ -10,145 +10,145 @@
|
|||||||
</p>
|
</p>
|
||||||
% }
|
% }
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
% if ( stash "error" ) {
|
||||||
<br><div class=sme-error>
|
<br><div class=sme-error>
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
%= $c->render_to_string(inline => stash "error")
|
||||||
</div>
|
</div>
|
||||||
%}
|
%}
|
||||||
|
|
||||||
<h1><%= $title%></h1>
|
<h1><%= $title%></h1>
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
%=l 'bac_CONFIGURE_WORKSTN_BACKUP'
|
%=l "bac_CONFIGURE_WORKSTN_BACKUP"
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
%= $c->render_to_string(inline => (l 'bac_CONFIGURE_WORKSTN_BACKUP_DESC'))
|
%= $c->render_to_string(inline => (l "bac_CONFIGURE_WORKSTN_BACKUP_DESC"))
|
||||||
|
|
||||||
%= form_for '/backupd' => (method => 'POST') => begin
|
%= form_for "/backupd" => (method => "POST") => begin
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_ENABLE_WORKSTN_BACKUP'
|
%=l "bac_ENABLE_WORKSTN_BACKUP"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% if ( $bac_datas->{status} eq 'checked' ) {
|
% if ( $bac_datas->{status} eq "checked" ) {
|
||||||
<input type='checkbox' name='Workstnbackup' checked >
|
<input type="checkbox" name="Workstnbackup" checked >
|
||||||
%} else {
|
%} else {
|
||||||
%= check_box 'Workstnbackup'
|
%= check_box "Workstnbackup"
|
||||||
%}
|
%}
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
<p><h3>
|
<p><h3>
|
||||||
%= l 'bac_WORKSTATION_BACKUP_DEST'
|
%= l "bac_WORKSTATION_BACKUP_DEST"
|
||||||
</h3><br>
|
</h3><br>
|
||||||
|
|
||||||
% if ( $bac_datas->{vfstype} =~ m/cifs|nfs/s ) {
|
% if ( $bac_datas->{vfstype} =~ m/cifs|nfs/s ) {
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_WORKSTN_NAME'
|
%=l "bac_WORKSTN_NAME"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'BackupwkStation' => $bac_datas->{station} unless param 'BackupwkStation';
|
% param "BackupwkStation" => $bac_datas->{station} unless param "BackupwkStation";
|
||||||
%= text_field 'BackupwkStation', size => 20, class => 'input'
|
%= text_field "BackupwkStation", size => 20, class => "input"
|
||||||
</span><br>
|
</span><br>
|
||||||
%}
|
%}
|
||||||
% if ( $bac_datas->{vfstype} eq 'usb' ) {
|
% if ( $bac_datas->{vfstype} eq "usb" ) {
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_local removable disk'
|
%=l "bac_local removable disk"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'BackupwkFolder' => $bac_datas->{mount} unless param 'BackupwkFolder';
|
% param "BackupwkFolder" => $bac_datas->{mount} unless param "BackupwkFolder";
|
||||||
%= select_field 'BackupwkFolder' => $c->get_BackupwkDest_options( $bac_datas->{vfstype}), class => 'input'
|
%= select_field "BackupwkFolder" => $c->get_BackupwkDest_options( $bac_datas->{vfstype}), class => "input"
|
||||||
</span><br>
|
</span><br>
|
||||||
% } elsif ( $bac_datas->{vfstype} eq 'mnt') {
|
% } elsif ( $bac_datas->{vfstype} eq "mnt") {
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_Mounted disk'
|
%=l "bac_Mounted disk"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'BackupwkFolder' => $bac_datas->{folder} unless param 'BackupwkFolder';
|
% param "BackupwkFolder" => $bac_datas->{folder} unless param "BackupwkFolder";
|
||||||
%= select_field 'BackupwkFolder' => $c->get_BackupwkDest_options( $bac_datas->{vfstype}), class => 'input'
|
%= select_field "BackupwkFolder" => $c->get_BackupwkDest_options( $bac_datas->{vfstype}), class => "input"
|
||||||
</span><br>
|
</span><br>
|
||||||
% } else {
|
% } else {
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_SHARED_FOLDER_NAME'
|
%=l "bac_SHARED_FOLDER_NAME"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'BackupwkFolder' => $bac_datas->{folder} unless param 'BackupwkFolder';
|
% param "BackupwkFolder" => $bac_datas->{folder} unless param "BackupwkFolder";
|
||||||
%= text_field 'BackupwkFolder', size => 20, class => 'input'
|
%= text_field "BackupwkFolder", size => 20, class => "input"
|
||||||
</span><br>
|
</span><br>
|
||||||
%}
|
%}
|
||||||
% if ( $bac_datas->{vfstype} eq 'cifs' ) {
|
% if ( $bac_datas->{vfstype} eq "cifs" ) {
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_WORKSTN_LOGIN'
|
%=l "bac_WORKSTN_LOGIN"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'BackupwkLogin' => $bac_datas->{login} unless param 'BackupwkLogin';
|
% param "BackupwkLogin" => $bac_datas->{login} unless param "BackupwkLogin";
|
||||||
%= text_field 'BackupwkLogin', size => 12, class => 'input'
|
%= text_field "BackupwkLogin", size => 12, class => "input"
|
||||||
</span><br><span class=label>
|
</span><br><span class=label>
|
||||||
%=l 'bac_PASSWORD'
|
%=l "bac_PASSWORD"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'BackupwkPassword' => $bac_datas->{password} unless param 'BackupwkPassword';
|
% param "BackupwkPassword" => $bac_datas->{password} unless param "BackupwkPassword";
|
||||||
%= password_field 'BackupwkPassword', size => 12, class => 'input'
|
%= password_field "BackupwkPassword", size => 12, class => "input"
|
||||||
</span>
|
</span>
|
||||||
%}
|
%}
|
||||||
</p><br><h3>
|
</p><br><h3>
|
||||||
%= l 'bac_WORKSTN_BACKUP_SETTINGS'
|
%= l "bac_WORKSTN_BACKUP_SETTINGS"
|
||||||
</h3><br>
|
</h3><br>
|
||||||
|
|
||||||
<p><span class=label>
|
<p><span class=label>
|
||||||
%=l 'bac_NUMBER_OF_SETS'
|
%=l "bac_NUMBER_OF_SETS"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'SetsNumber' => $bac_datas->{setsNumber} unless param 'SetsNumber';
|
% param "SetsNumber" => $bac_datas->{setsNumber} unless param "SetsNumber";
|
||||||
%= text_field 'SetsNumber', size => '3'
|
%= text_field "SetsNumber", size => "3"
|
||||||
</span>
|
</span>
|
||||||
%=l 'bac_NUMBER_OF_FILES_IN_SET'
|
%=l "bac_NUMBER_OF_FILES_IN_SET"
|
||||||
<span class=data>
|
<span class=data>
|
||||||
% param 'Filesinset' => $bac_datas->{filesinset} unless param 'Filesinset';
|
% param "Filesinset" => $bac_datas->{filesinset} unless param "Filesinset";
|
||||||
%= text_field 'Filesinset', size => '3'
|
%= text_field "Filesinset", size => "3"
|
||||||
</span></p>
|
</span></p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_WORKSTN_BACKUP_TIME'
|
%=l "bac_WORKSTN_BACKUP_TIME"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'BackupwkHour' => $bac_datas->{hour} unless param 'BackupwkHour';
|
% param "BackupwkHour" => $bac_datas->{hour} unless param "BackupwkHour";
|
||||||
%= text_field 'BackupwkHour', size => '2'
|
%= text_field "BackupwkHour", size => "2"
|
||||||
% param 'BackupwkMin' => $bac_datas->{min} unless param 'BackupwkMin';
|
% param "BackupwkMin" => $bac_datas->{min} unless param "BackupwkMin";
|
||||||
%= text_field 'BackupwkMin', size => '2'
|
%= text_field "BackupwkMin", size => "2"
|
||||||
</span>
|
</span>
|
||||||
%=l 'AM/PM:'
|
%=l "AM/PM:"
|
||||||
<span class=data>
|
<span class=data>
|
||||||
% param 'BackupwkAMPM' => $bac_datas->{ampm} unless param 'BackupwkAMPM';
|
% param "BackupwkAMPM" => $bac_datas->{ampm} unless param "BackupwkAMPM";
|
||||||
%= select_field 'BackupwkAMPM' => ['AM', 'PM'], class => 'input'
|
%= select_field "BackupwkAMPM" => ["AM", "PM"], class => "input"
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p><span class=label>
|
<p><span class=label>
|
||||||
%=l 'bac_WORKSTN_TIMEOUT'
|
%=l "bac_WORKSTN_TIMEOUT"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'BackupwkTimeout' => $bac_datas->{timeout} unless param 'BackupwkTimeout';
|
% param "BackupwkTimeout" => $bac_datas->{timeout} unless param "BackupwkTimeout";
|
||||||
%= text_field 'BackupwkTimeout', size => '2'
|
%= text_field "BackupwkTimeout", size => "2"
|
||||||
</span>
|
</span>
|
||||||
%=l 'bac_INC_ONLY_TIMEOUT'
|
%=l "bac_INC_ONLY_TIMEOUT"
|
||||||
<span class=data>
|
<span class=data>
|
||||||
% if ( $bac_datas->{incOnlyTimeout} eq 'checked' ) {
|
% if ( $bac_datas->{incOnlyTimeout} eq "checked" ) {
|
||||||
<input type='checkbox' name='IncOnlyTimeout' checked >
|
<input type="checkbox" name="IncOnlyTimeout" checked >
|
||||||
%} else {
|
%} else {
|
||||||
%= check_box 'IncOnlyTimeout'
|
%= check_box "IncOnlyTimeout"
|
||||||
%}
|
%}
|
||||||
</span></p>
|
</span></p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'bac_COMPRESSION_LEVEL'
|
%=l "bac_COMPRESSION_LEVEL"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'Compression' => $bac_datas->{compression} unless param 'Compression';
|
% param "Compression" => $bac_datas->{compression} unless param "Compression";
|
||||||
%= text_field 'Compression', size => '1'
|
%= text_field "Compression", size => "1"
|
||||||
</span>
|
</span>
|
||||||
%=l 'bac_FULL_ONLY_ON'
|
%=l "bac_FULL_ONLY_ON"
|
||||||
<span class=data>
|
<span class=data>
|
||||||
% param 'Dof' => $bac_datas->{dof} unless param 'Dof';
|
% param "Dof" => $bac_datas->{dof} unless param "Dof";
|
||||||
%= select_field 'Dof' => $c->get_dow_list(), class => 'input'
|
%= select_field "Dof" => $c->get_dow_list(), class => "input"
|
||||||
</p><br>
|
</p><br>
|
||||||
|
|
||||||
|
|
||||||
%= hidden_field 'Function' => $bac_datas->{function}
|
%= hidden_field "Function" => $bac_datas->{function}
|
||||||
%= hidden_field 'VFSType' => $bac_datas->{vfstype}
|
%= hidden_field "VFSType" => $bac_datas->{vfstype}
|
||||||
%= submit_button $c->l('bac_UPDATE_CONF'), class => 'action'
|
%= submit_button $c->l("Update"), class => "action"
|
||||||
% end
|
% end
|
||||||
</div>
|
</div>
|
||||||
% end
|
% end
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
% layout 'default', title => "Sme server 2 - restore";
|
% layout "default", title => "Sme server 2 - restore";
|
||||||
|
|
||||||
% content_for 'module' => begin
|
% content_for "module" => begin
|
||||||
|
|
||||||
<div id='module' class='module back_workstn_restore1-panel'>
|
<div id="module" class="module back_workstn_restore1-panel">
|
||||||
% if (config->{debug} == 1) {
|
% if (config->{debug} == 1) {
|
||||||
<p>
|
<p>
|
||||||
%= dumper $c->current_route
|
%= dumper $c->current_route
|
||||||
@@ -10,26 +10,26 @@
|
|||||||
</p>
|
</p>
|
||||||
% }
|
% }
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
% if ( stash "error" ) {
|
||||||
<br><div class=sme-error>
|
<br><div class=sme-error>
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
%= $c->render_to_string(inline => stash "error")
|
||||||
</div>
|
</div>
|
||||||
%}
|
%}
|
||||||
|
|
||||||
<h1><%= $title%></h1>
|
<h1><%= $title%></h1>
|
||||||
|
|
||||||
%= form_for '/backupd' => (method => 'POST') => begin
|
%= form_for "/backupd" => (method => "POST") => begin
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
%=l 'bac_WORKSTN_RESTORE'
|
%=l "bac_WORKSTN_RESTORE"
|
||||||
</h2>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
%= $c->render_to_string(inline => $bac_datas->{restore_log})
|
%= $c->render_to_string(inline => $bac_datas->{restore_log})
|
||||||
</p><p>
|
</p><p>
|
||||||
%=l 'bac_YOU_MUST_REBOOT'
|
%=l "bac_YOU_MUST_REBOOT"
|
||||||
</p>
|
</p>
|
||||||
%= hidden_field 'Function' => $bac_datas->{'function'}
|
%= hidden_field "Function" => $bac_datas->{"function"}
|
||||||
%= submit_button $c->l('bac_REBOOT'), class => 'action'
|
%= submit_button $c->l("Reboot"), class => "action"
|
||||||
% end
|
% end
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
% layout 'default', title => "Sme server 2 - backup - verify";
|
% layout "default", title => "Sme server 2 - backup - verify";
|
||||||
% content_for 'module' => begin
|
% content_for "module" => begin
|
||||||
|
|
||||||
<div id='module' class='module back_workstn_verify-panel'>
|
<div id="module" class="module back_workstn_verify-panel">
|
||||||
% if (config->{debug} == 1) {
|
% if (config->{debug} == 1) {
|
||||||
<p>
|
<p>
|
||||||
%= dumper $c->current_route
|
%= dumper $c->current_route
|
||||||
@@ -9,42 +9,42 @@
|
|||||||
</p>
|
</p>
|
||||||
% }
|
% }
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
% if ( stash "error" ) {
|
||||||
<br><div class=sme-error>
|
<br><div class=sme-error>
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
%= $c->render_to_string(inline => stash "error")
|
||||||
</div>
|
</div>
|
||||||
%}
|
%}
|
||||||
|
|
||||||
<h1><%= $title%></h1>
|
<h1><%= $title%></h1>
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
%=l 'bac_VERIFY_WORKSTN_BACKUP_FILE'
|
%=l "Verify_WORKSTN_BACKUP_FILE"
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
%= form_for '/backup' => (method => 'POST') => begin
|
%= form_for "/backup" => (method => "POST") => begin
|
||||||
|
|
||||||
% if ($bac_datas->{status} ne 'enabled') {
|
% if ($bac_datas->{status} ne "enabled") {
|
||||||
%= $c->render_to_string(inline => (l 'bac_CONFIGURATION_TO_BE_DONE'))
|
%= $c->render_to_string(inline => (l "bac_CONFIGURATION_TO_BE_DONE"))
|
||||||
% } else {
|
% } else {
|
||||||
%= $c->render_to_string(inline => (l 'bac_VERIFY_WORKSTN_BACKUP_DESC') . ' ' . $c->get_shared_folder_to_verify())
|
%= $c->render_to_string(inline => (l "Verify_WORKSTN_BACKUP_DESC") . " " . $c->get_shared_folder_to_verify())
|
||||||
%}
|
%}
|
||||||
<br><br><span class=label>
|
<br><br><span class=label>
|
||||||
%=l 'bac_SELECT_BACKUP_FILE'
|
%=l "bac_SELECT_BACKUP_FILE"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
%= select_field 'Backupset' => $c->get_Backupset_options(), class => 'input'
|
%= select_field "Backupset" => $c->get_Backupset_options(), class => "input"
|
||||||
</span><br>
|
</span><br>
|
||||||
|
|
||||||
<p><span class=label>
|
<p><span class=label>
|
||||||
%=l 'bac_CHECK_TO_VERIFY_FULL_RESTORE'
|
%=l "bac_CHECK_TO_VERIFY_FULL_RESTORE"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
%= check_box 'Verifyall'
|
%= check_box "Verifyall"
|
||||||
</span></p><br>
|
</span></p><br>
|
||||||
|
|
||||||
%=l 'bac_CHECK_INTEGRITY_WARNING'
|
%=l "bac_CHECK_INTEGRITY_WARNING"
|
||||||
|
|
||||||
<br><br>
|
<br><br>
|
||||||
%= hidden_field 'Function' => $bac_datas->{'function'} . '1'
|
%= hidden_field "Function" => $bac_datas->{"function"} . "1"
|
||||||
%= submit_button $c->l('bac_VERIFY'), class => 'action'
|
%= submit_button $c->l("Verify"), class => "action"
|
||||||
|
|
||||||
% end
|
% end
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<%
|
<%
|
||||||
|
|
||||||
my $backups = esmith::BackupHistoryDB->open;
|
my $backups = esmith::BackupHistoryDB->open; # no UTF8
|
||||||
my $now = time();
|
my $now = time();
|
||||||
my $backup_rec = $backups->new_record($now, {
|
my $backup_rec = $backups->new_record($now, {
|
||||||
type => 'backup_record', BackupType => 'desktop',
|
type => 'backup_record', BackupType => 'desktop',
|
||||||
@@ -64,4 +64,4 @@
|
|||||||
$backup_rec->set_prop('Result', "0");
|
$backup_rec->set_prop('Result', "0");
|
||||||
|
|
||||||
%>
|
%>
|
||||||
1;
|
1;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
% layout 'default', title => "Sme server 2 - clamav";
|
% layout "default", title => "Sme server 2 - clamav";
|
||||||
|
|
||||||
% content_for 'module' => begin
|
% content_for "module" => begin
|
||||||
<div id='module' class='module clamav-panel'>
|
<div id="module" class="module clamav-panel">
|
||||||
%if (config->{debug} == 1) {
|
%if (config->{debug} == 1) {
|
||||||
<p>(DBG)route: <%= $c->current_route %><br>
|
<p>(DBG)route: <%= $c->current_route %><br>
|
||||||
(DBG)FsS stat: <%= $clm_datas->{FilesystemScan}%> <br>
|
(DBG)FsS stat: <%= $clm_datas->{FilesystemScan}%> <br>
|
||||||
@@ -11,35 +11,35 @@
|
|||||||
<h1><%= $title %></h1>
|
<h1><%= $title %></h1>
|
||||||
<br>
|
<br>
|
||||||
<%= $modul %>
|
<%= $modul %>
|
||||||
<% my $btn = l('SAVE'); %>
|
<% my $btn = l("SAVE"); %>
|
||||||
|
|
||||||
%= form_for 'clamav' => (method => 'POST') => begin
|
%= form_for "clamav" => (method => "POST") => begin
|
||||||
<p>
|
<p>
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'clm_LABEL_FILESYSTEM_SCAN_PERIOD'
|
%=l "clm_LABEL_FILESYSTEM_SCAN_PERIOD"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'FilesystemScan' => $clm_datas->{FilesystemScan} unless param 'FilesystemScan';
|
% param "FilesystemScan" => $clm_datas->{FilesystemScan} unless param "FilesystemScan";
|
||||||
%= select_field 'FilesystemScan' => [[ (l 'clm_DAILY') => 'daily'], [ (l 'clm_NEVER') => 'disabled'], [ (l 'clm_WEEKLY') => 'weekly']], class => 'input'
|
%= select_field "FilesystemScan" => [[ (l "Daily") => "daily"], [ (l "Never") => "disabled"], [ (l "Weekly") => "weekly"]], class => "input"
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'clm_LABEL_QUARANTINE'
|
%=l "clm_LABEL_QUARANTINE"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
% param 'Quarantine' => $clm_datas->{Quarantine} unless param 'Quarantine';
|
% param "Quarantine" => $clm_datas->{Quarantine} unless param "Quarantine";
|
||||||
%= select_field 'Quarantine' => [[ (l 'ENABLED') => 'enabled'], [ (l 'DISABLED') => 'disabled']], class => 'input'
|
%= select_field "Quarantine" => [[ (l "ENABLED") => "enabled"], [ (l "DISABLED") => "disabled"]], class => "input"
|
||||||
<br>
|
<br>
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span class=label>
|
<span class=label>
|
||||||
%=l 'clm_LABEL_CLAM_VERSIONS'
|
%=l "clm_LABEL_CLAM_VERSIONS"
|
||||||
</span><span class=data>
|
</span><span class=data>
|
||||||
%= $clm_datas->{clam_versions}
|
%= $clm_datas->{clam_versions}
|
||||||
<br>
|
<br>
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
%= submit_button "$btn", class => 'action'
|
%= submit_button "$btn", class => "action"
|
||||||
% end
|
% end
|
||||||
</div>
|
</div>
|
||||||
%end
|
%end
|
||||||
|
|||||||
@@ -1,125 +1,147 @@
|
|||||||
% layout 'default', title => "Sme server 2 - datetime";
|
% layout 'default', title => 'Sme server 2 - datetime';
|
||||||
|
|
||||||
% content_for 'module' => begin
|
% content_for 'module' => begin
|
||||||
<div id='module' class='module datetime-panel'>
|
<div id='module' class='module datetime-panel'>
|
||||||
|
% if (config->{debug} == 1) {
|
||||||
|
<p>
|
||||||
|
%= dumper $c->current_route
|
||||||
|
%= dumper $dat_data
|
||||||
|
</p>
|
||||||
|
% }
|
||||||
|
|
||||||
% if (config->{debug} == 1) {
|
%if ($c->stash('first')) {
|
||||||
<p>
|
<br><p>
|
||||||
%= dumper $c->current_route
|
%=$c->render_to_string(inline =>$c->l($c->stash('first')))
|
||||||
%= dumper $dat_datas
|
</p>
|
||||||
</p>
|
%} elsif ($c->stash('success')) {
|
||||||
% }
|
<div class='success '>
|
||||||
|
%= $c->l($c->stash('success'));
|
||||||
|
</div>
|
||||||
|
%} elsif ($c->stash('error')) {
|
||||||
|
<div class='sme-error'>
|
||||||
|
%= $c->l($c->stash('error'));
|
||||||
|
</div>
|
||||||
|
%}
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
<h1><%= $title %></h1><br>
|
||||||
<br><div class=sme-error>
|
%= $modul
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
<% my $btn = l('SAVE'); %>
|
||||||
|
<br /><br />
|
||||||
|
<span>
|
||||||
|
%= label_for 'real-time-clock' => $c->l('dat_The_time_is_currently'), class => 'datetime-clock-label'
|
||||||
|
</span><span class=data2>
|
||||||
|
<!--
|
||||||
|
<div id="real-time-clock"></div>
|
||||||
|
-->
|
||||||
|
%= text_field 'clock', id => 'real-time-clock', readonly => 'readonly', class => 'datetime-clock' , value => $dat_data->{currentdatetime}
|
||||||
|
</span>
|
||||||
|
% if ($dat_data->{ntpstatus} eq 'disabled') {
|
||||||
|
<div class='datetime-set-ntp'>
|
||||||
|
%=l 'dat_NTP_ENABLE_DESC'
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
% } else {
|
||||||
|
% my $current_year = $dat_data->{year};
|
||||||
|
% my $year_options = [ map { [ $_, $_ ] } ($current_year..($current_year+30)) ];
|
||||||
|
% my $month_options = [ map { [ sprintf('%02d', $_), sprintf('%02d', $_) ] } (1..12) ];
|
||||||
|
% my $hour_options = [ map { [ sprintf('%02d', $_), sprintf('%02d', $_) ] } (0..23) ];
|
||||||
|
% my $mode_options = [
|
||||||
|
% [ $c->l('dat_ntp_server'), 'dat_ntp_server' ],
|
||||||
|
% [ $c->l('dat_manually_set'), 'dat_manually_set' ]
|
||||||
|
% ];
|
||||||
|
<h2><%= $c->l('Time Configuration') %></h2>
|
||||||
|
%= form_for "datetimeu" => (method => 'post') => begin
|
||||||
|
|
||||||
|
%= hidden_field 'Old_ntpstatus' => $dat_data->{ntpstatus};
|
||||||
|
%= hidden_field 'trt' => $dat_data->{trt};
|
||||||
|
|
||||||
|
<span class=label>
|
||||||
|
%= label_for time_mode => $c->l('Time Setting Mode:')
|
||||||
|
</span><span class=data2>
|
||||||
|
% param 'time_mode' => $dat_data->{time_mode} unless param 'time_mode';
|
||||||
|
%= select_field time_mode => ($mode_options, id => 'time_mode_select')
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div id='ntp_section'>
|
||||||
|
<p>
|
||||||
|
%= $c->l('dat_NTP_CONFIGURE_DESC')
|
||||||
|
</p>
|
||||||
|
<div class='datetime-config-row'>
|
||||||
|
<div class='datetime-label-col'>
|
||||||
|
<span class='datetime-label'>
|
||||||
|
%= label_for ntpserver => $c->l('dat_NTP_Server_URL')
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class=datetime-fields-col>
|
||||||
|
% my $server_check = '^([a-zA-Z0-9][a-zA-Z0-9\.\-]{0,253}[a-zA-Z0-9]|(\d{1,3}\.){3}\d{1,3})$';
|
||||||
|
% param 'ntpserver' => $dat_data->{ntpserver} unless param 'ntpserver';
|
||||||
|
%= text_field ntpserver => placeholder => 'e.g. smeserver.pool.ntp.org', id => 'ntpserver', pattern => $server_check, title => 'Enter a valid hostname or IPv4 address', required => 'required'
|
||||||
|
<button type="button" id="test-ntp-btn" class="btn btn-primary ml-2">Test Server</button>
|
||||||
|
<span id="ntp-test-result" class="ntp-test-result ml-2"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id='manual_section'>
|
||||||
|
<p>
|
||||||
|
%= $c->l('dat_NTP_DISABLE_DESC')
|
||||||
|
</p>
|
||||||
|
<div class='datetime-config-row'>
|
||||||
|
<div class='datetime-label-col'>
|
||||||
|
<span class='datetime-label'>
|
||||||
|
%= label_for 'datetime_manual' => $c->l('dat_set_manually')
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class='datetime-fields-col' id='datetime_manual'>
|
||||||
|
<fieldset>
|
||||||
|
<legend><%= $c->l('Date') %></legend>
|
||||||
|
%= label_for year => $c->l('Year:')
|
||||||
|
% param 'year' => ($dat_data->{year}) unless param 'year';
|
||||||
|
%= select_field year => ($year_options, id => 'year'), required => 'required'
|
||||||
|
|
||||||
|
|
||||||
|
%= label_for month => $c->l('Month:')
|
||||||
|
% param 'month' => ($dat_data->{month}) unless param 'month';
|
||||||
|
%= select_field month => ($month_options, id => 'month'), required => 'required'
|
||||||
|
|
||||||
|
|
||||||
|
%= label_for day => $c->l('Day:')
|
||||||
|
% param 'day' => ($dat_data->{day}) unless param 'day';
|
||||||
|
%= text_field day => id => 'day', size => 2, maxlength => 2, placeholder => 'DD', pattern => '^(0[1-9]|[12][0-9]|3[01])$', title => 'Day (01-31)', required => 'required', inputmode => 'numeric', autocomplete => 'off'
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend><%= $c->l('Time') %></legend>
|
||||||
|
%= label_for hour => $c->l('Hour:')
|
||||||
|
% param 'hour' => ($dat_data->{hour}) unless param 'hour';
|
||||||
|
%= select_field hour => ($hour_options, id => 'hour'), required => 'required'
|
||||||
|
|
||||||
|
|
||||||
|
%= label_for minute => $c->l('Minute:')
|
||||||
|
% param 'minute' => ($dat_data->{minute}) unless param 'minute';
|
||||||
|
%= text_field minute => id => 'minute', size => 2, maxlength => 2, placeholder => 'MM', pattern => '^[0-5][0-9]$', title => 'Minute (00-59)', required => 'required', inputmode => 'numeric', autocomplete => 'off'
|
||||||
|
|
||||||
|
|
||||||
|
%= label_for second => $c->l('Second:')
|
||||||
|
% param 'second' => ($dat_data->{second}) unless param 'second';
|
||||||
|
%= text_field second => id => 'second', size => 2, maxlength => 2, placeholder => 'SS', pattern => '^[0-5][0-9]$', title => 'Second (00-59)', required => 'required', inputmode => 'numeric', autocomplete => 'off'
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class='datetime-config-row'>
|
||||||
|
<div class='datetime-label-col'>
|
||||||
|
<span class='datetime-label'>
|
||||||
|
%=l 'dat_TZ'
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class='datetime-fields-col' id='datetime_manual'>
|
||||||
|
% param 'Timezone' => $c->getTimezone() unless param 'Timezone';
|
||||||
|
%= select_field 'Timezone' => $c->getZone_list(), class => 'input'
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
%= submit_button $btn, class => 'action'
|
||||||
|
% end
|
||||||
|
% }
|
||||||
</div>
|
</div>
|
||||||
%}
|
% end
|
||||||
|
1;
|
||||||
<h1><%= $title %></h1><br>
|
|
||||||
%= $modul
|
|
||||||
<% my $btn = l('SAVE'); %>
|
|
||||||
|
|
||||||
%= form_for '/datetime' => (method => 'POST') => begin
|
|
||||||
<p>
|
|
||||||
%= hidden_field 'Old_ntpstatus' => $dat_datas->{ntpstatus};
|
|
||||||
|
|
||||||
% param 'Ntpstatus' => $dat_datas->{ntpstatus} unless param 'Ntpstatus';
|
|
||||||
%= radio_button Ntpstatus => 'enabled'
|
|
||||||
<span class=label>
|
|
||||||
%=l 'dat_NTP_CONFIGURE_TITLE'
|
|
||||||
</span>
|
|
||||||
<br>
|
|
||||||
% if ($dat_datas->{ntpstatus} eq 'disabled') {
|
|
||||||
<div class='datetime-set-ntp'>
|
|
||||||
%=l 'dat_NTP_ENABLE_DESC'
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
% } else {
|
|
||||||
<div class='datetime-set-ntp'>
|
|
||||||
%=l 'dat_NTP_CONFIGURE_DESC'
|
|
||||||
<br><br>
|
|
||||||
<p>
|
|
||||||
%=l 'dat_CURRENT_SETTING'
|
|
||||||
<b>
|
|
||||||
%= $dat_datas->{now_string}
|
|
||||||
</b>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<br>
|
|
||||||
<span class=label>
|
|
||||||
%=l 'dat_NTP_SERVER'
|
|
||||||
</span><span class=data2>
|
|
||||||
%= text_field 'Ntpserver' => $dat_datas->{ntpserver}, class => 'input'
|
|
||||||
</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
% }
|
|
||||||
%= radio_button Ntpstatus => 'disabled'
|
|
||||||
<span class=label datetime-set-ntp>
|
|
||||||
%=l 'dat_NTP_DISABLE_TITLE'
|
|
||||||
</span>
|
|
||||||
|
|
||||||
% if ($dat_datas->{ntpstatus} eq 'enabled') {
|
|
||||||
|
|
||||||
<br><BR>
|
|
||||||
<div class='datetime-set-ntp'>
|
|
||||||
%=l 'dat_NTP_DISABLE_DESC'
|
|
||||||
</div>
|
|
||||||
% } else {
|
|
||||||
<div class='datetime-set-ntp'>
|
|
||||||
<br>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
%=l 'dat_CURRENT_SETTING'
|
|
||||||
<b>
|
|
||||||
%= $dat_datas->{now_string}
|
|
||||||
</b>
|
|
||||||
<br>
|
|
||||||
<span class=label>
|
|
||||||
%=l 'dat_NEW_M/D/Y'
|
|
||||||
</span><span class=data2>
|
|
||||||
% param 'Month' => $dat_datas->{month} unless param 'Month';
|
|
||||||
%= select_field 'Month' => $c->getMonth_list(), class => 'input'
|
|
||||||
</span><span class=data2>
|
|
||||||
% param 'Day' => $dat_datas->{day} unless param 'Day';
|
|
||||||
%= text_field 'Day', size => '2', class => 'input'
|
|
||||||
</span><span class=data2>
|
|
||||||
% param 'Year' => $dat_datas->{year} unless param 'Year';
|
|
||||||
%= text_field 'Year', size => '4', class => 'input'
|
|
||||||
</span>
|
|
||||||
<br>
|
|
||||||
<span class=label>
|
|
||||||
%=l 'dat_NEW_H/M/S'
|
|
||||||
</span><span class=data2>
|
|
||||||
% param 'Hour' => $dat_datas->{hour} unless param 'Hour';
|
|
||||||
%= text_field 'Hour', size => '2', class => 'input'
|
|
||||||
</span><span class=data2>
|
|
||||||
% param 'Minute' => $dat_datas->{minute} unless param 'Minute';
|
|
||||||
%= text_field 'Minute', size => '2', class => 'input'
|
|
||||||
</span><span class=data2>
|
|
||||||
% param 'Second' => $dat_datas->{second} unless param 'Second';
|
|
||||||
%= text_field 'Second', size => '2', class => 'input'
|
|
||||||
</span>
|
|
||||||
<br>
|
|
||||||
<span class=label>
|
|
||||||
%=l 'dat_AM/PM_AND_TZ'
|
|
||||||
</span><span class=data2>
|
|
||||||
% param 'Ampm' => $dat_datas->{ampm} unless param 'Ampm';
|
|
||||||
%= select_field 'Ampm' => ['AM', 'PM'], class => 'input'
|
|
||||||
</span><span class=data2>
|
|
||||||
% param 'Timezone' => $c->getTimezone() unless param 'Timezone';
|
|
||||||
%= select_field 'Timezone' => $c->getZone_list(), class => 'input'
|
|
||||||
</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
% }
|
|
||||||
<p>
|
|
||||||
<br>
|
|
||||||
%= submit_button "$btn", class => 'action'
|
|
||||||
</p>
|
|
||||||
|
|
||||||
% end
|
|
||||||
|
|
||||||
</div>
|
|
||||||
%end
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
% layout 'default', title => "Sme server 2 - emailaccess";
|
|
||||||
|
|
||||||
% content_for 'module' => begin
|
|
||||||
<div id='module' class='module emailaccess-panel'>
|
|
||||||
|
|
||||||
% if (config->{debug} == 1) {
|
|
||||||
<p>
|
|
||||||
%= dumper $c->current_route
|
|
||||||
%= dumper $mai_datas
|
|
||||||
</p>
|
|
||||||
% }
|
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
|
||||||
<br><div class=sme-error>
|
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
|
||||||
</div>
|
|
||||||
%}
|
|
||||||
|
|
||||||
<h1><%= $title%></h1>
|
|
||||||
|
|
||||||
%= form_for '/emailsettingd' => (method => 'POST') => begin
|
|
||||||
|
|
||||||
%=l 'mai_DESC_POP_ACCESS_CONTROL'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_POP_ACCESS_CONTROL'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'POPAccess' => $c->get_current_pop3_access() unless param 'POPAccess';
|
|
||||||
%= select_field 'POPAccess' => $c->get_pop_opt(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_IMAP_ACCESS_CONTROL'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_IMAP_ACCESS_CONTROL'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'IMAPAccess' => $c->get_current_imap_access() unless param 'IMAPAccess';
|
|
||||||
%= select_field 'IMAPAccess' => $c->get_imap_opt(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_WEBMAIL'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_WEBMAIL'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'WebMail' => $c->get_current_webmail_status() unless param 'WebMail';
|
|
||||||
%= select_field 'WebMail' => $c->get_webmail_opt(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% my $btn = l('SAVE');
|
|
||||||
%= submit_button "$btn", class => 'action'
|
|
||||||
|
|
||||||
%= hidden_field 'trt' => 'ACC'
|
|
||||||
% end
|
|
||||||
|
|
||||||
</div>
|
|
||||||
%end
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
% layout 'default', title => "Sme server 2 - emaildeliver";
|
|
||||||
|
|
||||||
% content_for 'module' => begin
|
|
||||||
<div id='module' class='module emaildeliver-panel'>
|
|
||||||
|
|
||||||
% if (config->{debug} == 1) {
|
|
||||||
<p>
|
|
||||||
%= dumper $c->current_route
|
|
||||||
%= dumper $mai_datas
|
|
||||||
</p>
|
|
||||||
% }
|
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
|
||||||
<br><div class=sme-error>
|
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
|
||||||
</div>
|
|
||||||
%}
|
|
||||||
|
|
||||||
<h1><%= $title%></h1>
|
|
||||||
|
|
||||||
%= form_for '/emailsettingd' => (method => 'POST') => begin
|
|
||||||
|
|
||||||
<h2>
|
|
||||||
%=l 'mai_TITLE_UNKNOWN'
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_UNKNOWN'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_UNKNOWN'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'EmailUnknownUser' => $mai_datas->{emailunknownuser} unless param 'EmailUnknownUser';
|
|
||||||
%= select_field 'EmailUnknownUser' => $c->get_emailunknownuser_opt(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<hr class='menubar' />
|
|
||||||
<h2>
|
|
||||||
%=l 'mai_TITLE_DELEGATE'
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_DELEGATE'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_DELEGATE'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'DelegateMailServer' => $mai_datas->{delegatemailserver} unless param 'DelegateMailServer';
|
|
||||||
%= text_field 'DelegateMailServer', class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<hr class='sectionbar' />
|
|
||||||
<h2>
|
|
||||||
%=l 'mai_TITLE_SMARTHOST'
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_SMARTHOST'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SMARTHOST'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SMTPSmartHost' => $mai_datas->{smtpsmarthost} unless param 'SMTPSmartHost';
|
|
||||||
%= text_field 'SMTPSmartHost', class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SMARTHOST_SMTPAUTH_STATUS'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SMTPAUTHPROXY_status' => $mai_datas->{smtpauthproxystatus} unless param 'SMTPAUTHPROXY_status';
|
|
||||||
%= select_field 'SMTPAUTHPROXY_status' => [[(l 'DISABLED') => 'disabled'], [(l 'ENABLED') => 'enabled']], class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SMARTHOST_SMTPAUTH_USERID'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SMTPAUTHPROXY_Userid' => $mai_datas->{smtpauthproxyuserid} unless param 'SMTPAUTHPROXY_Userid';
|
|
||||||
%= text_field 'SMTPAUTHPROXY_Userid', class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SMARTHOST_SMTPAUTH_PASSWD'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SMTPAUTHPROXY_Passwd' => $mai_datas->{smtpauthproxypassword} unless param 'SMTPAUTHPROXY_Passwd';
|
|
||||||
%= password_field 'SMTPAUTHPROXY_Passwd', class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% my $btn = l('SAVE');
|
|
||||||
%= submit_button "$btn", class => 'action'
|
|
||||||
|
|
||||||
%= hidden_field 'trt' => 'DEL'
|
|
||||||
% end
|
|
||||||
|
|
||||||
</div>
|
|
||||||
%end
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
% layout 'default', title => "Sme server 2 - emailfilter";
|
|
||||||
|
|
||||||
% content_for 'module' => begin
|
|
||||||
<div id='module' class='module emailfilter-panel'>
|
|
||||||
|
|
||||||
% if (config->{debug} == 1) {
|
|
||||||
<p>
|
|
||||||
%= dumper $c->current_route
|
|
||||||
%= dumper $mai_datas
|
|
||||||
</p>
|
|
||||||
% }
|
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
|
||||||
<br><div class=sme-error>
|
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
|
||||||
</div>
|
|
||||||
%}
|
|
||||||
|
|
||||||
<h1><%= $title%></h1>
|
|
||||||
|
|
||||||
%= form_for '/emailsettingd' => (method => 'POST') => begin
|
|
||||||
|
|
||||||
%=l 'mai_DESC_VIRUS_SCAN'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_VIRUS_SCAN'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'VirusStatus' => $mai_datas->{virusstatus} unless param 'VirusStatus';
|
|
||||||
%= select_field 'VirusStatus' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
|
||||||
</span><br></p>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_SPAM_SCAN'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SPAM_SCAN'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'Spamstatus' => $mai_datas->{spamstatus} unless param 'Spamstatus';
|
|
||||||
%= select_field 'Spamstatus' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SPAM_SENSITIVITY'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SpamSensitivity' => $mai_datas->{spamsensitivity} unless param 'SpamSensitivity';
|
|
||||||
%= select_field 'SpamSensitivity' => $c->get_spam_sensitivity_opt(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SPAM_TAGLEVEL'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SpamTagLevel' => $mai_datas->{spamtaglevel} unless param 'SpamTagLevel';
|
|
||||||
%= select_field 'SpamTagLevel' => $c->get_spam_level_options(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SPAM_REJECTLEVEL'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SpamRejectLevel' => $mai_datas->{spamrejectlevel} unless param 'SpamRejectLevel';
|
|
||||||
%= select_field 'SpamRejectLevel' => $c->get_spam_level_options(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SORTSPAM'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SpamSortSpam' => $mai_datas->{spamsortspam} unless param 'SpamSortSpam';
|
|
||||||
%= select_field 'SpamSortSpam' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_SPAM_SUBJECT'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SPAM_SUBJECTTAG'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SpamSubjectTag' => $mai_datas->{spamsubjecttag} unless param 'SpamSubjectTag';
|
|
||||||
%= select_field 'SpamSubjectTag' => [[(l 'DISABLED') => 'disabled'], [ (l 'ENABLED') => 'enabled']], class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SPAM_SUBJECT'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SpamSubject' => $mai_datas->{spamsubject} unless param 'SpamSubject';
|
|
||||||
%= text_field 'SpamSubject' => class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_BLOCK_EXECUTABLE_CONTENT'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_CONTENT_TO_BLOCK'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'BlockExecutableContent' => $c->get_patterns_current_opt() unless param 'BlockExecutableContent';
|
|
||||||
%= select_field 'BlockExecutableContent' => $c->get_patterns_opt(), class => 'input', multiple => "1"
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% my $btn = l('SAVE');
|
|
||||||
%= submit_button "$btn", class => 'action'
|
|
||||||
|
|
||||||
%= hidden_field 'trt' => 'FIL'
|
|
||||||
% end
|
|
||||||
|
|
||||||
</div>
|
|
||||||
%end
|
|
||||||
@@ -1,167 +0,0 @@
|
|||||||
% layout 'default', title => "Sme server 2 - emailreceive";
|
|
||||||
|
|
||||||
% content_for 'module' => begin
|
|
||||||
|
|
||||||
% use constant FALSE => 0;
|
|
||||||
% use constant TRUE => 1;
|
|
||||||
|
|
||||||
<div id='module' class='module emailreceive-panel'>
|
|
||||||
|
|
||||||
% if (config->{debug} == 1) {
|
|
||||||
<p>
|
|
||||||
%= dumper $c->current_route
|
|
||||||
%= dumper $mai_datas
|
|
||||||
%= dumper $c->param('SMTPAuth')
|
|
||||||
</p>
|
|
||||||
% }
|
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
|
||||||
<br><div class=sme-error>
|
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
|
||||||
</div>
|
|
||||||
%}
|
|
||||||
|
|
||||||
<h1><%= $title%></h1>
|
|
||||||
|
|
||||||
%= form_for '/emailsettingd' => (method => 'POST') => begin
|
|
||||||
|
|
||||||
%=l 'mai_DESC_MODE'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_MODE'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'FetchmailMethod' => $mai_datas->{fetchmailmethod} unless param 'FetchmailMethod';
|
|
||||||
<!--
|
|
||||||
<pre>
|
|
||||||
%= dumper $mai_datas->{fetchmailmethod}
|
|
||||||
%= dumper $c->get_retrieval_opt()
|
|
||||||
%= param 'FetchmailMethod'
|
|
||||||
</pre>
|
|
||||||
-->
|
|
||||||
%= select_field 'FetchmailMethod' => $c->get_retrieval_opt(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
%#=l 'mai_DESC_SMTP_AUTH_CONTROL'
|
|
||||||
<br />
|
|
||||||
%= l "SMTP port (25) main purpose is to receive emails from another server, STARTTLS is always offered, but auth if offered is only if STARTTLS is also used by client."
|
|
||||||
<br />
|
|
||||||
%= l "SMTPS port (465) will require implicit SSL/TLS then authenticate to send."
|
|
||||||
<br />
|
|
||||||
%= l "SMTP Submission port (587) will require STARTTLS, then authenticate to send."
|
|
||||||
<br />
|
|
||||||
|
|
||||||
% my $smtp_mesg=l('SMTP port %u allow client to authenticate:');
|
|
||||||
<p><span class=label>
|
|
||||||
%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SMTPAuth' => $c->get_current_smtp_auth( FALSE ) unless param 'SMTPAuth';
|
|
||||||
<!--
|
|
||||||
<pre>
|
|
||||||
%= dumper $c->get_smtp_auth_opt()
|
|
||||||
%= dumper $c->get_current_smtp_auth(FALSE)
|
|
||||||
%= dumper $c->get_db_prop("qpsmtpd","Authentication")
|
|
||||||
%= param 'SMTPAuth'
|
|
||||||
</pre>
|
|
||||||
-->
|
|
||||||
%= select_field 'SMTPAuth' => $c->get_smtp_auth_opt(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% my $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:');
|
|
||||||
<p><span class=label>
|
|
||||||
%= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465));
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'sSMTPAuth' => $c->get_current_smtp_ssl_auth(FALSE,'s', TRUE) unless param 'sSMTPAuth';
|
|
||||||
|
|
||||||
%= select_field 'sSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
%my $smtp_mesg=l('Submission port %u status:');
|
|
||||||
<p><span class=label>
|
|
||||||
%= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587));
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'uSMTPAuth' => $c->get_current_smtp_ssl_auth(FALSE,'u', TRUE) unless param 'uSMTPAuth';
|
|
||||||
<!--
|
|
||||||
<pre>
|
|
||||||
%= dumper $c->get_smtp_ssl_auth_opt()
|
|
||||||
%= dumper $c->get_current_smtp_ssl_auth(FALSE,'s', TRUE)
|
|
||||||
%= dumper $c->get_current_smtp_ssl_auth(FALSE,'u', TRUE)
|
|
||||||
%= dumper $c->get_db_prop("uqpsmtpd","access")
|
|
||||||
%= param 'uSMTPAuth'
|
|
||||||
</pre>
|
|
||||||
-->
|
|
||||||
%= select_field 'uSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<hr class="sectionbar" />
|
|
||||||
<h2>
|
|
||||||
%=l 'mai_TITLE_SECONDARY'
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_SECONDARY'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SECONDARY'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SecondaryMailServer' => $mai_datas->{secondarymailserver} unless param 'SecondaryMailServer';
|
|
||||||
%= text_field 'SecondaryMailServer', class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
%=l 'mai_DESC_FETCH_PERIOD'
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_FETCH_PERIOD'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'FreqOffice' => $mai_datas->{freqoffice} unless param 'FreqOffice';
|
|
||||||
%= select_field 'FreqOffice' => $c->fetchmail_freq(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_FETCH_PERIOD_NIGHTS'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'FreqOutside' => $mai_datas->{freqoutside} unless param 'FreqOutside';
|
|
||||||
%= select_field 'FreqOutside' => $c->fetchmail_freq(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_FETCH_PERIOD_WEEKENDS'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'FreqWeekend' => $mai_datas->{freqweekend} unless param 'FreqWeekend';
|
|
||||||
%= select_field 'FreqWeekend' => $c->fetchmail_freq(), class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_POP_ACCOUNT'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SecondaryMailAccount' => $mai_datas->{secondarymailaccount} unless param 'SecondaryMailAccount';
|
|
||||||
%= text_field 'SecondaryMailAccount', class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_POP_PASS'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SecondaryMailPassword' => $mai_datas->{secondarymailpassword} unless param 'SecondaryMailPassword';
|
|
||||||
%= password_field 'SecondaryMailPassword', class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SORT_METHOD'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SpecifyHeader' => $mai_datas->{specifyheader} unless param 'SpecifyHeader';
|
|
||||||
%= select_field 'SpecifyHeader' => [[(l 'mai_DEFAULT') => 'off'], [(l 'mai_SPECIFY_BELOW') => 'on']], class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SORT_HEADER'
|
|
||||||
</span><span class=input>
|
|
||||||
% param 'SecondaryMailEnvelope' => $mai_datas->{secondarymailenvelope} unless param 'SecondaryMailEnvelope';
|
|
||||||
%= text_field 'SecondaryMailEnvelope', class => 'input'
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% my $btn = l('SAVE');
|
|
||||||
%= submit_button "$btn", class => 'action'
|
|
||||||
|
|
||||||
%= hidden_field 'trt' => 'REC'
|
|
||||||
% end
|
|
||||||
|
|
||||||
</div>
|
|
||||||
%end
|
|
||||||
@@ -1,152 +1,70 @@
|
|||||||
% layout 'default', title => "Sme server 2 - emailsettings";
|
%#
|
||||||
|
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-06-29 08:53:20
|
||||||
|
%#
|
||||||
|
% layout 'default', title => "Sme server 2 - E-Mail", share_dir => './';
|
||||||
|
%# css specific to this panel:
|
||||||
% content_for 'module' => begin
|
% content_for 'module' => begin
|
||||||
|
|
||||||
% use constant FALSE => 0;
|
% use constant FALSE => 0;
|
||||||
% use constant TRUE => 1;
|
% use constant TRUE => 1;
|
||||||
|
|
||||||
<div id='module' class='module emailsettings-panel'>
|
<div id="module" class="module Emailsettings-panel">
|
||||||
|
|
||||||
% if (config->{debug} == TRUE) {
|
% if (config->{debug} == 1) {
|
||||||
<p>
|
<pre>
|
||||||
%= dumper $c->current_route
|
%= dumper $c->current_route
|
||||||
%= dumper $mai_datas
|
%= dumper $mai_data->{trt}
|
||||||
</p>
|
</pre>
|
||||||
|
% }
|
||||||
|
|
||||||
|
<h1><%=$title%></h1>
|
||||||
|
|
||||||
|
% if ( stash('modul')) {
|
||||||
|
%= $c->render_to_string(inline => stash('modul') );
|
||||||
% }
|
% }
|
||||||
|
|
||||||
% if ( stash 'error' ) {
|
%if ($c->stash('first')) {
|
||||||
<br><div class=sme-error>
|
<br><p>
|
||||||
%= $c->render_to_string(inline => stash 'error')
|
%=$c->render_to_string(inline =>$c->l($c->stash('first')))
|
||||||
</div>
|
</p>
|
||||||
%}
|
|
||||||
|
|
||||||
<h1><%= $title%></h1>
|
%} elsif ($c->stash('success')) {
|
||||||
|
<div class='success '>
|
||||||
|
%= $c->l($c->stash('success'));
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
|
||||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
%} elsif ($c->stash('error')) {
|
||||||
<p><span class=label>
|
<div class='sme-error'>
|
||||||
%=l 'mai_LABEL_POP_ACCESS_CONTROL'
|
%= $c->l($c->stash('error'));
|
||||||
</span><span class=data2>
|
</div>
|
||||||
%= $c->get_current_pop3_access( TRUE )
|
<br />
|
||||||
</span></p>
|
%}
|
||||||
|
|
||||||
<p><span class=label>
|
%#Routing to partials according to trt parameter.
|
||||||
%=l 'mai_LABEL_IMAP_ACCESS_CONTROL'
|
%#This ought to be cascading if/then/elsif, but is easier to just stack the if/then's rather like a case statement'
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_current_imap_access( TRUE )
|
% if ($mai_data->{trt} eq "FRONT") {
|
||||||
</span></p>
|
%= include 'partials/_mai_FRONT'
|
||||||
|
%}
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_WEBMAIL'
|
% if ($mai_data->{trt} eq "ACC") {
|
||||||
</span><span class=data2>
|
%= include 'partials/_mai_ACC'
|
||||||
%= $c->get_current_webmail_status( TRUE )
|
%}
|
||||||
</span></p>
|
|
||||||
|
% if ($mai_data->{trt} eq "FIL") {
|
||||||
% my $btn = l('mai_DESC_STATE_ACCESS_BUTTON');
|
%= include 'partials/_mai_FIL'
|
||||||
<div class='center'>
|
%}
|
||||||
%= submit_button "$btn", class => 'action'
|
|
||||||
</div>
|
% if ($mai_data->{trt} eq "REC") {
|
||||||
|
%= include 'partials/_mai_REC'
|
||||||
%= hidden_field 'trt' => 'ACC'
|
%}
|
||||||
% end
|
|
||||||
|
% if ($mai_data->{trt} eq "DEL") {
|
||||||
<hr class="sectionbar" />
|
%= include 'partials/_mai_DEL'
|
||||||
|
%}
|
||||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_VIRUS_SCAN'
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_virus_status(TRUE)
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SPAM_SCAN'
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_spam_status(TRUE)
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_BLOCK_EXECUTABLE_CONTENT'
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_patterns_status(TRUE)
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% my $btn = l('mai_DESC_STATE_FILTERING_BUTTON');
|
|
||||||
<div class='center'>
|
|
||||||
%= submit_button "$btn", class => 'action'
|
|
||||||
</div>
|
|
||||||
|
|
||||||
%= hidden_field 'trt' => 'FIL'
|
|
||||||
% end
|
|
||||||
|
|
||||||
<hr class="sectionbar" />
|
|
||||||
|
|
||||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_MODE'
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $mai_datas->{fetchmailmethod}
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% my $smtp_mesg;
|
|
||||||
|
|
||||||
% $smtp_mesg=l('SMTP port %u allow client to authenticate:');
|
|
||||||
<p><span class=label>
|
|
||||||
%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_current_smtp_auth( TRUE )
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:');
|
|
||||||
<p><span class=label>
|
|
||||||
%= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465));
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_current_smtp_ssl_auth( TRUE, 's', FALSE )
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% $smtp_mesg=l 'Submission port %u status:';
|
|
||||||
<p><span class=label>
|
|
||||||
%= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587));
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_current_smtp_ssl_auth( TRUE,'u', FALSE )
|
|
||||||
</span></p>
|
|
||||||
<br />
|
|
||||||
|
|
||||||
% my $btn = l('mai_DESC_STATE_RECEPTION_BUTTON');
|
|
||||||
<div class='center'>
|
|
||||||
%= submit_button "$btn", class => 'action'
|
|
||||||
</div>
|
|
||||||
|
|
||||||
%= hidden_field 'trt' => 'REC'
|
|
||||||
% end
|
|
||||||
|
|
||||||
<hr class="sectionbar" />
|
|
||||||
|
|
||||||
%= form_for 'emailsettings' => (method => 'POST') => begin
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_UNKNOWN'
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_emailunknownuser_status( TRUE )
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_DELEGATE'
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_value('DelegateMailServer')
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
<p><span class=label>
|
|
||||||
%=l 'mai_LABEL_SMARTHOST'
|
|
||||||
</span><span class=data2>
|
|
||||||
%= $c->get_value('SMTPSmartHost')
|
|
||||||
</span></p>
|
|
||||||
|
|
||||||
% my $btn = l('mai_DESC_STATE_DELIVERY_BUTTON');
|
|
||||||
<div class='center'>
|
|
||||||
%= submit_button "$btn", class => 'action'
|
|
||||||
</div>
|
|
||||||
|
|
||||||
%= hidden_field 'trt' => 'DEL'
|
|
||||||
% end
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
%end
|
%end
|
||||||
@@ -2,29 +2,24 @@
|
|||||||
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||||
"http://www.w3.org/TR/html4/loose.dtd">
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
<!-- default +jquery -->
|
|
||||||
<head>
|
<head>
|
||||||
<title><%= $title %></title>
|
<title><%= $title %></title>
|
||||||
<link rel="made" href="mailto:bugs%40koozali.org">
|
<link rel="made" href="mailto:bugs%40koozali.org">
|
||||||
<meta name="copyright" content="(head.tmpl)Copyright 2003-2004 Mitel Corporation">
|
<meta name="copyright" content="(head.tmpl)Copyright 2003-2004 Mitel Corporation">
|
||||||
%= stylesheet '/css/sme_core.css'
|
|
||||||
%= stylesheet '/css/sme_main.css'
|
%= stylesheet '/css/new_sme.css'
|
||||||
%= stylesheet '/css/sme_menu.css'
|
%= stylesheet '/css/new-sme-main.css'
|
||||||
%= stylesheet '/css/styles.css'
|
|
||||||
%= stylesheet '/css/sme-password.css'
|
|
||||||
%= content_for 'head_contrib'
|
%= content_for 'head_contrib'
|
||||||
% if (config 'hasJquery') {
|
% if (config 'hasJquery') {
|
||||||
%= include 'partials/_js_imports'
|
%= include 'partials/_js_imports'
|
||||||
%= include 'common_js'
|
%= include 'common_js'
|
||||||
% }
|
% }
|
||||||
%= content_for 'refresh'
|
|
||||||
|
%= content_for 'refresh'
|
||||||
%= stylesheet '/js/datatables.min.css'
|
%= stylesheet '/js/datatables.min.css'
|
||||||
|
|
||||||
%= javascript '/js/datatables.min.js'
|
%= javascript '/js/datatables.min.js'
|
||||||
|
|
||||||
%= stylesheet '/js/jquery-ui.min.css'
|
%= stylesheet '/js/jquery-ui.min.css'
|
||||||
|
|
||||||
%= javascript '/js/jquery-ui.min.js'
|
%= javascript '/js/jquery-ui.min.js'
|
||||||
%= javascript '/js/dataTables.buttons.min.js'
|
%= javascript '/js/dataTables.buttons.min.js'
|
||||||
%= javascript '/js/jszip.min.js'
|
%= javascript '/js/jszip.min.js'
|
||||||
@@ -37,26 +32,23 @@
|
|||||||
|
|
||||||
<link rel="stylesheet" href="/smanager/css/flag-icon.min.css">
|
<link rel="stylesheet" href="/smanager/css/flag-icon.min.css">
|
||||||
%= stylesheet '/css/sme-jquery-overrides.css'
|
%= stylesheet '/css/sme-jquery-overrides.css'
|
||||||
|
|
||||||
<style>
|
|
||||||
#busy-indicator {
|
|
||||||
display: none;
|
|
||||||
margin-top: 10px;
|
|
||||||
font-weight: bold;
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
.busy {
|
|
||||||
cursor: wait; /* Change the cursor to a 'wait' cursor */
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
|
%# panel specific css file
|
||||||
|
% my $controller = stash('controller');
|
||||||
|
% if ($controller) {
|
||||||
|
% my $css_path = "css/$controller.css";
|
||||||
|
%# Use the url_for helper to generate the correct static file URL
|
||||||
|
% if (app->static->file($css_path)) {
|
||||||
|
<link rel="stylesheet" href="<%= url_for("/$css_path") %>">
|
||||||
|
% }
|
||||||
|
% }
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
% if ( not defined $c->session->{lang} ) {
|
% if ( not defined $c->session->{lang} ) {
|
||||||
% SrvMngr::init_session ( $c );
|
% SrvMngr::init_session ( $c );
|
||||||
% }
|
% }
|
||||||
|
|
||||||
<div id="header">
|
<div id="header">
|
||||||
%= include 'partials/_header'
|
%= include 'partials/_header'
|
||||||
% if ($c->is_logged_in && scalar @{SrvMngr::theme_list( $c )} > 1) {
|
% if ($c->is_logged_in && scalar @{SrvMngr::theme_list( $c )} > 1) {
|
||||||
@@ -65,42 +57,40 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="container">
|
<div id="container">
|
||||||
|
% if (config 'hasJquery') {
|
||||||
|
%= content 'js_toggleMenu'
|
||||||
|
% }
|
||||||
|
|
||||||
% if (config 'hasJquery') {
|
<div id="navigation" class="col-md-3 module">
|
||||||
%= content 'js_toggleMenu'
|
%= include 'partials/_nav_menu'
|
||||||
% }
|
% if ( $c->is_logged_in ) {
|
||||||
|
%= include 'partials/_user_menu'
|
||||||
<div id="navigation" class="col-md-3 module">
|
% }
|
||||||
%= include 'partials/_nav_menu'
|
% if ( $c->is_admin ) {
|
||||||
% if ( $c->is_logged_in ) {
|
%= include 'partials/_navig2'
|
||||||
%= include 'partials/_user_menu'
|
% }
|
||||||
% }
|
|
||||||
% if ( $c->is_admin ) {
|
|
||||||
%= include 'partials/_navig2'
|
|
||||||
% }
|
|
||||||
</div>
|
|
||||||
<div id="main" class="col-md-9">
|
|
||||||
|
|
||||||
%= include 'partials/_info'
|
|
||||||
|
|
||||||
% if (flash 'success') {
|
|
||||||
<br><div class="success module">
|
|
||||||
%= $c->render_to_string(inline => flash 'success')
|
|
||||||
</div>
|
</div>
|
||||||
% }
|
|
||||||
% if ( flash 'warning' ) {
|
<div id="main" class="col-md-9">
|
||||||
<br><div class="sme-warning module">
|
%= include 'partials/_info'
|
||||||
%= $c->render_to_string(inline => flash 'warning')
|
% if (flash 'success') {
|
||||||
|
<br><div class="success module">
|
||||||
|
%= $c->render_to_string(inline => flash 'success')
|
||||||
|
</div>
|
||||||
|
% }
|
||||||
|
% if ( flash 'warning' ) {
|
||||||
|
<br><div class="sme-warning module">
|
||||||
|
%= $c->render_to_string(inline => flash 'warning')
|
||||||
|
</div>
|
||||||
|
%}
|
||||||
|
% if ( flash 'error' ) {
|
||||||
|
<br><div class="sme-error module">
|
||||||
|
%= $c->render_to_string(inline => flash 'error')
|
||||||
|
</div>
|
||||||
|
%}
|
||||||
|
%= content 'module'
|
||||||
|
%= include 'partials/_footer'
|
||||||
</div>
|
</div>
|
||||||
%}
|
|
||||||
% if ( flash 'error' ) {
|
|
||||||
<br><div class="sme-error module">
|
|
||||||
%= $c->render_to_string(inline => flash 'error')
|
|
||||||
</div>
|
|
||||||
%}
|
|
||||||
%= content 'module'
|
|
||||||
%= include 'partials/_footer'
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
% if (config 'hasJquery') {
|
% if (config 'hasJquery') {
|
||||||
@@ -108,23 +98,17 @@
|
|||||||
%= content 'js_togglePassword'
|
%= content 'js_togglePassword'
|
||||||
% }
|
% }
|
||||||
|
|
||||||
%= javascript '/js/sme-dataTable-setup.js'
|
%= javascript '/js/sme-dataTable-setup.js'
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).ready(function() {
|
|
||||||
// Handle form submission for any form
|
|
||||||
$('form').on('submit', function(event) {
|
|
||||||
// Disable the submit button
|
|
||||||
$(this).find('button[type="submit"], input[type="submit"]').prop('disabled', true);
|
|
||||||
// Show the busy indicator
|
|
||||||
// $('#busy-indicator').show();
|
|
||||||
|
|
||||||
// Change the cursor to "wait"
|
|
||||||
$('body').addClass('busy');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
%# Specific panel js code
|
||||||
|
% $controller = stash('controller');
|
||||||
|
% if ($controller) {
|
||||||
|
% my $js_path = "js/$controller.js";
|
||||||
|
%# Use the url_for helper to generate the correct static file URL
|
||||||
|
% if (app->static->file($js_path)) {
|
||||||
|
<script src="<%= url_for("/$js_path") %>"></script>
|
||||||
|
% }
|
||||||
|
% }
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -85,7 +85,8 @@
|
|||||||
|
|
||||||
%= form_for '/domains' => (method => 'POST') => begin
|
%= form_for '/domains' => (method => 'POST') => begin
|
||||||
|
|
||||||
<HR class="sectionbar">
|
<!-- <HR class="sectionbar">-->
|
||||||
|
<br>
|
||||||
|
|
||||||
% my $btn2 = l('dom_DOMAINS_PAGE_CORPORATE_DNS');
|
% my $btn2 = l('dom_DOMAINS_PAGE_CORPORATE_DNS');
|
||||||
|
|
||||||
@@ -119,4 +120,4 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -1,47 +1,10 @@
|
|||||||
|
|
||||||
<!--
|
|
||||||
<div id="header2" class="hd2">
|
|
||||||
<div id="h2l1">
|
|
||||||
<div id="h2e11">
|
|
||||||
<a target='_blank' href="http://www.koozali.org"><img src="images/smeserver_logo.jpg" height="40" alt="SME Server"></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="h2e22">
|
|
||||||
<button type='button'class="login-button"><a id="help-button" target="_parent" href="manual">?</a></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="h2e12">
|
|
||||||
<button type='button' class="login-button"><a id="legacy-button" href="/server-manager" target='_blank'>Legacy SM</a></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="h2e23">
|
|
||||||
% if ( not defined $c->session->{username} ) {
|
|
||||||
<button type='button' class="login-button"><a target="_parent" href="login">Login</a></button>
|
|
||||||
% } else {
|
|
||||||
<button type='button' class="login-button"><a target="_parent" href="logout"><%= $c->session->{username} %> Logout</a></button>
|
|
||||||
% }
|
|
||||||
</div>
|
|
||||||
<div id="flag-container">
|
|
||||||
The flag icon will be inserted here
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="h2l2" class="infobar">
|
|
||||||
<div id="h2e21">
|
|
||||||
<b>
|
|
||||||
<%= session 'SystemName' %>@<%= session 'DomainName' %></b>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
|
|
||||||
<div id="header2" class="hd2 module gradient-panel">
|
<div id="header2" class="hd2 module gradient-panel">
|
||||||
<img src="images/KoozaliServerManager.png" alt="Koozali Logo" class="logo" >
|
<img src="images/KoozaliServerManager.png" alt="Koozali Logo" class="logo" >
|
||||||
% if ( not defined $c->session->{username} ) {
|
% if ( not defined $c->session->{username} ) {
|
||||||
<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="login">Login</a></button>
|
<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="login">Login</a></button>
|
||||||
% } else {
|
% } else {
|
||||||
<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="logout"><%= $c->session->{username} %> Logout</a></button>
|
<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="logout">Logout <%= $c->session->{username} %></a></button>
|
||||||
% }
|
% }
|
||||||
<div id="flag-container" class = "flag-style">
|
<div id="flag-container" class = "flag-style">
|
||||||
<!-- The flag icon will be inserted here -->
|
<!-- The flag icon will be inserted here -->
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<div id='hos_list'>
|
<div id="hos_list">
|
||||||
|
|
||||||
% my $btn = l('hos_ADD_HOSTNAME');
|
% my $btn = l("hos_ADD_HOSTNAME");
|
||||||
|
|
||||||
%= form_for '/hostentries' => (method => 'POST') => begin
|
%= form_for "/hostentries" => (method => "POST") => begin
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
%= submit_button "$btn", class => 'action'
|
%= submit_button "$btn", class => "action"
|
||||||
<br></p>
|
<br></p>
|
||||||
|
|
||||||
%= hidden_field 'trt' => $hos_datas->{trt}
|
%= hidden_field "trt" => $hos_datas->{trt}
|
||||||
|
|
||||||
% end
|
% end
|
||||||
|
|
||||||
@@ -16,59 +16,59 @@
|
|||||||
% foreach my $domain ( sort ( keys %dom_hos ) ) {
|
% foreach my $domain ( sort ( keys %dom_hos ) ) {
|
||||||
|
|
||||||
<p><br><b>
|
<p><br><b>
|
||||||
%= $c->l('hos_CURRENT_HOSTNAMES_FOR_LOCAL_DOMAIN', $domain);
|
%= $c->l("hos_CURRENT_HOSTNAMES_FOR_LOCAL_DOMAIN", $domain);
|
||||||
</b><br></p>
|
</b><br></p>
|
||||||
|
|
||||||
<table class="sme-border TableSort"><thead>
|
<table class="sme-border TableSort"><thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th class='sme-border'>
|
<th class="sme-border">
|
||||||
%=l 'hos_HOSTNAME'
|
%=l "Hostname"
|
||||||
</th>
|
</th>
|
||||||
<th class='sme-border'>
|
<th class="sme-border">
|
||||||
%=l 'hos_HOSTTYPE'
|
%=l "Location"
|
||||||
</th>
|
</th>
|
||||||
<th class='sme-border'>
|
<th class="sme-border">
|
||||||
%=l 'IP_ADDRESS_OR_FQDN'
|
%=l "IP_ADDRESS_OR_FQDN"
|
||||||
</th>
|
</th>
|
||||||
<th class='sme-border'>
|
<th class="sme-border">
|
||||||
%=l 'hos_ETHERNET_ADDRESS'
|
%=l "hos_ETHERNET_ADDRESS"
|
||||||
</th>
|
</th>
|
||||||
<th class='sme-border'>
|
<th class="sme-border">
|
||||||
%=l 'COMMENT'
|
%=l "COMMENT"
|
||||||
</th>
|
</th>
|
||||||
<th class='sme-border'>
|
<th class="sme-border">
|
||||||
%=l 'ACTION'
|
%=l "ACTION"
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead><tbody>
|
</thead><tbody>
|
||||||
|
|
||||||
% foreach (@{$dom_hos{$domain}{'HOSTS'}}) {
|
% foreach (@{$dom_hos{$domain}{"HOSTS"}}) {
|
||||||
<tr>
|
<tr>
|
||||||
%= t td => (class => 'sme-border') => $_->{'HostName'};
|
%= t td => (class => "sme-border") => $_->{"HostName"};
|
||||||
%= t td => (class => 'sme-border') => $_->{'HostType'};
|
%= t td => (class => "sme-border") => $_->{"HostType"};
|
||||||
%= t td => (class => 'sme-border') => $_->{'IP'};
|
%= t td => (class => "sme-border") => $_->{"IP"};
|
||||||
%= t td => (class => 'sme-border') => $_->{'MACAddress'};
|
%= t td => (class => "sme-border") => $_->{"MACAddress"};
|
||||||
%= t td => (class => 'sme-border') => $_->{'Comment'};
|
%= t td => (class => "sme-border") => $_->{"Comment"};
|
||||||
<td class='sme-border' style="min-width:15em">
|
<td class="sme-border" style="min-width:15em">
|
||||||
%my ($actionModify, $actionRemove) = ' ';
|
%my ($actionModify, $actionRemove) = " ";
|
||||||
%my $static = $_->{'static'} || "no";
|
%my $static = $_->{"static"} || "no";
|
||||||
%if ($static ne 'yes') {
|
%if ($static ne "yes") {
|
||||||
%my $modify_text = l('MODIFY'); # Localized text
|
%my $modify_text = l("MODIFY"); # Localized text
|
||||||
%my $csrf_token = "TOKEN"; # CSRF token for security
|
%my $csrf_token = "TOKEN"; # CSRF token for security
|
||||||
%my $hostentries_name = $_->{'HostName'}; # hostentries name extracted from the data structure
|
%my $hostentries_name = $_->{"HostName"}; # hostentries name extracted from the data structure
|
||||||
%$actionModify = qq{
|
%$actionModify = qq{
|
||||||
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=UPD&Hostname=$hostentries_name">
|
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=UPD&Hostname=$hostentries_name">
|
||||||
% <button type='button' class='sme-modify-button' title='$modify_text' >
|
% <button type="button" class="sme-modify-button" title="$modify_text" >
|
||||||
% $modify_text
|
% $modify_text
|
||||||
% </button>
|
% </button>
|
||||||
% </a>
|
% </a>
|
||||||
%};
|
%};
|
||||||
%my $remove_text = l('REMOVE'); # Localized text
|
%my $remove_text = l("REMOVE"); # Localized text
|
||||||
%$csrf_token = "TOKEN"; # CSRF token for security
|
%$csrf_token = "TOKEN"; # CSRF token for security
|
||||||
%#my $hostentries_name = $_->{'HostName'}; # hostentries name extracted from the data structure
|
%#my $hostentries_name = $_->{"HostName"}; # hostentries name extracted from the data structure
|
||||||
%$actionRemove = qq{
|
%$actionRemove = qq{
|
||||||
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=DEL&Hostname=$hostentries_name">
|
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=DEL&Hostname=$hostentries_name">
|
||||||
% <button type='button' class='sme-remove-button' title='$remove_text' >
|
% <button type="button" class="sme-remove-button" title="$remove_text" >
|
||||||
% $remove_text
|
% $remove_text
|
||||||
% </button>
|
% </button>
|
||||||
% </a>
|
% </a>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user