Added download
This commit is contained in:
@@ -11,18 +11,10 @@ import 'package:fotodocumentation/utils/url_utils.dart';
|
||||
|
||||
abstract class BaseController {
|
||||
UrlUtils get uriUtils => DiContainer.get();
|
||||
JwtTokenStorage get _jwtTokenStorage => DiContainer.get();
|
||||
HttpClientUtils get httpClientUtils => DiContainer.get();
|
||||
|
||||
Future<Header> getAuthHeader() async {
|
||||
final accessToken = await _jwtTokenStorage.getAccessToken();
|
||||
|
||||
if (accessToken != null && accessToken.isNotEmpty) {
|
||||
// Use JWT Bearer token
|
||||
return Header('Authorization', 'Bearer $accessToken');
|
||||
} else {
|
||||
return const Header("Accept-Language", "en-US");
|
||||
}
|
||||
Header getAuthHeader() {
|
||||
return HeaderUtils().getAuthHeader();
|
||||
}
|
||||
|
||||
Exception getServerError(Response response) {
|
||||
@@ -32,7 +24,7 @@ abstract class BaseController {
|
||||
Future<List<T>> runGetListWithAuth<T>(String uriStr, List<T> Function(dynamic) convert) async {
|
||||
http.Client client = httpClientUtils.client;
|
||||
try {
|
||||
Header cred = await getAuthHeader();
|
||||
Header cred = getAuthHeader();
|
||||
Uri uri = Uri.parse(uriStr);
|
||||
var response = await client.get(uri, headers: {cred.name: cred.value});
|
||||
if (response.statusCode == 200) {
|
||||
@@ -51,7 +43,7 @@ abstract class BaseController {
|
||||
Future<T?> runGetWithAuth<T>(String uriStr, T Function(dynamic) convert) async {
|
||||
http.Client client = httpClientUtils.client;
|
||||
try {
|
||||
Header cred = await getAuthHeader();
|
||||
Header cred = getAuthHeader();
|
||||
Uri uri = Uri.parse(uriStr);
|
||||
var response = await client.get(uri, headers: {cred.name: cred.value});
|
||||
if (response.statusCode == 200) {
|
||||
@@ -67,9 +59,26 @@ abstract class BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<int>> runGetBytesWithAuth(String uriStr) async {
|
||||
http.Client client = httpClientUtils.client;
|
||||
try {
|
||||
Header cred = getAuthHeader();
|
||||
Uri uri = Uri.parse(uriStr);
|
||||
var response = await client.get(uri, headers: {cred.name: cred.value});
|
||||
if (response.statusCode == 200) {
|
||||
return response.bodyBytes;
|
||||
} else {
|
||||
throw ServerError(response.statusCode);
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e("exception $e");
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> runDeleteWithAuth(String uriStr) async {
|
||||
http.Client client = httpClientUtils.client;
|
||||
Header cred = await getAuthHeader();
|
||||
Header cred = getAuthHeader();
|
||||
Uri uri = Uri.parse(uriStr);
|
||||
var response = await client.delete(uri, headers: {cred.name: cred.value});
|
||||
return response.statusCode == 200;
|
||||
@@ -77,13 +86,28 @@ abstract class BaseController {
|
||||
|
||||
Future<bool> runPutWithAuth(String uriStr) async {
|
||||
http.Client client = httpClientUtils.client;
|
||||
Header cred = await getAuthHeader();
|
||||
Header cred = getAuthHeader();
|
||||
Uri uri = Uri.parse(uriStr);
|
||||
var response = await client.put(uri, headers: {cred.name: cred.value});
|
||||
return response.statusCode == 200;
|
||||
}
|
||||
}
|
||||
|
||||
class HeaderUtils{
|
||||
JwtTokenStorage get _jwtTokenStorage => DiContainer.get();
|
||||
|
||||
Header getAuthHeader() {
|
||||
final accessToken = _jwtTokenStorage.getAccessToken();
|
||||
|
||||
if (accessToken != null && accessToken.isNotEmpty) {
|
||||
// Use JWT Bearer token
|
||||
return Header('Authorization', 'Bearer $accessToken');
|
||||
} else {
|
||||
return const Header("Accept-Language", "en-US");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Header {
|
||||
final String name;
|
||||
final String value;
|
||||
|
||||
@@ -5,6 +5,8 @@ abstract interface class CustomerController {
|
||||
Future<List<CustomerListDto>> getAll(String query, String startsWith);
|
||||
|
||||
Future<CustomerDto?> get({required int id});
|
||||
|
||||
Future<List<int>> export({required int customerId, int? pictureId});
|
||||
}
|
||||
|
||||
class CustomerControllerImpl extends BaseController implements CustomerController {
|
||||
@@ -28,4 +30,13 @@ class CustomerControllerImpl extends BaseController implements CustomerControlle
|
||||
String uriStr = '${uriUtils.getBaseUrl()}$path/$id';
|
||||
return runGetWithAuth(uriStr, (json) => CustomerDto.fromJson(json));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<int>> export({required int customerId, int? pictureId}) {
|
||||
String uriStr = '${uriUtils.getBaseUrl()}$path/export/$customerId';
|
||||
if (pictureId != null) {
|
||||
uriStr += '?picture=$pictureId';
|
||||
}
|
||||
return runGetBytesWithAuth(uriStr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ typedef AuthenticateReply = ({JwtTokenPairDto? jwtTokenPairDto});
|
||||
abstract interface class LoginController {
|
||||
Future<AuthenticateReply> authenticate(String username, String password);
|
||||
Future<bool> refreshAccessToken();
|
||||
Future<bool> isUsingJwtAuth();
|
||||
bool isUsingJwtAuth();
|
||||
}
|
||||
|
||||
class LoginControllerImpl extends BaseController implements LoginController {
|
||||
@@ -36,7 +36,7 @@ class LoginControllerImpl extends BaseController implements LoginController {
|
||||
final tokenPair = JwtTokenPairDto.fromJson(data);
|
||||
|
||||
// Store tokens securely
|
||||
await _jwtTokenStorage.saveTokens(tokenPair.accessToken, tokenPair.refreshToken);
|
||||
_jwtTokenStorage.saveTokens(tokenPair.accessToken, tokenPair.refreshToken);
|
||||
|
||||
// Load user data using the new token
|
||||
return (jwtTokenPairDto: tokenPair);
|
||||
@@ -53,7 +53,7 @@ class LoginControllerImpl extends BaseController implements LoginController {
|
||||
@override
|
||||
Future<bool> refreshAccessToken() async {
|
||||
try {
|
||||
final refreshToken = await _jwtTokenStorage.getRefreshToken();
|
||||
final refreshToken = _jwtTokenStorage.getRefreshToken();
|
||||
if (refreshToken == null) {
|
||||
logger.i('No refresh token available');
|
||||
return false;
|
||||
@@ -74,7 +74,7 @@ class LoginControllerImpl extends BaseController implements LoginController {
|
||||
final newAccessToken = data['accessToken'] as String;
|
||||
|
||||
// Update only the access token (keep same refresh token)
|
||||
await _jwtTokenStorage.updateAccessToken(newAccessToken);
|
||||
_jwtTokenStorage.updateAccessToken(newAccessToken);
|
||||
|
||||
logger.d('Access token refreshed successfully');
|
||||
return true;
|
||||
@@ -89,8 +89,8 @@ class LoginControllerImpl extends BaseController implements LoginController {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> isUsingJwtAuth() async {
|
||||
return await _jwtTokenStorage.hasTokens();
|
||||
bool isUsingJwtAuth() {
|
||||
return _jwtTokenStorage.hasTokens();
|
||||
}
|
||||
|
||||
Header _getLoginHeader(String username, String password) {
|
||||
|
||||
Reference in New Issue
Block a user