summaryrefslogtreecommitdiffstats
path: root/extensions/GitHubAuth/lib/Client.pm
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/GitHubAuth/lib/Client.pm')
-rw-r--r--extensions/GitHubAuth/lib/Client.pm44
1 files changed, 11 insertions, 33 deletions
diff --git a/extensions/GitHubAuth/lib/Client.pm b/extensions/GitHubAuth/lib/Client.pm
index 338a5b639..77c8a6c61 100644
--- a/extensions/GitHubAuth/lib/Client.pm
+++ b/extensions/GitHubAuth/lib/Client.pm
@@ -15,7 +15,7 @@ use URI::QueryParam;
use Digest;
use Bugzilla::Extension::GitHubAuth::Client::Error qw(ThrowUserError ThrowCodeError);
-use Bugzilla::Util qw(remote_ip);
+use Bugzilla::Util qw(remote_ip correct_urlbase);
use constant DIGEST_HASH => 'SHA1';
@@ -35,19 +35,22 @@ sub new {
}
sub login_uri {
- my ($self, $target) = @_;
+ my ($class, $target_uri) = @_;
- $target->query_param(GoAheadAndLogIn => 1);
- $target->query_param(github_login => 1);
- $target->query_param_delete('logout');
+ my $uri = URI->new(correct_urlbase() . "github.cgi");
+ $uri->query_form(target_uri => $target_uri);
+ return $uri;
+}
- my $uri = URI->new(GH_AUTHORIZE_URI);
+sub authorize_uri {
+ my ($class, $state) = @_;
+ my $uri = URI->new(GH_AUTHORIZE_URI);
$uri->query_form(
client_id => Bugzilla->params->{github_client_id},
scope => 'user:email',
- state => $self->get_state($target),
- redirect_uri => $target,
+ state => $state,
+ redirect_uri => correct_urlbase() . "github.cgi",
);
return $uri;
@@ -65,31 +68,6 @@ sub get_email_key {
return $digest->hexdigest;
}
-sub get_state {
- my ($class, $target) = @_;
- my $sorted_target = $target->clone;
- $sorted_target->query_form({});
-
- foreach my $key (sort $target->query_param) {
- $sorted_target->query_param($key, $target->query_param($key));
- }
-
- $sorted_target->query_param_delete("code");
- $sorted_target->query_param_delete("state");
- $sorted_target->query_param_delete('github_email_key');
- $sorted_target->query_param_delete('github_email');
- $sorted_target->query_param_delete('GoAheadAndLogIn');
- $sorted_target->query_param_delete('github_login');
-
- my $cgi = Bugzilla->cgi;
- my $digest = Digest->new(DIGEST_HASH);
- $digest->add($sorted_target->as_string);
- $digest->add(remote_ip());
- $digest->add($cgi->cookie('Bugzilla_github_token') // Bugzilla->request_cache->{github_token} // '');
- $digest->add(Bugzilla->localconfig->{site_wide_secret});
- return $digest->hexdigest;
-}
-
sub _handle_response {
my ($self, $response) = @_;
my $data = eval {