Skip to content

Commit

Permalink
Bump cookie max-age value to Int.MAX_VALUE (ktorio#892)
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergey Mashkov authored and Thorsten Schleinzer committed Feb 26, 2019
1 parent 7fc1a5f commit acb52e7
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class SessionTransportCookie(

override fun send(call: ApplicationCall, value: String) {
val now = GMTDate()
val maxAge = configuration.duration?.let { it[ChronoUnit.SECONDS] }?.takeIf { it <= Int.MAX_VALUE }
val maxAge = configuration.duration?.let { it[ChronoUnit.SECONDS].coerceAtMost(Int.MAX_VALUE.toLong()) }
val expires = maxAge?.let { now + TimeUnit.SECONDS.toMillis(maxAge) }

val cookie = Cookie(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.ktor.tests.server.sessions

import io.ktor.application.call
import io.ktor.application.install
import io.ktor.application.*
import io.ktor.http.*
import io.ktor.response.respondText
import io.ktor.routing.get
Expand All @@ -11,8 +10,8 @@ import io.ktor.server.testing.*
import io.ktor.sessions.*
import io.ktor.util.date.*
import io.ktor.util.hex
import kotlinx.coroutines.*
import kotlinx.coroutines.io.jvm.javaio.*
import kotlinx.coroutines.runBlocking
import java.time.Duration
import java.util.*
import kotlin.test.*
Expand Down Expand Up @@ -670,6 +669,34 @@ class SessionTest {
}
}

@Test
fun testSessionLongDuration(): Unit = withTestApplication {
val transport = SessionTransportCookie("test", CookieConfiguration().apply {
duration = Duration.ofDays(365 * 100)
}, emptyList())

val call = createCall {}
transport.send(call, "my-session")

val cookies = call.response.cookies["test"]
assertNotNull(cookies)
assertEquals(Int.MAX_VALUE, cookies.maxAge)
}

@Test
fun testSessionOverflowDuration(): Unit = withTestApplication {
val transport = SessionTransportCookie("test", CookieConfiguration().apply {
duration = Duration.ofSeconds(Long.MAX_VALUE)
}, emptyList())

val call = createCall {}
transport.send(call, "my-session")

val cookies = call.response.cookies["test"]
assertNotNull(cookies)
assertEquals(Int.MAX_VALUE, cookies.maxAge)
}

private fun flipLastHexDigit(sessionId: String) = sessionId.mapIndexed { index, letter ->
when {
index != sessionId.lastIndex -> letter
Expand Down

0 comments on commit acb52e7

Please sign in to comment.