api.dart 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import 'dart:convert';
  2. import 'dart:io';
  3. import 'package:crypto/crypto.dart';
  4. import 'package:dio/adapter.dart';
  5. import 'package:dio/dio.dart';
  6. import 'package:e2ee_chat/common/global.dart';
  7. class Api {
  8. Api();
  9. static Dio dio = Dio(BaseOptions(
  10. baseUrl: 'http://10.122.237.112:80/',
  11. ));
  12. static init() async {
  13. if (!Global.isRelease) {
  14. (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
  15. (client) {
  16. client.findProxy = (uri) {
  17. return "PROXY 10.122.237.112:8080";
  18. };
  19. //代理工具会提供一个抓包的自签名证书,会通不过证书校验,所以我们禁用证书校验
  20. client.badCertificateCallback =
  21. (X509Certificate cert, String host, int port) => true;
  22. };
  23. }
  24. // debug(await Dio().get('http://10.122.237.112:80/'));
  25. }
  26. Future<String?> login({required String username, String? password, String? token}) async {
  27. debug('Api login begin');
  28. String _password = "";
  29. String? _token;
  30. if (password != null) {
  31. var bytes = utf8.encode(password);
  32. var digest = sha1.convert(bytes);
  33. _password = digest.toString();
  34. }
  35. var data = {"username": username, "token": token ?? Global.emptyToken, "password": password};
  36. debug('Api login data: $data');
  37. try {
  38. var r = await dio.post("/account/login/", data: FormData.fromMap(data),
  39. // options: _options,
  40. );
  41. debug('Api login response: $r');
  42. var json = jsonDecode(r.data);
  43. _token = json["token"].toString();
  44. debug('Api login new token: $_token');
  45. } on DioError catch(e) {
  46. var data = e.response?.data;
  47. var status = e.response?.statusCode;
  48. debug('Api login error, statusCode: $status, data: $data');
  49. throw e;
  50. }
  51. debug('Api login end');
  52. return _token;
  53. }
  54. Future<bool> logout() async {
  55. try {
  56. await dio.post("/account/logout/");
  57. return true;
  58. } on DioError catch(e) {
  59. return false;
  60. }
  61. }
  62. Future<bool> register({required String username, required String password}) async {
  63. try {
  64. var data = {"username": username, "password": password, "password2": password};
  65. await dio.post('/account/register/', data: FormData.fromMap(data));
  66. } on DioError catch(e) {
  67. return false;
  68. }
  69. return true;
  70. }
  71. }