Compare commits

...

2 Commits

Author SHA1 Message Date
d776f20736 * Mon Feb 10 2025 Brian Read <brianr@koozali.org> 11.0.0-51.sme
- Replace url in call to webmail by browser url rather than system host and domain [SME: 12910]
- Fix up CSS so not inline
- Sort out reveiw panel missing routines from FormMagic [SME: 12907].
2025-02-12 16:31:17 +00:00
a4668da720 * Sun Feb 09 2025 Brian Read <brianr@koozali.org> 11.0.0-50.sme
- Move all routines from FormMagic still called by SM2 panels to SM2 [SME:12906]
- delete all references to FormMagic
2025-02-09 15:34:41 +00:00
17 changed files with 254 additions and 58 deletions

View File

@@ -275,7 +275,19 @@ a.menu-title {
left: 2px;
}
.roundcube div {
height:462px;
width:85%;
margin-bottom:1%;
}
.roundcube object {
margin-top:1%;
height:95%;
width:100%;
}
/*end*/
EOF
}
}

View File

@@ -17,6 +17,7 @@ use Mojo::Home;
use DBM::Deep;
use Mojo::JWT;
use POSIX qw(strftime);
use Mojolicious::Plugin::Config;
#use Mojolicious::Plugin::I18N;
@@ -27,8 +28,10 @@ use SrvMngr::Model::Main;
use SrvMngr::Plugin::WithoutCache;
use esmith::I18N;
#this is overwrittrn with the "release" by the spec file - release can be "99.el8.sme"
our $VERSION = '';
our $VERSION = '51.el8.sme';
#Extract the release value
if ($VERSION =~ /^(\d+)/) {
$VERSION = $1; # $1 contains the matched numeric digits
@@ -43,6 +46,7 @@ our @EXPORT_OK = qw(
getNavigation ip_number 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
);
has home => sub {
@@ -784,6 +788,29 @@ sub is_normal_password {
}
}
sub gen_locale_date_string
{
my $self = shift;
my $i18n = esmith::I18N->new();
$i18n->setLocale('formmagick', $i18n->preferredLanguage());
return strftime "%c", localtime;
}
sub get_public_ip_address
{
my $self = shift;
my $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
my $sysconfig = $cdb->get('sysconfig');
if ($sysconfig)
{
my $publicIP = $sysconfig->prop('PublicIP');
if ($publicIP)
{
return $publicIP;
}
}
return undef;
}
sub email_simple {
my ($c, $data) = @_;
@@ -866,4 +893,4 @@ sub get_reg_mask {
}
1;
1;

View File

@@ -14,7 +14,7 @@ use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session);
use Text::Template;
use File::Basename;
use esmith::FormMagick qw( gen_locale_date_string );
use SrvMngr qw( gen_locale_date_string );
our $cdb = esmith::ConfigDB->open or die "Couldn't open ConfigDB\n";
# Get some basic info on the current SME install

View File

@@ -12,8 +12,8 @@ use Mojo::Base 'Mojolicious::Controller';
use Locale::gettext;
use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session);
use esmith::FormMagick;
use esmith::util;
use SrvMngr qw( gen_locale_date_string );
our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
sub main {
@@ -41,7 +41,7 @@ sub main {
# get rid of trailing carriage return on last field
chop($dat_datas{ampm});
$dat_datas{'now_string'} = esmith::FormMagick->gen_locale_date_string();
$dat_datas{'now_string'} = gen_locale_date_string;
$c->stash(title => $title, modul => $modul, dat_datas => \%dat_datas);
$c->render('datetime');
} ## end sub main

View File

@@ -14,8 +14,6 @@ use Locale::gettext;
use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session);
#use esmith::util qw(ldapBase);
use esmith::FormMagick::Panel::directory;
our $db = esmith::ConfigDB->open() || die "Couldn't open config db";
sub main {
@@ -75,4 +73,21 @@ sub do_update {
$c->stash(title => $title, modul => $result);
$c->render(template => 'module');
} ## end sub do_update
sub get_ldap_base {
return esmith::util::ldapBase(get_value('','DomainName'));
}
sub get_value {
my $fm = shift;
my $item = shift;
my $record = $db->get($item);
if ($record) {
return $record->value();
}
else {
return '';
}
}
1;

View File

@@ -18,7 +18,6 @@ use esmith::AccountsDB;
use esmith::ConfigDB;
use esmith::DomainsDB;
#use esmith::FormMagick::Panel::ibays;
#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);

View File

@@ -14,7 +14,6 @@ use Mojo::Base 'Mojolicious::Controller';
use Locale::gettext;
use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session);
use esmith::FormMagick::Panel::printers;
#our $adb = esmith::AccountsDB->open || die "Couldn't open accounts db";
my $adb;

