[system] / trunk / webwork-modperl / lib / WeBWorK / DB / Auth.pm Repository:
ViewVC logotype

View of /trunk/webwork-modperl/lib/WeBWorK/DB/Auth.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 763 - (download) (as text) (annotate)
Fri Feb 28 23:06:15 2003 UTC (10 years, 2 months ago) by sh002i
File size: 4738 byte(s)
removed stupid functions
-sam

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

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9