Refactor authInfo validation

1) Don't do ofy().load() inside a model class (in DomainAuthInfo)
2) Move the one use of verify into the one caller in ResourceFlowUtils
3) Hosts don't support authInfo, so remove useless code

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137984809
This commit is contained in:
cgoldfeder 2016-11-02 13:24:26 -07:00 committed by Ben McIlwain
parent f95f27ed72
commit 2dd703ef3a
28 changed files with 102 additions and 146 deletions

View file

@ -14,52 +14,15 @@
package google.registry.model.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import static google.registry.model.ofy.ObjectifyService.ofy;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.annotation.Embed;
import google.registry.model.EppResource;
import google.registry.model.contact.ContactResource;
import google.registry.model.eppcommon.AuthInfo;
/** A version of authInfo specifically for domains. */
@Embed
public class DomainAuthInfo extends AuthInfo {
public static DomainAuthInfo create(PasswordAuth pw) {
DomainAuthInfo instance = new DomainAuthInfo();
instance.pw = pw;
return instance;
}
@Override
public void verifyAuthorizedFor(EppResource eppResource) throws BadAuthInfoException {
DomainBase domain = (DomainBase) eppResource;
checkNotNull(getPw());
if (getRepoId() != null) {
// Make sure the repo id matches one of the contacts on the domain.
Key<ContactResource> foundContact = null;
for (Key<ContactResource> contact : domain.getReferencedContacts()) {
String contactRepoId = contact.getName();
if (getRepoId().equals(contactRepoId)) {
foundContact = contact;
break;
}
}
if (foundContact == null) {
throw new BadAuthInfoException();
}
// Check if the password provided matches the password on the referenced contact.
if (!ofy().load().key(foundContact).now().getAuthInfo().getPw().getValue().equals(
getPw().getValue())) {
throw new BadAuthInfoException();
}
} else {
// If not repository ID is specified, then check the password against the domain's password.
if (!domain.getAuthInfo().getPw().getValue().equals(getPw().getValue())) {
throw new BadAuthInfoException();
}
}
}
}