authenticate method

  1. @override
Future<Response<AuthenticationResponse>> authenticate(
  1. LoginModel model
)
override

Implementation

@override
Future<Response<AuthenticationResponse>> authenticate(
    LoginModel model) async {
  try {
    var data = {
      "Username": model.username,
      "Password": model.password,
    };
    final http.Response loginResponse = await http.post(
      Uri.parse(config.loginUrl),
      headers: {"content-type": "application/json"},
      body: jsonEncode(data),
    );

    if (loginResponse.statusCode != 200)
      return Response.error(
        "Unexpected Error Has Occured!\n" +
            "STATUS CODE: ${loginResponse.statusCode}\n" +
            "${loginResponse.reasonPhrase}",
      );

    var response =
        AuthenticationResponse.fromJson(jsonDecode(loginResponse.body));

    if (!response.isSuccess) return Response.error(response.errorMessage);

    await _secureStorage.write(key: _tokenKey, value: response.token);

    await _secureStorage.write(
      key: _refreshTokenKey,
      value: response.refreshToken,
    );

    await _secureStorage.write(
      key: _tokenExpireDateKey,
      value: response.tokenExpireDate.millisecondsSinceEpoch.toString(),
    );

    await _secureStorage.write(
      key: _userInfoKey,
      value: jsonEncode(response.userInfo.asJson),
    );
    await _secureStorage.write(key: _usernameKey, value: model.username);
    await _secureStorage.write(key: _passwordKey, value: model.password);

    return Response.success(response);
  } catch (e) {
    return Response.error(
      "Unexpected error has occured while authetication ... \n\n" +
          e.toString(),
    );
  }
}