use SL::Auth::LDAP;
use SL::User;
+use SL::DBConnect;
use SL::DBUpgrade2;
use SL::DBUtils;
return $self;
}
+sub reset {
+ my ($self, %params) = @_;
+
+ $self->{SESSION} = { };
+ $self->{FULL_RIGHTS} = { };
+ $self->{RIGHTS} = { };
+ $self->{unique_counter} = 0;
+}
+
sub get_user_dbh {
my ($self, $login) = @_;
my %user = $self->read_user($login);
- my $dbh = DBI->connect(
+ my $dbh = SL::DBConnect->connect(
$user{dbconnect},
$user{dbuser},
$user{dbpasswd},
sub authenticate {
$main::lxdebug->enter_sub();
- my $self = shift;
+ my ($self, $login, $password) = @_;
$main::lxdebug->leave_sub();
- my $result = $self->{authenticator}->authenticate(@_);
+ my $result = $login ? $self->{authenticator}->authenticate($login, $password) : ERR_USER;
return OK if $result eq OK;
sleep 5;
return $result;
$main::lxdebug->message(LXDebug->DEBUG1, "Auth::dbconnect DSN: $dsn");
- $self->{dbh} = DBI->connect($dsn, $cfg->{user}, $cfg->{password}, { pg_enable_utf8 => $::locale->is_utf8, AutoCommit => 1 });
+ $self->{dbh} = SL::DBConnect->connect($dsn, $cfg->{user}, $cfg->{password}, { pg_enable_utf8 => $::locale->is_utf8, AutoCommit => 1 });
if (!$may_fail && !$self->{dbh}) {
$main::form->error($main::locale->text('The connection to the authentication database failed:') . "\n" . $DBI::errstr);
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 });
+ my $dbh = SL::DBConnect->connect($dsn, $params{superuser}, $params{superuser_password}, { pg_enable_utf8 => scalar($charset =~ m/^utf-?8$/i) });
if (!$dbh) {
$main::form->error($main::locale->text('The connection to the template database failed:') . "\n" . $DBI::errstr);
}
sub create_or_refresh_session {
- $main::lxdebug->enter_sub();
-
- my $self = shift;
-
- $session_id ||= $self->_create_session_id();
-
- my ($form, $dbh, $query, $sth, $id);
-
- $form = $main::form;
- $dbh = $self->dbconnect();
-
- $dbh->begin_work;
- do_query($::form, $dbh, qq|LOCK auth.session_content|);
-
- $query = qq|SELECT id FROM auth.session WHERE id = ?|;
-
- ($id) = selectrow_query($form, $dbh, $query, $session_id);
-
- if ($id) {
- do_query($form, $dbh, qq|UPDATE auth.session SET mtime = now() WHERE id = ?|, $session_id);
-
- } else {
- do_query($form, $dbh, qq|INSERT INTO auth.session (id, ip_address, mtime) VALUES (?, ?, now())|, $session_id, $ENV{REMOTE_ADDR});
-
- }
-
- $self->save_session($dbh);
-
- $dbh->commit();
-
- $main::lxdebug->leave_sub();
+ $session_id ||= shift->_create_session_id;
}
sub save_session {
+ $::lxdebug->enter_sub;
my $self = shift;
my $provided_dbh = shift;
my $dbh = $provided_dbh || $self->dbconnect(1);
- return unless $dbh;
+ $::lxdebug->leave_sub && return unless $dbh;
$dbh->begin_work unless $provided_dbh;
do_query($::form, $dbh, qq|LOCK auth.session_content|);
do_query($::form, $dbh, qq|DELETE FROM auth.session_content WHERE session_id = ?|, $session_id);
+ my $query = qq|SELECT id FROM auth.session WHERE id = ?|;
+
+ my ($id) = selectrow_query($::form, $dbh, $query, $session_id);
+
+ if ($id) {
+ do_query($::form, $dbh, qq|UPDATE auth.session SET mtime = now() WHERE id = ?|, $session_id);
+ } else {
+ do_query($::form, $dbh, qq|INSERT INTO auth.session (id, ip_address, mtime) VALUES (?, ?, now())|, $session_id, $ENV{REMOTE_ADDR});
+ }
+
if (%{ $self->{SESSION} }) {
my $query = qq|INSERT INTO auth.session_content (session_id, sess_key, sess_value) VALUES (?, ?, ?)|;
my $sth = prepare_query($::form, $dbh, $query);
}
$dbh->commit() unless $provided_dbh;
+ $::lxdebug->leave_sub;
}
sub set_session_value {
my $self = shift;
my $id = shift;
- my $form = $main::from;
+ my $form = $main::form;
my $dbh = $self->dbconnect();
$dbh->begin_work;
}
sub load_rights_for_user {
- $main::lxdebug->enter_sub();
-
- my $self = shift;
- my $login = shift;
-
- my $form = $main::form;
- my $dbh = $self->dbconnect();
+ $::lxdebug->enter_sub;
+ my ($self, $login) = @_;
+ my $dbh = $self->dbconnect;
my ($query, $sth, $row, $rights);
- $rights = {};
+ $rights = { map { $rights->{$_} = 0 } all_rights() };
$query =
qq|SELECT gr."right", gr.granted
LEFT JOIN auth."user" u ON (ug.user_id = u.id)
WHERE u.login = ?)|;
- $sth = prepare_execute_query($form, $dbh, $query, $login);
+ $sth = prepare_execute_query($::form, $dbh, $query, $login);
while ($row = $sth->fetchrow_hashref()) {
$rights->{$row->{right}} |= $row->{granted};
}
$sth->finish();
- map({ $rights->{$_} = 0 unless (defined $rights->{$_}); } SL::Auth::all_rights());
-
- $main::lxdebug->leave_sub();
+ $::lxdebug->leave_sub;
return $rights;
}