View File

@@ -10,7 +10,7 @@ package SrvMngr::Controller::Qmailanalog;
use strict;
use warnings;
use Mojo::Base 'Mojolicious::Controller';
use esmith::FormMagick qw(gen_locale_date_string);
use SrvMngr qw(gen_locale_date_string);
use Locale::gettext;
use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session);

View File

@@ -11,9 +11,7 @@ package SrvMngr::Controller::Quota;
use strict;
use warnings;
use Mojo::Base 'Mojolicious::Controller';
use esmith::FormMagick::Panel::quota;
#use esmith::TestUtils;
use Scalar::Util qw(looks_like_number);
use Locale::gettext;
use SrvMngr::I18N;
@@ -55,9 +53,9 @@ sub do_display {
if ($rec and $rec->prop('type') eq 'user') {
$quo_datas{user} = $user;
$quo_datas{userRec} = $rec;
my $max = esmith::FormMagick::Panel::quota->toBestUnit($rec->prop('MaxBlocks'));
my $max = $c->toBestUnit($rec->prop('MaxBlocks'));
$quo_datas{hardlim} = $max;
$max = esmith::FormMagick::Panel::quota->toBestUnit($rec->prop('MaxBlocksSoftLim'));
$max = $c->toBestUnit($rec->prop('MaxBlocksSoftLim'));
$quo_datas{softlim} = $max;
} ## end if ($rec and $rec->prop...)
} ## end if ($trt eq 'UPD')
@@ -165,4 +163,48 @@ sub toMB
my ($self,$kb) = @_;
return sprintf("%.2f", $kb / 1024);
}
sub toMBNoDecimalPlaces
{
my ($self,$kb) = @_;
return sprintf("%.0f", $kb / 1024);
}
sub toGBNoDecimalPlaces
{
my ($self,$kb) = @_;
return sprintf("%.0f", $kb / 1024 / 1024);
}
sub toKB
{
my ($self,$mb) = @_;
return sprintf("%.0f", $mb * 1024);
}
sub GBtoKB
{
my ($self,$gb) = @_;
return sprintf("%.0f", $gb * 1024 * 1024);
}
sub MBtoKB
{
my ($self,$mb) = @_;
return sprintf("%.0f", $mb * 1024);
}
sub toBestUnit
{
my ($self,$kb) = @_;
return 0 if($kb == 0);
return $kb."K" if($kb < 1024);
return $kb."K" if($kb > 1024 && $kb < 1048576 && $kb % 1024 != 0);
return $self->toMBNoDecimalPlaces($kb)."M" if($kb < 1048576);
return $self->toMBNoDecimalPlaces($kb)."M" if($kb > 1048576
&& ($kb % 1048576 != 0));
return $self->toGBNoDecimalPlaces($kb)."G";
}
1

View File

