1#!/usr/bin/perl -w 2# A simple CGI script for the XMLRPC interface. 3# Allows users to log in and view their user information (/ns info). 4 5use CGI; 6 7$CGI::DISABLE_UPLOADS = 1; # no need, so be safe 8 9use lib '/home/jilles/src/hg/atheme/contrib/'; # path to Atheme.pm 10use Atheme; 11 12my $cgi = new CGI; 13my ($alogin, $acookie) = ('', ''); 14my $atheme; 15 16my $op = $cgi->param('op'); 17$op = 'login' unless defined $op; 18my $me = $cgi->url(-relative=>1); 19 20my $auth = $cgi->cookie('athemeauth'); 21if (defined ($auth) && $auth =~ /^(.*):(.*)$/) { 22 ($alogin, $acookie) = ($1, $2); 23} 24 25if ($alogin eq '' && $op ne 'logout' && ($op ne 'login' || !defined($cgi->param('login')))) { 26 print $cgi->header; 27 print $cgi->start_html('Atheme login'); 28 print $cgi->h1('Atheme login'); 29 print $cgi->start_form; 30 print 'Login ', $cgi->textfield('login'); 31 print 'Password ', $cgi->password_field('password'); 32 $cgi->param('op', 'login'); 33 print $cgi->hidden(-name=>'op', -default=>'login'); 34 print $cgi->submit; 35 print $cgi->end_form; 36 print $cgi->end_html; 37 exit; 38} 39 40$atheme = new Atheme(url => 'http://127.0.0.1:8080/xmlrpc'); # change if necessary 41 42my $result; 43 44if ($op eq 'login') { 45 $result = $atheme->login({nick=>$cgi->param('login'), pass=>$cgi->param('password'), address=>$cgi->remote_host()}); 46 if ($result->{type} eq 'success') { 47 $atheme->{nick} = $cgi->param('login'); 48 $atheme->{authcookie} = $result->{string}; 49 my $cookie = $cgi->cookie(-name=>'athemeauth', 50 -value=>$atheme->{nick}.':'.$atheme->{authcookie}, 51 -expires=>'+1h'); 52 print $cgi->header(-cookie=>$cookie); 53 print $cgi->start_html('Atheme login successful'); 54 print $cgi->h1('Atheme login successful'); 55 print $cgi->start_form; 56 print "Click to display information about account -> "; 57 $cgi->param('op', 'info'); 58 print $cgi->hidden(-name=>'op', -default=>'info'); 59 print $cgi->submit; 60 print $cgi->end_form; 61 } else { 62 print $cgi->start_html('Atheme login failed'); 63 print $cgi->h1('Atheme login failed'); 64 print 'Fault type:', $result->{type}, $cgi->br(); 65 print 'Fault string:', $result->{string}, $cgi->br(); 66 } 67 print "<p><a href=\"$me?op=logout\">Log out</a></p>\n"; 68 print $cgi->end_html; 69 exit; 70} elsif ($op eq 'logout') { 71 if ($acookie ne '') { 72 $result = $atheme->logout({authcookie=>$acookie, nick=>$alogin}); 73 my $cookie = $cgi->cookie(-name=>'athemeauth', 74 -value=>'', 75 -expires=>'+5m'); 76 print $cgi->header(-cookie=>$cookie); 77 } else { 78 print $cgi->header; 79 } 80 print $cgi->start_html('Atheme logout successful'); 81 print $cgi->h1('Atheme logout successful'); 82 print "<p><a href=\"$me?op=login\">Log in again</a></p>\n"; 83 print $cgi->end_html; 84 exit; 85} 86 87print $cgi->header; 88print $cgi->start_html('Atheme account information'); 89print $cgi->h1('Atheme account information'); 90$atheme->{svs} = 'NickServ'; 91$atheme->{cmd} = 'INFO'; 92$result = $atheme->call_svs({authcookie=>$acookie, nick=>$alogin, address=>$cgi->remote_host(), params=>$alogin}); 93if ($result->{type} eq 'success') { 94 print 'Account information: <xmp>'.$result->{string}."</xmp>\n"; 95} else { 96 print 'Fault type:', $result->{type}, $cgi->br(); 97 print 'Fault string:', $result->{string}, $cgi->br(); 98} 99print "<p><a href=\"$me?op=logout\">Log out</a></p>\n"; 100print $cgi->end_html; 101 102