You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

163 regels
4.9 KiB

  1. import 'package:dio/dio.dart';
  2. import 'package:qadirneyriz/config/config.dart';
  3. import 'package:qadirneyriz/main.dart';
  4. import 'package:qadirneyriz/setting/setting.dart';
  5. import 'package:qadirneyriz/utils/result/result.dart';
  6. import 'dart:io';
  7. class AuthServices {
  8. String userAgent =
  9. Platform.isAndroid ? 'application/android' : 'application/ios';
  10. Future<Result?> loginApi({
  11. required String mobile,
  12. String? password,
  13. String? otp,
  14. }) async {
  15. String? token;
  16. token = await messaging.getToken();
  17. assert(password != null || otp != null);
  18. try {
  19. Map<String, String> headers = {
  20. "Accept": "application/json",
  21. "user-agent": userAgent
  22. };
  23. FormData formData;
  24. formData = password != null
  25. ? FormData.fromMap(
  26. {"mobile": mobile, "password": password, "device_id": token})
  27. : FormData.fromMap(
  28. {"mobile": mobile, "otp": otp, "device_id": token});
  29. // print('${formData.fields} resData');
  30. final res = await Dio().post(
  31. "${config.network.baseUrl}login?lang=${setting.userLocalDb.getUser().language}",
  32. data: formData,
  33. options: Options(headers: headers));
  34. if (res.statusCode == 200 || res.statusCode == 201) {
  35. setting.userLocalDb.saveUserField('token', res.data['token']);
  36. setting.userLocalDb.saveUserField('mobile', res.data['mobile']);
  37. setting.userLocalDb.saveUserField('name', res.data['name']);
  38. setting.userLocalDb.saveUserField('role', res.data['role']);
  39. setting.userLocalDb.saveUserField('access', res.data['access']);
  40. return Result(isOk: true, message: res.data['msg']);
  41. }
  42. } on DioException catch (e) {
  43. // print(e);
  44. return Result(
  45. isOk: false,
  46. errors: e.response?.data['errors'],
  47. message: e.response?.data['msg']);
  48. }
  49. return const Result(isOk: false);
  50. }
  51. Future<Result?> sendOtpApi({required String mobile}) async {
  52. try {
  53. Map<String, String> headers = {
  54. "Accept": "application/json",
  55. "user-agent": userAgent,
  56. };
  57. FormData formData = FormData.fromMap({"mobile": mobile});
  58. final res = await Dio().post(
  59. "${config.network.baseUrl}sendOtp?lang=${setting.userLocalDb.getUser().language}",
  60. data: formData,
  61. options: Options(headers: headers));
  62. if (res.statusCode == 200 || res.statusCode == 201) {
  63. return Result(isOk: true, message: res.data['msg']);
  64. }
  65. } on DioException catch (e) {
  66. return Result(
  67. isOk: false,
  68. errors: e.response?.data['errors'],
  69. message: e.response?.data['msg']);
  70. }
  71. return const Result(isOk: false);
  72. }
  73. Future<Result?> checkLoginApi() async {
  74. final userRole = setting.userLocalDb.getUser().role;
  75. try {
  76. Map<String, String> headers = {"Accept": "application/json"};
  77. String dataToken = setting.userLocalDb.getUser().token!;
  78. if (dataToken != '') {
  79. headers['Authorization'] = "Bearer $dataToken";
  80. }
  81. // print('$dataToken datatokoen');
  82. // لینک API
  83. final apiUrl = userRole != 1
  84. ? "${config.network.baseUrl}admin/checkLogin"
  85. : "${config.network.baseUrl}user/checkLogin";
  86. final res = await Dio().get(
  87. apiUrl,
  88. options: Options(headers: headers),
  89. );
  90. if (res.statusCode == 200 || res.statusCode == 201) {
  91. return Result(isOk: true, message: res.data['msg']);
  92. }
  93. } on DioException catch (e) {
  94. return Result(
  95. isOk: false,
  96. errors: e.response?.data['errors'],
  97. message: e.response?.data['msg'],
  98. );
  99. }
  100. return const Result(isOk: false);
  101. }
  102. Future<Result?> authLog() async {
  103. try {
  104. print("Starting authLog...");
  105. Map<String, String> headers = {
  106. "Accept": "application/json",
  107. "User-Agent": Platform.isAndroid ? "android" : "ios"
  108. };
  109. String dataToken = setting.userLocalDb.getUser().token!;
  110. print("Retrieved token: $dataToken");
  111. if (dataToken != '') {
  112. headers['Authorization'] = "Bearer $dataToken";
  113. print("Authorization header set.");
  114. }
  115. // لینک API
  116. final apiUrl = "${config.network.baseUrl}auth-log";
  117. print("API URL: $apiUrl");
  118. final res = await Dio().post(
  119. apiUrl,
  120. options: Options(headers: headers),
  121. );
  122. print("Response received: ${res.statusCode}");
  123. if (res.statusCode == 200 || res.statusCode == 204) {
  124. print("Success: ${res.data}");
  125. return Result(isOk: true, message: res.data['msg']);
  126. }
  127. } on DioException catch (e) {
  128. print("DioException occurred: ${e.response?.data}");
  129. return Result(
  130. isOk: false,
  131. errors: e.response?.data['errors'],
  132. message: e.response?.data['msg'],
  133. );
  134. } catch (e) {
  135. print("Unexpected error: $e");
  136. }
  137. print("Returning default failure result.");
  138. return const Result(isOk: false);
  139. }
  140. }