Parent Directory
|
Revision Log
again, copying current webwork2 code into bw branch
1 ################################################################################ 2 # WeBWorK Online Homework Delivery System 3 # Copyright © 2000-2007 The WeBWorK Project, http://openwebwork.sf.net/ 4 # $CVSHeader: webwork2/lib/Apache/AuthenWeBWorK.pm,v 1.2 2006/06/28 16:19:57 sh002i Exp $ 5 # 6 # This program is free software; you can redistribute it and/or modify it under 7 # the terms of either: (a) the GNU General Public License as published by the 8 # Free Software Foundation; either version 2, or (at your option) any later 9 # version, or (b) the "Artistic License" which comes with this package. 10 # 11 # This program is distributed in the hope that it will be useful, but WITHOUT 12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 13 # FOR A PARTICULAR PURPOSE. See either the GNU General Public License or the 14 # Artistic License for more details. 15 ################################################################################ 16 17 package Apache::AuthenWeBWorK; 18 19 =head1 NAME 20 21 Apache::AuthenWeBWorK - Authenticate against WeBWorK::Authen framework. 22 23 =head1 CONFIGURATION 24 25 PerlSetVar authen_webwork_root /path/to/webwork2 26 PerlSetVar authen_webwork_course "some-course-id" 27 PerlSetVar authen_webwork_module "WeBWorK::Authen::something" 28 29 =cut 30 31 use strict; 32 use warnings; 33 use Apache::Constants qw(:common); 34 35 use WeBWorK::Debug; 36 use WeBWorK::Request; 37 use WeBWorK::ContentGenerator; 38 use WeBWorK::DB; 39 use WeBWorK::Authz; 40 use WeBWorK::Utils qw/runtime_use/; 41 42 ################################################################################ 43 44 =head1 APACHE AUTHEN HANDLER 45 46 =over 47 48 =item handler($r) 49 50 =cut 51 52 sub handler($) { 53 my ($apache) = @_; 54 my $r = new WeBWorK::Request($apache); 55 56 my ($res, $sent_pw) = $r->get_basic_auth_pw; 57 return $res unless $res == OK; 58 59 my $webwork_root = $r->dir_config('authen_webwork_root'); 60 my $webwork_course = $r->dir_config('authen_webwork_course'); 61 62 return fail($r, "authen_webwork_root not set") 63 unless defined $webwork_root and $webwork_root ne ""; 64 return fail($r, "authen_webwork_course not set") 65 unless defined $webwork_course and $webwork_course ne ""; 66 67 # FIXME most of this build-up code is yoinked from lib/WeBWorK.pm 68 # needs to be factored out somehow 69 # (for example, the authen module selection code probably belongs in a factory) 70 71 my $ce = eval { new WeBWorK::CourseEnvironment({ 72 webwork_dir => $webwork_root, 73 courseName => $webwork_course, 74 }) }; 75 $@ and return fail($r, "failed to initialize the course environment: $@"); 76 $r->ce($ce); 77 78 my $authz = new WeBWorK::Authz($r); 79 $r->authz($authz); 80 81 # figure out which authentication module to use 82 my $user_authen_module; 83 my $proctor_authen_module; 84 if (ref $ce->{authen}{user_module} eq "HASH") { 85 if (exists $ce->{authen}{user_module}{$ce->{dbLayoutName}}) { 86 $user_authen_module = $ce->{authen}{user_module}{$ce->{dbLayoutName}}; 87 } else { 88 $user_authen_module = $ce->{authen}{user_module}{"*"}; 89 } 90 } else { 91 $user_authen_module = $ce->{authen}{user_module}; 92 } 93 94 runtime_use $user_authen_module; 95 my $authen = $user_authen_module->new($r); 96 $r->authen($authen); 97 98 my $db = new WeBWorK::DB($ce->{dbLayout}); 99 $r->db($db); 100 101 # now, here's the problem... WeBWorK::Authen looks at $r->params directly, whereas we 102 # need to look at $user and $sent_pw. this is a perfect opportunity for a mixin, i think. 103 my $authenOK; 104 { 105 no warnings 'redefine'; 106 local *WeBWorK::Authen::get_credentials = \&Authen::WeBWorK::HTTPBasic::get_credentials; 107 local *WeBWorK::Authen::maybe_send_cookie = \&Authen::WeBWorK::HTTPBasic::noop; 108 local *WeBWorK::Authen::maybe_kill_cookie = \&Authen::WeBWorK::HTTPBasic::noop; 109 local *WeBWorK::Authen::set_params = \&Authen::WeBWorK::HTTPBasic::noop; 110 111 $authenOK = $authen->verify; 112 } 113 114 115 debug("verify said: '$authenOK'"); 116 117 if ($authenOK) { 118 debug("this will work!!!"); 119 return OK; 120 } else { 121 return AUTH_REQUIRED; 122 } 123 } 124 125 sub fail { 126 my ($r, $msg) = @_; 127 $r->note_basic_auth_failure; 128 $r->log_reason($msg, $r->filename); 129 return AUTH_REQUIRED; 130 } 131 132 =back 133 134 =cut 135 136 package Authen::WeBWorK::HTTPBasic; 137 138 use strict; 139 use warnings; 140 use Apache::Constants qw(:common); 141 use WeBWorK::Debug; 142 143 sub get_credentials { 144 my ($self) = @_; 145 my $r = $self->{r}; 146 147 my ($res, $sent_pw) = $r->get_basic_auth_pw; 148 return unless $res == OK; 149 my $user_id = $r->connection->user; 150 151 if (defined $r->connection->user) { 152 $self->{user_id} = $r->connection->user; 153 $self->{password} = $sent_pw; 154 $self->{credential_source} = "http_basic"; 155 return 1; 156 } 157 } 158 159 sub noop {} 160 161 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |