From 9ea25c81c41144c8968fc2fcc721dd09d85c58e4 Mon Sep 17 00:00:00 2001 From: Olusesan Ameye Date: Wed, 1 Jun 2022 11:36:29 -0400 Subject: [PATCH] Backend support for Apple login --- wrenchboard/src/include/account.h | 1 + wrenchboard/src/include/wrenchboard_api.h | 1 + wrenchboard/src/shared_tool/account.cc | 24 ++++++++++++++++++++- www/application/config/constants.php | 1 + www/application/controllers/Login.php | 26 +++++++++++++++-------- 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/wrenchboard/src/include/account.h b/wrenchboard/src/include/account.h index 0b78eee4..918e03f3 100644 --- a/wrenchboard/src/include/account.h +++ b/wrenchboard/src/include/account.h @@ -9,6 +9,7 @@ long account_calls(CVars in, CVars &out); long LoginWrenchBoardAccount( CVars in, CVars &out ); long LoginWrenchBoardFacebook( CVars in, CVars &out ); long LoginWrenchBoardGoogle( CVars in, CVars &out ); +long LoginWrenchBoardApple( CVars in, CVars &out ); long LoginWrenchBoardExternal( CVars in, CVars &out ); long SessionCheck(long uid, const char *sessionid, int create ); long account_session_check(CVars in, CVars out); diff --git a/wrenchboard/src/include/wrenchboard_api.h b/wrenchboard/src/include/wrenchboard_api.h index 379d6b39..7f9ba545 100644 --- a/wrenchboard/src/include/wrenchboard_api.h +++ b/wrenchboard/src/include/wrenchboard_api.h @@ -145,6 +145,7 @@ enum { PARTNER_STRIPE }; #define WRENCHBOARD_ACCOUNT_LOGIN 11025 #define WRENCHBOARD_FACEBOOK_LOGIN 11026 #define WRENCHBOARD_GOOGLE_LOGIN 11027 +#define WRENCHBOARD_APPLE_LOGIN 11031 #define WRENCHBOARD_START_JOBLIST 11028 #define WRENCHBOARD_ACCOUNT_DASHDATA 11029 diff --git a/wrenchboard/src/shared_tool/account.cc b/wrenchboard/src/shared_tool/account.cc index ff41c61e..78d035d1 100644 --- a/wrenchboard/src/shared_tool/account.cc +++ b/wrenchboard/src/shared_tool/account.cc @@ -218,6 +218,10 @@ long account_calls(CVars in, CVars &out) { return LoginWrenchBoardGoogle(in, out); break; + case WRENCHBOARD_APPLE_LOGIN: + return LoginWrenchBoardApple(in, out); + break; + case WRENCHBOARD_ACCOUNT_PENDING: return CreateWrenchBoardAccountPending(in, out); break; @@ -1323,6 +1327,24 @@ long LoginWrenchBoardGoogle(CVars in, CVars &out) { return res; } +long LoginWrenchBoardApple(CVars in, CVars &out) { + long res = PHP_API_BAD_PARAM; + logfmt(logINFO, "LoginWrenchBoardApple()"); + REQ_STRING(in, "apple_id", 5, 49, "(.*)"); + in["external_idp_provider_id"] = in["apple_id"]; + in["external_idp_provider"] = 3L; // Apple + in["apple_id"].set_valid(false); + REQ_STRING(in, "email", 6, 49, "(.*)"); + OPTIONAL(in, "firstname") REQ_STRING(in, "firstname", 1, 49, "(.*)"); + else in["firstname"] = ""; + OPTIONAL(in, "lastname") REQ_STRING(in, "lastname", 1, 49, "(.*)"); + else in["lastname"] = ""; + REQ_STRING(in, "sessionid", 4, 40, "(.*)"); + OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)"); + res = LoginWrenchBoardExternal(in, out); + logfmt(logINFO, "/LoginWrenchBoardApple()"); + return res; +} long LoginWrenchBoardExternal(CVars in, CVars &out) { long res = PHP_API_BAD_PARAM; @@ -1337,7 +1359,7 @@ long LoginWrenchBoardExternal(CVars in, CVars &out) { } else { ret = load_db_record(out, "SELECT *,id AS member_id FROM members WHERE LOWER(email)=LOWER('%s') AND external_idp_provider_id='%s' AND external_idp_provider=%ld", in["email"].c_str(), in["external_idp_provider_id"].c_str(), in["external_idp_provider"].Long()); if (ret > 0) { - logfmt(logINFO, "FB account already exists"); + logfmt(logINFO, "External account already exists"); } else { logfmt(logINFO, "Create new FB account"); CVars xx; diff --git a/www/application/config/constants.php b/www/application/config/constants.php index d54e70bc..cace3d83 100644 --- a/www/application/config/constants.php +++ b/www/application/config/constants.php @@ -156,6 +156,7 @@ define('WRENCHBOARD_ACCOUNT_CREATEACC', 11020); define('WRENCHBOARD_ACCOUNT_LOGIN', 11025); define('WRENCHBOARD_FACEBOOK_LOGIN', 11026); define('WRENCHBOARD_GOOGLE_LOGIN', 11027); +define('WRENCHBOARD_APPLE_LOGIN', 11031); define('WRENCHBOARD_SEND_CONTACTUS', 11030); define('WRENCHBOARD_ACCOUNT_SENDREFER',11032); define('WRENCHBOARD_ACCOUNT_REFERLINK',11033); diff --git a/www/application/controllers/Login.php b/www/application/controllers/Login.php index e23ab9a2..e3206b49 100644 --- a/www/application/controllers/Login.php +++ b/www/application/controllers/Login.php @@ -265,7 +265,7 @@ class Login extends WRB_Controller { if ($proceed) { - $this->provision_account($user, $data); + $this->provisionAccount($user, $data); } else { // Cannot proceed - duplicate email? @@ -349,21 +349,23 @@ class Login extends WRB_Controller { eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLndyZW5jaGJvYXJkLnVzZXJzLmNsaWVudCIsImV4cCI6MTY1NDE3MjM5NywiaWF0IjoxNjU0MDg1OTk3LCJzdWIiOiIwMDE4MTAuMjBlNzUwMjhkNDljNDJkOGI0MzBiNDJkMWQ3NDg3ZjMuMTE1NyIsImF0X2hhc2giOiJPSzNfZlNtLUJZTEMzd3R5QTB4Q2pRIiwiZW1haWwiOiJhY2lkdW1pcmFlQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjoidHJ1ZSIsImF1dGhfdGltZSI6MTY1NDA4NTk2Mywibm9uY2Vfc3VwcG9ydGVkIjp0cnVlfQ jHxcOMAxUYEJx7nlmAXPN6PuqKMxVVcklGU5p6k16UvSS4DOM7nDwduo8D9FrzcjnTMGmLAThBYw2reilKv3vod034iTfBoL-vno_I7Wa-Iig5uTji7leaoDpfWyDAT7kFXpa6LVGdtZ8KdcVfSY-GF58JpKKQtf-sKB4sqnN1HAeCgYKP3EO5sf0zOttA7noZ_i6ITrmFbx5Mndf8Ktw-gb-LM-Ux11TEApByn4FcpL5m3ycvxxyaWsnLrGtraNK2S5N7Sby2imSB0iT9MFQRCL-4ddyD1YUDbpKLQDTlaSQuTPCX09AdMeLpx0wK6TAiTUUrOf93ljYU724Flb4g */ - //die(); + $id = $claims->sub; + echo "

