File tree Expand file tree Collapse file tree 3 files changed +19
-1
lines changed
src/main/kotlin/dev/suresh/routes Expand file tree Collapse file tree 3 files changed +19
-1
lines changed Original file line number Diff line number Diff line change @@ -174,6 +174,7 @@ dependencies {
174174 implementation(libs.ktor.server.compression)
175175 implementation(libs.ktor.server.cors)
176176 implementation(libs.ktor.server.hsts)
177+ implementation(libs.ktor.server.csrf)
177178 implementation(libs.ktor.server.rate.limit)
178179 implementation(libs.ktor.server.double.receive)
179180 implementation(libs.ktor.server.host.common)
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ import io.github.oshai.kotlinlogging.KLogger
1111import io.github.oshai.kotlinlogging.KotlinLogging
1212import io.ktor.http.*
1313import io.ktor.server.application.*
14+ import io.ktor.server.plugins.csrf.CSRF
1415import io.ktor.server.response.*
1516import io.ktor.server.routing.*
1617import io.ktor.server.sessions.*
@@ -36,12 +37,27 @@ fun Routing.services() {
3637 call.respondText(" Session created" )
3738 }
3839
39- get( " / " ) {
40+ get {
4041 val session = call.sessions.get<CookieSession >()
4142 call.respondText(" Current Session: $session " )
4243 }
4344 }
4445
46+ route(" /csrf" ) {
47+ install(CSRF ) {
48+ allowOrigin(" https://localhost:8080" )
49+ originMatchesHost()
50+ checkHeader(" X-CSRF" ) { csrfHeader ->
51+ val originHeader = request.headers[HttpHeaders .Origin ]
52+ csrfHeader == originHeader?.hashCode()?.toString(32 )
53+ }
54+
55+ onFailure { respondText(" Access denied!" , status = HttpStatusCode .Forbidden ) }
56+ }
57+
58+ post { call.respondText(" CSRF check passed!" ) }
59+ }
60+
4561 wasm()
4662}
4763
Original file line number Diff line number Diff line change @@ -342,6 +342,7 @@ ktor-server-call-logging = { module = "io.ktor:ktor-server-call-logg
342342ktor-server-call-id = { module = " io.ktor:ktor-server-call-id" , version.ref = " ktor" }
343343ktor-server-cors = { module = " io.ktor:ktor-server-cors" , version.ref = " ktor" }
344344ktor-server-hsts = { module = " io.ktor:ktor-server-hsts" , version.ref = " ktor" }
345+ ktor-server-csrf = { module = " io.ktor:ktor-server-csrf" , version.ref = " ktor" }
345346ktor-server-swagger = { module = " io.ktor:ktor-server-swagger" , version.ref = " ktor" }
346347ktor-server-openapi = { module = " io.ktor:ktor-server-openapi" , version.ref = " ktor" }
347348ktor-server-http-redirect = { module = " io.ktor:ktor-server-http-redirect" , version.ref = " ktor" }
You can’t perform that action at this time.
0 commit comments