Fix up some missing CAS components user/artunit/add_back_cas_2_4
authorArt Rhyno <art632000@yahoo.ca>
Tue, 14 May 2013 03:12:42 +0000 (23:12 -0400)
committerArt Rhyno <art632000@yahoo.ca>
Tue, 14 May 2013 03:12:42 +0000 (23:12 -0400)
Not sure what happened here, but the original CAS commit
might not have been to Conifer. Making this a working
branch for now to sort out test environment.

Signed-off-by: Art Rhyno <art632000@yahoo.ca>
Open-ILS/src/perlmods/lib/OpenILS/Application/AuthProxy/CAS_Auth_Conifer.pm [new file with mode: 0644]
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Container.pm
Open-ILS/src/templates/opac/cas_intro.tt2 [new file with mode: 0644]
Open-ILS/src/templates/opac/parts/config.tt2
Open-ILS/src/templates_windsor/opac/cas_intro.tt2 [new file with mode: 0644]

diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/AuthProxy/CAS_Auth_Conifer.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/AuthProxy/CAS_Auth_Conifer.pm
new file mode 100644 (file)
index 0000000..4ba3d0d
--- /dev/null
@@ -0,0 +1,57 @@
+package OpenILS::Application::AuthProxy::CAS_Auth_Conifer;
+use strict;
+use warnings;
+use base 'OpenILS::Application::AuthProxy::AuthBase';
+use OpenILS::Event;
+use OpenSRF::Utils::SettingsClient;
+use OpenSRF::Utils::Logger qw(:logger);
+use LWP::UserAgent;
+
+sub authenticate {
+    my ( $self, $args ) = @_;
+
+    my $ticket = $args->{'ticket'};
+    my $cas_validate_url = $self->{'cas_validate_url'};
+    my $cas_service = $self->{'cas_service'};
+    my $cas_suffix = $self->{'cas_suffix'};
+    my $login_succeeded  = 0;
+
+    if ($ticket && $cas_validate_url && $cas_service) {
+       my $ua = LWP::UserAgent->new;
+
+       # We can now go to the service with this ticket.
+       my $response = $ua->get( $cas_validate_url . '?ticket=' . $ticket . '&service=' . $cas_service);
+
+       if ($response->is_success) {
+          my $content_str = $response->as_string;
+          # Does this ever vary? Every example seems to use this namespace
+          $content_str =~ /<cas:user>(.*)<\/cas:user>/;
+          my $username = $1;
+          if ($username) {
+             # The suffix is typically for e-mail
+             if ($cas_suffix) {
+                $username = $username . $cas_suffix;
+             }
+             # We now set the username
+             $args->{username} = $username;
+             # and add a flag for this type of authentication
+             $login_succeeded = 1;
+          }
+       }
+    }
+
+    if ( $login_succeeded ) {
+        return OpenILS::Event->new('SUCCESS');
+    } elsif ( !$ticket ) {
+        $logger->debug("CAS User login failed: Missing ticket");
+        return OpenILS::Event->new( 'LOGIN_FAILED' );
+    } elsif ( !$cas_validate_url || !$cas_service) {
+        $logger->debug("CAS User login failed: The CAS configuration is not complete");
+        return OpenILS::Event->new( 'LOGIN_FAILED' );
+    } else {
+        $logger->debug("CAS User login failed: invalid username or CAS ticket");
+        return OpenILS::Event->new( 'LOGIN_FAILED' );
+    }
+}
+
+1;
index 74c0700..5ffc5e9 100644 (file)
@@ -133,6 +133,10 @@ sub load {
     return $self->load_cache_clear if $path =~ m|opac/cache/clear|;
     return $self->load_temp_warn_post if $path =~ m|opac/temp_warn/post|;
     return $self->load_temp_warn if $path =~ m|opac/temp_warn|;
+    # added for CAS support - we probably want a place to explain why someone is being
+    # redirected to a third party site
+    return $self->load_cas_intro if $path =~ m|opac/cas_intro|;
+
 
     # ----------------------------------------------------------------
     #  Everything below here requires SSL
index b61ac06..376a0b2 100644 (file)
@@ -245,4 +245,10 @@ sub load_temp_warn {
     return Apache2::Const::OK;
 }
 
+sub load_cas_intro {
+    my $self = shift;
+    $self->ctx->{'redirect_to'} = $self->cgi->param('redirect_to');
+    return Apache2::Const::OK;
+}
+
 1;
diff --git a/Open-ILS/src/templates/opac/cas_intro.tt2 b/Open-ILS/src/templates/opac/cas_intro.tt2
new file mode 100644 (file)
index 0000000..dd921ad
--- /dev/null
@@ -0,0 +1,38 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    WRAPPER "opac/parts/base.tt2";
+    INCLUDE "opac/parts/topnav.tt2";
+
+    cas_alert = l('You have selected CAS Authentication. This will use your campus userid (also known as login or user name).');
+    ctx.page_title = l("CAS Information") -%]
+    <div id="content-wrapper">
+        <div id="main-content">
+        <div style="height:20px;"></div>
+        <table cellpadding="0" cellspacing="0" border="0">
+            <tr>
+                <td valign="top" width="676" class="login_boxes left_brain">
+                    <table cellpadding="10" cellspacing="0" border="0"
+                        width="100%">
+                        <tr>
+                                <td colspan="2" style="padding-bottom: 10px;">
+                                <h1>[% cas_alert %]</h1>
+                                <br /><br />
+                            </td>
+                        </tr>
+                        <tr>
+                                <td colspan="2" style="padding-bottom: 10px;">
+            <a href="[% ctx.cas.url %]"
+                class="opac-button opac-button-header" id="home_myopac_link">
+                [% l('Continue to Your Account with Your CAS ID') %]
+            </a>
+                                <br /><br />
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+        </table>
+        <div style="height:20px;"></div>
+        </div>
+    </div>
+[% END %]
index 718083e..3f28cca 100644 (file)
@@ -28,6 +28,14 @@ ctx.refworks.url = 'http://www.refworks.com';
 # ctx.refworks.url = 'http://librweb.laurentian.ca/login?url=http://refworks.scholarsportal.info';
 
 ##############################################################################
