Added support for Home Assistant servers

This commit is contained in:
Juan Gilsanz Polo 2022-10-16 23:59:56 +02:00
parent c848591356
commit b1e257ddd3
9 changed files with 165 additions and 15 deletions

View file

@ -29,7 +29,7 @@ Future<Map<String, dynamic>> apiRequest({
HttpClient httpClient = HttpClient();
if (method == 'get') {
HttpClientRequest request = await httpClient.getUrl(Uri.parse("${server.connectionMethod}://${server.domain}${server.path ?? ""}${server.port != null ? ':${server.port}' : ""}/control$urlPath"));
request.headers.set('authorization', 'Basic ${server.authToken}');
request.headers.set('Authorization', 'Basic ${server.authToken}');
HttpClientResponse response = overrideTimeout == true
? await request.close()
: await request.close().timeout(const Duration(seconds: 10));
@ -54,7 +54,7 @@ Future<Map<String, dynamic>> apiRequest({
}
else if (method == 'post') {
HttpClientRequest request = await httpClient.postUrl(Uri.parse("${server.connectionMethod}://${server.domain}${server.path ?? ""}${server.port != null ? ':${server.port}' : ""}/control$urlPath"));
request.headers.set('authorization', 'Basic ${server.authToken}');
request.headers.set('Authorization', 'Basic ${server.authToken}');
request.headers.set('content-type', 'application/json');
request.add(utf8.encode(json.encode(body)));
HttpClientResponse response = overrideTimeout == true
@ -165,6 +165,18 @@ Future login(Server server) async {
)
};
}
else if (result['statusCode'] == 500) {
return {
'result': 'server_error',
'log': AppLog(
type: 'login',
dateTime: DateTime.now(),
message: 'server_error',
statusCode: result['statusCode'].toString(),
resBody: result['body']
)
};
}
else {
return {
'result': 'error',
@ -183,6 +195,49 @@ Future login(Server server) async {
}
}
Future loginHA(Server server) async {
print(server.authToken);
final result = await apiRequest(
server: server,
method: 'get',
urlPath: '/status',
type: 'login_ha'
);
if (result['hasResponse'] == true) {
if (result['statusCode'] == 200) {
return {'result': 'success'};
}
else if (result['statusCode'] == 401) {
return {
'result': 'invalid_username_password',
'log': AppLog(
type: 'login',
dateTime: DateTime.now(),
message: 'invalid_username_password',
statusCode: result['statusCode'].toString(),
resBody: result['body']
)
};
}
else {
return {
'result': 'error',
'log': AppLog(
type: 'login_ha',
dateTime: DateTime.now(),
message: 'error_code_not_expected',
statusCode: result['statusCode'].toString(),
resBody: result['body']
)
};
}
}
else {
return result;
}
}
Future getServerStatus(Server server) async {
final result = await Future.wait([
apiRequest(server: server, method: 'get', urlPath: '/stats', type: 'server_status'),