user_authenticator.dart 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import 'package:dio/dio.dart';
  2. import 'package:logging/logging.dart';
  3. import 'package:photos/core/configuration.dart';
  4. import 'package:photos/core/event_bus.dart';
  5. import 'package:photos/events/user_authenticated_event.dart';
  6. class UserAuthenticator {
  7. final _dio = Dio();
  8. final _logger = Logger("UserAuthenticator");
  9. UserAuthenticator._privateConstructor();
  10. static final UserAuthenticator instance =
  11. UserAuthenticator._privateConstructor();
  12. Future<bool> login(String username, String password) {
  13. return _dio.post(
  14. Configuration.instance.getHttpEndpoint() + "/users/authenticate",
  15. data: {
  16. "username": username,
  17. "password": password,
  18. }).then((response) {
  19. if (response.statusCode == 200 && response.data != null) {
  20. _saveConfiguration(username, password, response);
  21. Bus.instance.fire(UserAuthenticatedEvent());
  22. return true;
  23. } else {
  24. return false;
  25. }
  26. }).catchError((e) {
  27. _logger.severe(e.toString());
  28. return false;
  29. });
  30. }
  31. Future<bool> create(String username, String password) {
  32. return _dio
  33. .post(Configuration.instance.getHttpEndpoint() + "/users", data: {
  34. "username": username,
  35. "password": password,
  36. }).then((response) {
  37. if (response.statusCode == 200 && response.data != null) {
  38. _saveConfiguration(username, password, response);
  39. return true;
  40. } else {
  41. if (response.data != null && response.data["message"] != null) {
  42. throw Exception(response.data["message"]);
  43. } else {
  44. throw Exception("Something went wrong");
  45. }
  46. }
  47. }).catchError((e) {
  48. _logger.severe(e.toString());
  49. throw e;
  50. });
  51. }
  52. Future<void> setEncryptedKeyOnServer() {
  53. return _dio.put(
  54. Configuration.instance.getHttpEndpoint() + "/users/encrypted-key",
  55. data: {
  56. "encryptedKey": Configuration.instance.getEncryptedKey(),
  57. },
  58. options: Options(headers: {
  59. "X-Auth-Token": Configuration.instance.getToken(),
  60. }),
  61. );
  62. }
  63. void _saveConfiguration(String username, String password, Response response) {
  64. Configuration.instance.setUsername(username);
  65. Configuration.instance.setPassword(password);
  66. Configuration.instance.setUserID(response.data["id"]);
  67. Configuration.instance.setToken(response.data["token"]);
  68. final String encryptedKey = response.data["encryptedKey"];
  69. if (encryptedKey != null && encryptedKey.isNotEmpty) {
  70. Configuration.instance.setEncryptedKey(encryptedKey);
  71. }
  72. }
  73. }