Backend support for Apple login

This commit is contained in:
2022-06-01 11:36:29 -04:00
parent 019e650090
commit 9ea25c81c4
5 changed files with 43 additions and 10 deletions
+1
View File
@@ -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);
@@ -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
+23 -1
View File
@@ -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;
+1
View File
@@ -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);
+17 -9
View File
@@ -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 "<h1>${id}</h1>";
$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();