This repository has been archived on 2023-11-13. You can view files and clone it, but cannot push or open issues or pull requests.
imagini/web_native/lib/api/APIProvider.dart

134 lines
3.1 KiB
Dart
Raw Normal View History

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<LoginResponse> 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(<String, String>{
'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<Cookie> 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<String> mediaItems([
String startDate,
String endDate,
String albumID,
List<String> 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<String> tags([
int page
]) async {
// Query:
// /api/v1/Tags
// Derive Params:
// page:
// &page=4
return null;
}
Future<String> albums([
int page
]) async {
// Query:
// /api/v1/Albums
// Derive Params:
// page:
// &page=4
return null;
}
Future<String> me() async {
return null;
}
void dispose() {}
}