From a76206d4809364eaab288df45b126893887e46f4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 24 Mar 2010 15:32:35 -0400 Subject: [PATCH] fix back-compat with old Net::OpenID Debian stable's Net::OpenID does not support getting extension fields. --- IkiWiki/Plugin/openid.pm | 47 ++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/IkiWiki/Plugin/openid.pm b/IkiWiki/Plugin/openid.pm index 9355cd85a..7b1a17831 100644 --- a/IkiWiki/Plugin/openid.pm +++ b/IkiWiki/Plugin/openid.pm @@ -116,23 +116,25 @@ sub validate ($$$;$) { # Ask for client to provide a name and email, if possible. # Try sreg and ax - $claimed_identity->set_extension_args( - 'http://openid.net/extensions/sreg/1.1', - { - optional => 'email,fullname,nickname', - }, - ); - $claimed_identity->set_extension_args( - 'http://openid.net/srv/ax/1.0', - { - mode => 'fetch_request', - 'required' => 'email,fullname,nickname,firstname', - 'type.email' => "http://schema.openid.net/contact/email", - 'type.fullname' => "http://axschema.org/namePerson", - 'type.nickname' => "http://axschema.org/namePerson/friendly", - 'type.firstname' => "http://axschema.org/namePerson/first", - }, - ); + if ($claimed_identity->can("set_extension_args")) { + $claimed_identity->set_extension_args( + 'http://openid.net/extensions/sreg/1.1', + { + optional => 'email,fullname,nickname', + }, + ); + $claimed_identity->set_extension_args( + 'http://openid.net/srv/ax/1.0', + { + mode => 'fetch_request', + 'required' => 'email,fullname,nickname,firstname', + 'type.email' => "http://schema.openid.net/contact/email", + 'type.fullname' => "http://axschema.org/namePerson", + 'type.nickname' => "http://axschema.org/namePerson/friendly", + 'type.firstname' => "http://axschema.org/namePerson/first", + }, + ); + } my $check_url = $claimed_identity->check_url( return_to => IkiWiki::cgiurl(do => "postsignin"), @@ -161,10 +163,13 @@ sub auth ($$) { elsif (my $vident = $csr->verified_identity) { $session->param(name => $vident->url); - my @extensions=grep { defined } ( - $vident->signed_extension_fields('http://openid.net/extensions/sreg/1.1'), - $vident->signed_extension_fields('http://openid.net/srv/ax/1.0'), - ); + my @extensions; + if ($vident->can("signed_extension_fields")) { + @extensions=grep { defined } ( + $vident->signed_extension_fields('http://openid.net/extensions/sreg/1.1'), + $vident->signed_extension_fields('http://openid.net/srv/ax/1.0'), + ); + } foreach my $ext (@extensions) { foreach my $field (qw{value.email email}) { if (exists $ext->{$field} && -- 2.26.2