chiark / gitweb /
wip, before rename __
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 28 Dec 2012 13:29:16 +0000 (13:29 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 28 Dec 2012 13:29:16 +0000 (13:29 +0000)
cgi-auth-hybrid.pm

index f21a026..422d7a3 100644 (file)
@@ -31,6 +31,7 @@ our @EXPORT_OK;
 
 use DBI;
 use CGI;
+use Locale::Gettext;
 
 #---------- default callbacks ----------
 
@@ -75,12 +76,27 @@ sub do_redirect_cgi ($$$$) {
              -status => '303 See other',
              -location => $new_url);
     push @ha, (-cookie => $cookie) if defined $cookie;
-    $r->_ch('print')($c->header(@ha).
-                    $c->start_html('Redirection').
-                    $c->a({href=>$new_url},
-                          "If you aren't redirected, click to continue.").
-                    $c->end_html());
-}                      
+    $r->_print($c->header(@ha),
+              $r->_ch('gen_start_html')($r->__('Redirection')),
+              '<a href="'.escapeHTML($new_url).'">',
+              $r->__("If you aren't redirected, click to continue."),
+              "</a>",
+              $c->_ch('gen_end_html'));
+}
+
+sub gen_plain_login_form ($$) {
+    my ($c,$r) = @_;
+    my @form;
+    push @form, ('<form method="POST" action="',
+                escapeHTML($r->_ch('get_url')).'>',
+                '<table>');
+    foreach my $up (@{ $r->{S}{username_param_names}}) {
+       push @form, '<tr><td>'.$r->
+    push @form
+       '<table>'.
+       '<tr>'
+       '<input type="text" name="'
+       '<input type="text" name="'.$r->{S}{password_param_name}.'">'.
 
 #---------- verifier object methods ----------
 
@@ -98,6 +114,8 @@ sub new_verifier {
            login_timeout => 86400, # seconds
            assoc_param_name => 'cah_associd',
            password_param_name => 'password',
+           username_param_names => [qw(username)],
+           form_entry_size => 60,
            logout_param_names => [qw(cah_logout)],
            loggedout_param_names => [qw(cah_loggedout)],
            promise_check_mutate => 0,
@@ -116,6 +134,10 @@ sub new_verifier {
            cookie_path => "/",
            get_cookie_domain => \&get_cookie_domain,
            encrypted_only => 0,
+           gen_start_html => sub { $_[0]->start_html($_[2]); },
+           gen_end_html => sub { $_[0]->end_html(); },
+           gen_login_form => \&gen_plain_login_form,
+           gettext => sub { gettext($_[2]); },
            };
        },
        Dbh => undef,
@@ -186,6 +208,9 @@ sub _rp ($$@) {
     my $p = scalar $r->_ch('get_param',$pn)
 }
 
+sub __ ($$) { my ($r, $t) = @_; return $r->_ch('gettext')($t); }
+sub _print ($$) { my ($r, @t) = @_; return $r->_ch('print')(join '', @t); }
+
 # pages/param-sets are
 #   n normal non-mutating page
 #   r retrieval of information for JS, non-mutating
@@ -498,7 +523,21 @@ sub check_ok ($) {
        $r->_ch('do_redirect')($new_url, $cookie);
        return 0;
     }
-    if ($kind =~ m/
+    $kind =~ m/^SMALLPAGE|^LOGIN/ or die;
+
+    my ($title, @body);
+    if ($kind =~ m/^LOGIN-/) {
+       $title = $r->__('Login');
+       push @body, $r->__($divert->{Message});
+       push @body, $r->_ch('gen_login_form');
+       $body .= $r->_ch(
+
+       $r->_print(
+                  $r->_ch('start_html')($title),
+                  
+                  
+
+    if ($kind =~ m/^SMALLPAGE
 
 if (defined $cookie) {
         $r->_ch('header_out')($cookie);