| 38 | | sub login { |
| 39 | | my $class = shift; |
| 40 | | my ($app) = @_; |
| 41 | | my $q = $app->{query}; |
| 42 | | return $app->errtrans("Invalid request.") |
| 43 | | unless $q->param('blog_id'); |
| 44 | | my $blog = MT::Blog->load(scalar $q->param('blog_id')); |
| 45 | | my %param = $app->param_hash; |
| 46 | | my $csr = MT::Auth::OpenID::_get_csr(\%param, $blog) or return; |
| 47 | | my $identity = $q->param('openid_url'); |
| 48 | | if (!$identity && |
| 49 | | (my $u = $q->param('openid_userid')) && $class->can('url_for_userid')) { |
| 50 | | $identity = $class->url_for_userid($u); |
| 51 | | } |
| 52 | | my $claimed_identity = $csr->claimed_identity($identity); |
| 53 | | if (!$claimed_identity) { |
| 54 | | my ($err_code, $err_msg) = ($csr->errcode, $csr->errtext); |
| 55 | | if ($err_code eq 'no_head_tag' || $err_code eq 'no_identity_server' || $err_code eq 'url_gone') { |
| 56 | | $err_msg = $app->translate('The address entered does not appear to be an OpenID'); |
| 57 | | } |
| 58 | | elsif ($err_code eq 'empty_url' || $err_code eq 'bogus_url') { |
| 59 | | $err_msg = $app->translate('The text entered does not appear to be a web address'); |
| 60 | | } |
| 61 | | elsif ($err_code eq 'url_fetch_error') { |
| 62 | | $err_msg =~ s{ \A Error \s fetching \s URL: \s }{}xms; |
| 63 | | $err_msg = $app->translate('Unable to connect to [_1]: [_2]', $identity, $err_msg); |
| 64 | | } |
| 65 | | return $app->error($app->translate("Could not verify the OpenID provided: [_1]", $err_msg)); |
| 66 | | } |
| 67 | | |
| 68 | | my %params = $class->check_url_params( $app, $blog ); |
| 69 | | |
| 70 | | $claimed_identity->set_extension_args(NS_OPENID_SREG(), { |
| | 41 | $claimed_identity->set_extension_args(MT::Auth::OpenID::NS_OPENID_SREG(), { |