X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FText%2FTradition%2FDirectory.pm;h=ed5f9b21e22142e4aa6267f995be8d8d61d98e60;hb=10ef765302eb2d8ed7bdd23f63a2b9703cd1df59;hp=341da5cabc9cc9cd44f6375d906ac22457c132fc;hpb=59acd833609a5c50cf17d1cc680781d8d9501451;p=scpubgit%2Fstemmatology.git diff --git a/lib/Text/Tradition/Directory.pm b/lib/Text/Tradition/Directory.pm index 341da5c..ed5f9b2 100644 --- a/lib/Text/Tradition/Directory.pm +++ b/lib/Text/Tradition/Directory.pm @@ -367,7 +367,8 @@ Create a new user object, store in the KiokuDB backend, and return it. sub add_user { my ($self, $userinfo) = @_; - my $username = $userinfo->{url} || $userinfo->{username}; + + my $username = $userinfo->{username}; my $password = $userinfo->{password}; my $role = $userinfo->{role} || 'user'; @@ -377,6 +378,7 @@ sub add_user { my $user = Text::Tradition::User->new( id => $username, password => ($password ? crypt_password($password) : ''), + display => ($userinfo->{display} ? $userinfo->{display} : $username), role => $role, ); @@ -386,13 +388,41 @@ sub add_user { } sub create_user { - my $self = shift; - return $self->add_user(@_); + my ($self, $userinfo) = @_; + + ## No username means probably an OpenID based user + if(!exists $userinfo->{username}) { + extract_openid_data($userinfo); + } + + return $self->add_user($userinfo); +} + +## Not quite sure where this method should be.. Auth / +## Credential::OpenID just pass us back the chunk of extension data +sub extract_openid_data { + my ($userinfo) = @_; + + ## Spec says SHOULD use url as identifier + $userinfo->{username} = $userinfo->{url}; + + ## Use email addy as display if available + if(exists $userinfo->{extensions} && + exists $userinfo->{extensions}{'http://openid.net/srv/ax/1.0'} && + defined $userinfo->{extensions}{'http://openid.net/srv/ax/1.0'}{'value.email'}) { + ## Somewhat ugly attribute extension reponse, contains + ## google-email string which we can use as the id + + $userinfo->{display} = $userinfo->{extensions}{'http://openid.net/srv/ax/1.0'}{'value.email'}; + } + + return; } =head2 find_user -Takes a hashref of C, optionally C. +Takes a hashref of C, and possibly openIDish results from +L. Fetches the user object for the given username and returns it. @@ -400,17 +430,21 @@ Fetches the user object for the given username and returns it. sub find_user { my ($self, $userinfo) = @_; - ## url or display? - # 'display' => 'castaway.myopenid.com', - # 'url' => 'http://castaway.myopenid.com/', - my $username = $userinfo->{url} || $userinfo->{username}; + + ## No username means probably an OpenID based user + if(!exists $userinfo->{username}) { + extract_openid_data($userinfo); + } + + my $username = $userinfo->{username}; ## No logins if user is deactivated (use lookup to fetch to re-activate) my $user = $self->lookup(Text::Tradition::User->id_for_user($username)); - return if($user && !$user->active); + return if(!$user || !$user->active); + + print STDERR "Found user, $username, display is :", $user->display, ":\n"; return $user; - } =head2 modify_user