Revision 2 (by moose, 2006/07/10 13:21:14) initial import
#!/usr/bin/perl

use strict;
use warnings;
use SVNAdmin;
#use CGI::Pretty qw/:all *table *TR *Tr *td *div *span *label *ul *li/;
use CGI qw/:all *table *TR *Tr *td *div *span *label *ul *li/;

our $uname = '';
if($session->key('save_username')) {
   $uname = $session->key('saved_username');
}

my $user = $q->param('username');
my $pass = $q->param('password');
my $submit = $q->param('login');
my $error;

our %errors = (
	'notcorrect' => 'Username and/or password is incorrect.',
	'unotentered' => 'Username was not entered.',
	'pnotentered' => 'Password was not entered.',
);


if($session->key('loggedin')) {
	my $ref = $session->key('referer') || uri('user.pl');
	print http_redirect(-uri => $ref);
	exit;
}

if($user) {
	$submit=1;
	$user = $acl->user($user);
	if(!$user || !$user->test_password($pass)) {
		if(!$pass) {
			$error = $errors{pnotentered};
		} else {
			$error = $errors{notcorrect};
			$pass = 0;
		}
	}
	else {
		$session->key('username', $user->name);
		$session->key('loggedin', 1);
		my $ref = $q->param('referer') || $session->key('referer') || uri('user.pl');
		print http_redirect(-uri => $ref);
		exit;
	}
} else {
	if($pass) { $submit=1; }
	if($submit) {
		$error = $errors{unotentered};
	}
}

do_login_ui();

sub do_login_ui {
	print
		http_header() .
		start_page(-style => 'style.css', -title => 'SVN Admin Login') .
		start_menu() . end_menu() . start_content();

	print
		start_div({-class => 'errorbox'}) .
			($error ? $error : ' ') .
		end_div();

   print
		start_div({-class => 'ui_box'}) .
      	start_form(-action => uri('login.pl')) .
      	start_table({-class => 'loginbox_table'}) .
            start_Tr({-class => 'loginbox_row'}) .
               th({-class => 'loginbox_header', -colspan => 2}, 'Admin Login') .
            end_Tr() .
            start_Tr({-class => 'loginbox_row'}) .
               start_td({-class => 'loginbox_label'}) . label({-for => 'username', -class => (($submit && !$user)?'login_label_error':'login_label') }, 'User Name') . end_td() .
               start_td({-class => 'loginbox_cell'}) . textfield({-id => 'username', -name => 'username', -value => $uname}) . end_td() .
            end_Tr() .
            start_Tr({-class => 'loginbox_form_row'}) .
               start_td({-class => 'loginbox_label'}) . label({-for => 'password', -class => (($submit && !$pass)?'login_label_error':'login_label') }, 'Password') . end_td() .
               start_td({-class => 'loginbox_cell'}) . password_field({-id => 'password', -name => 'password'}) . end_td() .
            end_Tr() .
            start_Tr({-class => 'loginbox_form_row'}) .
               start_td({-class => 'loginbox_submit', -colspan => 2}) . submit({-name => 'login', -value=>'Log In'}) . end_td() .
            end_Tr() .
				start_Tr({-style => 'display: none;'}) .
					start_td() . hidden(-name => 'referer', -value => $ENV{HTTP_REFERER}) . end_td() .
				end_Tr() .
      	end_form() .
			end_table() .
		end_div();
	print end_content() . end_page();
}