Skip to content

Commit

Permalink
Merge pull request #50 from brave-intl/stamp-grants
Browse files Browse the repository at this point in the history
Reconcile stamp, grants
  • Loading branch information
NejcZdovc authored Aug 17, 2018
2 parents c9195bd + 14391e1 commit 7bb0719
Show file tree
Hide file tree
Showing 12 changed files with 224 additions and 124 deletions.
20 changes: 12 additions & 8 deletions include/bat/ledger/promo.h → include/bat/ledger/grant.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,28 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef BAT_LEDGER_PROMO_HANDLER_
#define BAT_LEDGER_PROMO_HANDLER_
#ifndef BAT_LEDGER_GRANT_HANDLER_
#define BAT_LEDGER_GRANT_HANDLER_

#include <string>
#include <map>
#include <vector>

#include "bat/ledger/export.h"

namespace ledger {

LEDGER_EXPORT struct Promo {
Promo();
~Promo();
Promo(const Promo& properties);
LEDGER_EXPORT struct Grant {
Grant();
~Grant();
Grant(const Grant& properties);

std::string altcurrency;
std::string probi;
std::string promotionId;
double amount;
uint64_t expiryTime;
};

} // namespace ledger

#endif // BAT_LEDGER_PROMO_HANDLER_
#endif // BAT_LEDGER_GRANT_HANDLER_
7 changes: 4 additions & 3 deletions include/bat/ledger/ledger.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,15 @@ class LEDGER_EXPORT Ledger {
virtual const std::string& GetBTCAddress() const = 0;
virtual const std::string& GetETHAddress() const = 0;
virtual const std::string& GetLTCAddress() const = 0;
virtual uint64_t GetReconcileStamp() const = 0;
virtual uint64_t GetPublisherMinVisitTime() const = 0; // In milliseconds
virtual unsigned int GetPublisherMinVisits() const = 0;
virtual bool GetPublisherAllowNonVerified() const = 0;
virtual double GetContributionAmount() const = 0;
virtual void GetWalletProperties() const = 0;
virtual void GetPromotion(const std::string& lang, const std::string& paymentId) const = 0;
virtual void SolvePromotionCaptcha(const std::string& solution) const = 0;
virtual void GetPromotionCaptcha() const = 0;
virtual void GetGrant(const std::string& lang, const std::string& paymentId) const = 0;
virtual void SolveGrantCaptcha(const std::string& solution) const = 0;
virtual void GetGrantCaptcha() const = 0;
virtual std::string GetWalletPassphrase() const = 0;
virtual void RecoverWallet(const std::string& passPhrase) const = 0;
};
Expand Down
1 change: 1 addition & 0 deletions include/bat/ledger/ledger_callback_handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ LEDGER_EXPORT enum Result {
NO_LEDGER_STATE = 3,
INVALID_PUBLISHER_STATE = 4,
INVALID_LEDGER_STATE = 5,
CAPTCHA_FAILED = 6,
// some more useful result codes should go here
};

Expand Down
14 changes: 7 additions & 7 deletions include/bat/ledger/ledger_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#include "bat/ledger/ledger_url_loader.h"
#include "bat/ledger/publisher_info.h"
#include "bat/ledger/wallet_info.h"
#include "bat/ledger/promo.h"
#include "bat/ledger/grant.h"

namespace ledger {

Expand Down Expand Up @@ -59,12 +59,12 @@ class LEDGER_EXPORT LedgerClient {
PublisherInfoFilter filter,
GetPublisherInfoListCallback callback) = 0;

virtual void GetPromotion(const std::string& lang, const std::string& paymentId) = 0;
virtual void OnPromotion(ledger::Promo) = 0;
virtual void GetPromotionCaptcha() = 0;
virtual void OnPromotionCaptcha(const std::string& image) = 0;
virtual void OnRecoverWallet(Result result, double balance) = 0;
virtual void OnPromotionFinish(ledger::Result result, unsigned int statusCode, uint64_t experationDate) = 0;
virtual void GetGrant(const std::string& lang, const std::string& paymentId) = 0;
virtual void OnGrant(ledger::Result result, const ledger::Grant& grant) = 0;
virtual void GetGrantCaptcha() = 0;
virtual void OnGrantCaptcha(const std::string& image) = 0;
virtual void OnRecoverWallet(Result result, double balance, const std::vector<ledger::Grant>& grants) = 0;
virtual void OnGrantFinish(ledger::Result result, const ledger::Grant& grant) = 0;

virtual std::string URIEncode(const std::string& value) = 0;

Expand Down
10 changes: 2 additions & 8 deletions include/bat/ledger/wallet_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,9 @@
#include <vector>

#include "bat/ledger/export.h"
#include "bat/ledger/grant.h"

namespace ledger {

struct GRANT {
std::string altcurrency;
std::string probi;
unsigned int expiryTime;
};

LEDGER_EXPORT struct WalletInfo {
WalletInfo();
~WalletInfo();
Expand All @@ -30,7 +24,7 @@ LEDGER_EXPORT struct WalletInfo {
std::vector<double> parameters_choices_;
std::vector<double> parameters_range_;
unsigned int parameters_days_;
std::vector<GRANT> grants_;
std::vector<Grant> grants_;
};

} // namespace ledger
Expand Down
10 changes: 6 additions & 4 deletions src/bat/ledger/ledger.cc
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,12 @@ WalletInfo::WalletInfo (const ledger::WalletInfo &info) {
grants_ = info.grants_;
}

Promo::Promo () : amount(0) {}
Promo::~Promo () {}
Promo::Promo (const ledger::Promo &properties) {
Grant::Grant () {}
Grant::~Grant () {}
Grant::Grant (const ledger::Grant &properties) {
promotionId = properties.promotionId;
amount = properties.amount;
expiryTime = properties.expiryTime;
probi = properties.probi;
altcurrency = properties.altcurrency;
}
}
92 changes: 62 additions & 30 deletions src/bat_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,10 @@ const std::string& BatClient::getLTCAddress() const {
return state_->walletInfo_.addressLTC_;
}

uint64_t BatClient::getReconcileStamp() const {
return state_->reconcileStamp_;
}

void BatClient::getWalletProperties() {
std::string path = (std::string)WALLET_PROPERTIES + state_->walletInfo_.paymentId_ + WALLET_PROPERTIES_END;
auto request_id = ledger_->LoadURL(
Expand Down Expand Up @@ -890,7 +894,8 @@ void BatClient::recoverWallet(const std::string& passPhrase) {
int result = bip39_mnemonic_to_bytes(nullptr, passPhrase.c_str(), &newSeed.front(), newSeed.size(), &written);
LOG(ERROR) << "!!!recoverWallet result == " << result << "!!!result size == " << written;
if (0 != result || 0 == written) {
ledger_->OnRecoverWallet(ledger::Result::ERROR, 0);
std::vector<braveledger_bat_helper::GRANT> empty;
ledger_->OnRecoverWallet(ledger::Result::ERROR, 0, empty);
return;
}
state_->walletInfo_.keyInfoSeed_ = newSeed;
Expand All @@ -917,7 +922,8 @@ void BatClient::recoverWalletPublicKeyCallback(bool result, const std::string& r
LOG(ERROR) << "!!!recoverWalletPublicKeyCallback == " << response;

if (!result) {
ledger_->OnRecoverWallet(ledger::Result::ERROR, 0);
std::vector<braveledger_bat_helper::GRANT> empty;
ledger_->OnRecoverWallet(ledger::Result::ERROR, 0, empty);
return;
}
std::string recoveryId;
Expand All @@ -937,18 +943,19 @@ void BatClient::recoverWalletCallback(bool result, const std::string& response,
LOG(ERROR) << "!!!recoverWalletCallback == " << response;

if (!result) {
ledger_->OnRecoverWallet(ledger::Result::ERROR, 0);
std::vector<braveledger_bat_helper::GRANT> empty;
ledger_->OnRecoverWallet(ledger::Result::ERROR, 0, empty);
return;
}

braveledger_bat_helper::getJSONWalletInfo(response, state_->walletInfo_, state_->fee_currency_, state_->fee_amount_, state_->days_);
braveledger_bat_helper::getJSONRecoverWallet(response, state_->walletProperties_.balance_, state_->walletProperties_.probi_);
braveledger_bat_helper::getJSONRecoverWallet(response, state_->walletProperties_.balance_, state_->walletProperties_.probi_, state_->walletProperties_.grants_);
state_->walletInfo_.paymentId_ = recoveryId;
saveState();
ledger_->OnRecoverWallet(ledger::Result::OK, state_->walletProperties_.balance_);
ledger_->OnRecoverWallet(ledger::Result::OK, state_->walletProperties_.balance_, state_->walletProperties_.grants_);
}

void BatClient::getPromotion(const std::string& lang, const std::string& forPaymentId) {
void BatClient::getGrant(const std::string& lang, const std::string& forPaymentId) {
std::string paymentId = forPaymentId;
if (paymentId.empty()) {
paymentId = state_->walletInfo_.paymentId_;
Expand All @@ -970,33 +977,41 @@ void BatClient::getPromotion(const std::string& lang, const std::string& forPaym
auto request_id = ledger_->LoadURL(buildURL((std::string)GET_SET_PROMOTION + arguments, ""),
std::vector<std::string>(), "", "", ledger::URL_METHOD::GET, &handler_);
handler_.AddRequestHandler(std::move(request_id),
std::bind(&BatClient::getPromotionCallback,
std::bind(&BatClient::getGrantCallback,
this,
_1,
_2));
}

void BatClient::getPromotionCallback(bool success, const std::string& response) {
LOG(ERROR) << "!!!getPromotionCallback == " << response;
void BatClient::getGrantCallback(bool success, const std::string& response) {
LOG(ERROR) << "!!!getGrantCallback == " << response;

braveledger_bat_helper::GRANT properties;

if (!success) {
// TODO NZ add error handler
ledger_->OnGrant(ledger::Result::ERROR, properties);
return;
}

bool ok = braveledger_bat_helper::loadFromJson(properties, response);

if (!ok) {
ledger_->OnGrant(ledger::Result::ERROR, properties);
return;
}

braveledger_bat_helper::PROMOTION_ST properties;
braveledger_bat_helper::loadFromJson(properties, response);
state_->promotion_ = properties;
ledger_->OnPromotion(properties);
state_->grant_ = properties;
ledger_->OnGrant(ledger::Result::OK, properties);
}

void BatClient::setPromotion(const std::string& captchaResponse, const std::string& promotionId) {
if (promotionId.empty() && state_->promotion_.promotionId_.empty()) {
ledger_->OnPromotionFinish(ledger::Result::ERROR, 400, 0);
void BatClient::setGrant(const std::string& captchaResponse, const std::string& promotionId) {
if (promotionId.empty() && state_->grant_.promotionId.empty()) {
braveledger_bat_helper::GRANT properties;
ledger_->OnGrantFinish(ledger::Result::ERROR, properties);
return;
}

std::string promoId = state_->promotion_.promotionId_;
std::string promoId = state_->grant_.promotionId;
if (!promotionId.empty()) {
promoId = promotionId;
}
Expand All @@ -1005,51 +1020,68 @@ void BatClient::setPromotion(const std::string& captchaResponse, const std::stri
std::string values[2] = {promoId, captchaResponse};
std::string payload = braveledger_bat_helper::stringify(keys, values, 2);

// TODO NZ remove when captcha fro brave-core is added
std::vector<std::string> headers;
headers.push_back("bypass-captcha:8d8830c8-db5b-4652-9032-2fd65454bff0");

auto request_id = ledger_->LoadURL(buildURL((std::string)GET_SET_PROMOTION + "/" + state_->walletInfo_.paymentId_, ""),
std::vector<std::string>(), payload, "application/json; charset=utf-8", ledger::URL_METHOD::PUT, &handler_);
headers, payload, "application/json; charset=utf-8", ledger::URL_METHOD::PUT, &handler_);
handler_.AddRequestHandler(std::move(request_id),
std::bind(&BatClient::setPromotionCallback,
std::bind(&BatClient::setGrantCallback,
this,
_1,
_2));
}

void BatClient::setPromotionCallback(bool success, const std::string& response) {
LOG(ERROR) << "!!!setPromotionCallback == " << response;
void BatClient::setGrantCallback(bool success, const std::string& response) {
LOG(ERROR) << "!!!setGrantCallback == " << response;

std::string error;
unsigned int statusCode;
braveledger_bat_helper::GRANT grant;
braveledger_bat_helper::getJSONResponse(response, statusCode, error);

if (!success) {
ledger_->OnPromotionFinish(ledger::Result::ERROR, statusCode, 0);
if (statusCode == 422) {
ledger_->OnGrantFinish(ledger::Result::CAPTCHA_FAILED, grant);
} else {
ledger_->OnGrantFinish(ledger::Result::ERROR, grant);
}
return;
}

// TODO NZ add actual expiration date when endpoint is updated
ledger_->OnPromotionFinish(ledger::Result::OK, statusCode, 2130600234);
bool ok = braveledger_bat_helper::loadFromJson(grant, response);
if (!ok) {
ledger_->OnGrantFinish(ledger::Result::ERROR, grant);
return;
}

grant.promotionId = state_->grant_.promotionId;
state_->grant_ = grant;

ledger_->OnGrantFinish(ledger::Result::OK, grant);
}

void BatClient::getPromotionCaptcha() {
void BatClient::getGrantCaptcha() {
auto request_id = ledger_->LoadURL(buildURL((std::string)GET_PROMOTION_CAPTCHA + state_->walletInfo_.paymentId_, ""),
std::vector<std::string>(), "", "",
ledger::URL_METHOD::GET, &handler_);
handler_.AddRequestHandler(std::move(request_id),
std::bind(&BatClient::getPromotionCaptchaCallback,
std::bind(&BatClient::getGrantCaptchaCallback,
this,
_1,
_2));
}

void BatClient::getPromotionCaptchaCallback(bool success, const std::string& response) {
LOG(ERROR) << "!!!getPromotionCaptchaCallback";
void BatClient::getGrantCaptchaCallback(bool success, const std::string& response) {
LOG(ERROR) << "!!!getGrantCaptchaCallback";

if (!success) {
// TODO NZ Add error handler
return;
}

ledger_->OnPromotionCaptcha(response);
ledger_->OnGrantCaptcha(response);
}

} // namespace braveledger_bat_client
13 changes: 7 additions & 6 deletions src/bat_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class BatClient {
const std::string& getBTCAddress() const;
const std::string& getETHAddress() const;
const std::string& getLTCAddress() const;
uint64_t getReconcileStamp() const;
double getContributionAmount() const;
bool isReadyForReconcile();
void reconcile(const std::string& viewingId);
Expand All @@ -42,16 +43,16 @@ class BatClient {
std::string getWalletPassphrase() const;
void walletPropertiesCallback(bool success, const std::string& response);
void recoverWallet(const std::string& passPhrase);
void getPromotion(const std::string& lang, const std::string& forPaymentId);
void setPromotion(const std::string& captchaResponse, const std::string& promotionId);
void getPromotionCaptcha();
void getGrant(const std::string& lang, const std::string& forPaymentId);
void setGrant(const std::string& captchaResponse, const std::string& promotionId);
void getGrantCaptcha();
void getWalletProperties();

private:
void saveState();
void getPromotionCaptchaCallback(bool result, const std::string& response);
void getPromotionCallback(bool result, const std::string& response);
void setPromotionCallback(bool result, const std::string& response);
void getGrantCaptchaCallback(bool result, const std::string& response);
void getGrantCallback(bool result, const std::string& response);
void setGrantCallback(bool result, const std::string& response);
void recoverWalletPublicKeyCallback(bool result, const std::string& response);
void recoverWalletCallback(bool result, const std::string& response, const std::string& paymentId);
void prepareBatch(const braveledger_bat_helper::BALLOT_ST& ballot, const braveledger_bat_helper::TRANSACTION_ST& transaction);
Expand Down
Loading

0 comments on commit 7bb0719

Please sign in to comment.