Compare commits

...

12 Commits

Author SHA1 Message Date
f30b4ab2b5 * Wed Apr 30 2025 Brian Read <brianr@koozali.org> 11.0.0-79.sme
- Add code in SrvMngr to take note of user panel setting
2025-04-30 09:09:16 +01:00
fa286e966d * Thu Apr 17 2025 Brian Read <brianr@koozali.org> 11.0.0-78.sme
- typo in remoteaccess panel
- Fix crash in veiwlogfiles if viewlogfiles key not in DB
2025-04-17 12:16:38 +01:00
9bb2128891 Typo in name for remoteaccess panel 2025-04-16 17:48:37 +01:00
accf96df0d * Sat Apr 12 2025 Brian Read <brianr@koozali.org> 11.0.0-77.sme
- Sort out local and pulic access setting in remote panel  [SME: 12988]
- caching problem, plus confusion between normal and public setting in sshd / access in DB
2025-04-12 09:08:12 +01:00
1c601f0ace * Fri Apr 11 2025 Brian Read <brianr@koozali.org> 11.0.0-76.sme
- Restore css for roundcube embedded  [SME: 12987]
2025-04-11 07:09:03 +01:00
cffbe53fb4 * Wed Apr 09 2025 Brian Read <brianr@koozali.org> 11.0.0-75.sme
- Move review configuration to behind login [SME: 12984]
- Fix crash in port forwarding [SME: 12985]
2025-04-09 10:43:14 +01:00
aad1a458f4 * Wed Mar 26 2025 Brian Read <brianr@koozali.org> 11.0.0-74.sme
- Fix error message and success message format in Local Networking panel [SME: 12969]
2025-03-26 08:58:32 +00:00
252bf20410 * Tue Mar 25 2025 Brian Read <brianr@koozali.org> 11.0.0-73.sme
- Some changes to error message format in css.
- Fix DB Cache problem with port forwarding panel [SME: 12970]
- Fix error and success message display for port forwarding panel [SME: 12969]
2025-03-25 15:05:34 +00:00
ebbe7af9a7 * Mon Mar 24 2025 Brian Read <brianr@koozali.org> 11.0.0-72.sme
- Remove css files from template structure [SME: 12967]
- Rationalise and merge css files
- Adjust some gaps around panels
- Remove HR lines
2025-03-24 17:23:02 +00:00
36de44fcef * Thu Mar 20 2025 Brian Read <brianr@koozali.org> 11.0.0-71.sme
- Sort out navigation menu error on startup [SME: 12946]
- More places where floating panel needed
- Adjust floating panel to make space around it the same
- clean up some css
2025-03-20 12:15:50 +00:00
750ab7dd11 * Wed Mar 19 2025 Brian Read <brianr@koozali.org> 11.0.0-70.sme
- Re-cast the default theme - use proper koozali logo image, unwind multiple divs
- Enhance responsiveness
- Revert Ibay menu name to Ibays
- Remove legacy SM1 button on header
- Remove "?" access to wiki help on header
2025-03-19 13:45:03 +00:00
77ca17c851 * Mon Mar 17 2025 Brian Read <brianr@koozali.org> 11.0.0-69.sme
- Add a total summary report across all existing logs [SME: 12951]
2025-03-17 15:27:16 +00:00
47 changed files with 1210 additions and 1650 deletions

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -1 +0,0 @@
/* DO NOT MODIFY THIS FILE! It is updated automatically */

View File

@@ -1,440 +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: 2px;
padding-right: 2px;
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:0px;
margin-bottom:0px;
}
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:0px;
margin-bottom:0px;
}
/* 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 ;
}
/*These are style definitions found in the UI but not defined in any file I
could locate. They're listed here for historical purposes, but have been
removed from the UI
pagedescription (used in the first paragraph of text on a page) [HTML.pm]
label (used in forms) [HTML.pm]
field (used in forms) [HTML.pm]
fielddescription (used ???)[HTML.pm]
buttons (used in forms) [HTML.pm]
*/
/*td.sme-submitbutton {
text-align: right;
}
*/
/*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.
.banner {
background: #000000;
color: #ffffff;
}
.banner-right {
font-family: Verdana, Arial, Helvetica, sans-serif;
background: #e17200;
color: #ffffff;
}
.border {
background: #000000;
color: #000000;
border-color: #000000;
}
.sidebar {
width: 200px;
background: #ffffff;
font-size: smaller;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: normal;
}
.sidebar-title {
background: #1e385b;
color: #ffffff;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
}
.newsitem {
background: #ffffff;
color: #000000;
font-family: Verdana, Arial, Helvetica, sans-serif;
margin-left: 5px;
margin-right: 5px;
margin-top: 5px;
margin-bottom: 5px;
}
.newsitem-title {
background: #cccccc;
color: #ffffff;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
}
.newsitem-footer {
background: #cccccc;
color: #000000;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: smaller;
text-align: right;
}
.newsitem-detail {
font-size: smaller;
font-weight: normal;
}
.formlabel {
background: #c0c0c0;
color: #000000;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: small;
font-weight: bold;
text-align: right;
}
.welcome-link {
background: #ffffff;
color: #1e385b;
}
.littlelink {
font-family: Verdana, Arial, Helvetica, sans-serif;
}
#textlayer {
position: absolute;
visibility: inherit;
top: 160px;
left: 50px;
z-index: 2;
}
#para {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
color: #000000;
}
#title {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
padding: 7px 7px 7px 7px;
color: #ffffff;
}
*/
EOF
}

