dev
dart 123 lines 4.25 KB
Raw
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 }