public function oauthReturn(GithubService $api, VariableMap $variableMap, Session $session, SessionBasedOauth $sessionBasedOauth) { $code = $variableMap->getVariable('code', false); $state = $variableMap->getVariable('state', false); $oauthUnguessable = $session->getSessionVariable('oauthUnguessable', null); if (!$code || !$state || !$oauthUnguessable) { $errorContext = OauthErrorContext::create("Missing data: '{$code}' '{$state}' '{$oauthUnguessable}'"); return JigExecutable::createWithSharedObjects("pages/oauth/error", [$errorContext]); } if ($state !== $oauthUnguessable) { //Miss-match on what we're tring to validated. $errorContext = OauthErrorContext::create("Mismatch on secret'"); return JigExecutable::createWithSharedObjects("pages/oauth/error", [$errorContext]); } try { $oauthOperation = $api->getOauthAuthorization(GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, $code, $oauthUnguessable); $oauthOperation->setRedirect_uri("http://" . SERVER_HOSTNAME . "/oauthReturn"); $accessResponse = $oauthOperation->execute(); $session->setSessionVariable(GITHUB_ACCESS_RESPONSE_KEY, $accessResponse); $authToken = new Oauth2Token($accessResponse->accessToken); $sessionBasedOauth->save($authToken); $oauthSuccessContext = OauthSuccessContext::create($accessResponse); return JigExecutable::createWithSharedObjects("pages/oauth/success", [$oauthSuccessContext]); } catch (GithubArtaxServiceException $fae) { $errorContext = OauthErrorContext::create($fae->getMessage()); return JigExecutable::createWithSharedObjects("pages/oauth/error", [$errorContext]); } }