2016-12-08 08:12:18 +00:00
|
|
|
package api
|
2016-01-20 21:44:34 +00:00
|
|
|
|
2017-12-27 00:53:01 +00:00
|
|
|
import (
|
2019-07-21 19:54:48 +00:00
|
|
|
"encoding/hex"
|
2017-12-27 00:53:01 +00:00
|
|
|
"encoding/json"
|
2016-12-08 08:12:18 +00:00
|
|
|
|
2019-07-21 19:54:48 +00:00
|
|
|
"srs.epita.fr/fic-server/admin/sync"
|
2017-12-27 00:53:01 +00:00
|
|
|
"srs.epita.fr/fic-server/libfic"
|
|
|
|
|
|
|
|
"github.com/julienschmidt/httprouter"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
router.GET("/api/files/", apiHandler(listFiles))
|
|
|
|
router.DELETE("/api/files/", apiHandler(clearFiles))
|
|
|
|
|
|
|
|
router.GET("/api/files/:fileid", apiHandler(fileHandler(showFile)))
|
|
|
|
router.PUT("/api/files/:fileid", apiHandler(fileHandler(updateFile)))
|
|
|
|
router.DELETE("/api/files/:fileid", apiHandler(fileHandler(deleteFile)))
|
2018-08-19 20:19:49 +00:00
|
|
|
|
2019-07-21 19:54:48 +00:00
|
|
|
router.GET("/api/exercices/:eid/files", apiHandler(exerciceHandler(listExerciceFiles)))
|
|
|
|
router.POST("/api/exercices/:eid/files", apiHandler(exerciceHandler(createExerciceFile)))
|
|
|
|
|
|
|
|
router.GET("/api/exercices/:eid/files/:fid", apiHandler(exerciceFileHandler(showFile)))
|
|
|
|
router.PUT("/api/exercices/:eid/files/:fid", apiHandler(exerciceFileHandler(updateFile)))
|
|
|
|
router.DELETE("/api/exercices/:eid/files/:fid", apiHandler(exerciceFileHandler(deleteFile)))
|
|
|
|
|
|
|
|
// Check
|
2018-08-19 20:19:49 +00:00
|
|
|
router.POST("/api/files/:fileid/check", apiHandler(fileHandler(checkFile)))
|
2019-07-21 19:54:48 +00:00
|
|
|
|
|
|
|
// Synchronize
|
|
|
|
router.POST("/api/sync/exercices/:eid/files", apiHandler(exerciceHandler(
|
|
|
|
func(exercice fic.Exercice, _ []byte) (interface{}, error) {
|
|
|
|
return sync.SyncExerciceFiles(sync.GlobalImporter, exercice), nil
|
|
|
|
})))
|
2017-12-27 00:53:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func listFiles(_ httprouter.Params, body []byte) (interface{}, error) {
|
|
|
|
// List all files
|
|
|
|
return fic.GetFiles()
|
|
|
|
}
|
|
|
|
|
2019-07-21 19:54:48 +00:00
|
|
|
func listExerciceFiles(exercice fic.Exercice, body []byte) (interface{}, error) {
|
|
|
|
return exercice.GetFiles()
|
|
|
|
}
|
|
|
|
|
2017-12-27 00:53:01 +00:00
|
|
|
func clearFiles(_ httprouter.Params, _ []byte) (interface{}, error) {
|
|
|
|
return fic.ClearFiles()
|
|
|
|
}
|
|
|
|
|
|
|
|
func showFile(file fic.EFile, _ []byte) (interface{}, error) {
|
|
|
|
return file, nil
|
|
|
|
}
|
|
|
|
|
2019-07-21 19:54:48 +00:00
|
|
|
type uploadedFile struct {
|
|
|
|
URI string
|
|
|
|
Digest string
|
|
|
|
}
|
|
|
|
|
|
|
|
func createExerciceFile(exercice fic.Exercice, body []byte) (interface{}, error) {
|
|
|
|
var uf uploadedFile
|
|
|
|
if err := json.Unmarshal(body, &uf); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return sync.ImportFile(sync.GlobalImporter, uf.URI,
|
|
|
|
func(filePath string, origin string) (interface{}, error) {
|
|
|
|
if digest, err := hex.DecodeString(uf.Digest); err != nil {
|
|
|
|
return nil, err
|
|
|
|
} else {
|
|
|
|
return exercice.ImportFile(filePath, origin, digest)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2017-12-27 00:53:01 +00:00
|
|
|
func updateFile(file fic.EFile, body []byte) (interface{}, error) {
|
|
|
|
var uf fic.EFile
|
|
|
|
if err := json.Unmarshal(body, &uf); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
uf.Id = file.Id
|
|
|
|
|
|
|
|
if _, err := uf.Update(); err != nil {
|
|
|
|
return nil, err
|
|
|
|
} else {
|
|
|
|
return uf, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func deleteFile(file fic.EFile, _ []byte) (interface{}, error) {
|
|
|
|
return file.Delete()
|
2016-01-20 21:44:34 +00:00
|
|
|
}
|
2018-08-19 20:19:49 +00:00
|
|
|
|
|
|
|
func checkFile(file fic.EFile, _ []byte) (interface{}, error) {
|
|
|
|
return true, file.CheckFileOnDisk()
|
|
|
|
}
|