Taxbird-export: Mit Heuristik versuchen PLZ und Stadt aus dem Firmenadressfeld zu...
[kivitendo-erp.git] / SL / Auth.pm
index bf2a6a8..71a333f 100644 (file)
@@ -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 "<pre>", join ('<br>', @msg), "</pre>";
+  } 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 {
@@ -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')")],