From f79c7b43cd5f683d6fa1ea189981eb667082f35c Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sun, 25 Sep 2022 19:25:27 +0200 Subject: [PATCH] New modal to permit admin select user repo for work --- gitlab.go | 5 +++++ ui/src/components/WorkRepository.svelte | 23 ++++++++++++-------- ui/src/lib/repositories.js | 5 ++++- ui/src/routes/works/[wid]/rendus.svelte | 29 ++++++++++++++++++++++++- 4 files changed, 51 insertions(+), 11 deletions(-) diff --git a/gitlab.go b/gitlab.go index 9afeec5..1ed5410 100644 --- a/gitlab.go +++ b/gitlab.go @@ -57,6 +57,11 @@ func initializeGitLabOIDC(router *gin.Engine, authrouter *gin.RouterGroup, admin } authrouter.GET("/api/gitlabcri/repositories", GitLab_GetMyRepositories) + + usersRoutes := authrouter.Group("/api/users/:uid") + usersRoutes.Use(userHandler) + usersRoutes.Use(sameUserMiddleware) + usersRoutes.GET("/gitlabcri/repositories", GitLab_GetMyRepositories) } if _, err := os.Stat(OAUTH_GITLAB_FILE); err == nil { diff --git a/ui/src/components/WorkRepository.svelte b/ui/src/components/WorkRepository.svelte index 6a80cb3..f10fa91 100644 --- a/ui/src/components/WorkRepository.svelte +++ b/ui/src/components/WorkRepository.svelte @@ -12,6 +12,7 @@ export { className as class }; export let work = {}; + export let user = null; export let readonly = false; let repo_work = null; @@ -36,24 +37,28 @@ show_logs = repo.getBuildLogs() } - function refresh_repo_work() { - repo_work = getRepositories(work.id); + function refresh_repo_work(user) { + if (user != null) { + repo_work = getRepositories(work.id, user.id); + } else { + repo_work = getRepositories(work.id); + } repo_work.then((repos) => { repo_used = repos[0]; updatePullState(repos[0]) }, () => { repo_used = new WorkRepository({id_work: work.id}); - remote_repos = getRemoteRepositories(); + remote_repos = getRemoteRepositories(user?user.id:null); }); } - refresh_repo_work(); + $: refresh_repo_work(user); let submitInProgress = false; function submitWorkRepository() { submitInProgress = true; - repo_used.save().then(() => { + repo_used.save(user).then(() => { submitInProgress = false; - refresh_repo_work(); + refresh_repo_work(user); }, (error) => { submitInProgress = false; ToastsStore.addErrorToast({ @@ -66,7 +71,7 @@ submitInProgress = true; repo.retrieveWork().then(() => { submitInProgress = false; - refresh_repo_work(); + refresh_repo_work(user); }, (error) => { submitInProgress = false; ToastsStore.addErrorToast({msg: "Une erreur s'est produite : " + error}); @@ -124,7 +129,7 @@ type="button" class="btn btn-outline-danger float-end mt-1" disable={submitInProgress || readonly} - on:click={() => repo.delete().then(() => { refresh_repo_work() }, (error) => ToastsStore.addErrorToast({msg: "Une erreur s'est produite durant la suppression du lien : " + error}))} + on:click={() => repo.delete().then(() => { refresh_repo_work(user) }, (error) => ToastsStore.addErrorToast({msg: "Une erreur s'est produite durant la suppression du lien : " + error}))} > Supprimer cette liaison @@ -169,7 +174,7 @@ type="button" class="mt-2 btn btn-info" title="Rafraîchir la liste des dépôts" - on:click={() => remote_repos = getRemoteRepositories()} + on:click={() => remote_repos = getRemoteRepositories(user?user.id:null)} > diff --git a/ui/src/lib/repositories.js b/ui/src/lib/repositories.js index b791ce3..a3cc7c0 100644 --- a/ui/src/lib/repositories.js +++ b/ui/src/lib/repositories.js @@ -69,12 +69,15 @@ export class WorkRepository { } } - async save() { + async save(user) { let url = this.id?`repositories/${this.id}`:'repositories'; if (this.id_work) { url = `works/${this.id_work}/` + url; } + if (user != null) { + url = `users/${user.id}/` + url; + } const res = await fetch("api/"+url, { method: this.id?'PUT':'POST', diff --git a/ui/src/routes/works/[wid]/rendus.svelte b/ui/src/routes/works/[wid]/rendus.svelte index 9e15df0..e11d69e 100644 --- a/ui/src/routes/works/[wid]/rendus.svelte +++ b/ui/src/routes/works/[wid]/rendus.svelte @@ -18,6 +18,7 @@ import DateFormat from '../../../components/DateFormat.svelte'; import SubmissionStatus from '../../../components/SubmissionStatus.svelte'; import SurveyBadge from '../../../components/SurveyBadge.svelte'; + import WorkRepository from '../../../components/WorkRepository.svelte'; import { getRepositories } from '../../../lib/repositories'; import { ToastsStore } from '../../../stores/toasts'; import { getUsers } from '../../../lib/users'; @@ -38,6 +39,7 @@ let show_logs = null; let run_pull_for = {repo: null, user: null, tag: null}; + let search_repo_for = {repo: null, user: null}; {#await work then w} @@ -96,7 +98,16 @@ {/each} {:catch err} - - +
+ - + +
{/await} @@ -136,6 +147,22 @@ + + {/await}