login method
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);
}