2793 lines
104 KiB
C++
2793 lines
104 KiB
C++
// Account management toosl
|
|
#include "clog.h"
|
|
#include "cgi.h"
|
|
#include "input.h"
|
|
#include "wrenchboard_api.h"
|
|
#include "account.h"
|
|
#include "email.h"
|
|
#include "safestring.h"
|
|
#include <string>
|
|
#include "pgsql.h"
|
|
#include "pgsql_wrapper.h"
|
|
#include "cfg.h"
|
|
#include <curl/curl.h>
|
|
#include "smoney.h"
|
|
#include "account_mngt.h"
|
|
#include "creditcards.h"
|
|
#include "payments.h"
|
|
|
|
#include "sel_data.h"
|
|
#include "history.h"
|
|
#include "recent_data.h";
|
|
|
|
#include "jobs.h"
|
|
#include "reco_engine.h" //error in file name
|
|
|
|
#define CREATE_BY_EMAIL 1000
|
|
#define CREATE_BY_PHONE 2000
|
|
|
|
struct MemoryStruct {
|
|
char *memory;
|
|
size_t size;
|
|
};
|
|
|
|
static size_t
|
|
WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) {
|
|
size_t realsize = size * nmemb;
|
|
struct MemoryStruct *mem = (struct MemoryStruct *) userp;
|
|
|
|
mem->memory = (char*) realloc(mem->memory, mem->size + realsize + 1);
|
|
if (mem->memory == NULL) {
|
|
/* out of memory! */
|
|
logfmt(logINFO, "not enough memory (realloc returned NULL)");
|
|
return 0;
|
|
}
|
|
|
|
memcpy(&(mem->memory[mem->size]), contents, realsize);
|
|
mem->size += realsize;
|
|
mem->memory[mem->size] = 0;
|
|
|
|
return realsize;
|
|
}
|
|
|
|
static const string base64_chars =
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
"abcdefghijklmnopqrstuvwxyz"
|
|
"0123456789+/";
|
|
|
|
static inline bool is_base64(unsigned char c) {
|
|
return (isalnum(c) || (c == '+') || (c == '/'));
|
|
}
|
|
|
|
|
|
string base64_decode(string const& encoded_string) {
|
|
int in_len = encoded_string.size();
|
|
int i = 0;
|
|
int j = 0;
|
|
int in_ = 0;
|
|
|
|
unsigned char char_array_4[4], char_array_3[3];
|
|
std::string ret;
|
|
|
|
while (in_len-- && (encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
|
|
char_array_4[i++] = encoded_string[in_];
|
|
in_++;
|
|
if (i == 4) {
|
|
for (i = 0; i < 4; i++)
|
|
char_array_4[i] = base64_chars.find(char_array_4[i]);
|
|
|
|
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
|
|
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
|
|
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
|
|
|
|
for (i = 0; (i < 3); i++)
|
|
ret += char_array_3[i];
|
|
i = 0;
|
|
}
|
|
}
|
|
|
|
if (i) {
|
|
for (j = i; j < 4; j++)
|
|
char_array_4[j] = 0;
|
|
|
|
for (j = 0; j < 4; j++)
|
|
char_array_4[j] = base64_chars.find(char_array_4[j]);
|
|
|
|
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
|
|
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
|
|
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
|
|
|
|
for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/*
|
|
CREATE TABLE members_log (
|
|
id SERIAL,
|
|
member_id INT REFERENCES members(id),
|
|
mlog TEXT,
|
|
loc INET,
|
|
status INT DEFAULT 1,
|
|
created timestamp without time zone DEFAULT now()
|
|
);
|
|
*/
|
|
long LoginLogger( long member_id, long login_mode);
|
|
long WrenchBoardMobileSendMoney(CVars in, CVars &out);
|
|
long WrenchBoardMobileSendJobInterest(CVars in, CVars &out);
|
|
long WrenchReturnPendingJobList(CVars in, CVars &out);
|
|
long WrenchBoardMobileSendUserWallet(CVars in, CVars &out);
|
|
long WrenchBoardStartBalanceTopup(CVars in, CVars &out);
|
|
long WrenchBoardCompleteBalanceTopup(CVars in, CVars &out);
|
|
long WrenchResendSendReferLoadLink(CVars in, CVars &out);
|
|
long WrenchBoardDeleteAccount(CVars in, CVars &out);
|
|
long VerifyWrenchAccountLink(CVars in, CVars &out);
|
|
long LoginWrenchBoardAuxAccount(CVars in, CVars &out);
|
|
long WrenchDeleteUsersCCard(CVars in, CVars &out);
|
|
long WrenchFlutterCreditHook(CVars in, CVars &out);
|
|
long WrenchBoardTopupResult(CVars in, CVars &out);
|
|
long WrenchRegisterMyFileUpload(CVars in, CVars &out);
|
|
long WrenchGetRecentDash(CVars in, CVars &out);
|
|
long LoginWrenchBoardQRAccount(CVars in, CVars &out);
|
|
|
|
long test() {
|
|
FILE* oldFile = Output2FILE::Stream();
|
|
FILE* pFile = fopen(WRENCHBOARD_CONFIG"/../logs/somefile.log", "a");
|
|
Output2FILE::Stream() = pFile;
|
|
//...
|
|
FILE_LOG(logINFO) << "Some text...";
|
|
logfmt(logINFO, "Some text...");
|
|
//...
|
|
fclose(pFile);
|
|
Output2FILE::Stream() = oldFile;
|
|
return 0L;
|
|
}
|
|
|
|
long account_calls(CVars in, CVars &out) {
|
|
logfmt(logINFO, "account_calls()");
|
|
out["result"] = "YES I GET TO BACK END";
|
|
long action = REQ_LONG(in, "action", 0, -1);
|
|
CVars x;
|
|
long ret = 0;
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
const PGresult *res;
|
|
logfmt(logINFO, "action = %ld", action);
|
|
logfmt(logINFO, "google = %ld", WRENCHBOARD_GOOGLE_LOGIN);
|
|
//test();
|
|
|
|
switch (action) {
|
|
case WRENCHBOARD_CREATE_MOBILEUSER:
|
|
return CreateMobileWrenchBoardAccount(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_COMPLETE_MOBILEUSER:
|
|
return CompleteMobileAccountCreation(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_RESET_PASSWORD:
|
|
return WrenchResetMemberPass(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_MOBILE_MESSAGE:
|
|
return WrenchReturnMemberMessages(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_MOBILE_ACTIVEJOB:
|
|
return WrenchMemberActiveJobs(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_TESTEMAIL:
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case WRENCHBOARD_SAVE_GALLERY:
|
|
return WrenchUpdateSiteGallery(in, out);
|
|
break;
|
|
|
|
|
|
|
|
case WRENCHBOARD_SEND_CONTACTUS:
|
|
logfmt(logINFO, "ContactUS()");
|
|
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, "(.*)");
|
|
//OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)");
|
|
|
|
in["loc"] = loc;
|
|
in["loc"].set_valid(true);
|
|
|
|
x["firstname"] = in["firstname"];
|
|
x["firstname"].set_valid(true);
|
|
x["lastname"] = in["lastname"];
|
|
x["lastname"].set_valid(true);
|
|
x["email"] = in["email"];
|
|
x["email"].set_valid(true);
|
|
x["your_message"] = in["your_message"];
|
|
x["your_message"].set_valid(true);
|
|
if (in["loc"].length() > 0) x["loc"] = in["loc"];
|
|
x["loc"].set_valid(true);
|
|
|
|
|
|
ret = insert_db_record(DBS_VALID, "contacts", "contacts_id_seq", x);
|
|
if (ret > 0) {
|
|
x["contact_id"] = ret;
|
|
x["contact_id"].set_valid(true);
|
|
//ContactMessage(x); RETIRED
|
|
account_email(ACCOUNT_CONTACT_ALERT, x, out);
|
|
}
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_QRLOGIN:
|
|
return LoginWrenchBoardQRAccount(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_LOGIN:
|
|
return LoginWrenchBoardAccount(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_AUXLOGIN:
|
|
return LoginWrenchBoardAuxAccount(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_FACEBOOK_LOGIN:
|
|
return LoginWrenchBoardFacebook(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_GOOGLE_LOGIN:
|
|
return LoginWrenchBoardGoogle(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_APPLE_LOGIN:
|
|
return LoginWrenchBoardApple(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_PENDING:
|
|
/*
|
|
if ( load_db_record(out, "SELECT uid FROM members_pending WHERE LOWER(username)=LOWER('%s')",in["username"].c_str()) ){
|
|
out["acc"]="DULPICATE";
|
|
return -1;
|
|
}
|
|
if ( load_db_record(out, "SELECT uid FROM members WHERE LOWER(username)=LOWER('%s')",in["username"].c_str()) ){
|
|
out["acc"]="DULPICATE";
|
|
return -1;
|
|
}*/
|
|
return CreateWrenchBoardAccountPending(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_CREATEACC:
|
|
/*if ( load_db_record(out, "SELECT uid FROM members_pending WHERE LOWER(username)=LOWER('%s')",in["username"].c_str()) ){
|
|
out["acc"]="DULPICATE";
|
|
return -1;
|
|
}
|
|
if ( load_db_record(out, "SELECT uid FROM members WHERE LOWER(username)=LOWER('%s')",in["username"].c_str()) ){
|
|
out["acc"]="DULPICATE";
|
|
return -1;
|
|
}*/
|
|
return CreateWrenchBoardAccount(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_LOG_MEMBER:
|
|
return LogWrenchBoardMember(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_RESETPASS:
|
|
return WrenchResetMemberPass(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_RESEND_PENDING_LINK:
|
|
REQ_LONG(in, "pending_id", 1, -1);
|
|
account_email(ACCOUNT_RESEND_PENDING, in, out); // ALERT CUSTOMER OF LOGIN
|
|
break;
|
|
|
|
case WRENCHBOARD_DELETE_PENDING_LINK:
|
|
REQ_LONG(in, "pending_id", 1, -1);
|
|
pgsql_exec("UPDATE members_pending SET status=7,username='DEL-%lu' WHERE id=%lu AND status = 1", in["pending_id"].Long(), in["pending_id"].Long());
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_SENDREFER:
|
|
return WrenchSendRefer(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_REFERLINK:
|
|
return WrenchSendReferLoadLink(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_REFRESENDLNK:
|
|
return WrenchResendSendReferLoadLink(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_SESSION_VERIFY:
|
|
return VerifySession(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_UPDATE_PROFILE:
|
|
return WrenchUpdateProfile(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_TERMS:
|
|
return WrenchUpdateAccountTerms(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_MDESCRIPTION:
|
|
return WrenchUpdateAccountDescription(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_SETPASSWD:
|
|
return WrenchResetPass(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_SAVESKILL:
|
|
return WrenchSaveSkill(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_DELSKILL:
|
|
return WrenchDeleteSaveSkill(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_DELETE_RECACC:
|
|
REQ_LONG(in, "recipient_id", 1, -1);
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
if (pgsql_exec("UPDATE sendmoney_recipient SET status=7 WHERE member_id=%lu AND id=%lu AND status = 1", in["member_id"].Long(), in["recipient_id"].Long())) {
|
|
ret = PHP_API_OK;
|
|
}
|
|
break;
|
|
|
|
// case WRENCHBOARD_START_JOBLIST:
|
|
// return WrenchReturnStartJobList(in, out);
|
|
// break;
|
|
//
|
|
case WRENCHBOARD_START_JOBLIST:
|
|
case WRENCHBOARD_ACCOUNT_JOBLIST:
|
|
return WrenchReturnJobList(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_PENDJOB: // user pending job
|
|
return WrenchReturnPendingJobList(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_DASHDATA:
|
|
return WrenchLoadDashData(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_USER_GETBANKLIST:
|
|
return WrenchReturnMemberBankAccount(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_USER_SENDMONEY:
|
|
return WrenchBoardMobileSendMoney(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_USER_SENDJOBINT:
|
|
return WrenchBoardMobileSendJobInterest(in, out);
|
|
break;
|
|
case WRECNH_CREDIT_HOOKS_FULUTTER:
|
|
return WrenchFlutterCreditHook(in, out);
|
|
break;
|
|
case WRENCHBOARD_USER_STARTCREDIT:
|
|
return WrenchStartPayment(in, out);
|
|
break;
|
|
case WRENCHBOARD_USER_ADNEWCC:
|
|
return WrenchNewCardPayment(in, out);
|
|
break;
|
|
case WRENCHBOARD_USER_CARDLIST:
|
|
return WrenchUsersCCardList(in, out);
|
|
break;
|
|
case WRENCHBOARD_USER_CARDREMV:
|
|
return WrenchDeleteUsersCCard(in, out);
|
|
break;
|
|
case WRENCHBOARD_USER_USESAVEDCC:
|
|
return WrenchCardRechargePayment(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_GETUSER_SETTINGS:
|
|
return WrenchAccountSettings(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_USER_SETTINGS:
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "uid", 3, 150, "(.*)");
|
|
REQ_STRING(in, "pref_id", 4, 6, "(.*)");
|
|
REQ_LONG(in, "status", 1, -1);
|
|
|
|
res = pgsql_query("SELECT id FROM members_settings WHERE member_id=%lu AND pref_id='%s' ", in["member_id"].Long(), in["pref_id"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
pgsql_exec("UPDATE members_settings SET status=%lu WHERE member_id=%lu AND pref_id='%s' ",in["status"].Long(), in["member_id"].Long(), in["pref_id"].c_str());
|
|
out["status"] = "completed";
|
|
}
|
|
else{
|
|
CVars xx;
|
|
xx["member_id"] = in["member_id"]; xx["member_id"].set_valid(true);
|
|
xx["pref_id"] = in["pref_id"]; xx["pref_id"].set_valid(true);
|
|
xx["status"] = in["status"]; xx["status"].set_valid(true);
|
|
insert_db_record(DBS_VALID, "members_settings", "members_settings_id_seq", xx);
|
|
out["status"] = "completed";
|
|
}
|
|
ret = PHP_API_OK;
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_WALLETS:
|
|
logfmt(logINFO, "/WRENCHBOARD_ACCOUNT_WALLETS()");
|
|
return WrenchBoardMobileSendUserWallet(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_TOPUP_RESULT:
|
|
logfmt(logINFO, "/WRENCHBOARD_ACCOUNT_TOPUP_RESULT()");
|
|
//return WrenchBoardStartBalanceTopup(in, out);
|
|
return WrenchBoardTopupResult(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_PREPARE_TOPUP:
|
|
logfmt(logINFO, "/WRENCHBOARD_ACCOUNT_PREPARE_TOPUP()");
|
|
return WrenchBoardStartBalanceTopup(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_COMPLETE_TOPUP:
|
|
logfmt(logINFO, "/WRENCHBOARD_ACCOUNT_COMPLETE_TOPUP()");
|
|
return WrenchBoardCompleteBalanceTopup(in, out);
|
|
break;
|
|
case WRENCHBOARD_USER_DELETEACC:
|
|
return WrenchBoardDeleteAccount(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_PRICE_COMBO:
|
|
return getJobPriceCombo(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_JOBPOST_DURATION:
|
|
return getJobPostDuration(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_USER_RECIPEINT:
|
|
return getUserRecipientCombo(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_ADD_RECIPEINT:
|
|
return member_addrecipient(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_ACCOUNT_TYPES:
|
|
return getAccountTypeCombo(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_COUNTRY_COMBO:
|
|
return getCountryCombo(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_JOB_COUNTRY:
|
|
return getCountryJobCombo(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_COUNTRY_BANKS:
|
|
return getBankCombo(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_REFFERHX:
|
|
return WrenchRefferHx( in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_VERIFY_PENDING_LINK:
|
|
return VerifyWrenchAccountLink( in, out);
|
|
break;
|
|
case WRENCHBOARD_ACCOUNT_HOMEBANNERS:
|
|
return WrenchHomeBanners(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_RECENTS:
|
|
return WrenchGetRecentDash(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_ACCOUNT_DASHRECENT:
|
|
return WrenchRecentDash(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_RESOURCE_MYFILES:
|
|
return WrenchRegisterMyFileUpload(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_MYFILES_LIST:
|
|
return WrenchMyFilesList(in, out);
|
|
break;
|
|
|
|
}
|
|
logfmt(logINFO, "/account_calls()");
|
|
return ret;
|
|
}
|
|
|
|
#define PHP_API_TRANSFER_COMPLETE 200
|
|
|
|
/*
|
|
|
|
CREATE TABLE members_recentactivities (
|
|
id SERIAL,
|
|
member_id INT REFERENCES members(id) NOT NULL,
|
|
uid uuid DEFAULT uuid_generate_v4(),
|
|
title VARCHAR(35) NOT NULL,
|
|
description VARCHAR(100),
|
|
status INT DEFAULT 1,
|
|
added timestamp without time zone DEFAULT now()
|
|
);
|
|
ALTER TABLE ONLY members_recentactivities
|
|
ADD CONSTRAINT members_recentactivities_id_key UNIQUE (id);
|
|
|
|
CREATE TABLE members_myfiles (
|
|
id SERIAL,
|
|
member_id INT REFERENCES members(id) NOT NULL,
|
|
uid uuid DEFAULT uuid_generate_v4(),
|
|
file_name VARCHAR(35),
|
|
saved_file_name VARCHAR(35) UNIQUE NOT NULL,
|
|
file_size INT DEFAULT 0,
|
|
file_type VARCHAR(15),
|
|
title VARCHAR(35),
|
|
description VARCHAR(100),
|
|
status INT DEFAULT 1,
|
|
added timestamp without time zone DEFAULT now(),
|
|
updated timestamp without time zone DEFAULT now()
|
|
);
|
|
ALTER TABLE ONLY members_myfiles
|
|
ADD CONSTRAINT members_myfiles_id_key UNIQUE (id);
|
|
|
|
*/
|
|
|
|
long WrenchGetRecentDash(CVars in, CVars &out) {
|
|
|
|
|
|
logfmt(logINFO, "WrenchGetRecentDash()");
|
|
char vname[30];
|
|
long ret = PHP_API_BAD_PARAM;
|
|
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "sessionid", 2, 149, "(.*)");
|
|
|
|
try {
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
out["total_record"] = "0";
|
|
const PGresult *res;
|
|
res = pgsql_query("SELECT * FROM members_recentactivities WHERE member_id = %lu ORDER BY added DESC LIMIT 6", in["member_id"].Long());
|
|
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
out["total_record"] = pgsql_num_rows(res);
|
|
|
|
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
|
|
if (f.empty()) continue;
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
|
|
snprintf(vname, sizeof (vname), "title_%05d", i);
|
|
out[vname] = rec["title"];
|
|
|
|
snprintf(vname, sizeof (vname), "description_%05d", i);
|
|
out[vname] = rec["description"];
|
|
|
|
snprintf(vname, sizeof (vname), "status_%05d", i);
|
|
out[vname] = rec["status"];
|
|
|
|
snprintf(vname, sizeof (vname), "added_%05d", i);
|
|
out[vname] = rec["added"];
|
|
|
|
snprintf(vname, sizeof (vname), "uid_%05d", i);
|
|
out[vname] = rec["uid"];
|
|
|
|
}
|
|
}
|
|
ret = PHP_API_OK;
|
|
out["status"] = "OK";
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long WrenchGetRecentDash(CVars in, CVars &out)");
|
|
}
|
|
logfmt(logINFO, "/WrenchGetRecentDash()");
|
|
|
|
return ret;
|
|
}
|
|
|
|
long WrenchRegisterMyFileUpload(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "WrenchRegisterMyFileUpload()");
|
|
try {
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "uid", 3, 150, "(.*)");
|
|
REQ_STRING(in, "file_name", 5, 35, "(.*)");
|
|
REQ_STRING(in, "message", 5, 35, "(.*)"); //message
|
|
|
|
REQ_STRING(in, "title", 5, 35, "(.*)");
|
|
REQ_STRING(in, "description", 5, 100, "(.*)");
|
|
|
|
CVars xx;
|
|
xx["member_id"] = in["member_id"]; xx["member_id"].set_valid(true);
|
|
xx["file_name"] = in["file_name"]; xx["file_name"].set_valid(true);
|
|
xx["saved_file_name"] = in["message"]; xx["saved_file_name"].set_valid(true);
|
|
|
|
xx["file_size"] = in["file_size"]; xx["file_size"].set_valid(true);
|
|
xx["file_type"] = in["file_type"]; xx["file_type"].set_valid(true);
|
|
|
|
xx["title"] = in["title"]; xx["title"].set_valid(true);
|
|
xx["description"] = in["description"]; xx["description"].set_valid(true);
|
|
|
|
out["saved_id"] = insert_db_record(DBS_VALID, "members_myfiles", "members_myfiles_id_seq", xx);
|
|
|
|
if ( out["saved_id"].Long() > 0){
|
|
// lets find teh customer now
|
|
if ( load_db_record(out, "SELECT uid AS myfile_uid, * FROM members_myfiles WHERE id = %lu ", out["saved_id"].Long()) > 0){
|
|
ret = PHP_API_OK;
|
|
}
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Something went wrong";
|
|
}
|
|
logfmt(logINFO, "WrenchRegisterMyFileUpload()");
|
|
return ret;
|
|
}
|
|
|
|
|
|
long WrenchFlutterCreditHook(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "WrenchFlutterCreditHook()");
|
|
try {
|
|
REQ_STRING(in, "txRef", 2, 50, "(.*)");
|
|
REQ_STRING(in, "flwRef", 2, 50, "(.*)");
|
|
|
|
CVars xx;
|
|
xx["event_type"] = in["event_type"]; xx["event_type"].set_valid(true);
|
|
xx["status"] = in["status"]; xx["status"].set_valid(true);
|
|
xx["txRef"] = in["txRef"]; xx["txRef"].set_valid(true);
|
|
xx["flwRef"] = in["flwRef"]; xx["flwRef"].set_valid(true);
|
|
xx["orderRef"] = in["orderRef"]; xx["orderRef"].set_valid(true);
|
|
xx["amount"] = in["amount"]; xx["amount"].set_valid(true);
|
|
xx["appfee"] = in["appfee"]; xx["appfee"].set_valid(true);
|
|
xx["AccountId"] = in["AccountId"]; xx["AccountId"].set_valid(true);
|
|
xx["customer_id"] = in["customer_id"]; xx["customer_id"].set_valid(true);
|
|
xx["fullName"] = in["fullName"]; xx["fullName"].set_valid(true);
|
|
xx["raw_result"] = in["raw_result"]; xx["raw_result"].set_valid(true);
|
|
out["hook_id"] = insert_db_record(DBS_VALID, "flutterwave_hooks", "flutterwave_hooks_id_seq", xx);
|
|
|
|
if ( out["hook_id"].Long() > 0 && in["status"] == "successful"){
|
|
// lets find teh customer now
|
|
CVars cc;
|
|
if ( load_db_record(cc, "SELECT member_id, uid,amount,currency FROM members_credit WHERE uid = '%s'", xx["txRef"].c_str()) > 0){
|
|
CVars xn;
|
|
xn["member_id"] = cc["member_id"]; xn["member_id"].set_valid(true);
|
|
xn["amount"] = cc["amount"]; xn["amount"].set_valid(true);
|
|
xn["currency"] = cc["currency"]; xn["currency"].set_valid(true);
|
|
xn["transaction_id"] = xx["txRef"]; xn["transaction_id"].set_valid(true);
|
|
long trx_id = WrenchBoardStartBalanceTopup(xn, out);
|
|
if ( trx_id > 0 ){
|
|
CVars tx;
|
|
tx["return_status"] = in["status"]; tx["return_status"].set_valid(true);
|
|
tx["status"] = "5"; tx["status"].set_valid(true);
|
|
tx["tx_ref"] = xx["txRef"]; tx["tx_ref"].set_valid(true);
|
|
tx["transaction_id"] = xx["txRef"]; tx["transaction_id"].set_valid(true);
|
|
tx["flutterwave_payments_id"] = trx_id; tx["flutterwave_payments_id"].set_valid(true);
|
|
|
|
long credit_id = WrenchBoardCompleteBalanceTopup(tx, out);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Something went wrong";
|
|
}
|
|
logfmt(logINFO, "WrenchFlutterCreditHook()");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchBoardStartBalanceTopup(CVars in, CVars &out){
|
|
logfmt(logINFO, "WrenchBoardStartBalanceTopup()");
|
|
long trx_id = 0;
|
|
/*
|
|
$data['tx_ref'] = 'wrench-'.rand(1000000000,9999999999);
|
|
$data['currency'] = "NGN";
|
|
$data['customer_email'] = $_SESSION['username'];
|
|
$data['customer_phone_number'] = '';
|
|
$data['customer_name'] = $_SESSION['firstname'].' '.$_SESSION['lastname'];
|
|
$data['consumer_id'] = $_SESSION['member_id'];
|
|
$data['consumer_mac'] = $_SESSION['member_id']."-912ba-1192a";
|
|
$data['redirect_url'] = base_url() . "dash"; //"https://oameye.work.wrenchboard.com/dash";
|
|
$data['public_key'] = "FLWPUBK_TEST-54c90141b028789d671067bd72f781a9-X";
|
|
*/
|
|
out["public_key"] = CfgReadChar("flutterwave.public_key");
|
|
|
|
try {
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_LONG(in, "amount", 1, -1);
|
|
REQ_STRING(in, "currency", 2, 10, "(.*)");
|
|
REQ_STRING(in, "transaction_id", 2, 50, "(.*)");
|
|
|
|
CVars x;
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["amount"] = in["amount"];
|
|
x["amount"].set_valid(true);
|
|
x["currency"] = in["currency"];
|
|
x["currency"].set_valid(true);
|
|
x["transaction_id"] = in["transaction_id"];
|
|
x["transaction_id"].set_valid(true);
|
|
|
|
trx_id = insert_db_record(DBS_VALID, "flutterwave_payments", "flutterwave_payments_id_seq", x);
|
|
|
|
if (trx_id > 0) {
|
|
load_db_record(out, "SELECT fp.member_id AS consumer_id,fp.tx_ref,fp.tx_ref,fp.currency,m.phone,m.uid AS consumer_mac " \
|
|
"FROM flutterwave_payments fp LEFT JOIN members m ON m.id=fp.member_id WHERE fp.id =%lu",trx_id);
|
|
}
|
|
out["status"] = "OK";
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long WrenchBoardStartBalanceTopup(CVars in, CVars &out)");
|
|
}
|
|
return trx_id;
|
|
}
|
|
|
|
long WrenchDeleteUsersCCard(CVars in, CVars &out) {
|
|
logfmt(logINFO, "VerifyWrenchAccountLink()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
const PGresult *res;
|
|
|
|
|
|
|
|
try {
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "uid", 3, 150, "(.*)");
|
|
REQ_STRING(in, "card_uid", 3, 150, "(.*)");
|
|
long delete_status = 0;
|
|
|
|
res = pgsql_query("SELECT id FROM creditcard WHERE member_id=%lu AND uid='%s' AND active = 1 ", in["member_id"].Long(), in["card_uid"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
pgsql_exec("UPDATE creditcard SET active=%lu WHERE member_id=%lu AND uid='%s' AND active = 1 ",delete_status, in["member_id"].Long(), in["card_uid"].c_str());
|
|
out["status"] = "completed";
|
|
}
|
|
ret = PHP_API_OK;
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
long VerifyWrenchAccountLink(CVars in, CVars &out) {
|
|
logfmt(logINFO, "VerifyWrenchAccountLink()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
const PGresult *res;
|
|
REQ_STRING(in, "verify_link", 2, 120, "(.*)");
|
|
OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)");
|
|
out["status_text"] = "Start";
|
|
out["status"] = "-1";
|
|
try {
|
|
res = pgsql_query("SELECT uid AS pending_uid,id AS pending_id,username "
|
|
" FROM members_pending WHERE verify_link ='%s' AND expire > now() "
|
|
" AND status = 1 LIMIT 1",in["verify_link"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
out["pending_uid"] = rec["pending_uid"]; out["pending_uid"].set_valid( true );
|
|
out["pending_id"] = rec["pending_id"]; out["pending_id"].set_valid( true );
|
|
out["username"] = rec["username"];
|
|
out["status_text"] = "Link Verified";
|
|
out["status"] = "0";
|
|
ret = PHP_API_OK;
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
}
|
|
|
|
logfmt(logINFO, "/VerifyWrenchAccountLink()");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchBoardDeleteAccount(CVars in, CVars &out)
|
|
{
|
|
long ret = 0;
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "reason", 2, 149, "(.*)");
|
|
CVars xx;
|
|
xx["member_id"] = in["member_id"]; xx["member_id"].set_valid(true);
|
|
xx["reason"] = in["reason"]; xx["reason"].set_valid(true);
|
|
out["delete_id"] = insert_db_record(DBS_VALID, "members_delete", "members_delete_id_seq", xx);
|
|
ret = PHP_API_OK;
|
|
/*
|
|
DO THE DELETE HERE NOW
|
|
*/
|
|
return ret;
|
|
}
|
|
|
|
long WrenchBoardTopupResult(CVars in, CVars &out){
|
|
logfmt(logINFO, "WrenchBoardTopupResult()");
|
|
const PGresult *res;
|
|
const PGresult *res0;
|
|
long ret = PHP_API_BAD_PARAM;
|
|
|
|
try {
|
|
REQ_STRING(in, "tx_ref", 2, 50, "(.*)");
|
|
REQ_STRING(in, "uid", 3, 50, "(.*)");
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
|
|
res0 = pgsql_query("SELECT * FROM members_credit WHERE uid ='%s' AND member_id=%lu",in["tx_ref"].c_str(),in["member_id"].Long());
|
|
if (res0 != NULL && pgsql_num_rows(res0) > 0) {
|
|
|
|
}
|
|
else{
|
|
out["status_message"] = "invalid_reference_for_member";
|
|
return PHP_API_BAD_PARAM;
|
|
}
|
|
|
|
res = pgsql_query("SELECT return_status,payment_id from flutterwave_payments where transaction_id='%s'",in["tx_ref"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
|
|
out["return_status"] = rec["return_status"]; out["return_status"].set_valid( true );
|
|
in["payment_id"] = rec["payment_id"]; in["payment_id"].set_valid( true );
|
|
if ( in["payment_id"] !="" && in["payment_id"].Long() > 0 ){
|
|
load_db_record( out, "SELECT confirmation FROM members_payments WHERE id = %lu", in["payment_id"].Long());
|
|
}
|
|
ret = PHP_API_OK;
|
|
}
|
|
out["status"] = "OK";
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long WrenchBoardTopupResult(CVars in, CVars &out)");
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchBoardCompleteBalanceTopup(CVars in, CVars &out){
|
|
logfmt(logINFO, "WrenchBoardCompleteBalanceTopup()");
|
|
long trx_id = 0;
|
|
const PGresult *res;
|
|
|
|
try {
|
|
REQ_STRING(in, "tx_ref", 2, 50, "(.*)");
|
|
// REQ_STRING(in, "transaction_id", 2, 50, "(.*)"); Handled else where
|
|
REQ_LONG(in, "status", 1, -1);
|
|
REQ_LONG(in, "flutterwave_payments_id", 1, -1);
|
|
|
|
//res = pgsql_query("SELECT id AS trx_id,member_id FROM flutterwave_payments WHERE tx_ref = '%s' AND status=0",in["tx_ref"].c_str());
|
|
res = pgsql_query("SELECT id AS trx_id,member_id,tx_ref FROM flutterwave_payments WHERE id = %lu AND status=0",in["flutterwave_payments_id"].Long());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
|
|
in["member_id"] = rec["member_id"]; in["member_id"].set_valid( true );
|
|
in["trx_id"] = rec["trx_id"]; in["trx_id"].set_valid( true );
|
|
|
|
/* pgsql_exec("UPDATE flutterwave_payments SET transaction_id = '%s', " \
|
|
"status=%lu,updated=now(),return_status='%s' WHERE id = %lu AND status=0 AND " \
|
|
"tx_ref='%s' ", in["transaction_id"].c_str(),in["status"].Long(),in["return_status"].c_str(),rec["trx_id"].Long(), in["tx_ref"].c_str());
|
|
*/
|
|
pgsql_exec("UPDATE flutterwave_payments SET " \
|
|
"status=%lu,updated=now(),return_status='%s' WHERE status=0 AND " \
|
|
" id= %lu ",in["status"].Long(),in["return_status"].c_str(), in["flutterwave_payments_id"].Long());
|
|
|
|
if ( in["status"].Long() == 5){
|
|
|
|
in["tx_ref"] = rec["tx_ref"]; in["tx_ref"].set_valid( true ); // note we change tx_ref here
|
|
return WrenchMemberTopupPayment( in, out ); // This start the actual crediting
|
|
}
|
|
}
|
|
out["status"] = "OK";
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long WrenchBoardCompleteBalanceTopup(CVars in, CVars &out)");
|
|
}
|
|
return trx_id;
|
|
}
|
|
|
|
|
|
|
|
long WrenchBoardMobileSendUserWallet(CVars in, CVars &out) {
|
|
logfmt(logINFO, "WrenchBoardMobileSendUserWallet()");
|
|
char vname[30];
|
|
long ret = PHP_API_BAD_PARAM;
|
|
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "sessionid", 2, 149, "(.*)");
|
|
logfmt(logINFO, "WrenchBoardMobileSendUserWallet() Verify Session ");
|
|
if ( VerifySession(in, out) != PHP_API_OK ){
|
|
return 0;
|
|
}
|
|
|
|
try {
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
out["total_record"] = "0";
|
|
const PGresult *res;
|
|
res = pgsql_query("SELECT w.amount,c.*,w.amount AS current_balance,c.country,w.transfer_limit,w.uid AS wallet_uid "
|
|
"FROM members_wallet w LEFT JOIN currency c ON c.code=w.currency "
|
|
"WHERE w.member_id = %lu ORDER BY c.lorder DESC", in["member_id"].Long());
|
|
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
out["total_record"] = pgsql_num_rows(res);
|
|
|
|
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
|
|
if (f.empty()) continue;
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
|
|
snprintf(vname, sizeof (vname), "amount_%05d", i);
|
|
out[vname] = rec["amount"];
|
|
snprintf(vname, sizeof (vname), "currency_%05d", i);
|
|
out[vname] = rec["currency"];
|
|
|
|
// amount | id | code | description | symbol | action_type | lorder | current_balance
|
|
snprintf(vname, sizeof (vname), "description_%05d", i);
|
|
out[vname] = rec["description"];
|
|
|
|
snprintf(vname, sizeof (vname), "symbol_%05d", i);
|
|
out[vname] = rec["symbol"];
|
|
|
|
snprintf(vname, sizeof (vname), "action_type_%05d", i);
|
|
out[vname] = rec["action_type"];
|
|
|
|
snprintf(vname, sizeof (vname), "code_%05d", i);
|
|
out[vname] = rec["code"];
|
|
|
|
snprintf(vname, sizeof (vname), "country_%05d", i);
|
|
out[vname] = rec["country"];
|
|
|
|
snprintf(vname, sizeof (vname), "transfer_limit_%05d", i);
|
|
out[vname] = rec["transfer_limit"];
|
|
|
|
snprintf(vname, sizeof (vname), "wallet_uid_%05d", i);
|
|
out[vname] = rec["wallet_uid"];
|
|
|
|
|
|
}
|
|
}
|
|
ret = PHP_API_OK;
|
|
out["status"] = "OK";
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long WrenchBoardMobileSendUserWallet(CVars in, CVars &out)");
|
|
}
|
|
logfmt(logINFO, "/WrenchBoardMobileSendUserWallet()");
|
|
return ret;
|
|
|
|
}
|
|
|
|
long WrenchBoardMobileSendJobInterest(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
REQ_LONG(in, "job_id", 1, -1);
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "sessionid", 2, 149, "(.*)");
|
|
|
|
|
|
if ( load_db_record(out, "SELECT offer_code FROM members_jobs_offer WHERE id ='%lu' AND expire>= now() AND status = 1 AND public_view > 0", in["job_id"].Long())> 0){
|
|
in["offer_code"] = out["offer_code"];
|
|
in["offer_code"].set_valid( true );
|
|
|
|
ret = WrenchJobsOfferInterest(in, out);
|
|
if ( ret == PHP_CREATED_OK ){
|
|
ret = 200;
|
|
}
|
|
else{
|
|
ret = 100; // message will be in the status string to display
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
|
|
$data = $this->getSessionArray();
|
|
$data['offer_code'] = $this->input->get('job_contract');
|
|
$data['member_id'] = $_SESSION['member_id']; // just maing sure
|
|
|
|
$data['action'] = WRENCHBOARD_JOB_SEND_INTEREST;
|
|
$this->load->model('backend_model');
|
|
$out = array();
|
|
$res = $this->backend_model->wrenchboard_api($data, $out);
|
|
if ($res == PHP_CREATED_OK) {
|
|
echo 'Success - ' . $out['status'];
|
|
} else {
|
|
echo 'Error - ' . $out['status'];
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
return ret;
|
|
}
|
|
long WrenchBoardMobileSendMoney(CVars in, CVars &out){
|
|
logfmt(logINFO, "long *************** WrenchBoardMobileSendMoney(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
|
|
try{
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "uid", 3, 150, "(.*)");
|
|
REQ_STRING(in, "wallet_uid", 3, 150, "(.*)");
|
|
long mode = REQ_LONG(in, "mode", 1, -1);
|
|
REQ_STRING(in, "TerminatingCountryCode", 2, 5, "(.*)");
|
|
REQ_LONG(in, "amount", 1, -1);
|
|
|
|
|
|
in["senderid"] = in["member_id"]; // some parts uses senderid
|
|
in["senderid"].set_valid( true );
|
|
|
|
// $in["TerminatingCountryCode"] = 'NG'; // NG - Nigeria
|
|
|
|
// LET CHECK IF YOU HAVE THE WALLET
|
|
CVars wl;
|
|
if ( load_db_record(wl, "SELECT w.*,c.country from members_wallet w LEFT join currency c ON c.code=w.currency"
|
|
" WHERE c.country='%s' AND w.member_id=%lu AND w.uid='%s' ",in["TerminatingCountryCode"].c_str(), in["member_id"].Long(),in["wallet_uid"].c_str())> 0){
|
|
if (in["amount"].Long() > wl["transfer_limit"].Long() )
|
|
{ out["status_message"] = "tranfer_amount_limit_error";
|
|
return ret;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
out["status_message"] = "wallet_not_found_error";
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
switch(mode){
|
|
case WRENCH_EXISTING_ACCOUNT:
|
|
REQ_STRING(in, "recipient_uid", 3, 150, "(.*)");
|
|
if ( load_db_record(out, "SELECT id AS recipientid FROM sendmoney_recipient "
|
|
" WHERE uid ='%s' AND member_id = %lu AND status = 1 "
|
|
" AND country='%s' ",in["recipient_uid"].c_str(), in["member_id"].Long(),in["TerminatingCountryCode"].c_str())> 0){
|
|
in["recipientid"] = out["recipientid"]; in["recipientid"].set_valid( true );
|
|
in["bankid"] = out["recipientid"]; in["bankid"].set_valid( true );
|
|
}
|
|
else
|
|
{
|
|
out["status_message"] = "invalid_recipient_error";
|
|
return ret;
|
|
}
|
|
break;
|
|
case WRENCH_NEWBANK_ACCOUNT:
|
|
CVars rp;
|
|
REQ_STRING(in, "bank_uid", 3, 150, "(.*)");
|
|
REQ_STRING(in, "account_no", 5, 15, "(.*)");
|
|
|
|
REQ_STRING(in, "country", 2, 3, "(.*)");
|
|
REQ_STRING(in, "state", 2, 49, "(.*)");
|
|
REQ_STRING(in, "city", 2, 49, "(.*)");
|
|
|
|
long account_type = REQ_LONG(in, "account_type", 1, -1);
|
|
if ( load_db_record(wl, "SELECT firstname,lastname FROM members WHERE uid = '%s' ",in["uid"].c_str())> 0){
|
|
rp["firstname"] = wl["firstname"]; rp["firstname"].set_valid( true );
|
|
rp["lastname"] = wl["lastname"]; rp["lastname"].set_valid( true );
|
|
/*
|
|
wrenchboard=> SELECT * FROM bank_entity_codes WHERE uid = 'a2c6c1a2-5cf2-4396-8630-50c47da15316';
|
|
country | channel | name | code | gid | status | bank_codes | uid
|
|
---------+---------+-------------+------+-----+--------+------------+--------------------------------------
|
|
NG | INTERSW | Access Bank | 044 | 1 | 1 | ACC044 | a2c6c1a2-5cf2-4396-8630-50c47da15316
|
|
(1 row)
|
|
|
|
/var/www/html/public/wrenchboard/wrenchboard_class.php:208:
|
|
array (size=12)
|
|
'member_id' => int 1
|
|
'sessionid' => string 'F9A1FB1098B7542EA6AFB627DBD5263638171883CA0CC951DC6C4FB184280EB3' (length=64)
|
|
'uid' => string '3119b744-42ad-4834-bb83-b737588754ca' (length=36)
|
|
'firstname' => string 'Firstn' (length=6)
|
|
'lastname' => string 'Lastn' (length=5)
|
|
'bank_code' => string '033' (length=3)
|
|
'account_no' => string '1234567890' (length=10)
|
|
'account_type' => int 1
|
|
'country' => string 'NG' (length=2)
|
|
'state' => string 'Lagos' (length=5)
|
|
'city' => string 'Lagos' (length=5)
|
|
'accitytion' => int 11176
|
|
*/
|
|
// Lets find the bank now
|
|
if ( load_db_record(wl, "SELECT * FROM bank_entity_codes WHERE uid = '%s' AND country ='%s' ",in["bank_uid"].c_str(),in["TerminatingCountryCode"].c_str())> 0){
|
|
rp["account_no"] = in["account_no"]; rp["account_no"].set_valid( true );
|
|
rp["account_type"] = in["lastname"]; rp["account_type"].set_valid( true );
|
|
rp["bank_code"] = wl["code"]; rp["bank_code"].set_valid( true );
|
|
rp["country"] = in["TerminatingCountryCode"]; rp["country"].set_valid( true );
|
|
rp["state"] = in["state"]; rp["state"].set_valid( true );
|
|
rp["city"] = in["city"]; rp["city"].set_valid( true );
|
|
|
|
rp["member_id"] = in["member_id"]; rp["member_id"].set_valid( true );
|
|
rp["uid"] = in["uid"]; rp["uid"].set_valid( true );
|
|
rp["account_type"] = in["account_type"]; rp["account_type"].set_valid( true );
|
|
|
|
long recipientid = member_addrecipient(rp, out);
|
|
if (recipientid > 0 ){
|
|
in["recipientid"] =recipientid; in["recipientid"].set_valid( true );
|
|
in["bankid"] =recipientid; in["bankid"].set_valid( true );
|
|
}
|
|
else{
|
|
out["status_message"] = "recipient_add_error";
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
}
|
|
break;
|
|
}
|
|
|
|
int r1, r2, r3;
|
|
char send_trxid[25];
|
|
srand(time(NULL));
|
|
r1 = abs(rand()*1000);
|
|
srand(time(NULL));
|
|
r2 = abs(rand() * r1);
|
|
srand(time(NULL));
|
|
r3 = abs(rand() * r2);
|
|
sprintf(send_trxid, "T%04lu", r1);
|
|
|
|
logfmt(logINFO, "Recipient ID =====() %lu",in["bankid"].Long() );
|
|
out["sendmoney_message"] ="Processing...";
|
|
|
|
|
|
REQ_LONG(in, "bankid", 1, -1);
|
|
REQ_LONG(in, "recipientid", 1, -1);
|
|
REQ_STRING(in, "sessionid", 2, 149, "(.*)");
|
|
OPTIONAL(in, "comment") REQ_STRING(in, "comment", 2, 149, "(.*)");
|
|
OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)");
|
|
|
|
|
|
|
|
in["action"] = WRENCHBOARD_SMONEY_MEMBER;
|
|
in["InitiatingEntityCode"] = "MBA";
|
|
in["InitiatingAmount"] = in["amount"];
|
|
|
|
long fee = member_sendmoney_fee(in, out);
|
|
|
|
in["Fee"] = fee;
|
|
|
|
in["InitiatingChannel"] = "7";
|
|
in["InitiatingPaymentMethodCode"] = "CA";
|
|
in["InitiatingCurrencyCode"] = "566";
|
|
//in["recipientid"] = in["bankid"]; in["recipientid"].set_valid( true );
|
|
in["transaction_id"] = send_trxid; in["transaction_id"].set_valid( true );
|
|
in["TerminatingPaymentMethodCode"] = "AC";
|
|
in["TerminatingAmount"] = in["amount"];
|
|
in["TerminatingCurrencyCode"] = "566";
|
|
in["TerminatingCountryCode"] = "NG";
|
|
|
|
logfmt(logINFO, "Recipient ID Final =====() %lu",in["recipientid"].Long() );
|
|
ret = smoney_calls(in, out);
|
|
if ( ret == PHP_API_OK){
|
|
out["sendmoney_message"] ="Completed - Estimated delivery time is 2 to 4 Hours.";
|
|
out["status_message"] = "complete_standard_processing";
|
|
ret = PHP_API_TRANSFER_COMPLETE;
|
|
}
|
|
|
|
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
logfmt(logINFO, "/long WrenchBoardMobileSendMoney(CVars in, CVars out)");
|
|
return ret;
|
|
}
|
|
|
|
|
|
long WrenchLoadDashData(CVars in, CVars &out) {
|
|
logfmt(logINFO, "WrenchLoadDashData()");
|
|
char vname[30];
|
|
long ret = PHP_API_BAD_PARAM;
|
|
|
|
try {
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "uid", 3, 150, "(.*)");
|
|
// REQ_LONG(in, "page", 1, -1);
|
|
// const PGresult *res;
|
|
|
|
const PGresult *res = pgsql_query("SELECT * FROM members WHERE id=%lu AND uid='%s'", member_id, in["uid"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
ret = PHP_API_OK;
|
|
out["status"] = "OK";
|
|
out = rec;
|
|
}
|
|
// LET SEE IF YOU HAVE NEXT DUE ITEM NOW
|
|
out["next_due_status"] = "0";
|
|
|
|
const PGresult *res2 = pgsql_query( "SELECT mj.contract AS item_code,mj.delivery_date AS due_date,mj.price,mj.client_id ,c.description AS currency "
|
|
" FROM members_jobs_contract mj "
|
|
" LEFT JOIN members_jobs j ON j.id = mj.job_id "
|
|
" LEFT JOIN currency c ON c.country=j.country "
|
|
" WHERE mj.member_id = %lu AND mj.status =1 AND mj.delivery_date > now() "
|
|
" UNION "
|
|
" SELECT mj.contract AS item_code,mj.delivery_date AS due_date,mj.price,mj.client_id ,c.description AS currency "
|
|
" FROM members_jobs_contract mj "
|
|
" LEFT JOIN members_jobs j ON j.id = mj.job_id "
|
|
" LEFT JOIN currency c ON c.country=j.country "
|
|
" WHERE mj.client_id = %lu AND mj.status =1 AND mj.delivery_date > now() "
|
|
" ORDER BY due_date ASC",member_id,member_id);
|
|
if (res2 != NULL && pgsql_num_rows(res2) > 0) {
|
|
out["next_due_status"] = "1";
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res2, 0);
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
out["item_code"] = rec["item_code"];
|
|
out["due_date"] = rec["due_date"];
|
|
out["price"] = rec["price"];
|
|
out["currency"] = rec["currency"];
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long medTrReasonList(CVars in, CVars &out)");
|
|
}
|
|
logfmt(logINFO, "/WrenchLoadDashData()");
|
|
return ret;
|
|
}
|
|
|
|
char *pin_generator(char *pin, int pin_length) {
|
|
int base_number = 10;
|
|
srand(time(0));
|
|
for(int i = 0; i < pin_length; i++)
|
|
{
|
|
const char ch = 48 + (rand() % base_number);
|
|
*(pin+i) = (char)ch;
|
|
}
|
|
return pin;
|
|
}
|
|
|
|
long WrenchResetMemberPass(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long WrenchResetMemberPass(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
long member_id = 0;
|
|
try {
|
|
|
|
REQ_STRING(in, "email", 2, 49, "(.*)");
|
|
CVars yy;
|
|
if (load_db_record(yy, "SELECT id AS member_id, uid AS member_uid FROM members WHERE username = '%s'", in["email"].c_str())) {
|
|
member_id = yy["member_id"].Long();
|
|
}
|
|
|
|
char reset_pin[10]; // Please make sure there is enough space to hold the generated pin or you will get a "Segmentation fault" crash
|
|
bzero(reset_pin, sizeof (reset_pin)); // Make it clean with zeroes or you likely to get a "Segmentation fault" crash on dirty RAM
|
|
pin_generator(reset_pin, 5); // I am trying to generate 4 or 5 digits random numbers here
|
|
|
|
CVars xx;
|
|
if (member_id > 0) {
|
|
int r1, r2, r3;
|
|
char verify_link[100];
|
|
srand(time(NULL));
|
|
r1 = abs(rand()*100000000);
|
|
xx["member_id"] = member_id;
|
|
xx["member_id"].set_valid(true);
|
|
xx["email"] = in["email"];
|
|
xx["email"].set_valid(true);
|
|
xx["loc"] = loc;
|
|
xx["loc"].set_valid(true);
|
|
xx["reset_pin"] = reset_pin;
|
|
xx["reset_pin"].set_valid(true);
|
|
|
|
|
|
out["password_reset_id"] = insert_db_record(DBS_VALID, "password_reset", "password_reset_id_seq", xx);
|
|
|
|
if (out["password_reset_id"].Long() > 0) {
|
|
in["password_reset_id"] = out["password_reset_id"];
|
|
in["password_reset_id"].set_valid(true);
|
|
pgsql_exec("UPDATE password_reset SET expired = now() + '1 day',pass_link=md5(now()::text)||''||md5(%d::text) WHERE id = %lu", r1, out["password_reset_id"].Long());
|
|
account_email(ACCOUNT_PASSWORD_RESET, in, out);
|
|
if ( load_db_record(out, "SELECT uid AS reset_uid, id AS password_reset_id FROM password_reset WHERE id = %lu ",in["password_reset_id"].Long())> 0){
|
|
out["m_uid"] = yy["member_uid"];
|
|
ret = PHP_API_OK;
|
|
}
|
|
}
|
|
}// if member_id
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
logfmt(logINFO, "/long WrenchResetMemberPass(CVars in, CVars out)");
|
|
return ret;
|
|
}
|
|
|
|
long LogWrenchBoardMember(CVars in, CVars &out) {
|
|
|
|
logfmt(logINFO, "long LogWrenchBoardMember(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
try {
|
|
REQ_STRING(in, "mlog", 2, 149, "(.*)");
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
|
|
CVars xx;
|
|
|
|
xx["member_id"] = in["member_id"];
|
|
xx["member_id"].set_valid(true);
|
|
xx["mlog"] = in["mlog"];
|
|
xx["mlog"].set_valid(true);
|
|
xx["loc"] = loc;
|
|
xx["loc"].set_valid(true);
|
|
|
|
out["request_id"] = insert_db_record(DBS_VALID, "members_log", "members_log_id_seq", xx);
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
logfmt(logINFO, "/long LogWrenchBoardMember(CVars in, CVars out)");
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
long LogManagerAction(CVars in, CVars &out) {
|
|
|
|
logfmt(logINFO, "long LogManagerAction(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
REQ_STRING(in, "log_msg", 2, 149, "(.*)");
|
|
OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)");
|
|
REQ_LONG(in, "managers_id", 1, -1);
|
|
|
|
CVars xx;
|
|
|
|
xx["managers_id"] = in["managers_id"];
|
|
xx["managers_id"].set_valid(true);
|
|
xx["log_msg"] = in["log_msg"];
|
|
xx["log_msg"].set_valid(true);
|
|
xx["loc"] = in["loc"];
|
|
xx["loc"].set_valid(true);
|
|
|
|
out["request_id"] = insert_db_record(DBS_VALID, "managers_actions", "managers_actions_id_seq", xx);
|
|
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
logfmt(logINFO, "/long LogManagerAction(CVars in, CVars out)");
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* This return the list of jobs on the home page of the apps*/
|
|
long WrenchReturnPendingJobList(CVars in, CVars &out) {
|
|
logfmt(logINFO, "WrenchReturnPendingJobList()");
|
|
char vname[30];
|
|
long ret = PHP_API_BAD_PARAM;
|
|
|
|
try {
|
|
long limit = REQ_LONG(in, "limit", 1, -1);
|
|
// REQ_LONG(in, "page", 1, -1);
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
|
|
out["total_record"] = "0";
|
|
|
|
const PGresult *res;
|
|
/*
|
|
|
|
res = pgsql_query("SELECT j.title,j.description,m.job_id,m.expire "
|
|
"FROM members_jobs_offer m "
|
|
"LEFT JOIN members_jobs j ON j.id=m.job_id "
|
|
"WHERE m.status = 1 AND m.client_id=0 "
|
|
"AND m.expire IS NOT NULL "
|
|
"AND m.public_view = 1 "
|
|
"ORDER BY m.expire DESC LIMIT %lu", in["limit"].Long());
|
|
*/
|
|
|
|
|
|
res = pgsql_query("SELECT mo.member_id, to_char(mo.added, 'Dy Mon dd, yyyy HH:MI AM') AS sent,"
|
|
" j.title,j.description,m.job_id,to_char( m.expire, 'Dy Mon dd, yyyy HH:MI AM') AS expire, "
|
|
" c.code AS currency_code, c.description AS currency_description,j.country "
|
|
" FROM members_offer_interest mo "
|
|
" LEFT JOIN members_jobs_offer m ON m.id = mo.offer_id "
|
|
" LEFT JOIN members_jobs j ON j.id=m.job_id "
|
|
" LEFT JOIN currency c ON c.country=j.country "
|
|
" WHERE m.status = 1 AND m.client_id=0 "
|
|
" AND m.expire IS NOT NULL AND m.expire> now() AND m.public_view = 1 "
|
|
" AND mo.member_id = %lu ORDER BY mo.added DESC LIMIT %lu", in["member_id"].Long(), in["limit"].Long());
|
|
|
|
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
out["total_record"] = pgsql_num_rows(res);
|
|
|
|
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
|
|
if (f.empty()) continue;
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
|
|
snprintf(vname, sizeof (vname), "title_%05d", i);
|
|
out[vname] = rec["title"];
|
|
|
|
snprintf(vname, sizeof (vname), "description_%05d", i);
|
|
out[vname] = rec["description"];
|
|
|
|
snprintf(vname, sizeof (vname), "id_%05d", i);
|
|
out[vname] = rec["job_id"];
|
|
|
|
snprintf(vname, sizeof (vname), "expire_%05d", i);
|
|
out[vname] = rec["expire"];
|
|
|
|
snprintf(vname, sizeof (vname), "sent_%05d", i);
|
|
out[vname] = rec["sent"];
|
|
|
|
snprintf(vname, sizeof (vname), "job_country_%05d", i);
|
|
out[vname] = rec["country"];
|
|
|
|
snprintf(vname, sizeof (vname), "currency_%05d", i);
|
|
out[vname] = rec["currency_description"];
|
|
|
|
snprintf(vname, sizeof (vname), "currency_code_%05d", i);
|
|
out[vname] = rec["currency_code"];
|
|
|
|
}
|
|
}
|
|
ret = PHP_API_OK;
|
|
out["status"] = "OK";
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long WrenchReturnPendingJobList(CVars in, CVars &out)");
|
|
}
|
|
logfmt(logINFO, "/WrenchReturnPendingJobList()");
|
|
return ret;
|
|
}
|
|
|
|
|
|
/* This return the list of jobs on the home page of the apps*/
|
|
long WrenchReturnStartJobList(CVars in, CVars &out) {
|
|
logfmt(logINFO, "WrenchReturnStartJobList()");
|
|
char vname[30];
|
|
long ret = PHP_API_BAD_PARAM;
|
|
|
|
try {
|
|
long limit = REQ_LONG(in, "limit", 1, -1);
|
|
REQ_LONG(in, "page", 1, -1);
|
|
|
|
out["total_record"] = "0";
|
|
|
|
const PGresult *res;
|
|
|
|
res = pgsql_query("SELECT j.title,j.description,m.job_id,m.expire "
|
|
"FROM members_jobs_offer m "
|
|
"LEFT JOIN members_jobs j ON j.id=m.job_id "
|
|
"WHERE m.status = 1 AND m.client_id=0 "
|
|
"AND m.expire IS NOT NULL "
|
|
"AND m.public_view = 1 "
|
|
"AND m.expire > now() "
|
|
"ORDER BY m.expire DESC LIMIT %lu", in["limit"].Long());
|
|
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
out["total_record"] = pgsql_num_rows(res);
|
|
|
|
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
|
|
if (f.empty()) continue;
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
|
|
snprintf(vname, sizeof (vname), "title_%05d", i);
|
|
out[vname] = rec["title"];
|
|
|
|
snprintf(vname, sizeof (vname), "description_%05d", i);
|
|
out[vname] = rec["description"];
|
|
|
|
snprintf(vname, sizeof (vname), "expire_%05d", i);
|
|
out[vname] = rec["expire"];
|
|
|
|
snprintf(vname, sizeof (vname), "id_%05d", i);
|
|
out[vname] = rec["job_id"];
|
|
}
|
|
}
|
|
ret = PHP_API_OK;
|
|
out["status"] = "OK";
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long medTrReasonList(CVars in, CVars &out)");
|
|
}
|
|
logfmt(logINFO, "/WrenchReturnStartJobList()");
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
long WrenchUpdateSiteGallery(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_LONG(in, "gallery_type", 1, -1);
|
|
OPTIONAL(in, "gallery") REQ_STRING(in, "gallery", 4, 150, "(.*)");
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
|
|
const PGresult *res = pgsql_query("SELECT id FROM members_site_gallery WHERE member_id=%lu AND gallery_type = %lu", in["member_id"].Long(), in["gallery_type"].Long());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
pgsql_exec("UPDATE members_site_gallery SET gallery = '%s' WHERE member_id=%ld AND id=%lu", in["gallery"].c_str(), in["member_id"].Long(), in["gallery_type"].Long());
|
|
ret = PHP_API_OK;
|
|
// NO WAY FOR DUPLICATE
|
|
} else {
|
|
CVars x;
|
|
x["member_id"] = member_id;
|
|
x["member_id"].set_valid(true);
|
|
x["gallery"] = in["gallery"];
|
|
x["gallery"].set_valid(true);
|
|
x["loc"] = loc;
|
|
x["loc"].set_valid(true);
|
|
x["gallery_type"] = in["gallery_type"];
|
|
x["gallery_type"].set_valid(true);
|
|
long sid = insert_db_record(DBS_VALID, "members_site_gallery", "members_site_gallery_id_seq", x);
|
|
ret = PHP_API_OK;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchDeleteSaveSkill(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long WrenchDeleteSaveSkill(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
long member_id = 0;
|
|
|
|
try {
|
|
|
|
long savedskill_id = REQ_LONG(in, "savedskill_id", 1, -1);
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
|
|
CVars x;
|
|
const PGresult *res = pgsql_query("SELECT * FROM members_skills WHERE member_id=%lu AND id=%lu ", in["member_id"].Long(), in["savedskill_id"].Long());
|
|
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
pgsql_exec("UPDATE members_skills SET status = 0 WHERE member_id=%ld AND id=%lu", in["member_id"].Long(), in["savedskill_id"].Long());
|
|
ret = PHP_API_OK;
|
|
// NO WAY FOR DUPLICATE
|
|
} else {
|
|
|
|
}
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
logfmt(logINFO, "/long WrenchDeleteSaveSkill(CVars in, CVars out)");
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
long WrenchSaveSkill(CVars in, CVars &out) {
|
|
|
|
logfmt(logINFO, "long WrenchSaveSkill(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
long member_id = 0;
|
|
try {
|
|
long category_id = REQ_LONG(in, "category_id", 1, -1);
|
|
long skill_id = REQ_LONG(in, "skill_id", 1, -1);
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
|
|
CVars x;
|
|
const PGresult *res = pgsql_query("SELECT * FROM members_skills WHERE member_id=%lu AND skill_id=%lu AND category_id=%lu", in["member_id"].Long(), in["skill_id"].Long(), in["category_id"].Long());
|
|
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
// NO WAY FOR DUPLICATE
|
|
// let us see the status
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
//if (f.empty()) continue;
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
if (rec["status"].Long() == 0) {
|
|
logfmt(logINFO, "~~~~~**** Update the status");
|
|
pgsql_exec("UPDATE members_skills SET status = 1 WHERE status = 0 AND member_id=%ld AND id=%lu", in["member_id"].Long(), rec["id"].Long());
|
|
ret = PHP_API_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
CVars x;
|
|
x["member_id"] = member_id;
|
|
x["member_id"].set_valid(true);
|
|
x["category_id"] = in["category_id"];
|
|
x["category_id"].set_valid(true);
|
|
x["skill_id"] = in["skill_id"];
|
|
x["skill_id"].set_valid(true);
|
|
long sid = insert_db_record(DBS_VALID, "members_skills", "members_skills_id_seq", x);
|
|
ret = PHP_API_OK;
|
|
}
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
logfmt(logINFO, "/long WrenchSaveSkill(CVars in, CVars out)");
|
|
return ret;
|
|
|
|
}
|
|
|
|
long WrenchResetPass(CVars in, CVars &out) {
|
|
|
|
logfmt(logINFO, "long WrenchResetMemberPass(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
long member_id = 0;
|
|
try {
|
|
|
|
REQ_STRING(in, "pass_link", 10, 350, "(.*)");
|
|
REQ_STRING(in, "newpass", 8, 15, "(.*)");
|
|
|
|
CVars x;
|
|
const PGresult *res = pgsql_query("SELECT * FROM password_reset WHERE expired>now() AND status = 0 AND pass_link='%s'", in["pass_link"].c_str());
|
|
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
//if (f.empty()) continue;
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
in["reset_id"] = rec["id"];
|
|
in["reset_id"].set_valid(true);
|
|
// good to go
|
|
|
|
if (pgsql_exec("UPDATE members SET password = md5('%s') WHERE id = %lu AND status = 1 ", in["newpass"].c_str(), rec["member_id"].Long())) {
|
|
pgsql_exec("UPDATE password_reset SET status = 5 WHERE member_id=%ld AND pass_link='%s'", rec["member_id"].Long(), in["pass_link"].c_str());
|
|
ret = PHP_API_OK;
|
|
account_email(ACCOUNT_PASSWORD_COMPLT, in, out);
|
|
out["status"] = "Completed";
|
|
}
|
|
} else {
|
|
out["status"] = "Inavlid Process";
|
|
}
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
logfmt(logINFO, "/long WrenchResetMemberPass(CVars in, CVars out)");
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
}
|
|
|
|
long WrenchUpdateAccountDescription(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "long WrenchUpdateAccountDescription(CVars in, CVars out)");
|
|
REQ_STRING(in, "description", 0, 500, "(.*)");
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
CVars x;
|
|
const PGresult *res = pgsql_query("SELECT id AS detail_id FROM members_detail WHERE member_id=%lu", member_id);
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
|
|
x["description"] = in["description"];
|
|
x["description"].set_valid(true);
|
|
update_db_record(DBS_VALID, "members_detail", x, rec["detail_id"].Long());
|
|
ret = PHP_API_OK;
|
|
} else {
|
|
x["member_id"] = member_id;
|
|
x["member_id"].set_valid(true);
|
|
x["description"] = in["description"];
|
|
x["description"].set_valid(true);
|
|
long sid = insert_db_record(DBS_VALID, "members_detail", "members_detail_id_seq", x); //members_session_id_seq
|
|
ret = PHP_API_OK;
|
|
}
|
|
|
|
|
|
return ret;
|
|
}
|
|
|
|
long WrenchUpdateAccountTerms(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long WrenchUpdateAccountTerms(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
out["terms_update"] = "";
|
|
try {
|
|
long action_item = REQ_LONG(in, "action_item", 1, -1);
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
|
|
switch (action_item) {
|
|
case ACCOUNT_AGREE_JOBS:
|
|
pgsql_exec("UPDATE members SET post_jobs=NOW() WHERE id=%lu ", member_id);
|
|
ret = PHP_API_OK;
|
|
out["terms_update"] = "completed";
|
|
break;
|
|
|
|
case ACCOUNT_AGREE_REFER:
|
|
pgsql_exec("UPDATE members SET refer=NOW() WHERE id=%lu ", member_id);
|
|
ret = PHP_API_OK;
|
|
out["terms_update"] = "completed";
|
|
break;
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["status"] = "Invalid Parameters";
|
|
}
|
|
logfmt(logINFO, "/long WrenchUpdateAccountTerms(CVars in, CVars out)");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchUpdateProfile(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long WrenchUpdateProfile(CVars in, CVars out) ******* RETIRE THIS FUNCTION - no country change");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
REQ_STRING(in, "firstname", 3, 49, "(.*)");
|
|
REQ_STRING(in, "lastname", 3, 49, "(.*)");
|
|
REQ_STRING(in, "email", 5, 150, "(.*)");
|
|
REQ_STRING(in, "state", 3, 150, "(.*)");
|
|
REQ_STRING(in, "city", 3, 150, "(.*)");
|
|
REQ_STRING(in, "country", 1, 3, "(.*)");
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
CVars x;
|
|
x["firstname"] = in["firstname"];
|
|
x["firstname"].set_valid(true);
|
|
x["lastname"] = in["lastname"];
|
|
x["lastname"].set_valid(true);
|
|
x["email"] = in["email"];
|
|
x["email"].set_valid(true);
|
|
x["state"] = in["state"];
|
|
x["state"].set_valid(true);
|
|
x["city"] = in["city"];
|
|
x["city"].set_valid(true);
|
|
x["country"] = in["country"];
|
|
x["country"].set_valid(true);
|
|
|
|
update_db_record(DBS_VALID, "members", x, member_id);
|
|
ret = PHP_API_OK;
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "Invalid Parameters";
|
|
}
|
|
logfmt(logINFO, "/long WrenchUpdateProfile(CVars in, CVars out)");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchResendSendReferLoadLink(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long WrenchResendSendReferLoadLink(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
REQ_STRING(in, "uid", 3, 45, "(.*)");
|
|
if (load_db_record(out, "SELECT id AS refer_id, * FROM members_refer_friend WHERE status<>5 AND uid ='%s'", in["uid"].c_str()) > 0)
|
|
{
|
|
const PGresult *res = pgsql_query("UPDATE members_refer_friend SET sent=now() WHERE uid='%s'", out["uid"].c_str());
|
|
in["refer_id"] = out["refer_id"];
|
|
in["refer_id"].set_valid(true);
|
|
account_email(ACCOUNT_SEND_REFEREMAIL, in, out);
|
|
out["status"] = "Refer message sent";
|
|
ret = PHP_API_OK;
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "Invalid Parameters";
|
|
}
|
|
logfmt(logINFO, "/long WrenchResendSendReferLoadLink(CVars in, CVars out)");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchSendReferLoadLink(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long WrenchSendReferLoadLink(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
REQ_STRING(in, "refer_link", 3, 45, "(.*)");
|
|
if (load_db_record(out, "SELECT uid FROM members_refer_friend WHERE updated IS NULL AND refer_link ='%s'", in["refer_link"].c_str()) > 0)
|
|
{
|
|
const PGresult *res = pgsql_query("UPDATE members_refer_friend SET updated=now() WHERE uid='%s'", out["uid"].c_str());
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "Invalid Parameters";
|
|
}
|
|
logfmt(logINFO, "/long WrenchSendReferLoadLink(CVars in, CVars out)");
|
|
return ret;
|
|
}
|
|
|
|
/**************************************************************************************************************************/
|
|
long WrenchSendRefer(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long WrenchSendRefer(CVars in, CVars out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
//out = in;
|
|
out["status"] = "";
|
|
REQ_STRING(in, "ref_firstname", 3, 49, "(.*)");
|
|
REQ_STRING(in, "ref_lastname", 3, 49, "(.*)");
|
|
REQ_STRING(in, "ref_email", 5, 150, "(.*)");
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
|
|
const PGresult *res = pgsql_query("SELECT * FROM members_pending WHERE email='%s'", in["ref_email"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
out["status"] = "Unable to add this email";
|
|
return ret;
|
|
}
|
|
|
|
const PGresult *res1 = pgsql_query("SELECT * FROM members WHERE email='%s'", in["ref_email"].c_str());
|
|
if (res1 != NULL && pgsql_num_rows(res1) > 0) {
|
|
out["status"] = "Unable to add this email";
|
|
return ret;
|
|
}
|
|
|
|
const PGresult *res2 = pgsql_query("SELECT * FROM members_refer_friend WHERE email='%s' AND status IN (1,4,5)", in["ref_email"].c_str());
|
|
if (res2 != NULL && pgsql_num_rows(res2) > 0) {
|
|
out["status"] = "Unable to add this email";
|
|
return ret;
|
|
}
|
|
|
|
CVars x;
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["firstname"] = in["ref_firstname"];
|
|
x["firstname"].set_valid(true);
|
|
x["email"] = in["ref_email"];
|
|
x["email"].set_valid(true);
|
|
x["lastname"] = in["ref_lastname"];
|
|
x["lastname"].set_valid(true);
|
|
|
|
int r1, r2, r3;
|
|
char refer_link[100];
|
|
srand(time(NULL));
|
|
r1 = abs(rand()*100000000);
|
|
srand(time(NULL));
|
|
r2 = abs(rand() * r1);
|
|
srand(time(NULL));
|
|
r3 = abs(rand() * r2);
|
|
sprintf(refer_link, "WRENREF-%09lu-%08lu-%08lu", r1, r2, r3);
|
|
x["refer_link"] = refer_link;
|
|
x["refer_link"].set_valid(true);
|
|
long refer_id = 0;
|
|
refer_id = insert_db_record(DBS_VALID, "members_refer_friend", "members_refer_friend_id_seq", x);
|
|
|
|
if (refer_id > 0) {
|
|
const PGresult *res4 = pgsql_query("UPDATE members_refer_friend SET sent=now() WHERE id=%lu", refer_id);
|
|
in["refer_id"] = refer_id;
|
|
in["refer_id"].set_valid(true);
|
|
account_email(ACCOUNT_SEND_REFEREMAIL, in, out); // ALERT REFER EMAIL
|
|
out["status"] = "Refer message sent";
|
|
ret = PHP_API_OK;
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["status"] = "Invalid Parameters";
|
|
}
|
|
logfmt(logINFO, "/long WrenchSendRefer(CVars in, CVars out)");
|
|
return ret;
|
|
}
|
|
|
|
/**************************************************************************************************************************/
|
|
long account_session_check(CVars in, CVars out) {
|
|
logfmt(logINFO, "long account_session_check(CVars in, CVars out)");
|
|
long ret = PHP_INVALID_SESSION;
|
|
try {
|
|
REQ_STRING(in, "sessionid", 4, 140, "(.*)");
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
if (load_db_record(out, "SELECT uid FROM members_session WHERE session='%s' AND member_id = %lu", in["sessionid"].c_str(),member_id) > 0) {
|
|
if (SessionCheck(out["uid"].Long(), in["sessionid"].c_str(), 0) > 0) {
|
|
out["status"] = "Session valid";
|
|
ret = PHP_API_OK;
|
|
}
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["status"] = "Invalid session ID";
|
|
}
|
|
logfmt(logINFO, "/long account_session_check(CVars in, CVars out)");
|
|
return ret;
|
|
}
|
|
|
|
/**************************************************************************************************************************/
|
|
long VerifySession(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "long SessionCheck(long uid, const char *sessionid, int create )");
|
|
try {
|
|
REQ_STRING(in, "sessionid", 4, 140, "(.*)");
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
|
|
long session_expire_minutes = 15;
|
|
|
|
if (load_db_record(out, "SELECT s.* FROM members_session s LEFT JOIN members m ON m.id=s.member_id WHERE s.member_id=%lu AND s.updated > (now() - interval '%lu minutes') AND s.session='%s'", member_id, session_expire_minutes, in["sessionid"].c_str()) > 0) {
|
|
pgsql_exec("UPDATE members_session SET updated=NOW() WHERE member_id=%ld AND session='%s'", member_id, in["sessionid"].c_str());
|
|
ret = PHP_API_OK;
|
|
} else {
|
|
// Clean old sessions
|
|
pgsql_exec("DELETE FROM members_session WHERE member_id=%lu AND session='%s'", member_id, in["sessionid"].c_str());
|
|
ret = PHP_API_BAD_PARAM;
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
ret = PHP_API_BAD_PARAM;
|
|
}
|
|
|
|
logfmt(logINFO, "/long SessionCheck(CVars in, CVars &out )");
|
|
return ret; // No route
|
|
}
|
|
|
|
/**************************************************************************************************************************/
|
|
long SessionCheck(long uid, const char *sessionid, int create) {
|
|
logfmt(logINFO, "long SessionCheck(long uid, const char *sessionid, int create )");
|
|
// Sanity check
|
|
if (uid < 1 || sessionid == NULL || strlen(sessionid) < 4) {
|
|
return -1L; // Invalif parameters
|
|
}
|
|
|
|
long session_expire_minutes = 15;
|
|
|
|
// Clean old sessions
|
|
pgsql_exec("DELETE FROM members_session WHERE member_id=%ld AND updated < (now() - interval '%lu minutes')", uid, session_expire_minutes);
|
|
// Update/check existing session
|
|
if (create == 0) {
|
|
// do we still have this session
|
|
const PGresult *res = pgsql_query("SELECT * FROM members_session WHERE member_id=%ld AND session='%s'", uid, sessionid);
|
|
if (res == NULL && pgsql_num_rows(res) == 0) {
|
|
return -2L; // Active sessions found Already deleted
|
|
}
|
|
|
|
//Udate the session if you get here
|
|
pgsql_exec("UPDATE members_session SET updated=NOW() WHERE member_id=%ld AND session='%s'", uid, sessionid);
|
|
return 1L; // Session updated
|
|
}
|
|
|
|
|
|
|
|
if (create > 0) {
|
|
// Check session i?
|
|
|
|
|
|
const PGresult *res = pgsql_query("SELECT * FROM members_session WHERE member_id=%ld AND session<>'%s'", uid, sessionid);
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
return -2L; // Active sessions found
|
|
}
|
|
CVars sess; // Do we have the same session already?
|
|
if (load_db_record(sess, "SELECT * FROM members_session WHERE member_id=%lu AND session='%s'", uid, sessionid) > 0) {
|
|
pgsql_exec("UPDATE members_session SET updated=NOW() WHERE member_id=%ld AND session='%s'", uid, sessionid);
|
|
return sess["id"].Long();
|
|
}
|
|
// Create a new session
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
sess["loc"] = loc;
|
|
sess["loc"].set_valid(true);
|
|
sess["member_id"] = uid;
|
|
sess["member_id"].set_valid(true);
|
|
sess["session"] = sessionid;
|
|
sess["session"].set_valid(true);
|
|
long sid = insert_db_record(DBS_VALID, "members_session", "members_session_id_seq", sess); //members_session_id_seq
|
|
if (sid > 0) {
|
|
return sid; // New session created
|
|
}
|
|
return -3L; // Failed to create new session
|
|
}
|
|
logfmt(logINFO, "/long SessionCheck(long uid, const char *sessionid, int create )");
|
|
return 0L; // No route
|
|
}
|
|
|
|
/*
|
|
CREATE TABLE mobile_login (
|
|
id SERIAL,
|
|
member_id INT REFERENCES members(id) UNIQUE NOT NULL,
|
|
added timestamp without time zone DEFAULT now(),
|
|
updated timestamp without time zone DEFAULT now()
|
|
);
|
|
ALTER TABLE ONLY mobile_login
|
|
ADD CONSTRAINT mobile_login_id_key UNIQUE (id);
|
|
*/
|
|
long LoginLogger( long member_id, long login_mode){
|
|
CVars sess;
|
|
long ret = 0;
|
|
try {
|
|
switch( login_mode ){
|
|
case MOBILE_LOGIN:
|
|
if (load_db_record(sess, "SELECT * FROM mobile_login WHERE member_id=%lu", member_id) > 0) {
|
|
pgsql_exec("UPDATE mobile_login SET updated=NOW() WHERE member_id=%ld", member_id);
|
|
}else{
|
|
sess["member_id"] = member_id;
|
|
sess["member_id"].set_valid(true);
|
|
insert_db_record(DBS_VALID, "mobile_login", "mobile_login_id_seq", sess); //members_session_id_seq
|
|
}
|
|
break;
|
|
}
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
ret = PHP_API_BAD_PARAM;
|
|
}
|
|
return ret;
|
|
}
|
|
/*
|
|
#define WEBSITE_LOGIN 1100
|
|
#define MOBILE_LOGIN 1101
|
|
#define FACEBOOK_LOGIN 1102
|
|
#define APPLE_LOGIN 1103
|
|
#define GOOGLE_LOGIN 1104
|
|
#define LOGIN_MODE_GENERAL 1100
|
|
#define LOGIN_MODE_FAMILY 1105
|
|
*/
|
|
long LoginWrenchBoardFamilyLogin(CVars in, CVars &out);
|
|
long WrenchBoardCreateFamilyAcc(CVars in, CVars &out);
|
|
|
|
long WrenchBoardCreateFamilyAcc(CVars in, CVars &out){
|
|
long ret = 0;
|
|
|
|
try {
|
|
CVars x;
|
|
x["username"] = in["uid"];
|
|
x["username"].set_valid(true);
|
|
x["email"] = in["uid"];
|
|
x["email"].set_valid(true);
|
|
x["password"] = in["uid"];
|
|
x["password"].set_valid(true);
|
|
x["firstname"] = in["firstname"];
|
|
x["firstname"].set_valid(true);
|
|
x["lastname"] = in["lastname"];
|
|
x["lastname"].set_valid(true);
|
|
x["account_type"] = "FAMILY";
|
|
x["account_type"].set_valid(true);
|
|
// x["loc"] = out["loc"];
|
|
// x["loc"].set_valid(true);
|
|
ret = insert_db_record(DBS_VALID, "members", "members_id_seq", x);
|
|
|
|
if ( ret > 0 ){
|
|
pgsql_exec("UPDATE members_family SET family_member_id=%lu WHERE uid='%s'",ret, in["uid"].c_str() );
|
|
}
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long WrenchBoardCreateFamilyAcc(CVars in, CVars &out)");
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
long LoginWrenchBoardFamilyLogin(CVars in, CVars &out){
|
|
long ret = PHP_API_BAD_PARAM;
|
|
long family_member_id = 0;
|
|
logfmt(logINFO, "********~~~~~~~~ ------LoginWrenchBoardFamilyLogin()");
|
|
|
|
try {
|
|
REQ_STRING(in, "username", 5, 49, "(.*)");
|
|
REQ_STRING(in, "pin", 4, 10, "(.*)");
|
|
const PGresult *res = pgsql_query(" SELECT id AS family_id,* FROM members_family "
|
|
" WHERE username='%s' AND pin='%s' ", in["username"].c_str(),in["pin"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
if( rec["family_member_id"]==""){
|
|
logfmt(logINFO, "LoginWrenchBoardFamilyLogin()- Need to Construct Account Now------->");
|
|
family_member_id = WrenchBoardCreateFamilyAcc(rec,out);
|
|
}
|
|
else{
|
|
family_member_id = rec["family_member_id"].Long();
|
|
}
|
|
if (family_member_id > 0){
|
|
load_db_record(out, "SELECT *,id AS member_id , to_char(last_login, 'Day Mon dd, yyyy HH:MI AM') AS last_login2 "
|
|
" FROM members WHERE status=1 AND id = %lu",family_member_id);
|
|
|
|
CVars vw;
|
|
vw["currency"] = "NAIRA"; // this might become a variable based on the country
|
|
vw["currency"].set_valid( true );
|
|
long wallet_id = CheckWallet(out["member_id"].Long(),vw);
|
|
load_db_record( out, "SELECT amount AS balance FROM members_wallet WHERE member_id = %lu AND currency='%s' ", out["member_id"].Long(), vw["currency"].c_str());
|
|
pgsql_exec("DELETE FROM members_session WHERE member_id=%ld ", out["member_id"].Long());
|
|
// remove all existing session
|
|
load_db_record(in, "SELECT upper(md5(now()::text))||''|| upper(md5(now()::date::text)) AS sessionid");
|
|
if (SessionCheck(out["id"].Long(), in["sessionid"].c_str(), 1) > 0) {
|
|
out["stauts"] = "OK";
|
|
/*LOAD THE SESSION INTO OUT now */
|
|
load_db_record(out, "SELECT session FROM members_session WHERE member_id=%lu ORDER BY id DESC LIMIT 1", out["member_id"].Long());
|
|
//===============================================================================================================================
|
|
pgsql_query("UPDATE members SET last_login = now() WHERE id = %lu", out["member_id"].Long());
|
|
// pgsql_query("UPDATE members SET last_login = now() , loc='%s' WHERE id = %lu",loc, out["member_id"].Long());
|
|
pgsql_exec("UPDATE members_family SET last_login = now() WHERE family_member_id=%lu",family_member_id );
|
|
ret = PHP_LOGIN_OK;
|
|
LoginLogger(out["member_id"].Long(),LOGIN_MODE_FAMILY);
|
|
} else {
|
|
out["status"] = "Session check failed";
|
|
}
|
|
}
|
|
}
|
|
out["status"] = "OK";
|
|
} catch (bad_parameter) {
|
|
logfmt(logINFO, "ERROR CALL long WrenchFamilyUpdate(CVars in, CVars &out)");
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
long LoginWrenchBoardAuxAccount(CVars in, CVars &out) {
|
|
|
|
long login_channel = REQ_LONG(in, "login_channel", 1, -1);
|
|
switch(login_channel){
|
|
case LOGIN_GOOGLE:
|
|
return LoginWrenchBoardGoogle(in, out);
|
|
break;
|
|
|
|
case LOGIN_FACEBOOK:
|
|
return LoginWrenchBoardFacebook(in, out);
|
|
break;
|
|
|
|
case LOGIN_APPLE:
|
|
return LoginWrenchBoardApple(in, out);
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
long LoginWrenchBoardQRAccount(CVars in, CVars &out) {
|
|
/*
|
|
$in['member_uid'] = $pieces[0];
|
|
$in['member_username'] = $pieces[1];
|
|
$in['family_uid'] = $pieces[2];
|
|
*/
|
|
logfmt(logINFO, "LoginWrenchBoardQRAccount()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
// REQ_LONG( in, "whattodo", 1, -1 );
|
|
REQ_STRING(in, "member_username", 5, 49, "(.*)");
|
|
REQ_STRING(in, "member_uid", 5, 140, "(.*)");
|
|
REQ_STRING(in, "family_uid", 4, 140, "(.*)");
|
|
|
|
const PGresult* res = pgsql_query("SELECT f.username, f.pin FROM members_family f LEFT JOIN members m ON m.id=f.member_id "
|
|
" WHERE f.uid = '%s' AND f.username = '%s' AND m.uid = '%s' ", in["family_uid"].c_str(), in["member_username"].c_str(), in["member_uid"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res,0);
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
CVars inx;
|
|
inx["username"] = rec["username"]; inx["username"].set_valid( true );
|
|
inx["pin"] = rec["pin"]; inx["pin"].set_valid( true );
|
|
inx["login_mode"] = LOGIN_MODE_FAMILY; inx["login_mode"].set_valid( true );
|
|
return LoginWrenchBoardAccount(inx, out);
|
|
}
|
|
else{
|
|
ret = PHP_API_BAD_PARAM;
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
}
|
|
|
|
logfmt(logINFO, "/LoginWrenchBoardQRAccount()");
|
|
return ret;
|
|
}
|
|
|
|
long LoginWrenchBoardAccount(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "LoginWrenchBoardAccount()");
|
|
long login_mode = REQ_LONG(in, "login_mode", 1, -1);
|
|
if( login_mode == LOGIN_MODE_FAMILY){
|
|
return LoginWrenchBoardFamilyLogin(in, out);
|
|
}
|
|
|
|
REQ_STRING(in, "username", 5, 49, "(.*)");
|
|
REQ_STRING(in, "password", 5, 49, "(.*)");
|
|
REQ_STRING(in, "sessionid", 4, 140, "(.*)");
|
|
OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)");
|
|
// $in["login_mode"] = MOBILE_LOGIN;
|
|
// long login_mode = REQ_LONG(in, "login_mode", 0, -1);
|
|
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
in["loc"] = loc;
|
|
in["loc"].set_valid(true);
|
|
|
|
load_db_record(in, "SELECT upper(md5(now()::text))||''|| upper(md5(now()::date::text)) AS sessionid");
|
|
ret = load_db_record(out, "SELECT *,id AS member_id , to_char(last_login, 'Day Mon dd, yyyy HH:MI AM') AS last_login2,country FROM members WHERE status=1 AND LOWER(username)=LOWER('%s') AND password= md5('%s')", in["username"].c_str(), in["password"].c_str());
|
|
if (ret) {
|
|
|
|
if ( out["country"] !=""){
|
|
CVars vw;
|
|
load_db_record(vw, "SELECT code AS currency FROM currency WHERE country='%s'",out["country"].c_str());
|
|
if ( vw["currency"] !=""){
|
|
//vw["currency"] = "NAIRA"; // this might become a variable based on the country
|
|
vw["currency"].set_valid( true );
|
|
long wallet_id = CheckWallet(out["member_id"].Long(),vw);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
load_db_record( out, "SELECT amount AS balance FROM members_wallet WHERE member_id = %lu AND currency='%s' ", out["member_id"].Long(), vw["currency"].c_str());
|
|
|
|
|
|
pgsql_exec("DELETE FROM members_session WHERE member_id=%ld ", out["member_id"].Long());
|
|
// remove all existing session
|
|
|
|
if (SessionCheck(out["id"].Long(), in["sessionid"].c_str(), 1) > 0) {
|
|
out["stauts"] = "OK";
|
|
/*LOAD THE SESSION INTO OUT now */
|
|
load_db_record(out, "SELECT session FROM members_session WHERE member_id=%lu ORDER BY id DESC LIMIT 1", out["member_id"].Long());
|
|
//===============================================================================================================================
|
|
pgsql_query("UPDATE members SET last_login = now() , loc='%s' WHERE id = %lu",loc, out["member_id"].Long());
|
|
account_email(ACCOUNT_LOGIN_ALERT, out, out); // ALERT CUSTOMER OF LOGIN
|
|
ret = PHP_LOGIN_OK;
|
|
out["profile_pic_url"] = "https://www.wrenchboard.com/assets/images/profile.jpg";
|
|
out["password"] = "";
|
|
LoginLogger(out["member_id"].Long(),login_mode);
|
|
} else {
|
|
out["status"] = "Session check failed";
|
|
}
|
|
} else {
|
|
out["status"] = "Invalid username and/or password";
|
|
}
|
|
|
|
|
|
logfmt(logINFO, "/LoginWrenchBoardAccount()");
|
|
return ret;
|
|
}
|
|
|
|
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"] = "";
|
|
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, "(.*)");
|
|
|
|
long retL = load_db_record(out, "SELECT uid, * FROM members WHERE LOWER(email)=LOWER('%s') AND password IS NOT NULL", in["email"].c_str());
|
|
if (retL > 0 && out["uid"] !="") {
|
|
out["status"] = "Email may be already registered, Try Login";
|
|
return PHP_API_BAD_PARAM;
|
|
}
|
|
|
|
res = LoginWrenchBoardExternal(in, out);
|
|
logfmt(logINFO, "/LoginWrenchBoardFacebook()");
|
|
return res;
|
|
}
|
|
|
|
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, "(.*)");
|
|
|
|
long retL = load_db_record(out, "SELECT uid, * FROM members WHERE LOWER(email)=LOWER('%s') AND password IS NOT NULL", in["email"].c_str());
|
|
if (retL > 0 && out["uid"] !="") {
|
|
out["status"] = "Email may be already registered, Try Login";
|
|
return PHP_API_BAD_PARAM;
|
|
}
|
|
|
|
res = LoginWrenchBoardExternal(in, out);
|
|
logfmt(logINFO, "/LoginWrenchBoardGoogle()");
|
|
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, "(.*)");
|
|
|
|
long retL = load_db_record(out, "SELECT uid, * FROM members WHERE LOWER(email)=LOWER('%s') AND password IS NOT NULL", in["email"].c_str());
|
|
if (retL > 0 && out["uid"] !="") {
|
|
out["status"] = "Email may be already registered, Try Login";
|
|
return PHP_API_BAD_PARAM;
|
|
}
|
|
res = LoginWrenchBoardExternal(in, out);
|
|
logfmt(logINFO, "/LoginWrenchBoardApple()");
|
|
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);
|
|
|
|
long ret = load_db_record(out, "SELECT * FROM members WHERE LOWER(email)=LOWER('%s') AND password IS NOT NULL", in["email"].c_str());
|
|
if (ret > 0) {
|
|
out["status"] = "Email is already registered";
|
|
} else {
|
|
load_db_record(in, "SELECT upper(md5(now()::text))||''|| upper(md5(now()::date::text)) AS sessionid");
|
|
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, "External account already exists");
|
|
} else {
|
|
|
|
logfmt(logINFO, "Create new FB account");
|
|
CVars xx;
|
|
xx["username"] = in["email"];
|
|
xx["username"].set_valid(true);
|
|
xx["firstname"] = in["firstname"];
|
|
xx["firstname"].set_valid(true);
|
|
xx["lastname"] = in["lastname"];
|
|
xx["lastname"].set_valid(true);
|
|
xx["email"] = in["email"];
|
|
xx["email"].set_valid(true);
|
|
xx["loc"] = in["loc"];
|
|
xx["loc"].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());
|
|
}
|
|
if (out["member_id"].Long() > 0) {
|
|
pgsql_exec("DELETE FROM members_session WHERE member_id=%ld ", out["member_id"].Long());
|
|
// remove all existing session
|
|
if (SessionCheck(out["id"].Long(), in["sessionid"].c_str(), 1) > 0) {
|
|
out["stauts"] = "OK";
|
|
pgsql_query("UPDATE members SET last_login = now() WHERE id = %lu", out["member_id"].Long());
|
|
/*LOAD THE SESSION INTO OUT now */
|
|
load_db_record(out, "SELECT session FROM members_session WHERE member_id=%lu ORDER BY id DESC LIMIT 1", out["member_id"].Long());
|
|
//===============================================================================================================================
|
|
account_email(ACCOUNT_LOGIN_ALERT, out, out); // ALERT CUSTOMER OF LOGIN
|
|
out["profile_pic_url"] = "https://www.wrenchboard.com/assets/images/profile.jpg";
|
|
res = PHP_LOGIN_OK;
|
|
} else {
|
|
out["status"] = "Session check failed";
|
|
}
|
|
}
|
|
}
|
|
logfmt(logINFO, "/LoginWrenchBoardExternal()");
|
|
return res;
|
|
}
|
|
|
|
|
|
|
|
//******************************************************************************
|
|
|
|
long AddMobileTopuNumber(CVars in, CVars &out) {
|
|
long ret = -1;
|
|
long pin = REQ_LONG(in, "pin", 1, -1);
|
|
long customer_id = REQ_LONG(in, "customer_id", 1, -1);
|
|
OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)");
|
|
REQ_STRING(in, "seller_number", 10, 11, "(.*)");
|
|
|
|
CVars x;
|
|
x["pin"] = in["pin"];
|
|
x["pin"].set_valid(true);
|
|
x["customer_id"] = in["customer_id"];
|
|
x["customer_id"].set_valid(true);
|
|
x["loc"] = in["loc"];
|
|
x["loc"].set_valid(true);
|
|
x["seller_number"] = in["seller_number"];
|
|
x["seller_number"].set_valid(true);
|
|
|
|
ret = insert_db_record(DBS_VALID, "mobile_sales_auth", "mobile_sales_auth_id_seq", x);
|
|
|
|
out["status"] = ret;
|
|
out["auth_id"] = ret;
|
|
|
|
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
//******************************************************************************
|
|
|
|
long InitiateAddCustomerBalance(CVars in, CVars &out) {
|
|
logfmt(logINFO, "AddCustomerBalance()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
// REQ_LONG( in, "whattodo", 1, -1 );
|
|
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
}
|
|
|
|
logfmt(logINFO, "/AddCustomerBalance()");
|
|
return ret;
|
|
}
|
|
|
|
long CompleteAddCustomerBalance(CVars in, CVars &out) {
|
|
logfmt(logINFO, "AddCustomerBalance()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
// REQ_LONG( in, "whattodo", 1, -1 );
|
|
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
}
|
|
|
|
logfmt(logINFO, "/AddCustomerBalance()");
|
|
return ret;
|
|
}
|
|
|
|
//******************************************************************************
|
|
|
|
|
|
|
|
|
|
//******************************************************************************
|
|
|
|
long VerifyEmailWrenchBoardAccount(CVars in, CVars &out) {
|
|
logfmt(logINFO, "VerifyEmailWrenchBoardAccount()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
long account_id = REQ_LONG(in, "account_id", 1, -1);
|
|
// ret = load_db_record( out, "SELECT * FROM members WHERE id = %lu", account_id );
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
}
|
|
|
|
logfmt(logINFO, "/VerifyEmailWrenchBoardAccount()");
|
|
return ret;
|
|
}
|
|
//******************************************************************************
|
|
|
|
long VerifyPhoneWrenchBoardAccount(CVars in, CVars &out) {
|
|
logfmt(logINFO, "VerifyPhoneWrenchBoardAccount()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
// REQ_LONG( in, "whattodo", 1, -1 );
|
|
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
}
|
|
|
|
logfmt(logINFO, "/VerifyPhoneWrenchBoardAccount()");
|
|
return ret;
|
|
}
|
|
//******************************************************************************
|
|
|
|
long EditProfileWrenchBoardAccount(CVars in, CVars &out) {
|
|
logfmt(logINFO, "EditProfileWrenchBoardAccount()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
long account_id = REQ_LONG(in, "account_id", 1, -1);
|
|
REQ_STRING(in, "State", 2, 20, "(.*)");
|
|
REQ_STRING(in, "Zipcode", 3, 15, "(.*)");
|
|
REQ_STRING(in, "Country", 2, 5, "(.*)");
|
|
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
}
|
|
|
|
logfmt(logINFO, "/EditProfileWrenchBoardAccount()");
|
|
return ret;
|
|
}
|
|
//******************************************************************************
|
|
|
|
long LoadProfileWrenchBoardAccount(CVars in, CVars &out) {
|
|
logfmt(logINFO, "LoadProfileWrenchBoardAccount()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
long account_id = REQ_LONG(in, "account_id", 1, -1);
|
|
const PGresult* res = pgsql_query("SELECT * FROM members WHERE id = %lu", account_id);
|
|
if (res && pgsql_num_rows(res) > 0) {
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "ERROR";
|
|
}
|
|
|
|
logfmt(logINFO, "/LoadProfileWrenchBoardAccount()");
|
|
return ret;
|
|
}
|
|
//******************************************************************************
|
|
//*****************************************************************************/
|
|
|
|
long ETSL_configure(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long ETSL_configure(CVars in, CVars &out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
|
|
out["etisalat_endpoint"] = "http://etisalat.service.chiefsoft.com/etisalat_payquic.php";
|
|
|
|
|
|
ret = PHP_API_OK;
|
|
|
|
} catch (bad_parameter) {
|
|
|
|
out["status"] = "Bad parameter";
|
|
|
|
} catch (...) {
|
|
|
|
out["status"] = "Unhandled exception in INTW_configure";
|
|
|
|
}
|
|
logfmt(logINFO, "/long ETSL_configure(CVars in, CVars &out)");
|
|
return ret;
|
|
}
|
|
|
|
long DeliverMobilseEtisalat(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long INTW_sendBillPaymentAdvice(CVars in, CVars &out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
int customerId = REQ_LONG(in, "customerid", 1, -1);
|
|
int paymentItemId = REQ_LONG(in, "paymentitemid", 1, -1);
|
|
int amount = REQ_LONG(in, "amount", 0, -1);
|
|
|
|
REQ_STRING(in, "customermobile", 5, 15, "(.*)");
|
|
OPTIONAL(in, "customeremail") REQ_STRING(in, "customeremail", 1, 100, "(.*)");
|
|
OPTIONAL(in, "order_id") REQ_STRING(in, "order_id", 1, 25, "(.*)");
|
|
char CustomerMobile[15];
|
|
char CustomerEmail[100];
|
|
|
|
|
|
|
|
|
|
|
|
sprintf(CustomerEmail, "%s", in["customeremail"].c_str());
|
|
sprintf(CustomerMobile, "%s", in["customermobile"].c_str());
|
|
|
|
|
|
//topalert = "sales@payquic.com";
|
|
out["topalert"] = CfgReadChar("transnotif.topalert");
|
|
sprintf(CustomerEmail, "%s", out["topalert"].c_str());
|
|
|
|
|
|
CVars customer; // Load customer
|
|
ret = load_db_record(customer, "SELECT email,firstname,lastname FROM customer WHERE status=1 AND id = %lu", customerId);
|
|
if (ret < 1L) {
|
|
throw new bad_parameter(out, "customerid");
|
|
}
|
|
|
|
CVars paymentitem; // Load payment item
|
|
ret = load_db_record(paymentitem, "SELECT id,billerid,billername,name,amount,paymentcode FROM interswitch_biller_payment_items WHERE gid = %lu", paymentItemId);
|
|
if (ret < 1L) {
|
|
out["advice"] = "PaymentID not found or not valid !!!";
|
|
throw new bad_parameter(out, "paymentitemid");
|
|
}
|
|
|
|
// Check amount
|
|
if (amount < 1L) {
|
|
amount = paymentitem["amount"].Long();
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Create record
|
|
CVars advice;
|
|
|
|
advice["customerid"] = customerId;
|
|
advice["customerid"].set_valid(true);
|
|
advice["billerid"] = paymentitem["billerid"];
|
|
advice["billerid"].set_valid(true);
|
|
advice["billerpaymentitemgid"] = paymentItemId;
|
|
advice["billerpaymentitemgid"].set_valid(true);
|
|
advice["amount"] = amount;
|
|
advice["amount"].set_valid(true);
|
|
advice["paymentcode"] = paymentitem["paymentcode"];
|
|
advice["paymentcode"].set_valid(true);
|
|
advice["order_id"] = in["order_id"];
|
|
advice["order_id"].set_valid(true);
|
|
advice["customeremail"] = in["customeremail"];
|
|
advice["customeremail"].set_valid(true);
|
|
advice["customermobile"] = in["customermobile"];
|
|
advice["customermobile"].set_valid(true);
|
|
|
|
out["bill_payment_advice_id"] = insert_db_record(DBS_VALID, "interswitch_bill_payment_advice", "interswitch_bill_payment_advice_id_seq", advice);
|
|
if (out["bill_payment_advice_id"].Long() < 1L) {
|
|
//throw new runtime_error("Failed to create interswitch bill payment advice record");
|
|
return PHP_API_BAD_PARAM;
|
|
}
|
|
|
|
// Initiate interswitch session
|
|
CVars setup;
|
|
ETSL_configure(in, setup);
|
|
|
|
|
|
|
|
CVars transaction;
|
|
|
|
|
|
|
|
transaction["detail_id"] = out["bill_payment_advice_id"];
|
|
transaction["detail_id"].set_valid(true);
|
|
transaction["type"] = 1L;
|
|
/* SendBillPaymentAdvice */ transaction["type"].set_valid(true);
|
|
out["transaction_id"] = insert_db_record(DBS_VALID, "interswitch_transaction", "interswitch_transaction_id_seq", transaction);
|
|
if (out["transaction_id"].Long() < 1L) {
|
|
// throw new runtime_error("Failed to create interswitch transaction record");
|
|
return PHP_API_BAD_PARAM;
|
|
}
|
|
|
|
|
|
char uniqueRef[20];
|
|
memset(uniqueRef, 0, 20);
|
|
// TransferCode - RequestReference - UniqueRef => request prefix for terminal owner + ID
|
|
sprintf(uniqueRef, "ETSL%08lu", out["transaction_id"].Long());
|
|
//sprintf( uniqueRef, "%s%09s", setup["interswitch_pfix"].c_str(), out["transaction_id"].c_str() );
|
|
transaction["transfer_code"] = uniqueRef;
|
|
transaction["transfer_code"].set_valid(true);
|
|
|
|
CVars cxc;
|
|
cxc["transfer_code"] = transaction["transfer_code"];
|
|
cxc["transfer_code"].set_valid(true);
|
|
update_db_record(DBS_VALID, "interswitch_transaction", cxc, out["transaction_id"].Long());
|
|
logfmt(logINFO, "Here -> 1");
|
|
logfmt(logINFO, "SENDING TRANSACTION - setup[interswitch_tid].c_str() ->%s", setup["interswitch_tid"].c_str());
|
|
// Prepare call
|
|
const int statusSize = 1024;
|
|
char status[statusSize];
|
|
char transactionRef[statusSize];
|
|
memset(status, 0, statusSize); // Clear?
|
|
memset(transactionRef, 0, statusSize); // Clear?
|
|
|
|
char xtid[12];
|
|
|
|
sprintf(xtid, "%s", setup["interswitch_tid"].c_str());
|
|
|
|
logfmt(logINFO, "SENDING PAQUIC ETISALAT TRANSACTION->%s", xtid);
|
|
out["ResponseCode"] = "99999";
|
|
long ret1 = GateDeliverMobilseEtisalat(in, out);
|
|
|
|
if (out["statusCode"].Long() == 0 && out["errorCode"].Long() == 0) {
|
|
ret = 90000L;
|
|
//'message' => '<?xml version="1.0" encoding="utf-8"?><result><statusCode>0</statusCode><errorCode>0</errorCode><errorDescription>Successful Transaction 0305055755074473</errorDescription><instanceId>0305055755074473</instanceId></result>'
|
|
|
|
try {
|
|
CVars txt;
|
|
txt["responsecode"] = "90000";
|
|
txt["responsecode"].set_valid(true);
|
|
txt["transactionref"] = out["errorDescription"];
|
|
txt["transactionref"].set_valid(true);
|
|
update_db_record(DBS_VALID, "interswitch_transaction", txt, out["transaction_id"].Long());
|
|
} catch (...) {
|
|
out["status"] = "I see no good response from interswitch";
|
|
}
|
|
|
|
CVars fr0;
|
|
fr0["status"] = "5";
|
|
fr0["status"].set_valid(true);
|
|
update_db_record(DBS_VALID, "interswitch_bill_payment_advice", fr0, out["bill_payment_advice_id"].Long());
|
|
|
|
} else {
|
|
|
|
try {
|
|
CVars txt0;
|
|
txt0["responsecode"] = "99999";
|
|
txt0["responsecode"].set_valid(true);
|
|
txt0["transactionref"] = out["errorDescription"];
|
|
txt0["transactionref"].set_valid(true);
|
|
update_db_record(DBS_VALID, "interswitch_transaction", txt0, out["transaction_id"].Long());
|
|
} catch (...) {
|
|
out["status"] = "I see no good response from interswitch";
|
|
}
|
|
|
|
CVars fr1;
|
|
fr1["status"] = "7";
|
|
fr1["status"].set_valid(true);
|
|
update_db_record(DBS_VALID, "interswitch_bill_payment_advice", fr1, out["bill_payment_advice_id"].Long());
|
|
}
|
|
|
|
out["statusCode"].set_valid(true);
|
|
|
|
|
|
} catch (bad_parameter) {
|
|
out["status"] = "Incorrect parameter";
|
|
ret = PHP_API_BAD_PARAM;
|
|
} catch (...) {
|
|
out["status"] = "Unhandled exception in INTW_sendBillPaymentAdvice";
|
|
}
|
|
logfmt(logINFO, "/long INTW_sendBillPaymentAdvice(CVars in, CVars &out)");
|
|
return ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
long GateDeliverMobilseEtisalat(CVars in, CVars &out) {
|
|
logfmt(logINFO, "long DeliverMobilseEtisalat(CVars in, CVars &out)");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
|
|
CURL *curl;
|
|
CURLcode res;
|
|
|
|
struct MemoryStruct chunk;
|
|
|
|
chunk.memory = (char*) malloc(1); /* will be grown as needed by the realloc above */
|
|
chunk.size = 0; /* no data at this point */
|
|
|
|
curl_global_init(CURL_GLOBAL_ALL);
|
|
|
|
/* get a curl handle */
|
|
curl = curl_easy_init();
|
|
|
|
if (curl) {
|
|
// Prepare data
|
|
string data = "";
|
|
CVars::iterator i;
|
|
int j = 0; // Will limit to 200 variables
|
|
for (i = in.begin(); i != in.end() && j < 200; i++) {
|
|
logfmt(logINFO, "IN: %s=%s", i->first.c_str(), i->second.c_str());
|
|
if (j > 0) {
|
|
data += "&";
|
|
}
|
|
data += i->first.c_str();
|
|
data += "=";
|
|
data += i->second.c_str();
|
|
j++;
|
|
}
|
|
logfmt(logINFO, "DATA: %s", data.c_str());
|
|
curl_easy_setopt(curl, CURLOPT_URL, "http://etisalat.service.chiefsoft.com/etisalat_payquic.php");
|
|
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());
|
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
|
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *) &chunk);
|
|
res = curl_easy_perform(curl);
|
|
if (res != CURLE_OK) {
|
|
// Error
|
|
out["status"] = curl_easy_strerror(res);
|
|
logfmt(logINFO, "ERROR: %s", out["status"].c_str());
|
|
ret = PHP_API_BAD_PARAM;
|
|
} else {
|
|
logfmt(logINFO, "%lu bytes retrieved\n", (long) chunk.size);
|
|
data = (const char *) chunk.memory;
|
|
istringstream buffer(data);
|
|
string temp, key, val;
|
|
size_t found;
|
|
while (std::getline(buffer, temp)) {
|
|
logfmt(logINFO, "line: %s", temp.c_str());
|
|
found = temp.find_first_of("=");
|
|
key = temp.substr(0, found);
|
|
val = temp.substr(found + 1);
|
|
out[key] = base64_decode(val);
|
|
logfmt(logINFO, "'%s' => '%s'", key.c_str(), out[key].c_str());
|
|
}
|
|
ret = PHP_API_OK;
|
|
}
|
|
curl_easy_cleanup(curl);
|
|
|
|
if (chunk.memory) {
|
|
free(chunk.memory);
|
|
}
|
|
}
|
|
curl_global_cleanup();
|
|
logfmt(logINFO, "/long DeliverMobilseEtisalat(CVars in, CVars &out)");
|
|
return ret;
|
|
}
|
|
|
|
/*
|
|
void TeleSignAddJob(const char *CustomerId, const char *AutheticationId, const char *CountryCode, const char *PhoneNumber, const char *PIN) {
|
|
// I make sure that headerlist is erased before rebuilding it with the soap function
|
|
curl_slist_free_all(headerlist);
|
|
headerlist = curl_slist_append(headerlist, "Host: www.telesign.com");
|
|
headerlist = curl_slist_append(headerlist, "Content-Type: text/xml");
|
|
headerlist = curl_slist_append(headerlist, "SOAPAction: \"https://www.telesign.com/api/RequestCALL\"");
|
|
sprintf(TeleSignSoapReq, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\
|
|
<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \
|
|
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\
|
|
<soap:Body>\
|
|
<RequestCALL xmlns=\"https://www.telesign.com/api/\">\
|
|
<CustomerID>%s</CustomerID>\
|
|
<AuthenticationID>%s</AuthenticationID>\
|
|
<CountryCode>%s</CountryCode>\
|
|
<PhoneNumber>%s</PhoneNumber>\
|
|
<VerificationCode>%s</VerificationCode>\
|
|
<RedialCount>1</RedialCount>\
|
|
</RequestCALL>\
|
|
</soap:Body>\
|
|
</soap:Envelope>", CustomerId, AutheticationId, CountryCode, PhoneNumber, PIN);
|
|
//FILE_LOG(logINFO) << TeleSignSoapReq;
|
|
curl_easy_setopt(ch, CURLOPT_POSTFIELDS, TeleSignSoapReq);
|
|
curl_easy_setopt(ch, CURLOPT_HTTPHEADER, headerlist);
|
|
curl_easy_perform(ch);
|
|
}
|
|
*/
|
|
/*
|
|
* vi:ts=2
|
|
*/
|