fixed pod
[catagits/Catalyst-Plugin-Authentication.git] / lib / Catalyst / Plugin / Authentication / User / Hash.pm
CommitLineData
07e49bc7 1#!/usr/bin/perl
2
3package Catalyst::Plugin::Authentication::User::Hash;
4use base qw/Catalyst::Plugin::Authentication::User/;
5
6use strict;
7use warnings;
8
9sub new {
56bb3e6b 10 my $class = shift;
07e49bc7 11
c1ec9640 12 bless { ( @_ > 1 ) ? @_ : %{ $_[0] } }, $class;
07e49bc7 13}
14
15sub AUTOLOAD {
16 my $self = shift;
17 ( my $key ) = ( our $AUTOLOAD =~ m/([^:]*)$/ );
18
c1ec9640 19 $self->_accessor( $key, @_ );
8b52f75e 20}
21
22sub id {
c1ec9640 23 my $self = shift;
24 $self->_accessor( "id", @_ );
8b52f75e 25}
26
27sub store {
c1ec9640 28 my $self = shift;
29 ref $self || $self;
8b52f75e 30}
31
32sub _accessor {
c1ec9640 33 my $self = shift;
34 my $key = shift;
8b52f75e 35
56bb3e6b 36 if (@_) {
37 my $arr = $self->{__hash_obj_key_is_array}{$key} = @_ > 1;
38 $self->{$key} = $arr ? [@_] : shift;
39 }
1bd3c97f 40
56bb3e6b 41 my $data = $self->{$key};
af46f2c6 42 ( $self->{__hash_obj_key_is_array}{$key} || $key =~ /roles/ )
24970601 43 ? @{ $data || [] }
af46f2c6 44 : $data;
07e49bc7 45}
46
47my %features = (
48 password => {
56bb3e6b 49 clear => ["password"],
50 crypted => ["crypted_password"],
51 hashed => [qw/hashed_password hash_algorithm/],
52 self_check => undef,
07e49bc7 53 },
56bb3e6b 54 roles => ["roles"],
f2fee7ad 55 session => 1,
07e49bc7 56);
57
58sub supports {
59 my ( $self, @spec ) = @_;
60
61 my $cursor = \%features;
62
c1ec9640 63 return 1 if @spec == 1 and exists $self->{ $spec[0] };
64
07e49bc7 65 # traverse the feature list,
66 for (@spec) {
67 die "bad feature spec: @spec"
1bd3c97f 68 if ref($cursor) ne "HASH";
69 $cursor = $cursor->{$_};
07e49bc7 70 }
71
56bb3e6b 72 if ( ref $cursor ) {
73 die "bad feature spec: @spec" unless ref $cursor eq "ARRAY";
07e49bc7 74
56bb3e6b 75 # check that all the keys required for a feature are in here
76 foreach my $key (@$cursor) {
77 return undef unless exists $self->{$key};
78 }
07e49bc7 79
56bb3e6b 80 return 1;
81 }
82 else {
83 return $cursor;
84 }
07e49bc7 85}
86
87sub for_session {
88 my $self = shift;
07e49bc7 89 return $self; # let's hope we're serialization happy
90}
91
f2fee7ad 92sub from_session {
c1ec9640 93 my ( $self, $c, $user ) = @_;
94 $user;
f2fee7ad 95}
96
07e49bc7 97__PACKAGE__;
98
99__END__
100
101=pod
102
103=head1 NAME
104
105Catalyst::Plugin::Authentication::User::Hash - An easy authentication user
106object based on hashes.
107
108=head1 SYNOPSIS
109
110 use Catalyst::Plugin::Authentication::User::Hash;
111
112 Catalyst::Plugin::Authentication::User::Hash->new(
113 password => "s3cr3t",
114 );
115
116=head1 DESCRIPTION
117
118This implementation of authentication user handles is supposed to go hand in
119hand with L<Catalyst::Plugin::Authentication::Store::Minimal>.
120
121=head1 METHODS
122
123=over 4
124
125=item new @pairs
126
127Create a new object with the key-value-pairs listed in the arg list.
128
129=item supports
130
131Checks for existence of keys that correspond with features.
132
133=item for_session
134
135Just returns $self, expecting it to be serializable.
136
137=item from_session
138
139Just passes returns the unserialized object, hoping it's intact.
140
141=item AUTOLOAD
142
143Accessor for the key whose name is the method.
144
b260654c 145=item id
146
147=item store
148
149Accessors that override superclass's dying virtual methods.
150
07e49bc7 151=back
152
153=head1 SEE ALSO
154
155L<Hash::AsObject>
156
157=cut
158
159