import 'dart:io'; import 'dart:async'; import 'dart:convert'; import 'package:meta/meta.dart'; import 'package:http/http.dart' as http; import 'package:imagini/models/api/response/LoginResponse.dart'; class APIProvider{ String _server, _accessToken, _refreshToken; static const String _LOGIN_API = "/api/v1/Login"; static const String _MEDIA_ITEMS_API = "/api/v1/MediaItems"; static const String _ALBUMS_API = "/api/v1/Albums"; static const String _TAGS_API = "/api/v1/Tags"; APIProvider({ @required String server, String accessToken, String refreshToken }) { _server = server; _accessToken = accessToken; _refreshToken = refreshToken; } // Endpoint: /api/v1/Login Future login([ String username, String password, ]) async { assert( (username != null && password != null) || (_accessToken != null && _refreshToken != null) ); http.Response response = await http.post( Uri.encodeFull(_server + _LOGIN_API), body: jsonEncode({ 'user': username, 'password': password, }), ).timeout(Duration(seconds: 10)); if (response.statusCode != 200) { // Fuck return LoginResponse.fromJson(jsonDecode(response.body)); } // Success String setCookieVal = response.headers["set-cookie"]; List allCookies = setCookieVal.split(',') .map((cookie) => Cookie.fromSetCookieValue(cookie)).toList(); Cookie accessToken = allCookies.firstWhere((cookie) => cookie.name == "AccessToken"); Cookie refreshToken = allCookies.firstWhere((cookie) => cookie.name == "RefreshToken"); _accessToken = accessToken.toString(); _refreshToken = refreshToken.toString(); print("Status: ${response.statusCode.toString()}"); print("Body: ${response.body.toString()}"); print("AccessToken: ${accessToken.toString()}"); print("RefreshToken: ${refreshToken.toString()}"); return LoginResponse.fromJson(jsonDecode(response.body)); } void logout() { } Future mediaItems([ String startDate, String endDate, String albumID, List tagID, String type, // TODO: Make enum int page, ]) async { // Query: // /api/v1/MediaItems // Derive Params: // startDate: // &createdAt=>2020-10-10T10:10:10 // endDate: // &createdAt=<2020-10-10T10:10:10 // albumID: // &albumID=9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d // tagID: // &tagID=9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d,9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d // type: // &type=Photos // &type=Videos // page: // &page=4 // Returns: // { // // } return null; } Future tags([ int page ]) async { // Query: // /api/v1/Tags // Derive Params: // page: // &page=4 return null; } Future albums([ int page ]) async { // Query: // /api/v1/Albums // Derive Params: // page: // &page=4 return null; } Future me() async { return null; } void dispose() {} }