mirror of
https://github.com/wownero/wowlet.git
synced 2026-10-18 15:51:34 +02:00
106 lines
4.4 KiB
C++
106 lines
4.4 KiB
C++
// SPDX-License-Identifier: BSD-3-Clause
|
|
// Copyright (c) 2020-2021, The Monero Project.
|
|
|
|
#include "LocalMoneroApi.h"
|
|
|
|
LocalMoneroApi::LocalMoneroApi(QObject *parent, UtilsNetworking *network, const QString &baseUrl)
|
|
: QObject(parent)
|
|
, m_network(network)
|
|
, m_baseUrl(baseUrl)
|
|
{
|
|
}
|
|
|
|
void LocalMoneroApi::countryCodes() {
|
|
QString url = QString("%1/countrycodes").arg(m_baseUrl);
|
|
QNetworkReply *reply = m_network->getJson(url);
|
|
connect(reply, &QNetworkReply::finished, std::bind(&LocalMoneroApi::onResponse, this, reply, Endpoint::COUNTRY_CODES));
|
|
}
|
|
|
|
void LocalMoneroApi::currencies() {
|
|
QString url = QString("%1/currencies").arg(m_baseUrl);
|
|
QNetworkReply *reply = m_network->getJson(url);
|
|
connect(reply, &QNetworkReply::finished, std::bind(&LocalMoneroApi::onResponse, this, reply, Endpoint::CURRENCIES));
|
|
}
|
|
|
|
void LocalMoneroApi::paymentMethods(const QString &countryCode) {
|
|
QString url;
|
|
if (countryCode.isEmpty()) {
|
|
url = QString("%1/payment_methods").arg(m_baseUrl);
|
|
} else {
|
|
url = QString("%1/payment_methods/%2").arg(m_baseUrl, countryCode);
|
|
}
|
|
QNetworkReply *reply = m_network->getJson(url);
|
|
connect(reply, &QNetworkReply::finished, std::bind(&LocalMoneroApi::onResponse, this, reply, Endpoint::PAYMENT_METHODS));
|
|
}
|
|
|
|
void LocalMoneroApi::buyMoneroOnline(const QString ¤cyCode, const QString &countryCode,
|
|
const QString &paymentMethod, const QString &amount, int page)
|
|
{
|
|
QString url = this->getBuySellUrl(true, currencyCode, countryCode, paymentMethod, amount, page);
|
|
QNetworkReply *reply = m_network->getJson(url);
|
|
connect(reply, &QNetworkReply::finished, std::bind(&LocalMoneroApi::onResponse, this, reply, Endpoint::BUY_MONERO_ONLINE));
|
|
}
|
|
|
|
void LocalMoneroApi::sellMoneroOnline(const QString ¤cyCode, const QString &countryCode,
|
|
const QString &paymentMethod, const QString &amount, int page)
|
|
{
|
|
QString url = this->getBuySellUrl(false, currencyCode, countryCode, paymentMethod, amount, page);
|
|
QNetworkReply *reply = m_network->getJson(url);
|
|
connect(reply, &QNetworkReply::finished, std::bind(&LocalMoneroApi::onResponse, this, reply, Endpoint::SELL_MONERO_ONLINE));
|
|
}
|
|
|
|
void LocalMoneroApi::accountInfo(const QString &username) {
|
|
QString url = QString("%1/account_info/%2").arg(m_baseUrl, username);
|
|
QNetworkReply *reply = m_network->getJson(url);
|
|
connect(reply, &QNetworkReply::finished, std::bind(&LocalMoneroApi::onResponse, this, reply, Endpoint::ACCOUNT_INFO));
|
|
}
|
|
|
|
void LocalMoneroApi::onResponse(QNetworkReply *reply, LocalMoneroApi::Endpoint endpoint) {
|
|
const bool ok = reply->error() == QNetworkReply::NoError;
|
|
const QString err = reply->errorString();
|
|
|
|
QByteArray data = reply->readAll();
|
|
reply->deleteLater();
|
|
|
|
QJsonObject obj;
|
|
if (!data.isEmpty() && Utils::validateJSON(data)) {
|
|
auto doc = QJsonDocument::fromJson(data);
|
|
obj = doc.object();
|
|
}
|
|
else if (!ok) {
|
|
emit ApiResponse(LocalMoneroResponse{false, endpoint, err, {}});
|
|
return;
|
|
}
|
|
else {
|
|
emit ApiResponse(LocalMoneroResponse{false, endpoint, "Invalid response from LocalMonero", {}});
|
|
return;
|
|
}
|
|
|
|
if (obj.contains("error")) {
|
|
QString errorStr = QJsonDocument(obj["error"].toObject()).toJson(QJsonDocument::Compact);
|
|
emit ApiResponse(LocalMoneroResponse{false, endpoint, errorStr, obj});
|
|
return;
|
|
}
|
|
|
|
emit ApiResponse(LocalMoneroResponse{true, endpoint, "", obj});
|
|
}
|
|
|
|
QString LocalMoneroApi::getBuySellUrl(bool buy, const QString ¤cyCode, const QString &countryCode,
|
|
const QString &paymentMethod, const QString &amount, int page)
|
|
{
|
|
QString url = QString("%1/%2-monero-online/%3").arg(m_baseUrl, buy ? "buy" : "sell", currencyCode);
|
|
if (!countryCode.isEmpty() && paymentMethod.isEmpty())
|
|
url += QString("/%1").arg(countryCode);
|
|
else if (countryCode.isEmpty() && !paymentMethod.isEmpty())
|
|
url += QString("/%1").arg(paymentMethod);
|
|
else if (!countryCode.isEmpty() && !paymentMethod.isEmpty())
|
|
url += QString("/%1/%2").arg(countryCode, paymentMethod);
|
|
|
|
QUrlQuery query;
|
|
if (!amount.isEmpty() && amount != "0")
|
|
query.addQueryItem("amount", amount);
|
|
if (page > 0)
|
|
query.addQueryItem("page", QString::number(page));
|
|
url += "?" + query.toString();
|
|
return url;
|
|
} |