summaryrefslogtreecommitdiff
path: root/lib/PAUSE/OpenID/Controller/Root.pm
blob: 67d4411880577717ac5dd15c329d8f0c89024d6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package PAUSE::OpenID::Controller::Root; 
 
use strict;
use warnings;
use parent 'Catalyst::Controller';
 
use LWP::UserAgent;
 
# 
# Sets the actions in this controller to be registered with no prefix 
# so they function identically to actions created in MyApp.pm 
# 
__PACKAGE__->config->{namespace} = '';
 
=head1 NAME
 
PAUSE::OpenID::Controller::Root - Root Controller for PAUSE::OpenID
 
=head1 DESCRIPTION
 
[enter your description here]
 
=head1 METHODS
 
=cut
 
=head2 index
 
=cut
 
sub index :Path :Args(0) {
    my ( $self$c ) = @_;
 
    # 5.2.3 
    # If the malformed or invalid message is received by the Relying Party, or "openid.return_to"  
    # is not present or its value is not a valid URL, the server SHOULD return a response to the end user 
    # indicating the error and that it is unable to continue. 
    my $return_to =  $c->req->param('openid.return_to');
    # TODO: check if its a valid URL 
    if ( not defined $return_to ) {
        #$c->flash->{xml} = '<document><error_message>Missing parameter</error_message></document>'; 
        $c->res->redirect($c->uri_for('/error'));
    }
 
    # TODO: generate XML programatically 
    $c->stash->{xml} = sprintf('<document><config key="url" value="%s"/></document>'$c->config->{'PAUSE::OpenID'}{'baseurl'});
    
    # Pass through parameters (unchecked for now) 
    foreach my $key ( keys %{$c->req->params} ) {
        $c->stash->{$key} = $c->req->param($key);
    }
 
    $c->forward('PAUSE::OpenID::View::XSLT');
}
 
sub error :Local {
    my ( $self$c ) = @_;
    #$c->stash->{xml} = $c->flash->{xml}; 
    $c->stash->{xml} = '<document/>';
    $c->forward('PAUSE::OpenID::View::XSLT');
}
 
sub default :Path {
    my ( $self$c ) = @_;
    $c->response->body( 'Page not found' );
    $c->response->status(404);
    
}
 
sub login :Local {
    my ( $self$c ) = @_;
    
    my $username = $c->req->param('username');
    my $password = $c->req->param('password');
    
    $c->log->debug('username "'.$username.'" login attempt');
    
    my $ua = LWP::UserAgent->new;
    $ua->credentials('pause.perl.org:443''PAUSE'$username$password);
    my $res = $ua->get('https://pause.perl.org/pause/authenquery');
    
    if ($res->code == 200) {
        $c->log->info('login pass');
        $c->res->redirect($c->uri_for('/login_pass'));
    }
    else {
        $c->log->warn('login failed');
        $c->res->redirect($c->uri_for('/login_failed'));
    }
}
 
sub login_pass :Local {
    my ( $self$c ) = @_;
    
    $c->res->content_type('text/plain');
    $c->res->body('login pass');
}
 
sub login_failed :Local {
    my ( $self$c ) = @_;
    
    $c->res->content_type('text/plain');
    $c->res->body('login fail');
}
 
=head2 end
 
Attempt to render a view, if needed.
 
=cut 
 
sub end : ActionClass('RenderView') {}
 
=head1 AUTHOR
 
Thomas Klausner,,,
 
=head1 LICENSE
 
This library is free software, you can redistribute it and/or modify
it under the same terms as Perl itself.
 
=cut
 
1;