From 51812950e3832103c9efc000c8fa11d9266be821 Mon Sep 17 00:00:00 2001 From: Olusesan Ameye Date: Sun, 10 Apr 2022 19:04:20 -0400 Subject: [PATCH] fix --- wrenchboard/src/include/account.h | 2 + wrenchboard/src/shared_tool/account.cc | 53 ++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/wrenchboard/src/include/account.h b/wrenchboard/src/include/account.h index 7b3c7159..0b78eee4 100644 --- a/wrenchboard/src/include/account.h +++ b/wrenchboard/src/include/account.h @@ -8,6 +8,8 @@ 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 LoginWrenchBoardExternal( CVars in, CVars &out ); long SessionCheck(long uid, const char *sessionid, int create ); long account_session_check(CVars in, CVars out); long VerifySession(CVars in, CVars &out); diff --git a/wrenchboard/src/shared_tool/account.cc b/wrenchboard/src/shared_tool/account.cc index 15c05495..c20b4c09 100644 --- a/wrenchboard/src/shared_tool/account.cc +++ b/wrenchboard/src/shared_tool/account.cc @@ -134,8 +134,9 @@ long account_calls(CVars in, CVars &out) { long ret = 0; const char * loc = getenv("REMOTE_ADDR"); const PGresult *res; - -//test(); + logfmt(logINFO, "action = %ld", action); + logfmt(logINFO, "google = %ld", WRENCHBOARD_GOOGLE_LOGIN); + //test(); switch (action) { case WRENCHBOARD_CREATE_MOBILEUSER: @@ -176,7 +177,7 @@ long account_calls(CVars in, CVars &out) { REQ_STRING(in, "email", 5, 49, "(.*)"); REQ_STRING(in, "firstname", 1, 49, "(.*)"); REQ_STRING(in, "lastname", 1, 40, "(.*)"); - REQ_STRING(in, "your_message", 4, 400, "(.*)"); + REQ_STRING(in, "your_message", 4, 400, "(.*)"); //OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)"); in["loc"] = loc; @@ -213,6 +214,10 @@ long account_calls(CVars in, CVars &out) { return LoginWrenchBoardFacebook(in, out); break; + case WRENCHBOARD_GOOGLE_LOGIN: + return LoginWrenchBoardGoogle(in, out); + break; + case WRENCHBOARD_ACCOUNT_PENDING: return CreateWrenchBoardAccountPending(in, out); break; @@ -1283,6 +1288,9 @@ long LoginWrenchBoardFacebook(CVars in, CVars &out) { long res = PHP_API_BAD_PARAM; logfmt(logINFO, "LoginWrenchBoardFacebook()"); REQ_STRING(in, "fb_id", 5, 49, "(.*)"); + in["external_idp_provider_id"] = in["fb_id"].Long(); + in["external_idp_provider"] = 1L; // Facebook + in["fb_id"].set_valid(false); REQ_STRING(in, "email", 6, 49, "(.*)"); OPTIONAL(in, "firstname") REQ_STRING(in, "firstname", 1, 49, "(.*)"); else in["firstname"] = ""; @@ -1290,8 +1298,35 @@ long LoginWrenchBoardFacebook(CVars in, CVars &out) { else in["lastname"] = ""; REQ_STRING(in, "sessionid", 4, 40, "(.*)"); OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)"); + res = LoginWrenchBoardExternal(in, out); + logfmt(logINFO, "/LoginWrenchBoardFacebook()"); + return res; +} - const char * loc = getenv("REMOTE_ADDR"); +long LoginWrenchBoardGoogle(CVars in, CVars &out) { + long res = PHP_API_BAD_PARAM; + logfmt(logINFO, "LoginWrenchBoardGoogle()"); + REQ_STRING(in, "google_id", 5, 49, "(.*)"); + in["external_idp_provider_id"] = in["google_id"].Long(); + in["external_idp_provider"] = 2L; // Google + in["google_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, "/LoginWrenchBoardGoogle()"); + return res; +} + + +long LoginWrenchBoardExternal(CVars in, CVars &out) { + long res = PHP_API_BAD_PARAM; + logfmt(logINFO, "LoginWrenchBoardExternal()"); + const char * loc = getenv("REMOTE_ADDR"); in["loc"] = loc; in["loc"].set_valid(true); @@ -1299,7 +1334,7 @@ long LoginWrenchBoardFacebook(CVars in, CVars &out) { if (ret > 0) { out["status"] = "Email is already registered"; } else { - ret = load_db_record(out, "SELECT *,id AS member_id FROM members WHERE LOWER(email)=LOWER('%s') AND fb_id='%s'", in["email"].c_str(), in["fb_id"].c_str()); + 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"); } else { @@ -1315,8 +1350,10 @@ long LoginWrenchBoardFacebook(CVars in, CVars &out) { xx["email"].set_valid(true); xx["loc"] = in["loc"]; xx["loc"].set_valid(true); - xx["fb_id"] = in["fb_id"]; - xx["fb_id"].set_valid(true); + xx["external_idp_provider"] = in["external_idp_provider"]; + xx["external_idp_provider"].set_valid(true); + xx["external_idp_provider_id"] = in["external_idp_provider_id"]; + xx["external_idp_provider_id"].set_valid(true); out["member_id"] = insert_db_record(DBS_VALID, "members", "members_id_seq", xx); ret = load_db_record(out, "SELECT *,id AS member_id FROM members WHERE id='%ld'", out["member_id"].Long()); } @@ -1336,7 +1373,7 @@ long LoginWrenchBoardFacebook(CVars in, CVars &out) { } } } - logfmt(logINFO, "/LoginWrenchBoardFacebook()"); + logfmt(logINFO, "/LoginWrenchBoardExternal()"); return res; }