From 634fb811fddbb272d6ebd919d92e0589204d2e9c Mon Sep 17 00:00:00 2001 From: Jan-Niclas Struewer <j.n.struewer@gmail.com> Date: Wed, 26 Apr 2023 14:13:49 +0200 Subject: [PATCH] added possibility to use repo path for queries to ease manual usage --- .../dataprovider/WebSecurityConfiguration.kt | 1 + .../dataprovider/gitlab/GitlabController.kt | 14 +++++++++++ .../iem/dataprovider/gitlab/GitlabService.kt | 9 +++++-- .../taskManager/tasks/GitlabTask.kt | 24 ++++++++++++++----- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/WebSecurityConfiguration.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/WebSecurityConfiguration.kt index 202fbbb8..921cb19f 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/WebSecurityConfiguration.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/WebSecurityConfiguration.kt @@ -17,6 +17,7 @@ class SecurityConfiguration { return http { authorizeExchange { authorize("/gitlab/repoChanged", permitAll) + authorize("/gitlab/repoChangedPath", permitAll) } csrf { disable() diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt index 829194f0..324a4dfd 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabController.kt @@ -11,6 +11,7 @@ enum class Platform { GITHUB, } data class RepositoryChangedDto(val repoId: Long, val platform: Platform) +data class RepositoryChangedPathDto(val path: String, val platform: Platform) @RestController @RequestMapping("/gitlab") class GitlabController(private val gitlabService: GitlabService) { @@ -30,4 +31,17 @@ class GitlabController(private val gitlabService: GitlabService) { } } } + + // 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 + } + } + } } \ No newline at end of file diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabService.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabService.kt index ec09be77..b2e44df2 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabService.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/gitlab/GitlabService.kt @@ -2,7 +2,8 @@ package de.fraunhofer.iem.dataprovider.gitlab import de.fraunhofer.iem.dataprovider.logger.getLogger import de.fraunhofer.iem.dataprovider.taskManager.TaskManager -import de.fraunhofer.iem.dataprovider.taskManager.tasks.GetGitlabProjectTask +import de.fraunhofer.iem.dataprovider.taskManager.tasks.GetGitlabProjectIdTask +import de.fraunhofer.iem.dataprovider.taskManager.tasks.GetGitlabProjectPathTask import org.springframework.stereotype.Service @@ -13,7 +14,11 @@ class GitlabService(private val openCodeGitlabConfiguration: OpenCodeGitlabConfi private val logger = getLogger(javaClass) suspend fun queryOpenCodeProject(repoId: Long) { - taskManager.addTask(GetGitlabProjectTask(repoId = repoId, gitlabConfiguration = openCodeGitlabConfiguration, responseChannel = taskManager::addTask)) + taskManager.addTask(GetGitlabProjectIdTask(repoId = repoId, gitlabConfiguration = openCodeGitlabConfiguration, responseChannel = taskManager::addTask)) + } + + suspend fun queryOpenCodeProject(repoId: String) { + taskManager.addTask(GetGitlabProjectPathTask(repoId = repoId, gitlabConfiguration = openCodeGitlabConfiguration, responseChannel = taskManager::addTask)) } } \ No newline at end of file diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/GitlabTask.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/GitlabTask.kt index 96ac3b99..67e1ff8b 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/GitlabTask.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/GitlabTask.kt @@ -3,20 +3,32 @@ package de.fraunhofer.iem.dataprovider.taskManager.tasks import de.fraunhofer.iem.dataprovider.gitlab.GitlabConfiguration import org.gitlab4j.api.GitLabApi -class GetGitlabProjectTask( +sealed class GetGitlabProjectTask( override val type: TaskType = TaskType.REPO_CHANGED, - private val repoId: Long, + protected open val repoId: Any, private val gitlabConfiguration: GitlabConfiguration, - private val responseChannel: suspend (task: ITask) -> Unit): Task() { + private val responseChannel: suspend (task: ITask) -> Unit +): Task() { private val gitlabApi: GitLabApi = GitLabApi(gitlabConfiguration.host, gitlabConfiguration.accessToken) override suspend fun execute() { logger.info("Gitlab config ${gitlabConfiguration.host} ${gitlabConfiguration.accessToken}") val project = gitlabApi.projectApi.getProject(repoId) logger.info(project.toString()) - val projectUri = project.sshUrlToRepo + val projectUri = project.httpUrlToRepo val gitProject = GitProject(project.name, projectUri) - logger.info("Retrieved project ${project.path} and URI $projectUri") + logger.info("Retrieved project ${project.path} and url $projectUri") responseChannel(GitTask(this.type, gitProject, responseChannel)) } -} \ No newline at end of file +} + +class GetGitlabProjectPathTask( + override val repoId: String, + private val gitlabConfiguration: GitlabConfiguration, + private val responseChannel: suspend (task: ITask) -> Unit +): GetGitlabProjectTask(repoId = repoId, gitlabConfiguration = gitlabConfiguration, responseChannel = responseChannel ) +class GetGitlabProjectIdTask( + override val repoId: Long, + private val gitlabConfiguration: GitlabConfiguration, + private val responseChannel: suspend (task: ITask) -> Unit +): GetGitlabProjectTask(repoId = repoId, gitlabConfiguration = gitlabConfiguration, responseChannel = responseChannel ) -- GitLab