diff options
author | Simon McVittie <smcv@ http://smcv.pseudorandom.co.uk/> | 2009-07-10 18:41:16 +0100 |
---|---|---|
committer | Simon McVittie <smcv@ http://smcv.pseudorandom.co.uk/> | 2009-07-10 18:41:16 +0100 |
commit | e12b7f5e54730325c751a889ed2e08580b5ef6ba (patch) | |
tree | d16415379591f3edc83361e0fc60bea373748b2a /IkiWiki.pm | |
parent | 0c6a47e9e4c6a5508868b730bed0ac2d0c358ae4 (diff) |
Move OpenID pretty-printing from openid plugin to core
On various sites I have two IkiWiki instances running from the same
repository: one accessible via http and only accepting openid logins,
and one accessible via authenticated https and only accepting httpauth.
The https version should still pretty-print OpenIDs seen in git history,
even though it does not itself accept OpenID logins.
Diffstat (limited to 'IkiWiki.pm')
-rw-r--r-- | IkiWiki.pm | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm index a0a61ac64..0cb3bf143 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1063,6 +1063,41 @@ sub htmllink ($$$;@) { return "<a href=\"$bestlink\"@attrs>$linktext</a>"; } +sub openiduser ($) { + my $user=shift; + + if ($user =~ m!^https?://! && + eval q{use Net::OpenID::VerifiedIdentity; 1} && !$@) { + my $display; + + if (Net::OpenID::VerifiedIdentity->can("DisplayOfURL")) { + # this works in at least 2.x + $display = Net::OpenID::VerifiedIdentity::DisplayOfURL($user); + } + else { + # this only works in 1.x + my $oid=Net::OpenID::VerifiedIdentity->new(identity => $user); + $display=$oid->display; + } + + # Convert "user.somehost.com" to "user [somehost.com]" + # (also "user.somehost.co.uk") + if ($display !~ /\[/) { + $display=~s/^([-a-zA-Z0-9]+?)\.([-.a-zA-Z0-9]+\.[a-z]+)$/$1 [$2]/; + } + # Convert "http://somehost.com/user" to "user [somehost.com]". + # (also "https://somehost.com/user/") + if ($display !~ /\[/) { + $display=~s/^https?:\/\/(.+)\/([^\/]+)\/?$/$2 [$1]/; + } + $display=~s!^https?://!!; # make sure this is removed + eval q{use CGI 'escapeHTML'}; + error($@) if $@; + return escapeHTML($display); + } + return; +} + sub userlink ($) { my $user=shift; |