login method

Future<void> login([
  1. AuthClientLoginOptions? options
])

Implementation

Future<void> login([AuthClientLoginOptions? options]) async {
  key ??= Ed25519KeyIdentity.generate(null);

  // Create the URL of the IDP. (e.g. https://XXXX/#authorize)
  var payload = _createAuthPayload(options);

  var result = await authFunction(payload);

  var parsedResult = Uri.parse(result);

  if ((parsedResult.queryParameters["success"] is String &&
          parsedResult.queryParameters["success"] == "false") ||
      parsedResult.queryParameters["success"] == null) {
    if (parsedResult.queryParameters["json"] == null) {
      var data = parsedResult.queryParameters["data"];
      var decoded = cborDecode<Map>((data as String).toU8a());
      handleFailure(jsonEncode(decoded), options?.onError);
    } else {
      handleFailure(
          jsonEncode(parsedResult.queryParameters["json"]), options?.onError);
    }
  } else if (parsedResult.queryParameters["json"] == null) {
    var data = parsedResult.queryParameters["data"];
    var decoded = cborDecode<Map>((data as String).toU8a());
    var message = Map<String, dynamic>.from(decoded);
    var delegations = message["delegations"] as List;

    var delegationList = delegations.map((e) {
      return DelegationWithSignature()
        ..delegation = Delegation.fromMap(e["delegation"])
        ..signature = Uint8List.fromList(e["signature"]);
    }).toList();
    var userPublicKey = Uint8List.fromList(message["userPublicKey"]);
    var response = AuthResponseSuccess()
      ..delegations = delegationList
      ..userPublicKey = userPublicKey;

    handleSuccess(response, options?.onSuccess);
  } else {
    var data = parsedResult.queryParameters["json"];
    var message = Map<String, dynamic>.from(jsonDecode(data as String));
    var delegationChain = DelegationChain.fromJSON(message);
    chain = delegationChain;
    identity = DelegationIdentity.fromDelegation(key!, chain!);
    options?.onSuccess?.call();
  }
}