Search in sources :

Example 1 with EPOCH

use of java.time.Instant.EPOCH in project keywhiz by square.

the class ClientDAO method sawClient.

public void sawClient(Client client, @Nullable Principal principal) {
    Instant now = Instant.now();
    Instant lastSeen = Optional.ofNullable(client.getLastSeen()).map(ls -> Instant.ofEpochSecond(ls.toEpochSecond())).orElse(EPOCH);
    final Instant expiration;
    if (principal instanceof CertificatePrincipal) {
        expiration = ((CertificatePrincipal) principal).getCertificateExpiration();
    } else {
        expiration = EPOCH;
    }
    // this way we can have less granularity on lastSeen and save DB writes
    if (now.isAfter(lastSeen.plus(LAST_SEEN_THRESHOLD))) {
        dslContext.transaction(configuration -> {
            Param<Long> lastSeenValue = DSL.val(now.getEpochSecond(), CLIENTS.LASTSEEN);
            Param<Long> expirationValue = DSL.val(expiration.getEpochSecond(), CLIENTS.EXPIRATION);
            DSL.using(configuration).update(CLIENTS).set(CLIENTS.LASTSEEN, when(CLIENTS.LASTSEEN.isNull(), lastSeenValue).otherwise(greatest(CLIENTS.LASTSEEN, lastSeenValue))).set(CLIENTS.EXPIRATION, expirationValue).where(CLIENTS.ID.eq(client.getId())).execute();
        });
    }
}
Also used : MEMBERSHIPS(keywhiz.jooq.tables.Memberships.MEMBERSHIPS) DSL(org.jooq.impl.DSL) DSL.when(org.jooq.impl.DSL.when) Inject(javax.inject.Inject) Duration(java.time.Duration) DSLContext(org.jooq.DSLContext) URI(java.net.URI) Client(keywhiz.api.model.Client) Nullable(javax.annotation.Nullable) ImmutableSet(com.google.common.collect.ImmutableSet) ClientsRecord(keywhiz.jooq.tables.records.ClientsRecord) Readonly(keywhiz.service.config.Readonly) CertificatePrincipal(keywhiz.auth.mutualssl.CertificatePrincipal) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) Instant(java.time.Instant) Param(org.jooq.Param) Configuration(org.jooq.Configuration) List(java.util.List) CLIENTS(keywhiz.jooq.tables.Clients.CLIENTS) Principal(java.security.Principal) OffsetDateTime(java.time.OffsetDateTime) DSL.greatest(org.jooq.impl.DSL.greatest) Optional(java.util.Optional) RowHmacGenerator(keywhiz.service.crypto.RowHmacGenerator) EPOCH(java.time.Instant.EPOCH) CertificatePrincipal(keywhiz.auth.mutualssl.CertificatePrincipal) Instant(java.time.Instant)

Aggregations

Preconditions.checkNotNull (com.google.common.base.Preconditions.checkNotNull)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 URI (java.net.URI)1 Principal (java.security.Principal)1 Duration (java.time.Duration)1 Instant (java.time.Instant)1 EPOCH (java.time.Instant.EPOCH)1 OffsetDateTime (java.time.OffsetDateTime)1 List (java.util.List)1 Optional (java.util.Optional)1 Nullable (javax.annotation.Nullable)1 Inject (javax.inject.Inject)1 Client (keywhiz.api.model.Client)1 CertificatePrincipal (keywhiz.auth.mutualssl.CertificatePrincipal)1 CLIENTS (keywhiz.jooq.tables.Clients.CLIENTS)1 MEMBERSHIPS (keywhiz.jooq.tables.Memberships.MEMBERSHIPS)1 ClientsRecord (keywhiz.jooq.tables.records.ClientsRecord)1 Readonly (keywhiz.service.config.Readonly)1 RowHmacGenerator (keywhiz.service.crypto.RowHmacGenerator)1 Configuration (org.jooq.Configuration)1