View File

@@ -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
}

View File

@@ -1 +0,0 @@
/* DO NOT MODIFY THIS FILE! It is updated automatically */

View File

@@ -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
}

View File

@@ -1 +0,0 @@
/* DO NOT MODIFY THIS FILE! It is updated automatically */

View File

@@ -1,293 +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.
*----------------------------------------------------------------------
*/
/* This is the basic stylesheet originally used in the mojo version.
*/
body{
background-color: #FFF;
}
#container{
max-width: 100%;
position: relative;
margin: auto;
}
#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: 5px;
}
#header {
background: #bee6a2;
}
#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:0px;
margin-bottom:0px;
}
.sme-warning {
color: orange;
display:block;
background-color: #ffffff;
border-width: 1px;
border-style: solid;
border-color: orange ;
padding: 4px;
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;
}
a.menu-title {
display: inline-block;
color: #1A6D1A; /*#666;*/
padding-left: 1px;
padding-right: 1px;
font-weight: bold;
}
#module {
/* height: 600px; */
overflow: auto;
}
#h2l1 {
height: 40px;
width: 100%;
}
#h2e11 {
width: 50%;
float: left;
}
#h2e12 {
background-color: #C0E7A6;
float: left;
text-align: right;
}
#h2l2 {
/* background-color: #A8F9E7;*/
border-top: solid white 3px;
border-bottom: solid white 2px;
height: 14px;
width: 100%;
padding: 1px;
}
#h2e21 {
float: left;
width: 70%;
}
#h2e22,#h2e23,#h2e12 {
float: left;
width: 14em;
text-align: center;
}
.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%;
}
/*end*/
EOF
}

View File

@@ -1 +0,0 @@
/* DO NOT MODIFY THIS FILE! It is updated automatically */

View File

