diff --git a/ui/src/routes/works/[wid]/+page.svelte b/ui/src/routes/works/[wid]/+page.svelte
index fc50a8f..67b99f5 100644
--- a/ui/src/routes/works/[wid]/+page.svelte
+++ b/ui/src/routes/works/[wid]/+page.svelte
@@ -262,7 +262,7 @@
{#await my_submission}
{:then submission}
- {submission.commit} ({submission.tag}) (taille : {submission.size} o, date : )
+ {submission.commit} ({submission.tag}) (taille : {submission.size} o, date : )
{:catch}
-
{/await}
diff --git a/works.go b/works.go
index 26cb887..38dc914 100644
--- a/works.go
+++ b/works.go
@@ -370,6 +370,26 @@ func declareAPIAuthWorksRoutes(router *gin.RouterGroup) {
})
// Grades related to works
+ worksRoutes.GET("/forge/*path", func(c *gin.Context) {
+ w := c.MustGet("work").(*Work)
+
+ var u *User
+ if user, ok := c.Get("user"); ok {
+ u = user.(*User)
+ } else {
+ u = c.MustGet("LoggedUser").(*User)
+ }
+
+ repo, err := u.getRepositoryByWork(w.Id)
+ if err != nil {
+ log.Printf("Unable to getRepositoryByWork(uid=%d, wid=%d): %s", u.Id, w.Id, err.Error())
+ c.AbortWithStatusJSON(http.StatusNotFound, gin.H{"errmsg": "Unable to find a corresponding repository."})
+ return
+ }
+
+ c.Redirect(http.StatusFound, strings.TrimSuffix(strings.Replace(strings.Replace(repo.URI, ":", "/", 1), "git@", "https://", 1), ".git")+c.Param("path"))
+ })
+
worksRoutes.GET("/score", func(c *gin.Context) {
u := c.MustGet("LoggedUser").(*User)
w := c.MustGet("work").(*Work)