fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2011-05-16 03:24 pm

[dw-free] Move /interface/flat into DW::Routing

[commit: http://hg.dwscoalition.org/dw-free/rev/127048be3771]

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

Move out of Apache::LiveJournal and into a controller.

Patch by [personal profile] fu.

Files modified:
  • cgi-bin/Apache/LiveJournal.pm
  • cgi-bin/DW/Controller/Interface/Flat.pm
--------------------------------------------------------------------------------
diff -r a1e8af07039f -r 127048be3771 cgi-bin/Apache/LiveJournal.pm
--- a/cgi-bin/Apache/LiveJournal.pm	Mon May 16 22:36:08 2011 +0800
+++ b/cgi-bin/Apache/LiveJournal.pm	Mon May 16 23:24:25 2011 +0800
@@ -186,7 +186,7 @@
     my $r = shift;
     my $uri = $r->uri;
 
-    if ($uri =~ m!^/interface/flat! || $uri =~ m!^/cgi-bin/log\.cg!) {
+    if ($uri =~ m!^/cgi-bin/log\.cg!) {
         $r->content_type("text/plain");
         $r->print("success\nFAIL\nerrmsg\n$LJ::SERVER_DOWN_MESSAGE");
         return OK;
@@ -956,9 +956,9 @@
 
     # protocol support
     if ($uri =~ m!^/(?:interface/(\w+))|cgi-bin/log\.cgi!) {
-        my $int = $1 || "flat";
+        my $int = $1;
         $r->handler("perl-script");
-        if ($int =~ /^flat|xmlrpc|blogger|elsewhere_info$/) {
+        if ($int =~ /^xmlrpc|blogger|elsewhere_info$/) {
             $RQ{'interface'} = $int;
             $RQ{'is_ssl'} = $is_ssl;
             $r->push_handlers(PerlResponseHandler => \&interface_content);
@@ -1643,45 +1643,8 @@
         return OK;
     }
 
-    if ($RQ{'interface'} ne "flat") {
-        $r->content_type("text/plain");
-        $r->print("Unknown interface.");
-        return OK;
-    }
-
     $r->content_type("text/plain");
-
-    my ( %out, %FORM, $content );
-    $r->read($content, $r->headers_in->{"Content-Length"})
-        if $r->headers_in->{'Content-Length'};
-    LJ::decode_url_string($content, \%FORM);
-
-    # the protocol needs the remote IP in just one place, where tracking is done.
-    $ENV{'_REMOTE_IP'} = $r->connection()->remote_ip();
-    LJ::do_request(\%FORM, \%out);
-
-    if ($FORM{'responseenc'} eq "urlenc") {
-        foreach (sort keys %out) {
-            $r->print(LJ::eurl($_) . "=" . LJ::eurl($out{$_}) . "&");
-        }
-        return OK;
-    }
-
-    my $length = 0;
-    foreach (sort keys %out) {
-        $length += length($_)+1;
-        $length += length($out{$_})+1;
-    }
-
-    $r->headers_out->{"Content-length"} = $length;
-    foreach (sort keys %out) {
-        my $key = $_;
-        my $val = $out{$_};
-        $key =~ y/\r\n//d;
-        $val =~ y/\r\n//d;
-        $r->print($key, "\n", $val, "\n");
-    }
-
+    $r->print("Unknown interface.");
     return OK;
 }
 
diff -r a1e8af07039f -r 127048be3771 cgi-bin/DW/Controller/Interface/Flat.pm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cgi-bin/DW/Controller/Interface/Flat.pm	Mon May 16 23:24:25 2011 +0800
@@ -0,0 +1,64 @@
+#!/usr/bin/perl
+#
+# DW::Controller::Interface::Flat
+#
+# This controller is for the old flat interface
+#
+# Authors:
+#      Afuna <coder.dw@afunamatata.com>
+#
+# Copyright (c) 2011 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::Interface::Flat;
+
+use strict;
+use DW::Routing;
+
+DW::Routing->register_string( '/interface/flat', \&interface_handler, app => 1, format => 'plain',
+    methods => { GET => 1, POST => 1 } );
+
+sub interface_handler {
+    my $r = DW::Request->get;
+
+    my ( %out, %post );
+
+    my $post_args = $r->post_args;
+    $post_args->do( sub {
+        my ( $k, $v ) = @_;
+        $post{$k} = $v;
+        return 1;
+    } ) if $post_args;
+
+    LJ::do_request( \%post, \%out );
+
+    if ( "urlenc" eq ( $post{responseenc} || "" ) ) {
+        foreach ( sort keys %out ) {
+            $r->print( LJ::eurl( $_ ) . "=" . LJ::eurl( $out{$_} ) . "&" );
+        }
+        return $r->OK;
+    }
+
+    my $length = 0;
+    foreach ( sort keys %out ) {
+        $length += length( $_ ) + 1;
+        $length += length( $out{$_} ) + 1;
+    }
+    $r->header_out( "Content-Length", $length );
+
+    foreach ( sort keys %out ) {
+        my $key = $_;
+        my $val = $out{$_};
+        $key =~ y/\r\n//d;
+        $val =~ y/\r\n//d;
+        $r->print( $key, "\n", $val, "\n" );
+    }
+
+    return $r->OK;
+}
+
+1;
--------------------------------------------------------------------------------

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