Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ WORKDIR /app
# cache dependencies
COPY build.gradle.kts settings.gradle.kts gradle.properties gradle gradlew gradlew.bat buildSrc /app/
COPY client/package.json client/build.gradle.kts /app/client/
RUN ./gradlew shadowJar --paralell --no-daemon --continue || true
RUN ./gradlew shadowJar --parallel --no-daemon --continue || true

COPY . /app
RUN [ "./gradlew", "shadowJar", "--parallel", "--no-daemon" ]
Expand All @@ -12,5 +12,8 @@ FROM ubuntu:latest
RUN apt-get -y update
RUN apt-get -y install git
RUN apt-get -y install openjdk-17-jdk
RUN apt-get -y install netcat-openbsd
COPY --from=build /app/build/libs/*.jar app.jar
COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh
CMD [ "java", "-jar", "/app.jar" ]
14 changes: 9 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ application {

repositories {
mavenCentral()
jcenter()
}

dependencies {
Expand All @@ -29,15 +28,20 @@ dependencies {

// Ktor
implementation("io.ktor:ktor-server-core:${Versions.ktor}")
implementation("io.ktor:ktor-server-auto-head-response:${Versions.ktor}")
implementation("io.ktor:ktor-server-call-logging:${Versions.ktor}")
implementation("io.ktor:ktor-server-content-negotiation:${Versions.ktor}")
implementation("io.ktor:ktor-server-status-pages:${Versions.ktor}")
implementation("io.ktor:ktor-server-netty:${Versions.ktor}")
implementation("io.ktor:ktor-server-host-common:${Versions.ktor}")
implementation("io.ktor:ktor-locations:${Versions.ktor}")
implementation("io.ktor:ktor-server-locations:${Versions.ktor}")
implementation("io.ktor:ktor-client-apache:${Versions.ktor}")
implementation("io.ktor:ktor-auth:${Versions.ktor}")
implementation("io.ktor:ktor-jackson:${Versions.ktor}")
implementation("io.ktor:ktor-server-auth:${Versions.ktor}")
implementation("io.ktor:ktor-server-content-negotiation:${Versions.ktor}")
implementation("io.ktor:ktor-serialization-jackson:${Versions.ktor}")

// DI
implementation("org.koin:koin-ktor:${Versions.koin}")
implementation("io.insert-koin:koin-ktor:${Versions.koin}")

// DB
implementation("org.jetbrains.exposed:exposed-core:${Versions.exposed}")
Expand Down
14 changes: 7 additions & 7 deletions buildSrc/src/main/kotlin/Versions.kt
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
object Versions {
// plugin
const val kotlin = "1.4.30"
const val kotlin = "1.9.23"
const val ktlint = "10.0.0"
const val shadow = "6.1.0"

// dependency
const val serialization = "1.0.1"
const val cli = "0.3.2"
const val ktor = "1.5.1"
const val koin = "2.2.1"
const val exposed = "0.28.1"
const val hikaricp = "3.4.5"
const val ktor = "2.3.11"
const val koin = "3.5.6"
const val exposed = "0.46.0"
const val hikaricp = "6.3.2"
const val flyway = "7.7.0"
const val postgresql = "42.2.18"
const val h2 = "1.4.200"
const val logback = "1.2.3"
const val logback = "1.4.14"
const val janino = "3.1.3"
const val jdt = "3.24.0"
const val refminer = "2.0.3"
const val refminer = "2.4.0"
const val github = "1.122"
const val jackson = "2.12.1"
const val junit = "5.7.1"
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
version: "3"
services:
app:
build: ./
Expand All @@ -14,6 +13,7 @@ services:
DATABASE_URL: postgres://rhuser:rhpass@db:5432/refactorhub
depends_on:
- db
entrypoint: ["/wait-for-it.sh", "db:5432", "--", "java", "-jar", "/app.jar"]

db:
image: postgres:12
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
@@ -1,37 +1,31 @@
package jp.ac.titech.cs.se.refactorhub.app.infrastructure

import com.fasterxml.jackson.databind.SerializationFeature
import io.ktor.application.Application
import io.ktor.application.install
import io.ktor.auth.Authentication
import io.ktor.features.AutoHeadResponse
import io.ktor.features.CallLogging
import io.ktor.features.ContentNegotiation
import io.ktor.features.StatusPages
import io.ktor.jackson.jackson
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Locations
import io.ktor.routing.routing
import io.ktor.server.application.Application
import io.ktor.server.application.install
import io.ktor.server.auth.Authentication
import io.ktor.server.plugins.autohead.AutoHeadResponse
import io.ktor.server.plugins.callloging.CallLogging
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
import io.ktor.server.plugins.statuspages.StatusPages
import io.ktor.serialization.jackson.jackson
import io.ktor.server.locations.Locations
import io.ktor.server.routing.routing
import io.ktor.server.netty.EngineMain
import io.ktor.sessions.SessionStorageMemory
import io.ktor.sessions.Sessions
import io.ktor.sessions.cookie
import io.ktor.util.KtorExperimentalAPI
import io.ktor.server.sessions.SessionStorageMemory
import io.ktor.server.sessions.Sessions
import io.ktor.server.sessions.cookie
import jp.ac.titech.cs.se.refactorhub.app.infrastructure.auth.Session
import jp.ac.titech.cs.se.refactorhub.app.infrastructure.auth.github
import jp.ac.titech.cs.se.refactorhub.app.infrastructure.database.connectDB
import jp.ac.titech.cs.se.refactorhub.app.infrastructure.feature.SinglePageApplication
import jp.ac.titech.cs.se.refactorhub.app.infrastructure.feature.setExceptions
import jp.ac.titech.cs.se.refactorhub.app.infrastructure.module.KoinModule
import jp.ac.titech.cs.se.refactorhub.app.infrastructure.router.root
import org.koin.core.component.KoinApiExtension
import org.koin.ktor.ext.Koin
import org.koin.ktor.plugin.Koin

fun main(args: Array<String>) = EngineMain.main(args)

@KoinApiExtension
@KtorExperimentalAPI
@KtorExperimentalLocationsAPI
fun Application.module() {
install(AutoHeadResponse)
install(CallLogging)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,42 +1,36 @@
package jp.ac.titech.cs.se.refactorhub.app.infrastructure.auth

import io.ktor.application.ApplicationCall
import io.ktor.application.call
import io.ktor.auth.Authentication
import io.ktor.auth.OAuthAccessTokenResponse
import io.ktor.auth.OAuthServerSettings
import io.ktor.auth.authenticate
import io.ktor.auth.authentication
import io.ktor.auth.oauth
import io.ktor.server.application.ApplicationCall
import io.ktor.server.application.call
import io.ktor.server.auth.AuthenticationConfig
import io.ktor.server.auth.OAuthAccessTokenResponse
import io.ktor.server.auth.OAuthServerSettings
import io.ktor.server.auth.authenticate
import io.ktor.server.auth.authentication
import io.ktor.server.auth.oauth
import io.ktor.client.HttpClient
import io.ktor.client.engine.apache.Apache
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Location
import io.ktor.locations.location
import io.ktor.locations.locations
import io.ktor.request.host
import io.ktor.request.port
import io.ktor.response.respondRedirect
import io.ktor.response.respondText
import io.ktor.routing.Route
import io.ktor.sessions.sessions
import io.ktor.sessions.set
import io.ktor.util.KtorExperimentalAPI
import io.ktor.server.locations.Location
import io.ktor.server.locations.location
import io.ktor.server.locations.locations
import io.ktor.server.request.host
import io.ktor.server.request.port
import io.ktor.server.response.respondRedirect
import io.ktor.server.response.respondText
import io.ktor.server.routing.Route
import io.ktor.server.sessions.sessions
import io.ktor.server.sessions.set
import jp.ac.titech.cs.se.refactorhub.app.model.User
import jp.ac.titech.cs.se.refactorhub.app.usecase.service.UserService
import org.kohsuke.github.GitHub
import org.koin.core.component.KoinApiExtension
import org.koin.java.KoinJavaComponent.inject

private const val GITHUB = "github"

@KtorExperimentalLocationsAPI
@Location("/login")
private class Login

@KtorExperimentalAPI
@KtorExperimentalLocationsAPI
fun Authentication.Configuration.github() {
fun AuthenticationConfig.github() {
oauth(GITHUB) {
client = HttpClient(Apache)
providerLookup = {
Expand All @@ -54,7 +48,6 @@ fun Authentication.Configuration.github() {
}
}

@KtorExperimentalLocationsAPI
private fun <T : Any> ApplicationCall.redirectUrl(t: T): String {
val host = request.host()
val path = application.locations.href(t)
Expand All @@ -64,8 +57,6 @@ private fun <T : Any> ApplicationCall.redirectUrl(t: T): String {
}
}

@KoinApiExtension
@KtorExperimentalLocationsAPI
fun Route.login() {
authenticate(GITHUB) {
location<Login> {
Expand All @@ -89,9 +80,8 @@ fun Route.login() {
}
}

@KoinApiExtension
private fun getMe(accessToken: String): User {
val userService by inject(UserService::class.java)
val userService:UserService by inject(UserService::class.java)
val me = GitHub.connectUsingOAuth(accessToken).myself
return userService.createIfNotExist(me.id.toInt(), me.login)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ package jp.ac.titech.cs.se.refactorhub.app.infrastructure.database

import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import io.ktor.application.Application
import io.ktor.util.KtorExperimentalAPI
import io.ktor.server.application.Application
import jp.ac.titech.cs.se.refactorhub.app.infrastructure.database.migration.initializeDatabase
import org.flywaydb.core.Flyway
import org.jetbrains.exposed.sql.Database
import java.net.URI

@KtorExperimentalAPI
fun Application.connectDB() {
val uri = URI(environment.config.property("ktor.database.url").getString())
val (username, password) = uri.userInfo.split(":")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ class ActionDao(id: EntityID<Long>) : LongEntity(id), ModelConverter<Action> {
}

private fun stringify(data: JsonNode): String {
val mapper by inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.writeValueAsString(data)
}

private fun parse(src: String): JsonNode {
val mapper by inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.readValue(src)
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,19 +44,19 @@ class ChangeTypeDao(id: EntityID<String>) : StringEntity(id), ModelConverter<Cha
}

private fun stringifyParameterMap(data: Map<String, CodeElementMetadata>): String {
val mapper by inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.writeValueAsString(data)
}
private fun parseParameterMap(src: String): Map<String, CodeElementMetadata> {
val mapper by inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.readValue(src)
}

private fun stringifyTags(data: List<String>): String {
val mapper by inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.writeValueAsString(data)
}
private fun parseTags(src: String): List<String> {
val mapper by inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.readValue(src)
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ class ChangeDao(id: EntityID<UUID>) : UUIDEntity(id), ModelConverter<Change> {
}

private fun stringifyParameterData(data: Change.ParameterData): String {
val mapper by inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.writeValueAsString(data)
}

private fun parseParameterData(src: String): Change.ParameterData {
val mapper by inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.readValue(src)
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.jetbrains.exposed.dao.UUIDEntity
import org.jetbrains.exposed.dao.UUIDEntityClass
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.UUIDTable
import org.koin.java.KoinJavaComponent
import org.koin.java.KoinJavaComponent.inject
import java.util.UUID

object Commits : UUIDTable("commits") {
Expand Down Expand Up @@ -91,19 +91,19 @@ class CommitOverviewDao(id: EntityID<UUID>) : UUIDEntity(id), ModelConverter<Com
}

private fun stringifyFileList(data: List<File>): String {
val mapper by KoinJavaComponent.inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.writeValueAsString(data)
}
private fun parseFileList(src: String): List<File> {
val mapper by KoinJavaComponent.inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.readValue(src)
}

private fun stringifyFileMappings(data: List<FileMapping>): String {
val mapper by KoinJavaComponent.inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.writeValueAsString(data)
}
private fun parseFileMappings(src: String): List<FileMapping> {
val mapper by KoinJavaComponent.inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.readValue(src)
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.jetbrains.exposed.dao.UUIDEntity
import org.jetbrains.exposed.dao.UUIDEntityClass
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.UUIDTable
import org.koin.java.KoinJavaComponent
import org.koin.java.KoinJavaComponent.inject
import java.util.UUID

object Snapshots : UUIDTable("snapshots") {
Expand Down Expand Up @@ -42,19 +42,19 @@ class SnapshotDao(id: EntityID<UUID>) : UUIDEntity(id), ModelConverter<Snapshot>
}

private fun stringifyFileList(data: List<File>): String {
val mapper by KoinJavaComponent.inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.writeValueAsString(data)
}
private fun parseFileList(src: String): List<File> {
val mapper by KoinJavaComponent.inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.readValue(src)
}

private fun stringifyFileMappings(data: List<FileMapping>): String {
val mapper by KoinJavaComponent.inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.writeValueAsString(data)
}
private fun parseFileMappings(src: String): List<FileMapping> {
val mapper by KoinJavaComponent.inject(ObjectMapper::class.java)
val mapper: ObjectMapper by inject(ObjectMapper::class.java)
return mapper.readValue(src)
}
Loading