summaryrefslogtreecommitdiffstats
path: root/lib/config.dart
blob: b8a3d052833a0c2c0dfa49538f57db7b8da7d2ac (plain)
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
109
// 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/cluster-dashboard.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: "");
  }
});