1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
// SPDX-License-Identifier: Apache-2.0
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:yaml/yaml.dart';
class KuksaConfig {
final String hostname;
final int port;
final String authorization;
final bool use_tls;
final List<int> ca_certificate;
final String tls_server_name;
static String configFilePath = '/etc/xdg/AGL/homescreen.yaml';
static String defaultHostname = 'localhost';
static int defaultPort = 55555;
static String defaultCaCertPath = '/etc/kuksa-val/CA.pem';
KuksaConfig({required this.hostname, required this.port, required this.authorization,
required this.use_tls, required this.ca_certificate, required this.tls_server_name});
}
// NOTE: This may need to be changed to a FutureProvider to avoid slowing
// down the top-level widget initState...
final kuksaConfigProvider = Provider((ref) {
final configFile = File(KuksaConfig.configFilePath);
try {
print("Reading configuration ${KuksaConfig.configFilePath}");
String content = configFile.readAsStringSync();
final dynamic yamlMap = loadYaml(content);
String hostname = KuksaConfig.defaultHostname;
if (yamlMap.containsKey('hostname')) {
hostname = yamlMap['hostname'];
}
int port = KuksaConfig.defaultPort;
if (yamlMap.containsKey('port')) {
port = yamlMap['port'];
}
String token = "";
if (yamlMap.containsKey('authorization')) {
String s = yamlMap['authorization'];
if (s.isNotEmpty) {
if (s.startsWith("/")) {
debugPrint("Reading authorization token $s");
try {
token = File(s).readAsStringSync();
} on Exception catch(_) {
print("ERROR: Could not read authorization token file $token");
token = "";
}
} else {
token = s;
}
}
}
//debugPrint("authorization = $token");
bool use_tls = false;
if (yamlMap.containsKey('use-tls')) {
var value = yamlMap['use-tls'];
if (value is bool)
use_tls = value;
}
//debugPrint("Use TLS = $use_tls");
List<int> ca_cert = [];
String ca_path = KuksaConfig.defaultCaCertPath;
if (yamlMap.containsKey('ca-certificate')) {
ca_path = yamlMap['ca-certificate'];
}
try {
ca_cert = File(ca_path).readAsBytesSync();
} on Exception catch(_) {
print("ERROR: Could not read CA certificate file $ca_path");
ca_cert = [];
}
//debugPrint("CA cert = $ca_cert");
String tls_server_name = "";
if (yamlMap.containsKey('tls-server-name')) {
tls_server_name = yamlMap['tls_server_name'];
}
return KuksaConfig(
hostname: hostname,
port: port,
authorization: token,
use_tls: use_tls,
ca_certificate: ca_cert,
tls_server_name: tls_server_name
);
} on Exception catch(_) {
return KuksaConfig(
hostname: KuksaConfig.defaultHostname,
port: KuksaConfig.defaultPort,
authorization: "",
use_tls: false,
ca_certificate: [],
tls_server_name: ""
);
}
});
|