Compare commits
	
		
			10 Commits
		
	
	
		
			11_0_0-24_
			...
			11_0_0-29_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2b83be6d70 | |||
| 6c1b6ed1f4 | |||
| 3fa8ab5eda | |||
| 55465e3081 | |||
| e5b9a012d9 | |||
| fbdf3170ec | |||
| 87d1d072c0 | |||
| d49db26f26 | |||
| c4f9d67abc | |||
| fe62bd3e39 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -2,3 +2,4 @@ | ||||
| *.log | ||||
| *spec-20* | ||||
| *.tar.xz | ||||
| *.bak | ||||
|   | ||||
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
								
							| @@ -13,7 +13,14 @@ SMEServer Koozali developed git repo for smeserver-manager smeserver | ||||
| <br />https://wiki.koozali.org/Server_Manager_2_Howto_incorporate_a_legacy_contrib | ||||
|  | ||||
| ## Bugzilla | ||||
| Show list of outstanding bugs: [here](https://bugs.koozali.org/buglist.cgi?component=smeserver-manager&product=SME%20Server%2010.X&query_format=advanced&limit=0&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=CONFIRMED) | ||||
| Show list of outstanding bugs: | ||||
| [All](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=NEEDINFO&bug_status=IN_PROGRESS&bug_status=RESOLVED&bug_status=VERIFIED&cf_package=smeserver-manager&classification=SME+Server&list_id=105756&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)   | ||||
| [Confirmed](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=CONFIRMED&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)   | ||||
| [Unconfirmed](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=UNCONFIRMED&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)   | ||||
| [Need info](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=NEEDINFO&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)   | ||||
| [In progress](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=IN_PROGRESS&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)   | ||||
| [Resolved](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=RESOLVED&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)   | ||||
| [Verified](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=VERIFIED&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced) | ||||
|  | ||||
| ## Description | ||||
|  | ||||
| @@ -72,4 +79,4 @@ Dependencies: Relies on specific packages and configurations of SME Server, and | ||||
|  | ||||
| ### Summary | ||||
|  | ||||
| SMEserver-manager is a powerful tool that brings simplicity and efficiency to server management for small to medium-sized enterprises. By providing a centralized, web-based interface, it allows administrators to manage users, network settings, file sharing, email services, web hosting, and more, all from a single location. | ||||
| SMEserver-manager is a powerful tool that brings simplicity and efficiency to server management for small to medium-sized enterprises. By providing a centralized, web-based interface, it allows administrators to manage users, network settings, file sharing, email services, web hosting, and more, all from a single location. | ||||
|   | ||||
| @@ -12,6 +12,9 @@ use strict; | ||||
| use warnings; | ||||
| use Mojo::Base 'Mojolicious::Controller'; | ||||
|  | ||||
| use constant FALSE => 0; | ||||
| use constant TRUE  => 1; | ||||
|  | ||||
| use Locale::gettext; | ||||
| use SrvMngr::I18N; | ||||
|  | ||||
| @@ -36,7 +39,7 @@ sub main { | ||||
|     my $title = $c->l('mai_FORM_TITLE'); | ||||
|  | ||||
|     $mai_datas{'trt'} = 'LIST'; | ||||
|     $mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method'); | ||||
|     $mai_datas{fetchmailmethod} = $c->l($cdb->get_prop('fetchmail', 'Method')); | ||||
|  | ||||
|     $c->stash( title => $title, notif => '', mai_datas => \%mai_datas ); | ||||
|     $c->render(template => 'emailsettings'); | ||||
| @@ -56,11 +59,12 @@ sub do_display { | ||||
|     my ($notif, $dest) = ''; | ||||
|  | ||||
|     $mai_datas{'trt'} = $trt; | ||||
| 	$cdb = esmith::ConfigDB->open || die "Couldn't open config db"; | ||||
|  | ||||
| 		if ( $trt eq 'ACC' )  | ||||
| 	if ( $trt eq 'ACC' )  | ||||
|     { | ||||
| 			$dest = 'emailaccess'; | ||||
| 			$mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method'); | ||||
| 		$dest = 'emailaccess'; | ||||
| 		$mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method'); | ||||
|     } | ||||
|  | ||||
|     if ( $trt eq 'FIL' )  | ||||
| @@ -119,6 +123,7 @@ sub do_update { | ||||
|  | ||||
|     my %mai_datas = (); | ||||
|     $mai_datas{trt} = $trt; | ||||
| 	$cdb = esmith::ConfigDB->open || die "Couldn't open config db"; | ||||
|  | ||||
|     my $title = $c->l('mai_FORM_TITLE'); | ||||
|  | ||||
| @@ -234,7 +239,6 @@ sub do_update { | ||||
|  | ||||
| }; | ||||
|  | ||||
|  | ||||
| sub get_virus_status { | ||||
|  | ||||
|     my ($c, $localise) = @_; | ||||
| @@ -262,10 +266,10 @@ sub localise_status { | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_prop { | ||||
| sub get_db_prop { | ||||
|  | ||||
|     my ($c, $item, $prop, $default) = @_; | ||||
|  | ||||
|      | ||||
|     return $cdb->get_prop($item, $prop) || $default; | ||||
| } | ||||
|  | ||||
| @@ -377,6 +381,48 @@ sub get_current_imap_access { | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_current_smtp_ssl_auth { | ||||
|     my ($c, $localise, $soru, $debug) = @_; | ||||
|     die "Error: \$soru must be either 's' or 'u':$soru.\n" unless $soru eq 's' || $soru eq 'u'; | ||||
| 	 | ||||
| 	$cdb = esmith::ConfigDB->open || die "Couldn't open config db"; | ||||
|  | ||||
|     # Initialize variables with default values | ||||
|     my $smtpStatus = 'none'; | ||||
|     my $smtpAccess = 'none'; | ||||
|     my $smtpAuth = 'disabled';  # assuming 'disabled' as a default | ||||
|      | ||||
|      | ||||
|  | ||||
|     # Fetch SMTP settings based on the value of `$soru` | ||||
|     if ($soru eq "u") { | ||||
|         $smtpStatus = $cdb->get_prop('uqpsmtpd', 'status') || 'enabled'; # Fetch from uqpsmtpd | ||||
|         $smtpAccess = $cdb->get_prop('uqpsmtpd', 'access') || 'public'; | ||||
|         $smtpAuth = 'enabled'; # Assuming authentication is enabled in this context | ||||
|     } else {  | ||||
|         $smtpStatus = $cdb->get_prop('sqpsmtpd', 'status') || 'enabled';  # Fetch from sqpsmtpd | ||||
|         $smtpAccess = $cdb->get_prop('sqpsmtpd', 'access') || 'public';  | ||||
|         $smtpAuth = 'enabled';  # Assuming authentication is enabled in this context | ||||
|     } | ||||
|      | ||||
|     # Retrieve SMTP SSL authentication options | ||||
|     my $options = $c->get_smtp_ssl_auth_options(); | ||||
|  | ||||
|      | ||||
|     if ($soru eq "u" && $debug ) { | ||||
| 		$c->stash('smtp'=>[$smtpStatus,$smtpAccess,$smtpAuth,$soru,$options->{$smtpAccess},$c->l($options->{$smtpAccess})]); | ||||
| #		die "Stop $soru in get_current_smtp_ssl_auth"; | ||||
| 	} | ||||
|      | ||||
|  | ||||
|     # Return appropriate message based on SMTP settings | ||||
|     if ($smtpStatus eq 'enabled' && $smtpAuth eq 'enabled') { | ||||
|         return $localise ? $c->l($options->{$smtpAccess}) : $smtpAccess; | ||||
|     } | ||||
|      | ||||
|     return $localise ? $c->l($options->{disabled}) : 'disabled'; | ||||
| } | ||||
|  | ||||
| sub get_current_smtp_auth { | ||||
|  | ||||
|     my ($c, $localise) = @_; | ||||
| @@ -384,16 +430,13 @@ sub get_current_smtp_auth { | ||||
|     my $smtpStatus = $cdb->get_prop('qpsmtpd', 'status') || 'enabled'; | ||||
|     my $smtpAuth = $cdb->get_prop('qpsmtpd', 'Authentication') || 'enabled'; | ||||
|  | ||||
|     my $smtpsStatus = $cdb->get_prop('sqpsmtpd', 'status') || 'enabled'; | ||||
|     my $smtpsAuth = $cdb->get_prop('sqpsmtpd', 'Authentication') || 'enabled'; | ||||
|  | ||||
|     my $options = get_smtp_auth_options(); | ||||
|  | ||||
|     if ($smtpStatus eq 'enabled' && $smtpAuth eq 'enabled') | ||||
|     if ($smtpStatus eq 'enabled' && $smtpAuth eq 'disabled') | ||||
|     { | ||||
|         return $localise ? $c->l($options->{public}) : 'public'; | ||||
|     } | ||||
|     elsif ($smtpsStatus eq 'enabled' && $smtpsAuth eq 'enabled') | ||||
|     elsif ($smtpStatus eq 'enabled' && $smtpAuth eq 'enabled') | ||||
|     { | ||||
|         return $localise ? $c->l($options->{publicSSL}) : 'publicSSL'; | ||||
|     } | ||||
| @@ -401,6 +444,8 @@ sub get_current_smtp_auth { | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| sub get_current_webmail_status { | ||||
|  | ||||
|   my ($c, $localise) = @_; | ||||
| @@ -500,13 +545,58 @@ sub get_imap_options { | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_smtp_auth_opt { | ||||
|  | ||||
|     my $c = shift; | ||||
|  | ||||
|     return [[ $c->l('mai_SECURE_SMTP') => 'publicSSL'], | ||||
| 	    [ $c->l('Only allow insecure access') => 'public'], | ||||
| 	    [ $c->l('DISABLED') => 'disabled'] | ||||
| 	    ]; | ||||
| } | ||||
|  | ||||
| sub get_smtp_auth_options { | ||||
|      | ||||
|     my $c = shift; | ||||
|  | ||||
|     my %options = ( disabled => 'DISABLED', publicSSL  => 'mai_SECURE_SMTP', public => 'mai_INSECURE_SMTP'); | ||||
|     my %options = ( publicSSL  => 'mai_SECURE_SMTP', public => 'Only allow insecure access',disabled => 'DISABLED'); | ||||
|  | ||||
|     \%options; | ||||
|     return \%options; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_smtp_ssl_auth_options { | ||||
|      | ||||
|     my $c = shift; | ||||
|  | ||||
|     my %options = ( public  => 'Allow public access', local => 'Allow local access only',disabled => 'DISABLED'); | ||||
|  | ||||
|     return \%options; | ||||
| } | ||||
| sub get_smtp_ssl_auth_opt { | ||||
|  | ||||
|     my $c = shift; | ||||
|  | ||||
|     return [[ $c->l('Allow public access') => 'public'], | ||||
| 	    [ $c->l('Allow local access only') => 'local'], | ||||
| 	    [ $c->l('DISABLED') => 'disabled'] | ||||
| 	    ]; | ||||
| } | ||||
|  | ||||
| sub get_key_by_value { | ||||
|     my ($hash_ref, $target_value) = @_; | ||||
|      | ||||
|     # Iterate over the hash | ||||
|     while (my ($key, $value) = each %$hash_ref) { | ||||
|         return $key if $value eq $target_value; | ||||
|     } | ||||
|      | ||||
|     return undef; # Return undef if no match is found | ||||
| } | ||||
| sub get_value_by_key { | ||||
|     my ($hash_ref, $key) = @_; | ||||
|      | ||||
|     return $hash_ref->{$key}; # Return the value associated with the key | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -546,15 +636,6 @@ sub get_retrieval_opt { | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_smtp_auth_opt { | ||||
|  | ||||
|     my $c = shift; | ||||
|  | ||||
|     return [[ $c->l('DISABLED') => 'disabled'], | ||||
| 	    [ $c->l('mai_SECURE_SMTP') => 'publicSSL'], | ||||
| 	    [ $c->l('mai_INSECURE_SMTP') => 'public']]; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_emailunknownuser_options { | ||||
|  | ||||
| @@ -710,18 +791,47 @@ sub change_settings_reception { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     my $smtpAuth = ($c->param('SMTPAuth') || 'public'); | ||||
|     if ($smtpAuth eq 'public') { | ||||
|         $cdb->set_prop("qpsmtpd", "Authentication", "enabled" ); | ||||
|         $cdb->set_prop("sqpsmtpd", "Authentication", "enabled" ); | ||||
|     } elsif ($smtpAuth eq 'publicSSL') { | ||||
|         $cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); | ||||
|         $cdb->set_prop("sqpsmtpd", "Authentication", "enabled" ); | ||||
|     } else { | ||||
|         $cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); | ||||
|         $cdb->set_prop("sqpsmtpd", "Authentication", "disabled" ); | ||||
|     } | ||||
| 	# Need code here for all 3 options - 25, 465 ad 587 | ||||
| 	# Options for 25 are enabled and disabled | ||||
| 	#    for 465 and 587 are (access) public, local and (status) disabled | ||||
| 	 | ||||
|      | ||||
|     #my $smtpAuth = ($c->param('SMTPAuth') || 'public'); | ||||
|     #if ($smtpAuth eq 'public') { | ||||
|         #$cdb->set_prop("qpsmtpd", "Authentication", "enabled" ); | ||||
|         #$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" ); | ||||
|     #} elsif ($smtpAuth eq 'publicSSL') { | ||||
|         #$cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); | ||||
|         #$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" ); | ||||
|     #} else { | ||||
|         #$cdb->set_prop("qpsmtpd", "Authentication", "disabled" ); | ||||
|         #$cdb->set_prop("sqpsmtpd", "Authentication", "disabled" ); | ||||
|     #} | ||||
|  | ||||
| 	my @keys = qw(qpsmtpd uqpsmtpd sqpsmtpd); | ||||
|  | ||||
| 	foreach my $key (@keys) { | ||||
| 		my $param_name = $key eq 'qpsmtpd' ? 'SMTPAuth'  | ||||
| 						  : $key eq 'uqpsmtpd' ? 'uSMTPAuth' | ||||
| 						  : 'sSMTPAuth';  # Defaults to 'sSMTPAuth' for 'sqpsmtpd' | ||||
| 		my $SMTPAuth = $c->param($param_name); | ||||
| 		if ($SMTPAuth eq 'disabled') { | ||||
| 			$cdb->set_prop($key, 'status', 'disabled'); | ||||
| 			$cdb->set_prop($key, 'access', 'disabled'); | ||||
| 		} else { | ||||
| 			$cdb->set_prop($key, 'status', 'enabled'); | ||||
| 			if ($key eq 'qpsmtpd') { | ||||
| 				my $auth_status = $SMTPAuth eq 'publicSSL' ? 'enabled' : 'disabled'; | ||||
| 				$cdb->set_prop($key, 'Authentication', $auth_status); | ||||
| 				$cdb->set_prop($key, 'access', 'public'); | ||||
| 			} else { | ||||
| 				$cdb->set_prop($key, 'Authentication', 'enabled'); | ||||
| 				my $auth_key = ($key eq 'uqpsmtpd') ? 'uSMTPAuth' : 'sSMTPAuth'; | ||||
| 				my $access_value = $c->param($auth_key) eq 'public' ? 'public' : 'local'; | ||||
| 				$cdb->set_prop($key, 'access', $access_value); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|     unless ( system( "/sbin/e-smith/signal-event", "email-update" ) == 0 ) | ||||
|     { | ||||
| 	return $c->l('mai_ERROR_UPDATING_CONFIGURATION'); | ||||
| @@ -762,7 +872,7 @@ sub change_settings_delivery { | ||||
| sub change_settings_access { | ||||
|  | ||||
|     my $c = shift; | ||||
| 	  $cdb = esmith::ConfigDB->open || die "Couldn't open config db"; | ||||
| 	$cdb = esmith::ConfigDB->open || die "Couldn't open config db"; | ||||
|      | ||||
|     my $pop3Access = ($c->param('POPAccess') || 'private'); | ||||
|     if ($pop3Access eq 'disabled') { | ||||
| @@ -919,4 +1029,4 @@ sub validate_smarthost { | ||||
| } | ||||
|  | ||||
|  | ||||
| 1; | ||||
| 1; | ||||
| @@ -26,165 +26,182 @@ use Socket qw( inet_aton ); | ||||
|  | ||||
| #our @ISA = qw(esmith::FormMagick Exporter); | ||||
|  | ||||
| our @EXPORT = qw( networkAccess_list passwordLogin_list get_ssh_permit_root_login get_ssh_access get_telnet_mode | ||||
| 		get_ftp_access  get_ftp_password_login_access | ||||
| 		get_value get_prop get_ssh_password_auth | ||||
| 		validate_network_and_mask ip_number_or_blank subnet_mask_or_blank | ||||
| 		get_ipsecrw_sessions pptp_and_dhcp_range | ||||
| ); | ||||
| our @EXPORT = | ||||
|   qw( networkAccess_list passwordLogin_list get_ssh_permit_root_login get_ssh_access get_telnet_mode | ||||
|   get_ftp_access  get_ftp_password_login_access | ||||
|   get_value get_prop get_ssh_password_auth | ||||
|   validate_network_and_mask ip_number_or_blank subnet_mask_or_blank | ||||
|   get_ipsecrw_sessions pptp_and_dhcp_range | ||||
|   ); | ||||
|  | ||||
| #		get_pptp_sessions | ||||
|  | ||||
| our $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|  | ||||
|  | ||||
| sub main { | ||||
|  | ||||
|     my $c = shift; | ||||
|     $c->app->log->info($c->log_req); | ||||
|     $c->app->log->info( $c->log_req ); | ||||
|  | ||||
|     my $title = $c->l('rma_FORM_TITLE'); | ||||
|     my $notif = ''; | ||||
|     my $title     = $c->l('rma_FORM_TITLE'); | ||||
|     my $notif     = ''; | ||||
|     my %rma_datas = (); | ||||
|  | ||||
| 	$db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|  | ||||
|     #$rma_datas{ipsecrwSess}  = $c->get_ipsecrw_sessions(); | ||||
|     #$rma_datas{pptpSessions} = $c->get_pptp_sessions(); | ||||
|     $rma_datas{sshAccess} = $c->get_ssh_access(); | ||||
|     $rma_datas{sshPermitRootLogin} = $c->get_ssh_permit_root_login(); | ||||
|     $rma_datas{sshAccess}                 = $c->get_ssh_access(); | ||||
|     $rma_datas{sshPermitRootLogin}        = $c->get_ssh_permit_root_login(); | ||||
|     $rma_datas{sshPasswordAuthentication} = $c->get_ssh_password_auth(); | ||||
|     $rma_datas{sshTCPPort} = $c->get_ssh_port(); | ||||
|     $rma_datas{ftpAccess} = $c->get_ftp_access(); | ||||
|     $rma_datas{ftpPasswordAccess} = $c->get_ftp_password_login_access(); | ||||
|     $rma_datas{sshTCPPort}                = $c->get_ssh_port(); | ||||
|     $rma_datas{ftpAccess}                 = $c->get_ftp_access(); | ||||
|     $rma_datas{ftpPasswordAccess}         = $c->get_ftp_password_login_access(); | ||||
|  | ||||
|     #$rma_datas{telnetAccess} = $c->get_telnet_access; | ||||
|  | ||||
|     $c->stash( title => $title, notif => $notif, rma_datas => \%rma_datas ); | ||||
|     $c->render(template => 'remoteaccess'); | ||||
|  | ||||
| }; | ||||
|     $c->render( template => 'remoteaccess' ); | ||||
|  | ||||
| } | ||||
|  | ||||
| sub do_action { | ||||
|  | ||||
|     my $c = shift; | ||||
|     $c->app->log->info($c->log_req); | ||||
|     $c->app->log->info( $c->log_req ); | ||||
|  | ||||
|     my $title = $c->l('rma_FORM_TITLE'); | ||||
|     my ($result, $res, $trt) = ''; | ||||
|     my ( $result, $res, $trt ) = ''; | ||||
|     my %rma_datas = (); | ||||
|  | ||||
|     $rma_datas{ipsecrwSess}  = ($c->param ('IpsecrwSess') || ''); | ||||
|     $rma_datas{ipsecrwReset}  = ($c->param ('IpsecrwReset') || ''); | ||||
| 	$db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|  | ||||
|     $rma_datas{ipsecrwSess}  = ( $c->param('IpsecrwSess')  || '' ); | ||||
|     $rma_datas{ipsecrwReset} = ( $c->param('IpsecrwReset') || '' ); | ||||
|  | ||||
|     #$rma_datas{pptpSessions} = ($c->param ('PptpSessions') || '0'); | ||||
|  | ||||
|     $rma_datas{validFromNetwork} = ($c->param ('ValidFromNetwork') || ''); | ||||
|     $rma_datas{validFromMask} = ($c->param ('ValidFromMask') || ''); | ||||
|     $rma_datas{validFromNetwork} = ( $c->param('ValidFromNetwork') || '' ); | ||||
|     $rma_datas{validFromMask}    = ( $c->param('ValidFromMask')    || '' ); | ||||
| ##	my @remove = $q->param('validFromRemove');  ???????? the first one only !! | ||||
|     my @vals = $c->param ('Remove_nets'); | ||||
|     my @vals = $c->param('Remove_nets'); | ||||
|     $rma_datas{remove_nets} = join ',', @vals; | ||||
|  | ||||
|     $rma_datas{sshaccess} = ($c->param ('SshAccess') || 'off'); | ||||
|     $rma_datas{sshPermitRootLogin} = ($c->param ('SshPermitRootLogin') || 'no'); | ||||
|     $rma_datas{sshPasswordAuthentication} = ($c->param ('SshPasswordAuthentication') || 'no'); | ||||
|     $rma_datas{sshTCPPort} = ($c->param ('SshTCPPort') || '22'); | ||||
|     $rma_datas{sshaccess} = ( $c->param('SshAccess') || 'off' ); | ||||
|     $rma_datas{sshPermitRootLogin} = | ||||
|       ( $c->param('SshPermitRootLogin') || 'no' ); | ||||
|     $rma_datas{sshPasswordAuthentication} = | ||||
|       ( $c->param('SshPasswordAuthentication') || 'no' ); | ||||
|     $rma_datas{sshTCPPort} = ( $c->param('SshTCPPort') || '22' ); | ||||
|  | ||||
|     $rma_datas{ftpAccess} = ($c->param ('FtpAccess') || 'off'); | ||||
|     $rma_datas{ftpPasswordAccess} = ($c->param ('FtpPasswordAccess') || 'private'); | ||||
|     $rma_datas{ftpAccess} = ( $c->param('FtpAccess') || 'off' ); | ||||
|     $rma_datas{ftpPasswordAccess} = | ||||
|       ( $c->param('FtpPasswordAccess') || 'private' ); | ||||
|  | ||||
|     $rma_datas{telnetAccess} = ($c->param ('TelnetAccess') || 'off'); | ||||
|     $rma_datas{telnetAccess} = ( $c->param('TelnetAccess') || 'off' ); | ||||
|  | ||||
|     # validate | ||||
|     my $v = $c->validation; | ||||
|     return $c->render('remoteaccess') unless $v->has_data; | ||||
|  | ||||
|     #$v->optional('PptpSessions')->num(0, 999)->is_valid; | ||||
|     $v->optional('ValidFromNetwork')->size(7, 15)->is_valid; | ||||
|     $v->optional('ValidFromMask')->size(7, 15)->is_valid; | ||||
|     $v->required('SshTCPPort')->num(1, 65535)->is_valid; | ||||
|     if ( $c->param('ValidFromNetwork') ne "" ) { | ||||
|         $v->optional('ValidFromNetwork')->size( 7, 15 )->is_valid; | ||||
|     } | ||||
|     if ( $c->param('ValidFromMask') ne "" ) { | ||||
|         $v->optional('ValidFromMask')->size( 7, 15 )->is_valid; | ||||
|     } | ||||
|     $v->required('SshTCPPort')->num( 1, 65535 )->is_valid; | ||||
|  | ||||
|     $result .= 'field validation error' if $v->has_error; | ||||
|  | ||||
|     if ( ! $result ) { | ||||
|     if ( !$result ) { | ||||
|  | ||||
| 	# controls | ||||
| 	#$res = pptp_and_dhcp_range( $c, $rma_datas{pptpSessions} ); | ||||
| 	#$result .= $res . ' ' unless $res eq 'OK'; | ||||
|         # controls | ||||
|         #$res = pptp_and_dhcp_range( $c, $rma_datas{pptpSessions} ); | ||||
|         #$result .= $res . ' ' unless $res eq 'OK'; | ||||
|  | ||||
| 	$res = ip_number_or_blank( $c, $rma_datas{validFromNetwork} ); | ||||
| 	$result .= $res . ' ' unless $res eq 'OK'; | ||||
|         $res = ip_number_or_blank( $c, $rma_datas{validFromNetwork} ); | ||||
|         $result .= $res . ' ' unless $res eq 'OK'; | ||||
|  | ||||
| 	$res = subnet_mask_or_blank( $c, $rma_datas{validFromMask} ); | ||||
| 	$result .= $res . ' ' unless $res eq 'OK'; | ||||
|         $res = subnet_mask_or_blank( $c, $rma_datas{validFromMask} ); | ||||
|         $result .= $res . ' ' unless $res eq 'OK'; | ||||
|  | ||||
| 	$res = validate_network_and_mask( $c, $rma_datas{validFromNetwork}, $rma_datas{validFromMask} ); | ||||
| 	$result .= $res . ' ' unless $res eq 'OK'; | ||||
|         $res = validate_network_and_mask( | ||||
|             $c, | ||||
|             $rma_datas{validFromNetwork}, | ||||
|             $rma_datas{validFromMask} | ||||
|         ); | ||||
|         $result .= $res . ' ' unless $res eq 'OK'; | ||||
|  | ||||
| 	#$result .= ' blocked for testing !' . $rma_datas{remove_nets}; | ||||
|         #$result .= ' blocked for testing !' . $rma_datas{remove_nets}; | ||||
|     } | ||||
|  | ||||
|     if ( ! $result ) { | ||||
|     if ( !$result ) { | ||||
|         $res = change_settings( $c, %rma_datas ); | ||||
|         $result .= $res unless $res eq 'OK'; | ||||
|     } | ||||
|  | ||||
|     if ( ! $result ) { | ||||
|         $result = $c->l('rma_ACTION_SUCCEEDED');  | ||||
|         $trt = 'SUC'; | ||||
|      | ||||
|     if ( $result eq "" ) { | ||||
|         $result = $c->l('rma_SUCCESS'); | ||||
|         $trt    = 'SUC'; | ||||
|     } | ||||
|  | ||||
|     $c->stash( title => $title, notif => $result, rma_datas => \%rma_datas ); | ||||
|  | ||||
|     if ( $trt ne 'SUC' ) { | ||||
| 	return $c->render(template => 'remoteaccess'); | ||||
|     #return $c->render( template => 'remoteaccess' ); | ||||
|  | ||||
|     if ( $trt eq 'SUC' ) { | ||||
| 		$c->stash( title => $title,modul => $result); | ||||
|         return $c->render( template => 'module' ); | ||||
|     } | ||||
|  | ||||
|     $c->redirect_to('/remoteaccess'); | ||||
|  | ||||
| }; | ||||
|     return $c->render( template => 'remoteaccess' ); | ||||
|     #$c->redirect_to('/remoteaccess'); | ||||
|  | ||||
| } | ||||
|  | ||||
| sub networkAccess_list { | ||||
|     my $c = shift; | ||||
|     return  [[ $c->l('rma_NO_ACCESS') => 'off'],  | ||||
| 	    [ $c->l('NETWORKS_ALLOW_LOCAL') => 'private'],  | ||||
| 	    [ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public']]; | ||||
|     return [ | ||||
|         [ $c->l('rma_NO_ACCESS')         => 'off' ], | ||||
|         [ $c->l('NETWORKS_ALLOW_LOCAL')  => 'private' ], | ||||
|         [ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public' ] | ||||
|     ]; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub passwordLogin_list { | ||||
|     my $c = shift; | ||||
|     return  [[$c->l('rma_PASSWORD_LOGIN_PRIVATE') => 'private'], | ||||
| 	     [$c->l('rma_PASSWORD_LOGIN_PUBLIC') => 'public']]; | ||||
|     return [ | ||||
|         [ $c->l('rma_PASSWORD_LOGIN_PRIVATE') => 'private' ], | ||||
|         [ $c->l('rma_PASSWORD_LOGIN_PUBLIC')  => 'public' ] | ||||
|     ]; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_prop { | ||||
|  | ||||
|   my ($c, $item, $prop) = @_; | ||||
|   warn "You must specify a record key"    unless $item; | ||||
|   warn "You must specify a property name" unless $prop; | ||||
|   my $record = $db->get($item) or warn "Couldn't get record for $item"; | ||||
|   return $record ? $record->prop($prop) : undef; | ||||
|     my ( $c, $item, $prop ) = @_; | ||||
|     warn "You must specify a record key"    unless $item; | ||||
|     warn "You must specify a property name" unless $prop; | ||||
|     my $record = $db->get($item) or warn "Couldn't get record for $item"; | ||||
|     return $record ? $record->prop($prop) : undef; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_value { | ||||
|  | ||||
|   my $c = shift; | ||||
|   my $item = shift; | ||||
|   return ($db->get($item)->value()); | ||||
|     my $c    = shift; | ||||
|     my $item = shift; | ||||
|     return ( $db->get($item)->value() ); | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_ftp_access { | ||||
|  | ||||
|     my $status = get_prop('','ftp','status') || 'disabled'; | ||||
|     my $status = get_prop( '', 'ftp', 'status' ) || 'disabled'; | ||||
|     return 'off' unless $status eq 'enabled'; | ||||
|  | ||||
|     my $access = get_prop('','ftp','access') || 'private'; | ||||
|     return ($access  eq 'public') ? 'normal' : 'private'; | ||||
|     my $access = get_prop( '', 'ftp', 'access' ) || 'private'; | ||||
|     return ( $access eq 'public' ) ? 'normal' : 'private'; | ||||
| } | ||||
|  | ||||
|  | ||||
| #sub get_pptp_sessions { | ||||
| #  my $status = get_prop('','pptpd','status'); | ||||
| #  if (defined($status) && ($status eq 'enabled')) { | ||||
| @@ -192,314 +209,317 @@ sub get_ftp_access { | ||||
| #  return '0'; | ||||
| #} | ||||
|  | ||||
|  | ||||
| sub get_ssh_permit_root_login { | ||||
|     return(get_prop('','sshd','PermitRootLogin') || 'no'); | ||||
|     return ( get_prop( '', 'sshd', 'PermitRootLogin' ) || 'no' ); | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_ssh_password_auth { | ||||
|     return(get_prop('','sshd','PasswordAuthentication') || 'yes'); | ||||
|     return ( get_prop( '', 'sshd', 'PasswordAuthentication' ) || 'yes' ); | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_ssh_access { | ||||
|  | ||||
|   my $status = get_prop('','sshd','status'); | ||||
|   if (defined($status) && ($status eq 'enabled')) { | ||||
|     my $access = get_prop('','sshd','access'); | ||||
|     $access = ($access eq 'public') ? 'public' : 'private'; | ||||
|     return($access); | ||||
|   } | ||||
|   else { | ||||
|     return('off'); | ||||
|   } | ||||
|     my $status = get_prop( '', 'sshd', 'status' ); | ||||
|     if ( defined($status) && ( $status eq 'enabled' ) ) { | ||||
|         my $access = get_prop( '', 'sshd', 'access' ); | ||||
|         $access = ( $access eq 'public' ) ? 'public' : 'private'; | ||||
|         return ($access); | ||||
|     } | ||||
|     else { | ||||
|         return ('off'); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_ssh_port { | ||||
|     return(get_prop('$c','sshd','TCPPort') || '22'); | ||||
|     return ( get_prop( '$c', 'sshd', 'TCPPort' ) || '22' ); | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_ftp_password_login_access { | ||||
|  | ||||
|     my $status = get_prop('','ftp','status') || 'disabled'; | ||||
|     my $status = get_prop( '', 'ftp', 'status' ) || 'disabled'; | ||||
|     return 'private' unless $status eq 'enabled'; | ||||
|  | ||||
|     my $access = get_prop('','ftp','LoginAccess') || 'private'; | ||||
|     my $access = get_prop( '', 'ftp', 'LoginAccess' ) || 'private'; | ||||
|  | ||||
|     return ($access  eq 'public') ? 'public' : 'private'; | ||||
|     return ( $access eq 'public' ) ? 'public' : 'private'; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_telnet_mode { | ||||
|  | ||||
|   my $telnet = $db->get('telnet'); | ||||
|   return('off') unless $telnet; | ||||
|   my $status = $telnet->prop('status') || 'disabled'; | ||||
|   return('off') unless $status eq 'enabled'; | ||||
|   my $access = $telnet->prop('access') || 'private'; | ||||
|   return ($access eq "public") ? "public" : "private"; | ||||
|     my $telnet = $db->get('telnet'); | ||||
|     return ('off') unless $telnet; | ||||
|     my $status = $telnet->prop('status') || 'disabled'; | ||||
|     return ('off') unless $status eq 'enabled'; | ||||
|     my $access = $telnet->prop('access') || 'private'; | ||||
|     return ( $access eq "public" ) ? "public" : "private"; | ||||
| } | ||||
|  | ||||
| sub get_ipsecrw_sessions { | ||||
|  | ||||
| sub get_ipsecrw_sessions  { | ||||
|  | ||||
|   my $status = $db->get('ipsec')->prop('RoadWarriorStatus'); | ||||
|   if (defined($status) && ($status eq 'enabled')) { | ||||
|     return($db->get('ipsec')->prop('RoadWarriorSessions') || '0'); | ||||
|   } | ||||
|   else { | ||||
|     return('0'); | ||||
|   } | ||||
|     my $status = $db->get('ipsec')->prop('RoadWarriorStatus'); | ||||
|     if ( defined($status) && ( $status eq 'enabled' ) ) { | ||||
|         return ( $db->get('ipsec')->prop('RoadWarriorSessions') || '0' ); | ||||
|     } | ||||
|     else { | ||||
|         return ('0'); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| sub get_ipsecrw_status { | ||||
|  | ||||
|   return undef unless ( $db->get('ipsec')); | ||||
|   return $db->get('ipsec')->prop('RoadWarriorStatus'); | ||||
|     return undef unless ( $db->get('ipsec') ); | ||||
|     return $db->get('ipsec')->prop('RoadWarriorStatus'); | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| sub pptp_and_dhcp_range { | ||||
|  | ||||
|   my $c = shift; | ||||
|   my $val = shift || 0; | ||||
|   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') || ''; | ||||
|     my $c           = shift; | ||||
|     my $val         = shift || 0; | ||||
|     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' )  || ''; | ||||
|  | ||||
|     if ( $dhcp_status eq 'enabled' ) { | ||||
|         my $ip_start     = unpack 'N', inet_aton($dhcp_start); | ||||
|         my $ip_end       = unpack 'N', inet_aton($dhcp_end); | ||||
|         my $ip_count     = $ip_end - $ip_start; | ||||
|         return 'OK' if( $val < $ip_count ); | ||||
|         return $c->l('rma_NUMBER_OF_PPTP_CLIENTS_MUST_BE_LESSER_THAN_NUMBER_OF_IP_IN_DHCP_RANGE'); | ||||
|     } else { | ||||
|         my $ip_start = unpack 'N', inet_aton($dhcp_start); | ||||
|         my $ip_end   = unpack 'N', inet_aton($dhcp_end); | ||||
|         my $ip_count = $ip_end - $ip_start; | ||||
|         return 'OK' if ( $val < $ip_count ); | ||||
|         return $c->l( | ||||
| 'rma_NUMBER_OF_PPTP_CLIENTS_MUST_BE_LESSER_THAN_NUMBER_OF_IP_IN_DHCP_RANGE' | ||||
|         ); | ||||
|     } | ||||
|     else { | ||||
|         return 'OK'; | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| sub _get_valid_from { | ||||
|  | ||||
| 	my $c = shift; | ||||
|     my $c = shift; | ||||
|  | ||||
| 	my $rec = $db->get('httpd-admin'); | ||||
| 	return undef unless($rec); | ||||
| 	my @vals = (split ',', ($rec->prop('ValidFrom') || '')); | ||||
| 	return @vals; | ||||
|     my $rec = $db->get('httpd-admin'); | ||||
|     return undef unless ($rec); | ||||
|     my @vals = ( split ',', ( $rec->prop('ValidFrom') || '' ) ); | ||||
|     return @vals; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub ip_number_or_blank { | ||||
|  | ||||
|     my $c = shift; | ||||
|     my $c  = shift; | ||||
|     my $ip = shift; | ||||
|  | ||||
|     if (!defined($ip) || $ip eq "") { | ||||
| 	return 'OK'; | ||||
|     if ( !defined($ip) || $ip eq "" ) { | ||||
|         return 'OK'; | ||||
|     } | ||||
|     return ip_number($c, $ip); | ||||
|     return ip_number( $c, $ip ); | ||||
| } | ||||
|  | ||||
|  | ||||
| sub subnet_mask_or_blank { | ||||
|  | ||||
|     my $c = shift; | ||||
|     my $c    = shift; | ||||
|     my $mask = shift; | ||||
|  | ||||
|     if (!defined($mask) || $mask eq "") { | ||||
|     if ( !defined($mask) || $mask eq "" ) { | ||||
|         return "OK"; | ||||
|     } | ||||
|  | ||||
|     chomp $mask ; | ||||
|     chomp $mask; | ||||
|  | ||||
|     return ( subnet_mask( $mask ) ne 'OK' ) ? $c->l('rma_INVALID_SUBNET_MASK') . " (" . $mask . ")" : 'OK'; | ||||
|     return ( subnet_mask($mask) ne 'OK' ) | ||||
|       ? $c->l('rma_INVALID_SUBNET_MASK') . " (" . $mask . ")" | ||||
|       : 'OK'; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub validate_network_and_mask { | ||||
|  | ||||
|   my $c = shift; | ||||
|   my $net = shift  || ""; | ||||
|   my $mask = shift || ""; | ||||
|     my $c    = shift; | ||||
|     my $net  = shift || ""; | ||||
|     my $mask = shift || ""; | ||||
|  | ||||
|   if ($net xor $mask) { | ||||
|     return $c->l('rma_ERR_INVALID_PARAMS' . " (" . $net."/".$mask . ")"); | ||||
|   } | ||||
|   return 'OK'; | ||||
|     if ( $net xor $mask ) { | ||||
|         return $c->l( | ||||
|             'rma_ERR_INVALID_PARAMS' . " (" . $net . "/" . $mask . ")" ); | ||||
|     } | ||||
|     return 'OK'; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub change_settings { | ||||
|  | ||||
|     my ($c, %rma_datas) = @_; | ||||
|     my ( $c, %rma_datas ) = @_; | ||||
|  | ||||
|     #------------------------------------------------------------ | ||||
|     # good; go ahead and change the access. | ||||
|     #------------------------------------------------------------ | ||||
|  | ||||
|     my $rec = $db->get('telnet'); | ||||
|     if($rec) { | ||||
|     	if ($rma_datas{telnetAccess} eq "off") { | ||||
| 	    $rec->set_prop('status','disabled'); | ||||
|     	} else { | ||||
| 	    $rec->set_prop('status','enabled'); | ||||
| 	    $rec->set_prop('access', $rma_datas{telnetAccess}); | ||||
|       	} | ||||
|     if ($rec) { | ||||
|         if ( $rma_datas{telnetAccess} eq "off" ) { | ||||
|             $rec->set_prop( 'status', 'disabled' ); | ||||
|         } | ||||
|         else { | ||||
|             $rec->set_prop( 'status', 'enabled' ); | ||||
|             $rec->set_prop( 'access', $rma_datas{telnetAccess} ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     $rec = $db->get('sshd') || $db->new_record('sshd', {type => 'service'}); | ||||
|     $rec->set_prop('TCPPort', $rma_datas{sshTCPPort}); | ||||
|     $rec->set_prop('status', ( $rma_datas{sshaccess} eq "off" ? 'disabled' : 'enabled')); | ||||
|     $rec->set_prop('access', $rma_datas{sshaccess}); | ||||
|     $rec->set_prop('PermitRootLogin', $rma_datas{sshPermitRootLogin}); | ||||
|     $rec->set_prop('PasswordAuthentication', $rma_datas{sshPasswordAuthentication}); | ||||
|  | ||||
|     $rec = $db->get('sshd') || $db->new_record( 'sshd', { type => 'service' } ); | ||||
|     $rec->set_prop( 'TCPPort', $rma_datas{sshTCPPort} ); | ||||
|     $rec->set_prop( 'status', | ||||
|         ( $rma_datas{sshaccess} eq "off" ? 'disabled' : 'enabled' ) ); | ||||
|     $rec->set_prop( 'access',          $rma_datas{sshaccess} ); | ||||
|     $rec->set_prop( 'PermitRootLogin', $rma_datas{sshPermitRootLogin} ); | ||||
|     $rec->set_prop( 'PasswordAuthentication', | ||||
|         $rma_datas{sshPasswordAuthentication} ); | ||||
|  | ||||
|     $rec = $db->get('ftp'); | ||||
|     if($rec) { | ||||
|     	if ($rma_datas{ftpAccess} eq "off") { | ||||
| 	    $rec->set_prop('status', 'disabled'); | ||||
| 	    $rec->set_prop('access', 'private'); | ||||
| 	    $rec->set_prop('LoginAccess', 'private'); | ||||
|     	} elsif ($rma_datas{ftpAccess} eq "normal") { | ||||
| 	    $rec->set_prop('status', 'enabled'); | ||||
| 	    $rec->set_prop('access', 'public'); | ||||
| 	    $rec->set_prop('LoginAccess', $rma_datas{ftpPasswordAccess}); | ||||
|     	} else { | ||||
| 	    $rec->set_prop('status', 'enabled'); | ||||
| 	    $rec->set_prop('access', 'private'); | ||||
| 	    $rec->set_prop('LoginAccess', $rma_datas{ftpPasswordAccess}); | ||||
|     	} | ||||
|     if ($rec) { | ||||
|         if ( $rma_datas{ftpAccess} eq "off" ) { | ||||
|             $rec->set_prop( 'status',      'disabled' ); | ||||
|             $rec->set_prop( 'access',      'private' ); | ||||
|             $rec->set_prop( 'LoginAccess', 'private' ); | ||||
|         } | ||||
|         elsif ( $rma_datas{ftpAccess} eq "normal" ) { | ||||
|             $rec->set_prop( 'status',      'enabled' ); | ||||
|             $rec->set_prop( 'access',      'public' ); | ||||
|             $rec->set_prop( 'LoginAccess', $rma_datas{ftpPasswordAccess} ); | ||||
|         } | ||||
|         else { | ||||
|             $rec->set_prop( 'status',      'enabled' ); | ||||
|             $rec->set_prop( 'access',      'private' ); | ||||
|             $rec->set_prop( 'LoginAccess', $rma_datas{ftpPasswordAccess} ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #	if ($rma_datas{pptpSessions} == 0) { | ||||
| #	$db->get('pptpd')->set_prop('status', 'disabled'); | ||||
| #    } else { | ||||
| #	$db->get('pptpd')->set_prop('status', 'enabled'); | ||||
| #	$db->get('pptpd')->set_prop('sessions', $rma_datas{pptpSessions}); | ||||
| #    } | ||||
|     #	if ($rma_datas{pptpSessions} == 0) { | ||||
|     #	$db->get('pptpd')->set_prop('status', 'disabled'); | ||||
|     #    } else { | ||||
|     #	$db->get('pptpd')->set_prop('status', 'enabled'); | ||||
|     #	$db->get('pptpd')->set_prop('sessions', $rma_datas{pptpSessions}); | ||||
|     #    } | ||||
|  | ||||
|     if ( $rma_datas{validFromNetwork} && $rma_datas{validFromMask} ) { | ||||
| 	unless (add_new_valid_from( $c, $rma_datas{validFromNetwork}, $rma_datas{validFromMask} )) { | ||||
| 	    return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'new net'; | ||||
| 	} | ||||
|         unless ( | ||||
|             add_new_valid_from( | ||||
|                 $c, | ||||
|                 $rma_datas{validFromNetwork}, | ||||
|                 $rma_datas{validFromMask} | ||||
|             ) | ||||
|           ) | ||||
|         { | ||||
|             return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'new net'; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     if ( $rma_datas{remove_nets} ) { | ||||
| 	unless (remove_valid_from( $c, $rma_datas{remove_nets} )) { | ||||
| 	    return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'del net'; | ||||
| 	} | ||||
|         unless ( remove_valid_from( $c, $rma_datas{remove_nets} ) ) { | ||||
|             return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'del net'; | ||||
|         } | ||||
|     } | ||||
|    | ||||
|  | ||||
|     # reset ipsec roadwarrior CA,server,client certificates | ||||
|     if ($rma_datas{ipsecrwReset}) { | ||||
| 	system('/sbin/e-smith/roadwarrior', 'reset_certs') == 0 or | ||||
| 	    return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'rst ipsec'; | ||||
|     if ( $rma_datas{ipsecrwReset} ) { | ||||
|         system( '/sbin/e-smith/roadwarrior', 'reset_certs' ) == 0 | ||||
|           or return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'rst ipsec'; | ||||
|     } | ||||
|  | ||||
|     if ( $rma_datas{ipsecrwSess} ) { | ||||
| 	set_ipsecrw_sessions( $c, $rma_datas{ipsecrwSess} ); | ||||
|         set_ipsecrw_sessions( $c, $rma_datas{ipsecrwSess} ); | ||||
|     } | ||||
|  | ||||
|     unless ( system( "/sbin/e-smith/signal-event", "remoteaccess-update" ) == 0 ) { | ||||
|     unless ( | ||||
|         system( "/sbin/e-smith/signal-event", "remoteaccess-update" ) == 0 ) | ||||
|     { | ||||
|         return $c->l('rma_ERROR_UPDATING_CONFIGURATION'); | ||||
|     } | ||||
|  | ||||
|     return 'OK'; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub set_ipsecrw_sessions { | ||||
|  | ||||
|     my $c = shift; | ||||
|     my $c        = shift; | ||||
|     my $sessions = shift; | ||||
|  | ||||
|     if (defined $sessions) { | ||||
| 	$db->get('ipsec')->set_prop('RoadWarriorSessions', $sessions); | ||||
| 	if (int($sessions) > 0) { | ||||
| 	    $db->get('ipsec')->set_prop('RoadWarriorStatus', 'enabled'); | ||||
| 	} | ||||
|     if ( defined $sessions ) { | ||||
|         $db->get('ipsec')->set_prop( 'RoadWarriorSessions', $sessions ); | ||||
|         if ( int($sessions) > 0 ) { | ||||
|             $db->get('ipsec')->set_prop( 'RoadWarriorStatus', 'enabled' ); | ||||
|         } | ||||
|     } | ||||
|     return ''; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub add_new_valid_from { | ||||
|  | ||||
| 	my $c = shift; | ||||
| 	my $net = shift; | ||||
| 	my $mask = shift; | ||||
|     my $c    = shift; | ||||
|     my $net  = shift; | ||||
|     my $mask = shift; | ||||
|  | ||||
| 	# we transform bit mask to regular mask | ||||
| 	$mask = get_reg_mask( $net, $mask ); | ||||
|   | ||||
| 	my $rec = $db->get('httpd-admin'); | ||||
| 	return $c->error('ERR_NO_RECORD') unless $rec; | ||||
|     # we transform bit mask to regular mask | ||||
|     $mask = get_reg_mask( $net, $mask ); | ||||
|  | ||||
| 	my $prop = $rec->prop('ValidFrom') || ''; | ||||
|     my $rec = $db->get('httpd-admin'); | ||||
|     return $c->error('ERR_NO_RECORD') unless $rec; | ||||
|  | ||||
| 	my @vals = split /,/, $prop; | ||||
| 	return '' if (grep /^$net\/$mask$/, @vals); # already have this entry | ||||
|     my $prop = $rec->prop('ValidFrom') || ''; | ||||
|  | ||||
| 	if ($prop ne '') { | ||||
| 		$prop .= ",$net/$mask"; | ||||
| 	} else { | ||||
| 		$prop = "$net/$mask"; | ||||
| 	} | ||||
|     my @vals = split /,/, $prop; | ||||
|     return '' if ( grep /^$net\/$mask$/, @vals );    # already have this entry | ||||
|  | ||||
| 	$rec->set_prop('ValidFrom', $prop); | ||||
|     if ( $prop ne '' ) { | ||||
|         $prop .= ",$net/$mask"; | ||||
|     } | ||||
|     else { | ||||
|         $prop = "$net/$mask"; | ||||
|     } | ||||
|  | ||||
| 	return 1; | ||||
|     $rec->set_prop( 'ValidFrom', $prop ); | ||||
|  | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
|  | ||||
| sub remove_valid_from { | ||||
|  | ||||
| 	my $c = shift; | ||||
| 	my $remove_nets = shift; | ||||
|     my $c           = shift; | ||||
|     my $remove_nets = shift; | ||||
|  | ||||
| 	my @remove = split /,/, $remove_nets; | ||||
|     my @remove = split /,/, $remove_nets; | ||||
|  | ||||
| #	my @remove = $c->param('Remove_nets'); | ||||
| 	my @vals = $c->_get_valid_from(); | ||||
|     #	my @remove = $c->param('Remove_nets'); | ||||
|     my @vals = $c->_get_valid_from(); | ||||
|  | ||||
| 	foreach my $entry (@remove) { | ||||
| 	 | ||||
| 	    return undef unless $entry; | ||||
|     foreach my $entry (@remove) { | ||||
|  | ||||
| 	    my ($net, $mask) = split (/\//, $entry); | ||||
|         return undef unless $entry; | ||||
|  | ||||
| 	    unless (@vals)  { | ||||
| 		print STDERR "ERROR: unable to load ValidFrom property from conf db\n"; | ||||
| 		return undef; | ||||
| 	    } | ||||
|         my ( $net, $mask ) = split( /\//, $entry ); | ||||
|  | ||||
| 	    # what if we don't have a mask because someone added an entry from | ||||
| 	    # the command line? by the time we get here, the panel will have | ||||
| 	    # added a 32 bit mask, so we don't know for sure if the value in db | ||||
| 	    # is $net alone or $net/255.255.255.255. we have to check for both | ||||
| 	    # in this special case... | ||||
| 	    @vals = (grep { $entry ne $_ && $net ne $_ } @vals); | ||||
| 	} | ||||
|         unless (@vals) { | ||||
|             print STDERR | ||||
|               "ERROR: unable to load ValidFrom property from conf db\n"; | ||||
|             return undef; | ||||
|         } | ||||
|  | ||||
| 	my $prop; | ||||
| 	if (@vals) { | ||||
| 	    $prop = join ',',@vals; | ||||
| 	} else { | ||||
| 	    $prop = ''; | ||||
| 	} | ||||
|         # what if we don't have a mask because someone added an entry from | ||||
|         # the command line? by the time we get here, the panel will have | ||||
|         # added a 32 bit mask, so we don't know for sure if the value in db | ||||
|         # is $net alone or $net/255.255.255.255. we have to check for both | ||||
|         # in this special case... | ||||
|         @vals = ( grep { $entry ne $_ && $net ne $_ } @vals ); | ||||
|     } | ||||
|  | ||||
| 	$db->get('httpd-admin')->set_prop('ValidFrom', $prop); | ||||
|     my $prop; | ||||
|     if (@vals) { | ||||
|         $prop = join ',', @vals; | ||||
|     } | ||||
|     else { | ||||
|         $prop = ''; | ||||
|     } | ||||
|  | ||||
| 	return 1; | ||||
|     $db->get('httpd-admin')->set_prop( 'ValidFrom', $prop ); | ||||
|  | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
|  | ||||
| 1; | ||||
| 1; | ||||
| @@ -0,0 +1,46 @@ | ||||
| package SrvMngr::Controller::Roundcubepanel; | ||||
|  | ||||
| #---------------------------------------------------------------------- | ||||
| # heading     : System | ||||
| # description : Roundcube webmail | ||||
| # navigation  : 99999 9999 | ||||
| #---------------------------------------------------------------------- | ||||
| #---------------------------------------------------------------------- | ||||
| # name   : roundcubepanel,    method : get,   url : /roundcubepanel,     ctlact : Roundcubepanel#main | ||||
| # | ||||
| # routes : end | ||||
| #---------------------------------------------------------------------- | ||||
|  | ||||
| use strict; | ||||
| use warnings; | ||||
|  | ||||
| use Mojo::Base 'Mojolicious::Controller'; | ||||
|  | ||||
| use Locale::gettext; | ||||
| use SrvMngr::I18N; | ||||
| use SrvMngr qw(theme_list init_session); | ||||
|  | ||||
| #use SrvMngr::Model::Main; | ||||
|  | ||||
|  | ||||
| sub main { | ||||
|  | ||||
|     my $c = shift; | ||||
|     $c->app->log->info($c->log_req); | ||||
|  | ||||
|     my $title = $c->l('Roundcube 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->render(template => 'roundcube'); | ||||
|  | ||||
| } | ||||
|  | ||||
| sub getroundcubeurl { | ||||
| 	my $c = shift; | ||||
| 	my $url = shift; | ||||
| 	return "/smanager/roundcube?url=$url"; | ||||
| } | ||||
|  | ||||
|  | ||||
| 1; | ||||
| @@ -1,12 +1,17 @@ | ||||
| % layout 'default', title => "Sme server 2 - emailreceive"; | ||||
|  | ||||
| % content_for 'module' => begin | ||||
|  | ||||
| % use constant FALSE => 0; | ||||
| % use constant TRUE  => 1; | ||||
|  | ||||
| <div id='module' class='module emailreceive-panel'> | ||||
|  | ||||
|     % if ($config->{debug} == 1) { | ||||
| 	<p> | ||||
| 	%= dumper $c->current_route | ||||
| 	%= dumper $mai_datas | ||||
| 	%= dumper $c->param('SMTPAuth') | ||||
| 	</p> | ||||
|     % } | ||||
|  | ||||
| @@ -26,16 +31,65 @@ | ||||
| 	%=l 'mai_LABEL_MODE' | ||||
| 	</span><span class=input> | ||||
| 	% param 'FetchmailMethod' => $mai_datas->{fetchmailmethod} unless param 'FetchmailMethod'; | ||||
| <!-- | ||||
| 	<pre> | ||||
| 		%= dumper $mai_datas->{fetchmailmethod} | ||||
| 		%= dumper $c->get_retrieval_opt() | ||||
| 		%= param 'FetchmailMethod' | ||||
| 	</pre> | ||||
| --> | ||||
| 	%= select_field 'FetchmailMethod' => $c->get_retrieval_opt(), class => 'input' | ||||
| 	</span></p> | ||||
|  | ||||
| 	%=l 'mai_DESC_SMTP_AUTH_CONTROL' | ||||
| 	%#=l 'mai_DESC_SMTP_AUTH_CONTROL' | ||||
| 	<br /> | ||||
| 	%= l "SMTP port (25) main purpose is to receive emails from another server, STARTTLS is always offered, but auth if offered is only if STARTTLS is also used by client." | ||||
| 	<br /> | ||||
| 	%= l "SMTPS port (465) will require implicit SSL/TLS then authenticate to send." | ||||
| 	<br /> | ||||
| 	%= l "SMTP Submission port (587) will require STARTTLS, then authenticate to send." | ||||
| 	<br /> | ||||
|  | ||||
| 	% my $smtp_mesg=l('SMTP port %u allow client to authenticate:'); | ||||
| 	<p><span class=label> | ||||
| 	%=l 'mai_LABEL_SMTP_AUTH_CONTROL' | ||||
| 		%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));  | ||||
| 	</span><span class=input> | ||||
|     	% param 'SMTPAuth' => $c->get_current_smtp_auth() unless param 'SMTPAuth'; | ||||
| 	%= select_field 'SMTPAuth' => $c->get_smtp_auth_opt(), class => 'input' | ||||
|     	% param 'SMTPAuth' => $c->get_current_smtp_auth( FALSE ) unless param 'SMTPAuth'; | ||||
| <!-- | ||||
| 	<pre> | ||||
| 		%= dumper $c->get_smtp_auth_opt() | ||||
| 		%= dumper $c->get_current_smtp_auth(FALSE) | ||||
| 		%= dumper $c->get_db_prop("qpsmtpd","Authentication") | ||||
| 		%= param 'SMTPAuth' | ||||
| 	</pre> | ||||
| --> | ||||
| 		%= select_field 'SMTPAuth' => $c->get_smtp_auth_opt(), class => 'input' | ||||
| 	</span></p> | ||||
|  | ||||
| 	% my $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:'); | ||||
| 	<p><span class=label> | ||||
| 		%= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465));  | ||||
| 	</span><span class=input> | ||||
| 		% param 'sSMTPAuth' => $c->get_current_smtp_ssl_auth(FALSE,'s', TRUE) unless param 'sSMTPAuth'; | ||||
| 	 | ||||
| 		%= select_field 'sSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input' | ||||
| 	</span></p> | ||||
|  | ||||
| 	%my $smtp_mesg=l('Submission port %u status:'); | ||||
| 	<p><span class=label> | ||||
| 		%= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587));  | ||||
| 	</span><span class=input> | ||||
|     	% param 'uSMTPAuth' => $c->get_current_smtp_ssl_auth(FALSE,'u', TRUE) unless param 'uSMTPAuth'; | ||||
| <!-- | ||||
| 	<pre> | ||||
| 		%= dumper $c->get_smtp_ssl_auth_opt() | ||||
| 		%= dumper $c->get_current_smtp_ssl_auth(FALSE,'s', TRUE) | ||||
| 		%= dumper $c->get_current_smtp_ssl_auth(FALSE,'u', TRUE) | ||||
| 		%= dumper $c->get_db_prop("uqpsmtpd","access") | ||||
| 		%= param 'uSMTPAuth' | ||||
| 	</pre> | ||||
| --> | ||||
| 	%= select_field 'uSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input' | ||||
| 	</span></p> | ||||
|  | ||||
| 	<hr class="sectionbar" /> | ||||
| @@ -110,4 +164,4 @@ | ||||
|     % end     | ||||
|  | ||||
| </div> | ||||
| %end | ||||
| %end | ||||
| @@ -1,9 +1,13 @@ | ||||
| % layout 'default', title => "Sme server 2 - emailsettings"; | ||||
|  | ||||
| % content_for 'module' => begin | ||||
|  | ||||
| % use constant FALSE => 0; | ||||
| % use constant TRUE  => 1; | ||||
|  | ||||
| <div id='module' class='module emailsettings-panel'> | ||||
|  | ||||
|     % if ($config->{debug} == 1) { | ||||
|     % if ($config->{debug} == TRUE) { | ||||
| 	<p> | ||||
| 	%= dumper $c->current_route | ||||
| 	%= dumper $mai_datas | ||||
| @@ -22,19 +26,19 @@ | ||||
| 	<p><span class=label> | ||||
| 	%=l 'mai_LABEL_POP_ACCESS_CONTROL' | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_current_pop3_access( 1 ) | ||||
| 	%= $c->get_current_pop3_access( TRUE ) | ||||
| 	</span></p> | ||||
|  | ||||
| 	<p><span class=label> | ||||
| 	%=l 'mai_LABEL_IMAP_ACCESS_CONTROL' | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_current_imap_access( 1 ) | ||||
| 	%= $c->get_current_imap_access( TRUE ) | ||||
| 	</span></p> | ||||
|  | ||||
| 	<p><span class=label> | ||||
| 	%=l 'mai_LABEL_WEBMAIL' | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_current_webmail_status( 1 ) | ||||
| 	%= $c->get_current_webmail_status( TRUE ) | ||||
| 	</span></p> | ||||
|  | ||||
|     % 	my $btn = l('mai_DESC_STATE_ACCESS_BUTTON'); | ||||
| @@ -51,19 +55,19 @@ | ||||
| 	<p><span class=label> | ||||
| 	%=l 'mai_LABEL_VIRUS_SCAN' | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_virus_status(1) | ||||
| 	%= $c->get_virus_status(TRUE) | ||||
| 	</span></p> | ||||
|  | ||||
| 	<p><span class=label> | ||||
| 	%=l 'mai_LABEL_SPAM_SCAN' | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_spam_status(1) | ||||
| 	%= $c->get_spam_status(TRUE) | ||||
| 	</span></p> | ||||
|  | ||||
| 	<p><span class=label> | ||||
| 	%=l 'mai_LABEL_BLOCK_EXECUTABLE_CONTENT' | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_patterns_status(1) | ||||
| 	%= $c->get_patterns_status(TRUE) | ||||
| 	</span></p> | ||||
|  | ||||
|     % 	my $btn = l('mai_DESC_STATE_FILTERING_BUTTON'); | ||||
| @@ -83,12 +87,28 @@ | ||||
| 	%= $mai_datas->{fetchmailmethod} | ||||
| 	</span></p> | ||||
|  | ||||
| 	% my $smtp_mesg=l('SMTP port %u allow client to authenticate:'); | ||||
| 	<p><span class=label> | ||||
| 	%=l 'mai_LABEL_SMTP_AUTH_CONTROL' | ||||
| 		%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));  | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_current_smtp_auth( 1 ) | ||||
| 	%= $c->get_current_smtp_auth( TRUE ) | ||||
| 	</span></p> | ||||
|  | ||||
| 	% my $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:'); | ||||
| 	<p><span class=label> | ||||
| 		%= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465));  | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_current_smtp_ssl_auth( TRUE, 's', FALSE ) | ||||
| 	</span></p> | ||||
|  | ||||
| 	%my $smtp_mesg=l 'Submission port %u status:'; | ||||
| 	<p><span class=label> | ||||
| 		%= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587));  | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_current_smtp_ssl_auth( TRUE,'u', FALSE ) | ||||
| 	</span></p> | ||||
| 	<br /> | ||||
|  | ||||
|     % 	my $btn = l('mai_DESC_STATE_RECEPTION_BUTTON'); | ||||
|     <div class='center'> | ||||
| 	%= submit_button "$btn", class => 'action' | ||||
| @@ -103,7 +123,7 @@ | ||||
| 	<p><span class=label> | ||||
| 	%=l 'mai_LABEL_UNKNOWN' | ||||
| 	</span><span class=data2> | ||||
| 	%= $c->get_emailunknownuser_status( 1 ) | ||||
| 	%= $c->get_emailunknownuser_status( TRUE ) | ||||
| 	</span></p> | ||||
|  | ||||
| 	<p><span class=label> | ||||
| @@ -127,4 +147,4 @@ | ||||
|     % end     | ||||
|  | ||||
| </div> | ||||
| %end | ||||
| %end | ||||
| @@ -35,6 +35,19 @@ | ||||
|  | ||||
| 	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.5.0/css/flag-icon.min.css"> | ||||
| 	%= stylesheet '/css/sme-jquery-overrides.css' | ||||
| 	 | ||||
| 	<style> | ||||
| 	#busy-indicator { | ||||
| 		display: none; | ||||
| 		margin-top: 10px; | ||||
| 		font-weight: bold; | ||||
| 		color: red; | ||||
| 	} | ||||
| 	.busy { | ||||
| 		cursor: wait; /* Change the cursor to a 'wait' cursor */ | ||||
| 	} | ||||
| 	</style> | ||||
|  | ||||
|  | ||||
| </head> | ||||
|  | ||||
| @@ -94,6 +107,22 @@ | ||||
|     % } | ||||
|  | ||||
| %= javascript '/js/sme-dataTable-setup.js' | ||||
|  | ||||
| 	<script> | ||||
| 		$(document).ready(function() { | ||||
| 			// Handle form submission for any form | ||||
| 			$('form').on('submit', function(event) { | ||||
| 				// Disable the submit button | ||||
| 				$(this).find('button[type="submit"], input[type="submit"]').prop('disabled', true); | ||||
| 				// Show the busy indicator | ||||
| //				$('#busy-indicator').show(); | ||||
| 				 | ||||
| 				// Change the cursor to "wait" | ||||
| 				$('body').addClass('busy'); | ||||
| 			}); | ||||
| 		}); | ||||
| 	</script> | ||||
|  | ||||
|    | ||||
| </body> | ||||
| </html> | ||||
|   | ||||
| @@ -76,11 +76,17 @@ | ||||
|     % 			$actionRemove = "<a href='useraccountsd?CsrfDef=TOKEN&trt=DEL&user=" . $username . "'>" . "<button class='sme-remove-button' title=".l("REMOVE").">".l("REMOVE")."</button></a>";  | ||||
|     %		} | ||||
|     %	    } | ||||
|     %		 | ||||
|     %		my $thisdomain = session 'SystemName'; | ||||
|     %		$thisdomain .= ".".session 'DomainName'; | ||||
|     %#		my $thisdomain = "localhost"; | ||||
|  | ||||
|     	    <td class='sme-border' style="min-width:35em"> | ||||
| 				<%= $c->render_to_string(inline => $actionModify) %> | ||||
| 				<%= $c->render_to_string(inline => $actionResetPw) %> | ||||
| 				<%= $c->render_to_string(inline => $actionLock) %> | ||||
| 				<%= $c->render_to_string(inline => $actionRemove) %> | ||||
| 				<a href="<%= "roundcubepanel/?url=https://".$thisdomain."/" %>roundcube?_user=<%= $username %>"><button class="sme-email-button" title="<%= l('EMAIL') %>"><%= l('EMAIL') %></button></a> | ||||
|     	    </td> | ||||
|     	</tr> | ||||
|     %    } | ||||
|   | ||||
| @@ -0,0 +1,39 @@ | ||||
| % layout 'default', title => "Sme server 2 -  roundcube"; | ||||
|  | ||||
| % content_for 'module' => begin | ||||
|  | ||||
|  | ||||
| <div id='roundcube' class='roundcube roundcube-panel'> | ||||
|     % if ($config->{debug} == 1) { | ||||
| 		<p> | ||||
| 			%= dumper $c->current_route | ||||
| 		</p> | ||||
|     % } | ||||
|     % if ( stash 'error' ) { | ||||
|     	<br><div class=sme-error> | ||||
| 			%= $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 /> | ||||
|  | ||||
|     % my $thisdomain = session 'SystemName'; | ||||
|     % $thisdomain .= ".".session 'DomainName'; | ||||
|     % my $url = $c->stash('modul'); | ||||
|     % 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"; | ||||
| 	%} | ||||
| 	<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> | ||||
|  | ||||
|  | ||||
| %end | ||||
| @@ -2,7 +2,7 @@ Summary: Sme server  navigation module : manager 2 | ||||
| %define name smeserver-manager | ||||
| Name: %{name} | ||||
| %define version 11.0.0 | ||||
| %define release 24 | ||||
| %define release 29 | ||||
| Version: %{version} | ||||
| Release: %{release}%{?dist} | ||||
| License: GPL | ||||
| @@ -113,6 +113,22 @@ true | ||||
| %defattr(-,root,root) | ||||
|  | ||||
| %changelog | ||||
| * Tue Nov 26 2024 Brian Read <brianr@koozali.org> 11.0.0-29.sme | ||||
| - Fix remoteaccess panel, reformat pm file and bring success panel into line with other similar panels [SME: 12747] | ||||
|  | ||||
| * Fri Oct 18 2024 Brian Read <brianr@koozali.org> 11.0.0-28.sme | ||||
| - Add in emailsettings for port 25,465 and 587  [SME: 12750] | ||||
| - Comment out change to localhost for roundcube in _user_list email icon setting [SME: 12751] | ||||
|  | ||||
| * Sun Oct 06 2024 Brian Read <brianr@koozali.org> 11.0.0-27.sme | ||||
| - Add in change to _user_list.html.ep for access to roundcube email from useraccounts [SME: 12751] | ||||
|  | ||||
| * Fri Oct 04 2024 Brian Read <brianr@koozali.org> 11.0.0-26.sme | ||||
| - Add in email link to roundcube from user accounts [SME: 12751] | ||||
|  | ||||
| * Wed Oct 02 2024 Brian Read <brianr@koozali.org> 11.0.0-25.sme | ||||
| - Add in cursor change when save/submit pressed to indicate processing [SME: 12748] | ||||
|  | ||||
| * Wed Oct 02 2024 Brian Read <brianr@koozali.org> 11.0.0-24.sme | ||||
| - Messed up build - finger trouble [SME: 12753] | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user