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 (
|
||||
"archive/zip"
|
||||
"encoding/json"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"path"
|
||||
|
||||
"srs.epita.fr/fic-server/admin/sync"
|
||||
"srs.epita.fr/fic-server/libfic"
|
||||
"srs.epita.fr/fic-server/settings"
|
||||
|
||||
|
@ -59,6 +62,41 @@ func declareExportRoutes(router *gin.RouterGroup) {
|
|||
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
|
||||
f, err = w.Create("my.json")
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
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