Implement optional signature
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
a48bc1f1bc
commit
b4b531409f
@ -39,6 +39,11 @@ func initializeDroneOauth() {
|
||||
}
|
||||
}
|
||||
|
||||
type RepositoryAdminPull struct {
|
||||
Tag *string `json:"tag"`
|
||||
OptionalSignature bool `json:"sig_optional"`
|
||||
}
|
||||
|
||||
func declareAPIAuthRepositoriesRoutes(router *gin.RouterGroup) {
|
||||
router.GET("/repositories", func(c *gin.Context) {
|
||||
var u *User
|
||||
@ -203,12 +208,12 @@ func declareAPIAuthRepositoriesRoutes(router *gin.RouterGroup) {
|
||||
return
|
||||
}
|
||||
|
||||
var tag *string
|
||||
var rap RepositoryAdminPull
|
||||
if loggeduser.IsAdmin {
|
||||
c.ShouldBindJSON(&tag)
|
||||
c.ShouldBindJSON(&rap)
|
||||
}
|
||||
|
||||
TriggerTagUpdate(c, work, repo, u, tag)
|
||||
TriggerTagUpdate(c, work, repo, u, rap.Tag, rap.OptionalSignature)
|
||||
})
|
||||
|
||||
repositoriesRoutes.GET("/state", func(c *gin.Context) {
|
||||
@ -327,7 +332,7 @@ func declareCallbacksRoutes(router *gin.RouterGroup) {
|
||||
|
||||
tmp := strings.SplitN(hook.Ref, "/", 3)
|
||||
if len(tmp) != 3 {
|
||||
TriggerTagUpdate(c, work, repo, user, nil)
|
||||
TriggerTagUpdate(c, work, repo, user, nil, false)
|
||||
return
|
||||
}
|
||||
|
||||
@ -355,7 +360,7 @@ func declareCallbacksRoutes(router *gin.RouterGroup) {
|
||||
}
|
||||
}
|
||||
|
||||
TriggerTagUpdate(c, work, repo, user, &tmp[2])
|
||||
TriggerTagUpdate(c, work, repo, user, &tmp[2], false)
|
||||
})
|
||||
}
|
||||
|
||||
@ -387,7 +392,7 @@ func repositoryHandler(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
func TriggerTagUpdate(c *gin.Context, work *Work, repo *Repository, u *User, tag *string) {
|
||||
func TriggerTagUpdate(c *gin.Context, work *Work, repo *Repository, u *User, tag *string, sig_optional bool) {
|
||||
loggeduser := c.MustGet("LoggedUser").(*User)
|
||||
now := time.Now()
|
||||
|
||||
@ -411,14 +416,20 @@ func TriggerTagUpdate(c *gin.Context, work *Work, repo *Repository, u *User, tag
|
||||
}
|
||||
}
|
||||
|
||||
client := drone.NewClient(droneEndpoint, droneConfig)
|
||||
result, err := client.BuildCreate("srs", "atsebay.t-worker", "", "master", map[string]string{
|
||||
env := map[string]string{
|
||||
"REPO_URL": repo.URI,
|
||||
"REPO_TAG": repo_tag,
|
||||
"LOGIN": login,
|
||||
"GROUPS": groups,
|
||||
"DEST": fmt.Sprintf("%d", work.Id),
|
||||
})
|
||||
}
|
||||
|
||||
if sig_optional {
|
||||
env["TAG_SIG_OPTIONAL"] = "1"
|
||||
}
|
||||
|
||||
client := drone.NewClient(droneEndpoint, droneConfig)
|
||||
result, err := client.BuildCreate("srs", "atsebay.t-worker", "", "master", env)
|
||||
if err != nil {
|
||||
log.Println("Unable to communicate with Drone:", err.Error())
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to communication with the extraction service."})
|
||||
|
@ -55,11 +55,11 @@ export class WorkRepository {
|
||||
}
|
||||
}
|
||||
|
||||
async retrieveWork(tag) {
|
||||
async retrieveWork(admin_struct) {
|
||||
const res = await fetch(this.id_work?`api/works/${this.id_work}/repositories/${this.id}/trigger`:`api/repositories/${this.id}/trigger`, {
|
||||
method: 'POST',
|
||||
headers: {'Accept': 'application/json'},
|
||||
body: !tag || tag.length == 0?null:JSON.stringify(tag)
|
||||
body: !admin_struct?{}:JSON.stringify(admin_struct)
|
||||
});
|
||||
if (res.status == 200) {
|
||||
const data = await res.json();
|
||||
|
@ -38,7 +38,7 @@
|
||||
let nb_users = 0;
|
||||
|
||||
let show_logs = null;
|
||||
let run_pull_for = {repo: null, user: null, tag: null};
|
||||
let run_pull_for = {repo: null, user: null, struct: {tag: null, sig_optional: false}};
|
||||
let search_repo_for = {repo: null, user: null};
|
||||
</script>
|
||||
|
||||
@ -90,7 +90,7 @@
|
||||
<button
|
||||
class="btn btn-sm btn-primary mx-1"
|
||||
title="Rafraîchir"
|
||||
on:click={() => { run_pull_for = { repo, user, tag: '', modal: new bootstrap.Modal(document.getElementById('pullModal'))}; run_pull_for.modal.show(); }}
|
||||
on:click={() => { run_pull_for = { repo, user, struct: {tag:''}, modal: new bootstrap.Modal(document.getElementById('pullModal'))}; run_pull_for.modal.show(); }}
|
||||
>
|
||||
<i class="bi bi-arrow-clockwise"></i>
|
||||
</button>
|
||||
@ -128,7 +128,7 @@
|
||||
|
||||
<div class="modal fade" tabindex="-1" id="pullModal">
|
||||
<div class="modal-dialog">
|
||||
<form class="modal-content" on:submit|preventDefault={() => {run_pull_for.modal.hide(); try { run_pull_for.repo.retrieveWork(run_pull_for.tag) } catch(err) { ToastsStore.addToast({color: "danger", title: "Connexion impossible", msg: err}) };}}>
|
||||
<form class="modal-content" on:submit|preventDefault={() => {run_pull_for.modal.hide(); try { run_pull_for.repo.retrieveWork(run_pull_for.struct) } catch(err) { ToastsStore.addToast({color: "danger", title: "Connexion impossible", msg: err}) };}}>
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Repository Pull {#if run_pull_for.user}{run_pull_for.user.login}{/if}</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
@ -136,7 +136,13 @@
|
||||
<div class="modal-body">
|
||||
<div class="form-group row mb-2">
|
||||
<label class="col-2 col-form-label" for="pull-tag">Tag</label>
|
||||
<input class="form-control col" id="pull-tag" autofocus placeholder={w.tag} bind:value={run_pull_for.tag}>
|
||||
<input class="form-control col" id="pull-tag" autofocus placeholder={w.tag} bind:value={run_pull_for.struct.tag}>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="1" id="optional-sig" bind:checked={run_pull_for.struct.sig_optional}>
|
||||
<label class="form-check-label" for="optional-sig">
|
||||
Signature du tag optionnelle
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
@ -150,7 +156,7 @@
|
||||
|
||||
<div class="modal fade" tabindex="-1" id="repoModal">
|
||||
<div class="modal-dialog">
|
||||
<form class="modal-content" on:submit|preventDefault={() => {search_repo_for.modal.hide(); try { search_repo_for.repo.retrieveWork(run_pull_for.tag) } catch(err) { ToastsStore.addToast({color: "danger", title: "Connexion impossible", msg: err}) }; search_repo_for.user = null; }}>
|
||||
<form class="modal-content" on:submit|preventDefault={() => {search_repo_for.modal.hide(); try { search_repo_for.repo.retrieveWork(run_pull_for.struct) } catch(err) { ToastsStore.addToast({color: "danger", title: "Connexion impossible", msg: err}) }; search_repo_for.user = null; }}>
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Repository selector {#if search_repo_for.user}{search_repo_for.user.login}{/if}</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
|
Reference in New Issue
Block a user