Status loginServerOtpStatus(const Login &login, bool &on, long &timeout) { const auto url = ABC_SERVER_ROOT "/v1/otp/status"; ServerRequestJson json; ABC_CHECK(json.setup(login)); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply)); struct ResultJson: public JsonObject { ABC_JSON_CONSTRUCTORS(ResultJson, JsonObject) ABC_JSON_BOOLEAN(on, "on", false) ABC_JSON_INTEGER(timeout, "otp_timeout", 0) } resultJson(replyJson.results()); on = resultJson.on(); if (on) { ABC_CHECK(resultJson.timeoutOk()); timeout = resultJson.timeout(); } return Status(); }
Status loginServerGetLoginPackage(const Lobby &lobby, DataSlice LP1, DataSlice LRA1, LoginPackage &result, JsonPtr &rootKeyBox) { const auto url = ABC_SERVER_ROOT "/account/loginpackage/get"; ServerRequestJson json; ABC_CHECK(json.setup(lobby)); if (LP1.size()) ABC_CHECK(json.authKeySet(base64Encode(LP1))); if (LRA1.size()) ABC_CHECK(json.recoveryAuthKeySet(base64Encode(LRA1))); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply.body)); ABC_CHECK(replyJson.ok()); struct ResultJson: public JsonObject { ABC_JSON_CONSTRUCTORS(ResultJson, JsonObject) ABC_JSON_STRING(package, "login_package", nullptr) ABC_JSON_VALUE(rootKeyBox, "rootKeyBox", JsonPtr) } resultJson(replyJson.results()); ABC_CHECK(resultJson.packageOk()); ABC_CHECK(result.decode(resultJson.package())); if (json_is_object(resultJson.rootKeyBox().get())) rootKeyBox = resultJson.rootKeyBox(); return Status(); }
Status loginServerGetPinPackage(DataSlice DID, DataSlice LPIN1, std::string &result, AuthError &authError) { const auto url = ABC_SERVER_ROOT "/v1/account/pinpackage/get"; ServerRequestJson json; ABC_CHECK(json.set(ABC_SERVER_JSON_DID_FIELD, base64Encode(DID))); ABC_CHECK(json.set(ABC_SERVER_JSON_LPIN1_FIELD, base64Encode(LPIN1))); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply, &authError)); struct ResultJson: public JsonObject { ABC_JSON_CONSTRUCTORS(ResultJson, JsonObject) ABC_JSON_STRING(package, "pin_package", nullptr) } resultJson(replyJson.results()); ABC_CHECK(resultJson.packageOk()); result = resultJson.package(); return Status(); }
Status loginServerUploadLogs(Account *account) { const auto url = ABC_SERVER_ROOT "/v1/account/debug"; ServerRequestJson json; if (account) { json.setup(account->login); // Failure is fine JsonArray jsonArray; auto ids = account->wallets.list(); for (const auto &id: ids) { std::shared_ptr<Wallet> wallet = cacheWalletSoft(id); if (wallet) { const auto name = wallet->name(); logInfo("Wallet '" + name + "' " + id); const auto addresses = wallet->addresses.list(); for (const auto &address: addresses) logInfo(address); } DataChunk watchData; if (fileLoad(watchData, WalletPaths(id).cachePath())) { jsonArray.append( json_string(base64Encode(watchData).c_str())); } } json.set("watchers", jsonArray); // Failure is fine AutoFree<tABC_AccountSettings, accountSettingsFree> settings; settings.get() = accountSettingsLoad(*account); std::string servers(settings->szOverrideBitcoinServerList); std::string strOverride = (settings->bOverrideBitcoinServers ? "true" : "false"); logInfo("bOverrideBitcoinServers:" + strOverride); logInfo("szOverrideBitcoinServerList:" + servers); } DataChunk logData = debugLogLoad(); json.set("log", base64Encode(logData)); // Failure is fine HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); return Status(); }
Status loginServerOtpResetCancelPending(const Login &login) { const auto url = ABC_SERVER_ROOT "/v1/otp/pending/cancel"; ServerRequestJson json; ABC_CHECK(json.setup(login)); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply)); return Status(); }
Status loginServerAvailable(const LoginStore &store) { const auto url = ABC_SERVER_ROOT "/v1/account/available"; ServerRequestJson json; ABC_CHECK(json.setup(store)); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply)); return Status(); }
Status loginServerWalletActivate(const Login &login, const std::string &syncKey) { const auto url = ABC_SERVER_ROOT "/v1/wallet/activate"; ServerRequestJson json; ABC_CHECK(json.setup(login)); ABC_CHECK(json.set(ABC_SERVER_JSON_REPO_WALLET_FIELD, syncKey)); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply)); return Status(); }
Status loginServerOtpDisable(const Login &login) { const auto url = ABC_SERVER_ROOT "/otp/off"; ServerRequestJson json; ABC_CHECK(json.setup(login)); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply.body)); ABC_CHECK(replyJson.ok()); return Status(); }
Status loginServerOtpEnable(const Login &login, const std::string &otpToken, const long timeout) { const auto url = ABC_SERVER_ROOT "/v1/otp/on"; ServerRequestJson json; ABC_CHECK(json.setup(login)); ABC_CHECK(json.set(ABC_SERVER_JSON_OTP_SECRET_FIELD, otpToken)); ABC_CHECK(json.set(ABC_SERVER_JSON_OTP_TIMEOUT, static_cast<json_int_t>(timeout))); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply)); return Status(); }
Status loginServerGetCarePackage(const Lobby &lobby, CarePackage &result) { const auto url = ABC_SERVER_ROOT "/account/carepackage/get"; ServerRequestJson json; ABC_CHECK(json.setup(lobby)); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply.body)); ABC_CHECK(replyJson.ok()); struct ResultJson: public JsonObject { ABC_JSON_CONSTRUCTORS(ResultJson, JsonObject) ABC_JSON_STRING(package, "care_package", nullptr) } resultJson(replyJson.results()); ABC_CHECK(resultJson.packageOk()); ABC_CHECK(result.decode(resultJson.package())); return Status(); }
Status loginServerCreate(const LoginStore &store, DataSlice LP1, const CarePackage &carePackage, const LoginPackage &loginPackage, const std::string &syncKey) { const auto url = ABC_SERVER_ROOT "/v1/account/create"; ServerRequestJson json; ABC_CHECK(json.setup(store)); ABC_CHECK(json.passwordAuthSet(base64Encode(LP1))); ABC_CHECK(json.set(ABC_SERVER_JSON_CARE_PACKAGE_FIELD, carePackage.encode())); ABC_CHECK(json.set(ABC_SERVER_JSON_LOGIN_PACKAGE_FIELD, loginPackage.encode())); ABC_CHECK(json.set(ABC_SERVER_JSON_REPO_FIELD, syncKey)); HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply)); return Status(); }
Status loginServerChangePassword(const Login &login, DataSlice newLP1, DataSlice newLRA1, const CarePackage &carePackage, const LoginPackage &loginPackage) { const auto url = ABC_SERVER_ROOT "/v1/account/password/update"; ServerRequestJson json; ABC_CHECK(json.setup(login)); ABC_CHECK(json.set(ABC_SERVER_JSON_NEW_LP1_FIELD, base64Encode(newLP1))); ABC_CHECK(json.set(ABC_SERVER_JSON_CARE_PACKAGE_FIELD, carePackage.encode())); ABC_CHECK(json.set(ABC_SERVER_JSON_LOGIN_PACKAGE_FIELD, loginPackage.encode())); if (newLRA1.size()) { ABC_CHECK(json.set(ABC_SERVER_JSON_NEW_LRA1_FIELD, base64Encode(newLRA1))); } HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); ServerReplyJson replyJson; ABC_CHECK(replyJson.decode(reply)); return Status(); }