@@ -17,10 +17,11 @@ use Mojo::Base 'Mojolicious::Controller';
use Locale::gettext;
use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session);
use SrvMngr qw(gen_locale_date_string);
#use SrvMngr::Review_sub qw(print_page);
#use smeserver::Panel::review;
use esmith::FormMagick::Panel::review;
our $db = esmith::ConfigDB->open_ro || die "Couldn't open config db";
our $domains = esmith::DomainsDB->open_ro || die "Couldn't open domains";
our $networks = esmith::NetworksDB->open_ro || die "Couldn't open networks";
@@ -33,7 +34,7 @@ sub main {
my %rvw_datas = ();
$rvw_datas{'servermode'} = (get_value('', 'SystemMode') || '');
$rvw_datas{'localip'} = get_value('$c', 'LocalIP') . '/' . get_value('$c', 'LocalNetmask');
$rvw_datas{'publicip'} = esmith::FormMagick::Panel::review->get_public_ip_address($c);
$rvw_datas{'publicip'} = $c->get_public_ip_address($c);
$rvw_datas{'gateway'} = $c->render_to_string(inline => print2_gateway_stanza($c));
$rvw_datas{'serveronly'} = $c->render_to_string(inline => print2_serveronly_stanza($c));
$rvw_datas{'addlocalnetworks'} = get_local_networks($c);
@@ -151,6 +152,55 @@ sub get2_local_networks {
} ## end else [ if ($numNetworks == 0)]
} ## end sub get2_local_networks
sub get_net_prop {
my $fm = shift;
my $item = shift;
my $prop = shift;
my $record = $networks->get($item);
if ($record) {
return $record->prop($prop);
}
else {
return '';
}
}
sub get_local_networks {
my $fm = shift;
my @nets = $networks->get_all_by_prop('type' => 'network');
my $numNetworks = @nets;
if ($numNetworks == 0) {
return $fm->localise('NO_NETWORKS');
}
else {
my $out = "";
foreach my $network (sort @nets) {
if ($out ne "") {
$out .= "<BR>";
}
$out .= $network->key."/" . get_net_prop($fm, $network->key, 'Mask');
if ( defined get_net_prop($fm, $network->key, 'Router') ) {
$out .= " via " . get_net_prop ($fm, $network->key, 'Router');
}
}
return $out;
}
}
sub get_local_domain
{
return (get_value('','DomainName'));
}
=head2 print2_gateway_stanza
If this system is a server gateway, show the external ip and gateway ip (mojo ver)
@@ -216,4 +266,51 @@ sub print2_dhcp_stanza {
} ## end if (get_prop($c, 'dhcpd'...))
return $out;
} ## end sub print2_dhcp_stanza
sub get_value {
my $fm = shift;
my $item = shift;
my $record = $db->get($item);
if ($record) {
return $record->value();
}
else {
return '';
}
}
sub get_prop {
my $fm = shift if (ref($_[0]) ); # If we're being called in a formmagick context
# The first argument will always be a fm.
#otherwise, we don't want to grab it
my $item = shift;
my $prop = shift;
my $record = $db->get($item);
if ($record) {
return $record->prop($prop);
}
else {
return '';
}
}
sub get_public_ip_address
{
my $self = shift;
my $sysconfig = $db->get('sysconfig');
if ($sysconfig)
{
my $publicIP = $sysconfig->prop('PublicIP');
if ($publicIP)
{
return $publicIP;
}
}
return undef;
}
1;

View File

@@ -2,7 +2,7 @@ package SrvMngr::Controller::Roundcubepanel;
#----------------------------------------------------------------------
# heading : System
# description : Roundcube webmail
# description : Webmail
# navigation : 99999 9999
#----------------------------------------------------------------------
#----------------------------------------------------------------------
@@ -21,10 +21,9 @@ use SrvMngr qw(theme_list init_session);
sub main {
my $c = shift;
$c->app->log->info($c->log_req);
my $title = $c->l('Roundcube Webmail');
my $title = $c->l('Webmail');
my $roundcube_url = $c->param('url');
my $roundcube_height = $c->param('height') | 600;
$c->stash(title => $title, modul => $roundcube_url, height => $roundcube_height);
$c->stash(title => $title, modul => $roundcube_url);
$c->render(template => 'roundcube');
} ## end sub main

