package SL::Auth;
-use constant OK => 0;
-use constant ERR_PASSWORD => 1;
-use constant ERR_BACKEND => 100;
+use constant OK => 0;
+use constant ERR_PASSWORD => 1;
+use constant ERR_BACKEND => 100;
+
+use constant SESSION_OK => 0;
+use constant SESSION_NONE => 1;
+use constant SESSION_EXPIRED => 2;
use Digest::MD5 qw(md5_hex);
use IO::File;
}
sub dbconnect {
- $main::lxdebug->enter_sub();
+ $main::lxdebug->enter_sub(2);
my $self = shift;
my $may_fail = shift;
if ($self->{dbh}) {
- $main::lxdebug->leave_sub();
+ $main::lxdebug->leave_sub(2);
return $self->{dbh};
}
$main::form->error($main::locale->text('The connection to the template database failed:') . "\n" . $DBI::errstr);
}
- my $charset = $main::charset;
+ my $charset = $main::dbcharset;
$charset ||= Common::DEFAULT_CHARSET;
my $encoding = $Common::charset_to_db_encoding{$charset};
$encoding ||= 'UNICODE';
$dbh->do($query);
if ($dbh->err) {
+ my $error = $dbh->errstr();
+
+ $query = qq|SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = 'template0'|;
+ my ($cluster_encoding) = $dbh->selectrow_array($query);
+
+ if ($cluster_encoding && ($cluster_encoding =~ m/^(?:UTF-?8|UNICODE)$/i) && ($encoding !~ m/^(?:UTF-?8|UNICODE)$/i)) {
+ $error = $main::locale->text('Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.');
+ }
+
$dbh->disconnect();
- $main::form->error($main::locale->text('The creation of the authentication database failed:') . "\n" . $DBI::errstr);
+ $main::form->error($main::locale->text('The creation of the authentication database failed:') . "\n" . $error);
}
$dbh->disconnect();
my $self = shift;
my $dbh = $self->dbconnect();
- my $charset = $main::charset;
+ my $charset = $main::dbcharset;
$charset ||= Common::DEFAULT_CHARSET;
$dbh->rollback();
my $login = shift;
my $dbh = $self->dbconnect();
- my $query = qq|SELECT cfg.cfg_key, cfg.cfg_value
+ my $query = qq|SELECT u.id, u.login, cfg.cfg_key, cfg.cfg_value
FROM auth.user_config cfg
LEFT JOIN auth."user" u ON (cfg.user_id = u.id)
WHERE (u.login = ?)|;
while (my $ref = $sth->fetchrow_hashref()) {
$user_data{$ref->{cfg_key}} = $ref->{cfg_value};
- $user_data{login} = $login;
+ @user_data{qw(id login)} = @{$ref}{qw(id login)};
}
$sth->finish();
$self->{SESSION} = { };
- return $main::lxdebug->leave_sub() if (!$session_id);
+ if (!$session_id) {
+ $main::lxdebug->leave_sub();
+ return SESSION_NONE;
+ }
my ($dbh, $query, $sth, $cookie, $ref, $form);
if (!$cookie || $cookie->{is_expired} || ($cookie->{ip_address} ne $ENV{REMOTE_ADDR})) {
$self->destroy_session();
$main::lxdebug->leave_sub();
- return;
+ return SESSION_EXPIRED;
}
$query = qq|SELECT sess_key, sess_value FROM auth.session_content WHERE session_id = ?|;
$sth->finish();
$main::lxdebug->leave_sub();
+
+ return SESSION_OK;
}
sub destroy_session {
my $locale = $main::locale;
my @all_rights = (
+ ["--crm", $locale->text("CRM optional software")],
+ ["crm_search", $locale->text("CRM search")],
+ ["crm_new", $locale->text("CRM create customers, vendors and contacts")],
+ ["crm_service", $locale->text("CRM services")],
+ ["crm_admin", $locale->text("CRM admin")],
+ ["crm_adminuser", $locale->text("CRM user")],
+ ["crm_adminstatus", $locale->text("CRM status")],
+ ["crm_email", $locale->text("CRM send email")],
+ ["crm_termin", $locale->text("CRM termin")],
+ ["crm_opportunity", $locale->text("CRM opportunity")],
+ ["crm_knowhow", $locale->text("CRM know how")],
+ ["crm_follow", $locale->text("CRM follow up")],
+ ["crm_notices", $locale->text("CRM notices")],
+ ["crm_other", $locale->text("CRM other")],
["--master_data", $locale->text("Master Data")],
["customer_vendor_edit", $locale->text("Create and edit customers and vendors")],
["part_service_assembly_edit", $locale->text("Create and edit parts, services, assemblies")],
["purchase_order_edit", $locale->text("Create and edit purchase orders")],
["purchase_delivery_order_edit", $locale->text("Create and edit purchase delivery orders")],
["vendor_invoice_edit", $locale->text("Create and edit vendor invoices")],
+ ["--warehouse_management", $locale->text("Warehouse management")],
+ ["warehouse_contents", $locale->text("View warehouse content")],
+ ["warehouse_management", $locale->text("Warehouse management")],
["--general_ledger_cash", $locale->text("General ledger and cash")],
["general_ledger", $locale->text("Transactions, AR transactions, AP transactions")],
["datev_export", $locale->text("DATEV Export")],