@@ -30,8 +30,11 @@ use SrvMngr::Plugin::WithoutCache;
use esmith::I18N;
# 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"
our $VERSION = '51.el8.sme';
our $VERSION = '78.el8.sme';
#Extract the release value
if ($VERSION =~ /^(\d+)/) {
$VERSION = $1; # $1 contains the matched numeric digits
@@ -46,7 +49,7 @@ our @EXPORT_OK = qw(
getNavigation ip_number validate_password is_normal_password email_simple
mac_address_or_blank mac_address ip_number_or_blank
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 {
@@ -301,10 +304,11 @@ sub setup_routing {
$if_logged_in->get('/userpassword')->to('userpassword#main')->name('passwd');
$if_logged_in->post('/userpassword')->to('userpassword#change_password')->name('passwd2');
my $if_admin = $r->under( sub {
my $c =shift;
return $c->is_admin || $c->auth_fail($c->l("acs_ADMIN"));
});
my $if_admin = $r->under( sub {
my $c = shift;
# 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->post('/backup')->to('backup#do_display')->name('backupd');
@@ -549,9 +553,10 @@ sub getNavigation {
use esmith::NavigationDB;
my $c = shift;
my $class = shift; #not the controller as it is called as an external, not part of the controller.
my $lang = shift || 'en-us';
my $menu = shift || 'N';
my $username = shift || ''; #Username when logged in as a user not admin
# my $lang = $c->session->{lang} || 'en-us';
@@ -560,13 +565,33 @@ sub getNavigation {
my @files = ();
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->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
#-----------------------------------------------------
my $navigation_ctlr_ignore =
"(\.\.?|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm|Legacypanel\.pm(-.*)?)";
# "(\.\.?|Initial\.pm|Manual\.pm|Swttheme\.pm|Request\.pm|Modules\.pm(-.*)?)";
"(\.\.?|.*\-Custom\.pm|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm|Legacypanel\.pm(-.*)?)";
# "(\.\.?|Initial\.pm|.*Manual\.pm|Swttheme\.pm|Request\.pm|Modules\.pm(-.*)?)";
my $navigation_cgi_ignore =
"(\.\.?|navigation|noframes|online-manual|(internal|pleasewait)(-.*)?)";
@@ -638,70 +663,110 @@ sub getNavigation {
}
foreach my $file (keys %files_hash)
{
#my $heading = 'Unknown';
my $heading = 'Legacy';
my $description = $file;
my $headingWeight = 99999;
my $descriptionWeight = 99999;
my $urlpath = '';
my $menucat = 'A'; # admin menu (default)
{
#my $heading = 'Unknown';
my $heading = 'Legacy';
my $description = $file;
my $headingWeight = 99999;
my $descriptionWeight = 99999;
my $urlpath = '';
my $menucat = 'A'; # admin menu (default)
my $rec = $navdb->get($file);
my $rec = $navdb->get($file);
if (defined $rec)
{
$heading = $rec->prop('Heading');
$description = $rec->prop('Description');
$headingWeight = $rec->prop('HeadingWeight') || 99999; #Stop noise in logs if file in dir does not have nav header.
$descriptionWeight = $rec->prop('DescriptionWeight');
$urlpath = $rec->prop('UrlPath') || '';
$menucat = $rec->prop('MenuCat') || 'A'; # admin menu (default)
}
next if $menu ne $menucat;
if (defined $rec)
{
$heading = $rec->prop('Heading');
$description = $rec->prop('Description');
$headingWeight = $rec->prop('HeadingWeight') || 99999; #Stop noise in logs if file in dir does not have nav header.
$descriptionWeight = $rec->prop('DescriptionWeight');
$urlpath = $rec->prop('UrlPath') || '';
$menucat = $rec->prop('MenuCat') || 'A'; # admin menu (default)
}
# 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;
}
#--------------------------------------------------
# add heading, description and weight information to data structure
#--------------------------------------------------
next if $menu ne $menucat;
unless (exists $nav {$heading})
{
$nav {$heading} = { COUNT => 0, WEIGHT => 0, DESCRIPTIONS => [] };
}
#--------------------------------------------------
# add heading, description and weight information to data structure
#--------------------------------------------------
$nav {$heading} {'COUNT'} ++;
$nav {$heading} {'WEIGHT'} += $headingWeight;
unless (exists $nav {$heading})
{
$nav {$heading} = { COUNT => 0, WEIGHT => 0, DESCRIPTIONS => [] };
}
# Check for manager panel, and assign the appropriate
# cgi-bin prefix for the links.
# 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.
$nav {$heading} {'COUNT'} ++;
$nav {$heading} {'WEIGHT'} += $headingWeight;
my $path;
if ( $files_hash{$file} eq 'ctrl') {
$path = "2";
} elsif ( $files_hash{$file} eq 'cgim') {
$path = "/cgi-bin";
} else {
my @filename = split /\//, $files_hash{$file};
$path = "/$filename[scalar @filename - 2]/$filename[scalar @filename - 1]";
};
# Check for manager panel, and assign the appropriate
# cgi-bin prefix for the links.
# 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.
push @{ $nav {$heading} {'DESCRIPTIONS'} },
{ DESCRIPTION => $description,
WEIGHT => $descriptionWeight,
FILENAME => $urlpath ? $urlpath : "$path/$file",
CGIPATH => $path,
MENUCAT => $menucat
my $path;
if ( $files_hash{$file} eq 'ctrl') {
$path = "2";
} elsif ( $files_hash{$file} eq 'cgim') {
$path = "/cgi-bin";
} 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;
}
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 {

View File

@@ -2,7 +2,7 @@ package SrvMngr::Controller::Ibays;
#----------------------------------------------------------------------
# heading : Network
# description : Shared areas (was ibays)
# description : Ibays
# navigation : 6000 100
#
#

View File

@@ -142,6 +142,10 @@ sub do_display {
if ($trt eq 'LIST') {
#List all the port forwards
# Open them again as maybe written to above
$tcp_db = esmith::ConfigDB->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";
my @tcpforwards = $tcp_db->get_all;
my @udpforwards = $udp_db->get_all;
my $empty = 1 if not @tcpforwards and not @udpforwards;
@@ -211,6 +215,7 @@ sub add_portforward {
sub get_destination_host {
my $q = shift;
$cdb = esmith::ConfigDB->open || die "Can't open configuration database: $!\n";
my $dhost = $q->param("dhost");
my $localip = $cdb->get_prop('InternalInterface', 'IPAddress');
my $external_ip = $cdb->get_prop('ExternalInterface', 'IPAddress') || $localip;
@@ -357,6 +362,7 @@ sub isValidPort() {
sub validate_destination_host {
my $c = shift;
$cdb = esmith::ConfigDB->open || die "Can't open configuration database: $!\n";
my $dhost = $c->param('dhost');
$dhost =~ s/^\s+|\s+$//g;
my $localip = $cdb->get_prop('InternalInterface', 'IPAddress');
@@ -395,4 +401,4 @@ sub validate_allowed_hosts {
} ## end foreach (split(/[\s,]+/, $ahost...))
return %valid_ahost_list;
} ## end sub validate_allowed_hosts
1;
1;

View File

@@ -68,6 +68,9 @@ sub generateReport {
elsif ($selected_report eq 'daily_summary_today') {
$out .= daily_summary_report_today($log_path);
}
elsif ($selected_report eq 'daily_summary_all') {
$out .= daily_summary_report_all($log_path);
}
elsif ($selected_report eq 'top_senders') {
$out .= top_senders_and_recipients($log_path);
}
@@ -118,6 +121,7 @@ sub reportType_list {
my @array = (
[$c->l('qma_Daily_Summary_Report_yesterday') => 'daily_summary'],
[$c->l('qma_Daily_Summary_Report_today') => 'daily_summary_today'],
[$c->l('qma_Daily_Summary_Report_all') => 'daily_summary_all'],
#[$c->l('qma_Top Senders and Recipients') => 'top_senders'],
#[$c->l('qma_Bounce Rate Analysis') => 'bounce_analysis'],
#[$c->l('qma_Spam and Virus Filtering Report') => 'spam_and_virus'],
@@ -146,6 +150,12 @@ sub daily_summary_report_today {
return format_as_html("Daily Summary Report", $output);
}
sub daily_summary_report_all {
my $log_file = shift; # Path to log file
my $output = qx(ls -1 /var/log/maillog* | xargs cat |pflogsumm --detail 0 --no-no-msg-size);
return format_as_html("Summary Report across all logs", $output);
}
sub top_senders_and_recipients {
my $log_file = shift;
my $output = qx(pflogsumm --smtpd-stats $log_file);

View File

@@ -30,7 +30,7 @@ our @EXPORT = qw( networkAccess_list passwordLogin_list get_ssh_permit_root_logi
);
# get_pptp_sessions
our $db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
my $db; # = esmith::ConfigDB->open || warn "Couldn't open configuration database";
sub main {
my $c = shift;
@@ -134,7 +134,7 @@ sub networkAccess_list {
return [
[ $c->l('rma_NO_ACCESS') => 'off' ],
[ $c->l('NETWORKS_ALLOW_LOCAL') => 'private' ],
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'normal' ]
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public' ]
];
} ## end sub networkAccess_list
@@ -144,6 +144,7 @@ sub passwordLogin_list {
}
sub get_prop {
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
my ($c, $item, $prop) = @_;
warn "You must specify a record key" unless $item;
warn "You must specify a property name" unless $prop;
@@ -154,6 +155,8 @@ sub get_prop {
sub get_value {
my $c = shift;
my $item = shift;
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
return ($db->get($item)->value());
} ## end sub get_value
@@ -179,8 +182,8 @@ sub get_ssh_password_auth {
}
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')) {
my $access = get_prop('', 'sshd', 'access');
$access = ($access eq 'public') ? 'public' : 'private';
@@ -202,6 +205,7 @@ sub get_ftp_password_login_access {
} ## end sub get_ftp_password_login_access
sub get_telnet_mode {
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
my $telnet = $db->get('telnet');
return ('off') unless $telnet;
my $status = $telnet->prop('status') || 'disabled';
@@ -211,8 +215,8 @@ sub get_telnet_mode {
} ## end sub get_telnet_mode
sub get_ipsecrw_sessions {
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
my $status = $db->get('ipsec')->prop('RoadWarriorStatus');
if (defined($status) && ($status eq 'enabled')) {
return ($db->get('ipsec')->prop('RoadWarriorSessions') || '0');
} else {
@@ -221,6 +225,7 @@ sub get_ipsecrw_sessions {
} ## end sub get_ipsecrw_sessions
sub get_ipsecrw_status {
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
return undef unless ($db->get('ipsec'));
return $db->get('ipsec')->prop('RoadWarriorStatus');
}
@@ -228,6 +233,7 @@ sub get_ipsecrw_status {
sub pptp_and_dhcp_range {
my $c = shift;
my $val = shift || 0;
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
my $dhcp_status = $db->get_prop('dhcpd', 'status') || 'disabled';
my $dhcp_end = $db->get_prop('dhcpd', 'end') || '';
my $dhcp_start = $db->get_prop('dhcpd', 'start') || '';
@@ -245,6 +251,7 @@ sub pptp_and_dhcp_range {
sub _get_valid_from {
my $c = shift;
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
my $rec = $db->get('httpd-admin');
return undef unless ($rec);
my @vals = (split ',', ($rec->prop('ValidFrom') || ''));
@@ -287,12 +294,12 @@ sub validate_network_and_mask {
sub change_settings {
my ($c, %rma_datas) = @_;
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
#------------------------------------------------------------
# good; go ahead and change the access.
#------------------------------------------------------------
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
my $rec = $db->get('telnet');
if ($rec) {
if ($rma_datas{telnetAccess} eq "off") {
$rec->set_prop('status', 'disabled');
@@ -363,7 +370,7 @@ sub change_settings {
sub set_ipsecrw_sessions {
my $c = shift;
my $sessions = shift;
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
if (defined $sessions) {
$db->get('ipsec')->set_prop('RoadWarriorSessions', $sessions);
@@ -378,6 +385,7 @@ sub add_new_valid_from {
my $c = shift;
my $net = shift;
my $mask = shift;
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
# we transform bit mask to regular mask
$mask = get_reg_mask($net, $mask);
@@ -400,6 +408,7 @@ sub remove_valid_from {
my $c = shift;
my $remove_nets = shift;
my @remove = split /,/, $remove_nets;
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
# my @remove = $c->param('Remove_nets');
my @vals = $c->_get_valid_from();
@@ -430,4 +439,4 @@ sub remove_valid_from {
$db->get('httpd-admin')->set_prop('ValidFrom', $prop);
return 1;
} ## end sub remove_valid_from
1;
1;

View File

@@ -1,16 +1,11 @@
package SrvMngr::Controller::Review;
#----------------------------------------------------------------------
# heading : Support
# heading : Investigation
# description : Review configuration
# navigation : 000 500
# menu : N
# navigation : 6000 6800
# routes : end
#----------------------------------------------------------------------
# heading-o : Configuration
# description-o : Review configuration
# navigation-o : 6000 6800
#----------------------------------------------------------------------
use strict;
use warnings;
use Mojo::Base 'Mojolicious::Controller';
@@ -313,4 +308,4 @@ sub get_public_ip_address
}
1;
1;

View File

@@ -31,7 +31,8 @@ sub main {
my %log_datas = ();
my $title = $c->l('log_FORM_TITLE');
my $notif = '';
$log_datas{default_op} = ($cdb->get('viewlogfiles')->prop('DefaultOperation')) || 'view';
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->render(template => 'viewlogfiles');
} ## end sub main

View File

@@ -15,6 +15,7 @@ these reports</P>',
'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_SUMMARIZE_QUEUE' => 'Summarize status of mail queue',

View File

@@ -0,0 +1,99 @@
# 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;
# 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->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 $panel eq lc($allowed_panel); #Controller files are capitalised, but that is lost in panel id.
}
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

View File

@@ -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;
}

View File

@@ -0,0 +1,283 @@
/* 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 */
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -33,7 +33,7 @@
%= select_field 'EmailUnknownUser' => $c->get_emailunknownuser_opt(), class => 'input'
</span></p>
<hr class='menubar' />
<!--<hr class='menubar' />-->
<h2>
%=l 'mai_TITLE_DELEGATE'
</h2>
@@ -47,7 +47,7 @@
%= text_field 'DelegateMailServer', class => 'input'
</span></p>
<hr class='sectionbar' />
<!--<hr class='sectionbar' />-->
<h2>
%=l 'mai_TITLE_SMARTHOST'
</h2>
@@ -89,4 +89,4 @@
% end
</div>
%end
%end

View File

@@ -92,7 +92,7 @@
%= select_field 'uSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input'
</span></p>
<hr class="sectionbar" />
<!--<hr class="sectionbar" />-->
<h2>
%=l 'mai_TITLE_SECONDARY'
</h2>

View File

@@ -47,9 +47,10 @@
</div>
%= hidden_field 'trt' => 'ACC'
% end
% end
<br>
<hr class="sectionbar" />
<!--<hr class="sectionbar" />-->
%= form_for 'emailsettings' => (method => 'POST') => begin
<p><span class=label>
@@ -76,9 +77,10 @@
</div>
%= hidden_field 'trt' => 'FIL'
% end
% end
<br>
<hr class="sectionbar" />
<!--<hr class="sectionbar" />-->
%= form_for 'emailsettings' => (method => 'POST') => begin
<p><span class=label>
@@ -118,8 +120,9 @@
%= hidden_field 'trt' => 'REC'
% end
<br>
<hr class="sectionbar" />
<!--<hr class="sectionbar" />-->
%= form_for 'emailsettings' => (method => 'POST') => begin
<p><span class=label>

View File

@@ -2,7 +2,7 @@
% content_for 'module' => begin
<div id="central" class="sme-error">
<div id="central" class="sme-error module">
<p><br>dev<br> Oups !!!
The page you were requesting
"<%= $self->req->url->path || '/' %>"
@@ -14,4 +14,4 @@
</p>
</div>
% end
% end

View File

@@ -8,7 +8,7 @@
</p>
% }
<div id='central' class='central initial-panel'>
<div id='central' class='central initial-panel module'>
% if ( stash 'error' ) {
<br><div class=sme-error>

View File

@@ -7,11 +7,18 @@
<title><%= $title %></title>
<link rel="made" href="mailto:bugs%40koozali.org">
<meta name="copyright" content="(head.tmpl)Copyright 2003-2004 Mitel Corporation">
%= stylesheet '/css/sme_core.css'
%= stylesheet '/css/sme_main.css'
%= stylesheet '/css/sme_menu.css'
%= stylesheet '/css/styles.css'
%= stylesheet '/css/sme-password.css'
%= stylesheet '/css/new_sme.css'
%= stylesheet '/css/new-sme-main.css'
%# Replaced by consolidated (and rationlised) CSS files as above March 2025
%#= stylesheet '/css/sme_core.css'
%#= stylesheet '/css/sme_main.css'
%#= stylesheet '/css/sme_menu.css'
%#= stylesheet '/css/styles.css'
%#= stylesheet '/css/sme-password.css'
%= content_for 'head_contrib'
% if (config 'hasJquery') {
%= include 'partials/_js_imports'
@@ -70,7 +77,7 @@
%= content 'js_toggleMenu'
% }
<div id="navigation" class="col-md-3">
<div id="navigation" class="col-md-3 module">
%= include 'partials/_nav_menu'
% if ( $c->is_logged_in ) {
%= include 'partials/_user_menu'
@@ -84,17 +91,17 @@
%= include 'partials/_info'
% if (flash 'success') {
<br><div class=success>
<br><div class="success module">
%= $c->render_to_string(inline => flash 'success')
</div>
% }
% if ( flash 'warning' ) {
<br><div class=sme-warning>
<br><div class="sme-warning module">
%= $c->render_to_string(inline => flash 'warning')
</div>
%}
% if ( flash 'error' ) {
<br><div class=sme-error>
<br><div class="sme-error module">
%= $c->render_to_string(inline => flash 'error')
</div>
%}

View File

@@ -2,7 +2,7 @@
% content_for 'module' => begin
<div id="central" class="sme-error">
<div id="central" class="sme-error module">
<p><br>dev<br> Oups !!!
The page you were requesting
"<%= $self->req->url->path || '/' %>"
@@ -12,4 +12,4 @@
</p>
</div>
% end
% end

View File

@@ -1,5 +1,5 @@
% layout 'defaultlight', title => 'Sme server 2 - Error P';
<div id='central' class='central not_found-panel'>
<div id='central' class='central not_found-panel module'>
<p><br><br>
The page you were requesting
"<%= $self->req->url->path || '/' %>"
@@ -7,4 +7,4 @@
<br><br>
%= link_to Welcome => '/'
</p>
</div>
</div>

View File

@@ -85,7 +85,8 @@
%= form_for '/domains' => (method => 'POST') => begin
<HR class="sectionbar">
<!-- <HR class="sectionbar">-->
<br>
% my $btn2 = l('dom_DOMAINS_PAGE_CORPORATE_DNS');
@@ -119,4 +120,4 @@
</div>
</div>

View File

@@ -1,5 +1,5 @@
<div id="footer">
<HR class="sme-copyrightbar">
<div id="footer" class="module">
<!--<HR class="sme-copyrightbar">-->
<a href="https://mojolicious.org" target="_blank"><img src="images/sme-mojo-logo-white.png" style="position:relative;"></a>
<font class="sme-copyright">
% if ( $c->is_logged_in && $c->is_admin) {

View File

@@ -1,128 +1,12 @@
<style>
#h2l1 {
display: flex; /* Use flexbox layout */
justify-content: space-between; /* Space between child elements */
align-items: center; /* Center items vertically */
}
#h2e11 {
flex: 1; /* Allow the first div to take available space on the left */
}
#h2e12 {
display: flex; /* Make this div a flex container */
align-items: center; /* Vertically center content in this div */
margin-left: 20px; /* Add margin to the left of this div */
}
#flag-container {
display: flex; /* Make this div a flex container */
align-items: center; /* Vertically center content in this div */
margin-left: 20px; /* Add margin to the left of the flag container */
padding-right: 20px; /* Add padding to the right side of the flag container */
}
.flag-icon {
width: 43px;
font-size: 20px;
}
#legacy-button button {
background-color: #98d36e; /* Button background color */
font-weight: lighter; /* Lighter text for the button */
color: #063; /* Button text color */
padding: 5px 10px; /* Padding for the button */
border: none; /* Remove default button border */
border-radius: 4px; /* Rounded corners for button */
cursor: pointer; /* Change cursor on hover */
}
#legacy-button button:hover {
background-color: #82c961; /* Change color on hover */
}
.infobar {
display: flex; /* Use flexbox for alignment */
justify-content: space-between; /* Space between child elements */
align-items: center; /* Center items vertically */
padding: 10px; /* Adjust padding as desired */
}
#h2e21 {
flex: 1; /* Allow the first div to take available space on the left */
}
#h2e22 {
display: flex; /* Make this div a flex container */
justify-content: center; /* Center the help button */
align-items: center; /* Center vertically */
flex: none; /* Prevent this div from growing */
position: relative; /* Relative position for centering */
width: 100px; /* Set a width for the help button container */
}
#h2e23 {
margin-left: auto; /* Push the third div to the right */
}
.login-button {
background-color: #98d36e; /* Button background color */
font-weight: bold; /* Bold text */
color: #ffffff; /* Button text color */
padding: 8px 12px; /* Adjust padding for button height */
border: none; /* Remove default border */
border-radius: 4px; /* Rounded corners */
cursor: pointer; /* Change cursor on hover */
}
.login-button:hover {
background-color: #82c961; /* Change color on hover */
}
#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 */
}
</style>
<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 id="header2" class="hd2 module gradient-panel">
<img src="images/KoozaliServerManager.png" alt="Koozali Logo" class="logo" >
% if ( not defined $c->session->{username} ) {
<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="login">Login</a></button>
% } else {
<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">
<!-- The flag icon will be inserted here -->
</div>
</div>
</div>

View File

@@ -1,16 +1,16 @@
<% use POSIX qw(strftime); %>
<div id="info">
<% if (! $c->session->{PwdSet} ) { %>
<div class="sme-error"><h5>
<div class="sme-error module"><h5>
Warning: you have not yet changed the default system password.</h5></div>
<% } %>
<% if ( $c->is_unsafe ) { %>
<div class="sme-error"><h5>
<div class="sme-error module"><h5>
Warning: a reconfigure and reboot is required before proceeding! Failure to do so now
may leave your system in an unknown state!</h5></div>
<% } %>
<% if ( $c->session->{Access} eq 'public' && ((config->{debug} ne '0') || (config->{mode} ne 'production')) ) { %>
<div class="sme-error"><h5>
<div class="sme-error module"><h5>
Warning: Development or debug mode enabled AND public access is offered !
</h5></div>
<% } %>

View File

@@ -13,17 +13,18 @@
% my $var5 = @vars[4];
% my $var6 = @vars[5];
<br>
%if ($ret{'ret'} eq "") {
%} elsif (index($ret{ret},"SUCCESS") != -1) {
<div class='success'>
<h2> Operation Status Report</h2>
%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6);
<!--<h2> Operation Status Report</h2>-->
%= $c->render_to_string(inline => l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6));
</div>
%} else {
<div class='sme-error'>
<h2> Operation Status Report - Error</h2>
%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6);
<!--<h2> Operation Status Report - Error</h2>-->
%= $c->render_to_string(inline => l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6));
</div>
%}
<br />
@@ -66,5 +67,4 @@
</p>
%end
</div>
</div>

View File

@@ -26,13 +26,15 @@
%if ($ret{ret} eq "") {
%=l "ln_FIRSTPAGE_DESC"
%} elsif (index($ret{ret},"SUCCESS") != -1) {
<br>
<div class='success'>
<h2> Operation Status Report</h2>
<!--<h2> Operation Status Report</h2>-->
%= $c->render_to_string(inline => l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6,$var7));
</div>
%} else {
<br>
<div class='sme-error'>
<h2> Operation Status Report - Error</h2>
<!--<h2> Operation Status Report - Error</h2>-->
%= $c->render_to_string(inline => l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6,$var7));
</div>
%}
@@ -103,4 +105,4 @@
</table>
%= hidden_field 'trt' => $ln_datas->{trt}
%}
</div>
</div>

View File

@@ -13,16 +13,17 @@
% my $var5 = @vars[4];
% my $var6 = @vars[5];
<br>
%if ($ret{'ret'} eq "") {
%} elsif (index($ret{ret},"SUCCESS") != -1) {
<div class='success'>
<h2> Operation Status Report</h2>
<!--<h2> Operation Status Report</h2>-->
%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6);
</div>
%} else {
<div class='sme-error'>
<h2> Operation Status Report - Error</h2>
<!--<h2> Operation Status Report - Error</h2>-->
%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6);
</div>
%}
@@ -84,4 +85,4 @@
%end
</div>
</div>

View File

@@ -21,13 +21,15 @@
%if ($ret{ret} eq "") {
%= $c->render_to_string(inline => l('pf_FIRST_PAGE_DESCRIPTION'));
%} elsif (index($ret{ret},"SUCCESS") != -1) {
<br>
<div class='success'>
<h2> Operation Status Report</h2>
<!--<h2> Operation Status Report</h2>-->
%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6);
</div>
%} else {
<br>
<div class='sme-error'>
<h2> Operation Status Report - Error</h2>
<!--<h2> Operation Status Report - Error</h2>-->
%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6);
</div>
%}
@@ -113,4 +115,4 @@
</table>
%= hidden_field 'trt' => $pf_datas->{trt}
</div>
</div>

View File

@@ -11,4 +11,4 @@
</span>
</p>
<hr class='sectionbar' />
<!--<hr class='sectionbar' />-->

View File

@@ -1,5 +1,7 @@
% use SrvMngr qw( getNavigation );
% my %nav = %{SrvMngr->getNavigation( $c->languages(), 'U' )};
% use SrvMngr qw( getNavigation simpleNavMerge );
% my %nav1 = %{SrvMngr->getNavigation( $c->languages(), 'U' )};
% my %nav2 = %{SrvMngr->getNavigation( $c->languages(), 'A', session('username') )};
% my %nav = $c->session->{is_admin} ? %nav1 : %{SrvMngr->simpleNavMerge(\%nav1, \%nav2)};
<div id='usermenu'>
<a href='#' id='toguser' class='section section-title'>Current User (<%= session 'username' %>)</a>
@@ -7,26 +9,24 @@
% my $cc = 300;
% foreach my $h (sort { ($nav{$a}{'WEIGHT'}/$nav{$a}{'COUNT'})
% <=> ($nav{$b}{'WEIGHT'}/$nav{$b}{'COUNT'}) } keys %nav) {
<!-- div class='section'><%= $h %></div -->
% my ($classNew, $target, $href) = '';
% foreach (sort { $a->{'WEIGHT'} <=> $b->{'WEIGHT'} } @{$nav{$h}{'DESCRIPTIONS'}}) {
% next if ($_->{'MENUCAT'} ne 'U' ); # menu User
% if ( $_->{'FILENAME'} =~ m/^2\// ) {
% $target = '_self';
% (my $file2 = $_->{'FILENAME'}) =~ s|^2/||;
% $href = '/smanager/' . $file2;
% } else {
% $target = 'main';
% $href = '/server-manager' . $_->{'FILENAME'};
% }
<div class='menu-cell'><a class='item<%= $classNew %>' target='<%= $target %>'
id='sme<%= $cc %>' href='<%= $href %>'><%= $_->{'DESCRIPTION'} %></a></div>
<!-- div class='section'><%= $h %></div -->
% my ($classNew, $target, $href) = '';
% foreach (sort { $a->{'WEIGHT'} <=> $b->{'WEIGHT'} } @{$nav{$h}{'DESCRIPTIONS'}}) {
% next if ($_->{'MENUCAT'} ne 'A' && $_->{'MENUCAT'} ne 'U' ); # menu User
% if ( $_->{'FILENAME'} =~ m/^2\// ) {
% $target = '_self';
% (my $file2 = $_->{'FILENAME'}) =~ s|^2/||;
% $href = '/smanager/' . $file2;
% } else {
% $target = 'main';
% $href = '/server-manager' . $_->{'FILENAME'};
% }
<div class='menu-cell'><a class='item<%= $classNew %>' target='<%= $target %>'
id='sme<%= $cc %>' href='<%= $href %>'><%= $_->{'DESCRIPTION'} %></a></div>
% $cc++;
% }
% }
% }
</div>
</div>
</div>

View File

@@ -17,7 +17,7 @@
</span>
%}
<hr class='sectionbar' />
<!--<hr class='sectionbar' />-->
<% my $btn = l('SAVE'); %>
@@ -50,7 +50,7 @@
</span>
<br><br>
<hr class='sectionbar' />
<!--<hr class='sectionbar' />-->
%}
@@ -85,7 +85,7 @@
%= t td => (class => 'sme-border') => $net
%= t td => (class => 'sme-border') => $mask
%= t td => (class => 'sme-border') => $numhosts
<td class='sme-border'><input type='checkbox' name='Remote_nets' value='<%= $net.'/'.$mask %>'> </td>
<td class='sme-border'><input type='checkbox' name='Remove_nets' value='<%= $net.'/'.$mask %>'> </td>
</tr>
% }
@@ -115,7 +115,7 @@
%= text_field 'ValidFromMask', class => 'input'
</span>
<hr class='sectionbar' />
<!--<hr class='sectionbar' />-->
<h2>
%=l 'rma_TITLE_SSH'
@@ -154,7 +154,7 @@
</span>
<br>
<hr class='sectionbar' />
<!--<hr class='sectionbar' />-->
<h2>
%=l 'rma_TITLE_FTP_ACCESS'
@@ -183,7 +183,7 @@
% my $mode = $c->get_telnet_mode();
% if ( $mode ne 'off') {
<hr class='sectionbar' />
<!--<hr class='sectionbar' />-->
<h2>
%=l 'rma_TITLE_TELNET_ACCESS'

View File

@@ -1,7 +1,7 @@
% layout 'default', title => 'Sme server 2 - Review';
% content_for 'module' => begin
<div id='central' class='central review-panel'>
<div id='central' class='central review-panel module'>
<h1> <%= $title %> </h1>
<%= $modul %><br><br>
@@ -134,4 +134,4 @@
</div>
% end
% end

View File

@@ -3,7 +3,7 @@
% content_for 'module' => begin
<div id='roundcube' class='roundcube roundcube-panel'>
<div id='roundcube' class='roundcube roundcube-panel module'>
% if (config->{debug} == 1) {
<p>
%= dumper $c->current_route
@@ -37,4 +37,4 @@
</div>
%end
%end

View File

@@ -1,7 +1,7 @@
% layout 'default', title => 'Sme server 2 - IndexT';
% content_for 'module' => begin
<div id='central' class='central welcome-panel'>
<div id='central' class='central welcome-panel module'>
<p>Index on line - Welcome page<br>
</p>
<p>

View File

@@ -2,7 +2,7 @@
% content_for 'module' => begin
<div id="central" class="sme-error">
<div id="central " class="sme-error module">
<p><br>dev<br> What else !!!
The page you were requesting
"<%= $self->req->url->path || '/' %>"
@@ -14,4 +14,4 @@
</p>
</div>
% end
% end

View File

@@ -55,7 +55,7 @@
% end
%}
<br><hr class=sectionbar /><br>
<!--<br><hr class=sectionbar /><br>-->
%= form_for 'yum' => (method => 'POST') => begin
@@ -97,4 +97,4 @@
</div>
% end
% end

View File

@@ -2,7 +2,7 @@ Summary: Sme server navigation module : manager 2
%define name smeserver-manager
Name: %{name}
%define version 11.0.0
%define release 68
%define release 79
Version: %{version}
Release: %{release}%{?dist}
License: GPL
@@ -143,6 +143,54 @@ true
%defattr(-,root,root)
%changelog
* Wed Apr 30 2025 Brian Read <brianr@koozali.org> 11.0.0-79.sme
- Add code in SrvMngr to take note of user panel setting
* Thu Apr 17 2025 Brian Read <brianr@koozali.org> 11.0.0-78.sme
- typo in remoteaccess panel
- Fix crash in veiwlogfiles if viewlogfiles key not in DB
* Sat Apr 12 2025 Brian Read <brianr@koozali.org> 11.0.0-77.sme
- Sort out local and pulic access setting in remote panel [SME: 12988]
- caching problem, plus confusion between normal and public setting in sshd / access in DB
* Fri Apr 11 2025 Brian Read <brianr@koozali.org> 11.0.0-76.sme
- Restore css for roundcube embedded [SME: 12987]
* Wed Apr 09 2025 Brian Read <brianr@koozali.org> 11.0.0-75.sme
- Move review configuration to behind login [SME: 12984]
- Fix crash in port forwarding [SME: 12985]
* Wed Mar 26 2025 Brian Read <brianr@koozali.org> 11.0.0-74.sme
- Fix error message and success message format in Local Networking panel [SME: 12969]
* Tue Mar 25 2025 Brian Read <brianr@koozali.org> 11.0.0-73.sme
- Some changes to error message format in css.
- Fix DB Cache problem with port forwarding panel [SME: 12970]
- Fix error and success message display for port forwarding panel [SME: 12969]
* Mon Mar 24 2025 Brian Read <brianr@koozali.org> 11.0.0-72.sme
- Remove css files from template structure [SME: 12967]
- Rationalise and merge css files
- Adjust some gaps around panels
- Remove HR lines
* Thu Mar 20 2025 Brian Read <brianr@koozali.org> 11.0.0-71.sme
- Sort out navigation menu error on startup [SME: 12946]
- More places where floating panel needed
- Adjust floating panel to make space around it the same
- clean up some css
* Wed Mar 19 2025 Brian Read <brianr@koozali.org> 11.0.0-70.sme
- Re-cast the default theme - use proper koozali logo image, unwind multiple divs
- Enhance responsiveness
- Revert Ibay menu name to Ibays
- Remove legacy SM1 button on header
- Remove "?" access to wiki help on header
* Mon Mar 17 2025 Brian Read <brianr@koozali.org> 11.0.0-69.sme
- Add a total summary report across all existing logs [SME: 12951]
* Mon Mar 17 2025 Brian Read <brianr@koozali.org> 11.0.0-68.sme
- re-write qmailanalog for postfix [SME: 12951]
- Clean up backup.pm