View File

@@ -12,15 +12,13 @@ use strict;
use warnings;
use Mojo::Base 'Mojolicious::Controller';
#use esmith::FormMagick qw(gen_locale_date_string);
use Locale::gettext;
use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session);
use esmith::ConfigDB;
#use Time::TAI64;
use File::Basename;
use HTML::Entities;
use esmith::FormMagick qw(gen_locale_date_string);
use SrvMngr qw(gen_locale_date_string);
use File::Temp qw(tempfile);
use constant TRUE => 1;
use constant FALSE => 0;
@@ -295,4 +293,4 @@ sub download_logFile {
);
return undef;
} ## end sub download_logFile
1;
1;

View File

@@ -13,7 +13,6 @@ use Mojo::Base 'Mojolicious::Controller';
use Locale::gettext;
use SrvMngr::I18N;
use SrvMngr qw(theme_list init_session);
use esmith::FormMagick::Panel::workgroup;
our $db = esmith::ConfigDB->open || die "Couldn't open config db";
sub main {

View File

@@ -64,7 +64,7 @@
% </a>
%};
%my $remove_text = l('REMOVE'); # Localized text
%my $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
%$actionRemove = qq{
% <a href="hostentriesd?CsrfDef=$csrf_token&trt=DEL&Hostname=$hostentries_name">

View File

@@ -59,11 +59,11 @@
%= t td => (class => 'sme-border') => "$first $last"
%= t td => (class => 'sme-border') => $vpnaccess
%= t td => (class => 'sme-border') => $fwd
%my ($actionModify, $actionLock, $actionResetPw, $actionRemove,$actionroundcube) = '&nbsp;';
%my $modify_text = l('MODIFY'); # Localized text
%my $csrf_token = "TOKEN"; # CSRF token for security
%my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
%my $password_text = l("PASSWORD_RESET");
% my ($actionModify, $actionLock, $actionResetPw, $actionRemove,$actionroundcube) = '&nbsp;';
% my $modify_text = l('MODIFY'); # Localized text
% my $csrf_token = "TOKEN"; # CSRF token for security
% my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
% my $password_text = l("PASSWORD_RESET");
%if ($useraccounts_user_name eq 'admin') {
%$actionModify = qq{
%<a href="useraccountsd?CsrfDef=$csrf_token&trt=UPS&user=$useraccounts_user_name">
@@ -98,9 +98,9 @@
%</a>
%};
%} elsif ($useraccounts_user_name ne 'admin') {
%my $lock_text = l('ACCOUNT LOCKED'); # Localized text
%my $csrf_token = "TOKEN"; # CSRF token for security
%my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
% my $lock_text = l('ACCOUNT LOCKED'); # Localized text
% my $csrf_token = "TOKEN"; # CSRF token for security
% my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
%$actionLock = qq{
%<a href="useraccountsd?CsrfDef=$csrf_token&trt=LCK&user=$useraccounts_user_name">
% <button type='button' class='sme-lock-button' title='$lock_text' >
@@ -117,8 +117,8 @@
%};
%}
%if ( $removable eq 'yes' ) {
%my $remove_text = l('REMOVE'); # Localized text
%my $csrf_token = "TOKEN"; # CSRF token for security
% my $remove_text = l('REMOVE'); # Localized text
% my $csrf_token = "TOKEN"; # CSRF token for security
%$actionRemove = qq{
%<a href="useraccountsd?CsrfDef=$csrf_token&trt=DEL&user=$useraccounts_user_name">
% <button type='button' class='sme-remove-button' title='$remove_text' >
@@ -128,13 +128,12 @@
%};
%}
%my $thisdomain = session 'SystemName';
%$thisdomain .= ".".session 'DomainName';
%my $roundcube_text = l('Webmail'); # Localized text
%my $csrf_token = "TOKEN"; # CSRF token for security
%my $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
%$actionroundcube = qq{
%<a href="roundcubepanel?CsrfDef=$csrf_token&url=https://$thisdomain/roundcube?_user=$useraccounts_user_name">
% my $thisdomain = $c->req->url->to_abs->host;
% my $roundcube_text = l('Webmail'); # Localized text
% $csrf_token = "TOKEN"; # CSRF token for security
% $useraccounts_user_name = $user->key; # useraccountss_entry name extracted from the data structure
% $actionroundcube = qq{
%<a href="roundcubepanel?CsrfDef=$csrf_token&url=https://$thisdomain/roundcube?_user=$useraccounts_user_name&height=600px">
% <button type='button' class='sme-email-button' title='$roundcube_text' >
% $roundcube_text
% </button>
@@ -156,4 +155,4 @@
%= hidden_field 'trt' => $usr_datas->{trt}
</div>
</div>

View File

@@ -14,25 +14,26 @@
%= $c->render_to_string(inline => stash 'error')
</div>
%}
<h1> roundcube - <%=$title %></h1><br>
<p>If the roundcube panel does not appear after logging in, then please check your password.</p><br />
<h1><%=$title %></h1><br>
<p>If the Webmail panel does not appear after logging in, then please check your password.</p><br />
% my $thisdomain = session 'SystemName';
% $thisdomain .= ".".session 'DomainName';
% my $thisdomain = $c->req->url->to_abs->host;
% my $url = $c->stash('modul');
% if (!$url) {
% $url = $thisdomain."/roundcube";
%}
% my $username = 'admin';
% if ($url =~ /[?&]_user=([^&]+)/) {
% $username = $1;
%}
<a href="<%= "https://".$thisdomain."/" %>roundcube?_user=<%= $username %>"><button class="sme-fullwindow1-button" width=20em title="<%= l('Full Window') %>"><%= l('Full Window') %></button></a>
% my $height = $c->stash('height') | '600px';
% if ($height !~ /px$/) { $height = $height.'px';}
% if ($url eq "") {
% $url = "https://".$thisdomain."/roundcube";
% if (!($url =~ /https:/)) {
% $url = 'https://' . $url;
%}
<object id="roundcube" class="roundcube" data="<%=$url %>" style="width:99%;height:<%= $height %>;" title="<%= $c->stash('title') %>" type="text/html" ><%= $c->stash('title') %> not found</object>
<div class='roundcube'>
<a href="<%= "https://".$thisdomain."/" %>roundcube?_user=<%= $username %>"><button class="sme-fullwindow1-button" width=20em title="<%= l('Full Window') %>"><%= l('Full Window') %></button></a>
<object id="roundcube" data="<%=$url %>" title="<%= $c->stash('title') %>" type="text/html" ><%= $c->stash('title') %> not found</object>
</div>
</div>

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 49
%define release 51
Version: %{version}
Release: %{release}%{?dist}
License: GPL
@@ -143,6 +143,15 @@ true
%defattr(-,root,root)
%changelog
* Mon Feb 10 2025 Brian Read <brianr@koozali.org> 11.0.0-51.sme
- Replace url in call to webmail by browser url rather than system host and domain [SME: 12910]
- Fix up CSS so not inline
- Sort out reveiw panel missing routines from FormMagic [SME: 12907].
* Sun Feb 09 2025 Brian Read <brianr@koozali.org> 11.0.0-50.sme
- Move all routines from FormMagic still called by SM2 panels to SM2 [SME: 12906]
- delete all references to FormMagic
* Fri Feb 07 2025 Brian Read <brianr@koozali.org> 11.0.0-49.sme
- Fix delete of ibay - typo in link
- Move across toMB() sub from formmagick to quota.pm