Hints can something else than text

This commit is contained in:
nemunaire 2017-01-05 02:21:32 +01:00
parent ee8bb97057
commit c2dea2f985
6 changed files with 69 additions and 25 deletions

View file

@ -3,6 +3,7 @@ package api
import (
"encoding/json"
"errors"
"strings"
"srs.epita.fr/fic-server/libfic"
@ -119,17 +120,29 @@ func createExerciceKey(exercice fic.Exercice, body []byte) (interface{}, error)
return exercice.AddRawKey(uk.Type, uk.Key)
}
type uploadedHint struct {
Title string
Content string
Cost int64
Path string
}
func createExerciceHint(exercice fic.Exercice, body []byte) (interface{}, error) {
var uh fic.EHint
var uh uploadedHint
if err := json.Unmarshal(body, &uh); err != nil {
return nil, err
}
if len(uh.Content) == 0 {
if len(uh.Content) != 0 {
return exercice.AddHint(uh.Title, uh.Content, uh.Cost)
} else if len(uh.Path) != 0 {
return importFile(uploadedFile{Path: uh.Path},
func(filePath string, origin string, digest []byte) (interface{}, error) {
return exercice.AddHint(uh.Title, "$FILES" + strings.TrimPrefix(filePath, fic.FilesDir), uh.Cost)
})
} else {
return nil, errors.New("Hint's content not filled")
}
return exercice.AddHint(uh.Title, uh.Content, uh.Cost)
}
func showExerciceHint(hint fic.EHint, body []byte) (interface{}, error) {
@ -189,6 +202,15 @@ func deleteExerciceKey(key fic.Key, _ fic.Exercice, _ []byte) (interface{}, erro
}
func createExerciceFile(exercice fic.Exercice, body []byte) (interface{}, error) {
var uf uploadedFile
if err := json.Unmarshal(body, &uf); err != nil {
return nil, err
}
return importFile(uf, exercice.ImportFile)
}
func showExerciceFile(file fic.EFile, body []byte) (interface{}, error) {
return file, nil
}

View file

@ -5,7 +5,6 @@ import (
"crypto/sha512"
"encoding/base32"
"encoding/hex"
"encoding/json"
"errors"
"fmt"
"log"
@ -29,12 +28,7 @@ type uploadedFile struct {
Parts []string
}
func createExerciceFile(exercice fic.Exercice, body []byte) (interface{}, error) {
var uf uploadedFile
if err := json.Unmarshal(body, &uf); err != nil {
return nil, err
}
func importFile(uf uploadedFile, next func(string, string, []byte) (interface{}, error)) (interface{}, error) {
var hash [sha512.Size]byte
var logStr string
var fromURI string
@ -80,7 +74,7 @@ func createExerciceFile(exercice fic.Exercice, body []byte) (interface{}, error)
pathname := path.Join(fic.FilesDir, strings.ToLower(base32.StdEncoding.EncodeToString(hash[:])), path.Base(fromURI))
// Remove the file if it exists
if _, err := os.Stat(pathname); os.IsExist(err) && !RapidImport {
if _, err := os.Stat(pathname); !os.IsNotExist(err) && !RapidImport {
if err := os.Remove(pathname); err != nil {
return nil, err
}
@ -98,7 +92,7 @@ func createExerciceFile(exercice fic.Exercice, body []byte) (interface{}, error)
if digest, err := hex.DecodeString(uf.Digest); err != nil {
return nil, err
} else {
return exercice.ImportFile(pathname, fromURI, digest)
return next(pathname, fromURI, digest)
}
}