mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] changelog2009-12-16 09:27 am

[dw-free] Convert /misc/whereami to TT

[commit: http://hg.dwscoalition.org/dw-free/rev/1d3f737cd7fd]

http://bugs.dwscoalition.org/show_bug.cgi?id=2236

Simplify the controller for the whereami page TT version. This adds a new
controller method which we can use for most of the basic page patterns.

Patch by [staff profile] mark.

Files modified:
  • cgi-bin/DW/Controller.pm
  • cgi-bin/DW/Controller/Misc.pm
  • cgi-bin/DW/Template/Apache2.pm
  • views/misc/whereami.tt
--------------------------------------------------------------------------------
diff -r 515eb2dc34a6 -r 1d3f737cd7fd cgi-bin/DW/Controller.pm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cgi-bin/DW/Controller.pm	Wed Dec 16 09:27:50 2009 +0000
@@ -0,0 +1,81 @@
+#!/usr/bin/perl
+#
+# DW::Controller
+#
+# Not actually a controller, but contains methods that help other controllers.
+#
+# Authors:
+#      Mark Smith <mark@dreamwidth.org>
+#
+# Copyright (c) 2009 by Dreamwidth Studios, LLC.
+#
+# This program is free software; you may redistribute it and/or modify it under
+# the same terms as Perl itself. For a copy of the license, please reference
+# 'perldoc perlartistic' or 'perldoc perlgpl'.
+#
+
+package DW::Controller;
+
+use strict;
+use warnings;
+use Exporter;
+use DW::Routing::Apache2;
+use DW::Template::Apache2;
+
+our ( @ISA, @EXPORT );
+@ISA = qw/ Exporter /;
+@EXPORT = qw/ needlogin error_ml controller /;
+
+# redirects the user to the login page to handle that eventuality
+sub needlogin {
+    my $r = DW::Request->get;
+
+    my $uri = $r->uri;
+    if ( my $qs = $r->query_string ) {
+        $uri .= '?' . $qs;
+    }
+    $uri = LJ::eurl( $uri );
+
+    $r->header_out( Location => "$LJ::SITEROOT/?returnto=$uri" );
+    return $r->REDIRECT;
+}
+
+# returns an error page using a language string
+sub error_ml {
+    return DW::Template::Apache2->render_template(
+        DW::Request->get->r, 'error.tt', { message => LJ::Lang::ml( $_[0] ) }
+    );
+}
+
+# helper controller.  give it a few arguments and it does nice things for you.
+sub controller {
+    my ( %args ) = @_;
+
+    my $vars = {};
+    my $fail = sub { return ( 0, $_[0] ); };
+    my $ok   = sub { return ( 1, $vars ); };
+
+    # ensure the arguments make sense... anonymous means we cannot authas
+    delete $args{authas} if $args{anonymous};
+
+    # 'anonymous' pages must declare themselves, else we assume that a remote is
+    # necessary as most pages require a user
+    unless ( $args{anonymous} ) {
+        $vars->{u} = $vars->{remote} = LJ::get_remote()
+            or return $fail->( needlogin() );
+    }
+
+    # if a page allows authas it must declare it.  authas can only happen if we are
+    # requiring the user to be logged in.
+    my $r = DW::Request->get;
+    if ( $args{authas} ) {
+        $vars->{u} = LJ::get_authas_user( $r->get_args->{authas} || $vars->{remote}->user )
+            or return $fail->( error_ml( 'error.invalidauth' ) );
+        $vars->{authas_html} = LJ::make_authas_select( $vars->{remote}, { authas => $vars->{u}->user } );
+    }
+
+    # everything good... let the caller know they can continue
+    return $ok->();
+}
+
+1;
diff -r 515eb2dc34a6 -r 1d3f737cd7fd cgi-bin/DW/Controller/Misc.pm
--- a/cgi-bin/DW/Controller/Misc.pm	Wed Dec 16 03:23:02 2009 +0000
+++ b/cgi-bin/DW/Controller/Misc.pm	Wed Dec 16 09:27:50 2009 +0000
@@ -21,50 +21,22 @@ package DW::Controller::Misc;
 
 use strict;
 use warnings;
+use DW::Controller;
 use DW::Routing::Apache2;
 use DW::Template::Apache2;
 
 DW::Routing::Apache2->register_string( '/misc/whereami', \&whereami_handler, app => 1 );
 
-# redirects the user to the login page to handle that eventuality
-sub needlogin {
-    my $r = DW::Request->get;
-
-    my $uri = $r->uri;
-    if ( my $qs = $r->query_string ) {
-        $uri .= '?' . $qs;
-    }
-    $uri = LJ::eurl( $uri );
-
-    $r->header_out( Location => "$LJ::SITEROOT/?returnto=$uri" );
-    return $r->REDIRECT;
-}
-
-# returns an error page using a language string
-sub error_ml {
-    return DW::Template::Apache2->render_template(
-        DW::Request->get->r, 'error.tt', { message => LJ::Lang::ml( $_[0] ) }
-    );
-}
-
 # handles the /misc/whereami page
 sub whereami_handler {
-    my $r = DW::Request->get;
+    my ( $ok, $rv ) = controller( authas => 1 );
+    return $rv unless $ok;
 
-    my $remote = LJ::get_remote()
-        or return needlogin();
-    my $u = LJ::get_authas_user( $r->get_args->{authas} || $remote->user )
-        or return error_ml( 'error.invalidauth' );
-
-    my $vars = {
-        user         => $u,
-        cluster_name => $LJ::CLUSTER_NAME{$u->clusterid} || LJ::Lang::ml( '.cluster.unknown' ),
-        authas_html  => LJ::make_authas_select( $remote, { authas => $u->user } ),
+    my $vars = { %$rv,
+        cluster_name => $LJ::CLUSTER_NAME{$rv->{u}->clusterid} || LJ::Lang::ml( '.cluster.unknown' ),
     };
 
-    return DW::Template::Apache2->render_template(
-        $r->r, 'misc/whereami.tt', $vars, {}
-    );
+    return DW::Template::Apache2->render_template( 'misc/whereami.tt', $vars );
 }
 
 1;
diff -r 515eb2dc34a6 -r 1d3f737cd7fd cgi-bin/DW/Template/Apache2.pm
--- a/cgi-bin/DW/Template/Apache2.pm	Wed Dec 16 03:23:02 2009 +0000
+++ b/cgi-bin/DW/Template/Apache2.pm	Wed Dec 16 09:27:50 2009 +0000
@@ -120,11 +120,9 @@ sub cached_template_string {
     }, $extra);
 }
 
