/[Frey]/branches/zimbardo/lib/Frey/Mojo.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /branches/zimbardo/lib/Frey/Mojo.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1187 - (show annotations)
Mon Sep 28 19:00:38 2009 UTC (14 years, 7 months ago) by dpavlin
File size: 3197 byte(s)
make CouchAPI configurable with enviroment variable FREY_COUCH
1 package Frey::Mojo;
2
3 use strict;
4 use warnings;
5
6 use base 'Mojo';
7
8 use MojoX::Dispatcher::Static;
9 use Data::Dump qw/dump/;
10
11 use lib 'lib';
12 use Frey::Server;
13
14 use Frey::CouchAPI;
15 our $couch_api = $ENV{FREY_COUCH} || 0;
16
17 # FIXME move this somewhere
18 use App::RoomReservation;
19 my $mapping_url;
20 my $url_mapping = App::RoomReservation->url_mapping;
21 map { $mapping_url->{ $url_mapping->{$_} } = $_ } keys %$url_mapping;
22 my $rewrite_regex = join('|', sort { length $b <=> length $a } keys %$mapping_url);
23 warn "# mapping $rewrite_regex ",dump( $mapping_url );
24
25
26 __PACKAGE__->attr(
27 static => (
28 chained => 1,
29 default => sub { MojoX::Dispatcher::Static->new }
30 )
31 );
32
33 sub new {
34 my $self = shift->SUPER::new();
35
36 # This app should log only errors to STDERR
37 $self->log->level('error');
38 $self->log->path(undef);
39
40 # warn "# home ", $self->home;
41
42 $self->static->root( './' );
43
44 return $self;
45 }
46
47 sub tx_die {
48 my $tx = shift;
49 $tx->res->code( shift );
50 $tx->res->body( shift );
51 $tx->res->headers->content_type( shift || 'text/plain' );
52 return $tx;
53 }
54
55 sub handler {
56 my ($self, $tx) = @_;
57
58 # XXX fake app so static dispatcher won't die on us
59 {
60 package Fake::App;
61 use base 'Mojo::Transaction';
62 sub app {
63 my $self = shift;
64 # warn "## $self app ", @_;
65 $self;
66 }
67 sub log {
68 my $self = shift;
69 # warn "## $self log ",@_;
70 return $self;
71 }
72 sub debug {
73 my $self = shift;
74 warn "## ",@_, $/;
75 return $self;
76 }
77 }
78 bless $tx, 'Fake::App';
79
80 # rewrite URL
81 Frey::CouchAPI->rewrite_urls( $tx ) if $couch_api;
82
83 if ( ! $self->static->dispatch($tx) ) {
84 # warn "# static ",dump( $tx );
85 return $tx;
86 }
87
88 # FIXME this should move somewhere
89 my $url = $tx->req->url->to_abs->to_string;
90 if ( $url =~ m{/($rewrite_regex)} ) {
91 my $from = $1;
92 my $to = $mapping_url->{$from} || return tx_die( $tx, 500, "Unknown $from" );
93
94 $url =~ s{/($from)}{/$to};
95
96 $tx->req->url( Mojo::URL->new($url) );
97 warn "ACL $from -> $to OK\n";
98 } else {
99 return tx_die( $tx, 404, "Noting at $url") if ! $ENV{FREY_DEV};
100 }
101
102 my $body;
103
104 my $server = Frey::Server->new;
105 $server->{_print} = sub {
106 $body .= join("\n", @_);
107 };
108
109 my $params = $tx->req->params->to_hash;
110
111 my $referer = $tx->req->content->headers->header('Referer');
112 my $ajax = $tx->req->content->headers->header('X-Requested-With');
113 warn "# referer $referer\n";
114 # warn "## headers = ", dump( $tx->req->content->headers );
115
116 if ( $referer =~ m{/_utils} || $ajax =~ m{XMLHttpRequest}i ) {
117 return Frey::CouchAPI->dispatch( $tx ) if $couch_api;
118 }
119
120 warn "# url $url from $referer params ",dump($params);
121
122 my $request = $server->request( $url, $params ); # fetch body
123
124 warn "# request ", dump( $request );
125
126 foreach ( 'content_type', 'code' ) {
127 die "missing $_" unless defined $request->{$_};
128 }
129
130 =for developer
131
132 # compatiblity with unpatched Mojo
133 sub class2rest {
134 my $c = shift;
135 $c =~ s/::/-/gs;
136 $c;
137 }
138 $body =~ s{(/\w+::\w+[\w:]+)}{class2rest($1)}sge;
139
140 =cut
141
142 $tx->res->code( $request->{code} );
143 $tx->res->headers->content_type( $request->{content_type} );
144 $tx->res->body( $body );
145
146 warn dump( $tx->res->headers );
147 return $tx;
148 }
149
150 1;

  ViewVC Help
Powered by ViewVC 1.1.26