mirror of
https://github.com/google/nomulus.git
synced 2025-04-30 03:57:51 +02:00
Persist two singleton entities in SQL tables (#860)
* Persist two singleton entities in SQL tables A table might not be the best place to store singleton entities, but by doing this we ensure we can easily inspect them later and use the same sort of persistence logic for these that we do elsewhere. ServerSecret is stored upon retrieval so that we make sure that the same secret is used in both Datastore and SQL (we wouldn't want to change it). * Responses to CR * Don't have a separate ID for the singleton entities * Rename secret UUID * Rename and regenerate
This commit is contained in:
parent
8a1f5102ce
commit
9acac1a6a4
15 changed files with 759 additions and 215 deletions
|
@ -20,15 +20,16 @@ import com.googlecode.objectify.Key;
|
|||
import com.googlecode.objectify.annotation.Id;
|
||||
import com.googlecode.objectify.annotation.Parent;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import javax.persistence.MappedSuperclass;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
/** A singleton entity in Datastore. */
|
||||
@MappedSuperclass
|
||||
public abstract class CrossTldSingleton extends ImmutableObject {
|
||||
|
||||
public static final long SINGLETON_ID = 1; // There is always exactly one of these.
|
||||
|
||||
@Id
|
||||
long id = SINGLETON_ID;
|
||||
@Id @Transient long id = SINGLETON_ID;
|
||||
|
||||
@Parent
|
||||
Key<EntityGroupRoot> parent = getCrossTldKey();
|
||||
@Transient @Parent Key<EntityGroupRoot> parent = getCrossTldKey();
|
||||
}
|
||||
|
|
|
@ -14,29 +14,43 @@
|
|||
|
||||
package google.registry.model.server;
|
||||
|
||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||
import static google.registry.model.common.EntityGroupRoot.getCrossTldKey;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.primitives.Longs;
|
||||
import com.googlecode.objectify.Key;
|
||||
import com.googlecode.objectify.annotation.Entity;
|
||||
import com.googlecode.objectify.annotation.Ignore;
|
||||
import com.googlecode.objectify.annotation.OnLoad;
|
||||
import com.googlecode.objectify.annotation.Unindex;
|
||||
import google.registry.model.annotations.NotBackedUp;
|
||||
import google.registry.model.annotations.NotBackedUp.Reason;
|
||||
import google.registry.model.common.CrossTldSingleton;
|
||||
import google.registry.persistence.VKey;
|
||||
import google.registry.schema.replay.DatastoreEntity;
|
||||
import google.registry.schema.replay.SqlEntity;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.PostLoad;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
/** A secret number used for generating tokens (such as XSRF tokens). */
|
||||
@Entity
|
||||
@javax.persistence.Entity
|
||||
@Unindex
|
||||
@NotBackedUp(reason = Reason.AUTO_GENERATED)
|
||||
// TODO(b/27427316): Replace this with an entry in KMSKeyring
|
||||
public class ServerSecret extends CrossTldSingleton {
|
||||
public class ServerSecret extends CrossTldSingleton implements DatastoreEntity, SqlEntity {
|
||||
|
||||
/**
|
||||
* Cache of the singleton ServerSecret instance that creates it if not present.
|
||||
|
@ -45,28 +59,34 @@ public class ServerSecret extends CrossTldSingleton {
|
|||
* Supplier that can be reset for testing purposes.
|
||||
*/
|
||||
private static final LoadingCache<Class<ServerSecret>, ServerSecret> CACHE =
|
||||
CacheBuilder.newBuilder().build(
|
||||
CacheBuilder.newBuilder()
|
||||
.build(
|
||||
new CacheLoader<Class<ServerSecret>, ServerSecret>() {
|
||||
@Override
|
||||
public ServerSecret load(Class<ServerSecret> unused) {
|
||||
// Fast path - non-transactional load to hit memcache.
|
||||
ServerSecret secret = ofy().load().entity(new ServerSecret()).now();
|
||||
if (secret != null) {
|
||||
return retrieveAndSaveSecret();
|
||||
}
|
||||
});
|
||||
|
||||
private static ServerSecret retrieveAndSaveSecret() {
|
||||
VKey<ServerSecret> key =
|
||||
VKey.create(
|
||||
ServerSecret.class,
|
||||
SINGLETON_ID,
|
||||
Key.create(getCrossTldKey(), ServerSecret.class, SINGLETON_ID));
|
||||
return tm().transact(
|
||||
() -> {
|
||||
// transactionally create a new ServerSecret (once per app setup) if necessary.
|
||||
// return the ofy() result during Datastore-primary phase
|
||||
ServerSecret secret =
|
||||
ofyTm().maybeLoad(key).orElseGet(() -> create(UUID.randomUUID()));
|
||||
// During a dual-write period, write it to both Datastore and SQL
|
||||
// even if we didn't have to retrieve it from the DB
|
||||
ofyTm().transact(() -> ofyTm().putWithoutBackup(secret));
|
||||
jpaTm().transact(() -> jpaTm().putWithoutBackup(secret));
|
||||
return secret;
|
||||
}
|
||||
// Slow path - transactionally create a new ServerSecret (once per app setup).
|
||||
return tm().transact(() -> {
|
||||
// Check again for an existing secret within the transaction to avoid races.
|
||||
ServerSecret secret1 = ofy().load().entity(new ServerSecret()).now();
|
||||
if (secret1 == null) {
|
||||
UUID uuid = UUID.randomUUID();
|
||||
secret1 = create(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits());
|
||||
ofy().saveWithoutBackup().entity(secret1).now();
|
||||
}
|
||||
return secret1;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/** Returns the global ServerSecret instance, creating it if one isn't already in Datastore. */
|
||||
public static ServerSecret get() {
|
||||
|
@ -77,23 +97,38 @@ public class ServerSecret extends CrossTldSingleton {
|
|||
}
|
||||
}
|
||||
|
||||
/** Most significant 8 bytes of the UUID value. */
|
||||
long mostSignificant;
|
||||
/** Most significant 8 bytes of the UUID value (stored separately for legacy purposes). */
|
||||
@Transient long mostSignificant;
|
||||
|
||||
/** Least significant 8 bytes of the UUID value. */
|
||||
long leastSignificant;
|
||||
/** Least significant 8 bytes of the UUID value (stored separately for legacy purposes). */
|
||||
@Transient long leastSignificant;
|
||||
|
||||
@VisibleForTesting
|
||||
static ServerSecret create(long mostSignificant, long leastSignificant) {
|
||||
ServerSecret secret = new ServerSecret();
|
||||
secret.mostSignificant = mostSignificant;
|
||||
secret.leastSignificant = leastSignificant;
|
||||
return secret;
|
||||
/** The UUID value itself. */
|
||||
@Id
|
||||
@Column(columnDefinition = "uuid")
|
||||
@Ignore
|
||||
UUID secret;
|
||||
|
||||
/** Convert the Datastore representation to SQL. */
|
||||
@OnLoad
|
||||
void onLoad() {
|
||||
secret = new UUID(mostSignificant, leastSignificant);
|
||||
}
|
||||
|
||||
/** Returns the value of this ServerSecret as a UUID. */
|
||||
public UUID asUuid() {
|
||||
return new UUID(mostSignificant, leastSignificant);
|
||||
/** Convert the SQL representation to Datastore. */
|
||||
@PostLoad
|
||||
void postLoad() {
|
||||
mostSignificant = secret.getMostSignificantBits();
|
||||
leastSignificant = secret.getLeastSignificantBits();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static ServerSecret create(UUID uuid) {
|
||||
ServerSecret secret = new ServerSecret();
|
||||
secret.mostSignificant = uuid.getMostSignificantBits();
|
||||
secret.leastSignificant = uuid.getLeastSignificantBits();
|
||||
secret.secret = uuid;
|
||||
return secret;
|
||||
}
|
||||
|
||||
/** Returns the value of this ServerSecret as a byte array. */
|
||||
|
@ -104,6 +139,16 @@ public class ServerSecret extends CrossTldSingleton {
|
|||
.array();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<SqlEntity> toSqlEntities() {
|
||||
return ImmutableList.of(); // dually-written
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<DatastoreEntity> toDatastoreEntities() {
|
||||
return ImmutableList.of(); // dually-written
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static void resetCache() {
|
||||
CACHE.invalidateAll();
|
||||
|
|
|
@ -15,31 +15,50 @@
|
|||
package google.registry.model.tmch;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||
import static google.registry.model.common.EntityGroupRoot.getCrossTldKey;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.googlecode.objectify.Key;
|
||||
import com.googlecode.objectify.annotation.Entity;
|
||||
import google.registry.model.annotations.NotBackedUp;
|
||||
import google.registry.model.annotations.NotBackedUp.Reason;
|
||||
import google.registry.model.common.CrossTldSingleton;
|
||||
import javax.annotation.Nullable;
|
||||
import google.registry.model.tmch.TmchCrl.TmchCrlId;
|
||||
import google.registry.persistence.VKey;
|
||||
import google.registry.schema.replay.DatastoreEntity;
|
||||
import google.registry.schema.replay.SqlEntity;
|
||||
import java.io.Serializable;
|
||||
import java.util.Optional;
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.IdClass;
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/** Datastore singleton for ICANN's TMCH CA certificate revocation list (CRL). */
|
||||
@Entity
|
||||
@javax.persistence.Entity
|
||||
@Immutable
|
||||
@NotBackedUp(reason = Reason.EXTERNALLY_SOURCED)
|
||||
public final class TmchCrl extends CrossTldSingleton {
|
||||
@IdClass(TmchCrlId.class)
|
||||
public final class TmchCrl extends CrossTldSingleton implements DatastoreEntity, SqlEntity {
|
||||
|
||||
String crl;
|
||||
DateTime updated;
|
||||
String url;
|
||||
@Id String crl;
|
||||
|
||||
@Id DateTime updated;
|
||||
|
||||
@Id String url;
|
||||
|
||||
/** Returns the singleton instance of this entity, without memoization. */
|
||||
@Nullable
|
||||
public static TmchCrl get() {
|
||||
return ofy().load().entity(new TmchCrl()).now();
|
||||
public static Optional<TmchCrl> get() {
|
||||
VKey<TmchCrl> key =
|
||||
VKey.create(
|
||||
TmchCrl.class, SINGLETON_ID, Key.create(getCrossTldKey(), TmchCrl.class, SINGLETON_ID));
|
||||
// return the ofy() result during Datastore-primary phase
|
||||
return ofyTm().transact(() -> ofyTm().maybeLoad(key));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -47,16 +66,18 @@ public final class TmchCrl extends CrossTldSingleton {
|
|||
*
|
||||
* <p>Please do not call this function unless your CRL is properly formatted, signed by the root,
|
||||
* and actually newer than the one currently in Datastore.
|
||||
*
|
||||
* <p>During the dual-write period, we write to both Datastore and SQL
|
||||
*/
|
||||
public static void set(final String crl, final String url) {
|
||||
tm()
|
||||
.transactNew(
|
||||
tm().transact(
|
||||
() -> {
|
||||
TmchCrl tmchCrl = new TmchCrl();
|
||||
tmchCrl.updated = tm().getTransactionTime();
|
||||
tmchCrl.crl = checkNotNull(crl, "crl");
|
||||
tmchCrl.url = checkNotNull(url, "url");
|
||||
ofy().saveWithoutBackup().entity(tmchCrl);
|
||||
ofyTm().transactNew(() -> ofyTm().putWithoutBackup(tmchCrl));
|
||||
jpaTm().transactNew(() -> jpaTm().putWithoutBackup(tmchCrl));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -74,4 +95,36 @@ public final class TmchCrl extends CrossTldSingleton {
|
|||
public final DateTime getUpdated() {
|
||||
return updated;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<SqlEntity> toSqlEntities() {
|
||||
return ImmutableList.of(); // dually-written
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<DatastoreEntity> toDatastoreEntities() {
|
||||
return ImmutableList.of(); // dually-written
|
||||
}
|
||||
|
||||
static class TmchCrlId implements Serializable {
|
||||
|
||||
@Column(name = "certificateRevocations")
|
||||
String crl;
|
||||
|
||||
@Column(name = "updateTimestamp")
|
||||
DateTime updated;
|
||||
|
||||
String url;
|
||||
|
||||
/** Hibernate requires this default constructor. */
|
||||
private TmchCrlId() {}
|
||||
|
||||
static TmchCrlId create(String crl, DateTime updated, String url) {
|
||||
TmchCrlId result = new TmchCrlId();
|
||||
result.crl = crl;
|
||||
result.updated = updated;
|
||||
result.url = url;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ import java.security.GeneralSecurityException;
|
|||
import java.security.cert.CertificateParsingException;
|
||||
import java.security.cert.X509CRL;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.Optional;
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
import javax.annotation.concurrent.ThreadSafe;
|
||||
import javax.inject.Inject;
|
||||
|
@ -82,14 +83,15 @@ public final class TmchCertificateAuthority {
|
|||
new CacheLoader<TmchCaMode, X509CRL>() {
|
||||
@Override
|
||||
public X509CRL load(final TmchCaMode tmchCaMode) throws GeneralSecurityException {
|
||||
TmchCrl storedCrl = TmchCrl.get();
|
||||
String crlContents;
|
||||
if (storedCrl == null) {
|
||||
Optional<TmchCrl> storedCrl = TmchCrl.get();
|
||||
String crlContents =
|
||||
storedCrl
|
||||
.map(TmchCrl::getCrl)
|
||||
.orElseGet(
|
||||
() -> {
|
||||
String file = (tmchCaMode == PILOT) ? CRL_PILOT_FILE : CRL_FILE;
|
||||
crlContents = readResourceUtf8(TmchCertificateAuthority.class, file);
|
||||
} else {
|
||||
crlContents = storedCrl.getCrl();
|
||||
}
|
||||
return readResourceUtf8(TmchCertificateAuthority.class, file);
|
||||
});
|
||||
X509CRL crl = X509Utils.loadCrl(crlContents);
|
||||
crl.verify(ROOT_CERTS.get(tmchCaMode).getPublicKey());
|
||||
return crl;
|
||||
|
|
|
@ -63,8 +63,10 @@
|
|||
<class>google.registry.model.reporting.DomainTransactionRecord</class>
|
||||
<class>google.registry.model.reporting.Spec11ThreatMatch</class>
|
||||
<class>google.registry.model.server.KmsSecretRevision</class>
|
||||
<class>google.registry.model.server.ServerSecret</class>
|
||||
<class>google.registry.model.smd.SignedMarkRevocationList</class>
|
||||
<class>google.registry.model.tmch.ClaimsListShard</class>
|
||||
<class>google.registry.model.tmch.TmchCrl</class>
|
||||
<class>google.registry.persistence.transaction.TransactionEntity</class>
|
||||
<class>google.registry.schema.cursor.Cursor</class>
|
||||
<class>google.registry.schema.domain.RegistryLock</class>
|
||||
|
|
|
@ -15,21 +15,25 @@
|
|||
package google.registry.model.server;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.model.common.CrossTldSingleton.SINGLETON_ID;
|
||||
import static google.registry.model.common.EntityGroupRoot.getCrossTldKey;
|
||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
|
||||
import com.googlecode.objectify.Key;
|
||||
import google.registry.model.EntityTestCase;
|
||||
import google.registry.model.ofy.RequestCapturingAsyncDatastoreService;
|
||||
import google.registry.testing.AppEngineExtension;
|
||||
import google.registry.persistence.VKey;
|
||||
import java.util.UUID;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
|
||||
/** Unit tests for {@link ServerSecret}. */
|
||||
public class ServerSecretTest {
|
||||
public class ServerSecretTest extends EntityTestCase {
|
||||
|
||||
@RegisterExtension
|
||||
public final AppEngineExtension appEngine =
|
||||
AppEngineExtension.builder().withDatastoreAndCloudSql().build();
|
||||
ServerSecretTest() {
|
||||
super(JpaEntityCoverageCheck.ENABLED);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void beforeEach() {
|
||||
|
@ -41,18 +45,20 @@ public class ServerSecretTest {
|
|||
ServerSecret secret = ServerSecret.get();
|
||||
assertThat(secret).isNotNull();
|
||||
assertThat(ofy().load().entity(new ServerSecret()).now()).isEqualTo(secret);
|
||||
assertThat(loadFromSql()).isEqualTo(secret);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGet_existingSecret_returned() {
|
||||
ServerSecret secret = ServerSecret.create(123, 456);
|
||||
ServerSecret secret = ServerSecret.create(new UUID(123, 456));
|
||||
ofy().saveWithoutBackup().entity(secret).now();
|
||||
assertThat(ServerSecret.get()).isEqualTo(secret);
|
||||
assertThat(ofy().load().entity(new ServerSecret()).now()).isEqualTo(secret);
|
||||
assertThat(loadFromSql()).isEqualTo(secret);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGet_cachedSecret_returnedWithoutDatastoreRead() {
|
||||
void testGet_cachedSecret() {
|
||||
int numInitialReads = RequestCapturingAsyncDatastoreService.getReads().size();
|
||||
ServerSecret secret = ServerSecret.get();
|
||||
int numReads = RequestCapturingAsyncDatastoreService.getReads().size();
|
||||
|
@ -62,16 +68,28 @@ public class ServerSecretTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
void testAsUuid() {
|
||||
UUID uuid = ServerSecret.create(123, 456).asUuid();
|
||||
assertThat(uuid.getMostSignificantBits()).isEqualTo(123);
|
||||
assertThat(uuid.getLeastSignificantBits()).isEqualTo(456);
|
||||
void testAsBytes() {
|
||||
byte[] bytes = ServerSecret.create(new UUID(123, 0x456)).asBytes();
|
||||
assertThat(bytes).isEqualTo(new byte[] {0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0x4, 0x56});
|
||||
}
|
||||
|
||||
@Test
|
||||
void testAsBytes() {
|
||||
byte[] bytes = ServerSecret.create(123, 0x456).asBytes();
|
||||
assertThat(bytes)
|
||||
.isEqualTo(new byte[] {0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0x4, 0x56});
|
||||
private static ServerSecret loadFromSql() {
|
||||
return jpaTm()
|
||||
.transact(
|
||||
() ->
|
||||
jpaTm()
|
||||
.getEntityManager()
|
||||
.createQuery("FROM ServerSecret", ServerSecret.class)
|
||||
.setMaxResults(1)
|
||||
.getResultStream()
|
||||
.findFirst()
|
||||
.get());
|
||||
}
|
||||
|
||||
private static VKey<ServerSecret> createKey() {
|
||||
return VKey.create(
|
||||
ServerSecret.class,
|
||||
SINGLETON_ID,
|
||||
Key.create(getCrossTldKey(), ServerSecret.class, SINGLETON_ID));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,22 +15,48 @@
|
|||
package google.registry.model.tmch;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||
|
||||
import google.registry.testing.AppEngineExtension;
|
||||
import google.registry.model.EntityTestCase;
|
||||
import java.util.Optional;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
|
||||
/** Unit tests for {@link TmchCrl}. */
|
||||
public class TmchCrlTest {
|
||||
public class TmchCrlTest extends EntityTestCase {
|
||||
|
||||
@RegisterExtension
|
||||
public final AppEngineExtension appEngine =
|
||||
AppEngineExtension.builder().withDatastoreAndCloudSql().build();
|
||||
TmchCrlTest() {
|
||||
super(JpaEntityCoverageCheck.ENABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess() {
|
||||
assertThat(TmchCrl.get()).isNull();
|
||||
TmchCrl.set("lolcat", "http://lol.cat");
|
||||
assertThat(TmchCrl.get().getCrl()).isEqualTo("lolcat");
|
||||
assertThat(TmchCrl.get()).isEqualTo(Optional.empty());
|
||||
TmchCrl.set("lolcat", "https://lol.cat");
|
||||
assertThat(TmchCrl.get().get().getCrl()).isEqualTo("lolcat");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDualWrite() {
|
||||
TmchCrl expected = new TmchCrl();
|
||||
expected.crl = "lolcat";
|
||||
expected.url = "https://lol.cat";
|
||||
expected.updated = fakeClock.nowUtc();
|
||||
TmchCrl.set("lolcat", "https://lol.cat");
|
||||
assertThat(ofy().load().entity(new TmchCrl()).now()).isEqualTo(expected);
|
||||
assertThat(loadFromSql()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
private static TmchCrl loadFromSql() {
|
||||
return jpaTm()
|
||||
.transact(
|
||||
() ->
|
||||
jpaTm()
|
||||
.getEntityManager()
|
||||
.createQuery("FROM TmchCrl", TmchCrl.class)
|
||||
.setMaxResults(1)
|
||||
.getResultStream()
|
||||
.findFirst()
|
||||
.get());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,12 +43,13 @@ import org.junit.jupiter.api.extension.RegisterExtension;
|
|||
/** Unit tests for {@link RequestAuthenticator}. */
|
||||
class RequestAuthenticatorTest {
|
||||
|
||||
@RegisterExtension final AppEngineExtension appEngine = AppEngineExtension.builder().build();
|
||||
@RegisterExtension
|
||||
final AppEngineExtension appEngine =
|
||||
AppEngineExtension.builder().withDatastoreAndCloudSql().build();
|
||||
|
||||
private static final AuthSettings AUTH_NONE = AuthSettings.create(
|
||||
ImmutableList.of(AuthMethod.INTERNAL),
|
||||
AuthLevel.NONE,
|
||||
UserPolicy.IGNORED);
|
||||
private static final AuthSettings AUTH_NONE =
|
||||
AuthSettings.create(
|
||||
ImmutableList.of(AuthMethod.INTERNAL), AuthLevel.NONE, UserPolicy.IGNORED);
|
||||
|
||||
private static final AuthSettings AUTH_INTERNAL_OR_ADMIN = AuthSettings.create(
|
||||
ImmutableList.of(AuthMethod.INTERNAL),
|
||||
|
|
|
@ -30,8 +30,10 @@ import google.registry.model.registry.RegistryTest;
|
|||
import google.registry.model.registry.label.ReservedListSqlDaoTest;
|
||||
import google.registry.model.reporting.Spec11ThreatMatchTest;
|
||||
import google.registry.model.server.KmsSecretRevisionSqlDaoTest;
|
||||
import google.registry.model.server.ServerSecretTest;
|
||||
import google.registry.model.smd.SignedMarkRevocationListDaoTest;
|
||||
import google.registry.model.tmch.ClaimsListDaoTest;
|
||||
import google.registry.model.tmch.TmchCrlTest;
|
||||
import google.registry.persistence.transaction.JpaEntityCoverageExtension;
|
||||
import google.registry.persistence.transaction.JpaTestRules.JpaIntegrationWithCoverageExtension;
|
||||
import google.registry.schema.cursor.CursorDaoTest;
|
||||
|
@ -95,8 +97,10 @@ import org.junit.runner.RunWith;
|
|||
RegistryTest.class,
|
||||
ReservedListSqlDaoTest.class,
|
||||
RegistryLockDaoTest.class,
|
||||
ServerSecretTest.class,
|
||||
SignedMarkRevocationListDaoTest.class,
|
||||
Spec11ThreatMatchTest.class,
|
||||
TmchCrlTest.class,
|
||||
// AfterSuiteTest must be the last entry. See class javadoc for details.
|
||||
AfterSuiteTest.class
|
||||
})
|
||||
|
|
|
@ -261,19 +261,19 @@ td.section {
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="property_name">generated on</td>
|
||||
<td class="property_value">2020-11-04 16:40:52.942256</td>
|
||||
<td class="property_value">2020-11-09 17:11:19.905881</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="property_name">last flyway file</td>
|
||||
<td id="lastFlywayFile" class="property_value">V72__add_missing_foreign_keys.sql</td>
|
||||
<td id="lastFlywayFile" class="property_value">V73__singleton_entities.sql</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<svg viewbox="0.00 0.00 6024.44 2117.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="erDiagram" style="overflow: hidden; width: 100%; height: 800px"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 2113.5)">
|
||||
<svg viewbox="0.00 0.00 6024.44 2289.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="erDiagram" style="overflow: hidden; width: 100%; height: 800px"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 2285.5)">
|
||||
<title>SchemaCrawler_Diagram</title>
|
||||
<polygon fill="white" stroke="transparent" points="-4,4 -4,-2113.5 6020.44,-2113.5 6020.44,4 -4,4" />
|
||||
<polygon fill="white" stroke="transparent" points="-4,4 -4,-2285.5 6020.44,-2285.5 6020.44,4 -4,4" />
|
||||
<text text-anchor="start" x="5747.94" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
generated by
|
||||
</text>
|
||||
|
@ -284,7 +284,7 @@ td.section {
|
|||
generated on
|
||||
</text>
|
||||
<text text-anchor="start" x="5830.94" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
2020-11-04 16:40:52.942256
|
||||
2020-11-09 17:11:19.905881
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="5743.44,-4 5743.44,-44 6008.44,-44 6008.44,-4 5743.44,-4" /> <!-- allocationtoken_a08ccbef -->
|
||||
<g id="node1" class="node">
|
||||
|
@ -1352,7 +1352,7 @@ td.section {
|
|||
fk_domain_transfer_losing_registrar_id
|
||||
</text>
|
||||
</g> <!-- tld_f1fa57e2 -->
|
||||
<g id="node34" class="node">
|
||||
<g id="node35" class="node">
|
||||
<title>tld_f1fa57e2</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="2521.5,-1406 2521.5,-1425 2594.5,-1425 2594.5,-1406 2521.5,-1406" />
|
||||
<text text-anchor="start" x="2523.5" y="-1412.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
|
@ -2956,97 +2956,153 @@ td.section {
|
|||
<text text-anchor="start" x="5480" y="-1908.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
fkgq03rk0bt1hb915dnyvd3vnfc
|
||||
</text>
|
||||
</g> <!-- signedmarkrevocationentry_99c39721 -->
|
||||
</g> <!-- serversecret_6cc90f09 -->
|
||||
<g id="node32" class="node">
|
||||
<title>serversecret_6cc90f09</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5747.5,-1982 5747.5,-2001 5878.5,-2001 5878.5,-1982 5747.5,-1982" />
|
||||
<text text-anchor="start" x="5749.5" y="-1988.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.ServerSecret
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5878.5,-1982 5878.5,-2001 5955.5,-2001 5955.5,-1982 5878.5,-1982" />
|
||||
<text text-anchor="start" x="5916.5" y="-1987.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="5749.5" y="-1969.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
secret
|
||||
</text>
|
||||
<text text-anchor="start" x="5832.5" y="-1968.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5880.5" y="-1968.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
uuid not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="5746.5,-1962 5746.5,-2002 5956.5,-2002 5956.5,-1962 5746.5,-1962" />
|
||||
</g> <!-- signedmarkrevocationentry_99c39721 -->
|
||||
<g id="node33" class="node">
|
||||
<title>signedmarkrevocationentry_99c39721</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5698.5,-2000 5698.5,-2019 5931.5,-2019 5931.5,-2000 5698.5,-2000" />
|
||||
<text text-anchor="start" x="5700.5" y="-2006.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5698.5,-2067 5698.5,-2086 5931.5,-2086 5931.5,-2067 5698.5,-2067" />
|
||||
<text text-anchor="start" x="5700.5" y="-2073.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.SignedMarkRevocationEntry
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5931.5,-2000 5931.5,-2019 6005.5,-2019 6005.5,-2000 5931.5,-2000" />
|
||||
<text text-anchor="start" x="5966.5" y="-2005.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5931.5,-2067 5931.5,-2086 6005.5,-2086 6005.5,-2067 5931.5,-2067" />
|
||||
<text text-anchor="start" x="5966.5" y="-2072.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="5700.5" y="-1987.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="5700.5" y="-2054.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
revision_id
|
||||
</text>
|
||||
<text text-anchor="start" x="5850.5" y="-1986.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5850.5" y="-2053.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5933.5" y="-1986.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5933.5" y="-2053.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
int8 not null
|
||||
</text>
|
||||
<text text-anchor="start" x="5700.5" y="-1968.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="5700.5" y="-2035.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
smd_id
|
||||
</text>
|
||||
<text text-anchor="start" x="5850.5" y="-1967.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5850.5" y="-2034.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5933.5" y="-1967.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5933.5" y="-2034.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="5697,-1961.5 5697,-2020.5 6006,-2020.5 6006,-1961.5 5697,-1961.5" />
|
||||
<polygon fill="none" stroke="#888888" points="5697,-2028.5 5697,-2087.5 6006,-2087.5 6006,-2028.5 5697,-2028.5" />
|
||||
</g> <!-- signedmarkrevocationlist_c5d968fb -->
|
||||
<g id="node33" class="node">
|
||||
<g id="node34" class="node">
|
||||
<title>signedmarkrevocationlist_c5d968fb</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5077.5,-2000 5077.5,-2019 5299.5,-2019 5299.5,-2000 5077.5,-2000" />
|
||||
<text text-anchor="start" x="5079.5" y="-2006.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5077.5,-2067 5077.5,-2086 5299.5,-2086 5299.5,-2067 5077.5,-2067" />
|
||||
<text text-anchor="start" x="5079.5" y="-2073.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.SignedMarkRevocationList
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5299.5,-2000 5299.5,-2019 5409.5,-2019 5409.5,-2000 5299.5,-2000" />
|
||||
<text text-anchor="start" x="5370.5" y="-2005.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5299.5,-2067 5299.5,-2086 5409.5,-2086 5409.5,-2067 5299.5,-2067" />
|
||||
<text text-anchor="start" x="5370.5" y="-2072.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="5079.5" y="-1987.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="5079.5" y="-2054.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
revision_id
|
||||
</text>
|
||||
<text text-anchor="start" x="5224.5" y="-1986.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5224.5" y="-2053.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5301.5" y="-1986.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5301.5" y="-2053.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
bigserial not null
|
||||
</text>
|
||||
<text text-anchor="start" x="5224.5" y="-1967.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5224.5" y="-2034.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5301.5" y="-1967.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5301.5" y="-2034.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
auto-incremented
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="5076.5,-1961.5 5076.5,-2020.5 5410.5,-2020.5 5410.5,-1961.5 5076.5,-1961.5" />
|
||||
<polygon fill="none" stroke="#888888" points="5076.5,-2028.5 5076.5,-2087.5 5410.5,-2087.5 5410.5,-2028.5 5076.5,-2028.5" />
|
||||
</g> <!-- signedmarkrevocationentry_99c39721->signedmarkrevocationlist_c5d968fb -->
|
||||
<g id="edge78" class="edge">
|
||||
<title>signedmarkrevocationentry_99c39721:w->signedmarkrevocationlist_c5d968fb:e</title>
|
||||
<path fill="none" stroke="black" d="M5679.48,-1990C5569.8,-1990 5533.86,-1990 5420.6,-1990" />
|
||||
<polygon fill="black" stroke="black" points="5687.5,-1990 5697.5,-1994.5 5692.5,-1990 5697.5,-1990 5697.5,-1990 5697.5,-1990 5692.5,-1990 5697.5,-1985.5 5687.5,-1990 5687.5,-1990" />
|
||||
<ellipse fill="none" stroke="black" cx="5683.5" cy="-1990" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="5411.5,-1995 5411.5,-1985 5413.5,-1985 5413.5,-1995 5411.5,-1995" />
|
||||
<polyline fill="none" stroke="black" points="5410.5,-1990 5415.5,-1990 " />
|
||||
<polygon fill="black" stroke="black" points="5416.5,-1995 5416.5,-1985 5418.5,-1985 5418.5,-1995 5416.5,-1995" />
|
||||
<polyline fill="none" stroke="black" points="5415.5,-1990 5420.5,-1990 " />
|
||||
<text text-anchor="start" x="5489" y="-1993.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<path fill="none" stroke="black" d="M5679.48,-2057C5569.8,-2057 5533.86,-2057 5420.6,-2057" />
|
||||
<polygon fill="black" stroke="black" points="5687.5,-2057 5697.5,-2061.5 5692.5,-2057 5697.5,-2057 5697.5,-2057 5697.5,-2057 5692.5,-2057 5697.5,-2052.5 5687.5,-2057 5687.5,-2057" />
|
||||
<ellipse fill="none" stroke="black" cx="5683.5" cy="-2057" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="5411.5,-2062 5411.5,-2052 5413.5,-2052 5413.5,-2062 5411.5,-2062" />
|
||||
<polyline fill="none" stroke="black" points="5410.5,-2057 5415.5,-2057 " />
|
||||
<polygon fill="black" stroke="black" points="5416.5,-2062 5416.5,-2052 5418.5,-2052 5418.5,-2062 5416.5,-2062" />
|
||||
<polyline fill="none" stroke="black" points="5415.5,-2057 5420.5,-2057 " />
|
||||
<text text-anchor="start" x="5489" y="-2060.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
fk5ivlhvs3121yx2li5tqh54u4
|
||||
</text>
|
||||
</g> <!-- transaction_d50389d4 -->
|
||||
<g id="node35" class="node">
|
||||
<title>transaction_d50389d4</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5734.5,-2085 5734.5,-2104 5859.5,-2104 5859.5,-2085 5734.5,-2085" />
|
||||
<text text-anchor="start" x="5736.5" y="-2091.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.Transaction
|
||||
</g> <!-- tmchcrl_d282355 -->
|
||||
<g id="node36" class="node">
|
||||
<title>tmchcrl_d282355</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5708.5,-2172 5708.5,-2191 5868.5,-2191 5868.5,-2172 5708.5,-2172" />
|
||||
<text text-anchor="start" x="5710.5" y="-2178.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.TmchCrl
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5859.5,-2085 5859.5,-2104 5969.5,-2104 5969.5,-2085 5859.5,-2085" />
|
||||
<text text-anchor="start" x="5930.5" y="-2090.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5868.5,-2172 5868.5,-2191 5994.5,-2191 5994.5,-2172 5868.5,-2172" />
|
||||
<text text-anchor="start" x="5955.5" y="-2177.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="5736.5" y="-2072.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="5710.5" y="-2159.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
certificate_revocations
|
||||
</text>
|
||||
<text text-anchor="start" x="5862.5" y="-2158.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5870.5" y="-2158.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<text text-anchor="start" x="5710.5" y="-2140.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
update_timestamp
|
||||
</text>
|
||||
<text text-anchor="start" x="5862.5" y="-2139.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5870.5" y="-2139.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
timestamptz not null
|
||||
</text>
|
||||
<text text-anchor="start" x="5710.5" y="-2121.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
url
|
||||
</text>
|
||||
<text text-anchor="start" x="5862.5" y="-2120.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5870.5" y="-2120.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="5707.5,-2114 5707.5,-2192 5995.5,-2192 5995.5,-2114 5707.5,-2114" />
|
||||
</g> <!-- transaction_d50389d4 -->
|
||||
<g id="node37" class="node">
|
||||
<title>transaction_d50389d4</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5734.5,-2257 5734.5,-2276 5859.5,-2276 5859.5,-2257 5734.5,-2257" />
|
||||
<text text-anchor="start" x="5736.5" y="-2263.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.Transaction
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5859.5,-2257 5859.5,-2276 5969.5,-2276 5969.5,-2257 5859.5,-2257" />
|
||||
<text text-anchor="start" x="5930.5" y="-2262.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="5736.5" y="-2244.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
id
|
||||
</text>
|
||||
<text text-anchor="start" x="5803.5" y="-2071.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5803.5" y="-2243.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5861.5" y="-2071.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5861.5" y="-2243.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
bigserial not null
|
||||
</text>
|
||||
<text text-anchor="start" x="5803.5" y="-2052.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5803.5" y="-2224.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5861.5" y="-2052.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5861.5" y="-2224.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
auto-incremented
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="5733,-2046.5 5733,-2105.5 5970,-2105.5 5970,-2046.5 5733,-2046.5" />
|
||||
<polygon fill="none" stroke="#888888" points="5733,-2218.5 5733,-2277.5 5970,-2277.5 5970,-2218.5 5733,-2218.5" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
@ -6461,6 +6517,36 @@ td.section {
|
|||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="serversecret_6cc90f09" class="caption_name">public.ServerSecret</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>secret</i></b></td>
|
||||
<td class="minwidth">uuid not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="section">Primary Key</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="name">ServerSecret_pkey</td>
|
||||
<td class="description right">[primary key]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">secret</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="signedmarkrevocationentry_99c39721" class="caption_name">public.SignedMarkRevocationEntry</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
|
@ -6741,6 +6827,56 @@ td.section {
|
|||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="tmchcrl_d282355" class="caption_name">public.TmchCrl</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>certificate_revocations</i></b></td>
|
||||
<td class="minwidth">text not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>update_timestamp</i></b></td>
|
||||
<td class="minwidth">timestamptz not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>url</i></b></td>
|
||||
<td class="minwidth">text not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="section">Primary Key</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="name">TmchCrl_pkey</td>
|
||||
<td class="description right">[primary key]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">certificate_revocations</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">update_timestamp</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">url</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="transaction_d50389d4" class="caption_name">public.Transaction</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
|
|
|
@ -261,32 +261,32 @@ td.section {
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="property_name">generated on</td>
|
||||
<td class="property_value">2020-11-04 16:40:50.903391</td>
|
||||
<td class="property_value">2020-11-09 17:11:18.25328</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="property_name">last flyway file</td>
|
||||
<td id="lastFlywayFile" class="property_value">V72__add_missing_foreign_keys.sql</td>
|
||||
<td id="lastFlywayFile" class="property_value">V73__singleton_entities.sql</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<svg viewbox="0.00 0.00 6687.18 4012.58" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="erDiagram" style="overflow: hidden; width: 100%; height: 800px"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 4008.58)">
|
||||
<svg viewbox="0.00 0.00 6687.18 4086.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="erDiagram" style="overflow: hidden; width: 100%; height: 800px"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 4082.5)">
|
||||
<title>SchemaCrawler_Diagram</title>
|
||||
<polygon fill="white" stroke="transparent" points="-4,4 -4,-4008.58 6683.18,-4008.58 6683.18,4 -4,4" />
|
||||
<text text-anchor="start" x="6410.68" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="white" stroke="transparent" points="-4,4 -4,-4082.5 6683.18,-4082.5 6683.18,4 -4,4" />
|
||||
<text text-anchor="start" x="6418.68" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
generated by
|
||||
</text>
|
||||
<text text-anchor="start" x="6493.68" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6501.68" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
SchemaCrawler 16.10.1
|
||||
</text>
|
||||
<text text-anchor="start" x="6409.68" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6417.68" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
generated on
|
||||
</text>
|
||||
<text text-anchor="start" x="6493.68" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
2020-11-04 16:40:50.903391
|
||||
<text text-anchor="start" x="6501.68" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
2020-11-09 17:11:18.25328
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="6406.18,-4 6406.18,-44 6671.18,-44 6671.18,-4 6406.18,-4" /> <!-- allocationtoken_a08ccbef -->
|
||||
<polygon fill="none" stroke="#888888" points="6414.18,-4 6414.18,-44 6671.18,-44 6671.18,-4 6414.18,-4" /> <!-- allocationtoken_a08ccbef -->
|
||||
<g id="node1" class="node">
|
||||
<title>allocationtoken_a08ccbef</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="4893.5,-2257.5 4893.5,-2276.5 5059.5,-2276.5 5059.5,-2257.5 4893.5,-2257.5" />
|
||||
|
@ -1577,7 +1577,7 @@ td.section {
|
|||
</g> <!-- billingevent_a57d1815->registrar_6e1503e3 -->
|
||||
<g id="edge52" class="edge">
|
||||
<title>billingevent_a57d1815:w->registrar_6e1503e3:e</title>
|
||||
<path fill="none" stroke="black" d="M5617.46,-2382.76C4987.93,-2400.92 5717.68,-3381.71 5224,-3812.5 4818.8,-4166.09 4556.78,-3922.5 4019,-3922.5 4019,-3922.5 4019,-3922.5 740,-3922.5 455,-3922.5 396.2,-3710.2 324,-3434.5 316.46,-3405.72 327.99,-1373.99 301.43,-1215.31" />
|
||||
<path fill="none" stroke="black" d="M5617.47,-2382.76C4988.34,-2400.9 5717.06,-3380.64 5224,-3811.5 4819.01,-4165.39 4556.82,-3922.5 4019,-3922.5 4019,-3922.5 4019,-3922.5 740,-3922.5 455,-3922.5 396.2,-3710.2 324,-3434.5 316.46,-3405.72 327.99,-1373.99 301.43,-1215.31" />
|
||||
<polygon fill="black" stroke="black" points="5625.5,-2382.64 5635.56,-2387 5630.5,-2382.57 5635.5,-2382.5 5635.5,-2382.5 5635.5,-2382.5 5630.5,-2382.57 5635.44,-2378 5625.5,-2382.64 5625.5,-2382.64" />
|
||||
<ellipse fill="none" stroke="black" cx="5621.5" cy="-2382.7" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="293.61,-1208.1 303.05,-1204.79 303.71,-1206.68 294.27,-1209.98 293.61,-1208.1" />
|
||||
|
@ -3048,7 +3048,7 @@ td.section {
|
|||
fk_domain_transfer_losing_registrar_id
|
||||
</text>
|
||||
</g> <!-- tld_f1fa57e2 -->
|
||||
<g id="node34" class="node">
|
||||
<g id="node35" class="node">
|
||||
<title>tld_f1fa57e2</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="2732.5,-3813.5 2732.5,-3832.5 3011.5,-3832.5 3011.5,-3813.5 2732.5,-3813.5" />
|
||||
<text text-anchor="start" x="2734.5" y="-3820.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
|
@ -5124,7 +5124,7 @@ td.section {
|
|||
<polyline fill="none" stroke="black" points="3138.5,-3804.5 3143.5,-3804.49 " />
|
||||
<polygon fill="black" stroke="black" points="3144.51,-3809.49 3144.49,-3799.49 3146.49,-3799.49 3146.51,-3809.49 3144.51,-3809.49" />
|
||||
<polyline fill="none" stroke="black" points="3143.5,-3804.49 3148.5,-3804.49 " />
|
||||
<text text-anchor="start" x="3567.5" y="-3796.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3567.5" y="-3797.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
fk_spec11_threat_match_tld
|
||||
</text>
|
||||
</g> <!-- domaindsdatahistory_995b060d -->
|
||||
|
@ -5385,14 +5385,14 @@ td.section {
|
|||
</g> <!-- domaintransactionrecord_6e77ff61->tld_f1fa57e2 -->
|
||||
<g id="edge80" class="edge">
|
||||
<title>domaintransactionrecord_6e77ff61:w->tld_f1fa57e2:e</title>
|
||||
<path fill="none" stroke="black" d="M4849.46,-3673.5C4228.33,-3673.26 4062.99,-3661.39 3438,-3740.5 3315.19,-3756.04 3280.65,-3749.07 3164,-3790.5 3156,-3793.34 3153.09,-3798.48 3148.38,-3801.68" />
|
||||
<path fill="none" stroke="black" d="M4849.46,-3673.5C4228.33,-3673.24 4062.85,-3660.29 3438,-3740.5 3315.14,-3756.27 3281.28,-3751.63 3164,-3791.5 3156.1,-3794.19 3153.06,-3798.95 3148.32,-3801.9" />
|
||||
<polygon fill="black" stroke="black" points="4857.5,-3673.5 4867.5,-3678 4862.5,-3673.5 4867.5,-3673.5 4867.5,-3673.5 4867.5,-3673.5 4862.5,-3673.5 4867.5,-3669 4857.5,-3673.5 4857.5,-3673.5" />
|
||||
<ellipse fill="none" stroke="black" cx="4853.5" cy="-3673.5" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="3140.83,-3809.03 3138.09,-3799.42 3140.01,-3798.87 3142.76,-3808.48 3140.83,-3809.03" />
|
||||
<polyline fill="none" stroke="black" points="3138.5,-3804.5 3143.31,-3803.13 " />
|
||||
<polygon fill="black" stroke="black" points="3145.64,-3807.66 3142.9,-3798.05 3144.82,-3797.5 3147.57,-3807.11 3145.64,-3807.66" />
|
||||
<polyline fill="none" stroke="black" points="3143.31,-3803.13 3148.12,-3801.76 " />
|
||||
<text text-anchor="start" x="3915.5" y="-3696.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="black" stroke="black" points="3140.75,-3809.08 3138.19,-3799.41 3140.12,-3798.9 3142.68,-3808.57 3140.75,-3809.08" />
|
||||
<polyline fill="none" stroke="black" points="3138.5,-3804.5 3143.33,-3803.22 " />
|
||||
<polygon fill="black" stroke="black" points="3145.58,-3807.8 3143.02,-3798.13 3144.95,-3797.62 3147.51,-3807.29 3145.58,-3807.8" />
|
||||
<polyline fill="none" stroke="black" points="3143.33,-3803.22 3148.17,-3801.94 " />
|
||||
<text text-anchor="start" x="3915.5" y="-3695.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
fk_domain_transaction_record_tld
|
||||
</text>
|
||||
</g> <!-- hosthistory_56210c2->host_f21b78de -->
|
||||
|
@ -6068,121 +6068,177 @@ td.section {
|
|||
<text text-anchor="start" x="6075" y="-3670.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
fkgq03rk0bt1hb915dnyvd3vnfc
|
||||
</text>
|
||||
</g> <!-- signedmarkrevocationentry_99c39721 -->
|
||||
</g> <!-- serversecret_6cc90f09 -->
|
||||
<g id="node32" class="node">
|
||||
<title>serversecret_6cc90f09</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6368.5,-3742.5 6368.5,-3761.5 6499.5,-3761.5 6499.5,-3742.5 6368.5,-3742.5" />
|
||||
<text text-anchor="start" x="6370.5" y="-3749.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.ServerSecret
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6499.5,-3742.5 6499.5,-3761.5 6576.5,-3761.5 6576.5,-3742.5 6499.5,-3742.5" />
|
||||
<text text-anchor="start" x="6537.5" y="-3748.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="6370.5" y="-3730.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
secret
|
||||
</text>
|
||||
<text text-anchor="start" x="6453.5" y="-3729.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6501.5" y="-3729.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
uuid not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="6367.5,-3722.5 6367.5,-3762.5 6577.5,-3762.5 6577.5,-3722.5 6367.5,-3722.5" />
|
||||
</g> <!-- signedmarkrevocationentry_99c39721 -->
|
||||
<g id="node33" class="node">
|
||||
<title>signedmarkrevocationentry_99c39721</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6293.5,-3780.5 6293.5,-3799.5 6526.5,-3799.5 6526.5,-3780.5 6293.5,-3780.5" />
|
||||
<text text-anchor="start" x="6295.5" y="-3787.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6293.5,-3846.5 6293.5,-3865.5 6526.5,-3865.5 6526.5,-3846.5 6293.5,-3846.5" />
|
||||
<text text-anchor="start" x="6295.5" y="-3853.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.SignedMarkRevocationEntry
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6526.5,-3780.5 6526.5,-3799.5 6652.5,-3799.5 6652.5,-3780.5 6526.5,-3780.5" />
|
||||
<text text-anchor="start" x="6613.5" y="-3786.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6526.5,-3846.5 6526.5,-3865.5 6652.5,-3865.5 6652.5,-3846.5 6526.5,-3846.5" />
|
||||
<text text-anchor="start" x="6613.5" y="-3852.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="6295.5" y="-3768.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="6295.5" y="-3834.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
revision_id
|
||||
</text>
|
||||
<text text-anchor="start" x="6458.5" y="-3767.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6458.5" y="-3833.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6528.5" y="-3767.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6528.5" y="-3833.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
int8 not null
|
||||
</text>
|
||||
<text text-anchor="start" x="6295.5" y="-3748.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6295.5" y="-3814.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
revocation_time
|
||||
</text>
|
||||
<text text-anchor="start" x="6458.5" y="-3748.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6458.5" y="-3814.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6528.5" y="-3748.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6528.5" y="-3814.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
timestamptz not null
|
||||
</text>
|
||||
<text text-anchor="start" x="6295.5" y="-3730.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="6295.5" y="-3796.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
smd_id
|
||||
</text>
|
||||
<text text-anchor="start" x="6458.5" y="-3729.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6458.5" y="-3795.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6528.5" y="-3729.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6528.5" y="-3795.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="6292,-3722.5 6292,-3800.5 6653,-3800.5 6653,-3722.5 6292,-3722.5" />
|
||||
<polygon fill="none" stroke="#888888" points="6292,-3788.5 6292,-3866.5 6653,-3866.5 6653,-3788.5 6292,-3788.5" />
|
||||
</g> <!-- signedmarkrevocationlist_c5d968fb -->
|
||||
<g id="node33" class="node">
|
||||
<g id="node34" class="node">
|
||||
<title>signedmarkrevocationlist_c5d968fb</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5672.5,-3780.5 5672.5,-3799.5 5894.5,-3799.5 5894.5,-3780.5 5672.5,-3780.5" />
|
||||
<text text-anchor="start" x="5674.5" y="-3787.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5672.5,-3846.5 5672.5,-3865.5 5894.5,-3865.5 5894.5,-3846.5 5672.5,-3846.5" />
|
||||
<text text-anchor="start" x="5674.5" y="-3853.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.SignedMarkRevocationList
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5894.5,-3780.5 5894.5,-3799.5 6004.5,-3799.5 6004.5,-3780.5 5894.5,-3780.5" />
|
||||
<text text-anchor="start" x="5965.5" y="-3786.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="5894.5,-3846.5 5894.5,-3865.5 6004.5,-3865.5 6004.5,-3846.5 5894.5,-3846.5" />
|
||||
<text text-anchor="start" x="5965.5" y="-3852.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="5674.5" y="-3768.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="5674.5" y="-3834.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
revision_id
|
||||
</text>
|
||||
<text text-anchor="start" x="5824.5" y="-3767.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5824.5" y="-3833.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5896.5" y="-3767.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5896.5" y="-3833.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
bigserial not null
|
||||
</text>
|
||||
<text text-anchor="start" x="5824.5" y="-3748.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5824.5" y="-3814.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5896.5" y="-3748.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5896.5" y="-3814.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
auto-incremented
|
||||
</text>
|
||||
<text text-anchor="start" x="5674.5" y="-3729.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5674.5" y="-3795.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
creation_time
|
||||
</text>
|
||||
<text text-anchor="start" x="5824.5" y="-3729.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5824.5" y="-3795.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="5896.5" y="-3729.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="5896.5" y="-3795.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
timestamptz
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="5671.5,-3722.5 5671.5,-3800.5 6005.5,-3800.5 6005.5,-3722.5 5671.5,-3722.5" />
|
||||
<polygon fill="none" stroke="#888888" points="5671.5,-3788.5 5671.5,-3866.5 6005.5,-3866.5 6005.5,-3788.5 5671.5,-3788.5" />
|
||||
</g> <!-- signedmarkrevocationentry_99c39721->signedmarkrevocationlist_c5d968fb -->
|
||||
<g id="edge78" class="edge">
|
||||
<title>signedmarkrevocationentry_99c39721:w->signedmarkrevocationlist_c5d968fb:e</title>
|
||||
<path fill="none" stroke="black" d="M6274.48,-3771.5C6164.8,-3771.5 6128.86,-3771.5 6015.6,-3771.5" />
|
||||
<polygon fill="black" stroke="black" points="6282.5,-3771.5 6292.5,-3776 6287.5,-3771.5 6292.5,-3771.5 6292.5,-3771.5 6292.5,-3771.5 6287.5,-3771.5 6292.5,-3767 6282.5,-3771.5 6282.5,-3771.5" />
|
||||
<ellipse fill="none" stroke="black" cx="6278.5" cy="-3771.5" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="6006.5,-3776.5 6006.5,-3766.5 6008.5,-3766.5 6008.5,-3776.5 6006.5,-3776.5" />
|
||||
<polyline fill="none" stroke="black" points="6005.5,-3771.5 6010.5,-3771.5 " />
|
||||
<polygon fill="black" stroke="black" points="6011.5,-3776.5 6011.5,-3766.5 6013.5,-3766.5 6013.5,-3776.5 6011.5,-3776.5" />
|
||||
<polyline fill="none" stroke="black" points="6010.5,-3771.5 6015.5,-3771.5 " />
|
||||
<text text-anchor="start" x="6084" y="-3775.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<path fill="none" stroke="black" d="M6274.48,-3837.5C6164.8,-3837.5 6128.86,-3837.5 6015.6,-3837.5" />
|
||||
<polygon fill="black" stroke="black" points="6282.5,-3837.5 6292.5,-3842 6287.5,-3837.5 6292.5,-3837.5 6292.5,-3837.5 6292.5,-3837.5 6287.5,-3837.5 6292.5,-3833 6282.5,-3837.5 6282.5,-3837.5" />
|
||||
<ellipse fill="none" stroke="black" cx="6278.5" cy="-3837.5" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="6006.5,-3842.5 6006.5,-3832.5 6008.5,-3832.5 6008.5,-3842.5 6006.5,-3842.5" />
|
||||
<polyline fill="none" stroke="black" points="6005.5,-3837.5 6010.5,-3837.5 " />
|
||||
<polygon fill="black" stroke="black" points="6011.5,-3842.5 6011.5,-3832.5 6013.5,-3832.5 6013.5,-3842.5 6011.5,-3842.5" />
|
||||
<polyline fill="none" stroke="black" points="6010.5,-3837.5 6015.5,-3837.5 " />
|
||||
<text text-anchor="start" x="6084" y="-3841.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
fk5ivlhvs3121yx2li5tqh54u4
|
||||
</text>
|
||||
</g> <!-- transaction_d50389d4 -->
|
||||
<g id="node35" class="node">
|
||||
<title>transaction_d50389d4</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6355.5,-3884.5 6355.5,-3903.5 6480.5,-3903.5 6480.5,-3884.5 6355.5,-3884.5" />
|
||||
<text text-anchor="start" x="6357.5" y="-3891.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.Transaction
|
||||
</g> <!-- tmchcrl_d282355 -->
|
||||
<g id="node36" class="node">
|
||||
<title>tmchcrl_d282355</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6329.5,-3950.5 6329.5,-3969.5 6489.5,-3969.5 6489.5,-3950.5 6329.5,-3950.5" />
|
||||
<text text-anchor="start" x="6331.5" y="-3957.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.TmchCrl
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6480.5,-3884.5 6480.5,-3903.5 6590.5,-3903.5 6590.5,-3884.5 6480.5,-3884.5" />
|
||||
<text text-anchor="start" x="6551.5" y="-3890.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6489.5,-3950.5 6489.5,-3969.5 6615.5,-3969.5 6615.5,-3950.5 6489.5,-3950.5" />
|
||||
<text text-anchor="start" x="6576.5" y="-3956.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="6357.5" y="-3872.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="6331.5" y="-3938.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
certificate_revocations
|
||||
</text>
|
||||
<text text-anchor="start" x="6483.5" y="-3937.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6491.5" y="-3937.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<text text-anchor="start" x="6331.5" y="-3919.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
update_timestamp
|
||||
</text>
|
||||
<text text-anchor="start" x="6483.5" y="-3918.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6491.5" y="-3918.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
timestamptz not null
|
||||
</text>
|
||||
<text text-anchor="start" x="6331.5" y="-3900.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
url
|
||||
</text>
|
||||
<text text-anchor="start" x="6483.5" y="-3899.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6491.5" y="-3899.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="6328.5,-3892.5 6328.5,-3970.5 6616.5,-3970.5 6616.5,-3892.5 6328.5,-3892.5" />
|
||||
</g> <!-- transaction_d50389d4 -->
|
||||
<g id="node37" class="node">
|
||||
<title>transaction_d50389d4</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6355.5,-4054.5 6355.5,-4073.5 6480.5,-4073.5 6480.5,-4054.5 6355.5,-4054.5" />
|
||||
<text text-anchor="start" x="6357.5" y="-4061.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.Transaction
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="6480.5,-4054.5 6480.5,-4073.5 6590.5,-4073.5 6590.5,-4054.5 6480.5,-4054.5" />
|
||||
<text text-anchor="start" x="6551.5" y="-4060.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="6357.5" y="-4042.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
id
|
||||
</text>
|
||||
<text text-anchor="start" x="6443.5" y="-3871.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6443.5" y="-4041.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6482.5" y="-3871.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6482.5" y="-4041.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
bigserial not null
|
||||
</text>
|
||||
<text text-anchor="start" x="6443.5" y="-3852.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6443.5" y="-4022.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6482.5" y="-3852.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6482.5" y="-4022.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
auto-incremented
|
||||
</text>
|
||||
<text text-anchor="start" x="6357.5" y="-3833.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6357.5" y="-4003.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
contents
|
||||
</text>
|
||||
<text text-anchor="start" x="6443.5" y="-3833.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6443.5" y="-4003.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="6482.5" y="-3833.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="6482.5" y="-4003.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
bytea
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="6354,-3826.5 6354,-3904.5 6591,-3904.5 6591,-3826.5 6354,-3826.5" />
|
||||
<polygon fill="none" stroke="#888888" points="6354,-3996.5 6354,-4074.5 6591,-4074.5 6591,-3996.5 6354,-3996.5" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
@ -12531,6 +12587,54 @@ td.section {
|
|||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="serversecret_6cc90f09" class="caption_name">public.ServerSecret</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>secret</i></b></td>
|
||||
<td class="minwidth">uuid not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="section">Primary Key</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="name">ServerSecret_pkey</td>
|
||||
<td class="description right">[primary key]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">secret</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="section">Indexes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="name">ServerSecret_pkey</td>
|
||||
<td class="description right">[unique index]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">secret</td>
|
||||
<td class="minwidth">ascending</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="signedmarkrevocationentry_99c39721" class="caption_name">public.SignedMarkRevocationEntry</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
|
@ -13129,6 +13233,84 @@ td.section {
|
|||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="tmchcrl_d282355" class="caption_name">public.TmchCrl</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>certificate_revocations</i></b></td>
|
||||
<td class="minwidth">text not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>update_timestamp</i></b></td>
|
||||
<td class="minwidth">timestamptz not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>url</i></b></td>
|
||||
<td class="minwidth">text not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="section">Primary Key</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="name">TmchCrl_pkey</td>
|
||||
<td class="description right">[primary key]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">certificate_revocations</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">update_timestamp</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">url</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="section">Indexes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="name">TmchCrl_pkey</td>
|
||||
<td class="description right">[unique index]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">certificate_revocations</td>
|
||||
<td class="minwidth">ascending</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">update_timestamp</td>
|
||||
<td class="minwidth">ascending</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">url</td>
|
||||
<td class="minwidth">ascending</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="transaction_d50389d4" class="caption_name">public.Transaction</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
|
|
|
@ -70,3 +70,4 @@ V69__change_primary_key_and_add_history_table_for_delegation_signer.sql
|
|||
V70__signed_mark_revocation_list.sql
|
||||
V71__create_kms_secret.sql
|
||||
V72__add_missing_foreign_keys.sql
|
||||
V73__singleton_entities.sql
|
||||
|
|
25
db/src/main/resources/sql/flyway/V73__singleton_entities.sql
Normal file
25
db/src/main/resources/sql/flyway/V73__singleton_entities.sql
Normal file
|
@ -0,0 +1,25 @@
|
|||
-- Copyright 2020 The Nomulus Authors. All Rights Reserved.
|
||||
--
|
||||
-- Licensed under the Apache License, Version 2.0 (the "License");
|
||||
-- you may not use this file except in compliance with the License.
|
||||
-- You may obtain a copy of the License at
|
||||
--
|
||||
-- http://www.apache.org/licenses/LICENSE-2.0
|
||||
--
|
||||
-- Unless required by applicable law or agreed to in writing, software
|
||||
-- distributed under the License is distributed on an "AS IS" BASIS,
|
||||
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
-- See the License for the specific language governing permissions and
|
||||
-- limitations under the License.
|
||||
|
||||
CREATE TABLE "ServerSecret" (
|
||||
secret uuid NOT NULL,
|
||||
PRIMARY KEY (secret)
|
||||
);
|
||||
|
||||
CREATE TABLE "TmchCrl" (
|
||||
certificate_revocations text NOT NULL,
|
||||
update_timestamp timestamptz NOT NULL,
|
||||
url text NOT NULL,
|
||||
PRIMARY KEY (certificate_revocations, update_timestamp, url)
|
||||
);
|
|
@ -626,6 +626,11 @@
|
|||
primary key (revision_id)
|
||||
);
|
||||
|
||||
create table "ServerSecret" (
|
||||
secret uuid not null,
|
||||
primary key (secret)
|
||||
);
|
||||
|
||||
create table "SignedMarkRevocationEntry" (
|
||||
revision_id int8 not null,
|
||||
revocation_time timestamptz not null,
|
||||
|
@ -692,6 +697,13 @@
|
|||
primary key (tld_name)
|
||||
);
|
||||
|
||||
create table "TmchCrl" (
|
||||
certificate_revocations text not null,
|
||||
update_timestamp timestamptz not null,
|
||||
url text not null,
|
||||
primary key (certificate_revocations, update_timestamp, url)
|
||||
);
|
||||
|
||||
create table "Transaction" (
|
||||
id bigserial not null,
|
||||
contents bytea,
|
||||
|
|
|
@ -899,6 +899,15 @@ CREATE SEQUENCE public."SafeBrowsingThreat_id_seq"
|
|||
ALTER SEQUENCE public."SafeBrowsingThreat_id_seq" OWNED BY public."Spec11ThreatMatch".id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: ServerSecret; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public."ServerSecret" (
|
||||
secret uuid NOT NULL
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: SignedMarkRevocationEntry; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
@ -985,6 +994,17 @@ CREATE TABLE public."Tld" (
|
|||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: TmchCrl; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public."TmchCrl" (
|
||||
certificate_revocations text NOT NULL,
|
||||
update_timestamp timestamp with time zone NOT NULL,
|
||||
url text NOT NULL
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: Transaction; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
@ -1302,6 +1322,14 @@ ALTER TABLE ONLY public."Spec11ThreatMatch"
|
|||
ADD CONSTRAINT "SafeBrowsingThreat_pkey" PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: ServerSecret ServerSecret_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public."ServerSecret"
|
||||
ADD CONSTRAINT "ServerSecret_pkey" PRIMARY KEY (secret);
|
||||
|
||||
|
||||
--
|
||||
-- Name: SignedMarkRevocationEntry SignedMarkRevocationEntry_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
@ -1326,6 +1354,14 @@ ALTER TABLE ONLY public."Tld"
|
|||
ADD CONSTRAINT "Tld_pkey" PRIMARY KEY (tld_name);
|
||||
|
||||
|
||||
--
|
||||
-- Name: TmchCrl TmchCrl_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public."TmchCrl"
|
||||
ADD CONSTRAINT "TmchCrl_pkey" PRIMARY KEY (certificate_revocations, update_timestamp, url);
|
||||
|
||||
|
||||
--
|
||||
-- Name: Transaction Transaction_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
|
Loading…
Add table
Reference in a new issue