handleAuth method Null safety

Future<Response> handleAuth(
  1. Request request
)

Handles Authorizations. Requires a http Request (from the Shelf package). The user must use an email and a password, and if the response is ok it returns an user, a token and an exp fields.

Implementation

Future<Response> handleAuth(Request request) async {
  final token = request.headers[HttpHeaders.authorizationHeader];
  if (token == null) {
    return Response.forbidden(
      jsonEncode({
        'error': 'Basic token not found.',
      }),
    );
  }

  //@Noslin22 fixes to credentials bug:
  try {
    final credentials =
        String.fromCharCodes(base64Decode(token.replaceFirst('Basic ', '')))
            .split(':');
    final users = await config.db.getAll('users');
    final Map user = users.firstWhere(
      (element) =>
          element['email'] == credentials[0] &&
          element['password'] == credentials[1],
    );

    final index = user.keys.toList().indexOf('password');

    final keys = user.keys.toList();
    keys.removeAt(index);
    final values = user.values.toList();
    values.removeAt(index);
    final newUser = Map.fromIterables(keys, values);

    return Response.ok(
      jsonEncode({
        'user': newUser,
        'token': config.auth?.generateToken(user['id']),
        'exp': config.auth?.exp
      }),
      headers: {'content-type': 'application/json'},
    );
  } catch (e) {
    return Response.forbidden(jsonEncode({'error': 'Forbidden Access'}));
  }
}