diff options
Diffstat (limited to 'www/logged_in_p.pl')
-rwxr-xr-x | www/logged_in_p.pl | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/www/logged_in_p.pl b/www/logged_in_p.pl new file mode 100755 index 0000000..a79d790 --- /dev/null +++ b/www/logged_in_p.pl @@ -0,0 +1,48 @@ +#! /usr/bin/env perl +# Copyright 2012, Matthias Andreas Benkard <code@mail.matthias.benkard.de>. + + +use common::sense; +use Modern::Perl; + +use JSON; + +use File::Slurp; + +use CGI; +use CGI::Fast; +use CGI::Session; + +use Mail::ExpandAliases; + + +while (my $cgi = new CGI::Fast) { + print $cgi->header(-content_type => 'application/json; charset=UTF-8'); + + my $cookie = $cgi->cookie('mulkid_session'); + unless ($cookie) { + say encode_json({logged_in_p => 0}); + exit(0); + } + + my $session = new CGI::Session("driver:File", $cookie, {Directory=>"/tmp"}); + unless ($session) { + say encode_json({logged_in_p => 0}); + exit(0); + } + + my $aliases = Mail::ExpandAliases->new("/etc/aliases"); + my $email = $cgi->param('email') or die "No email address supplied"; + my $session_user = $session->param('user'); + + my $alias; + if ($email =~ /^(.*?)@/) { $alias = $1; } + my $email_users = $aliases->expand($alias) or die "User not found"; + + if ($session_user ~~ @$email_users) { + say encode_json({logged_in_p => 1}); + } else { + say encode_json({logged_in_p => 0}); + } +} + |