mirror of
https://github.com/google/nomulus.git
synced 2025-04-30 03:57:51 +02:00
Add a task to compile javadoc across all packages (#597)
Also fixes various issues that prevent javadoc compliation.
This commit is contained in:
parent
275b4b1cee
commit
02e43ab134
71 changed files with 236 additions and 249 deletions
23
build.gradle
23
build.gradle
|
@ -197,6 +197,10 @@ task runPresubmits(type: Exec) {
|
||||||
args('config/presubmits.py')
|
args('config/presubmits.py')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def javadocSource = []
|
||||||
|
def javadocClasspath = []
|
||||||
|
def javadocDependentTasks = []
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
// Skip no-op project
|
// Skip no-op project
|
||||||
if (project.name == 'services') return
|
if (project.name == 'services') return
|
||||||
|
@ -317,6 +321,10 @@ subprojects {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
javadocSource << project.sourceSets.main.allJava
|
||||||
|
javadocClasspath << project.sourceSets.main.compileClasspath
|
||||||
|
javadocDependentTasks << project.tasks.compileJava
|
||||||
}
|
}
|
||||||
|
|
||||||
// If "-P verboseTestOutput=true" is passed in, configure all subprojects to dump all of their
|
// If "-P verboseTestOutput=true" is passed in, configure all subprojects to dump all of their
|
||||||
|
@ -445,3 +453,18 @@ task javaIncrementalFormatApply {
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.build.dependsOn(tasks.javaIncrementalFormatCheck)
|
tasks.build.dependsOn(tasks.javaIncrementalFormatCheck)
|
||||||
|
|
||||||
|
task javadoc(type: Javadoc) {
|
||||||
|
source javadocSource
|
||||||
|
classpath = files(javadocClasspath)
|
||||||
|
destinationDir = file("${buildDir}/docs/javadoc")
|
||||||
|
// In a lot of places we don't write @return so suppress warnings about that.
|
||||||
|
options.addBooleanOption('Xdoclint:all,-missing', true)
|
||||||
|
options.addBooleanOption("-allow-script-in-comments",true)
|
||||||
|
options.tags = ["type:a:Generic Type",
|
||||||
|
"error:a:Expected Error"]
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.build.dependsOn(tasks.javadoc)
|
||||||
|
|
||||||
|
javadocDependentTasks.each { tasks.javadoc.shouldRunAfter(it) }
|
||||||
|
|
|
@ -21,7 +21,6 @@ import org.joda.time.ReadableDuration;
|
||||||
* An object which accepts requests to put the current thread to sleep.
|
* An object which accepts requests to put the current thread to sleep.
|
||||||
*
|
*
|
||||||
* @see SystemSleeper
|
* @see SystemSleeper
|
||||||
* @see google.registry.testing.FakeSleeper
|
|
||||||
*/
|
*/
|
||||||
@ThreadSafe
|
@ThreadSafe
|
||||||
public interface Sleeper {
|
public interface Sleeper {
|
||||||
|
|
|
@ -442,10 +442,8 @@ public class BigqueryConnection implements AutoCloseable {
|
||||||
* Returns the result of calling queryToLocalTable, but synchronously to avoid spawning new
|
* Returns the result of calling queryToLocalTable, but synchronously to avoid spawning new
|
||||||
* background threads, which App Engine doesn't support.
|
* background threads, which App Engine doesn't support.
|
||||||
*
|
*
|
||||||
* @see <a href="https://cloud.google.com/appengine/docs/standard/java/runtime#Threads">
|
* @see <a href="https://cloud.google.com/appengine/docs/standard/java/runtime#Threads">App Engine
|
||||||
* App Engine Runtime</a>
|
* Runtime</a>
|
||||||
*
|
|
||||||
* <p>Returns the results of the query in an ImmutableTable on success.
|
|
||||||
*/
|
*/
|
||||||
public ImmutableTable<Integer, TableFieldSchema, Object> queryToLocalTableSync(String querySql) {
|
public ImmutableTable<Integer, TableFieldSchema, Object> queryToLocalTableSync(String querySql) {
|
||||||
Job job = new Job()
|
Job job = new Job()
|
||||||
|
@ -576,8 +574,6 @@ public class BigqueryConnection implements AutoCloseable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launch a job, wait for it to complete, but <i>do not</i> check for errors.
|
* Launch a job, wait for it to complete, but <i>do not</i> check for errors.
|
||||||
*
|
|
||||||
* @throws BigqueryJobFailureException
|
|
||||||
*/
|
*/
|
||||||
public Job runJob(Job job, @Nullable AbstractInputStreamContent data) {
|
public Job runJob(Job job, @Nullable AbstractInputStreamContent data) {
|
||||||
return checkJob(waitForJob(launchJob(job, data)));
|
return checkJob(waitForJob(launchJob(job, data)));
|
||||||
|
|
|
@ -84,7 +84,7 @@ public class DnsMessageTransport {
|
||||||
* @param query a message to send
|
* @param query a message to send
|
||||||
* @return the response received from the server
|
* @return the response received from the server
|
||||||
* @throws IOException if the Socket input/output streams throws one
|
* @throws IOException if the Socket input/output streams throws one
|
||||||
* @throws IllegalArgumentException if the query is too large to be sent (> 65535 bytes)
|
* @throws IllegalArgumentException if the query is too large to be sent (> 65535 bytes)
|
||||||
*/
|
*/
|
||||||
public Message send(Message query) throws IOException {
|
public Message send(Message query) throws IOException {
|
||||||
try (Socket socket = factory.createSocket(InetAddress.getByName(updateHost), DNS_PORT)) {
|
try (Socket socket = factory.createSocket(InetAddress.getByName(updateHost), DNS_PORT)) {
|
||||||
|
|
|
@ -42,8 +42,8 @@ import javax.xml.stream.events.XMLEvent;
|
||||||
/**
|
/**
|
||||||
* Sanitizes sensitive data in incoming/outgoing EPP XML messages.
|
* Sanitizes sensitive data in incoming/outgoing EPP XML messages.
|
||||||
*
|
*
|
||||||
* <p>Current implementation masks user credentials (text following <pw> and <newPW> tags) as
|
* <p>Current implementation masks user credentials (text following <pw> and <newPW>
|
||||||
* follows:
|
* tags) as follows:
|
||||||
*
|
*
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>A control character (in ranges [0 - 1F] and [7F - 9F]) is replaced with 'C'.
|
* <li>A control character (in ranges [0 - 1F] and [7F - 9F]) is replaced with 'C'.
|
||||||
|
|
|
@ -75,7 +75,7 @@ public class DomainCheckFlowCustomLogic extends BaseFlowCustomLogic {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The time to perform the domain check as of. This defaults to the current time, but can be
|
* The time to perform the domain check as of. This defaults to the current time, but can be
|
||||||
* overridden in v>=0.12 of the fee extension.
|
* overridden in v>=0.12 of the fee extension.
|
||||||
*/
|
*/
|
||||||
public abstract DateTime asOfDate();
|
public abstract DateTime asOfDate();
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ public class DomainCheckFlowCustomLogic extends BaseFlowCustomLogic {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The time to perform the domain check as of. This defaults to the current time, but can be
|
* The time to perform the domain check as of. This defaults to the current time, but can be
|
||||||
* overridden in v>=0.12 of the fee extension.
|
* overridden in v>=0.12 of the fee extension.
|
||||||
*/
|
*/
|
||||||
public abstract DateTime asOfDate();
|
public abstract DateTime asOfDate();
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,8 @@ import java.util.stream.Collectors;
|
||||||
public class OteStats {
|
public class OteStats {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the statistics about the OT&E actions that have been taken by a particular registrar.
|
* Returns the statistics about the OT&E actions that have been taken by a particular
|
||||||
|
* registrar.
|
||||||
*/
|
*/
|
||||||
public static OteStats getFromRegistrar(String registrarName) {
|
public static OteStats getFromRegistrar(String registrarName) {
|
||||||
return new OteStats().recordRegistrarHistory(registrarName);
|
return new OteStats().recordRegistrarHistory(registrarName);
|
||||||
|
|
|
@ -30,7 +30,7 @@ public class UpdateAutoTimestamp extends ImmutableObject {
|
||||||
|
|
||||||
DateTime timestamp;
|
DateTime timestamp;
|
||||||
|
|
||||||
/** Returns the timestamp, or {@link START_OF_TIME} if it's null. */
|
/** Returns the timestamp, or {@code START_OF_TIME} if it's null. */
|
||||||
public DateTime getTimestamp() {
|
public DateTime getTimestamp() {
|
||||||
return Optional.ofNullable(timestamp).orElse(START_OF_TIME);
|
return Optional.ofNullable(timestamp).orElse(START_OF_TIME);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||||
/** A collection of {@link ContactResource} commands. */
|
/** A collection of {@link ContactResource} commands. */
|
||||||
public class ContactCommand {
|
public class ContactCommand {
|
||||||
|
|
||||||
/** The fields on "chgType" from {@link "http://tools.ietf.org/html/rfc5733"}. */
|
/** The fields on "chgType" from <a href="http://tools.ietf.org/html/rfc5733">RFC5733</a>. */
|
||||||
@XmlTransient
|
@XmlTransient
|
||||||
public static class ContactCreateOrChange extends ImmutableObject
|
public static class ContactCreateOrChange extends ImmutableObject
|
||||||
implements ResourceCreateOrChange<ContactResource.Builder> {
|
implements ResourceCreateOrChange<ContactResource.Builder> {
|
||||||
|
@ -111,8 +111,8 @@ public class ContactCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A create command for a {@link ContactResource}, mapping "createType" from
|
* A create command for a {@link ContactResource}, mapping "createType" from <a
|
||||||
* {@link "http://tools.ietf.org/html/rfc5733"}.
|
* href="http://tools.ietf.org/html/rfc5733">RFC5733</a>}.
|
||||||
*/
|
*/
|
||||||
@XmlType(propOrder = {"contactId", "postalInfo", "voice", "fax", "email", "authInfo", "disclose"})
|
@XmlType(propOrder = {"contactId", "postalInfo", "voice", "fax", "email", "authInfo", "disclose"})
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
|
|
|
@ -27,7 +27,7 @@ import javax.persistence.Embedded;
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.xml.bind.annotation.XmlType;
|
||||||
|
|
||||||
/** The "discloseType" from {@link "http://tools.ietf.org/html/rfc5733"}. */
|
/** The "discloseType" from <a href="http://tools.ietf.org/html/rfc5733">RFC5733</a>. */
|
||||||
@Embed
|
@Embed
|
||||||
@Embeddable
|
@Embeddable
|
||||||
@XmlType(propOrder = {"name", "org", "addr", "voice", "fax", "email"})
|
@XmlType(propOrder = {"name", "org", "addr", "voice", "fax", "email"})
|
||||||
|
@ -76,7 +76,7 @@ public class Disclose extends ImmutableObject {
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The "intLocType" from {@link "http://tools.ietf.org/html/rfc5733"}. */
|
/** The "intLocType" from <a href="http://tools.ietf.org/html/rfc5733">RFC5733</a>. */
|
||||||
@Embed
|
@Embed
|
||||||
public static class PostalInfoChoice extends ImmutableObject {
|
public static class PostalInfoChoice extends ImmutableObject {
|
||||||
@XmlAttribute
|
@XmlAttribute
|
||||||
|
|
|
@ -32,8 +32,8 @@ import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
|
||||||
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of both "postalInfoType" and "chgPostalInfoType" from {@link
|
* Implementation of both "postalInfoType" and "chgPostalInfoType" from <a href=
|
||||||
* "http://tools.ietf.org/html/rfc5733"}.
|
* "http://tools.ietf.org/html/rfc5733">RFC5733</a>.
|
||||||
*/
|
*/
|
||||||
@Embed
|
@Embed
|
||||||
@Embeddable
|
@Embeddable
|
||||||
|
|
|
@ -72,10 +72,10 @@ public class DomainCommand {
|
||||||
T cloneAndLinkReferences(DateTime now) throws InvalidReferencesException;
|
T cloneAndLinkReferences(DateTime now) throws InvalidReferencesException;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The fields on "chgType" from {@link "http://tools.ietf.org/html/rfc5731"}. */
|
/** The fields on "chgType" from <a href="http://tools.ietf.org/html/rfc5731">RFC5731</a>. */
|
||||||
@XmlTransient
|
@XmlTransient
|
||||||
public static class DomainCreateOrChange<B extends DomainBase.Builder>
|
public static class DomainCreateOrChange<B extends DomainBase.Builder> extends ImmutableObject
|
||||||
extends ImmutableObject implements ResourceCreateOrChange<B> {
|
implements ResourceCreateOrChange<B> {
|
||||||
|
|
||||||
/** The contactId of the registrant who registered this domain. */
|
/** The contactId of the registrant who registered this domain. */
|
||||||
@XmlElement(name = "registrant")
|
@XmlElement(name = "registrant")
|
||||||
|
@ -103,19 +103,20 @@ public class DomainCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A create command for a {@link DomainBase}, mapping "createType" from
|
* A create command for a {@link DomainBase}, mapping "createType" from <a
|
||||||
* {@link "http://tools.ietf.org/html/rfc5731"}.
|
* href="http://tools.ietf.org/html/rfc5731">RFC5731</a>.
|
||||||
*/
|
*/
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
@XmlType(propOrder = {
|
@XmlType(
|
||||||
|
propOrder = {
|
||||||
"fullyQualifiedDomainName",
|
"fullyQualifiedDomainName",
|
||||||
"period",
|
"period",
|
||||||
"nameserverFullyQualifiedHostNames",
|
"nameserverFullyQualifiedHostNames",
|
||||||
"registrantContactId",
|
"registrantContactId",
|
||||||
"foreignKeyedDesignatedContacts",
|
"foreignKeyedDesignatedContacts",
|
||||||
"authInfo"})
|
"authInfo"
|
||||||
public static class Create
|
})
|
||||||
extends DomainCreateOrChange<DomainBase.Builder>
|
public static class Create extends DomainCreateOrChange<DomainBase.Builder>
|
||||||
implements CreateOrUpdate<Create> {
|
implements CreateOrUpdate<Create> {
|
||||||
|
|
||||||
/** Fully qualified domain name, which serves as a unique identifier for this domain. */
|
/** Fully qualified domain name, which serves as a unique identifier for this domain. */
|
||||||
|
|
|
@ -20,7 +20,7 @@ import javax.xml.bind.annotation.XmlAttribute;
|
||||||
import javax.xml.bind.annotation.XmlEnumValue;
|
import javax.xml.bind.annotation.XmlEnumValue;
|
||||||
import javax.xml.bind.annotation.XmlValue;
|
import javax.xml.bind.annotation.XmlValue;
|
||||||
|
|
||||||
/** The "periodType" from {@link "http://tools.ietf.org/html/rfc5731"}. */
|
/** The "periodType" from <a href="http://tools.ietf.org/html/rfc5731">RFC5731</a>. */
|
||||||
@Embed
|
@Embed
|
||||||
@javax.persistence.Embeddable
|
@javax.persistence.Embeddable
|
||||||
public class Period extends ImmutableObject {
|
public class Period extends ImmutableObject {
|
||||||
|
|
|
@ -29,11 +29,13 @@ import org.joda.time.DateTime;
|
||||||
* An individual price check item in version 0.12 of the fee extension on domain check commands.
|
* An individual price check item in version 0.12 of the fee extension on domain check commands.
|
||||||
* Items look like:
|
* Items look like:
|
||||||
*
|
*
|
||||||
|
* <pre>{@code
|
||||||
* <fee:command name="renew" phase="sunrise" subphase="hello">
|
* <fee:command name="renew" phase="sunrise" subphase="hello">
|
||||||
* <fee:period unit="y">1</fee:period>
|
* <fee:period unit="y">1</fee:period>
|
||||||
* <fee:class>premium</fee:class>
|
* <fee:class>premium</fee:class>
|
||||||
* <fee:date>2017-05-17T13:22:21.0Z</fee:date>
|
* <fee:date>2017-05-17T13:22:21.0Z</fee:date>
|
||||||
* </fee:command>
|
* </fee:command>
|
||||||
|
* }</pre>
|
||||||
*
|
*
|
||||||
* In a change from previous versions of the extension, items do not contain domain names; instead,
|
* In a change from previous versions of the extension, items do not contain domain names; instead,
|
||||||
* the names from the non-extension check element are used.
|
* the names from the non-extension check element are used.
|
||||||
|
|
|
@ -95,9 +95,6 @@ public class LaunchNotice extends ImmutableObject {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate the checksum of the notice against the domain label.
|
* Validate the checksum of the notice against the domain label.
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException
|
|
||||||
* @throws InvalidChecksumException
|
|
||||||
*/
|
*/
|
||||||
public void validate(String domainLabel) throws InvalidChecksumException {
|
public void validate(String domainLabel) throws InvalidChecksumException {
|
||||||
// According to http://tools.ietf.org/html/draft-lozano-tmch-func-spec-08#section-6.3, a TCNID
|
// According to http://tools.ietf.org/html/draft-lozano-tmch-func-spec-08#section-6.3, a TCNID
|
||||||
|
|
|
@ -49,9 +49,9 @@ public enum GracePeriodStatus implements EppEnum {
|
||||||
AUTO_RENEW("autoRenewPeriod"),
|
AUTO_RENEW("autoRenewPeriod"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This status value is used to describe a domain for which a <delete> command has been received,
|
* This status value is used to describe a domain for which a <delete> command has been
|
||||||
* but the domain has not yet been purged because an opportunity exists to restore the domain and
|
* received, but the domain has not yet been purged because an opportunity exists to restore the
|
||||||
* abort the deletion process.
|
* domain and abort the deletion process.
|
||||||
*/
|
*/
|
||||||
REDEMPTION("redemptionPeriod"),
|
REDEMPTION("redemptionPeriod"),
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||||
* An allocation token extension that may be present on EPP domain commands.
|
* An allocation token extension that may be present on EPP domain commands.
|
||||||
*
|
*
|
||||||
* @see <a href="https://tools.ietf.org/html/draft-ietf-regext-allocation-token-04">the IETF
|
* @see <a href="https://tools.ietf.org/html/draft-ietf-regext-allocation-token-04">the IETF
|
||||||
* draft</a> for full details.
|
* draft</a>
|
||||||
*/
|
*/
|
||||||
@XmlRootElement(name = "allocationToken")
|
@XmlRootElement(name = "allocationToken")
|
||||||
public class AllocationTokenExtension extends ImmutableObject implements CommandExtension {
|
public class AllocationTokenExtension extends ImmutableObject implements CommandExtension {
|
||||||
|
|
|
@ -44,8 +44,9 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||||
/**
|
/**
|
||||||
* Container for generic street address.
|
* Container for generic street address.
|
||||||
*
|
*
|
||||||
* <p>This is the "addrType" type from {@link "http://tools.ietf.org/html/rfc5733"}. It also matches
|
* <p>This is the "addrType" type from <a href="http://tools.ietf.org/html/rfc5733">RFC5733</a>. It
|
||||||
* the "addrType" type from {@link "http://tools.ietf.org/html/draft-lozano-tmch-smd"}.
|
* also matches the "addrType" type from <a
|
||||||
|
* href="http://tools.ietf.org/html/draft-lozano-tmch-smd">Mark and Signed Mark Objects Mapping</a>.
|
||||||
*
|
*
|
||||||
* @see google.registry.model.contact.ContactAddress
|
* @see google.registry.model.contact.ContactAddress
|
||||||
* @see google.registry.model.mark.MarkAddress
|
* @see google.registry.model.mark.MarkAddress
|
||||||
|
|
|
@ -29,8 +29,9 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||||
/**
|
/**
|
||||||
* Container for generic E164 phone number.
|
* Container for generic E164 phone number.
|
||||||
*
|
*
|
||||||
* <p>This is the "e164" type from {@link "http://tools.ietf.org/html/rfc5733"}. It also matches the
|
* <p>This is the "e164" type from <a href="http://tools.ietf.org/html/rfc5733">RFC5733</a>. It also
|
||||||
* "e164Type" type from {@link "http://tools.ietf.org/html/draft-lozano-tmch-smd"}.
|
* matches the "e164Type" type from <a href="http://tools.ietf.org/html/draft-lozano-tmch-smd">Mark
|
||||||
|
* and Signed Mark Objects Mapping</a>
|
||||||
*
|
*
|
||||||
* <blockquote>
|
* <blockquote>
|
||||||
*
|
*
|
||||||
|
|
|
@ -24,7 +24,7 @@ import javax.xml.bind.annotation.XmlElementWrapper;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A greeting, defined in {@link "http://tools.ietf.org/html/rfc5730"}.
|
* A greeting, defined in <a href="http://tools.ietf.org/html/rfc5730">RFC5730</a>.
|
||||||
*
|
*
|
||||||
* <p>It would be nice to make this a singleton, but we need the {@link #svDate} field to stay
|
* <p>It would be nice to make this a singleton, but we need the {@link #svDate} field to stay
|
||||||
* current.
|
* current.
|
||||||
|
|
|
@ -32,7 +32,7 @@ import javax.xml.bind.annotation.XmlType;
|
||||||
/** A collection of {@link HostResource} commands. */
|
/** A collection of {@link HostResource} commands. */
|
||||||
public class HostCommand {
|
public class HostCommand {
|
||||||
|
|
||||||
/** The fields on "chgType" from {@link "http://tools.ietf.org/html/rfc5732"}. */
|
/** The fields on "chgType" from <a href="http://tools.ietf.org/html/rfc5732">RFC5732</a>. */
|
||||||
@XmlTransient
|
@XmlTransient
|
||||||
abstract static class HostCreateOrChange extends AbstractSingleResourceCommand
|
abstract static class HostCreateOrChange extends AbstractSingleResourceCommand
|
||||||
implements ResourceCreateOrChange<HostResource.Builder> {
|
implements ResourceCreateOrChange<HostResource.Builder> {
|
||||||
|
@ -42,13 +42,13 @@ public class HostCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A create command for a {@link HostResource}, mapping "createType" from
|
* A create command for a {@link HostResource}, mapping "createType" from <a
|
||||||
* {@link "http://tools.ietf.org/html/rfc5732"}.
|
* href="http://tools.ietf.org/html/rfc5732">RFC5732</a>.
|
||||||
*/
|
*/
|
||||||
@XmlType(propOrder = {"targetId", "inetAddresses"})
|
@XmlType(propOrder = {"targetId", "inetAddresses"})
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
public static class Create
|
public static class Create extends HostCreateOrChange
|
||||||
extends HostCreateOrChange implements ResourceCreateOrChange<HostResource.Builder> {
|
implements ResourceCreateOrChange<HostResource.Builder> {
|
||||||
/** IP Addresses for this host. Can be null if this is an external host. */
|
/** IP Addresses for this host. Can be null if this is an external host. */
|
||||||
@XmlElement(name = "addr")
|
@XmlElement(name = "addr")
|
||||||
Set<InetAddress> inetAddresses;
|
Set<InetAddress> inetAddresses;
|
||||||
|
|
|
@ -62,7 +62,7 @@ import org.joda.time.DateTime;
|
||||||
* <p>Poll messages are identified externally by registrars using the format defined in {@link
|
* <p>Poll messages are identified externally by registrars using the format defined in {@link
|
||||||
* PollMessageExternalKeyConverter}.
|
* PollMessageExternalKeyConverter}.
|
||||||
*
|
*
|
||||||
* @see <a href="https://tools.ietf.org/html/rfc5730#section-2.9.2.3">RFC5730 - EPP - <poll>
|
* @see <a href="https://tools.ietf.org/html/rfc5730#section-2.9.2.3">RFC5730 - EPP - <poll>
|
||||||
* Command</a>
|
* Command</a>
|
||||||
*/
|
*/
|
||||||
@Entity
|
@Entity
|
||||||
|
|
|
@ -158,8 +158,8 @@ public final class ReservedList
|
||||||
/**
|
/**
|
||||||
* Gets a ReservedList by name using the caching layer.
|
* Gets a ReservedList by name using the caching layer.
|
||||||
*
|
*
|
||||||
* @return An Optional<ReservedList> that has a value if a reserved list exists by the given name,
|
* @return An Optional<ReservedList> that has a value if a reserved list exists by the given
|
||||||
* or absent if not.
|
* name, or absent if not.
|
||||||
* @throws UncheckedExecutionException if some other error occurs while trying to load the
|
* @throws UncheckedExecutionException if some other error occurs while trying to load the
|
||||||
* ReservedList from the cache or Datastore.
|
* ReservedList from the cache or Datastore.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -22,8 +22,8 @@ public final class IcannReportingTypes {
|
||||||
* Represents the set of possible ICANN Monthly Registry Functions Activity Report fields.
|
* Represents the set of possible ICANN Monthly Registry Functions Activity Report fields.
|
||||||
*
|
*
|
||||||
* <p>Refer to the <a
|
* <p>Refer to the <a
|
||||||
* href="https://newgtlds.icann.org/sites/default/files/agreements/agreement-approved-09jan14-en.htm#_DV_M278>ICANN
|
* href="https://newgtlds.icann.org/sites/default/files/agreements/agreement-approved-09jan14-en.htm#_DV_M278">
|
||||||
* registry agreement Specification 3 Section 2</a> for details.
|
* ICANN registry agreement Specification 3 Section 2</a> for details.
|
||||||
*/
|
*/
|
||||||
public enum ActivityReportField {
|
public enum ActivityReportField {
|
||||||
DOMAIN_CHECK("srs-dom-check"),
|
DOMAIN_CHECK("srs-dom-check"),
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
package google.registry.persistence.converter;
|
package google.registry.persistence.converter;
|
||||||
|
|
||||||
import avro.shaded.com.google.common.collect.Maps;
|
import avro.shaded.com.google.common.collect.Maps;
|
||||||
import google.registry.model.common.TimedTransitionProperty;
|
|
||||||
import google.registry.model.registry.Registry.BillingCostTransition;
|
import google.registry.model.registry.Registry.BillingCostTransition;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.persistence.Converter;
|
import javax.persistence.Converter;
|
||||||
|
@ -23,8 +22,8 @@ import org.joda.money.Money;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JPA converter for storing/retrieving {@link TimedTransitionProperty <Money, BillingCostTransition
|
* JPA converter for storing/retrieving {@code TimedTransitionProperty<Money,BillingCostTransition>}
|
||||||
* >} objects.
|
* objects.
|
||||||
*/
|
*/
|
||||||
@Converter(autoApply = true)
|
@Converter(autoApply = true)
|
||||||
public class BillingCostTransitionConverter
|
public class BillingCostTransitionConverter
|
||||||
|
|
|
@ -15,12 +15,11 @@
|
||||||
package google.registry.persistence.converter;
|
package google.registry.persistence.converter;
|
||||||
|
|
||||||
import google.registry.util.CidrAddressBlock;
|
import google.registry.util.CidrAddressBlock;
|
||||||
import java.util.List;
|
|
||||||
import javax.persistence.AttributeConverter;
|
import javax.persistence.AttributeConverter;
|
||||||
import javax.persistence.Converter;
|
import javax.persistence.Converter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JPA {@link AttributeConverter} for storing/retrieving {@link List<CidrAddressBlock>} objects.
|
* JPA {@link AttributeConverter} for storing/retrieving {@code List<CidrAddressBlock>} objects.
|
||||||
* TODO(shicong): Investigate if we can have one converter for any List type
|
* TODO(shicong): Investigate if we can have one converter for any List type
|
||||||
*/
|
*/
|
||||||
@Converter(autoApply = true)
|
@Converter(autoApply = true)
|
||||||
|
|
|
@ -21,7 +21,7 @@ import java.util.Map;
|
||||||
import javax.persistence.Converter;
|
import javax.persistence.Converter;
|
||||||
import org.joda.money.CurrencyUnit;
|
import org.joda.money.CurrencyUnit;
|
||||||
|
|
||||||
/** JPA converter for storing/retrieving {@link Map <CurrencyUnit, BillingAccountEntry>} objects. */
|
/** JPA converter for storing/retrieving {@code Map<CurrencyUnit, BillingAccountEntry>} objects. */
|
||||||
@Converter(autoApply = true)
|
@Converter(autoApply = true)
|
||||||
public class CurrencyToBillingConverter
|
public class CurrencyToBillingConverter
|
||||||
extends StringMapConverterBase<CurrencyUnit, BillingAccountEntry> {
|
extends StringMapConverterBase<CurrencyUnit, BillingAccountEntry> {
|
||||||
|
|
|
@ -16,11 +16,10 @@ package google.registry.persistence.converter;
|
||||||
|
|
||||||
import google.registry.model.contact.Disclose.PostalInfoChoice;
|
import google.registry.model.contact.Disclose.PostalInfoChoice;
|
||||||
import google.registry.model.contact.PostalInfo;
|
import google.registry.model.contact.PostalInfo;
|
||||||
import java.util.List;
|
|
||||||
import javax.persistence.AttributeConverter;
|
import javax.persistence.AttributeConverter;
|
||||||
import javax.persistence.Converter;
|
import javax.persistence.Converter;
|
||||||
|
|
||||||
/** JPA {@link AttributeConverter} for storing/retrieving {@link List < PostalInfoChoice >}. */
|
/** JPA {@link AttributeConverter} for storing/retrieving {@code List<PostalInfoChoice>}. */
|
||||||
@Converter(autoApply = true)
|
@Converter(autoApply = true)
|
||||||
public class PostalInfoChoiceListConverter extends StringListConverterBase<PostalInfoChoice> {
|
public class PostalInfoChoiceListConverter extends StringListConverterBase<PostalInfoChoice> {
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,10 @@
|
||||||
package google.registry.persistence.converter;
|
package google.registry.persistence.converter;
|
||||||
|
|
||||||
import google.registry.model.registrar.RegistrarContact.Type;
|
import google.registry.model.registrar.RegistrarContact.Type;
|
||||||
import java.util.Set;
|
|
||||||
import javax.persistence.AttributeConverter;
|
import javax.persistence.AttributeConverter;
|
||||||
import javax.persistence.Converter;
|
import javax.persistence.Converter;
|
||||||
|
|
||||||
/** JPA {@link AttributeConverter} for storing/retrieving {@link Set<Type>}. */
|
/** JPA {@link AttributeConverter} for storing/retrieving {@code Set<Type>}. */
|
||||||
@Converter(autoApply = true)
|
@Converter(autoApply = true)
|
||||||
public class RegistrarPocSetConverter extends StringSetConverterBase<Type> {
|
public class RegistrarPocSetConverter extends StringSetConverterBase<Type> {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -15,11 +15,10 @@
|
||||||
package google.registry.persistence.converter;
|
package google.registry.persistence.converter;
|
||||||
|
|
||||||
import google.registry.model.eppcommon.StatusValue;
|
import google.registry.model.eppcommon.StatusValue;
|
||||||
import java.util.Set;
|
|
||||||
import javax.persistence.AttributeConverter;
|
import javax.persistence.AttributeConverter;
|
||||||
import javax.persistence.Converter;
|
import javax.persistence.Converter;
|
||||||
|
|
||||||
/** JPA {@link AttributeConverter} for storing/retrieving {@link Set<StatusValue>}. */
|
/** JPA {@link AttributeConverter} for storing/retrieving {@code Set<StatusValue>}. */
|
||||||
@Converter(autoApply = true)
|
@Converter(autoApply = true)
|
||||||
public class StatusValueSetConverter extends StringSetConverterBase<StatusValue> {
|
public class StatusValueSetConverter extends StringSetConverterBase<StatusValue> {
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
|
||||||
/**
|
/**
|
||||||
* The {@link JavaTypeDescriptor} and {@link SqlTypeDescriptor} for {@link StringCollection}.
|
* The {@link JavaTypeDescriptor} and {@link SqlTypeDescriptor} for {@link StringCollection}.
|
||||||
*
|
*
|
||||||
* <p>A {@link StringCollection} object is a simple wrapper for a {@link Collection<String>} which
|
* <p>A {@link StringCollection} object is a simple wrapper for a {@code Collection<String>} which
|
||||||
* can be stored as a string array in the database. The {@link JavaTypeDescriptor} and {@link
|
* can be stored as a string array in the database. The {@link JavaTypeDescriptor} and {@link
|
||||||
* SqlTypeDescriptor} is used by JPA/Hibernate to map between the collection and {@link Array} which
|
* SqlTypeDescriptor} is used by JPA/Hibernate to map between the collection and {@link Array} which
|
||||||
* is the actual type that JDBC uses to read from and write to the database.
|
* is the actual type that JDBC uses to read from and write to the database.
|
||||||
|
|
|
@ -14,11 +14,10 @@
|
||||||
|
|
||||||
package google.registry.persistence.converter;
|
package google.registry.persistence.converter;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import javax.persistence.AttributeConverter;
|
import javax.persistence.AttributeConverter;
|
||||||
import javax.persistence.Converter;
|
import javax.persistence.Converter;
|
||||||
|
|
||||||
/** JPA {@link AttributeConverter} for storing/retrieving {@link List<String>}. */
|
/** JPA {@link AttributeConverter} for storing/retrieving {@code List<String>}. */
|
||||||
@Converter(autoApply = true)
|
@Converter(autoApply = true)
|
||||||
public class StringListConverter extends StringListConverterBase<String> {
|
public class StringListConverter extends StringListConverterBase<String> {
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
|
||||||
/**
|
/**
|
||||||
* The {@link JavaTypeDescriptor} and {@link SqlTypeDescriptor} for {@link StringMap}.
|
* The {@link JavaTypeDescriptor} and {@link SqlTypeDescriptor} for {@link StringMap}.
|
||||||
*
|
*
|
||||||
* <p>A {@link StringMap} object is a simple wrapper for a {@link Map <String, String>} which can be
|
* <p>A {@link StringMap} object is a simple wrapper for a {@code Map<String, String>} which can be
|
||||||
* stored in a column with data type of hstore in the database. The {@link JavaTypeDescriptor} and
|
* stored in a column with data type of hstore in the database. The {@link JavaTypeDescriptor} and
|
||||||
* {@link SqlTypeDescriptor} is used by JPA/Hibernate to map between the map and hstore which is the
|
* {@link SqlTypeDescriptor} is used by JPA/Hibernate to map between the map and hstore which is the
|
||||||
* actual type that JDBC uses to read from and write to the database.
|
* actual type that JDBC uses to read from and write to the database.
|
||||||
|
@ -156,7 +156,7 @@ public class StringMapDescriptor extends AbstractTypeDescriptor<StringMap>
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/** A simple wrapper class for {@link Map<String, String>}. */
|
/** A simple wrapper class for {@code Map<String, String>}. */
|
||||||
public static class StringMap {
|
public static class StringMap {
|
||||||
private Map<String, String> map;
|
private Map<String, String> map;
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ public class StringMapDescriptor extends AbstractTypeDescriptor<StringMap>
|
||||||
return new StringMap(ImmutableMap.copyOf(map));
|
return new StringMap(ImmutableMap.copyOf(map));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the underlying {@link Map<String, String>} object. */
|
/** Returns the underlying {@code Map<String, String>} object. */
|
||||||
public Map<String, String> getMap() {
|
public Map<String, String> getMap() {
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,10 @@
|
||||||
|
|
||||||
package google.registry.persistence.converter;
|
package google.registry.persistence.converter;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
import javax.persistence.AttributeConverter;
|
import javax.persistence.AttributeConverter;
|
||||||
import javax.persistence.Converter;
|
import javax.persistence.Converter;
|
||||||
|
|
||||||
/** JPA {@link AttributeConverter} for storing/retrieving {@link Set<String>}. */
|
/** JPA {@link AttributeConverter} for storing/retrieving {@code Set<String>}. */
|
||||||
@Converter(autoApply = true)
|
@Converter(autoApply = true)
|
||||||
public class StringSetConverter extends StringSetConverterBase<String> {
|
public class StringSetConverter extends StringSetConverterBase<String> {
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
package google.registry.persistence.converter;
|
package google.registry.persistence.converter;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import google.registry.model.common.TimedTransitionProperty;
|
|
||||||
import google.registry.model.registry.Registry.TldState;
|
import google.registry.model.registry.Registry.TldState;
|
||||||
import google.registry.model.registry.Registry.TldStateTransition;
|
import google.registry.model.registry.Registry.TldStateTransition;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -23,7 +22,7 @@ import javax.persistence.Converter;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JPA converter for storing/retrieving {@link TimedTransitionProperty<TldState,
|
* JPA converter for storing/retrieving {@code TimedTransitionProperty<TldState,
|
||||||
* TldStateTransition>} objects.
|
* TldStateTransition>} objects.
|
||||||
*/
|
*/
|
||||||
@Converter(autoApply = true)
|
@Converter(autoApply = true)
|
||||||
|
|
|
@ -17,6 +17,7 @@ package google.registry.persistence.transaction;
|
||||||
import com.google.common.collect.ImmutableCollection;
|
import com.google.common.collect.ImmutableCollection;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
|
@ -61,10 +61,9 @@ import javax.inject.Inject;
|
||||||
* (RDAP) Query Format</a>
|
* (RDAP) Query Format</a>
|
||||||
* @see <a href="http://tools.ietf.org/html/rfc7483">RFC 7483: JSON Responses for the Registration
|
* @see <a href="http://tools.ietf.org/html/rfc7483">RFC 7483: JSON Responses for the Registration
|
||||||
* Data Access Protocol (RDAP)</a>
|
* Data Access Protocol (RDAP)</a>
|
||||||
*
|
|
||||||
* TODO(guyben):This isn't required by the RDAP Technical Implementation Guide, and hence should be
|
|
||||||
* deleted, at least until it's actually required.
|
|
||||||
*/
|
*/
|
||||||
|
// TODO: This isn't required by the RDAP Technical Implementation Guide, and hence should be
|
||||||
|
// deleted, at least until it's actually required.
|
||||||
@Action(
|
@Action(
|
||||||
service = Action.Service.PUBAPI,
|
service = Action.Service.PUBAPI,
|
||||||
path = "/rdap/domains",
|
path = "/rdap/domains",
|
||||||
|
|
|
@ -72,10 +72,9 @@ import javax.inject.Inject;
|
||||||
* (RDAP) Query Format</a>
|
* (RDAP) Query Format</a>
|
||||||
* @see <a href="http://tools.ietf.org/html/rfc7483">RFC 7483: JSON Responses for the Registration
|
* @see <a href="http://tools.ietf.org/html/rfc7483">RFC 7483: JSON Responses for the Registration
|
||||||
* Data Access Protocol (RDAP)</a>
|
* Data Access Protocol (RDAP)</a>
|
||||||
*
|
|
||||||
* TODO(guyben):This isn't required by the RDAP Technical Implementation Guide, and hence should be
|
|
||||||
* deleted, at least until it's actually required.
|
|
||||||
*/
|
*/
|
||||||
|
// TODO: This isn't required by the RDAP Technical Implementation Guide, and hence should be
|
||||||
|
// deleted, at least until it's actually required.
|
||||||
@Action(
|
@Action(
|
||||||
service = Action.Service.PUBAPI,
|
service = Action.Service.PUBAPI,
|
||||||
path = "/rdap/entities",
|
path = "/rdap/entities",
|
||||||
|
|
|
@ -221,10 +221,9 @@ public abstract class RdapSearchActionBase extends RdapActionBase {
|
||||||
*
|
*
|
||||||
* <p>This version handles a list of parameter values, all associated with the same name.
|
* <p>This version handles a list of parameter values, all associated with the same name.
|
||||||
*
|
*
|
||||||
* <p>Example: If the original parameters were "a=w&a=x&b=y&c=z", and this method is called with
|
* <p>Example: If the original parameters were "a=w&a=x&b=y&c=z", and this method is
|
||||||
* parameterName = "b" and parameterValues of "p" and "q", the result will be
|
* called with parameterName = "b" and parameterValues of "p" and "q", the result will be
|
||||||
* "a=w&a=x&c=z&b=p&b=q". The new values of parameter "b" replace the old ones.
|
* "a=w&a=x&c=z&b=p&b=q". The new values of parameter "b" replace the old ones.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
protected String getRequestUrlWithExtraParameter(
|
protected String getRequestUrlWithExtraParameter(
|
||||||
String parameterName, List<String> parameterValues) {
|
String parameterName, List<String> parameterValues) {
|
||||||
|
|
|
@ -120,9 +120,6 @@ public final class Ghostryde {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a ghostryde file from an in-memory byte array.
|
* Creates a ghostryde file from an in-memory byte array.
|
||||||
*
|
|
||||||
* @throws PGPException
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
public static byte[] encode(byte[] data, PGPPublicKey key)
|
public static byte[] encode(byte[] data, PGPPublicKey key)
|
||||||
throws IOException, PGPException {
|
throws IOException, PGPException {
|
||||||
|
@ -137,9 +134,6 @@ public final class Ghostryde {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deciphers a ghostryde file from an in-memory byte array.
|
* Deciphers a ghostryde file from an in-memory byte array.
|
||||||
*
|
|
||||||
* @throws PGPException
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
public static byte[] decode(byte[] data, PGPPrivateKey key)
|
public static byte[] decode(byte[] data, PGPPrivateKey key)
|
||||||
throws IOException, PGPException {
|
throws IOException, PGPException {
|
||||||
|
|
|
@ -46,9 +46,6 @@ public final class RdeUtil {
|
||||||
/**
|
/**
|
||||||
* Look at some bytes from {@code xmlInput} to ensure it appears to be a FULL XML deposit and
|
* Look at some bytes from {@code xmlInput} to ensure it appears to be a FULL XML deposit and
|
||||||
* then use a regular expression to extract the watermark timestamp which is returned.
|
* then use a regular expression to extract the watermark timestamp which is returned.
|
||||||
*
|
|
||||||
* @throws IOException
|
|
||||||
* @throws XmlException
|
|
||||||
*/
|
*/
|
||||||
public static DateTime peekWatermark(BufferedInputStream xmlInput)
|
public static DateTime peekWatermark(BufferedInputStream xmlInput)
|
||||||
throws IOException, XmlException {
|
throws IOException, XmlException {
|
||||||
|
|
|
@ -34,7 +34,7 @@ import javax.mail.internet.InternetAddress;
|
||||||
import org.joda.time.YearMonth;
|
import org.joda.time.YearMonth;
|
||||||
|
|
||||||
/** Utility functions for sending emails involving monthly invoices. */
|
/** Utility functions for sending emails involving monthly invoices. */
|
||||||
class BillingEmailUtils {
|
public class BillingEmailUtils {
|
||||||
|
|
||||||
private final SendEmailService emailService;
|
private final SendEmailService emailService;
|
||||||
private final YearMonth yearMonth;
|
private final YearMonth yearMonth;
|
||||||
|
|
|
@ -43,8 +43,8 @@ import org.joda.time.YearMonth;
|
||||||
* PublishInvoicesAction} to publish the subsequent output.
|
* PublishInvoicesAction} to publish the subsequent output.
|
||||||
*
|
*
|
||||||
* <p>This action runs the {@link google.registry.beam.invoicing.InvoicingPipeline} beam template,
|
* <p>This action runs the {@link google.registry.beam.invoicing.InvoicingPipeline} beam template,
|
||||||
* staged at gs://<projectId>-beam/templates/invoicing. The pipeline then generates invoices for the
|
* staged at gs://<projectId>-beam/templates/invoicing. The pipeline then generates invoices
|
||||||
* month and stores them on GCS.
|
* for the month and stores them on GCS.
|
||||||
*/
|
*/
|
||||||
@Action(
|
@Action(
|
||||||
service = Action.Service.BACKEND,
|
service = Action.Service.BACKEND,
|
||||||
|
|
|
@ -53,7 +53,7 @@ import org.json.JSONException;
|
||||||
* pipeline accordingly.
|
* pipeline accordingly.
|
||||||
*
|
*
|
||||||
* <p>This calls {@link Spec11EmailUtils#emailSpec11Reports(LocalDate, SoyTemplateInfo, String,
|
* <p>This calls {@link Spec11EmailUtils#emailSpec11Reports(LocalDate, SoyTemplateInfo, String,
|
||||||
* Set)} on success or {@link Spec11EmailUtils#sendAlertEmail(String, String)} on failure.
|
* ImmutableSet)} on success or {@link Spec11EmailUtils#sendAlertEmail(String, String)} on failure.
|
||||||
*/
|
*/
|
||||||
@Action(
|
@Action(
|
||||||
service = Action.Service.BACKEND,
|
service = Action.Service.BACKEND,
|
||||||
|
|
|
@ -45,9 +45,9 @@ public final class RequestParameters {
|
||||||
*
|
*
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>/foo?bar=hello → hello
|
* <li>/foo?bar=hello → hello
|
||||||
* <li>/foo?bar=hello&bar=there → hello
|
* <li>/foo?bar=hello&bar=there → hello
|
||||||
* <li>/foo?bar= → 400 error (empty)
|
* <li>/foo?bar= → 400 error (empty)
|
||||||
* <li>/foo?bar=&bar=there → 400 error (empty)
|
* <li>/foo?bar=&bar=there → 400 error (empty)
|
||||||
* <li>/foo → 400 error (absent)
|
* <li>/foo → 400 error (absent)
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
|
|
|
@ -59,7 +59,7 @@ public class CursorDao {
|
||||||
.transact(() -> jpaTm().getEntityManager().find(Cursor.class, new CursorId(type, scope)));
|
.transact(() -> jpaTm().getEntityManager().find(Cursor.class, new CursorId(type, scope)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** If no scope is given, use {@link Cursor.GLOBAL} as the scope. */
|
/** If no scope is given, use {@link Cursor#GLOBAL} as the scope. */
|
||||||
public static Cursor load(CursorType type) {
|
public static Cursor load(CursorType type) {
|
||||||
checkNotNull(type, "The type of the cursor to load must be specified");
|
checkNotNull(type, "The type of the cursor to load must be specified");
|
||||||
return load(type, Cursor.GLOBAL);
|
return load(type, Cursor.GLOBAL);
|
||||||
|
|
|
@ -214,13 +214,13 @@ public final class RegistryLock extends ImmutableObject implements Buildable, Sq
|
||||||
return lockCompletionTimestamp != null && unlockCompletionTimestamp == null;
|
return lockCompletionTimestamp != null && unlockCompletionTimestamp == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns true iff the lock was requested >= 1 hour ago and has not been verified. */
|
/** Returns true iff the lock was requested >= 1 hour ago and has not been verified. */
|
||||||
public boolean isLockRequestExpired(DateTime now) {
|
public boolean isLockRequestExpired(DateTime now) {
|
||||||
return !getLockCompletionTimestamp().isPresent()
|
return !getLockCompletionTimestamp().isPresent()
|
||||||
&& isBeforeOrAt(getLockRequestTimestamp(), now.minusHours(1));
|
&& isBeforeOrAt(getLockRequestTimestamp(), now.minusHours(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns true iff the unlock was requested >= 1 hour ago and has not been verified. */
|
/** Returns true iff the unlock was requested >= 1 hour ago and has not been verified. */
|
||||||
public boolean isUnlockRequestExpired(DateTime now) {
|
public boolean isUnlockRequestExpired(DateTime now) {
|
||||||
Optional<DateTime> unlockRequestTimestamp = getUnlockRequestTimestamp();
|
Optional<DateTime> unlockRequestTimestamp = getUnlockRequestTimestamp();
|
||||||
return unlockRequestTimestamp.isPresent()
|
return unlockRequestTimestamp.isPresent()
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class DriveConnection {
|
||||||
/**
|
/**
|
||||||
* Creates a folder with the given parent.
|
* Creates a folder with the given parent.
|
||||||
*
|
*
|
||||||
* @returns the folder id.
|
* @return the folder id.
|
||||||
*/
|
*/
|
||||||
public String createFolder(String title, String parentFolderId) throws IOException {
|
public String createFolder(String title, String parentFolderId) throws IOException {
|
||||||
return drive.files()
|
return drive.files()
|
||||||
|
@ -58,7 +58,7 @@ public class DriveConnection {
|
||||||
* existing file is the desired behavior, use {@link #createOrUpdateFile(String, MediaType,
|
* existing file is the desired behavior, use {@link #createOrUpdateFile(String, MediaType,
|
||||||
* String, byte[])} instead.
|
* String, byte[])} instead.
|
||||||
*
|
*
|
||||||
* @returns the file id.
|
* @return the file id.
|
||||||
*/
|
*/
|
||||||
public String createFile(String title, MediaType mimeType, String parentFolderId, byte[] bytes)
|
public String createFile(String title, MediaType mimeType, String parentFolderId, byte[] bytes)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
@ -76,13 +76,10 @@ public class DriveConnection {
|
||||||
*
|
*
|
||||||
* @throws IllegalStateException if multiple files with that name exist in the given folder.
|
* @throws IllegalStateException if multiple files with that name exist in the given folder.
|
||||||
* @throws IOException if communication with Google Drive fails for any reason.
|
* @throws IOException if communication with Google Drive fails for any reason.
|
||||||
* @returns the file id.
|
* @return the file id.
|
||||||
*/
|
*/
|
||||||
public String createOrUpdateFile(
|
public String createOrUpdateFile(
|
||||||
String title,
|
String title, MediaType mimeType, String parentFolderId, byte[] bytes) throws IOException {
|
||||||
MediaType mimeType,
|
|
||||||
String parentFolderId,
|
|
||||||
byte[] bytes) throws IOException {
|
|
||||||
List<String> existingFiles = listFiles(parentFolderId, String.format("title = '%s'", title));
|
List<String> existingFiles = listFiles(parentFolderId, String.format("title = '%s'", title));
|
||||||
if (existingFiles.size() > 1) {
|
if (existingFiles.size() > 1) {
|
||||||
throw new IllegalStateException(String.format(
|
throw new IllegalStateException(String.format(
|
||||||
|
@ -97,10 +94,10 @@ public class DriveConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the file with the given id in place, setting the title, content, and mime type to
|
* Updates the file with the given id in place, setting the title, content, and mime type to the
|
||||||
* the newly specified values.
|
* newly specified values.
|
||||||
*
|
*
|
||||||
* @returns the file id.
|
* @return the file id.
|
||||||
*/
|
*/
|
||||||
public String updateFile(String fileId, String title, MediaType mimeType, byte[] bytes)
|
public String updateFile(String fileId, String title, MediaType mimeType, byte[] bytes)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
|
@ -77,10 +77,6 @@ public class TmchXmlSignature {
|
||||||
*
|
*
|
||||||
* @throws GeneralSecurityException for unsupported protocols, certs not signed by the TMCH,
|
* @throws GeneralSecurityException for unsupported protocols, certs not signed by the TMCH,
|
||||||
* incorrect keys, and for invalid, old, not-yet-valid or revoked certificates.
|
* incorrect keys, and for invalid, old, not-yet-valid or revoked certificates.
|
||||||
* @throws IOException
|
|
||||||
* @throws MarshalException
|
|
||||||
* @throws ParserConfigurationException
|
|
||||||
* @throws SAXException
|
|
||||||
*/
|
*/
|
||||||
public void verify(byte[] smdXml)
|
public void verify(byte[] smdXml)
|
||||||
throws GeneralSecurityException, IOException, MarshalException, ParserConfigurationException,
|
throws GeneralSecurityException, IOException, MarshalException, ParserConfigurationException,
|
||||||
|
|
|
@ -36,17 +36,16 @@ import java.util.Optional;
|
||||||
*
|
*
|
||||||
* <p>The input source is automatically closed when all data have been read.
|
* <p>The input source is automatically closed when all data have been read.
|
||||||
*
|
*
|
||||||
* <p>See <a
|
|
||||||
* href="https://github.com/google/leveldb/blob/master/doc/log_format.md">log_format.md</a> for the
|
|
||||||
* leveldb log format specification.</a>
|
|
||||||
*
|
|
||||||
* <p>There are several other implementations of this, none of which appeared suitable for our use
|
* <p>There are several other implementations of this, none of which appeared suitable for our use
|
||||||
* case: <a href="https://github.com/google/leveldb">The original C++ implementation</a>. <a
|
* case: <a href="https://github.com/google/leveldb">The original C++ implementation</a>. <a
|
||||||
* href="https://cloud.google.com/appengine/docs/standard/java/javadoc/com/google/appengine/api/files/RecordReadChannel">
|
* href="https://cloud.google.com/appengine/docs/standard/java/javadoc/com/google/appengine/api/files/RecordReadChannel">
|
||||||
* com.google.appengine.api.files.RecordReadChannel</a> - Exactly what we need but deprecated. The
|
* com.google.appengine.api.files.RecordReadChannel</a> - Exactly what we need but deprecated. The
|
||||||
* referenced replacement: <a
|
* referenced replacement: <a
|
||||||
* href="https://github.com/GoogleCloudPlatform/appengine-gcs-client.git">The App Engine GCS
|
* href="https://github.com/GoogleCloudPlatform/appengine-gcs-client.git">The App Engine GCS
|
||||||
* Client</a> - Does not appear to have any support for working with LevelDB.
|
* Client</a> - Does not appear to have any support for working with LevelDB. *
|
||||||
|
*
|
||||||
|
* <p>See <a
|
||||||
|
* href="https://github.com/google/leveldb/blob/master/doc/log_format.md">log_format.md</a>
|
||||||
*/
|
*/
|
||||||
public final class LevelDbLogReader implements Iterator<byte[]> {
|
public final class LevelDbLogReader implements Iterator<byte[]> {
|
||||||
|
|
||||||
|
|
|
@ -44,8 +44,9 @@ import javax.annotation.concurrent.Immutable;
|
||||||
* Declarative functional fluent form field converter / validator.
|
* Declarative functional fluent form field converter / validator.
|
||||||
*
|
*
|
||||||
* <p>This class is responsible for converting arbitrary data, sent to us by the web browser, into
|
* <p>This class is responsible for converting arbitrary data, sent to us by the web browser, into
|
||||||
* validated data structures that the server-side code can use. For example:<pre>
|
* validated data structures that the server-side code can use. For example:
|
||||||
*
|
*
|
||||||
|
* <pre>{@code
|
||||||
* private enum Gender { MALE, FEMALE }
|
* private enum Gender { MALE, FEMALE }
|
||||||
*
|
*
|
||||||
* private static final FormField<String, String> NAME_FIELD = FormField.named("name")
|
* private static final FormField<String, String> NAME_FIELD = FormField.named("name")
|
||||||
|
@ -68,6 +69,7 @@ import javax.annotation.concurrent.Immutable;
|
||||||
* person.setGender(name);
|
* person.setGender(name);
|
||||||
* }
|
* }
|
||||||
* return person.build();
|
* return person.build();
|
||||||
|
* }
|
||||||
* }</pre>
|
* }</pre>
|
||||||
*
|
*
|
||||||
* <p>This class provides <b>full type-safety</b> <i>if and only if</i> you statically initialize
|
* <p>This class provides <b>full type-safety</b> <i>if and only if</i> you statically initialize
|
||||||
|
@ -75,12 +77,12 @@ import javax.annotation.concurrent.Immutable;
|
||||||
*
|
*
|
||||||
* <h3>Exception Handling</h3>
|
* <h3>Exception Handling</h3>
|
||||||
*
|
*
|
||||||
* <p>When values passed to {@link #convert} or {@link #extract} don't meet the contract,
|
* <p>When values passed to {@link #convert} or {@link #extract} don't meet the contract, {@link
|
||||||
* {@link FormFieldException} will be thrown, which provides the field name and a short error
|
* FormFieldException} will be thrown, which provides the field name and a short error message
|
||||||
* message that's safe to pass along to the client.
|
* that's safe to pass along to the client.
|
||||||
*
|
*
|
||||||
* <p>You can safely throw {@code FormFieldException} from within your validator functions, and
|
* <p>You can safely throw {@code FormFieldException} from within your validator functions, and the
|
||||||
* the field name will automatically be propagated into the exception object for you.
|
* field name will automatically be propagated into the exception object for you.
|
||||||
*
|
*
|
||||||
* <p>In situations when you're validating lists or maps, you'll end up with a hierarchical field
|
* <p>In situations when you're validating lists or maps, you'll end up with a hierarchical field
|
||||||
* naming structure. For example, if you were validating a list of maps, an error generated by the
|
* naming structure. For example, if you were validating a list of maps, an error generated by the
|
||||||
|
@ -92,8 +94,9 @@ import javax.annotation.concurrent.Immutable;
|
||||||
* <p>You should never assign a partially constructed {@code FormField.Builder} to a variable or
|
* <p>You should never assign a partially constructed {@code FormField.Builder} to a variable or
|
||||||
* constant. Instead, you should use {@link #asBuilder()} or {@link #asBuilderNamed(String)}.
|
* constant. Instead, you should use {@link #asBuilder()} or {@link #asBuilderNamed(String)}.
|
||||||
*
|
*
|
||||||
* <p>Here is an example of how you might go about defining library definitions:<pre>
|
* <p>Here is an example of how you might go about defining library definitions:
|
||||||
*
|
*
|
||||||
|
* <pre>{@code
|
||||||
* final class FormFields {
|
* final class FormFields {
|
||||||
* private static final FormField<String, String> COUNTRY_CODE =
|
* private static final FormField<String, String> COUNTRY_CODE =
|
||||||
* FormField.named("countryCode")
|
* FormField.named("countryCode")
|
||||||
|
@ -108,6 +111,7 @@ import javax.annotation.concurrent.Immutable;
|
||||||
* FormFields.COUNTRY_CODE.asBuilder()
|
* FormFields.COUNTRY_CODE.asBuilder()
|
||||||
* .required()
|
* .required()
|
||||||
* .build();
|
* .build();
|
||||||
|
* }
|
||||||
* }</pre>
|
* }</pre>
|
||||||
*
|
*
|
||||||
* @param <I> input value type
|
* @param <I> input value type
|
||||||
|
|
|
@ -105,9 +105,10 @@ public class SendEmailUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sends an email from Nomulus to the registrarChangesNotificationEmailAddresses.
|
/**
|
||||||
|
* Sends an email from Nomulus to the registrarChangesNotificationEmailAddresses.
|
||||||
*
|
*
|
||||||
* <p>See {@link #sendEmail(String, String, ImmutableList<String>)}.
|
* <p>See {@link #sendEmail(String, String, ImmutableList)}.
|
||||||
*/
|
*/
|
||||||
public boolean sendEmail(final String subject, String body) {
|
public boolean sendEmail(final String subject, String body) {
|
||||||
return sendEmail(subject, body, ImmutableList.of());
|
return sendEmail(subject, body, ImmutableList.of());
|
||||||
|
|
|
@ -58,11 +58,9 @@ import org.joda.time.Duration;
|
||||||
* <p>You can send AJAX requests to our WHOIS API from your <em>very own</em> website using the
|
* <p>You can send AJAX requests to our WHOIS API from your <em>very own</em> website using the
|
||||||
* following embed code:
|
* following embed code:
|
||||||
*
|
*
|
||||||
* <pre>
|
* <pre>{@code
|
||||||
* <p>
|
|
||||||
* <input id="query-input" placeholder="Domain, Nameserver, IP, etc." autofocus>
|
* <input id="query-input" placeholder="Domain, Nameserver, IP, etc." autofocus>
|
||||||
* <button id="search-button">Lookup</button>
|
* <button id="search-button">Lookup</button>
|
||||||
* <p>
|
|
||||||
* <pre id="whois-results"></pre>
|
* <pre id="whois-results"></pre>
|
||||||
* <script>
|
* <script>
|
||||||
* (function() {
|
* (function() {
|
||||||
|
@ -91,7 +89,7 @@ import org.joda.time.Duration;
|
||||||
* document.getElementById('query-input').onkeypress = OnKeyPressQueryInput;
|
* document.getElementById('query-input').onkeypress = OnKeyPressQueryInput;
|
||||||
* })();
|
* })();
|
||||||
* </script>
|
* </script>
|
||||||
* </pre>
|
* }</pre>
|
||||||
*
|
*
|
||||||
* @see WhoisAction
|
* @see WhoisAction
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
{template .resultSuccess}
|
{template .resultSuccess}
|
||||||
{@param baseClientId: string} /** The base clientId used for the OT&E setup. */
|
{@param baseClientId: string} /** The base clientId used for the OT&E setup. */
|
||||||
{@param contactEmail: string} /** The contact's email added to the registrars. */
|
{@param contactEmail: string} /** The contact's email added to the registrars. */
|
||||||
{@param clientIdToTld: map<string, string>} /** The created registrars->TLD mapping. */
|
{@param clientIdToTld: map<string, string>} /** The created registrars->TLD mapping. */
|
||||||
{@param password: string} /** The password given for the created registrars. */
|
{@param password: string} /** The password given for the created registrars. */
|
||||||
{@param username: string} /** Arbitrary username to display. */
|
{@param username: string} /** Arbitrary username to display. */
|
||||||
{@param logoutUrl: string} /** Generated URL for logging out of Google. */
|
{@param logoutUrl: string} /** Generated URL for logging out of Google. */
|
||||||
|
|
|
@ -33,8 +33,8 @@ import io.netty.channel.EventLoopGroup;
|
||||||
* <p>Inherits from {@link CircularList}, with element type of {@link ProbingStep} as the manner in
|
* <p>Inherits from {@link CircularList}, with element type of {@link ProbingStep} as the manner in
|
||||||
* which the sequence is carried out is similar to the {@link CircularList}. However, the {@link
|
* which the sequence is carried out is similar to the {@link CircularList}. However, the {@link
|
||||||
* Builder} of {@link ProbingSequence} override {@link CircularList.AbstractBuilder} allowing for
|
* Builder} of {@link ProbingSequence} override {@link CircularList.AbstractBuilder} allowing for
|
||||||
* more customized flows, that are looped, but not necessarily entirely circular. Example: first ->
|
* more customized flows, that are looped, but not necessarily entirely circular. Example: first
|
||||||
* second -> third -> fourth -> second -> third -> fourth -> second -> ...
|
* -> second -> third -> fourth -> second -> third -> fourth -> second ->...
|
||||||
*
|
*
|
||||||
* <p>Created with {@link Builder} where we specify {@link EventLoopGroup}, {@link AbstractChannel}
|
* <p>Created with {@link Builder} where we specify {@link EventLoopGroup}, {@link AbstractChannel}
|
||||||
* class type, then sequentially add in the {@link ProbingStep.Builder}s in order and mark which one
|
* class type, then sequentially add in the {@link ProbingStep.Builder}s in order and mark which one
|
||||||
|
|
|
@ -47,9 +47,8 @@ import org.joda.time.Duration;
|
||||||
/**
|
/**
|
||||||
* AutoValue class that represents action generated by {@link ProbingStep}
|
* AutoValue class that represents action generated by {@link ProbingStep}
|
||||||
*
|
*
|
||||||
* <p>Inherits from {@link Callable<ChannelFuture>}, as it has can be called to perform its
|
* <p>Inherits from {@link Callable}, as it has can be called to perform its specified task, and
|
||||||
* specified task, and return the {@link ChannelFuture} that will be informed when the task has been
|
* return the {@link ChannelFuture} that will be informed when the task has been completed
|
||||||
* completed
|
|
||||||
*
|
*
|
||||||
* <p>Is an immutable class, as it is comprised of the tools necessary for making a specific type of
|
* <p>Is an immutable class, as it is comprised of the tools necessary for making a specific type of
|
||||||
* connection. It goes hand in hand with {@link Protocol}, which specifies the kind of overall
|
* connection. It goes hand in hand with {@link Protocol}, which specifies the kind of overall
|
||||||
|
|
|
@ -27,8 +27,8 @@ import io.netty.channel.SimpleChannelInboundHandler;
|
||||||
/**
|
/**
|
||||||
* Superclass of all {@link io.netty.channel.ChannelHandler}s placed at end of channel pipeline
|
* Superclass of all {@link io.netty.channel.ChannelHandler}s placed at end of channel pipeline
|
||||||
*
|
*
|
||||||
* <p>{@link ActionHandler} inherits from {@link SimpleChannelInboundHandler<InboundMessageType>},
|
* <p>{@link ActionHandler} inherits from {@link SimpleChannelInboundHandler}, as it should only be
|
||||||
* as it should only be passed in messages that implement the {@link InboundMessageType} interface.
|
* passed in messages that implement the {@link InboundMessageType} interface.
|
||||||
*
|
*
|
||||||
* <p>The {@link ActionHandler} skeleton exists for a few main purposes. First, it returns a {@link
|
* <p>The {@link ActionHandler} skeleton exists for a few main purposes. First, it returns a {@link
|
||||||
* ChannelPromise}, which informs the {@link ProbingAction} in charge that a response has been read.
|
* ChannelPromise}, which informs the {@link ProbingAction} in charge that a response has been read.
|
||||||
|
|
|
@ -40,7 +40,7 @@ import org.joda.time.Duration;
|
||||||
*
|
*
|
||||||
* <p>Main purpose is to verify {@link HttpResponseMessage} received is valid. If the response
|
* <p>Main purpose is to verify {@link HttpResponseMessage} received is valid. If the response
|
||||||
* implies a redirection it follows the redirection until either an Error Response is received, or
|
* implies a redirection it follows the redirection until either an Error Response is received, or
|
||||||
* {@link HttpResponseStatus.OK} is received
|
* {@link HttpResponseStatus#OK} is received
|
||||||
*/
|
*/
|
||||||
public class WebWhoisActionHandler extends ActionHandler {
|
public class WebWhoisActionHandler extends ActionHandler {
|
||||||
|
|
||||||
|
|
|
@ -209,8 +209,7 @@ public class EppMessage {
|
||||||
* @param xml the XML Document containing the EPP reponse to verify
|
* @param xml the XML Document containing the EPP reponse to verify
|
||||||
* @param expressions a list of XPath expressions to query the document with.
|
* @param expressions a list of XPath expressions to query the document with.
|
||||||
* @param validate a boolean flag to control if schema validation occurs (useful for testing)
|
* @param validate a boolean flag to control if schema validation occurs (useful for testing)
|
||||||
* @throws IOException if InputStream throws one
|
* @throws FailureException if the EPP response cannot be read, parsed, or doesn't containing
|
||||||
* @throws EppClientException if the EPP response cannot be read, parsed, or doesn't containing
|
|
||||||
* matching data specified in expressions
|
* matching data specified in expressions
|
||||||
*/
|
*/
|
||||||
protected static void verifyEppResponse(Document xml, List<String> expressions, boolean validate)
|
protected static void verifyEppResponse(Document xml, List<String> expressions, boolean validate)
|
||||||
|
@ -309,7 +308,7 @@ public class EppMessage {
|
||||||
*
|
*
|
||||||
* @param responseBuffer the byte array to transform
|
* @param responseBuffer the byte array to transform
|
||||||
* @return the resulting Document
|
* @return the resulting Document
|
||||||
* @throws EppClientException if the transform fails
|
* @throws FailureException if the transform fails
|
||||||
*/
|
*/
|
||||||
public static Document byteArrayToXmlDoc(byte[] responseBuffer) throws FailureException {
|
public static Document byteArrayToXmlDoc(byte[] responseBuffer) throws FailureException {
|
||||||
Document xml;
|
Document xml;
|
||||||
|
|
|
@ -117,7 +117,7 @@ public class EppRequestMessage extends EppMessage implements OutboundMessageType
|
||||||
*
|
*
|
||||||
* @return the {@link ByteBuf} instance that stores the bytes representing the requisite EPP
|
* @return the {@link ByteBuf} instance that stores the bytes representing the requisite EPP
|
||||||
* Request
|
* Request
|
||||||
* @throws EppClientException- On the occasion that the prober can't appropriately convert the EPP
|
* @throws EppClientException On the occasion that the prober can't appropriately convert the EPP
|
||||||
* XML document to a {@link ByteBuf}, the blame falls on the prober, not the server, so it
|
* XML document to a {@link ByteBuf}, the blame falls on the prober, not the server, so it
|
||||||
* throws an {@link EppClientException}, which is a subclass of the {@link
|
* throws an {@link EppClientException}, which is a subclass of the {@link
|
||||||
* UndeterminedStateException}.
|
* UndeterminedStateException}.
|
||||||
|
|
|
@ -76,18 +76,19 @@ public class EppServiceHandler extends HttpsRelayServiceHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write <hello> to the server after SSL handshake completion to request <greeting>
|
* Write {@code <hello>} to the server after SSL handshake completion to request {@code
|
||||||
|
* <greeting>}
|
||||||
*
|
*
|
||||||
* <p>When handling EPP over TCP, the server should issue a <greeting> to the client when a
|
* <p>When handling EPP over TCP, the server should issue a {@code <greeting>} to the client when
|
||||||
* connection is established. Nomulus app however does not automatically sends the <greeting> upon
|
* a connection is established. Nomulus app however does not automatically sends the {@code
|
||||||
* connection. The proxy therefore first sends a <hello> to registry to request a <greeting>
|
* <greeting>} upon connection. The proxy therefore first sends a {@code <hello>} to registry to
|
||||||
* response.
|
* request a {@code <greeting>} response.
|
||||||
*
|
*
|
||||||
* <p>The <hello> request is only sent after SSL handshake is completed between the client and the
|
* <p>The {@code <hello>} request is only sent after SSL handshake is completed between the client
|
||||||
* proxy so that the client certificate hash is available, which is needed to communicate with the
|
* and the proxy so that the client certificate hash is available, which is needed to communicate
|
||||||
* server. Because {@link SslHandshakeCompletionEvent} is triggered before any calls to {@link
|
* with the server. Because {@link SslHandshakeCompletionEvent} is triggered before any calls to
|
||||||
* #channelRead} are scheduled by the event loop executor, the <hello> request is guaranteed to be
|
* {@link #channelRead} are scheduled by the event loop executor, the {@code <hello>} request is
|
||||||
* the first message sent to the server.
|
* guaranteed to be the first message sent to the server.
|
||||||
*
|
*
|
||||||
* @see <a href="https://tools.ietf.org/html/rfc5734">RFC 5732 EPP Transport over TCP</a>
|
* @see <a href="https://tools.ietf.org/html/rfc5734">RFC 5732 EPP Transport over TCP</a>
|
||||||
* @see <a href="https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt">The Proxy
|
* @see <a href="https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt">The Proxy
|
||||||
|
|
|
@ -48,7 +48,7 @@ import javax.net.ssl.SSLHandshakeException;
|
||||||
*
|
*
|
||||||
* <p>This handler reads in a {@link ByteBuf}, converts it to an {@link FullHttpRequest}, and passes
|
* <p>This handler reads in a {@link ByteBuf}, converts it to an {@link FullHttpRequest}, and passes
|
||||||
* it to the {@code channelRead} method of the next inbound handler the channel pipeline, which is
|
* it to the {@code channelRead} method of the next inbound handler the channel pipeline, which is
|
||||||
* usually a {@link RelayHandler<FullHttpRequest>}. The relay handler writes the request to the
|
* usually a {@code RelayHandler<FullHttpRequest>}. The relay handler writes the request to the
|
||||||
* relay channel, which is connected to an HTTPS endpoint. After the relay channel receives a {@link
|
* relay channel, which is connected to an HTTPS endpoint. After the relay channel receives a {@link
|
||||||
* FullHttpResponse} back, its own relay handler writes the response back to this channel, which is
|
* FullHttpResponse} back, its own relay handler writes the response back to this channel, which is
|
||||||
* the relay channel of the relay channel. This handler then handles write request by encoding the
|
* the relay channel of the relay channel. This handler then handles write request by encoding the
|
||||||
|
|
|
@ -47,8 +47,9 @@ public interface AppEngineServiceUtils {
|
||||||
* GCP. The work-around is to change all of the "." subdomain markers to "-dot-". E.g.:
|
* GCP. The work-around is to change all of the "." subdomain markers to "-dot-". E.g.:
|
||||||
*
|
*
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>tools.projectid.appspot.com --> tools-dot-projectid.appspot.com
|
* <li>tools.projectid.appspot.com --> tools-dot-projectid.appspot.com
|
||||||
* <li>version.backend.projectid.appspot.com --> version-dot-backend-dot-projectid.appspot.com
|
* <li>version.backend.projectid.appspot.com -->
|
||||||
|
* version-dot-backend-dot-projectid.appspot.com
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @see <a
|
* @see <a
|
||||||
|
|
|
@ -15,11 +15,11 @@
|
||||||
package google.registry.util;
|
package google.registry.util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class that stores value {@param <T>}, and points in circle to other {@link CircularList} objects.
|
* Class that stores value {@code <T>}, and points in circle to other {@link CircularList} objects.
|
||||||
*
|
*
|
||||||
* <p>In its construction, we create a sequence of {@link CircularList} objects, each storing an *
|
* <p>In its construction, we create a sequence of {@link CircularList} objects, each storing an
|
||||||
* instance of T. They each point to each other in a circular manner, such that we can perform *
|
* instance of T. They each point to each other in a circular manner, such that we can perform
|
||||||
* circular iteration on the elements. Once finished building, we return this first {@link *
|
* circular iteration on the elements. Once finished building, we return this first {@link
|
||||||
* CircularList} object in the sequence.
|
* CircularList} object in the sequence.
|
||||||
*
|
*
|
||||||
* @param <T> - Element type stored in the {@link CircularList}
|
* @param <T> - Element type stored in the {@link CircularList}
|
||||||
|
|
|
@ -136,8 +136,6 @@ public class ImprovedInputStream extends FilterInputStream {
|
||||||
* Overridable method that's called by {@link #close()}.
|
* Overridable method that's called by {@link #close()}.
|
||||||
*
|
*
|
||||||
* <p>This method does nothing by default.
|
* <p>This method does nothing by default.
|
||||||
*
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
protected void onClose() throws IOException {
|
protected void onClose() throws IOException {
|
||||||
// Does nothing by default.
|
// Does nothing by default.
|
||||||
|
|
|
@ -115,8 +115,6 @@ public class ImprovedOutputStream extends FilterOutputStream {
|
||||||
* Overridable method that's called by {@link #close()}.
|
* Overridable method that's called by {@link #close()}.
|
||||||
*
|
*
|
||||||
* <p>This method does nothing by default.
|
* <p>This method does nothing by default.
|
||||||
*
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
protected void onClose() throws IOException {
|
protected void onClose() throws IOException {
|
||||||
// Does nothing by default.
|
// Does nothing by default.
|
||||||
|
|
|
@ -86,7 +86,7 @@ public final class NetworkUtils {
|
||||||
* href="http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4665037">issue</a> in {@link
|
* href="http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4665037">issue</a> in {@link
|
||||||
* InetAddress#getLocalHost}.
|
* InetAddress#getLocalHost}.
|
||||||
*
|
*
|
||||||
* <p><b>Note:</b> This code was pilfered from {@link "com.google.net.base.LocalHost"} which was
|
* <p><b>Note:</b> This code was pilfered from {@code com.google.net.base.LocalHost} which was
|
||||||
* never made open source.
|
* never made open source.
|
||||||
*
|
*
|
||||||
* @throws UnknownHostException if the local host could not be resolved into an address
|
* @throws UnknownHostException if the local host could not be resolved into an address
|
||||||
|
|
|
@ -32,8 +32,6 @@ import java.lang.annotation.Target;
|
||||||
*
|
*
|
||||||
* <p>When this annotation is used on methods, it means that you should not override the method
|
* <p>When this annotation is used on methods, it means that you should not override the method
|
||||||
* and it's only non-{@code final} so it can be mocked.
|
* and it's only non-{@code final} so it can be mocked.
|
||||||
*
|
|
||||||
* @see google.registry.testing.InjectRule
|
|
||||||
*/
|
*/
|
||||||
@Documented
|
@Documented
|
||||||
@Retention(SOURCE)
|
@Retention(SOURCE)
|
||||||
|
|
|
@ -416,8 +416,6 @@ public final class PosixTarHeader {
|
||||||
* <p>The modified time is always stored as a UNIX timestamp which is seconds since the UNIX
|
* <p>The modified time is always stored as a UNIX timestamp which is seconds since the UNIX
|
||||||
* epoch in UTC time. Because {@link DateTime} has millisecond precision, it gets rounded down
|
* epoch in UTC time. Because {@link DateTime} has millisecond precision, it gets rounded down
|
||||||
* (floor) to the second.
|
* (floor) to the second.
|
||||||
*
|
|
||||||
* @throws NullPointerException
|
|
||||||
*/
|
*/
|
||||||
public Builder setMtime(DateTime mtime) {
|
public Builder setMtime(DateTime mtime) {
|
||||||
checkNotNull(mtime, "mtime");
|
checkNotNull(mtime, "mtime");
|
||||||
|
|
|
@ -68,7 +68,7 @@ public class Retrier implements Serializable {
|
||||||
* original exception is propagated through to the caller. Checked exceptions are wrapped in a
|
* original exception is propagated through to the caller. Checked exceptions are wrapped in a
|
||||||
* RuntimeException, while unchecked exceptions are propagated as-is.
|
* RuntimeException, while unchecked exceptions are propagated as-is.
|
||||||
*
|
*
|
||||||
* @return <V> the value returned by the {@link Callable}.
|
* @return the value returned by the {@link Callable}.
|
||||||
*/
|
*/
|
||||||
public <V> V callWithRetry(Callable<V> callable, Predicate<Throwable> isRetryable) {
|
public <V> V callWithRetry(Callable<V> callable, Predicate<Throwable> isRetryable) {
|
||||||
return callWithRetry(callable, LOGGING_FAILURE_REPORTER, isRetryable);
|
return callWithRetry(callable, LOGGING_FAILURE_REPORTER, isRetryable);
|
||||||
|
@ -85,7 +85,7 @@ public class Retrier implements Serializable {
|
||||||
*
|
*
|
||||||
* <p>Uses a default FailureReporter that logs before each retry.
|
* <p>Uses a default FailureReporter that logs before each retry.
|
||||||
*
|
*
|
||||||
* @return <V> the value returned by the {@link Callable}.
|
* @return the value returned by the {@link Callable}.
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final <V> V callWithRetry(
|
public final <V> V callWithRetry(
|
||||||
|
@ -117,7 +117,7 @@ public class Retrier implements Serializable {
|
||||||
* exception is propagated through to the caller. Checked exceptions are wrapped in a
|
* exception is propagated through to the caller. Checked exceptions are wrapped in a
|
||||||
* RuntimeException, while unchecked exceptions are propagated as-is.
|
* RuntimeException, while unchecked exceptions are propagated as-is.
|
||||||
*
|
*
|
||||||
* @return <V> the value returned by the {@link Callable}.
|
* @return the value returned by the {@link Callable}.
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final <V> V callWithRetry(
|
public final <V> V callWithRetry(
|
||||||
|
|
|
@ -30,7 +30,7 @@ import java.util.function.Predicate;
|
||||||
/** Utilities methods related to reflection. */
|
/** Utilities methods related to reflection. */
|
||||||
public class TypeUtils {
|
public class TypeUtils {
|
||||||
|
|
||||||
/** A {@TypeToken} that removes an ugly cast in the common cases of getting a known type. */
|
/** A {@code TypeToken} that removes an ugly cast in the common cases of getting a known type. */
|
||||||
public static class TypeInstantiator<T> extends TypeToken<T> {
|
public static class TypeInstantiator<T> extends TypeToken<T> {
|
||||||
protected TypeInstantiator(Class<?> declaringClass) {
|
protected TypeInstantiator(Class<?> declaringClass) {
|
||||||
super(declaringClass);
|
super(declaringClass);
|
||||||
|
@ -94,9 +94,7 @@ public class TypeUtils {
|
||||||
return castedClass;
|
return castedClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** Aggregates enum "values" in a typesafe enum pattern into a string->field map. */
|
||||||
* Aggregates enum "values" in a typesafe enum pattern into a string->field map.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static <T> ImmutableMap<String, T> getTypesafeEnumMapping(Class<T> clazz) {
|
public static <T> ImmutableMap<String, T> getTypesafeEnumMapping(Class<T> clazz) {
|
||||||
ImmutableMap.Builder<String, T> builder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, T> builder = new ImmutableMap.Builder<>();
|
||||||
|
|
Loading…
Add table
Reference in a new issue