Skip to content
Snippets Groups Projects
Verified Commit d8db69e9 authored by Jan-Niclas Strüwer's avatar Jan-Niclas Strüwer
Browse files

added owas dependency checker as first tool

parent 16abceac
No related branches found
No related tags found
No related merge requests found
...@@ -38,6 +38,7 @@ dependencies { ...@@ -38,6 +38,7 @@ dependencies {
runtimeOnly("com.h2database:h2") runtimeOnly("com.h2database:h2")
testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.springframework.security:spring-security-test") testImplementation("org.springframework.security:spring-security-test")
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4")
} }
tasks.withType<KotlinCompile> { tasks.withType<KotlinCompile> {
......
package de.fraunhofer.iem.dataprovider.gitlab package de.fraunhofer.iem.dataprovider.gitlab
import de.fraunhofer.iem.dataprovider.logger.getLogger import de.fraunhofer.iem.dataprovider.logger.getLogger
import de.fraunhofer.iem.dataprovider.taskManager.TaskManager
import org.springframework.web.bind.annotation.* import org.springframework.web.bind.annotation.*
enum class Platform { enum class Platform {
...@@ -9,10 +8,10 @@ enum class Platform { ...@@ -9,10 +8,10 @@ enum class Platform {
GITHUB, GITHUB,
} }
data class RepositoryChangedDto(val repoId: Long, val platform: Platform) data class RepositoryChangedDto(val repoId: Long, val platform: Platform)
data class RepositoryChangedPathDto(val path: String, val platform: Platform)
@RestController @RestController
@RequestMapping("/gitlab") @RequestMapping("/gitlab")
class GitlabController(private val gitlabService: GitlabService, private val taskManager: TaskManager) { class GitlabController(private val gitlabService: GitlabService) {
private val logger = getLogger(javaClass) private val logger = getLogger(javaClass)
...@@ -30,21 +29,4 @@ class GitlabController(private val gitlabService: GitlabService, private val tas ...@@ -30,21 +29,4 @@ class GitlabController(private val gitlabService: GitlabService, private val tas
} }
} }
// TODO: improve duplicate code from repoChanged
@PostMapping("/repoChangedPath")
suspend fun repoChangedPath(@RequestBody repositoryChangedDto: RepositoryChangedPathDto) {
logger.info("Repo changed POST request for path ${repositoryChangedDto.path} on platform ${repositoryChangedDto.platform} received.")
when (repositoryChangedDto.platform) {
Platform.OPEN_CODE -> gitlabService.queryOpenCodeProject(repositoryChangedDto.path)
else -> {
logger.info("Platform currently not supported.")
// TODO: send fitting http response
}
}
}
@GetMapping("/test")
suspend fun test() {
// taskManager.addTask(JavaTask(TaskType.REPO_CHANGED, "-version", responseChannel = taskManager::addTask ))
}
} }
\ No newline at end of file
...@@ -13,13 +13,7 @@ class GitlabService(private val openCodeGitlabConfiguration: OpenCodeGitlabConfi ...@@ -13,13 +13,7 @@ class GitlabService(private val openCodeGitlabConfiguration: OpenCodeGitlabConfi
private val logger = getLogger(javaClass) private val logger = getLogger(javaClass)
suspend fun queryOpenCodeProject(repoId: Long) { suspend fun queryOpenCodeProject(repoId: Long) {
// taskManager.addTask(GetGitlabProjectIdTask(repoId = repoId, gitlabConfiguration = openCodeGitlabConfiguration, responseChannel = taskManager::addTask))
taskManager.addEvent(RepoChangedEvent(repoId = repoId, gitConfiguration = openCodeGitlabConfiguration)) taskManager.addEvent(RepoChangedEvent(repoId = repoId, gitConfiguration = openCodeGitlabConfiguration))
} }
suspend fun queryOpenCodeProject(repoId: String) {
// taskManager.addTask(GetGitlabProjectPathTask(repoId = repoId, gitlabConfiguration = openCodeGitlabConfiguration, responseChannel = taskManager::addTask))
// taskManager.addEvent(RepoChanged(repoId = repoId, gitConfiguration = openCodeGitlabConfiguration,))
}
} }
\ No newline at end of file
package de.fraunhofer.iem.dataprovider.taskManager
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Component
// TODO: validate the correctness of env variables
@Component
class Config {
@Value("\${GIT_PROJECT_PATH}")
lateinit var gitProjectPath: String
}
\ No newline at end of file
...@@ -3,7 +3,7 @@ package de.fraunhofer.iem.dataprovider.taskManager ...@@ -3,7 +3,7 @@ package de.fraunhofer.iem.dataprovider.taskManager
import de.fraunhofer.iem.dataprovider.gitlab.GitConfiguration import de.fraunhofer.iem.dataprovider.gitlab.GitConfiguration
import de.fraunhofer.iem.dataprovider.logger.getLogger import de.fraunhofer.iem.dataprovider.logger.getLogger
import de.fraunhofer.iem.dataprovider.taskManager.tasks.CloneGitTask import de.fraunhofer.iem.dataprovider.taskManager.tasks.CloneGitTask
import de.fraunhofer.iem.dataprovider.taskManager.tasks.GetGitlabProjectIdTask import de.fraunhofer.iem.dataprovider.taskManager.tasks.GetGitlabProjectTask
import de.fraunhofer.iem.dataprovider.taskManager.tasks.GitProject import de.fraunhofer.iem.dataprovider.taskManager.tasks.GitProject
import de.fraunhofer.iem.dataprovider.taskManager.tasks.OdcTask import de.fraunhofer.iem.dataprovider.taskManager.tasks.OdcTask
import jakarta.annotation.PreDestroy import jakarta.annotation.PreDestroy
...@@ -33,7 +33,7 @@ class ProcessTaskDone(override val taskId: UUID, val message: String) : TaskDone ...@@ -33,7 +33,7 @@ class ProcessTaskDone(override val taskId: UUID, val message: String) : TaskDone
* to manage incoming tasks. * to manage incoming tasks.
*/ */
@Component @Component
class TaskManager { class TaskManager(private val config: Config) {
// The used default dispatcher is ok for CPU-bound workloads. However, // The used default dispatcher is ok for CPU-bound workloads. However,
// if they block for a long time it's better to use a custom thread // if they block for a long time it's better to use a custom thread
...@@ -85,7 +85,7 @@ class TaskManager { ...@@ -85,7 +85,7 @@ class TaskManager {
when (event) { when (event) {
is RepoChangedEvent -> { is RepoChangedEvent -> {
ioWorker.addTask(GetGitlabProjectIdTask(event.repoId, event.gitConfiguration, ::addEvent)) ioWorker.addTask(GetGitlabProjectTask(event.repoId, event.gitConfiguration, ::addEvent))
} }
is GetGitlabProjectDone -> { is GetGitlabProjectDone -> {
...@@ -93,9 +93,9 @@ class TaskManager { ...@@ -93,9 +93,9 @@ class TaskManager {
CloneGitTask( CloneGitTask(
event.gitProject, event.gitProject,
::addEvent, ::addEvent,
"/tmp/opencode" config.gitProjectPath
) )
) //TODO: remove hardcoded variable )
} }
is GitCloneDone -> { is GitCloneDone -> {
......
...@@ -6,10 +6,11 @@ import de.fraunhofer.iem.dataprovider.taskManager.GetGitlabProjectDone ...@@ -6,10 +6,11 @@ import de.fraunhofer.iem.dataprovider.taskManager.GetGitlabProjectDone
import org.gitlab4j.api.GitLabApi import org.gitlab4j.api.GitLabApi
sealed class GetGitlabProjectTask : Task() { class GetGitlabProjectTask(
private val repoId: Long, private val gitlabConfiguration: GitConfiguration,
override val responseChannel: suspend (task: Event) -> Unit
) : Task() {
protected abstract val repoId: Any
protected abstract val gitlabConfiguration: GitConfiguration
private val gitlabApi: GitLabApi = GitLabApi(gitlabConfiguration.host, gitlabConfiguration.accessToken) private val gitlabApi: GitLabApi = GitLabApi(gitlabConfiguration.host, gitlabConfiguration.accessToken)
...@@ -19,22 +20,10 @@ sealed class GetGitlabProjectTask : Task() { ...@@ -19,22 +20,10 @@ sealed class GetGitlabProjectTask : Task() {
val project = gitlabApi.projectApi.getProject(repoId) val project = gitlabApi.projectApi.getProject(repoId)
logger.info(project.toString()) logger.info(project.toString())
val projectUri = project.httpUrlToRepo val projectUri = project.httpUrlToRepo
val gitProject = GitProject(project.name, projectUri) val gitProject = GitProject(project.path, projectUri)
responseChannel(GetGitlabProjectDone(taskID, gitProject)) responseChannel(GetGitlabProjectDone(taskID, gitProject))
logger.info("Retrieved project ${project.path} and url $projectUri") logger.info("Retrieved project ${project.path} and url $projectUri")
} }
} }
class GetGitlabProjectPathTask(
override val repoId: String,
override val gitlabConfiguration: GitConfiguration,
override val responseChannel: suspend (task: Event) -> Unit,
) : GetGitlabProjectTask()
class GetGitlabProjectIdTask(
override val repoId: Long,
override val gitlabConfiguration: GitConfiguration,
override val responseChannel: suspend (task: Event) -> Unit
) : GetGitlabProjectTask()
...@@ -9,10 +9,10 @@ import org.springframework.core.io.Resource ...@@ -9,10 +9,10 @@ import org.springframework.core.io.Resource
class OdcTask(projectPath: String, outputPath: String, override val responseChannel: suspend (task: Event) -> Unit) : class OdcTask(projectPath: String, outputPath: String, override val responseChannel: suspend (task: Event) -> Unit) :
ProcessTask() { ProcessTask() {
override val flags: Array<String> = arrayOf(outputPath, projectPath)
private val resource: Resource = ClassPathResource("scripts/odc.sh") private val resource: Resource = ClassPathResource("scripts/odc.sh")
override val flags: Array<String> = arrayOf(resource.file.absolutePath, outputPath, projectPath)
override val execPath: String = resource.toString() override val execPath: String = "/bin/sh"
override suspend fun handleProcessReturn(p: Process) { override suspend fun handleProcessReturn(p: Process) {
logger.info(resource.toString()) logger.info(resource.toString())
......
...@@ -21,7 +21,7 @@ docker pull owasp/dependency-check:$DC_VERSION ...@@ -21,7 +21,7 @@ docker pull owasp/dependency-check:$DC_VERSION
docker run --rm \ docker run --rm \
-e user="$USER" \ -e user="$USER" \
-u $(id -u ${USER}):$(id -g ${USER}) \ -u $(id -u ${USER}):$(id -g ${USER}) \
--volume ${2}:/src:z \ --volume "${2}":/src:z \
--volume "$DATA_DIRECTORY":/usr/share/dependency-check/data:z \ --volume "$DATA_DIRECTORY":/usr/share/dependency-check/data:z \
--volume "$DC_DIRECTORY"/odc-reports:/report:z \ --volume "$DC_DIRECTORY"/odc-reports:/report:z \
owasp/dependency-check:$DC_VERSION \ owasp/dependency-check:$DC_VERSION \
......
package de.fraunhofer.iem.dataprovider
import de.fraunhofer.iem.dataprovider.taskManager.Event
import de.fraunhofer.iem.dataprovider.taskManager.tasks.OdcTask
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
@OptIn(ExperimentalCoroutinesApi::class)
class OdcTaskTest {
suspend fun callback(event: Event) {}
@Test
fun initTest() = runTest {
OdcTask("/this/is/no/real/path", "/neither/is/this", ::callback)
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment

Consent

On this website, we use the web analytics service Matomo to analyze and review the use of our website. Through the collected statistics, we can improve our offerings and make them more appealing for you. Here, you can decide whether to allow us to process your data and set corresponding cookies for these purposes, in addition to technically necessary cookies. Further information on data protection—especially regarding "cookies" and "Matomo"—can be found in our privacy policy. You can withdraw your consent at any time.