initial commit of file from CVS for smeserver-userpanels on Sat Sep 7 21:13:20 AEST 2024

This commit is contained in:
Trevor Batley
2024-09-07 21:13:20 +10:00
parent b36465a447
commit 880ec9c8b2
119 changed files with 5441 additions and 2 deletions

View File

@@ -0,0 +1,74 @@
#----------------------------------------------------------------------
# userpanalForwarding
#----------------------------------------------------------------------
package esmith::FormMagick::Panel::userpanelForwarding;
use strict;
use warnings;
use esmith::AccountsDB;
use esmith::FormMagick;
our @ISA = qw(esmith::FormMagick Exporter);
our $VERSION = sprintf '%d.%03d', q$Revision: 1.0 $ =~ /: (\d+).(\d+)/;
our @EXPORT = qw();
our $db = esmith::AccountsDB->open() or die "Couldn't open AccountsDB\n";;
#get user and untaint
our $UserName = $ENV{'REMOTE_USER'};
$UserName = $1 if ($UserName =~ /^([a-z][\-a-z0-9]*)$/);
sub get_EmailForward
{
return $db->get_prop($UserName, "EmailForward");
}
sub get_ForwardAddress
{
return $db->get_prop($UserName, "ForwardAddress");
}
sub validate_email
{
my $fm = shift;
my $q = $fm->{cgi};
my $Forward = $q->param('EmailForward');
my $ForwardAddress = $q->param('ForwardAddress') || '';
$ForwardAddress =~ s/^\s+|\s+$//g;
my $response = $fm->email_simple($ForwardAddress);
if ($response eq 'OK')
{
return 'OK';
}
elsif ($ForwardAddress eq '')
{
return 'OK' if ($Forward eq 'local');
return 'VALID_EMAIL_NEEDED';
}
else
{
return 'UNACCEPTABLE_CHARS';
}
}
sub change_settings
{
my $fm = shift;
my $q = $fm->{cgi};
$db->set_prop($UserName, 'EmailForward', $q->param("EmailForward"));
$db->set_prop($UserName, 'ForwardAddress', $q->param("ForwardAddress"));
unless ( system('/sbin/e-smith/signal-event', "email-update-quick", $UserName ) == 0 )
{
$fm->error('ERROR_UPDATING');
return undef;
}
$fm->success('SUCCESS');
}
1;

View File

@@ -0,0 +1,108 @@
#----------------------------------------------------------------------
# userpanelPassword
#----------------------------------------------------------------------
package esmith::FormMagick::Panel::userpanelPassword;
use strict;
use warnings;
use esmith::util;
use esmith::AccountsDB;
use esmith::ConfigDB;
use esmith::FormMagick;
our $accountdb = esmith::AccountsDB->open();
our $configdb = esmith::ConfigDB->open();
our @ISA = qw(esmith::FormMagick Exporter);
our $VERSION = sprintf '%d.%03d', q$Revision: 1.0 $ =~ /: (\d+).(\d+)/;
our @EXPORT = qw();
sub check_password {
my $fm = shift;
my $pass1 = shift;
my $check_type;
my $rec = $configdb->get('passwordstrength');
$check_type = ($rec ? ($rec->prop('Users') || 'none') : 'none');
return $fm->validate_password($check_type,$pass1);
}
sub password_compare {
my $fm = shift;
my $pass2 = shift;
my $pass1 = $fm->{cgi}->param('pass');
unless ($pass1 eq $pass2)
{
$fm->error('PASSWORD_NO_MATCH');
return undef;
}
return "OK";
}
sub change_password {
my ($fm) = @_;
my $q = $fm->{cgi};
#get user and untaint
my $UserName = $ENV{'REMOTE_USER'} ||'';
unless (($UserName) = ($UserName =~ /^([a-z][\-\_\.a-z0-9]*)$/ ))
{
$fm->error('YOUR_ACCOUNT_INVALID_CHARS');
return undef;
}
my $oldPass = $q->param('oldPass');
my $pass = $q->param('pass');
unless (($oldPass) = ($oldPass =~ /^(\S+)$/ ))
{
$fm->error('PASSWORD_OLD_INVALID_CHARS');
return undef;
}
unless (($pass) = ($pass =~ /^([ -~]+)$/ ))
{
$fm->error('PASSWORD_INVALID_CHARS');
return undef;
}
my $acct;
unless ($acct = $accountdb->get($UserName))
{
$fm->error('YOUR_ACCOUNT_INVALID');
return undef;
}
unless ($acct->prop('type') eq 'user')
{
$fm->error('YOUR_ACCOUNT_INVALID');
return undef;
}
unless (esmith::util::setUserPasswordRequirePrevious(
$UserName,
$oldPass,
$pass))
{
$fm->error('ERROR_PASSWORD_CHANGE');
return undef;
}
$accountdb->set_prop($UserName, "PasswordSet", "yes");
undef $accountdb;
unless ( system("/sbin/e-smith/signal-event", "password-modify", $UserName ) == 0 )
{
$fm->error('ERROR_UPDATING');
return undef;
}
$fm->success('PASSWORD_CHANGE_SUCCESS', 'Done');
}
1;