[system] / trunk / webwork2 / lib / WeBWorK / DB / Auth.pm Repository:
ViewVC logotype

Annotation of /trunk/webwork2/lib/WeBWorK/DB/Auth.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 350 - (view) (download) (as text)

1 : sh002i 330 ################################################################################
2 :     # WeBWorK mod_perl (c) 1995-2002 WeBWorK Team, Univeristy of Rochester
3 :     # $Id$
4 :     ################################################################################
5 :    
6 : sh002i 317 package WeBWorK::DB::Auth;
7 :    
8 :     # there should be a `use' line for each database type
9 :     use WeBWorK::DB::GDBM;
10 :    
11 : sh002i 330 # new($invocant, $courseEnv)
12 :     # $invocant implicitly set by caller
13 :     # $courseEnv an instance of CourseEnvironment
14 : sh002i 317 sub new($$) {
15 : sh002i 330 my $invocant = shift;
16 :     my $class = ref($invocant) || $invocant;
17 : sh002i 317 my $courseEnv = shift;
18 : sh002i 330 my $dbModule = fullyQualifiedPackageName($courseEnv->{dbInfo}->{auth_type});
19 : sh002i 317 my $self = {
20 : sh002i 330 password_file => $courseEnv->{dbInfo}->{auth_passwd_file},
21 :     permissions_file => $courseEnv->{dbInfo}->{auth_perm_file},
22 :     keys_file => $courseEnv->{dbInfo}->{auth_keys_file},
23 :     key_timeout => $courseEnv->{sessionKeyTimeout},
24 : sh002i 317 };
25 : sh002i 330 $self->{password_db} = $dbModule->new($self->{password_file});
26 :     $self->{permissions_db} = $dbModule->new($self->{permissions_file});
27 :     $self->{keys_db} = $dbModule->new($self->{keys_file});
28 : sh002i 317 bless $self, $class;
29 :     return $self;
30 :     }
31 :    
32 :     sub fullyQualifiedPackageName($) {
33 :     my $n = shift;
34 : sh002i 330 my $package = __PACKAGE__;
35 : sh002i 317 $package =~ s/([^:]*)$/$n/;
36 :     return $package;
37 :     }
38 :    
39 :     # -----
40 :    
41 : sh002i 337 sub getUsers($) {
42 :     my $self = shift;
43 : sh002i 350 my %all_users;
44 : sh002i 338 if ($self->{password_db}->connect("ro")) {
45 : sh002i 350 $all_users{$_}++ foreach keys %{$self->{password_db}->hashRef};
46 : sh002i 338 $self->{password_db}->disconnect;
47 :     }
48 :     if ($self->{permissions_db}->connect("ro")) {
49 : sh002i 350 $all_users{$_}++ foreach keys %{$self->{permissions_db}->hashRef};
50 : sh002i 338 $self->{permissions_db}->disconnect;
51 :     }
52 :     if ($self->{keys_db}->connect("ro")) {
53 : sh002i 350 $all_users{$_}++ foreach keys %{$self->{keys_db}->hashRef};
54 : sh002i 338 $self->{keys_db}->disconnect;
55 :     }
56 : sh002i 337 return keys %all_users;
57 :     }
58 :    
59 :     # -----
60 :    
61 : sh002i 317 sub getPassword($$) {
62 :     my $self = shift;
63 :     my $user = shift;
64 : sh002i 337 return unless $self->{password_db}->connect("ro");
65 : sh002i 334 my $result = $self->{password_db}->hashRef->{$user};
66 :     $self->{password_db}->disconnect;
67 : sh002i 317 return $result;
68 :     }
69 :    
70 :     sub setPassword($$$) {
71 :     my $self = shift;
72 :     my $user = shift;
73 : sh002i 330 my $password = crypt shift, join "", ('.','/','0'..'9','A'..'Z','a'..'z')[rand 64, rand 64];
74 : sh002i 317 $self->{password_db}->connect("rw");
75 : sh002i 334 $self->{password_db}->hashRef->{$user} = $password;
76 :     $self->{password_db}->disconnect;
77 : sh002i 317 }
78 :    
79 :     sub verifyPassword($$$) {
80 :     my $self = shift;
81 :     my $user = shift;
82 :     my $password = shift;
83 : sh002i 330 my $real_password = $self->getPassword($user);
84 : sh002i 338 return unless defined $real_password;
85 : sh002i 330 $password = crypt $password, $real_password;
86 :     return $password eq $real_password;
87 : sh002i 317 }
88 :    
89 :     sub deletePassword($$) {
90 :     my $self = shift;
91 :     my $user = shift;
92 :     $self->{password_db}->connect("rw");
93 : sh002i 334 delete $self->{password_db}->hashRef->{$user};
94 :     $self->{password_db}->disconnect;
95 : sh002i 317 }
96 :    
97 :     # -----
98 :    
99 :     sub getKey($$) {
100 :     my $self = shift;
101 :     my $user = shift;
102 : sh002i 337 return unless $self->{keys_db}->connect("ro");
103 : sh002i 334 my $result = $self->{keys_db}->hashRef->{$user};
104 :     $self->{keys_db}->disconnect;
105 : sh002i 330 my ($key, $timestamp) = defined $result ? split /\s+/, $result : (undef, undef);
106 : sh002i 345 if (time <= $timestamp+$self->{key_timeout}) {
107 :     return $key;
108 :     } else {
109 :     $self->deleteKey($user);
110 :     return 0;
111 :     }
112 : sh002i 317 }
113 :    
114 : sh002i 345 sub setKey($$$) {
115 : sh002i 317 my $self = shift;
116 :     my $user = shift;
117 :     my $key = shift;
118 :     $self->{keys_db}->connect("rw");
119 : sh002i 345 $self->{keys_db}->hashRef->{$user} = "$key " . time;
120 : sh002i 334 $self->{keys_db}->disconnect;
121 : sh002i 317 }
122 :    
123 : sh002i 345 sub verifyKey($$$) {
124 : sh002i 317 my $self = shift;
125 :     my $user = shift;
126 :     my $key = shift;
127 : sh002i 345 my $real_key = $self->getKey($user);
128 :     return unless defined $real_key;
129 :     if ($key eq $real_key) {
130 : sh002i 340 # update timestamp
131 : sh002i 345 $self->setKey($user, $real_key);
132 : sh002i 330 return 1;
133 :     } else {
134 :     return 0;
135 :     }
136 : sh002i 317 }
137 :    
138 :     sub deleteKey($$) {
139 :     my $self = shift;
140 :     my $user = shift;
141 :     $self->{keys_db}->connect("rw");
142 : sh002i 334 delete $self->{keys_db}->hashRef->{$user};
143 :     $self->{keys_db}->disconnect;
144 : sh002i 317 }
145 :    
146 :     # -----
147 :    
148 :     sub getPermissions($$) {
149 :     my $self = shift;
150 :     my $user = shift;
151 : sh002i 337 return unless $self->{permissions_db}->connect("ro");
152 : sh002i 334 my $result = $self->{permissions_db}->hashRef->{$user};
153 :     $self->{permissions_db}->disconnect;
154 : sh002i 317 return $result;
155 :     }
156 :    
157 :     sub setPermissions($$$) {
158 :     my $self = shift;
159 :     my $user = shift;
160 :     my $permissions = shift;
161 :     $self->{permissions_db}->connect("rw");
162 : sh002i 334 $self->{permissions_db}->hashRef->{$user} = $permissions;
163 :     $self->{permissions_db}->disconnect;
164 : sh002i 317 }
165 :    
166 :     sub deletePermissions($$) {
167 :     my $self = shift;
168 :     my $user = shift;
169 :     $self->{permissions_db}->connect("rw");
170 : sh002i 334 delete $self->{permissions_db}->hashRef->{$user};
171 :     $self->{permissions_db}->disconnect;
172 : sh002i 317 }
173 :    
174 :     # ----- ghetto for stupid functions -----
175 :    
176 :     sub change_user_in_password_file($$$) {
177 :     my $self = shift;
178 :     my $user = shift;
179 :     my $new_user = shift;
180 :     $self->{password_db}->connect("rw");
181 : sh002i 334 my $pwhash = $self->{password_db}->hashRef; # make things easier
182 : sh002i 330 if (exists $pwhash->{$user}) {
183 :     $pwhash->{$new_user} = $pwhash->{$user};
184 :     delete $pwhash->{$user};
185 : sh002i 317 }
186 : sh002i 334 $self->{password_db}->disconnect;
187 : sh002i 317 }
188 :    
189 :     sub change_user_in_permissions_file($$$) {
190 :     my $self = shift;
191 :     my $user = shift;
192 :     my $new_user = shift;
193 :     $self->{permissions_db}->connect("rw");
194 : sh002i 334 my $permhash = $self->{permissions_db}->hashRef; # make things easier
195 : sh002i 330 if (exists $permhash->{$user}) {
196 :     $permhash->{$new_user} = $permhash->{$user};
197 :     delete $permhash->{$user};
198 : sh002i 317 }
199 : sh002i 334 $self->{permissions_db}->disconnect;
200 : sh002i 317 }
201 :    
202 : sh002i 330 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9