121 lines
4.0 KiB
Dart
121 lines
4.0 KiB
Dart
import 'package:workouttest_util/model/cache.dart';
|
|
import 'package:workouttest_util/util/common.dart';
|
|
import 'package:workouttest_util/util/logging.dart';
|
|
import 'dart:convert';
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:workouttest_util/util/not_found_exception.dart';
|
|
import 'package:workouttest_util/util/track.dart';
|
|
|
|
class APIWebClient with Common, Logging {
|
|
static final APIWebClient _singleton = APIWebClient._internal();
|
|
late bool cert;
|
|
|
|
factory APIWebClient() {
|
|
return _singleton;
|
|
}
|
|
|
|
APIWebClient._internal() {
|
|
cert = false;
|
|
}
|
|
|
|
dynamic authenticateUser(String email, String password) async {
|
|
var baseUrl = Cache().getBaseUrl();
|
|
log("Base URL: $baseUrl");
|
|
var url = "${baseUrl}authenticate";
|
|
|
|
try {
|
|
final body = jsonEncode(<String, String>{'username': email, 'password': password});
|
|
var uri = Uri.parse(url);
|
|
var result = await http.post(uri, body: body, headers: {
|
|
"Content-Type": "application/json",
|
|
"Authorization": "1",
|
|
});
|
|
|
|
if (result.statusCode != 200) {
|
|
log("authentication response: ${result.statusCode} with URL: $url");
|
|
throw Exception("Authentication error: ${result.statusCode}");
|
|
}
|
|
|
|
String response = result.body;
|
|
log("Authentication status: ${result.statusCode}, response: $response");
|
|
final data = jsonDecode(response);
|
|
return data;
|
|
} on Exception catch (exception) {
|
|
log(exception.toString());
|
|
try {
|
|
Track().trackError(exception);
|
|
} on Exception catch (e) {
|
|
log(e.toString());
|
|
}
|
|
|
|
throw Exception("Network error, try again later!");
|
|
}
|
|
}
|
|
|
|
Future<String> post(String endPoint, String body) async {
|
|
final url = Cache().getBaseUrl() + endPoint;
|
|
log(" ------------ http/post body $body - url: $url ");
|
|
try {
|
|
String authToken = Cache().getAuthToken();
|
|
if (authToken.isEmpty) {
|
|
var responseJson = await authenticateUser(Cache.username, Cache.password);
|
|
authToken = responseJson['token'];
|
|
Cache().authToken = authToken;
|
|
}
|
|
var uri = Uri.parse(url);
|
|
var result = await http.post(uri, body: body, headers: {
|
|
"Content-Type": "application/json",
|
|
"Authorization": 'Bearer $authToken',
|
|
});
|
|
log(" ------------post response code: ${result.statusCode}");
|
|
if (result.statusCode == 200) {
|
|
return result.body;
|
|
} else if (result.statusCode == 404) {
|
|
throw const NotFoundException(message: "Not Found");
|
|
} else {
|
|
throw Exception("Network Error, please try again later");
|
|
}
|
|
} on NotFoundException catch (e) {
|
|
throw NotFoundException(message: "Not Found ${e.message}");
|
|
} on Exception catch (e) {
|
|
log("Post Exception: $e");
|
|
Track().trackError(e);
|
|
throw Exception("Network Error, please try again later");
|
|
}
|
|
}
|
|
|
|
Future<String> get(String endPoint, String param) async {
|
|
final url = Cache().getBaseUrl() + endPoint + param;
|
|
try {
|
|
log("-------- API get $url");
|
|
String authToken = Cache().getAuthToken();
|
|
if (authToken.isEmpty) {
|
|
var responseJson = await authenticateUser(Cache.username, Cache.password);
|
|
authToken = responseJson['token'];
|
|
Cache().authToken = authToken;
|
|
}
|
|
var uri = Uri.parse(url);
|
|
var result = await http.get(uri, headers: {
|
|
"Content-Type": "application/json",
|
|
//"Accept-Charset": 'utf-8',
|
|
"Authorization": 'Bearer $authToken',
|
|
});
|
|
|
|
log(" ------------get response code: ${result.statusCode}");
|
|
if (result.statusCode == 200) {
|
|
return result.body;
|
|
} else if (result.statusCode == 404) {
|
|
throw const NotFoundException(message: "Not Found");
|
|
} else {
|
|
throw Exception("Network Error, please try again later");
|
|
}
|
|
} on NotFoundException catch (e) {
|
|
throw NotFoundException(message: "Not Found ${e.message}");
|
|
} on Exception catch (e) {
|
|
log("Post Exception: $e");
|
|
Track().trackError(e);
|
|
throw Exception("Network Error, please try again later");
|
|
}
|
|
}
|
|
}
|