diff --git a/admin/api/settings.go b/admin/api/settings.go
index ce2ab503..0a182c73 100644
--- a/admin/api/settings.go
+++ b/admin/api/settings.go
@@ -118,7 +118,6 @@ func GetChallengeInfo() (*settings.ChallengeInfo, error) {
func getChallengeInfo(c *gin.Context) {
if s, err := GetChallengeInfo(); err != nil {
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": err.Error()})
-
} else {
c.JSON(http.StatusOK, s)
}
@@ -132,17 +131,26 @@ func saveChallengeInfo(c *gin.Context) {
return
}
- jenc, err := json.Marshal(info)
- if err != nil {
- c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()})
- return
- }
+ if sync.GlobalImporter != nil {
+ jenc, err := json.Marshal(info)
+ if err != nil {
+ c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()})
+ return
+ }
- err = sync.WriteFileContent(sync.GlobalImporter, "challenge.json", jenc)
- if err != nil {
- log.Println("Unable to SaveChallengeInfo:", err.Error())
- c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to save challenge info: %s", err.Error())})
- return
+ err = sync.WriteFileContent(sync.GlobalImporter, "challenge.json", jenc)
+ if err != nil {
+ log.Println("Unable to SaveChallengeInfo:", err.Error())
+ c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to save challenge info: %s", err.Error())})
+ return
+ }
+
+ err = sync.ImportChallengeInfo(info)
+ if err != nil {
+ log.Println("Unable to ImportChallengeInfo:", err.Error())
+ c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": fmt.Sprintf("Something goes wrong when trying to import related files: %s", err.Error())})
+ return
+ }
}
if err := settings.SaveChallengeInfo(path.Join(settings.SettingsDir, settings.ChallengeFile), info); err != nil {
diff --git a/admin/sync/challengeinfo.go b/admin/sync/challengeinfo.go
new file mode 100644
index 00000000..436756e8
--- /dev/null
+++ b/admin/sync/challengeinfo.go
@@ -0,0 +1,38 @@
+package sync
+
+import (
+ "path"
+ "strings"
+
+ "srs.epita.fr/fic-server/libfic"
+ "srs.epita.fr/fic-server/settings"
+)
+
+// ImportChallengeInfo imports images defined in the challengeinfo.
+func ImportChallengeInfo(ci *settings.ChallengeInfo) (err error) {
+ if len(ci.MainLogo) > 0 {
+ for i, logo := range ci.MainLogo {
+ dest := path.Join(fic.FilesDir, "logo", path.Base(logo))
+ err = importFile(GlobalImporter, logo, dest)
+ if err != nil {
+ return
+ }
+
+ ci.MainLogo[i] = path.Join("$FILES$", strings.TrimPrefix(dest, fic.FilesDir))
+ }
+ }
+
+ if len(ci.Partners) > 0 {
+ for i, partner := range ci.Partners {
+ dest := path.Join(fic.FilesDir, "partner", path.Base(partner.Src))
+ err = importFile(GlobalImporter, partner.Src, dest)
+ if err != nil {
+ return
+ }
+
+ ci.Partners[i].Src = path.Join("$FILES$", strings.TrimPrefix(dest, fic.FilesDir))
+ }
+ }
+
+ return nil
+}
diff --git a/admin/sync/file.go b/admin/sync/file.go
index b8c60d1c..6f067170 100644
--- a/admin/sync/file.go
+++ b/admin/sync/file.go
@@ -165,6 +165,26 @@ func getDestinationFilePath(URI string) string {
return path.Join(fic.FilesDir, strings.ToLower(base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(hash[:])), path.Base(URI))
}
+func importFile(i Importer, URI string, dest string) error {
+ if err := os.MkdirAll(path.Dir(dest), 0755); err != nil {
+ return err
+ }
+
+ // Write file
+ if fdto, err := os.Create(dest); err != nil {
+ return err
+ } else {
+ defer fdto.Close()
+ writer := bufio.NewWriter(fdto)
+ if err := GetFile(i, URI, writer); err != nil {
+ os.Remove(dest)
+ return err
+ }
+ }
+
+ return nil
+}
+
// ImportFile imports the file at the given URI, using helpers of the given Importer.
// After import, next is called with relative path where the file has been saved and the original URI.
func ImportFile(i Importer, URI string, next func(string, string) (interface{}, error)) (interface{}, error) {
@@ -177,22 +197,10 @@ func ImportFile(i Importer, URI string, next func(string, string) (interface{},
}
}
- if err := os.MkdirAll(path.Dir(dest), 0755); err != nil {
+ if err := importFile(i, URI, dest); err != nil {
return nil, err
}
- // Write file
- if fdto, err := os.Create(dest); err != nil {
- return nil, err
- } else {
- defer fdto.Close()
- writer := bufio.NewWriter(fdto)
- if err := GetFile(i, URI, writer); err != nil {
- os.Remove(dest)
- return nil, err
- }
- }
-
return next(dest, URI)
}
diff --git a/frontend/ui/src/components/Header.svelte b/frontend/ui/src/components/Header.svelte
index 081bc70f..16056708 100644
--- a/frontend/ui/src/components/Header.svelte
+++ b/frontend/ui/src/components/Header.svelte
@@ -45,7 +45,7 @@
{#if $challengeInfo && $challengeInfo.main_logo}
{#each $challengeInfo.main_logo as logo, i}
- 0?' d-none d-md-inline ms-2':'')}>
+ 0?' d-none d-md-inline ms-2':'')}>
{/each}
{/if}
diff --git a/frontend/ui/src/components/HeaderPartners.svelte b/frontend/ui/src/components/HeaderPartners.svelte
index b1c6749f..ab4bfd7f 100644
--- a/frontend/ui/src/components/HeaderPartners.svelte
+++ b/frontend/ui/src/components/HeaderPartners.svelte
@@ -16,10 +16,10 @@
{#if partner.href}
-
+
{:else}
-
+
{/if}
{/each}