File: cas.pl

package info (click to toggle)
lemonldap-ng 1.3.3-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 13,084 kB
  • ctags: 2,440
  • sloc: perl: 25,708; makefile: 622; sh: 176; php: 6; sql: 5
file content (99 lines) | stat: -rw-r--r-- 2,516 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/perl

# CAS sample client
use strict;
use CGI;
use AuthCAS;

# Configuration
my $cas_url        = 'https://auth.example.com/cas';
my $cas            = new AuthCAS( casUrl => $cas_url );
my $cgi            = new CGI;
my $pgtUrl         = $cgi->url() . "%3Fproxy%3D1";
my $pgtFile        = '/tmp/pgt.txt';
my $proxiedService = 'http://webmail';

# Act as a CAS proxy
$cas->proxyMode( pgtFile => '/tmp/pgt.txt', pgtCallbackUrl => $pgtUrl );

# CAS login URL
my $login_url = $cas->getServerLoginURL( $cgi->url() );

# Start HTTP response
print $cgi->header();

# Proxy URL for TGT validation
if ( $cgi->param('proxy') ) {

    # Store pgtId and pgtIou
    $cas->storePGT( $cgi->param('pgtIou'), $cgi->param('pgtId') );
}

else {

    print $cgi->start_html('CAS sample client');

    my $ticket = $cgi->param('ticket');

    # First time access
    unless ($ticket) {
        print $cgi->h1("Click below to use CAS");
        print $cgi->h2("<a href=\"$login_url\">Simple login</a>");
        print $cgi->h2("<a href=\"$login_url&renew=true\">Renew login</a>");
        print $cgi->h2("<a href=\"$login_url&gateway=true\">Gateway login</a>");
    }

    # Ticket receveived
    else {
        print $cgi->h1("CAS login done");
        print $cgi->h2("Service ticket: $ticket");

        # Get user
        my $user = $cas->validateST( $cgi->url(), $ticket );
        if ($user) {
            print $cgi->h2("Authenticated user: $user");
        }
        else {
            print $cgi->h2( "Error: " . &AuthCAS::get_errors() );
        }

        # Get proxy granting ticket
        my $pgtId = $cas->{pgtId};
        if ($pgtId) {
            print $cgi->h2("Proxy granting ticket: $pgtId");

            # Try to request proxy ticket
            my $pt = $cas->retrievePT($proxiedService);

            if ($pt) {

                print $cgi->h2("Proxy ticket: $pt");

                # Use proxy ticket
                my ( $puser, @proxies ) =
                  $cas->validatePT( $proxiedService, $pt );

                print $cgi->h2("Proxied user: $puser");
                print $cgi->h2("Proxies used: @proxies");

            }
            else {
                print $cgi->h2( "Error: " . &AuthCAS::get_errors() );
            }
        }
        else {
            print $cgi->h2("Error: Unable to get proxy granting ticket");
        }

        print $cgi->h2( "<a href=\"" . $cgi->url . "\">Home</a>" );

    }

    print $cgi->end_html();

    # Remove PGT file
    unlink $pgtFile;

}

exit;