Google oauth code for token exchange

This commit is contained in:
tokslaw7
2023-07-09 01:32:31 +00:00
parent 2703d0c83b
commit f262367aff
+44 -6
View File
@@ -70,7 +70,7 @@ class WrenchOauth extends BaseController
} else {
http_response_code(404);
// tell the user product does not exist
echo json_encode([
return json_encode([
'message' => 'Endpoint not found.',
'URI' => $uri,
]);
@@ -117,7 +117,47 @@ class WrenchOauth extends BaseController
}
private function prepareOauthEndPointData($endpoint, &$in, &$call_backend=true,&$local_out=[]){
private function gooleOAuthCodeExchange($in, &$local_out) {
/*
POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your_client_id&
client_secret=your_client_secret&
redirect_uri=https%3A//oauth2.example.com/code&
grant_type=authorization_code
*/
$data = [
"code" => $in["code"],
"client_id" => $this->getSiteConfigurations("google.google_client_id"),
"client_secret" => $this->getSiteConfigurations("google.google_client_secret"),
"redirect_uri" => $in["redirect_uri"],
"grant_type" => "authorization_code"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://oauth2.googleapis.com/token");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close($ch);
$local_out = json_decode($server_output,true);
if (!is_array($local_out) || !array_key_exists("message",$local_out)) {
$local_out["message"] = "Received from Google token API: ".$server_output;
}
}
private function prepareOauthEndPointData($endpoint, $in, &$call_backend=true,&$local_out=[]){
log_message('critical', "Started prepareOauthEndPointData -> ".$endpoint );
switch ($endpoint) {
case 'authstart':
@@ -125,13 +165,11 @@ class WrenchOauth extends BaseController
switch($in["auth_type"]){
case 'GOOGLE':
log_message('critical', "Reading prepareOauthEndPointData -> ".$endpoint );
$in["login_channel"] = "990010"; /* LOGIN_GOOGLE */
$in["GOOGLE_CLIENT_ID"] = $this->getSiteConfigurations("google.google_client_id");
$in["GOOGLE_CLIENT_SECRET"] = $this->getSiteConfigurations("google.google_client_secret");
$this->gooleOAuthCodeExchange($in, $local_out);
break;
}
log_message('critical', "prepareOauthEndPointDataL FINAL DATA".serialize($local_out) );
$call_backend=true;
$call_backend=false;
break;
case 'authlogin':
// not really implemented