admin: Export logos present in challenge.json
This commit is contained in:
parent
590a55c395
commit
3fc765ccfa
2 changed files with 56 additions and 0 deletions
|
@ -3,9 +3,12 @@ package api
|
||||||
import (
|
import (
|
||||||
"archive/zip"
|
"archive/zip"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
|
"srs.epita.fr/fic-server/admin/sync"
|
||||||
"srs.epita.fr/fic-server/libfic"
|
"srs.epita.fr/fic-server/libfic"
|
||||||
"srs.epita.fr/fic-server/settings"
|
"srs.epita.fr/fic-server/settings"
|
||||||
|
|
||||||
|
@ -59,6 +62,41 @@ func declareExportRoutes(router *gin.RouterGroup) {
|
||||||
json.NewEncoder(f).Encode(challengeinfo)
|
json.NewEncoder(f).Encode(challengeinfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Include partners' logos from challenge.json
|
||||||
|
if sync.GlobalImporter != nil {
|
||||||
|
if len(challengeinfo.MainLogo) > 0 {
|
||||||
|
for _, logo := range challengeinfo.MainLogo {
|
||||||
|
fd, closer, err := sync.OpenOrGetFile(sync.GlobalImporter, logo)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Unable to archive main logo %q: %s", logo, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := w.Create(path.Join("logo", path.Base(logo)))
|
||||||
|
if err == nil {
|
||||||
|
io.Copy(f, fd)
|
||||||
|
}
|
||||||
|
closer()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(challengeinfo.Partners) > 0 {
|
||||||
|
for _, partner := range challengeinfo.Partners {
|
||||||
|
fd, closer, err := sync.OpenOrGetFile(sync.GlobalImporter, partner.Src)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Unable to archive partner logo %q: %s", partner.Src, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := w.Create(path.Join("partner", path.Base(partner.Src)))
|
||||||
|
if err == nil {
|
||||||
|
io.Copy(f, fd)
|
||||||
|
}
|
||||||
|
closer()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// my.json
|
// my.json
|
||||||
f, err = w.Create("my.json")
|
f, err = w.Create("my.json")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|
|
@ -238,3 +238,21 @@ func WriteFileContent(i Importer, URI string, content []byte) error {
|
||||||
return fmt.Errorf("%t is not capable of writing", i)
|
return fmt.Errorf("%t is not capable of writing", i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func OpenOrGetFile(i Importer, URI string) (fd io.Reader, closer func() error, err error) {
|
||||||
|
if strings.HasPrefix(URI, "$FILES$") {
|
||||||
|
var fdc io.ReadCloser
|
||||||
|
fdc, err = os.Open(path.Join(fic.FilesDir, strings.TrimPrefix(URI, "$FILES$/")))
|
||||||
|
fd = fdc
|
||||||
|
closer = fdc.Close
|
||||||
|
} else {
|
||||||
|
fd, err = GlobalImporter.GetFile(URI)
|
||||||
|
if fdcloser, ok := fd.(io.ReadCloser); ok {
|
||||||
|
closer = fdcloser.Close
|
||||||
|
} else {
|
||||||
|
closer = func() error { return nil }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
Reference in a new issue