${id}

"; + $email = $claims->email; if ($id !='' && $email != '') { $user = array( - 'id' => $claims->sub, - 'name' => 'First Last', - 'email' => $claims->email, + 'id' => $id, + 'name' => '', + 'email' => $email, 'apple' => 1 ); list($proceed, $data) = $this->checkUserExists($user, $data); if ($proceed) { - $this->provision_account($user, $data); + $this->provisionAccount($user, $data); } else { // Cannot proceed - duplicate email? @@ -383,18 +385,24 @@ class Login extends WRB_Controller { } } - function provision_account($user, $data) + private function provisionAccount($user, $data) { $name = (string) $user["name"]; if (trim($name) == "") { $name = strtok($user["email"], "@"); } - $data['google_id'] = $user["id"]; + if (array_key_exists('google',$user)) { + $data['google_id'] = $user["id"]; + $data['action'] = WRENCHBOARD_GOOGLE_LOGIN; + } else { + $data['apple_id'] = $user["id"]; + $data['action'] = WRENCHBOARD_APPLE_LOGIN; + } $data['firstname'] = strtok($name, " "); $data['lastname'] = strtok(" "); $data['email'] = $user["email"]; $data['sessionid'] = rand(10000, 99999) . "A" . rand(10000, 99999); - $data['action'] = WRENCHBOARD_GOOGLE_LOGIN; + $this->load->model('backend_model'); $out = array();