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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 350 - (download) (as text) (annotate)
Fri Jun 7 21:42:29 2002 UTC (10 years, 11 months ago) by sh002i
File size: 5231 byte(s)
fixed implementation of getUsers -- untested

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

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9