updateUploader method
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!');
}