| 1 | import 'package:cake_wallet/.secrets.g.dart' as secrets; |
| 2 | import 'package:cake_wallet/cake_pay/src/services/cake_pay_api.dart'; |
| 3 | import 'package:cake_wallet/cake_pay/src/models/cake_pay_order.dart'; |
| 4 | import 'package:cake_wallet/cake_pay/src/models/cake_pay_vendor.dart'; |
| 5 | import 'package:cake_wallet/core/secure_storage.dart'; |
| 6 | |
| 7 | class CakePayService { |
| 8 | CakePayService(this.secureStorage, this.cakePayApi); |
| 9 | |
| 10 | /// `_v2` was added to log out users so they can login using the new backend |
| 11 | static const cakePayEmailStorageKey = 'cake_pay_email_v2'; |
| 12 | static const cakePayUsernameStorageKey = 'cake_pay_username_v2'; |
| 13 | static const cakePayUserTokenKey = 'cake_pay_user_token_v2'; |
| 14 | |
| 15 | static String get testCakePayApiKey => secrets.testCakePayApiKey; |
| 16 | |
| 17 | static String get cakePayApiKey => secrets.cakePayApiKey; |
| 18 | |
| 19 | static String get CSRFToken => secrets.CSRFToken; |
| 20 | |
| 21 | static String get authorization => secrets.authorization; |
| 22 | |
| 23 | final SecureStorage secureStorage; |
| 24 | final CakePayApi cakePayApi; |
| 25 | |
| 26 | /// Get Vendors |
| 27 | Future<List<CakePayVendor>> getVendors({ |
| 28 | required int page, |
| 29 | required String countryCode, |
| 30 | String? country, |
| 31 | String? search, |
| 32 | List<String>? vendorIds, |
| 33 | bool? giftCards, |
| 34 | bool? prepaidCards, |
| 35 | bool? onDemand, |
| 36 | bool? custom, |
| 37 | }) async { |
| 38 | final result = await cakePayApi.getVendors( |
| 39 | apiKey: cakePayApiKey, |
| 40 | page: page, |
| 41 | country: country, |
| 42 | countryCode: countryCode, |
| 43 | search: search, |
| 44 | vendorIds: vendorIds, |
| 45 | giftCards: giftCards, |
| 46 | prepaidCards: prepaidCards, |
| 47 | onDemand: onDemand, |
| 48 | custom: custom); |
| 49 | return result; |
| 50 | } |
| 51 | |
| 52 | /// LogIn |
| 53 | Future<void> logIn(String email) async { |
| 54 | final userName = await cakePayApi.authenticateUser(email: email, apiKey: cakePayApiKey); |
| 55 | await secureStorage.write(key: cakePayEmailStorageKey, value: userName); |
| 56 | await secureStorage.write(key: cakePayUsernameStorageKey, value: userName); |
| 57 | } |
| 58 | |
| 59 | /// Verify email |
| 60 | Future<void> verifyEmail(String code) async { |
| 61 | final email = (await secureStorage.read(key: cakePayEmailStorageKey))!; |
| 62 | final credentials = |
| 63 | await cakePayApi.verifyEmail(email: email, code: code, apiKey: cakePayApiKey); |
| 64 | await secureStorage.write(key: cakePayUserTokenKey, value: credentials.token); |
| 65 | await secureStorage.write(key: cakePayUsernameStorageKey, value: credentials.username); |
| 66 | } |
| 67 | |
| 68 | Future<String?> getUserEmail() async { |
| 69 | return (await secureStorage.read(key: cakePayEmailStorageKey)); |
| 70 | } |
| 71 | |
| 72 | /// Check is user logged |
| 73 | Future<bool> isLogged() async { |
| 74 | final username = await secureStorage.read(key: cakePayUsernameStorageKey) ?? ''; |
| 75 | final password = await secureStorage.read(key: cakePayUserTokenKey) ?? ''; |
| 76 | return username.isNotEmpty && password.isNotEmpty; |
| 77 | } |
| 78 | |
| 79 | /// Logout |
| 80 | Future<void> logout([String? email]) async { |
| 81 | await secureStorage.delete(key: cakePayUsernameStorageKey); |
| 82 | await secureStorage.delete(key: cakePayUserTokenKey); |
| 83 | if (email != null) { |
| 84 | await cakePayApi.logoutUser(email: email, apiKey: cakePayApiKey); |
| 85 | } |
| 86 | } |
| 87 | |
| 88 | /// Purchase Gift Card |
| 89 | Future<CakePayOrder> createOrder({ |
| 90 | required int cardId, |
| 91 | required String price, |
| 92 | required int quantity, |
| 93 | required bool confirmsNoVpn, |
| 94 | required bool confirmsVoidedRefund, |
| 95 | required bool confirmsTermsAgreed, |
| 96 | }) async { |
| 97 | final userEmail = (await secureStorage.read(key: cakePayEmailStorageKey))!; |
| 98 | final token = (await secureStorage.read(key: cakePayUserTokenKey))!; |
| 99 | return await cakePayApi.createOrder( |
| 100 | apiKey: cakePayApiKey, |
| 101 | cardId: cardId, |
| 102 | price: price, |
| 103 | quantity: quantity, |
| 104 | token: token, |
| 105 | userEmail: userEmail, |
| 106 | confirmsNoVpn: confirmsNoVpn, |
| 107 | confirmsVoidedRefund: confirmsVoidedRefund, |
| 108 | confirmsTermsAgreed: confirmsTermsAgreed, |
| 109 | ); |
| 110 | } |
| 111 | |
| 112 | Future<CakePayOrder> findOrderById({required String orderId}) async { |
| 113 | final token = (await secureStorage.read(key: cakePayUserTokenKey))!; |
| 114 | return await cakePayApi.getOrderById(orderId: orderId, token: token); |
| 115 | } |
| 116 | |
| 117 | ///Simulate Purchase Gift Card |
| 118 | Future<String> simulatePayment({required String orderId}) async { |
| 119 | final token = (await secureStorage.read(key: cakePayUserTokenKey))!; |
| 120 | return await cakePayApi.simulatePayment( |
| 121 | CSRFToken: CSRFToken, authorization: authorization, token: token, orderId: orderId); |
| 122 | } |
| 123 | } |