+# CAS support
+##############################################################################
+# Specify CAS URL for Login
+# ctx.cas.url = 'https://myorg.org/cas/login?service=https://mylibrary.org/eg/opac/login';
+# Specify CAS URL for Logout
+# ctx.cas.logout = 'https://myorg.org/cas/logout';
+
+##############################################################################
 # OpenURL resolution
 ##############################################################################
 # Evergreen provides the ability to point at an OpenURL resolver to find
diff --git a/Open-ILS/src/templates_windsor/opac/cas_intro.tt2 b/Open-ILS/src/templates_windsor/opac/cas_intro.tt2
new file mode 100644 (file)
index 0000000..26e87bf
--- /dev/null
@@ -0,0 +1,45 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    WRAPPER "opac/parts/base.tt2";
+    INCLUDE "opac/parts/topnav.tt2";
+    ctx.page_title = l("CAS Information") %]
+    <div id="content-wrapper">
+        <div id="main-content">
+        <div style="height:20px;"></div>
+        <table cellpadding="0" cellspacing="0" border="0">
+            <tr>
+                <td valign="top" width="676" class="login_boxes left_brain">
+                    <table cellpadding="10" cellspacing="0" border="0"
+                        width="100%">
+                        <tr>
+                                <td colspan="2" style="padding-bottom: 10px;">
+                                <h1>
+             [%
+             l('You have selected UWin ID Authentication. This will use your ');
+             l('University of Windsor userid (also known as login or user name). ');
+             l('It appears on the front of the ');
+             %] <strong>@</strong> [%
+             l('sign in your University of Windsor e-mail address and it is being ');
+             l('used as login name for most University computer systems.');
+             %]
+                                </h1>
+                                <br /><br />
+                            </td>
+                        </tr>
+                        <tr>
+                                <td colspan="2" style="padding-bottom: 10px;">
+            <a href="[% ctx.cas.url %]"
+                class="opac-button opac-button-header" id="home_myopac_link">
+                [% l('Continue to Your Account with Your UWind ID') %]
+            </a>
+                                <br /><br />
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+        </table>
+        <div style="height:20px;"></div>
+        </div>
+    </div>
+[% END %]