und die restlichen .pm Module.
[kivitendo-erp.git] / SL / Auth / DB.pm
1 package SL::Auth::DB;
2
3 use DBI;
4
5 #use SL::Auth;
6 use SL::DBUtils;
7
8 use strict;
9
10 sub new {
11   $main::lxdebug->enter_sub();
12
13   my $type = shift;
14   my $self = {};
15
16   $self->{auth} = shift;
17
18   bless $self, $type;
19
20   $main::lxdebug->leave_sub();
21
22   return $self;
23 }
24
25 sub authenticate {
26   $main::lxdebug->enter_sub();
27
28   my $self       = shift;
29   my $login      = shift;
30   my $password   = shift;
31   my $is_crypted = shift;
32
33   my $dbh        = $self->{auth}->dbconnect();
34
35   if (!$dbh) {
36     $main::lxdebug->leave_sub();
37     return SL::Auth->ERR_BACKEND();
38   }
39
40   my $query             = qq|SELECT password FROM auth."user" WHERE login = ?|;
41   my ($stored_password) = $dbh->selectrow_array($query, undef, $login);
42
43   $password        = crypt $password, substr($login, 0, 2)        if (!$password || !$is_crypted);
44   $stored_password = crypt $stored_password, substr($login, 0, 2) if (!$stored_password);
45
46   $main::lxdebug->leave_sub();
47
48   return $password eq $stored_password ? SL::Auth->OK() : SL::Auth->ERR_PASSWORD();
49 }
50
51 sub can_change_password {
52   return 1;
53 }
54
55 sub change_password {
56   $main::lxdebug->enter_sub();
57
58   my $self       = shift;
59   my $login      = shift;
60   my $password   = shift;
61   my $is_crypted = shift;
62
63   my $dbh        = $self->{auth}->dbconnect();
64
65   if (!$dbh) {
66     $main::lxdebug->leave_sub();
67     return SL::Auth->ERR_BACKEND()
68   }
69
70   $password = crypt $password, substr($login, 0, 2) if (!$is_crypted);
71
72   do_query($main::form, $dbh, qq|UPDATE auth."user" SET password = ? WHERE login = ?|, $password, $login);
73
74   $dbh->commit();
75
76   $main::lxdebug->leave_sub();
77
78   return 1;
79 }
80
81 sub verify_config {
82   return 1;
83 }
84
85 1;