Files
FloatAppGate/public/core1/SAVVY/oauth2/SignupOrLoginAppleApi.php
T
dev-chiefworks 47f4fad75c Added Other AP
2022-04-26 11:30:34 -04:00

230 lines
9.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
class SignupOrLoginAppleApi extends Api
{
public $apiName = 'signuporloginapple';
/*
curl -H "Content-Type: application/json" -H "Authorization: Server-Token 99dfe35fcb7de1ee" \
https://svrsavvy.sworks.float.sg/SAVVY/oauth2/api/signuporloginapple/?email=savvy@chiefsoft.com
*/
public function indexAction()
{
$email = $this->requestParams["email"] ?? 0;
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$db = new Db();
$result = OAuth2::getMemberByEmail($db->getConnect(), $email);
if (isset($result["id"])) {
$result["member_id"] = $result["id"];
unset($result["password"]);
return $this->response($result, 200);
} else {
return $this->response(
array(
'error' => 'Account is not found'
), 500);
}
}
return $this->response(
array(
'error' => 'Invalid e-mail'
), 500);
}
/**
* Method GET
* Get single record (by id)
* http://DOMAIN/pull/?member_id=22&oauth2_token_id=153
* @return string
*/
public function viewAction()
{
//id must be the first parameter after /trips/x
/*
$id = array_shift($this->requestUri);
if($id && (int)$id>0){
$db = new Db();
$tripOptions = Trips::getOptionsById($db->getConnect(), (int)$id);
if(is_array($tripOptions) && count($tripOptions)>0){
return $this->response(
array(
'id' => $id,
'count' => count($tripOptions),
'options' => $tripOptions
), 200);
}
}*/
return $this->response(
array(
'error'=> 'Data not found'
), 404);
}
/**
* Method POST
* Create new record
* http://DOMAIN/pull + request parameters name, email
* @return string
*/
/*
{
"oauth2_provider_id":2,
"authorization_code": "c707cc913cca04439953da4df234e0781.0.mss.2i20cbkfT2jO9G3yFl5_8Q",
"identity_token": "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3Mi0iJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoic2cubXlmbG9hdC5mbG9hdGFwcCIsImV4cCI6MTU5MjQ4Nzg4MCwiaWF0IjoxNTkyNDg3MjgwLCJzdWIiOiIwMDAwMjIuNTUwOGQxMzU0OGUxNGIyOTk4YTFmNzVlZWNlZTRiZGYuMTYyOSIsImNfaGFzaCI6IkVUcTFqazdjbE9BQlRjdmF0OFZnQUEiLCJlbWFpbCI6In1hbm1rdXJrajdAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1OTI0ODcyODAsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.DnptAwgs0kIsLv1LjxKZ8QetfutaDNqdHdDsPH5SG8xpzDEz798-NTBGLvcHpSHwBYLzm2W9G-VcSFRTOrjDcv1ZfzoYjwe107nTLzd5HOсEOTd-0gb3tn4xEjrdjiQxSyJKZqDUvfFO0g-x7sowzOtd3RRBIV7S0f1Cg5cX6qxJn-pSHh960oe18P8_IdykPnt-nuUZcqvsUr1tkN64SBJKCDPjZjOXJ_a0fBpOdw0BAviPiLEYtcHvtoCuSGWMBUWAueVXompo4FVVaQvp4diYFrI33H8j71t62uahgT_CKWBVeu1smBTIwANbdg-JRo8r7fr94JauPUvQh-2sZw",
"user_id": "000022.5508d13548e14b2998a1f75eecee4bdf.1629",
"email": "aciudmirae@mac.com",
"name": "Anatolii Okhotnikov"
}
curl -d '{"oauth2_provider_id":2, "identity_token":"identity_token", "authorization_code":"authorization_code", "user_id": "000022.5508d13548e14b2998a1f75eecee4bdf.1629", "email":"", "name":"Anatolii Okhotnikov"}' \
-H "Content-Type: application/json" -H "Authorization: Server-Token 99dfe35fcb7de1ee" \
-X POST https://svrsavvy.sworks.float.sg/SAVVY/oauth2/api/signuporloginapple
curl -d '{"encrypted_payload": ""}' \
-H "Content-Type: application/json" -H "Authorization: Server-Token 99dfe35fcb7de1ee" \
-X POST https://svrsavvy.sworks.float.sg/SAVVY/oauth2/api/signuporloginapple
*/
public function createAction()
{
error_log("SignupOrLoginAppleApi::createAction()");
global $savvyext;
$saveToken = true;
$message = "";
$member_id = 0;
$oauth2_provider_id = (int)($this->requestParams["oauth2_provider_id"] ?? 0);
$refresh_token = $this->requestParams["identity_token"] ?? "";
$access_token = $this->requestParams["authorization_code"] ?? "";
$user_id = $this->requestParams["user_id"] ?? "";
$email = $this->requestParams["email"] ?? "";
$name = $this->requestParams["name"] ?? "";
/* $refresh_token!="" && */
if ($refresh_token=="" || $oauth2_provider_id!=2 || $access_token=="" || $user_id=="" || $name=="") {
$data = array();
$data[] = $refresh_token=="";
$data[] = $oauth2_provider_id<1;
$data[] = $access_token=="";
$data[] = $name=="";
$data[] = !filter_var($email, FILTER_VALIDATE_EMAIL);
error_log("SignupOrLoginAppleApi: Invalid OAuth2 data");
return $this->response(
array(
"debug" => $data,
"error" => "Invalid OAuth2 data"
), 500);
}
$db = new Db();
// If we login the second time there will be no email
if ($email=="" || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
// Get email base on the user id
$email = OAuth2::getMemberEmailByUserId($db->getConnect(), $oauth2_provider_id, $user_id);
}
$member = OAuth2::getMemberByEmail($db->getConnect(), $email);
if (isset($member["id"])) {
error_log("SignupOrLoginAppleApi: User found");
// User found
$member_id = $member["id"];
// We must create session and populate all fields properly
$in = array (
"action" => SAVVY_USER_LOGINACCOUNT,
"loc" => $_SERVER["REMOTE_ADDR"],
"pid" => 100,
"username" => $member["username"], /* Could be different from e-mail connected? */
"impersonate" => 1 /* we willbypass password check - we do not know the password! */
);
$member = $savvyext->savvyext_api($in);
// Do we save a new token?
$saveToken = true; //false;
} else {
error_log("SignupOrLoginAppleApi: Create new user");
list($firstname, $lastname) = SignupOrLoginAppleApi::splitName($name);
// Create new user
$in = array(
"action" => SAVVY_USER_CREATEACCOUNT,
"loc" => $_SERVER["REMOTE_ADDR"],
"pid" => 100,
"web" => 120012, /* MVP_DIRECT_CALL */
"start_mode" => 1,
"username" => $email,
"password" => "savvy",
"email" => $email,
"firstname" => $firstname,
"lastname" => $lastname,
"phone" => ""
);
$member = $savvyext->savvyext_api($in);
if (isset($member["member_id"]) && $member["member_id"]>0) {
//User created!
$member_id = $member["member_id"];
$surveyData = $this->requestParams["signUpSurveyData"] ?? [];
Oauth2::saveMembersSurvey($db->getConnect(), $surveyData, $member);
} else {
return $this->response(
array(
"error" => "Failed to register new user"
), 500);
}
$saveToken = true; // New user & new token?
}
// Save token
$token = array();
if ($saveToken) {
error_log("SignupOrLoginAppleApi: Will save OAuth2 token!");
$token = OAuth2::saveToken(
$db->getConnect(),
$oauth2_provider_id,
$member_id,
$refresh_token,
$access_token,
$email,
$name,
$user_id
);
} else {
error_log("SignupOrLoginAppleApi: get latest token");
// Do we get any token for the existing user?
$token = OAuth2::getLatestToken($db->getConnect(), $member_id, $oauth2_provider_id);
}
return $this->response(
array(
"error" => $message,
"token" => $token,
"member" => $member,
"member_id" => $member_id
), 200);
}
private function splitName($name) {
$my_name = trim($name);
$firstname = " ";
$lastname = " ";
$pos = strpos(trim($my_name), " ");
if ($pos!==false) {
$firstname = trim(substr($my_name, 0, $pos));
$lastname = trim(substr($my_name, $pos));
} else {
$firstname = $my_name ?? " ";
}
if ($firstname=="") $firstname = " ";
if ($lastname=="") $lastname = " ";
return array($firstname, $lastname);
}
public function updateAction() {
return $this->response(
array(
"error" => "Update error"
), 400);
}
public function deleteAction() {
return $this->response(
array(
"error" => "Delete error"
), 500);
}
}