mirror of
https://github.com/google/nomulus.git
synced 2025-07-21 10:16:07 +02:00
Prevent removal of abuse contact phone number when updating registrar contact
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=153000833
This commit is contained in:
parent
f433242125
commit
478c7576c6
2 changed files with 44 additions and 6 deletions
|
@ -35,6 +35,7 @@ import google.registry.config.RegistryConfig.Config;
|
||||||
import google.registry.export.sheet.SyncRegistrarsSheetAction;
|
import google.registry.export.sheet.SyncRegistrarsSheetAction;
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.model.registrar.RegistrarContact;
|
import google.registry.model.registrar.RegistrarContact;
|
||||||
|
import google.registry.model.registrar.RegistrarContact.Type;
|
||||||
import google.registry.request.Action;
|
import google.registry.request.Action;
|
||||||
import google.registry.request.HttpException.BadRequestException;
|
import google.registry.request.HttpException.BadRequestException;
|
||||||
import google.registry.request.JsonActionRunner;
|
import google.registry.request.JsonActionRunner;
|
||||||
|
@ -268,12 +269,25 @@ public class RegistrarSettingsAction implements Runnable, JsonActionRunner.JsonA
|
||||||
throw new ContactRequirementException(t);
|
throw new ContactRequirementException(t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Ensure at least one tech contact has a phone number if one was present before.
|
ensurePhoneNumberNotRemovedForContactTypes(
|
||||||
if (any(oldContactsByType.get(RegistrarContact.Type.TECH), HAS_PHONE)
|
oldContactsByType, newContactsByType, Type.ABUSE, Type.TECH);
|
||||||
&& !any(newContactsByType.get(RegistrarContact.Type.TECH), HAS_PHONE)) {
|
}
|
||||||
throw new ContactRequirementException(String.format(
|
|
||||||
"At least one %s contact must have a phone number",
|
/**
|
||||||
RegistrarContact.Type.TECH.getDisplayName()));
|
* Ensure that for each given registrar type, a phone number is present after update, if there
|
||||||
|
* was one before.
|
||||||
|
*/
|
||||||
|
private static void ensurePhoneNumberNotRemovedForContactTypes(
|
||||||
|
Multimap<RegistrarContact.Type, RegistrarContact> oldContactsByType,
|
||||||
|
Multimap<RegistrarContact.Type, RegistrarContact> newContactsByType,
|
||||||
|
RegistrarContact.Type... types) {
|
||||||
|
for (RegistrarContact.Type type : types) {
|
||||||
|
if (any(oldContactsByType.get(type), HAS_PHONE)
|
||||||
|
&& !any(newContactsByType.get(type), HAS_PHONE)) {
|
||||||
|
throw new ContactRequirementException(
|
||||||
|
String.format(
|
||||||
|
"At least one %s contact must have a phone number", type.getDisplayName()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,4 +128,28 @@ public class ContactSettingsTest extends RegistrarSettingsActionTestCase {
|
||||||
assertThat(response).containsEntry("message", "At least one "
|
assertThat(response).containsEntry("message", "At least one "
|
||||||
+ RegistrarContact.Type.TECH.getDisplayName() + " contact must have a phone number");
|
+ RegistrarContact.Type.TECH.getDisplayName() + " contact must have a phone number");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPost_updateContacts_requireAbusePhone_error() throws Exception {
|
||||||
|
// First make the contact a abuse contact as well.
|
||||||
|
Registrar registrar = Registrar.loadByClientId(CLIENT_ID);
|
||||||
|
RegistrarContact rc = AppEngineRule.makeRegistrarContact2()
|
||||||
|
.asBuilder()
|
||||||
|
.setTypes(ImmutableSet.of(RegistrarContact.Type.ADMIN, RegistrarContact.Type.ABUSE))
|
||||||
|
.build();
|
||||||
|
// Lest we anger the timestamp inversion bug.
|
||||||
|
persistResource(registrar);
|
||||||
|
persistSimpleResource(rc);
|
||||||
|
|
||||||
|
// Now try to remove the phone number.
|
||||||
|
rc = rc.asBuilder().setPhoneNumber(null).build();
|
||||||
|
Map<String, Object> reqJson = registrar.toJsonMap();
|
||||||
|
reqJson.put("contacts", ImmutableList.of(rc.toJsonMap()));
|
||||||
|
Map<String, Object> response = action.handleJsonRequest(ImmutableMap.of(
|
||||||
|
"op", "update",
|
||||||
|
"args", reqJson));
|
||||||
|
assertThat(response).containsEntry("status", "ERROR");
|
||||||
|
assertThat(response).containsEntry("message", "At least one "
|
||||||
|
+ RegistrarContact.Type.ABUSE.getDisplayName() + " contact must have a phone number");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue