/[gedafe]/trunk/lib/perl/Gedafe/Auth.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/perl/Gedafe/Auth.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations)
Mon Feb 14 18:52:26 2005 UTC (19 years, 2 months ago) by dpavlin
File size: 3766 byte(s)
import of Gedafe 1.2.2

1 dpavlin 1 # Gedafe, the Generic Database Frontend
2     # copyright (c) 2000-2003 ETH Zurich
3     # see http://isg.ee.ethz.ch/tools/gedafe/
4    
5     # released under the GNU General Public License
6    
7     package Gedafe::Auth;
8     use strict;
9     use Gedafe::Util qw(
10     ConnectToTicketsDaemon
11     MakeURL
12     MyURL
13     Template
14     UniqueFormStart
15     UniqueFormEnd
16     NextRefresh
17     );
18     use Gedafe::Global qw(%g);
19     use Gedafe::DB qw(DB_Connect);
20    
21     use vars qw(@ISA @EXPORT_OK);
22     require Exporter;
23     @ISA = qw(Exporter);
24     @EXPORT_OK = qw(AuthConnect);
25    
26     sub Auth_GetTicket($$$$) {
27     my $s = shift;
28     my $ticket = shift;
29     my $user = shift;
30     my $pass = shift;
31     my $socket = ConnectToTicketsDaemon($s);
32     print $socket "SITE $s->{path}/$s->{script}\n";
33     <$socket>;
34     print $socket "GET $ticket\n";
35     $_ = <$socket>;
36     close($socket);
37     chomp;
38     if(! /^OK ([^ ]+) (.+)$/) {
39     return 0;
40     }
41     $$user = $1;
42     $$pass = $2;
43     return 1;
44     }
45    
46     sub Auth_ClearTicket($$) {
47     my $s = shift;
48     my $ticket = shift;
49     my $socket = ConnectToTicketsDaemon($s);
50     print $socket "SITE $s->{path}/$s->{script}\n";
51     <$socket>;
52     print $socket "CLEAR $ticket\n";
53     <$socket>;
54     close($socket);
55     }
56    
57     sub Auth_SetTicket($$$) {
58     my $s = shift;
59     my $user = shift;
60     my $pass = shift;
61     my $socket = ConnectToTicketsDaemon($s);
62     print $socket "SITE $s->{path}/$s->{script}\n";
63     <$socket>;
64     print $socket "SET $user $pass\n";
65     my $ticket = <$socket>;
66     close($socket);
67     chomp $ticket;
68     return $ticket;
69     }
70    
71     sub Auth_Login($)
72     {
73     my $s = shift;
74     my $q = $s->{cgi};
75    
76     print $q->header;
77     $s->{http_header_sent}=1;
78     print Template({ PAGE => 'login', ELEMENT => 'header' });
79     my $form_url = $q->param('form_url') || MyURL($q);
80     my $next_url = $q->param('next_url') ||
81     MakeURL(MyURL($q), {
82     logout=>'',
83     refresh=>NextRefresh(),
84     });
85     $s->{header_sent}=1;
86    
87     UniqueFormStart($s, $next_url);
88    
89     print Template({ PAGE => 'login', ELEMENT => 'login' });
90    
91     foreach($q->param) {
92     if(/^(next_url|form_id|form_url|login_.*)$/ ) { next; }
93     if(defined ($q->url_param($_))) { next; }
94     print "<INPUT TYPE=\"hidden\" NAME=\"$_\" VALUE=\"" .
95     $q->param($_) . "\">\n";
96     }
97    
98     UniqueFormEnd($s, $form_url, $next_url);
99    
100     print Template({ PAGE => 'login', ELEMENT => 'footer' });
101    
102     exit;
103     }
104    
105     sub AuthConnect($$$$) {
106     my $s = shift;
107     my $q = $s->{cgi};
108     my $user = shift;
109     my $cookie = shift;
110     my $ticket_value = shift;
111    
112     my $pass;
113     my $dbh;
114    
115     # logout
116     if($q->url_param('logout')) {
117     my $ticket = $q->cookie(-name=>$s->{ticket_name});
118     Auth_ClearTicket($s, $ticket) if $ticket;
119     Auth_Login($s);
120     }
121    
122     # check Ticket
123     my $c = $q->cookie(-name=>$s->{ticket_name});
124    
125     # if ticket from cookie fails try ticket from param
126     unless($c){
127     $c = $q->param("ticket");
128     }
129    
130     $$ticket_value=$c;
131     if(defined $c and Auth_GetTicket($s, $c, $user, \$pass)) {
132     # ticket authentication successfull
133     return DB_Connect($$user, $pass);
134     }
135    
136     # login response
137     if(defined $q->param('login_user') or defined $q->url_param('user')) {
138     $$user = $q->param('login_user');
139     $$user = $q->url_param('user') unless defined $$user;
140     $pass = $q->param('login_pass');
141     $pass = 'anonymous' unless defined $pass;
142    
143     if(defined ($dbh = DB_Connect($$user, $pass))) {
144     # user/pass authentication successfull
145     my $ticket=Auth_SetTicket($s, $$user, $pass);
146     $$cookie=$q->cookie(-name=>$s->{ticket_name},
147     -value=>$ticket, -path=>$s->{path});
148     return $dbh;
149     }
150     else {
151     # login failed
152     print $q->header;
153     print Template({ PAGE => 'auth_error', TITLE => 'Authentication Error', ELEMENT => 'header' });
154     print Template({ PAGE => 'auth_error', TITLE => 'Authentication Error', ELEMENT => 'header2' });
155     print Template({ PAGE => 'auth_error', URL=>MyURL($q), ELEMENT => 'auth_error' });
156     print Template({ PAGE => 'auth_error', ELEMENT => 'footer' });
157     exit;
158     }
159     }
160    
161     # no login, no ticket -> login
162     Auth_Login($s);
163     }
164    
165     1;

  ViewVC Help
Powered by ViewVC 1.1.26