This commit is contained in:
2021-04-05 20:40:23 -04:00
parent 5e83740f57
commit 0523c0f909
17 changed files with 312 additions and 91 deletions

View File

@@ -0,0 +1,4 @@
import "package:imagini/api/auth_client/base_auth_client.dart";
BaseAuthClient getAuthClient(storage) => throw UnsupportedError(
'Cannot create a client without dart:html or dart:io.');

View File

@@ -0,0 +1,6 @@
import 'package:http/http.dart';
abstract class BaseAuthClient implements BaseClient {
String getServer();
Map<String, String> getHeaders();
}

View File

@@ -0,0 +1,56 @@
import "package:http/http.dart";
import 'package:http/browser_client.dart';
import "package:imagini/api/auth_client/base_auth_client.dart";
import "package:imagini/core/storage_client/base_storage_client.dart";
BaseClient getAuthClient(storage) => BrowserAuthClient(storage);
class BrowserAuthClient extends BrowserClient implements BaseAuthClient {
BaseStorageClient _storage;
String _cachedServer;
String _cachedAccessToken;
String _cachedRefreshToken;
BrowserAuthClient(BaseStorageClient storage) {
_storage = storage;
}
@override
String getServer() {
return _cachedServer;
}
@override
Map<String, String> getHeaders() {
return {
'X-Imagini-AccessToken': _cachedAccessToken,
'X-Imagini-RefreshToken': _cachedRefreshToken,
};
}
@override
Future<StreamedResponse> send(BaseRequest request) async {
String _accessToken = await _storage.get("accessToken");
String _refreshToken = await _storage.get("refreshToken");
_cachedAccessToken = _accessToken;
_cachedRefreshToken = _refreshToken;
request.headers.addAll({
'X-Imagini-AccessToken': _accessToken,
'X-Imagini-RefreshToken': _refreshToken,
});
return super.send(request).then((response) async {
if (response.headers.containsKey("x-imagini-accesstoken")) {
_cachedAccessToken = response.headers["x-imagini-accesstoken"];
await _storage.set("accessToken", response.headers["x-imagini-accesstoken"]);
}
if (response.headers.containsKey("x-imagini-refreshtoken")) {
_cachedRefreshToken = response.headers["x-imagini-refreshtoken"];
await _storage.set("refreshToken", response.headers["x-imagini-refreshtoken"]);
}
return response;
});
}
}

View File

@@ -0,0 +1,36 @@
import 'package:http/browser_client.dart';
import "package:http/http.dart";
import "package:imagini/core/storage_client/base_storage_client.dart";
BaseClient getCookieClient(storage) => ClientWithCookies(storage);
class ClientWithCookies extends BrowserClient {
BaseStorageClient _storage;
ClientWithCookies(BaseStorageClient storage) {
_storage = storage;
}
@override
Future<StreamedResponse> send(BaseRequest request) async {
String _accessToken = await _storage.get("accessToken");
String _refreshToken = await _storage.get("refreshToken");
request.headers.addAll({
'X-Imagini-AccessToken': _accessToken,
'X-Imagini-RefreshToken': _refreshToken,
});
return super.send(request).then((response) async {
// We've been told to update our access token
if (response.headers.containsKey("x-imagini-accesstoken")) {
await _storage.set("accessToken", response.headers["x-imagini-accesstoken"]);
}
// We've been told to update our refresh token
if (response.headers.containsKey("x-imagini-refreshtoken")) {
await _storage.set("refreshToken", response.headers["x-imagini-refreshtoken"]);
}
return response;
});
}
}

View File

@@ -0,0 +1,4 @@
import 'package:http/http.dart';
BaseClient getCookieClient(storage) => throw UnsupportedError(
'Cannot create a client without dart:html or dart:io.');

View File

@@ -0,0 +1,56 @@
import "package:http/http.dart";
import 'package:http/io_client.dart';
import "package:imagini/api/auth_client/base_auth_client.dart";
import "package:imagini/core/storage_client/base_storage_client.dart";
BaseClient getAuthClient(storage) => IOAuthClient(storage);
class IOAuthClient extends IOClient implements BaseAuthClient {
BaseStorageClient _storage;
String _cachedServer;
String _cachedAccessToken;
String _cachedRefreshToken;
IOAuthClient(BaseStorageClient storage) {
_storage = storage;
}
@override
String getServer() {
return _cachedServer;
}
@override
Map<String, String> getHeaders() {
return {
'X-Imagini-AccessToken': _cachedAccessToken,
'X-Imagini-RefreshToken': _cachedRefreshToken,
};
}
@override
Future<IOStreamedResponse> send(BaseRequest request) async {
String _accessToken = await _storage.get("accessToken");
String _refreshToken = await _storage.get("refreshToken");
_cachedAccessToken = _accessToken;
_cachedRefreshToken = _refreshToken;
request.headers.addAll({
'X-Imagini-AccessToken': _accessToken,
'X-Imagini-RefreshToken': _refreshToken,
});
return super.send(request).then((response) async {
if (response.headers.containsKey("x-imagini-accesstoken")) {
_cachedAccessToken = response.headers["x-imagini-accesstoken"];
await _storage.set("accessToken", response.headers["x-imagini-accesstoken"]);
}
if (response.headers.containsKey("x-imagini-refreshtoken")) {
_cachedRefreshToken = response.headers["x-imagini-refreshtoken"];
await _storage.set("refreshToken", response.headers["x-imagini-refreshtoken"]);
}
return response;
});
}
}

View File

@@ -0,0 +1,36 @@
import 'package:http/io_client.dart';
import "package:http/http.dart";
import "package:imagini/core/storage_client/base_storage_client.dart";
BaseClient getCookieClient(storage) => IOClientWithCookies(storage);
class IOClientWithCookies extends IOClient {
BaseStorageClient _storage;
IOClientWithCookies(BaseStorageClient storage) {
_storage = storage;
}
@override
Future<IOStreamedResponse> send(BaseRequest request) async {
String _accessToken = await _storage.get("accessToken");
String _refreshToken = await _storage.get("refreshToken");
request.headers.addAll({
'X-Imagini-AccessToken': _accessToken,
'X-Imagini-RefreshToken': _refreshToken,
});
return super.send(request).then((response) async {
// We've been told to update our access token
if (response.headers.containsKey("x-imagini-accesstoken")) {
await _storage.set("accessToken", response.headers["x-imagini-accesstoken"]);
}
// We've been told to update our refresh token
if (response.headers.containsKey("x-imagini-refreshtoken")) {
await _storage.set("refreshToken", response.headers["x-imagini-refreshtoken"]);
}
return response;
});
}
}