init
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
This commit is contained in:
188
Telegram/SourceFiles/payments/stripe/stripe_card.cpp
Normal file
188
Telegram/SourceFiles/payments/stripe/stripe_card.cpp
Normal file
@@ -0,0 +1,188 @@
|
||||
/*
|
||||
This file is part of Telegram Desktop,
|
||||
the official desktop application for the Telegram messaging service.
|
||||
|
||||
For license and copyright information please follow this link:
|
||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "stripe/stripe_card.h"
|
||||
|
||||
#include "stripe/stripe_decode.h"
|
||||
|
||||
namespace Stripe {
|
||||
namespace {
|
||||
|
||||
CardBrand BrandFromString(const QString &brand) {
|
||||
if (brand == "visa") {
|
||||
return CardBrand::Visa;
|
||||
} else if (brand == "american express") {
|
||||
return CardBrand::Amex;
|
||||
} else if (brand == "mastercard") {
|
||||
return CardBrand::MasterCard;
|
||||
} else if (brand == "discover") {
|
||||
return CardBrand::Discover;
|
||||
} else if (brand == "jcb") {
|
||||
return CardBrand::JCB;
|
||||
} else if (brand == "diners club") {
|
||||
return CardBrand::DinersClub;
|
||||
} else {
|
||||
return CardBrand::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
CardFundingType FundingFromString(const QString &funding) {
|
||||
if (funding == "credit") {
|
||||
return CardFundingType::Credit;
|
||||
} else if (funding == "debit") {
|
||||
return CardFundingType::Debit;
|
||||
} else if (funding == "prepaid") {
|
||||
return CardFundingType::Prepaid;
|
||||
} else {
|
||||
return CardFundingType::Other;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Card::Card(
|
||||
QString id,
|
||||
QString last4,
|
||||
CardBrand brand,
|
||||
quint32 expMonth,
|
||||
quint32 expYear)
|
||||
: _cardId(id)
|
||||
, _last4(last4)
|
||||
, _brand(brand)
|
||||
, _expMonth(expMonth)
|
||||
, _expYear(expYear) {
|
||||
}
|
||||
|
||||
Card Card::Empty() {
|
||||
return Card(QString(), QString(), CardBrand::Unknown, 0, 0);
|
||||
}
|
||||
|
||||
Card Card::DecodedObjectFromAPIResponse(QJsonObject object) {
|
||||
if (!ContainsFields(object, {
|
||||
u"id",
|
||||
u"last4",
|
||||
u"brand",
|
||||
u"exp_month",
|
||||
u"exp_year"
|
||||
})) {
|
||||
return Card::Empty();
|
||||
}
|
||||
|
||||
const auto string = [&](QStringView key) {
|
||||
return object.value(key).toString();
|
||||
};
|
||||
const auto cardId = string(u"id");
|
||||
const auto last4 = string(u"last4");
|
||||
const auto brand = BrandFromString(string(u"brand").toLower());
|
||||
const auto expMonth = object.value("exp_month").toInt();
|
||||
const auto expYear = object.value("exp_year").toInt();
|
||||
auto result = Card(cardId, last4, brand, expMonth, expYear);
|
||||
result._name = string(u"name");
|
||||
result._dynamicLast4 = string(u"dynamic_last4");
|
||||
result._funding = FundingFromString(string(u"funding").toLower());
|
||||
result._fingerprint = string(u"fingerprint");
|
||||
result._country = string(u"country");
|
||||
result._currency = string(u"currency");
|
||||
result._addressLine1 = string(u"address_line1");
|
||||
result._addressLine2 = string(u"address_line2");
|
||||
result._addressCity = string(u"address_city");
|
||||
result._addressState = string(u"address_state");
|
||||
result._addressZip = string(u"address_zip");
|
||||
result._addressCountry = string(u"address_country");
|
||||
|
||||
// TODO incomplete, not used.
|
||||
//result._allResponseFields = object;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
QString Card::cardId() const {
|
||||
return _cardId;
|
||||
}
|
||||
|
||||
QString Card::name() const {
|
||||
return _name;
|
||||
}
|
||||
|
||||
QString Card::last4() const {
|
||||
return _last4;
|
||||
}
|
||||
|
||||
QString Card::dynamicLast4() const {
|
||||
return _dynamicLast4;
|
||||
}
|
||||
|
||||
CardBrand Card::brand() const {
|
||||
return _brand;
|
||||
}
|
||||
|
||||
CardFundingType Card::funding() const {
|
||||
return _funding;
|
||||
}
|
||||
|
||||
QString Card::fingerprint() const {
|
||||
return _fingerprint;
|
||||
}
|
||||
|
||||
QString Card::country() const {
|
||||
return _country;
|
||||
}
|
||||
|
||||
QString Card::currency() const {
|
||||
return _currency;
|
||||
}
|
||||
|
||||
quint32 Card::expMonth() const {
|
||||
return _expMonth;
|
||||
}
|
||||
|
||||
quint32 Card::expYear() const {
|
||||
return _expYear;
|
||||
}
|
||||
|
||||
QString Card::addressLine1() const {
|
||||
return _addressLine1;
|
||||
}
|
||||
|
||||
QString Card::addressLine2() const {
|
||||
return _addressLine2;
|
||||
}
|
||||
|
||||
QString Card::addressCity() const {
|
||||
return _addressCity;
|
||||
}
|
||||
|
||||
QString Card::addressState() const {
|
||||
return _addressState;
|
||||
}
|
||||
|
||||
QString Card::addressZip() const {
|
||||
return _addressZip;
|
||||
}
|
||||
|
||||
QString Card::addressCountry() const {
|
||||
return _addressCountry;
|
||||
}
|
||||
|
||||
bool Card::empty() const {
|
||||
return _cardId.isEmpty();
|
||||
}
|
||||
|
||||
QString CardBrandToString(CardBrand brand) {
|
||||
switch (brand) {
|
||||
case CardBrand::Amex: return "American Express";
|
||||
case CardBrand::DinersClub: return "Diners Club";
|
||||
case CardBrand::Discover: return "Discover";
|
||||
case CardBrand::JCB: return "JCB";
|
||||
case CardBrand::MasterCard: return "MasterCard";
|
||||
case CardBrand::Unknown: return "Unknown";
|
||||
case CardBrand::Visa: return "Visa";
|
||||
}
|
||||
std::abort();
|
||||
}
|
||||
|
||||
} // namespace Stripe
|
||||
Reference in New Issue
Block a user