X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/5d23fb605bc40f699ab677e6ee13a7e498c9fb14..4602be1fb9b8e38e36a86c40fce59db74c62949e:/SL/Auth.pm diff --git a/SL/Auth.pm b/SL/Auth.pm index 10855e25b..71a333f94 100644 --- a/SL/Auth.pm +++ b/SL/Auth.pm @@ -33,25 +33,57 @@ sub new { return $self; } +sub get_user_dbh { + my ($self, $login) = @_; + my %user = $self->read_user($login); + my $dbh = DBI->connect( + $user{dbconnect}, + $user{dbuser}, + $user{dbpasswd}, + { + pg_enable_utf8 => $::locale->is_utf8, + AutoCommit => 0 + } + ) or $::form->dberror; + + if ($user{dboptions}) { + $dbh->do($user{dboptions}) or $::form->dberror($user{dboptions}); + } + + return $dbh; +} + sub DESTROY { my $self = shift; $self->{dbh}->disconnect() if ($self->{dbh}); } +# form isn't loaded yet, so auth needs it's own error. +sub mini_error { + $::lxdebug->show_backtrace(); + + my ($self, @msg) = @_; + if ($ENV{HTTP_USER_AGENT}) { + print Form->create_http_response(content_type => 'text/html'); + print "
", join ('
', @msg), "";
+ } else {
+ print STDERR "Error: @msg\n";
+ }
+ ::end_of_request();
+}
+
sub _read_auth_config {
$main::lxdebug->enter_sub();
my $self = shift;
- my $form = $main::form;
- my $locale = $main::locale;
-
my $code;
my $in = IO::File->new('config/authentication.pl', 'r');
if (!$in) {
- $form->error($locale->text('The config file "config/authentication.pl" was not found.'));
+ my $locale = Locale->new('en');
+ $self->mini_error($locale->text('The config file "config/authentication.pl" was not found.'));
}
while (<$in>) {
@@ -62,7 +94,8 @@ sub _read_auth_config {
eval $code;
if ($@) {
- $form->error($locale->text('The config file "config/authentication.pl" contained invalid Perl code:') . "\n" . $@);
+ my $locale = Locale->new('en');
+ $self->mini_error($locale->text('The config file "config/authentication.pl" contained invalid Perl code:'), $@);
}
if ($self->{module} eq 'DB') {
@@ -73,17 +106,20 @@ sub _read_auth_config {
}
if (!$self->{authenticator}) {
- $form->error($locale->text('No or an unknown authenticantion module specified in "config/authentication.pl".'));
+ my $locale = Locale->new('en');
+ $self->mini_error($locale->text('No or an unknown authenticantion module specified in "config/authentication.pl".'));
}
my $cfg = $self->{DB_config};
if (!$cfg) {
- $form->error($locale->text('config/authentication.pl: Key "DB_config" is missing.'));
+ my $locale = Locale->new('en');
+ $self->mini_error($locale->text('config/authentication.pl: Key "DB_config" is missing.'));
}
if (!$cfg->{host} || !$cfg->{db} || !$cfg->{user}) {
- $form->error($locale->text('config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".'));
+ my $locale = Locale->new('en');
+ $self->mini_error($locale->text('config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".'));
}
$self->{authenticator}->verify_config();
@@ -106,7 +142,9 @@ sub authenticate_root {
$main::lxdebug->leave_sub();
- return $password eq $admin_password ? OK : ERR_PASSWORD;
+ return OK if $password eq $admin_password;
+ sleep 5;
+ return ERR_PASSWORD;
}
sub authenticate {
@@ -116,7 +154,10 @@ sub authenticate {
$main::lxdebug->leave_sub();
- return $self->{authenticator}->authenticate(@_);
+ my $result = $self->{authenticator}->authenticate(@_);
+ return OK if $result eq OK;
+ sleep 5;
+ return $result;
}
sub dbconnect {
@@ -139,7 +180,7 @@ sub dbconnect {
$main::lxdebug->message(LXDebug->DEBUG1, "Auth::dbconnect DSN: $dsn");
- $self->{dbh} = DBI->connect($dsn, $cfg->{user}, $cfg->{password}, { 'AutoCommit' => 0 });
+ $self->{dbh} = DBI->connect($dsn, $cfg->{user}, $cfg->{password}, { pg_enable_utf8 => $::locale->is_utf8, AutoCommit => 0 });
if (!$may_fail && !$self->{dbh}) {
$main::form->error($main::locale->text('The connection to the authentication database failed:') . "\n" . $DBI::errstr);
@@ -214,17 +255,17 @@ sub create_database {
$main::lxdebug->message(LXDebug->DEBUG1(), "Auth::create_database DSN: $dsn");
- my $dbh = DBI->connect($dsn, $params{superuser}, $params{superuser_password});
-
- if (!$dbh) {
- $main::form->error($main::locale->text('The connection to the template database failed:') . "\n" . $DBI::errstr);
- }
-
my $charset = $main::dbcharset;
$charset ||= Common::DEFAULT_CHARSET;
my $encoding = $Common::charset_to_db_encoding{$charset};
$encoding ||= 'UNICODE';
+ my $dbh = DBI->connect($dsn, $params{superuser}, $params{superuser_password}, { pg_enable_utf8 => $charset =~ m/^utf-?8$/i });
+
+ if (!$dbh) {
+ $main::form->error($main::locale->text('The connection to the template database failed:') . "\n" . $DBI::errstr);
+ }
+
my $query = qq|CREATE DATABASE "$cfg->{db}" OWNER "$cfg->{user}" TEMPLATE "$params{template}" ENCODING '$encoding'|;
$main::lxdebug->message(LXDebug->DEBUG1(), "Auth::create_database query: $query");
@@ -665,6 +706,8 @@ sub all_rights_full {
["--reports", $locale->text('Reports')],
["report", $locale->text('All reports')],
["advance_turnover_tax_return", $locale->text('Advance turnover tax return')],
+ ["--batch_printing", $locale->text("Batch Printing")],
+ ["batch_printing", $locale->text("Batch Printing")],
["--others", $locale->text("Others")],
["email_bcc", $locale->text("May set the BCC field when sending emails")],
["config", $locale->text("Change Lx-Office installation settings (all menu entries beneath 'System')")],
@@ -824,7 +867,7 @@ sub evaluate_rights_ary {
}
}
- $main::lxdebug->enter_sub(2);
+ $main::lxdebug->leave_sub(2);
return $value;
}
@@ -858,7 +901,7 @@ sub _parse_rights_string {
pop @stack;
if (!@stack) {
- $main::lxdebug->enter_sub(2);
+ $main::lxdebug->leave_sub(2);
return 0;
}
@@ -874,7 +917,7 @@ sub _parse_rights_string {
my $result = ($access || (1 < scalar @stack)) ? 0 : evaluate_rights_ary($stack[0]);
- $main::lxdebug->enter_sub(2);
+ $main::lxdebug->leave_sub(2);
return $result;
}