Skip to content

Commit 2895766

Browse files
imsduSimon Dumas
andauthored
Remove the Last-Modified header (#5186)
Co-authored-by: Simon Dumas <simon.dumas@epfl.ch>
1 parent 99f518f commit 2895766

File tree

21 files changed

+59
-138
lines changed

21 files changed

+59
-138
lines changed

build.sbt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ val kindProjectorVersion = "0.13.3"
4646
val log4catsVersion = "2.7.0"
4747
val logbackVersion = "1.5.10"
4848
val magnoliaVersion = "1.1.10"
49-
val mockitoVersion = "1.17.37"
5049
val munitVersion = "1.0.2"
5150
val munitCatsEffectVersion = "2.0.0"
5251
val nimbusJoseJwtVersion = "9.41.2"
@@ -112,7 +111,6 @@ lazy val kindProjector = "org.typelevel" %% "kind
112111
lazy val log4cats = "org.typelevel" %% "log4cats-slf4j" % log4catsVersion
113112
lazy val logback = "ch.qos.logback" % "logback-classic" % logbackVersion
114113
lazy val magnolia = "com.softwaremill.magnolia1_2" %% "magnolia" % magnoliaVersion
115-
lazy val mockito = "org.mockito" %% "mockito-scala" % mockitoVersion
116114
lazy val munit = "org.scalameta" %% "munit" % munitVersion
117115
lazy val munitCatsEffect = "org.typelevel" %% "munit-cats-effect" % munitCatsEffectVersion
118116
lazy val nimbusJoseJwt = "com.nimbusds" % "nimbus-jose-jwt" % nimbusJoseJwtVersion

delta/app/src/main/scala/ch/epfl/bluebrain/nexus/delta/routes/SchemaJobRoutes.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class SchemaJobRoutes(
5555
)
5656
}
5757
}.map { s =>
58-
FileResponse("validation.json", ContentTypes.`application/json`, None, None, None, s)
58+
FileResponse("validation.json", ContentTypes.`application/json`, None, None, s)
5959
}
6060

6161
def routes: Route =

delta/plugins/storage/src/main/scala/ch/epfl/bluebrain/nexus/delta/plugins/storage/files/Files.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,6 @@ final class Files(
469469
attributes.filename,
470470
mediaType,
471471
Some(ResourceF.etagValue(file)),
472-
Some(file.updatedAt),
473472
Some(attributes.bytes),
474473
s.attemptNarrow[FileRejection]
475474
)

delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/directives/DeltaDirectives.scala

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import ch.epfl.bluebrain.nexus.delta.sourcing.model.ProjectRef
2323
import ch.epfl.bluebrain.nexus.delta.sourcing.offset.Offset
2424
import io.circe.Encoder
2525

26-
import java.time.Instant
2726
import scala.reflect.ClassTag
2827

2928
object DeltaDirectives extends DeltaDirectives
@@ -140,30 +139,23 @@ trait DeltaDirectives extends UriDirectives {
140139
.getOrElse(HttpEncodings.identity)
141140
}
142141

143-
def conditionalCache(
144-
value: Option[String],
145-
lastModified: Option[Instant],
146-
mediaType: MediaType,
147-
encoding: HttpEncoding
148-
): Directive0 =
149-
conditionalCache(value, lastModified, mediaType, None, encoding)
142+
def conditionalCache(value: Option[String], mediaType: MediaType, encoding: HttpEncoding): Directive0 =
143+
conditionalCache(value, mediaType, None, encoding)
150144

