handleAuth method Null safety
- 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'}));
}
}