login method

Future<({bool ok, String? serverVersion})> login(
  1. String accessKey
)

Logs in to the GatekeeperServer using the provided access key.

  • accessKey: The access key used to authenticate the login.

Returns a Future that completes with (ok: true, serverVersion: 'x.x.x'}) if login was successful, or (ok: false, serverVersion: null}) if it failed.

Implementation

Future<({bool ok, String? serverVersion})> login(String accessKey) async {
  _accessKey = accessKey;

  if (secure) {
    var ok = await _exchangeSessionKey();
    if (!ok) return (ok: false, serverVersion: null);
  }

  var sessionKey = chainAESEncryptor.sessionKey;

  var accessKeyHash = hashAccessKey(accessKey, sessionKey: sessionKey);
  var accessKeyBase64 = base64.encode(accessKeyHash);

  var response = await _sendCommand("login $accessKeyBase64");

  var logged = false;
  String? serverVersion;

  if (response != null && response.isNotEmpty) {
    logged = response.contains('true');
    if (logged) {
      _logged = true;
    }

    serverVersion = RegExp(r'\[(.*?)]').firstMatch(response)?.group(1);
  }

  if (verbose) {
    print(
        '-- LOGIN: $logged ${serverVersion != null ? '[$serverVersion]' : ''}');
  }

  return (ok: true, serverVersion: serverVersion);
}