File Coverage

blib/lib/Test/OpenID/Server.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             #!perl
2 3     3   9214 use warnings;
  3         9  
  3         281  
3 3     3   18 use strict;
  3         6  
  3         138  
4              
5             package Test::OpenID::Server;
6 3     3   2733 use Net::OpenID::Server;
  0            
  0            
7             use base qw/Test::HTTP::Server::Simple HTTP::Server::Simple::CGI/;
8              
9             our $VERSION = '0.02';
10              
11             =head1 NAME
12              
13             Test::OpenID::Server - setup a simulated OpenID server
14              
15             =head1 SYNOPSIS
16              
17             Test::OpenID::Server will provide a server to test your OpenID client
18             against. To use it, do something like this:
19              
20             use Test::More tests => 1;
21             use Test::OpenID::Server;
22             my $server = Test::OpenID::Server->new;
23             my $url_root = $server->started_ok("server started ok");
24              
25             Now you can run your OpenID tests against the URL in C<$url_root>. Identities
26             are any URL in the form of C<$url_root . "/foo">. There is one special
27             identity: C. This identity will causes the OpenID server
28             to return a non-identity page (which will mean the OpenID client won't find an
29             identity). Every other identity will return a successful authentication.
30              
31             =head1 METHODS
32              
33             =head2 new
34              
35             Create a new test OpenID server
36              
37             =cut
38              
39             sub new {
40             my $class = shift;
41             my $port = shift;
42              
43             $port = int(rand(5000) + 10000) if not defined $port;
44            
45             my $self = $class->SUPER::new( $port );
46             return $self;
47             }
48              
49             =head2 started_ok
50              
51             Test whether the server started, and if it did, return the URL it's
52             at.
53              
54             =cut
55              
56             #=head2 add_identity NAME
57             #
58             #Adds an OpenID identity to the server and returns the identity's URL.
59             #
60             #=cut
61             #
62             #sub add_identity {
63             # my $self = shift;
64             # my $id = shift;
65             #
66             # if ( not $self->_is_identity( $id ) ) {
67             # $self->{_identities}{$id} = {};
68             # }
69             # return $self->_identity_url( $id );
70             #}
71              
72             #=head2 delete_identity NAME
73             #
74             #Removes an OpenID identity from the server.
75             #
76             #=cut
77             #
78             #sub delete_identity {
79             # my $self = shift;
80             # my $id = shift;
81             # delete $self->{_identities}{$id};
82             #}
83              
84             sub _is_identity {
85             my $self = shift;
86             my $id = shift;
87             return lc $id ne 'unknown' ? $id : undef;
88             }
89              
90             sub _identity_url {
91             my $self = shift;
92             my $id = shift;
93             return "http://localhost:@{[$self->port]}/$id";
94             }
95              
96             #=head2 modify_trust NAME, URL, BOOLEAN
97             #
98             #Sets whether or not URL is trusted by NAME.
99             #
100             #=cut
101             #
102             #sub modify_trust {
103             # my $self = shift;
104             # my ( $id, $url, $trusted ) = @_;
105             # $self->{_identities}{$id}{$url} = $trusted;
106             #}
107              
108             =head1 INTERAL METHODS
109              
110             These methods implement the HTTP server (see L).
111             You shouldn't call them.
112              
113             =head2 handle_request
114              
115             =cut
116              
117             sub handle_request {
118             my $self = shift;
119             my $cgi = shift;
120              
121             if ( $ENV{'PATH_INFO'} eq '/openid.server' ) {
122             # We're dealing with the OpenID server endpoint
123            
124             my $nos = Net::OpenID::Server->new(
125             get_args => $cgi,
126             post_args => $cgi,
127             get_user => \&_get_user,
128             is_identity => sub { $self->_is_identity( $_[1] ) },
129             is_trusted => sub { return 1 },
130             server_secret => 'squeamish_ossifrage',
131             setup_url => "http://example.com/non-existant",
132             );
133             my ($type, $data) = $nos->handle_page( redirect_for_setup => 1 );
134             if ($type eq "redirect") {
135             print "HTTP/1.0 301 REDIRECT\r\n"; # probably OK by now
136             print "Location: $data\r\n\r\n";
137             } else {
138             print "HTTP/1.0 200 OK\r\n"; # probably OK by now
139             print "Content-Type: $type\r\n\r\n$data";
140             }
141             }
142             else {
143             # We're dealing with an normal page request
144             print "HTTP/1.0 200 OK\r\n";
145             print "Content-Type: text/html\r\n\r\n";
146            
147             my ($id) = $ENV{'PATH_INFO'} =~ m{/(.*)$};
148              
149             if ( $self->_is_identity( $id ) ) {
150             print <<" END";
151            
152            
153            
154            
155            
156            

OpenID identity page for $id.

157            
158            
159             END
160             }
161             else {
162             print <<" END";
163            
164            
165            

"$id" is not an identity we recognize.

166            
167            
168             END
169             }
170             }
171             }
172              
173             sub _get_user {
174             return "user";
175             }
176              
177             =head1 AUTHORS
178              
179             =head1 COPYRIGHT
180              
181             Copyright (c) 2007 Best Practical Solutions, LLC.
182              
183             =head1 LICENSE
184              
185             You may distribute this module under the same terms as Perl 5.8 itself.
186              
187             =cut
188              
189             1;