From 9c33fdf344ce8baf0df1b282037235de642c88b7 Mon Sep 17 00:00:00 2001 From: Matthew McPherrin Date: Fri, 9 Oct 2015 15:42:14 -0700 Subject: [PATCH] Wrap OffsetDateTime in ApiDate & update Jackson. Changes: Update Jackson to the newest stable release (2.6.1). We wrap OffsetDateTime in an ApiDate that provides a thin wrapper around it and custom Json de/serializers. It also has static now() and parse() methods that are heavily used in tests, and equality & hashcode checks implented in the obvious way. There's a lot of mundane changes to pipe the type throughout the API, and to update tests appropriately. Remove the now unused options to set up the date format in Jackson: This makes it easier to find buggy serialization, as they get written as a number instead. - Background & Alternatives: Keywhiz uses Jackson for JSON de/serialization. When OffsetDateTime is serialized with Jackson's JSR310 module, which omits the milliseconds if they're all zero. While this is unlikely to happen, as most times in the keywhiz world are timestamps and the milliseconds are effectively random, it does make Keywhiz-fs unhappy, and unable to list secrets, or read the secret with the unsupported date format. We set the jackson date format explicitly, but that's a red herring: The JSR310 date module doesn't use this. We could explicitly set the pattern with @JsonPattern to be yyyy-MM-dd'T'mm-HH-ss.SSS'Z' which serializes dates properly, but then won't deserialize because OffsetDateTime's constructor doesn't know what timezone it's in. If we used the unquoted 'Z', the timezone will serialize as +0000, which is undesired too, but it deserializes properly. We could load a custom module into Jackson that provides custom de/serializers for OffsetDateTime, but we need to load the Jdk8 module, which provides conflicting de/serializers for OffsetDateTime. You could probably get that to work with the right ordering, but that feels awfully fragile to me (and I didn't get it to work). --- api/src/main/java/keywhiz/api/ApiDate.java | 86 +++++++++++++++++++ .../keywhiz/api/AutomationSecretResponse.java | 4 +- .../keywhiz/api/ClientDetailResponse.java | 8 +- .../java/keywhiz/api/GroupDetailResponse.java | 12 +-- .../keywhiz/api/SecretDeliveryResponse.java | 6 +- .../keywhiz/api/SecretDetailResponse.java | 8 +- .../automation/v2/SecretDetailResponseV2.java | 1 + .../main/java/keywhiz/api/model/Client.java | 14 +-- .../main/java/keywhiz/api/model/Group.java | 16 ++-- .../keywhiz/api/model/SanitizedSecret.java | 10 ++- .../main/java/keywhiz/api/model/Secret.java | 14 +-- .../java/keywhiz/api/model/SecretContent.java | 10 ++- .../java/keywhiz/api/model/SecretSeries.java | 10 ++- .../api/AutomationSecretResponseTest.java | 8 +- .../keywhiz/api/ClientDetailResponseTest.java | 4 +- .../keywhiz/api/GroupDetailResponseTest.java | 4 +- .../api/SecretDeliveryResponseTest.java | 8 +- .../keywhiz/api/SecretDetailResponseTest.java | 9 +- .../java/keywhiz/api/SecretsResponseTest.java | 8 +- .../java/keywhiz/api/model/ClientTest.java | 6 +- .../java/keywhiz/api/model/GroupTest.java | 6 +- .../api/model/SanitizedSecretTest.java | 24 +++--- .../fixtures/secretDetailResponse.json | 2 +- cli/src/main/java/keywhiz/cli/CliModule.java | 8 -- .../keywhiz/cli/commands/AddActionTest.java | 4 +- .../cli/commands/AssignActionTest.java | 4 +- .../cli/commands/DeleteActionTest.java | 4 +- .../cli/commands/DescribeActionTest.java | 4 +- .../cli/commands/UnassignActionTest.java | 4 +- pom.xml | 2 +- .../src/main/java/keywhiz/KeywhizService.java | 11 +-- .../keywhiz/service/daos/ClientMapper.java | 5 +- .../keywhiz/service/daos/GroupMapper.java | 5 +- .../service/daos/SecretContentMapper.java | 6 +- .../service/daos/SecretSeriesMapper.java | 6 +- .../service/daos/SecretContentDAOTest.java | 7 +- .../keywhiz/service/daos/SecretDAOTest.java | 11 +-- .../service/daos/SecretSeriesDAOTest.java | 3 +- .../providers/ClientAuthFactoryTest.java | 4 +- ...SecretDeliveryResourceIntegrationTest.java | 5 +- .../resources/SecretDeliveryResourceTest.java | 4 +- ...ecretsDeliveryResourceIntegrationTest.java | 17 ++-- .../SecretsDeliveryResourceTest.java | 4 +- .../resources/admin/ClientsResourceTest.java | 4 +- .../resources/admin/GroupsResourceTest.java | 4 +- .../admin/MembershipResourceTest.java | 4 +- .../admin/SecretGeneratorsResourceTest.java | 4 +- .../resources/admin/SecretsResourceTest.java | 4 +- .../admin/TemplatedSecretGeneratorTest.java | 3 +- .../AutomationClientResourceTest.java | 4 +- .../AutomationGroupResourceTest.java | 4 +- ...utomationSecretGeneratorsResourceTest.java | 4 +- .../AutomationSecretResourceTest.java | 4 +- .../java/keywhiz/testing/JsonHelpers.java | 9 -- 54 files changed, 285 insertions(+), 159 deletions(-) create mode 100644 api/src/main/java/keywhiz/api/ApiDate.java diff --git a/api/src/main/java/keywhiz/api/ApiDate.java b/api/src/main/java/keywhiz/api/ApiDate.java new file mode 100644 index 000000000..3b09042db --- /dev/null +++ b/api/src/main/java/keywhiz/api/ApiDate.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2015 Square, Inc. + * + * 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. + */ + +package keywhiz.api; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import java.io.IOException; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; + +/** + * This is a wrapper for the date class used in API responses so we can have a custom JSON serializer and deserializer + */ +@JsonSerialize(using=ApiDate.ApiDateSerializer.class) +@JsonDeserialize(using=ApiDate.ApiDateDeserializer.class) +public class ApiDate { + + static class ApiDateSerializer extends JsonSerializer { + private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + @Override + public void serialize(ApiDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeString(formatter.format(value.offsetDateTime)); + } + } + + static class ApiDateDeserializer extends JsonDeserializer { + @Override + public ApiDate deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException { + return new ApiDate(parser.readValueAs(OffsetDateTime.class)); + } + } + + public static ApiDate parse(String s) { + return new ApiDate(OffsetDateTime.parse(s)); + } + + public static ApiDate now() { + return new ApiDate(OffsetDateTime.now()); + } + + public long toEpochSecond() { + return this.offsetDateTime.toEpochSecond(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof ApiDate) { + ApiDate that = (ApiDate) obj; + return this.offsetDateTime.equals(that.offsetDateTime); + } + return false; + } + + @Override + public int hashCode() { + return this.offsetDateTime.hashCode(); + } + + public ApiDate(OffsetDateTime odt) { + this.offsetDateTime = odt; + } + + public OffsetDateTime offsetDateTime; +} + diff --git a/api/src/main/java/keywhiz/api/AutomationSecretResponse.java b/api/src/main/java/keywhiz/api/AutomationSecretResponse.java index 590d446de..b9686b651 100644 --- a/api/src/main/java/keywhiz/api/AutomationSecretResponse.java +++ b/api/src/main/java/keywhiz/api/AutomationSecretResponse.java @@ -38,7 +38,7 @@ public abstract class AutomationSecretResponse { public static AutomationSecretResponse create(long id, String name, String secret, - OffsetDateTime creationDate, boolean isVersioned, + ApiDate creationDate, boolean isVersioned, ImmutableMap metadata, ImmutableList groups) { return new AutoValue_AutomationSecretResponse(id, name, secret, decodedLength(secret), creationDate, isVersioned, groups, metadata); @@ -60,7 +60,7 @@ public static AutomationSecretResponse fromSecret(Secret secret, ImmutableList groups(); @JsonAnyGetter @JsonProperty("metadata") public abstract Map metadata(); diff --git a/api/src/main/java/keywhiz/api/ClientDetailResponse.java b/api/src/main/java/keywhiz/api/ClientDetailResponse.java index 88cba9a5e..6d327af55 100644 --- a/api/src/main/java/keywhiz/api/ClientDetailResponse.java +++ b/api/src/main/java/keywhiz/api/ClientDetailResponse.java @@ -34,10 +34,10 @@ public class ClientDetailResponse { public final String description; @JsonProperty - public final OffsetDateTime creationDate; + public final ApiDate creationDate; @JsonProperty - public final OffsetDateTime updateDate; + public final ApiDate updateDate; @JsonProperty public final String createdBy; @@ -55,8 +55,8 @@ public class ClientDetailResponse { public ClientDetailResponse(@JsonProperty("id") long id, @JsonProperty("name") String name, @JsonProperty("description") String description, - @JsonProperty("creationDate") OffsetDateTime creationDate, - @JsonProperty("updateDate") OffsetDateTime updateDate, + @JsonProperty("creationDate") ApiDate creationDate, + @JsonProperty("updateDate") ApiDate updateDate, @JsonProperty("createdBy") String createdBy, @JsonProperty("updatedBy") String updatedBy, @JsonProperty("groups") ImmutableList groups, diff --git a/api/src/main/java/keywhiz/api/GroupDetailResponse.java b/api/src/main/java/keywhiz/api/GroupDetailResponse.java index be61dc908..7204f7180 100644 --- a/api/src/main/java/keywhiz/api/GroupDetailResponse.java +++ b/api/src/main/java/keywhiz/api/GroupDetailResponse.java @@ -36,10 +36,10 @@ public class GroupDetailResponse { private final String description; @JsonProperty - private final OffsetDateTime creationDate; + private final ApiDate creationDate; @JsonProperty - private final OffsetDateTime updateDate; + private final ApiDate updateDate; @JsonProperty private final String createdBy; @@ -56,8 +56,8 @@ public class GroupDetailResponse { public GroupDetailResponse(@JsonProperty("id") long id, @JsonProperty("name") String name, @JsonProperty("description") String description, - @JsonProperty("creationDate") OffsetDateTime creationDate, - @JsonProperty("updateDate") OffsetDateTime updateDate, + @JsonProperty("creationDate") ApiDate creationDate, + @JsonProperty("updateDate") ApiDate updateDate, @JsonProperty("createdBy") String createdBy, @JsonProperty("updatedBy") String updatedBy, @JsonProperty("secrets") ImmutableList secrets, @@ -98,11 +98,11 @@ public String getDescription() { return description; } - public OffsetDateTime getCreationDate() { + public ApiDate getCreationDate() { return creationDate; } - public OffsetDateTime getUpdateDate() { + public ApiDate getUpdateDate() { return updateDate; } diff --git a/api/src/main/java/keywhiz/api/SecretDeliveryResponse.java b/api/src/main/java/keywhiz/api/SecretDeliveryResponse.java index 70e29a284..7f81e1eba 100644 --- a/api/src/main/java/keywhiz/api/SecretDeliveryResponse.java +++ b/api/src/main/java/keywhiz/api/SecretDeliveryResponse.java @@ -34,7 +34,7 @@ public class SecretDeliveryResponse { private final String name; private final String secret; private final int secretLength; - private final OffsetDateTime creationDate; + private final ApiDate creationDate; private final boolean isVersioned; private final ImmutableMap metadata; @@ -42,7 +42,7 @@ public SecretDeliveryResponse( @JsonProperty("name") String name, @JsonProperty("secret") String secret, @JsonProperty("secretLength") int secretLength, - @JsonProperty("creationDate") OffsetDateTime creationDate, + @JsonProperty("creationDate") ApiDate creationDate, @JsonProperty("isVersioned") boolean isVersioned, @JsonProperty("metadata") ImmutableMap metadata) { this.name = name; @@ -89,7 +89,7 @@ public int getSecretLength() { } /** @return ISO-8601 datetime the secret was created. */ - public OffsetDateTime getCreationDate() { + public ApiDate getCreationDate() { return creationDate; } diff --git a/api/src/main/java/keywhiz/api/SecretDetailResponse.java b/api/src/main/java/keywhiz/api/SecretDetailResponse.java index ecfa2ad10..e2ce6aee0 100644 --- a/api/src/main/java/keywhiz/api/SecretDetailResponse.java +++ b/api/src/main/java/keywhiz/api/SecretDetailResponse.java @@ -37,7 +37,7 @@ public class SecretDetailResponse { public final String description; @JsonProperty - public final OffsetDateTime createdAt; + public final ApiDate createdAt; /** User who created the record. */ @JsonProperty @@ -45,7 +45,7 @@ public class SecretDetailResponse { /** Should equal createdAt, but added for consistency in the API. */ @JsonProperty - public final OffsetDateTime updatedAt; + public final ApiDate updatedAt; /** User who updated the record. */ @JsonProperty @@ -67,9 +67,9 @@ public class SecretDetailResponse { public SecretDetailResponse(@JsonProperty("id") long id, @JsonProperty("name") String name, @JsonProperty("description") String description, - @JsonProperty("createdAt") OffsetDateTime createdAt, + @JsonProperty("createdAt") ApiDate createdAt, @JsonProperty("createdBy") String createdBy, - @JsonProperty("updatedAt") OffsetDateTime updatedAt, + @JsonProperty("updatedAt") ApiDate updatedAt, @JsonProperty("updatedBy") String updatedBy, @JsonProperty("isVersioned") boolean versioned, @JsonProperty("metadata") ImmutableMap metadata, diff --git a/api/src/main/java/keywhiz/api/automation/v2/SecretDetailResponseV2.java b/api/src/main/java/keywhiz/api/automation/v2/SecretDetailResponseV2.java index 12ffc397a..b0d4fbc8f 100644 --- a/api/src/main/java/keywhiz/api/automation/v2/SecretDetailResponseV2.java +++ b/api/src/main/java/keywhiz/api/automation/v2/SecretDetailResponseV2.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Map; import javax.annotation.Nullable; + import keywhiz.api.model.Secret; import keywhiz.api.model.SecretSeries; diff --git a/api/src/main/java/keywhiz/api/model/Client.java b/api/src/main/java/keywhiz/api/model/Client.java index 751b13a46..c56b739ca 100644 --- a/api/src/main/java/keywhiz/api/model/Client.java +++ b/api/src/main/java/keywhiz/api/model/Client.java @@ -19,6 +19,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import keywhiz.api.ApiDate; + import java.time.OffsetDateTime; import javax.annotation.Nullable; @@ -37,13 +39,13 @@ public class Client { private final String description; @JsonProperty - private final OffsetDateTime createdAt; + private final ApiDate createdAt; @JsonProperty private final String createdBy; @JsonProperty - private final OffsetDateTime updatedAt; + private final ApiDate updatedAt; @JsonProperty private final String updatedBy; @@ -59,9 +61,9 @@ public class Client { public Client(@JsonProperty("id") long id, @JsonProperty("name") String name, @JsonProperty("description") @Nullable String description, - @JsonProperty("createdAt") OffsetDateTime createdAt, + @JsonProperty("createdAt") ApiDate createdAt, @JsonProperty("createdBy") @Nullable String createdBy, - @JsonProperty("updatedAt") OffsetDateTime updatedAt, + @JsonProperty("updatedAt") ApiDate updatedAt, @JsonProperty("updatedBy") @Nullable String updatedBy, @JsonProperty("enabled") boolean enabled, @JsonProperty("automationAllowed") boolean automationAllowed) { @@ -88,7 +90,7 @@ public String getDescription() { return description; } - public OffsetDateTime getCreatedAt() { + public ApiDate getCreatedAt() { return createdAt; } @@ -96,7 +98,7 @@ public String getCreatedBy() { return createdBy; } - public OffsetDateTime getUpdatedAt() { + public ApiDate getUpdatedAt() { return updatedAt; } diff --git a/api/src/main/java/keywhiz/api/model/Group.java b/api/src/main/java/keywhiz/api/model/Group.java index 619d10fc8..a2e6fd51d 100644 --- a/api/src/main/java/keywhiz/api/model/Group.java +++ b/api/src/main/java/keywhiz/api/model/Group.java @@ -18,6 +18,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import keywhiz.api.ApiDate; + import java.time.OffsetDateTime; import javax.annotation.Nullable; @@ -39,13 +41,13 @@ public class Group { private final String description; @JsonProperty - private final OffsetDateTime createdAt; + private final ApiDate createdAt; @JsonProperty private final String createdBy; @JsonProperty - private final OffsetDateTime updatedAt; + private final ApiDate updatedAt; @JsonProperty private final String updatedBy; @@ -53,9 +55,9 @@ public class Group { public Group(@JsonProperty("id") long id, @JsonProperty("name") String name, @JsonProperty("description") @Nullable String description, - @JsonProperty("createdAt") OffsetDateTime createdAt, + @JsonProperty("createdAt") ApiDate createdAt, @JsonProperty("createdBy") @Nullable String createdBy, - @JsonProperty("updatedAt") OffsetDateTime updatedAt, + @JsonProperty("updatedAt") ApiDate updatedAt, @JsonProperty("updatedBy") @Nullable String updatedBy) { this.id = id; this.name = checkNotNull(name); @@ -78,15 +80,13 @@ public String getDescription() { return description; } - public OffsetDateTime getCreatedAt() { - return createdAt; - } + public ApiDate getCreatedAt() { return createdAt; } public String getCreatedBy() { return createdBy; } - public OffsetDateTime getUpdatedAt() { + public ApiDate getUpdatedAt() { return updatedAt; } diff --git a/api/src/main/java/keywhiz/api/model/SanitizedSecret.java b/api/src/main/java/keywhiz/api/model/SanitizedSecret.java index 77c820abb..fff47b20a 100644 --- a/api/src/main/java/keywhiz/api/model/SanitizedSecret.java +++ b/api/src/main/java/keywhiz/api/model/SanitizedSecret.java @@ -21,6 +21,8 @@ import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import keywhiz.api.ApiDate; + import java.time.OffsetDateTime; import java.util.List; import java.util.Map; @@ -40,9 +42,9 @@ public abstract class SanitizedSecret { @JsonProperty("name") String name, @JsonProperty("version") String version, @JsonProperty("description") @Nullable String description, - @JsonProperty("createdAt") OffsetDateTime createdAt, + @JsonProperty("createdAt") ApiDate createdAt, @JsonProperty("createdBy") @Nullable String createdBy, - @JsonProperty("updatedAt") OffsetDateTime updatedAt, + @JsonProperty("updatedAt") ApiDate updatedAt, @JsonProperty("updatedBy") @Nullable String updatedBy, @JsonProperty("metadata") @Nullable Map metadata, @JsonProperty("type") @Nullable String type, @@ -111,9 +113,9 @@ public static List fromSecrets(List secrets) { @JsonProperty public abstract String name(); @JsonProperty public abstract String version(); @JsonProperty public abstract String description(); - @JsonProperty public abstract OffsetDateTime createdAt(); + @JsonProperty public abstract ApiDate createdAt(); @JsonProperty public abstract String createdBy(); - @JsonProperty public abstract OffsetDateTime updatedAt(); + @JsonProperty public abstract ApiDate updatedAt(); @JsonProperty public abstract String updatedBy(); @JsonProperty public abstract ImmutableMap metadata(); @JsonProperty public abstract Optional type(); diff --git a/api/src/main/java/keywhiz/api/model/Secret.java b/api/src/main/java/keywhiz/api/model/Secret.java index 3efe1eaf2..c1f84bd97 100644 --- a/api/src/main/java/keywhiz/api/model/Secret.java +++ b/api/src/main/java/keywhiz/api/model/Secret.java @@ -18,6 +18,8 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.ImmutableMap; +import keywhiz.api.ApiDate; + import java.text.ParseException; import java.time.OffsetDateTime; import java.util.Map; @@ -54,9 +56,9 @@ public class Secret { /** Base64-encoded content of this version of the secret. */ private final String secret; - private final OffsetDateTime createdAt; + private final ApiDate createdAt; private final String createdBy; - private final OffsetDateTime updatedAt; + private final ApiDate updatedAt; private final String updatedBy; /** Key-value metadata of the secret. */ @@ -70,9 +72,9 @@ public Secret(long id, @Nullable String version, @Nullable String description, String secret, - OffsetDateTime createdAt, + ApiDate createdAt, @Nullable String createdBy, - OffsetDateTime updatedAt, + ApiDate updatedAt, @Nullable String updatedBy, @Nullable Map metadata, @Nullable String type, @@ -124,7 +126,7 @@ public String getSecret() { return secret; } - public OffsetDateTime getCreatedAt() { + public ApiDate getCreatedAt() { return createdAt; } @@ -132,7 +134,7 @@ public String getCreatedBy() { return createdBy; } - public OffsetDateTime getUpdatedAt() { + public ApiDate getUpdatedAt() { return updatedAt; } diff --git a/api/src/main/java/keywhiz/api/model/SecretContent.java b/api/src/main/java/keywhiz/api/model/SecretContent.java index ed4ce8704..0a4539f02 100644 --- a/api/src/main/java/keywhiz/api/model/SecretContent.java +++ b/api/src/main/java/keywhiz/api/model/SecretContent.java @@ -20,6 +20,8 @@ import com.google.auto.value.AutoValue; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableMap; +import keywhiz.api.ApiDate; + import java.time.OffsetDateTime; import java.util.Optional; import javax.annotation.Nullable; @@ -33,8 +35,8 @@ @AutoValue public abstract class SecretContent { public static SecretContent of(long id, long secretSeriesId, String encryptedContent, - @Nullable String version, OffsetDateTime createdAt, @Nullable String createdBy, - OffsetDateTime updatedAt, @Nullable String updatedBy, ImmutableMap metadata) { + @Nullable String version, ApiDate createdAt, @Nullable String createdBy, + ApiDate updatedAt, @Nullable String updatedBy, ImmutableMap metadata) { return new AutoValue_SecretContent(id, secretSeriesId, encryptedContent, Optional.ofNullable(version), createdAt, nullToEmpty(createdBy), updatedAt, nullToEmpty(updatedBy), metadata); @@ -44,9 +46,9 @@ public static SecretContent of(long id, long secretSeriesId, String encryptedCon public abstract long secretSeriesId(); public abstract String encryptedContent(); public abstract Optional version(); - public abstract OffsetDateTime createdAt(); + public abstract ApiDate createdAt(); public abstract String createdBy(); - public abstract OffsetDateTime updatedAt(); + public abstract ApiDate updatedAt(); public abstract String updatedBy(); @JsonAnyGetter public abstract ImmutableMap metadata(); diff --git a/api/src/main/java/keywhiz/api/model/SecretSeries.java b/api/src/main/java/keywhiz/api/model/SecretSeries.java index fb6138bbf..61b5ff121 100644 --- a/api/src/main/java/keywhiz/api/model/SecretSeries.java +++ b/api/src/main/java/keywhiz/api/model/SecretSeries.java @@ -18,6 +18,8 @@ import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableMap; +import keywhiz.api.ApiDate; + import java.time.OffsetDateTime; import java.util.Map; import java.util.Optional; @@ -38,9 +40,9 @@ public static SecretSeries of( long id, String name, @Nullable String description, - OffsetDateTime createdAt, + ApiDate createdAt, @Nullable String createdBy, - OffsetDateTime updatedAt, + ApiDate updatedAt, @Nullable String updatedBy, @Nullable String type, @Nullable Map generationOptions) { @@ -52,9 +54,9 @@ public static SecretSeries of( public abstract long id(); public abstract String name(); public abstract String description(); - public abstract OffsetDateTime createdAt(); + public abstract ApiDate createdAt(); public abstract String createdBy(); - public abstract OffsetDateTime updatedAt(); + public abstract ApiDate updatedAt(); public abstract String updatedBy(); public abstract Optional type(); public abstract ImmutableMap generationOptions(); diff --git a/api/src/test/java/keywhiz/api/AutomationSecretResponseTest.java b/api/src/test/java/keywhiz/api/AutomationSecretResponseTest.java index 10f7e7ffd..0b78bc985 100644 --- a/api/src/test/java/keywhiz/api/AutomationSecretResponseTest.java +++ b/api/src/test/java/keywhiz/api/AutomationSecretResponseTest.java @@ -34,7 +34,7 @@ public class AutomationSecretResponseTest { private static final ImmutableMap metadata = ImmutableMap.of("key1", "value1", "key2", "value2"); - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); private static final Secret secret = new Secret(0, "name", VersionGenerator.now().toHex(), null, "YWJj", NOW, null, NOW, null, metadata, "upload", null); @@ -68,7 +68,7 @@ public void serializesCorrectly() throws Exception { 0, "Database_Password", secret, - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), + ApiDate.parse("2011-09-29T15:46:00.232Z"), false, ImmutableMap.of(), ImmutableList.of()); @@ -79,7 +79,7 @@ public void serializesCorrectly() throws Exception { 33, "General_Password..0be68f903f8b7d86", secret, - OffsetDateTime.parse("2011-09-29T15:46:00.312Z"), + ApiDate.parse("2011-09-29T15:46:00.312Z"), true, ImmutableMap.of(), ImmutableList.of()); @@ -90,7 +90,7 @@ public void serializesCorrectly() throws Exception { 66, "Nobody_PgPass", secret, - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), + ApiDate.parse("2011-09-29T15:46:00.232Z"), false, ImmutableMap.of("mode", "0400", "owner", "nobody"), ImmutableList.of()); diff --git a/api/src/test/java/keywhiz/api/ClientDetailResponseTest.java b/api/src/test/java/keywhiz/api/ClientDetailResponseTest.java index c44a94da7..f59d3b7d1 100644 --- a/api/src/test/java/keywhiz/api/ClientDetailResponseTest.java +++ b/api/src/test/java/keywhiz/api/ClientDetailResponseTest.java @@ -30,8 +30,8 @@ public class ClientDetailResponseTest { 9875, "Client Name", "Client Description", - OffsetDateTime.parse("2012-08-01T13:15:30.001Z"), - OffsetDateTime.parse("2012-09-10T03:15:30.001Z"), + ApiDate.parse("2012-08-01T13:15:30.001Z"), + ApiDate.parse("2012-09-10T03:15:30.001Z"), "creator-user", "updater-user", ImmutableList.of(), diff --git a/api/src/test/java/keywhiz/api/GroupDetailResponseTest.java b/api/src/test/java/keywhiz/api/GroupDetailResponseTest.java index 1e0984160..32030b5fd 100644 --- a/api/src/test/java/keywhiz/api/GroupDetailResponseTest.java +++ b/api/src/test/java/keywhiz/api/GroupDetailResponseTest.java @@ -30,8 +30,8 @@ public class GroupDetailResponseTest { 234, "group-name", "", - OffsetDateTime.parse("2012-08-01T13:15:30.001Z"), - OffsetDateTime.parse("2012-09-10T03:15:30.001Z"), + ApiDate.parse("2012-08-01T13:15:30.001Z"), + ApiDate.parse("2012-09-10T03:15:30.001Z"), "creator-user", "updater-user", ImmutableList.of(), diff --git a/api/src/test/java/keywhiz/api/SecretDeliveryResponseTest.java b/api/src/test/java/keywhiz/api/SecretDeliveryResponseTest.java index 22feb98c8..06f13ebfd 100644 --- a/api/src/test/java/keywhiz/api/SecretDeliveryResponseTest.java +++ b/api/src/test/java/keywhiz/api/SecretDeliveryResponseTest.java @@ -31,7 +31,7 @@ public class SecretDeliveryResponseTest { private static final ImmutableMap metadata = ImmutableMap.of("key1", "value1", "key2", "value2"); - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); private static final Secret secret = new Secret(0, "name", VersionGenerator.now().toHex(), null, "YWJj", NOW, null, NOW, null, metadata, "upload", null); @@ -61,7 +61,7 @@ public void serializesCorrectly() throws Exception { "Database_Password", secret, decodedLength(secret), - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), + ApiDate.parse("2011-09-29T15:46:00.232Z"), false, ImmutableMap.of()); assertThat(asJson(secretDeliveryResponse)) @@ -71,7 +71,7 @@ public void serializesCorrectly() throws Exception { "General_Password..0be68f903f8b7d86", secret, decodedLength(secret), - OffsetDateTime.parse("2011-09-29T15:46:00.312Z"), + ApiDate.parse("2011-09-29T15:46:00.312Z"), true, ImmutableMap.of()); assertThat(asJson(secretDeliveryResponseWithVersion)) @@ -81,7 +81,7 @@ public void serializesCorrectly() throws Exception { "Nobody_PgPass", secret, decodedLength(secret), - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), + ApiDate.parse("2011-09-29T15:46:00.232Z"), false, ImmutableMap.of("mode", "0400", "owner", "nobody")); assertThat(asJson(secretDeliveryResponseWithMetadata)) diff --git a/api/src/test/java/keywhiz/api/SecretDetailResponseTest.java b/api/src/test/java/keywhiz/api/SecretDetailResponseTest.java index 9a7be78be..4649078e2 100644 --- a/api/src/test/java/keywhiz/api/SecretDetailResponseTest.java +++ b/api/src/test/java/keywhiz/api/SecretDetailResponseTest.java @@ -32,9 +32,9 @@ public class SecretDetailResponseTest { 1000, "secretName", "desc", - OffsetDateTime.parse("2013-03-28T21:23:04.159Z"), + ApiDate.parse("2013-03-28T21:23:00.000Z"), "keywhizAdmin", - OffsetDateTime.parse("2013-03-28T21:23:04.159Z"), + ApiDate.parse("2013-03-28T21:23:04.159Z"), "keywhizAdmin", true, ImmutableMap.of("mode", "0660"), @@ -42,13 +42,14 @@ public class SecretDetailResponseTest { new Group(2000, "someGroup", "groupDesc", - OffsetDateTime.parse("2013-03-28T21:29:27.465Z"), + ApiDate.parse("2013-03-28T21:29:27.465Z"), "keywhizAdmin", - OffsetDateTime.parse("2013-03-28T21:29:27.465Z"), + ApiDate.parse("2013-03-28T21:29:27.465Z"), "keywhizAdmin") ), ImmutableList.of()); + assertThat(asJson(secretDetailResponse)) .isEqualTo(jsonFixture("fixtures/secretDetailResponse.json")); } diff --git a/api/src/test/java/keywhiz/api/SecretsResponseTest.java b/api/src/test/java/keywhiz/api/SecretsResponseTest.java index 58723493c..d466b984a 100644 --- a/api/src/test/java/keywhiz/api/SecretsResponseTest.java +++ b/api/src/test/java/keywhiz/api/SecretsResponseTest.java @@ -34,9 +34,9 @@ public class SecretsResponseTest { "trapdoor", "0be6a2fc049ee349", "v1", - OffsetDateTime.parse("2013-03-28T21:42:42.573Z"), + ApiDate.parse("2013-03-28T21:42:42.573Z"), "keywhizAdmin", - OffsetDateTime.parse("2013-03-28T21:42:42.573Z"), + ApiDate.parse("2013-03-28T21:42:42.573Z"), "keywhizAdmin", ImmutableMap.of("owner", "the king"), "password", @@ -46,9 +46,9 @@ public class SecretsResponseTest { "anotherSecret", "", "", - OffsetDateTime.parse("2013-04-28T21:42:42.573Z"), + ApiDate.parse("2013-04-28T21:42:42.573Z"), "keywhizAdmin", - OffsetDateTime.parse("2013-04-28T21:42:42.573Z"), + ApiDate.parse("2013-04-28T21:42:42.573Z"), "keywhizAdmin", null, "upload", diff --git a/api/src/test/java/keywhiz/api/model/ClientTest.java b/api/src/test/java/keywhiz/api/model/ClientTest.java index 3237db872..4da916fac 100644 --- a/api/src/test/java/keywhiz/api/model/ClientTest.java +++ b/api/src/test/java/keywhiz/api/model/ClientTest.java @@ -17,6 +17,8 @@ package keywhiz.api.model; import java.time.OffsetDateTime; + +import keywhiz.api.ApiDate; import org.junit.Test; import static keywhiz.testing.JsonHelpers.asJson; @@ -28,9 +30,9 @@ public class ClientTest { Client client = new Client(200, "someClient", "clientDesc", - OffsetDateTime.parse("2013-03-28T21:29:27.465Z"), + ApiDate.parse("2013-03-28T21:29:27.465Z"), "keywhizAdmin", - OffsetDateTime.parse("2013-03-28T21:29:27.465Z"), + ApiDate.parse("2013-03-28T21:29:27.465Z"), "keywhizAdmin", true, false); diff --git a/api/src/test/java/keywhiz/api/model/GroupTest.java b/api/src/test/java/keywhiz/api/model/GroupTest.java index 3ce1be4e0..072d35038 100644 --- a/api/src/test/java/keywhiz/api/model/GroupTest.java +++ b/api/src/test/java/keywhiz/api/model/GroupTest.java @@ -17,6 +17,8 @@ package keywhiz.api.model; import java.time.OffsetDateTime; + +import keywhiz.api.ApiDate; import org.junit.Test; import static keywhiz.testing.JsonHelpers.asJson; @@ -28,9 +30,9 @@ public class GroupTest { Group group = new Group(330, "someGroup", "groupDesc", - OffsetDateTime.parse("2013-03-28T21:29:27.465Z"), + ApiDate.parse("2013-03-28T21:29:27.465Z"), "keywhizAdmin", - OffsetDateTime.parse("2013-03-28T21:29:27.465Z"), + ApiDate.parse("2013-03-28T21:29:27.465Z"), "keywhizAdmin"); assertThat(asJson(group)).isEqualTo(jsonFixture("fixtures/group.json")); diff --git a/api/src/test/java/keywhiz/api/model/SanitizedSecretTest.java b/api/src/test/java/keywhiz/api/model/SanitizedSecretTest.java index 4a4e823de..adbe0b38d 100644 --- a/api/src/test/java/keywhiz/api/model/SanitizedSecretTest.java +++ b/api/src/test/java/keywhiz/api/model/SanitizedSecretTest.java @@ -18,6 +18,8 @@ import com.google.common.collect.ImmutableMap; import java.time.OffsetDateTime; + +import keywhiz.api.ApiDate; import org.junit.Test; import static keywhiz.testing.JsonHelpers.asJson; @@ -27,17 +29,17 @@ public class SanitizedSecretTest { @Test public void serializesCorrectly() throws Exception { SanitizedSecret sanitizedSecret = SanitizedSecret.of( - 767, - "trapdoor", - "0be6a2fc049ee349", - "v1", - OffsetDateTime.parse("2013-03-28T21:42:42.573Z"), - "keywhizAdmin", - OffsetDateTime.parse("2013-03-28T21:42:42.573Z"), - "keywhizAdmin", - ImmutableMap.of("owner", "the king"), - "password", - ImmutableMap.of("favoriteFood", "PB&J sandwich")); + 767, + "trapdoor", + "0be6a2fc049ee349", + "v1", + ApiDate.parse("2013-03-28T21:42:42.573Z"), + "keywhizAdmin", + ApiDate.parse("2013-03-28T21:42:42.573Z"), + "keywhizAdmin", + ImmutableMap.of("owner", "the king"), + "password", + ImmutableMap.of("favoriteFood", "PB&J sandwich")); assertThat(asJson(sanitizedSecret)) .isEqualTo(jsonFixture("fixtures/sanitizedSecret.json")); diff --git a/api/src/test/resources/fixtures/secretDetailResponse.json b/api/src/test/resources/fixtures/secretDetailResponse.json index 10862941e..7bcd22df0 100644 --- a/api/src/test/resources/fixtures/secretDetailResponse.json +++ b/api/src/test/resources/fixtures/secretDetailResponse.json @@ -2,7 +2,7 @@ "id" : 1000, "name" : "secretName", "description" : "desc", - "createdAt" : "2013-03-28T21:23:04.159Z", + "createdAt" : "2013-03-28T21:23:00.000Z", "createdBy" : "keywhizAdmin", "updatedAt" : "2013-03-28T21:23:04.159Z", "updatedBy" : "keywhizAdmin", diff --git a/cli/src/main/java/keywhiz/cli/CliModule.java b/cli/src/main/java/keywhiz/cli/CliModule.java index 4dacfeee3..a6afc9509 100644 --- a/cli/src/main/java/keywhiz/cli/CliModule.java +++ b/cli/src/main/java/keywhiz/cli/CliModule.java @@ -18,18 +18,13 @@ import com.beust.jcommander.JCommander; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.util.StdDateFormat; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JSR310Module; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.name.Names; import com.google.inject.util.Providers; import io.dropwizard.jackson.Jackson; -import java.util.Locale; import java.util.Map; -import java.util.TimeZone; import keywhiz.cli.configs.CliConfiguration; public class CliModule extends AbstractModule { @@ -76,9 +71,6 @@ public CliModule(CliConfiguration config, JCommander parentCommander, JCommander */ ObjectMapper objectMapper = Jackson.newObjectMapper(); objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JSR310Module()); - objectMapper.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - objectMapper.setDateFormat(StdDateFormat.getISO8601Format(TimeZone.getTimeZone("UTC"), Locale.ENGLISH)); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return objectMapper; } diff --git a/cli/src/test/java/keywhiz/cli/commands/AddActionTest.java b/cli/src/test/java/keywhiz/cli/commands/AddActionTest.java index c6752ba54..df17f2b41 100644 --- a/cli/src/test/java/keywhiz/cli/commands/AddActionTest.java +++ b/cli/src/test/java/keywhiz/cli/commands/AddActionTest.java @@ -22,6 +22,8 @@ import java.time.OffsetDateTime; import java.util.Arrays; import java.util.Base64; + +import keywhiz.api.ApiDate; import keywhiz.api.SecretDetailResponse; import keywhiz.api.model.Client; import keywhiz.api.model.Group; @@ -44,7 +46,7 @@ import static org.mockito.Mockito.when; public class AddActionTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); private static final Base64.Decoder base64Decoder = Base64.getDecoder(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); diff --git a/cli/src/test/java/keywhiz/cli/commands/AssignActionTest.java b/cli/src/test/java/keywhiz/cli/commands/AssignActionTest.java index ed48e5067..46f0712f8 100644 --- a/cli/src/test/java/keywhiz/cli/commands/AssignActionTest.java +++ b/cli/src/test/java/keywhiz/cli/commands/AssignActionTest.java @@ -20,6 +20,8 @@ import com.google.common.collect.ImmutableMap; import java.time.OffsetDateTime; import java.util.Arrays; + +import keywhiz.api.ApiDate; import keywhiz.api.GroupDetailResponse; import keywhiz.api.model.Client; import keywhiz.api.model.Group; @@ -42,7 +44,7 @@ import static org.mockito.Mockito.when; public class AssignActionTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); diff --git a/cli/src/test/java/keywhiz/cli/commands/DeleteActionTest.java b/cli/src/test/java/keywhiz/cli/commands/DeleteActionTest.java index c9e808021..8c91c3ff4 100644 --- a/cli/src/test/java/keywhiz/cli/commands/DeleteActionTest.java +++ b/cli/src/test/java/keywhiz/cli/commands/DeleteActionTest.java @@ -20,6 +20,8 @@ import java.io.ByteArrayInputStream; import java.time.OffsetDateTime; import java.util.Arrays; + +import keywhiz.api.ApiDate; import keywhiz.api.model.Client; import keywhiz.api.model.Group; import keywhiz.api.model.SanitizedSecret; @@ -42,7 +44,7 @@ import static org.mockito.Mockito.when; public class DeleteActionTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); diff --git a/cli/src/test/java/keywhiz/cli/commands/DescribeActionTest.java b/cli/src/test/java/keywhiz/cli/commands/DescribeActionTest.java index f8e2ce6d1..bd7978738 100644 --- a/cli/src/test/java/keywhiz/cli/commands/DescribeActionTest.java +++ b/cli/src/test/java/keywhiz/cli/commands/DescribeActionTest.java @@ -19,6 +19,8 @@ import com.google.common.collect.ImmutableMap; import java.time.OffsetDateTime; import java.util.Arrays; + +import keywhiz.api.ApiDate; import keywhiz.api.model.Client; import keywhiz.api.model.Group; import keywhiz.api.model.SanitizedSecret; @@ -40,7 +42,7 @@ import static org.mockito.Mockito.when; public class DescribeActionTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); diff --git a/cli/src/test/java/keywhiz/cli/commands/UnassignActionTest.java b/cli/src/test/java/keywhiz/cli/commands/UnassignActionTest.java index e1926cc76..6914d4971 100644 --- a/cli/src/test/java/keywhiz/cli/commands/UnassignActionTest.java +++ b/cli/src/test/java/keywhiz/cli/commands/UnassignActionTest.java @@ -20,6 +20,8 @@ import com.google.common.collect.ImmutableMap; import java.time.OffsetDateTime; import java.util.Arrays; + +import keywhiz.api.ApiDate; import keywhiz.api.GroupDetailResponse; import keywhiz.api.model.Client; import keywhiz.api.model.Group; @@ -39,7 +41,7 @@ import static org.mockito.Mockito.when; public class UnassignActionTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); diff --git a/pom.xml b/pom.xml index e1fdc7158..68f15d831 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ 0.8.1 4.0 - 2.5.3 + 2.6.1 3.6.2 1.6.2 1.7.12 diff --git a/server/src/main/java/keywhiz/KeywhizService.java b/server/src/main/java/keywhiz/KeywhizService.java index 4f7b266da..878962241 100644 --- a/server/src/main/java/keywhiz/KeywhizService.java +++ b/server/src/main/java/keywhiz/KeywhizService.java @@ -17,10 +17,8 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.util.StdDateFormat; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JSR310Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.google.common.collect.Maps; import com.google.inject.Guice; import com.google.inject.Injector; @@ -29,9 +27,7 @@ import io.dropwizard.jersey.setup.JerseyEnvironment; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; -import java.util.Locale; import java.util.Map; -import java.util.TimeZone; import keywhiz.auth.mutualssl.ClientCertificateFilter; import keywhiz.auth.xsrf.XsrfServletFilter; import keywhiz.commands.DbSeedCommand; @@ -201,7 +197,6 @@ public void addSecretGenerator(String name, SecretGenerator secretGenerator) jersey.register(injector.getInstance(AutomationSecretGeneratorsResource.class)); logger.debug("Keywhiz configuration complete"); } - /** * Customizes ObjectMapper for common settings. * @@ -210,9 +205,7 @@ public void addSecretGenerator(String name, SecretGenerator secretGenerator) */ public static ObjectMapper customizeObjectMapper(ObjectMapper objectMapper) { objectMapper.registerModules(new Jdk8Module()); - objectMapper.registerModules(new JSR310Module()); - objectMapper.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - objectMapper.setDateFormat(StdDateFormat.getISO8601Format(TimeZone.getTimeZone("UTC"), Locale.ENGLISH)); + objectMapper.registerModules(new JavaTimeModule()); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return objectMapper; } diff --git a/server/src/main/java/keywhiz/service/daos/ClientMapper.java b/server/src/main/java/keywhiz/service/daos/ClientMapper.java index 00c734ccb..1cc67943f 100644 --- a/server/src/main/java/keywhiz/service/daos/ClientMapper.java +++ b/server/src/main/java/keywhiz/service/daos/ClientMapper.java @@ -16,6 +16,7 @@ package keywhiz.service.daos; +import keywhiz.api.ApiDate; import keywhiz.api.model.Client; import keywhiz.jooq.tables.records.ClientsRecord; import org.jooq.RecordMapper; @@ -32,9 +33,9 @@ public Client map(ClientsRecord r) { r.getId(), r.getName(), r.getDescription(), - r.getCreatedat(), + new ApiDate(r.getCreatedat()), r.getCreatedby(), - r.getUpdatedat(), + new ApiDate(r.getUpdatedat()), r.getUpdatedby(), r.getEnabled(), r.getAutomationallowed()); diff --git a/server/src/main/java/keywhiz/service/daos/GroupMapper.java b/server/src/main/java/keywhiz/service/daos/GroupMapper.java index e04dd65f8..04afdd15e 100644 --- a/server/src/main/java/keywhiz/service/daos/GroupMapper.java +++ b/server/src/main/java/keywhiz/service/daos/GroupMapper.java @@ -16,6 +16,7 @@ package keywhiz.service.daos; +import keywhiz.api.ApiDate; import keywhiz.api.model.Group; import keywhiz.jooq.tables.records.GroupsRecord; import org.jooq.RecordMapper; @@ -26,9 +27,9 @@ public Group map(GroupsRecord r) { r.getId(), r.getName(), r.getDescription(), - r.getCreatedat(), + new ApiDate(r.getCreatedat()), r.getCreatedby(), - r.getUpdatedat(), + new ApiDate(r.getUpdatedat()), r.getUpdatedby()); } } diff --git a/server/src/main/java/keywhiz/service/daos/SecretContentMapper.java b/server/src/main/java/keywhiz/service/daos/SecretContentMapper.java index b4213d42b..5314ecb3f 100644 --- a/server/src/main/java/keywhiz/service/daos/SecretContentMapper.java +++ b/server/src/main/java/keywhiz/service/daos/SecretContentMapper.java @@ -22,6 +22,8 @@ import java.io.IOException; import java.util.Map; import javax.inject.Inject; + +import keywhiz.api.ApiDate; import keywhiz.api.model.SecretContent; import keywhiz.jooq.tables.records.SecretsContentRecord; import org.jooq.RecordMapper; @@ -41,9 +43,9 @@ public SecretContent map(SecretsContentRecord r) { r.getSecretid(), r.getEncryptedContent(), r.getVersion(), - r.getCreatedat(), + new ApiDate(r.getCreatedat()), r.getCreatedby(), - r.getUpdatedat(), + new ApiDate(r.getUpdatedat()), r.getUpdatedby(), tryToReadMapFromMetadata(r)); } diff --git a/server/src/main/java/keywhiz/service/daos/SecretSeriesMapper.java b/server/src/main/java/keywhiz/service/daos/SecretSeriesMapper.java index e261fb6bd..e35c2f0db 100644 --- a/server/src/main/java/keywhiz/service/daos/SecretSeriesMapper.java +++ b/server/src/main/java/keywhiz/service/daos/SecretSeriesMapper.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.util.Map; import javax.inject.Inject; + +import keywhiz.api.ApiDate; import keywhiz.api.model.SecretSeries; import keywhiz.jooq.tables.records.SecretsRecord; import org.jooq.RecordMapper; @@ -39,9 +41,9 @@ public SecretSeries map(SecretsRecord r) { r.getId(), r.getName(), r.getDescription(), - r.getCreatedat(), + new ApiDate(r.getCreatedat()), r.getCreatedby(), - r.getUpdatedat(), + new ApiDate(r.getUpdatedat()), r.getUpdatedby(), r.getType(), tryToReadMapValue(r)); diff --git a/server/src/test/java/keywhiz/service/daos/SecretContentDAOTest.java b/server/src/test/java/keywhiz/service/daos/SecretContentDAOTest.java index ef37b7ba7..64ce5fd2c 100644 --- a/server/src/test/java/keywhiz/service/daos/SecretContentDAOTest.java +++ b/server/src/test/java/keywhiz/service/daos/SecretContentDAOTest.java @@ -27,6 +27,7 @@ import java.util.List; import javax.inject.Inject; import keywhiz.TestDBRule; +import keywhiz.api.ApiDate; import keywhiz.api.model.SecretContent; import keywhiz.service.config.Readonly; import keywhiz.service.daos.SecretContentDAO.SecretContentDAOFactory; @@ -50,7 +51,7 @@ public class SecretContentDAOTest { @Inject SecretContentDAOFactory secretContentDAOFactory; - final static OffsetDateTime date = OffsetDateTime.now(ZoneId.of("UTC")); + final static ApiDate date = ApiDate.now(); ImmutableMap metadata = ImmutableMap.of("foo", "bar"); SecretContent secretContent1 = SecretContent.of(11, 22, "[crypted]", "", date, "creator", date, @@ -74,9 +75,9 @@ public void setUp() throws Exception { .set(SECRETS_CONTENT.SECRETID, (int) secretContent1.secretSeriesId()) .set(SECRETS_CONTENT.ENCRYPTED_CONTENT, secretContent1.encryptedContent()) .set(SECRETS_CONTENT.VERSION, secretContent1.version().orElse(null)) - .set(SECRETS_CONTENT.CREATEDAT, secretContent1.createdAt()) + .set(SECRETS_CONTENT.CREATEDAT, secretContent1.createdAt().offsetDateTime) .set(SECRETS_CONTENT.CREATEDBY, secretContent1.createdBy()) - .set(SECRETS_CONTENT.UPDATEDAT, secretContent1.updatedAt()) + .set(SECRETS_CONTENT.UPDATEDAT, secretContent1.updatedAt().offsetDateTime) .set(SECRETS_CONTENT.UPDATEDBY, secretContent1.updatedBy()) .set(SECRETS_CONTENT.METADATA, JSONObject.toJSONString(secretContent1.metadata())) .execute(); diff --git a/server/src/test/java/keywhiz/service/daos/SecretDAOTest.java b/server/src/test/java/keywhiz/service/daos/SecretDAOTest.java index aeb8a255e..d8df10f76 100644 --- a/server/src/test/java/keywhiz/service/daos/SecretDAOTest.java +++ b/server/src/test/java/keywhiz/service/daos/SecretDAOTest.java @@ -25,6 +25,7 @@ import java.util.List; import javax.inject.Inject; import keywhiz.TestDBRule; +import keywhiz.api.ApiDate; import keywhiz.api.model.SecretContent; import keywhiz.api.model.SecretSeries; import keywhiz.api.model.SecretSeriesAndContent; @@ -54,7 +55,7 @@ public class SecretDAOTest { @Inject SecretDAOFactory secretDAOFactory; final static ContentCryptographer cryptographer = CryptoFixtures.contentCryptographer(); - final static OffsetDateTime date = OffsetDateTime.now(); + final static ApiDate date = ApiDate.now(); final static String version = VersionGenerator.now().toHex(); ImmutableMap emptyMetadata = ImmutableMap.of(); @@ -81,7 +82,7 @@ public void setUp() throws Exception { .set(SECRETS.ID, Math.toIntExact(secret1.series().id())) .set(SECRETS.NAME, secret1.series().name()) .set(SECRETS.DESCRIPTION, secret1.series().description()) - .set(SECRETS.CREATEDAT, secret1.series().createdAt()) + .set(SECRETS.CREATEDAT, secret1.series().createdAt().offsetDateTime) .set(SECRETS.CREATEDBY, secret1.series().createdBy()) .set(SECRETS.UPDATEDBY, secret1.series().updatedBy()) .execute(); @@ -90,7 +91,7 @@ public void setUp() throws Exception { .set(SECRETS_CONTENT.SECRETID, Math.toIntExact(secret1.series().id())) .set(SECRETS_CONTENT.VERSION, secret1.content().version().orElse(null)) .set(SECRETS_CONTENT.ENCRYPTED_CONTENT, secret1.content().encryptedContent()) - .set(SECRETS_CONTENT.CREATEDAT, secret1.content().createdAt()) + .set(SECRETS_CONTENT.CREATEDAT, secret1.content().createdAt().offsetDateTime) .set(SECRETS_CONTENT.CREATEDBY, secret1.content().createdBy()) .set(SECRETS_CONTENT.UPDATEDBY, secret1.content().updatedBy()) .set(SECRETS_CONTENT.METADATA, objectMapper.writeValueAsString(secret1.content().metadata())) @@ -100,7 +101,7 @@ public void setUp() throws Exception { .set(SECRETS.ID, Math.toIntExact(secret2.series().id())) .set(SECRETS.NAME, secret2.series().name()) .set(SECRETS.DESCRIPTION, secret2.series().description()) - .set(SECRETS.CREATEDAT, secret2.series().createdAt()) + .set(SECRETS.CREATEDAT, secret2.series().createdAt().offsetDateTime) .set(SECRETS.CREATEDBY, secret2.series().createdBy()) .set(SECRETS.UPDATEDBY, secret2.series().updatedBy()) .execute(); @@ -109,7 +110,7 @@ public void setUp() throws Exception { .set(SECRETS_CONTENT.SECRETID, Math.toIntExact(secret2.series().id())) .set(SECRETS_CONTENT.VERSION, secret2.content().version().orElse(null)) .set(SECRETS_CONTENT.ENCRYPTED_CONTENT, secret2.content().encryptedContent()) - .set(SECRETS_CONTENT.CREATEDAT, secret2.content().createdAt()) + .set(SECRETS_CONTENT.CREATEDAT, secret2.content().createdAt().offsetDateTime) .set(SECRETS_CONTENT.CREATEDBY, secret2.content().createdBy()) .set(SECRETS_CONTENT.UPDATEDBY, secret2.content().updatedBy()) .set(SECRETS_CONTENT.METADATA, objectMapper.writeValueAsString(secret2.content().metadata())) diff --git a/server/src/test/java/keywhiz/service/daos/SecretSeriesDAOTest.java b/server/src/test/java/keywhiz/service/daos/SecretSeriesDAOTest.java index f583c0ee0..29c3bec9d 100644 --- a/server/src/test/java/keywhiz/service/daos/SecretSeriesDAOTest.java +++ b/server/src/test/java/keywhiz/service/daos/SecretSeriesDAOTest.java @@ -24,6 +24,7 @@ import java.time.OffsetDateTime; import javax.inject.Inject; import keywhiz.TestDBRule; +import keywhiz.api.ApiDate; import keywhiz.api.model.SecretSeries; import keywhiz.service.config.Readonly; import keywhiz.service.daos.SecretSeriesDAO.SecretSeriesDAOFactory; @@ -55,7 +56,7 @@ public class SecretSeriesDAOTest { @Test public void createAndLookupSecretSeries() { int before = tableSize(); - OffsetDateTime now = OffsetDateTime.now(); + ApiDate now = ApiDate.now(); long id = secretSeriesDAO.createSecretSeries("newSecretSeries", "creator", "desc", null, ImmutableMap.of("foo", "bar")); diff --git a/server/src/test/java/keywhiz/service/providers/ClientAuthFactoryTest.java b/server/src/test/java/keywhiz/service/providers/ClientAuthFactoryTest.java index 4d646476e..ad6df3e05 100644 --- a/server/src/test/java/keywhiz/service/providers/ClientAuthFactoryTest.java +++ b/server/src/test/java/keywhiz/service/providers/ClientAuthFactoryTest.java @@ -21,6 +21,8 @@ import java.util.Optional; import javax.ws.rs.NotAuthorizedException; import javax.ws.rs.core.SecurityContext; + +import keywhiz.api.ApiDate; import keywhiz.api.model.Client; import keywhiz.auth.mutualssl.SimplePrincipal; import keywhiz.service.daos.ClientDAO; @@ -82,7 +84,7 @@ public void rejectsDisabledClients() { } @Test public void createsDbRecordForNewClient() throws Exception { - OffsetDateTime now = OffsetDateTime.now(); + ApiDate now = ApiDate.now(); Client newClient = new Client(2345L, "new-client", "desc", now, "automatic", now, "automatic", true, false); diff --git a/server/src/test/java/keywhiz/service/resources/SecretDeliveryResourceIntegrationTest.java b/server/src/test/java/keywhiz/service/resources/SecretDeliveryResourceIntegrationTest.java index 8d5c053bf..88da72059 100644 --- a/server/src/test/java/keywhiz/service/resources/SecretDeliveryResourceIntegrationTest.java +++ b/server/src/test/java/keywhiz/service/resources/SecretDeliveryResourceIntegrationTest.java @@ -24,6 +24,7 @@ import keywhiz.IntegrationTestRule; import keywhiz.KeywhizService; import keywhiz.TestClients; +import keywhiz.api.ApiDate; import keywhiz.api.SecretDeliveryResponse; import keywhiz.api.model.Secret; import org.junit.Before; @@ -44,8 +45,8 @@ public class SecretDeliveryResourceIntegrationTest { @Before public void setUp() throws Exception { client = TestClients.mutualSslClient(); generalPassword = new Secret(0, "General_Password", null, null, "YXNkZGFz", - OffsetDateTime.parse("2011-09-29T15:46:00Z"), null, - OffsetDateTime.parse("2011-09-29T15:46:00Z"), null, null, "upload", null); + ApiDate.parse("2011-09-29T15:46:00Z"), null, + ApiDate.parse("2011-09-29T15:46:00Z"), null, null, "upload", null); } @Test public void returnsSecretWhenAllowed() throws Exception { diff --git a/server/src/test/java/keywhiz/service/resources/SecretDeliveryResourceTest.java b/server/src/test/java/keywhiz/service/resources/SecretDeliveryResourceTest.java index 4ad357efc..df1c20aed 100644 --- a/server/src/test/java/keywhiz/service/resources/SecretDeliveryResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/SecretDeliveryResourceTest.java @@ -19,6 +19,8 @@ import java.util.Optional; import javax.ws.rs.ForbiddenException; import javax.ws.rs.NotFoundException; + +import keywhiz.api.ApiDate; import keywhiz.api.SecretDeliveryResponse; import keywhiz.api.model.Client; import keywhiz.api.model.SanitizedSecret; @@ -38,7 +40,7 @@ import static org.mockito.Mockito.when; public class SecretDeliveryResourceTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); diff --git a/server/src/test/java/keywhiz/service/resources/SecretsDeliveryResourceIntegrationTest.java b/server/src/test/java/keywhiz/service/resources/SecretsDeliveryResourceIntegrationTest.java index fa0fdbdc2..6529951da 100644 --- a/server/src/test/java/keywhiz/service/resources/SecretsDeliveryResourceIntegrationTest.java +++ b/server/src/test/java/keywhiz/service/resources/SecretsDeliveryResourceIntegrationTest.java @@ -22,6 +22,7 @@ import java.time.OffsetDateTime; import keywhiz.IntegrationTestRule; import keywhiz.TestClients; +import keywhiz.api.ApiDate; import keywhiz.api.SecretDeliveryResponse; import keywhiz.api.model.SanitizedSecret; import keywhiz.api.model.Secret; @@ -54,25 +55,25 @@ public void setUp() throws Exception { generalPassword = SecretDeliveryResponse.fromSanitizedSecret( SanitizedSecret.fromSecret( new Secret(0, "General_Password", null, null, "YXNkZGFz", - OffsetDateTime.parse("2011-09-29T15:46:00.312Z"), null, - OffsetDateTime.parse("2011-09-29T15:46:00.312Z"), null, null, null, null))); + ApiDate.parse("2011-09-29T15:46:00.312Z"), null, + ApiDate.parse("2011-09-29T15:46:00.312Z"), null, null, null, null))); databasePassword = SecretDeliveryResponse.fromSanitizedSecret( SanitizedSecret.fromSecret( new Secret(1, "Database_Password", null, null, "MTIzNDU=", - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), null, - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), null, null, null, null))); + ApiDate.parse("2011-09-29T15:46:00.232Z"), null, + ApiDate.parse("2011-09-29T15:46:00.232Z"), null, null, null, null))); nobodyPgPassPassword = SecretDeliveryResponse.fromSanitizedSecret( SanitizedSecret.fromSecret( new Secret(2, "Nobody_PgPass", null, null, "c29tZWhvc3Quc29tZXBsYWNlLmNvbTo1NDMyOnNvbWVkYXRhYmFzZTptaXN0ZXJhd2Vzb21lOmhlbGwwTWNGbHkK", - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), null, - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), null, + ApiDate.parse("2011-09-29T15:46:00.232Z"), null, + ApiDate.parse("2011-09-29T15:46:00.232Z"), null, ImmutableMap.of("owner", "nobody", "mode", "0400"), null, null))); nonExistentOwnerPass = SecretDeliveryResponse.fromSanitizedSecret( SanitizedSecret.fromSecret( new Secret(3, "NonexistentOwner_Pass", null, null, "MTIzNDU=", - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), null, - OffsetDateTime.parse("2011-09-29T15:46:00.232Z"), null, + ApiDate.parse("2011-09-29T15:46:00.232Z"), null, + ApiDate.parse("2011-09-29T15:46:00.232Z"), null, ImmutableMap.of("owner", "NonExistent", "mode", "0400"), null, null))); } diff --git a/server/src/test/java/keywhiz/service/resources/SecretsDeliveryResourceTest.java b/server/src/test/java/keywhiz/service/resources/SecretsDeliveryResourceTest.java index b0b008b9c..add25d5fb 100644 --- a/server/src/test/java/keywhiz/service/resources/SecretsDeliveryResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/SecretsDeliveryResourceTest.java @@ -19,6 +19,8 @@ import java.time.OffsetDateTime; import java.util.Base64; import java.util.List; + +import keywhiz.api.ApiDate; import keywhiz.api.SecretDeliveryResponse; import keywhiz.api.model.Client; import keywhiz.api.model.SanitizedSecret; @@ -36,7 +38,7 @@ import static org.mockito.Mockito.when; public class SecretsDeliveryResourceTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); diff --git a/server/src/test/java/keywhiz/service/resources/admin/ClientsResourceTest.java b/server/src/test/java/keywhiz/service/resources/admin/ClientsResourceTest.java index 3e4be941e..2c5f577b3 100644 --- a/server/src/test/java/keywhiz/service/resources/admin/ClientsResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/admin/ClientsResourceTest.java @@ -25,6 +25,8 @@ import java.util.Optional; import javax.ws.rs.NotFoundException; import javax.ws.rs.core.Response; + +import keywhiz.api.ApiDate; import keywhiz.api.ClientDetailResponse; import keywhiz.api.CreateClientRequest; import keywhiz.api.model.Client; @@ -53,7 +55,7 @@ public class ClientsResourceTest { @Mock ClientDAO clientDAO; User user = User.named("user"); - OffsetDateTime now = OffsetDateTime.now(); + ApiDate now = ApiDate.now(); Client client = new Client(1, "client", "1st client", now, "test", now, "test", true, false); ClientsResource resource; diff --git a/server/src/test/java/keywhiz/service/resources/admin/GroupsResourceTest.java b/server/src/test/java/keywhiz/service/resources/admin/GroupsResourceTest.java index dc18dc8ef..8ced6fbcd 100644 --- a/server/src/test/java/keywhiz/service/resources/admin/GroupsResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/admin/GroupsResourceTest.java @@ -23,6 +23,8 @@ import javax.ws.rs.BadRequestException; import javax.ws.rs.NotFoundException; import javax.ws.rs.core.Response; + +import keywhiz.api.ApiDate; import keywhiz.api.CreateGroupRequest; import keywhiz.api.GroupDetailResponse; import keywhiz.api.model.Client; @@ -50,7 +52,7 @@ public class GroupsResourceTest { @Mock GroupDAO groupDAO; User user = User.named("user"); - OffsetDateTime now = OffsetDateTime.now(); + ApiDate now = ApiDate.now(); Group group = new Group(1, "group", "desc", now, "creator", now, "creator"); GroupsResource resource; diff --git a/server/src/test/java/keywhiz/service/resources/admin/MembershipResourceTest.java b/server/src/test/java/keywhiz/service/resources/admin/MembershipResourceTest.java index 879bc2194..1905184a3 100644 --- a/server/src/test/java/keywhiz/service/resources/admin/MembershipResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/admin/MembershipResourceTest.java @@ -19,6 +19,8 @@ import java.time.OffsetDateTime; import javax.ws.rs.NotFoundException; import javax.ws.rs.core.Response; + +import keywhiz.api.ApiDate; import keywhiz.api.model.Client; import keywhiz.api.model.Group; import keywhiz.api.model.Secret; @@ -37,7 +39,7 @@ import static org.mockito.Mockito.verify; public class MembershipResourceTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); diff --git a/server/src/test/java/keywhiz/service/resources/admin/SecretGeneratorsResourceTest.java b/server/src/test/java/keywhiz/service/resources/admin/SecretGeneratorsResourceTest.java index 27b27c2ee..ff2a020b2 100644 --- a/server/src/test/java/keywhiz/service/resources/admin/SecretGeneratorsResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/admin/SecretGeneratorsResourceTest.java @@ -21,6 +21,8 @@ import com.google.common.collect.ImmutableMap; import java.time.OffsetDateTime; import java.util.List; + +import keywhiz.api.ApiDate; import keywhiz.api.model.SanitizedSecret; import keywhiz.api.model.Secret; import keywhiz.auth.User; @@ -37,7 +39,7 @@ import static org.mockito.Mockito.when; public class SecretGeneratorsResourceTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); private static final User user = User.named("creator"); private static final ImmutableMap emptyMap = ImmutableMap.of(); diff --git a/server/src/test/java/keywhiz/service/resources/admin/SecretsResourceTest.java b/server/src/test/java/keywhiz/service/resources/admin/SecretsResourceTest.java index 7db836549..4e861c187 100644 --- a/server/src/test/java/keywhiz/service/resources/admin/SecretsResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/admin/SecretsResourceTest.java @@ -28,6 +28,8 @@ import javax.ws.rs.NotFoundException; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; + +import keywhiz.api.ApiDate; import keywhiz.api.CreateSecretRequest; import keywhiz.api.SecretDetailResponse; import keywhiz.api.model.Client; @@ -55,7 +57,7 @@ import static org.mockito.Mockito.when; public class SecretsResourceTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); diff --git a/server/src/test/java/keywhiz/service/resources/admin/TemplatedSecretGeneratorTest.java b/server/src/test/java/keywhiz/service/resources/admin/TemplatedSecretGeneratorTest.java index 107e6c4c7..506817baf 100644 --- a/server/src/test/java/keywhiz/service/resources/admin/TemplatedSecretGeneratorTest.java +++ b/server/src/test/java/keywhiz/service/resources/admin/TemplatedSecretGeneratorTest.java @@ -23,6 +23,7 @@ import java.util.Optional; import javax.ws.rs.BadRequestException; import keywhiz.FakeRandom; +import keywhiz.api.ApiDate; import keywhiz.api.TemplatedSecretsGeneratorRequest; import keywhiz.api.model.Secret; import keywhiz.auth.User; @@ -71,7 +72,7 @@ public void setUp() { @Test public void createsSecret() throws Exception { - OffsetDateTime now = OffsetDateTime.now(); + ApiDate now = ApiDate.now(); Secret secret = new Secret(5, "test-database.yaml", "versionStamp", "desc", "content", now, "creator", now, "creator", null, null, null); when(secretBuilder.build()).thenReturn(secret); diff --git a/server/src/test/java/keywhiz/service/resources/automation/AutomationClientResourceTest.java b/server/src/test/java/keywhiz/service/resources/automation/AutomationClientResourceTest.java index 687c8b87e..15fdb9758 100644 --- a/server/src/test/java/keywhiz/service/resources/automation/AutomationClientResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/automation/AutomationClientResourceTest.java @@ -21,6 +21,8 @@ import java.util.Optional; import javax.ws.rs.NotFoundException; import javax.ws.rs.core.Response; + +import keywhiz.api.ApiDate; import keywhiz.api.ClientDetailResponse; import keywhiz.api.CreateClientRequest; import keywhiz.api.model.AutomationClient; @@ -44,7 +46,7 @@ public class AutomationClientResourceTest { @Mock ClientDAO clientDAO; @Mock AclDAO aclDAO; - OffsetDateTime now = OffsetDateTime.now(); + ApiDate now = ApiDate.now(); AutomationClient automation = AutomationClient.of( new Client(1, "automation", "Automation client", now, "test", now, "test", true, true)); diff --git a/server/src/test/java/keywhiz/service/resources/automation/AutomationGroupResourceTest.java b/server/src/test/java/keywhiz/service/resources/automation/AutomationGroupResourceTest.java index 4fd940eb7..95cbdeded 100644 --- a/server/src/test/java/keywhiz/service/resources/automation/AutomationGroupResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/automation/AutomationGroupResourceTest.java @@ -22,6 +22,8 @@ import java.time.OffsetDateTime; import java.util.Optional; import javax.ws.rs.core.Response; + +import keywhiz.api.ApiDate; import keywhiz.api.CreateGroupRequest; import keywhiz.api.GroupDetailResponse; import keywhiz.api.model.AutomationClient; @@ -46,7 +48,7 @@ public class AutomationGroupResourceTest { @Mock GroupDAO groupDAO; @Mock AclDAO aclDAO; - OffsetDateTime now = OffsetDateTime.now(); + ApiDate now = ApiDate.now(); AutomationClient automation = AutomationClient.of( new Client(1, "automation", "Automation client", now, "test", now, "test", true, true)); diff --git a/server/src/test/java/keywhiz/service/resources/automation/AutomationSecretGeneratorsResourceTest.java b/server/src/test/java/keywhiz/service/resources/automation/AutomationSecretGeneratorsResourceTest.java index c48fbd525..48757fd22 100644 --- a/server/src/test/java/keywhiz/service/resources/automation/AutomationSecretGeneratorsResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/automation/AutomationSecretGeneratorsResourceTest.java @@ -21,6 +21,8 @@ import com.google.common.collect.ImmutableMap; import java.time.OffsetDateTime; import java.util.List; + +import keywhiz.api.ApiDate; import keywhiz.api.model.AutomationClient; import keywhiz.api.model.Client; import keywhiz.api.model.SanitizedSecret; @@ -39,7 +41,7 @@ import static org.mockito.Mockito.when; public class AutomationSecretGeneratorsResourceTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); private static final AutomationClient automationClient = AutomationClient.of( new Client(1, "automation", "Automation client", NOW, "test", NOW, "test", true, true)); diff --git a/server/src/test/java/keywhiz/service/resources/automation/AutomationSecretResourceTest.java b/server/src/test/java/keywhiz/service/resources/automation/AutomationSecretResourceTest.java index 0d6864910..684e8d69b 100644 --- a/server/src/test/java/keywhiz/service/resources/automation/AutomationSecretResourceTest.java +++ b/server/src/test/java/keywhiz/service/resources/automation/AutomationSecretResourceTest.java @@ -19,6 +19,8 @@ import java.time.OffsetDateTime; import java.util.Base64; import java.util.Optional; + +import keywhiz.api.ApiDate; import keywhiz.api.AutomationSecretResponse; import keywhiz.api.CreateSecretRequest; import keywhiz.api.model.AutomationClient; @@ -48,7 +50,7 @@ import static org.mockito.Mockito.when; public class AutomationSecretResourceTest { - private static final OffsetDateTime NOW = OffsetDateTime.now(); + private static final ApiDate NOW = ApiDate.now(); AutomationSecretResource resource; diff --git a/testing/src/main/java/keywhiz/testing/JsonHelpers.java b/testing/src/main/java/keywhiz/testing/JsonHelpers.java index 5d516c60d..c98be2461 100644 --- a/testing/src/main/java/keywhiz/testing/JsonHelpers.java +++ b/testing/src/main/java/keywhiz/testing/JsonHelpers.java @@ -20,19 +20,14 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.util.StdDateFormat; import com.fasterxml.jackson.datatype.guava.GuavaModule; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JSR310Module; import io.dropwizard.jackson.AnnotationSensitivePropertyNamingStrategy; import io.dropwizard.jackson.DiscoverableSubtypeResolver; import io.dropwizard.jackson.FuzzyEnumModule; import io.dropwizard.jackson.GuavaExtrasModule; import io.dropwizard.jackson.LogbackModule; import java.io.IOException; -import java.util.Locale; -import java.util.TimeZone; import static io.dropwizard.testing.FixtureHelpers.fixture; @@ -98,16 +93,12 @@ public static String jsonFixture(String filename) throws IOException { private static ObjectMapper customizeObjectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Jdk8Module()); - mapper.registerModule(new JSR310Module()); mapper.registerModule(new GuavaModule()); mapper.registerModule(new LogbackModule()); mapper.registerModule(new GuavaExtrasModule()); mapper.registerModule(new FuzzyEnumModule()); mapper.setPropertyNamingStrategy(new AnnotationSensitivePropertyNamingStrategy()); mapper.setSubtypeResolver(new DiscoverableSubtypeResolver()); - - mapper.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - mapper.setDateFormat(StdDateFormat.getISO8601Format(TimeZone.getTimeZone("UTC"), Locale.ENGLISH)); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return mapper; }