Add some authorization to log endpoint
This commit is contained in:
parent
90139f9d80
commit
7607d6a4fc
6 changed files with 55 additions and 4 deletions
1
.env.example
Normal file
1
.env.example
Normal file
|
@ -0,0 +1 @@
|
||||||
|
TOKEN=
|
23
.github/workflows/deploy.yml
vendored
Normal file
23
.github/workflows/deploy.yml
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
name: Deploy to Oracle Cloud
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment: oracle-cloud
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Create .env file
|
||||||
|
uses: SpicyPizza/create-envfile@v1
|
||||||
|
with:
|
||||||
|
envkey_TOKEN: ${{ secrets.TOKEN }}
|
||||||
|
- uses: alex-ac/github-action-ssh-docker-compose@master
|
||||||
|
name: Docker-Compose Remote Deployment
|
||||||
|
with:
|
||||||
|
ssh_host: ${{ secrets.ORACLE_CLOUD_SSH_HOST }}
|
||||||
|
ssh_private_key: ${{ secrets.ORACLE_CLOUD_SSH_PRIVATE_KEY }}
|
||||||
|
ssh_user: ${{ secrets.ORACLE_CLOUD_SSH_USER }}
|
||||||
|
docker_compose_prefix: schools
|
|
@ -40,12 +40,14 @@ dependencies {
|
||||||
implementation("io.ktor:ktor-serialization-kotlinx-json-jvm:$ktor_version")
|
implementation("io.ktor:ktor-serialization-kotlinx-json-jvm:$ktor_version")
|
||||||
implementation("io.ktor:ktor-server-netty-jvm:$ktor_version")
|
implementation("io.ktor:ktor-server-netty-jvm:$ktor_version")
|
||||||
implementation("ch.qos.logback:logback-classic:$logback_version")
|
implementation("ch.qos.logback:logback-classic:$logback_version")
|
||||||
|
implementation("io.ktor:ktor-server-auth:$ktor_version")
|
||||||
|
|
||||||
implementation("org.jetbrains.exposed:exposed-core:$exposed_version")
|
implementation("org.jetbrains.exposed:exposed-core:$exposed_version")
|
||||||
implementation("org.jetbrains.exposed:exposed-dao:$exposed_version")
|
implementation("org.jetbrains.exposed:exposed-dao:$exposed_version")
|
||||||
implementation("org.jetbrains.exposed:exposed-jdbc:$exposed_version")
|
implementation("org.jetbrains.exposed:exposed-jdbc:$exposed_version")
|
||||||
implementation("org.jetbrains.exposed:exposed-java-time:$exposed_version")
|
implementation("org.jetbrains.exposed:exposed-java-time:$exposed_version")
|
||||||
implementation("com.impossibl.pgjdbc-ng:pgjdbc-ng:0.8.9")
|
implementation("com.impossibl.pgjdbc-ng:pgjdbc-ng:0.8.9")
|
||||||
|
implementation("io.ktor:ktor-server-auth-jvm:2.3.4")
|
||||||
|
|
||||||
testImplementation("io.ktor:ktor-server-tests-jvm")
|
testImplementation("io.ktor:ktor-server-tests-jvm")
|
||||||
testImplementation("io.ktor:ktor-server-test-host-jvm")
|
testImplementation("io.ktor:ktor-server-test-host-jvm")
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package io.github.wulkanowy.schools
|
package io.github.wulkanowy.schools
|
||||||
|
|
||||||
|
import io.github.wulkanowy.schools.plugins.configureAuthorization
|
||||||
import io.github.wulkanowy.schools.plugins.configureRouting
|
import io.github.wulkanowy.schools.plugins.configureRouting
|
||||||
import io.github.wulkanowy.schools.plugins.configureSerialization
|
import io.github.wulkanowy.schools.plugins.configureSerialization
|
||||||
import io.ktor.server.application.*
|
import io.ktor.server.application.*
|
||||||
|
@ -14,5 +15,6 @@ fun main() {
|
||||||
fun Application.module() {
|
fun Application.module() {
|
||||||
DatabaseFactory.init()
|
DatabaseFactory.init()
|
||||||
configureSerialization()
|
configureSerialization()
|
||||||
|
configureAuthorization()
|
||||||
configureRouting()
|
configureRouting()
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package io.github.wulkanowy.schools.plugins
|
||||||
|
|
||||||
|
import io.ktor.server.application.*
|
||||||
|
import io.ktor.server.auth.*
|
||||||
|
|
||||||
|
fun Application.configureAuthorization() {
|
||||||
|
authentication {
|
||||||
|
bearer("auth") {
|
||||||
|
realm = "Access to the '/log' path"
|
||||||
|
|
||||||
|
authenticate { tokenCredential ->
|
||||||
|
if (tokenCredential.token == System.getenv("TOKEN")) {
|
||||||
|
UserIdPrincipal("wulkanowy-app-play")
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import io.github.wulkanowy.schools.dao.LoginEventDao
|
||||||
import io.github.wulkanowy.schools.model.LoginEvent
|
import io.github.wulkanowy.schools.model.LoginEvent
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
import io.ktor.server.application.*
|
import io.ktor.server.application.*
|
||||||
|
import io.ktor.server.auth.*
|
||||||
import io.ktor.server.request.*
|
import io.ktor.server.request.*
|
||||||
import io.ktor.server.response.*
|
import io.ktor.server.response.*
|
||||||
import io.ktor.server.routing.*
|
import io.ktor.server.routing.*
|
||||||
|
@ -12,10 +13,12 @@ fun Application.configureRouting() {
|
||||||
val loginEventDao = LoginEventDao()
|
val loginEventDao = LoginEventDao()
|
||||||
|
|
||||||
routing {
|
routing {
|
||||||
post("/log/loginEvent") {
|
authenticate("auth") {
|
||||||
val loginEvent = call.receive<LoginEvent>()
|
post("/log/loginEvent") {
|
||||||
loginEventDao.addLoginEvent(loginEvent)
|
val loginEvent = call.receive<LoginEvent>()
|
||||||
call.respond(status = HttpStatusCode.NoContent, "")
|
loginEventDao.addLoginEvent(loginEvent)
|
||||||
|
call.respond(status = HttpStatusCode.NoContent, "")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
get("/") {
|
get("/") {
|
||||||
call.respond(loginEventDao.allLoginEvents())
|
call.respond(loginEventDao.allLoginEvents())
|
||||||
|
|
Loading…
Reference in a new issue