package api import ( "encoding/hex" "encoding/json" "srs.epita.fr/fic-server/admin/sync" "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))) 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 router.POST("/api/files/:fileid/check", apiHandler(fileHandler(checkFile))) // Synchronize router.POST("/api/sync/exercices/:eid/files", apiHandler(exerciceHandler( func(exercice fic.Exercice, _ []byte) (interface{}, error) { return sync.SyncExerciceFiles(sync.GlobalImporter, exercice), nil }))) } func listFiles(_ httprouter.Params, body []byte) (interface{}, error) { // List all files return fic.GetFiles() } func listExerciceFiles(exercice fic.Exercice, body []byte) (interface{}, error) { return exercice.GetFiles() } func clearFiles(_ httprouter.Params, _ []byte) (interface{}, error) { return fic.ClearFiles() } func showFile(file fic.EFile, _ []byte) (interface{}, error) { return file, nil } 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) } }) } 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() } func checkFile(file fic.EFile, _ []byte) (interface{}, error) { return true, file.CheckFileOnDisk() }