-=head2 C<< $class->render_cached_template( $r, $key, $filename, $subref, $extra ) >>
+=head2 C<< $class->render_cached_template( $key, $filename, $subref, $extra ) >>
 
 Render a template inside the sitescheme or alone.
-
-NOTE: $r needs to be an Apache2 request, not a DW::Request.
 
 See render_template, except note that the opts hash is returned by subref if it's needed.
 
@@ -151,20 +149,18 @@ See render_template, except note that th
 =cut
 
 sub render_cached_template {
-    my ($class, $r, $key, $filename, $subref, $opts, $extra) = @_;
+    my ($class, $key, $filename, $subref, $opts, $extra) = @_;
 
     $extra ||= {};
 
     my $out = $class->cached_template_string( $key, $filename, $subref, $opts, $extra );
 
-    return $class->render_string( $r, $out, $extra );
+    return $class->render_string( $out, $extra );
 }
 
-=head2 C<< $class->render_template( $r, $filename, $opts, $extra ) >>
+=head2 C<< $class->render_template( $filename, $opts, $extra ) >>
 
 Render a template inside the sitescheme or alone.
-
-NOTE: $r needs to be an Apache2 request, not a DW::Request.
 
 $extra can contain:
 
@@ -183,18 +179,16 @@ NOTE: $r needs to be an Apache2 request,
 =cut
 
 sub render_template {
-    my ( $class, $r, $filename, $opts, $extra ) = @_;
+    my ( $class, $filename, $opts, $extra ) = @_;
 
     my $out = $class->template_string( $filename, $opts );
 
-    return $class->render_string( $r, $out, $extra );
+    return $class->render_string( $out, $extra );
 }
 
-=head2 C<< $class->render_string( $r, $string, $extra ) >>
+=head2 C<< $class->render_string( $string, $extra ) >>
 
 Render a string inside the sitescheme or alone.
-
-NOTE: $r needs to be an Apache2 request, not a DW::Request.
 
 $extra can contain:
 
@@ -211,9 +205,11 @@ NOTE: $r needs to be an Apache2 request,
 =back
 
 =cut
+
 sub render_string {
-    my ( $class, $r, $out, $extra ) = @_;
+    my ( $class, $out, $extra ) = @_;
 
+    my $r = DW::Request->get->r;
     $r->status( $extra->{status} ) if $extra->{status};
     $r->content_type( $extra->{content_type} ) if $extra->{content_type};
 
diff -r 515eb2dc34a6 -r 1d3f737cd7fd views/misc/whereami.tt
--- a/views/misc/whereami.tt	Wed Dec 16 03:23:02 2009 +0000
+++ b/views/misc/whereami.tt	Wed Dec 16 09:27:50 2009 +0000
@@ -6,4 +6,4 @@
     [% authas_html %]
 </form><br />
 
-<p>[% '.cluster' | ml(user = user.ljuser_display, cluster = cluster_name) %]</p>
+<p>[% '.cluster' | ml(user = u.ljuser_display, cluster = cluster_name) %]</p>
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org