| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- /*
- 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
|