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