updateUploader method

Future<Response> updateUploader(
  1. Request req,
  2. String name,
  3. String email
)

Implementation

Future<shelf.Response> updateUploader(
    shelf.Request req, String name, String email) async {
  email = Uri.decodeComponent(email);
  final operatorToken = await _getBearToken(req);
  final operatorEmail = await _resolveUploaderIdentity(operatorToken);
  var package = await metaRepo.query(name);
  if (package?.uploaders?.contains(operatorEmail) == false) {
    return _bad('$operatorEmail has no permission!',
        status: HttpStatus.forbidden);
  }
  if (package?.uploaders?.contains(email) == false) {
    return _bad('$email not exists in uploader!');
  }
  final body = await req.readAsString();
  String? newEmail;
  if (body.trim().startsWith('{')) {
    final json = jsonDecode(body) as Map<String, dynamic>;
    newEmail = json['email']?.toString();
  } else {
    newEmail = Uri.splitQueryString(body)['email'];
  }
  if (newEmail == null || newEmail.trim().isEmpty) {
    return _bad('not found email information!');
  }
  if (package?.uploaders?.contains(newEmail) == true) {
    return _bad('$newEmail alreay exists!');
  }
  await metaRepo.updateUploader(name, email, newEmail);
  return _success('uploader updated!');
}