151145
/**
152146
* Wraps its inner route with support for Conditional Requests as defined by http://tools.ietf.org/html/rfc7232
153147
*
154-
* Supports `Etag` and `Last-Modified` headers:
148+
* Supports `Etag` header:
155149
* https://doc.akka.io/docs/akka-http/10.0/routing-dsl/directives/cache-condition-directives/conditional.html
156150
*/
157151
def conditionalCache(
158152
value: Option[String],
159-
lastModified: Option[Instant],
160153
mediaType: MediaType,
161154
jsonldFormat: Option[JsonLdFormat],
162155
encoding: HttpEncoding
163156
): Directive0 = {
164-
val entityTag = value.map(EtagUtils.compute(_, mediaType, jsonldFormat, encoding))
165-
val lastModifiedDateTime = lastModified.map { instant => DateTime(instant.toEpochMilli) }
166-
Directives.conditional(entityTag, lastModifiedDateTime)
157+
val entityTag = value.map(EtagUtils.compute(_, mediaType, jsonldFormat, encoding))
158+
Directives.conditional(entityTag, None)
167159
}
168160

169161
/**

delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/directives/FileResponse.scala

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import ch.epfl.bluebrain.nexus.delta.sdk.directives.Response.Complete
1010
import ch.epfl.bluebrain.nexus.delta.sdk.marshalling.HttpResponseFields
1111
import ch.epfl.bluebrain.nexus.delta.sdk.{AkkaSource, JsonLdValue}
1212

13-
import java.time.Instant
14-
1513
/**
1614
* A file response content
1715
*
@@ -40,7 +38,6 @@ object FileResponse {
4038
filename: String,
4139
contentType: ContentType,
4240
etag: Option[String],
43-
lastModified: Option[Instant],
4441
bytes: Option[Long]
4542
)
4643

@@ -52,21 +49,18 @@ object FileResponse {
5249
value.bytes.map { bytes => `Content-Length`(bytes) }.toSeq
5350

5451
override def entityTag(value: Metadata): Option[String] = value.etag
55-
56-
override def lastModified(value: Metadata): Option[Instant] = value.lastModified
5752
}
5853
}
5954

6055
def apply[E: JsonLdEncoder: HttpResponseFields](
6156
filename: String,
6257
contentType: ContentType,
6358
etag: Option[String],
64-
lastModified: Option[Instant],
6559
bytes: Option[Long],
6660
io: IO[Either[E, AkkaSource]]
6761
) =
6862
new FileResponse(
69-
Metadata(filename, contentType, etag, lastModified, bytes),
63+
Metadata(filename, contentType, etag, bytes),
7064
io.map { r =>
7165
r.leftMap { e =>
7266
Complete(e).map(JsonLdValue(_))
@@ -78,13 +72,12 @@ object FileResponse {
7872
filename: String,
7973
contentType: ContentType,
8074
etag: Option[String],
81-
lastModified: Option[Instant],
8275
bytes: Option[Long],
8376
source: AkkaSource
8477
): FileResponse =
85-
new FileResponse(Metadata(filename, contentType, etag, lastModified, bytes), IO.pure(Right(source)))
78+
new FileResponse(Metadata(filename, contentType, etag, bytes), IO.pure(Right(source)))
8679

8780
def noCache(filename: String, contentType: ContentType, bytes: Option[Long], source: AkkaSource): FileResponse =
88-
new FileResponse(Metadata(filename, contentType, None, None, bytes), IO.pure(Right(source)))
81+
new FileResponse(Metadata(filename, contentType, None, bytes), IO.pure(Right(source)))
8982

9083
}

delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/directives/Response.scala

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import ch.epfl.bluebrain.nexus.delta.sdk.syntax._
1212
import io.circe.syntax._
1313
import io.circe.{Encoder, Json}
1414

15-
import java.time.Instant
16-
1715
/**
1816
* An enumeration of possible Route responses
1917
*/
@@ -28,7 +26,6 @@ object Response {
2826
status: StatusCode,
2927
headers: Seq[HttpHeader],
3028
entityTag: Option[String],
31-
lastModified: Option[Instant],
3229
value: A
3330
) extends Response[A] {
3431
def map[B](f: A => B): Complete[B] = copy(value = f(value))
@@ -40,7 +37,7 @@ object Response {
4037
* A constructor helper for when [[HttpResponseFields]] is present
4138
*/
4239
def apply[A: HttpResponseFields](value: A): Complete[A] =
43-
Complete(value.status, value.headers, value.entityTag, value.lastModified, value)
40+
Complete(value.status, value.headers, value.entityTag, value)
4441
}
4542

4643
/**

delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/directives/ResponseToJsonLd.scala

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ object ResponseToJsonLd extends FileBytesInstances {
6868
encoding: HttpEncoding
6969
): Route = {
7070
val ioRoute = ioFinal.flatMap {
71-
case RouteOutcome.RouteRejected(rej) => IO.pure(reject(rej))
72-
case RouteOutcome.RouteFailed(Complete(status, headers, _, _, value)) =>
71+
case RouteOutcome.RouteRejected(rej) => IO.pure(reject(rej))
72+
case RouteOutcome.RouteFailed(Complete(status, headers, _, value)) =>
7373
handle(value).map(complete(status, headers, _))
74-
case RouteOutcome.RouteCompleted(Complete(status, headers, entityTag, lastModified, value)) =>
74+
case RouteOutcome.RouteCompleted(Complete(status, headers, entityTag, value)) =>
7575
handle(value).map { r =>
76-
conditionalCache(entityTag, lastModified, mediaType, jsonldFormat, encoding) {
76+
conditionalCache(entityTag, mediaType, jsonldFormat, encoding) {
7777
complete(status, headers, r)
7878
}
7979
}
@@ -154,12 +154,7 @@ object ResponseToJsonLd extends FileBytesInstances {
154154
val contentDisposition =
155155
RawHeader("Content-Disposition", s"""attachment; filename="$encodedFilename"""")
156156
requestEncoding { encoding =>
157-
conditionalCache(
158-
metadata.entityTag,
159-
metadata.lastModified,
160-
metadata.contentType.mediaType,
161-
encoding
162-
) {
157+
conditionalCache(metadata.entityTag, metadata.contentType.mediaType, encoding) {
163158
respondWithHeaders(contentDisposition, metadata.headers: _*) {
164159
complete(statusOverride.getOrElse(OK), HttpEntity(metadata.contentType, content))
165160
}
@@ -225,7 +220,7 @@ sealed trait ValueInstances extends LowPriorityValueInstances {
225220
)(implicit cr: RemoteContextResolution, jo: JsonKeyOrdering): ResponseToJsonLd =
226221
ResponseToJsonLd(io.map[RouteOutcome[E]] {
227222
case Left(e) => RouteOutcome.RouteFailed(Complete(e).map[JsonLdValue](JsonLdValue(_)))
228-
case Right(value) => RouteOutcome.RouteCompleted(Complete(OK, Seq.empty, None, None, value))
223+
case Right(value) => RouteOutcome.RouteCompleted(Complete(OK, Seq.empty, None, value))
229224
})
230225

231226
implicit def rejectValue[E: JsonLdEncoder](
@@ -248,5 +243,5 @@ sealed trait LowPriorityValueInstances {
248243
implicit def valueWithoutHttpResponseFields[A: JsonLdEncoder](
249244
value: A
250245
)(implicit cr: RemoteContextResolution, jo: JsonKeyOrdering): ResponseToJsonLd =
251-
ResponseToJsonLd(IO.pure[UseRight[A]](Right(Complete(OK, Seq.empty, None, None, value))))
246+
ResponseToJsonLd(IO.pure[UseRight[A]](Right(Complete(OK, Seq.empty, None, value))))
252247
}

delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/directives/ResponseToJsonLdDiscardingEntity.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ object ResponseToJsonLdDiscardingEntity extends DiscardValueInstances {
2929
new ResponseToJsonLdDiscardingEntity {
3030

3131
private def fallbackAsPlainJson =
32-
onSuccess(io.unsafeToFuture()) { case Complete(status, headers, entityTag, lastModified, value) =>
32+
onSuccess(io.unsafeToFuture()) { case Complete(status, headers, entityTag, value) =>
3333
requestEncoding { encoding =>
34-
conditionalCache(entityTag, lastModified, MediaTypes.`application/json`, encoding) {
34+
conditionalCache(entityTag, MediaTypes.`application/json`, encoding) {
3535
complete(status, headers, value.asJson)
3636
}
3737
}
@@ -53,7 +53,7 @@ sealed trait DiscardValueInstances extends DiscardLowPriorityValueInstances {
5353
implicit def ioValue[A: JsonLdEncoder: Encoder](
5454
io: IO[A]
5555
)(implicit cr: RemoteContextResolution, jo: JsonKeyOrdering): ResponseToJsonLdDiscardingEntity =
56-
ResponseToJsonLdDiscardingEntity(io.map(Complete(OK, Seq.empty, None, None, _)))
56+
ResponseToJsonLdDiscardingEntity(io.map(Complete(OK, Seq.empty, None, _)))
5757

5858
implicit def valueWithHttpResponseFields[A: JsonLdEncoder: HttpResponseFields: Encoder](
5959
value: A
@@ -66,6 +66,6 @@ sealed trait DiscardLowPriorityValueInstances {
6666
implicit def valueWithoutHttpResponseFields[A: JsonLdEncoder: Encoder](
6767
value: A
6868
)(implicit cr: RemoteContextResolution, jo: JsonKeyOrdering): ResponseToJsonLdDiscardingEntity =
69-
ResponseToJsonLdDiscardingEntity(IO.pure(Complete(OK, Seq.empty, None, None, value)))
69+
ResponseToJsonLdDiscardingEntity(IO.pure(Complete(OK, Seq.empty, None, value)))
7070

7171
}

delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/directives/ResponseToMarshaller.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ object ResponseToMarshaller extends RdfMarshalling {
4545
implicit def ioEntityMarshaller[A: ToEntityMarshaller](
4646
io: IO[A]
4747
)(implicit cr: RemoteContextResolution, jo: JsonKeyOrdering): ResponseToMarshaller =
48-
ResponseToMarshaller(io.map[UseRight[A]](v => Right(Complete(OK, Seq.empty, None, None, v))))
48+
ResponseToMarshaller(io.map[UseRight[A]](v => Right(Complete(OK, Seq.empty, None, v))))
4949

5050
implicit def ioEntityMarshaller[E: JsonLdEncoder: HttpResponseFields, A: ToEntityMarshaller](
5151
io: IO[Either[E, A]]
5252
)(implicit cr: RemoteContextResolution, jo: JsonKeyOrdering): ResponseToMarshaller = {
5353
val ioComplete = io.map {
5454
_.bimap(
5555
e => Complete(e),
56-
a => Complete(OK, Seq.empty, None, None, a)
56+
a => Complete(OK, Seq.empty, None, a)
5757
)
5858
}
5959
ResponseToMarshaller(ioComplete)
@@ -63,7 +63,7 @@ object ResponseToMarshaller extends RdfMarshalling {
6363
io: IO[Either[Response[E], A]]
6464
)(implicit cr: RemoteContextResolution, jo: JsonKeyOrdering): ResponseToMarshaller = {
6565
val ioComplete = io.map {
66-
_.map(a => Complete(OK, Seq.empty, None, None, a))
66+
_.map(a => Complete(OK, Seq.empty, None, a))
6767
}
6868
ResponseToMarshaller(ioComplete)
6969
}

delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/directives/ResponseToOriginalSource.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ object ResponseToOriginalSource extends RdfMarshalling {
4444
case Right(v: Complete[OriginalSource]) =>
4545
IO.pure {
4646
requestEncoding { encoding =>
47-
conditionalCache(v.entityTag, v.lastModified, MediaTypes.`application/json`, encoding) {
47+
conditionalCache(v.entityTag, MediaTypes.`application/json`, encoding) {
4848
complete(v.status, v.headers, v.value)
4949
}
5050
}

0 commit comments

Comments
 (0)