|
|
@@ -50,16 +50,27 @@ func API(w http.ResponseWriter, r *http.Request) {
|
|
|
n.Titlu = r.Form.Get("titlu")
|
|
|
n.Continut = r.Form.Get("notita")
|
|
|
n.Folder = r.Form.Get("director")
|
|
|
- err := os.MkdirAll(n.Folder, 0755)
|
|
|
+ if n.Folder == "" {
|
|
|
+ n.Folder = "default"
|
|
|
+ }
|
|
|
+ err := safeDirectory(n.Folder)
|
|
|
+ if err != nil {
|
|
|
+ w.WriteHeader(http.StatusBadRequest)
|
|
|
+ fmt.Fprintf(w, "Error : %+v, %s", err, n.Folder)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = os.MkdirAll(filepath.Join("notes_folder", n.Folder), 0755)
|
|
|
+ fmt.Println(n.Folder)
|
|
|
if err != nil {
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
|
- fmt.Fprintf(w, "ParseForm error: %+v", err)
|
|
|
+ fmt.Fprintf(w, "ParseForm error: %+v , %s", err, n.Folder)
|
|
|
+ return
|
|
|
}
|
|
|
fisier := fmt.Sprintf("notita-%s.json", time.Now().Format("2006-01-02-150405.999999"))
|
|
|
//fmt.Println(fisier, r.Form)
|
|
|
//return
|
|
|
|
|
|
- err = inout.ObjToFile(filepath.Join(n.Folder, fisier), n, true)
|
|
|
+ err = inout.ObjToFile(filepath.Join("notes_folder", n.Folder, fisier), n, true)
|
|
|
if err != nil {
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
fmt.Fprintf(w, "%+v", err)
|
|
|
@@ -111,3 +122,38 @@ func Notes(w http.ResponseWriter, r *http.Request, fisier string) {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func safeDirectory(path string) error {
|
|
|
+ path = filepath.Clean(path)
|
|
|
+ if strings.HasPrefix(path, "..") || filepath.IsAbs(path) {
|
|
|
+ return fmt.Errorf("Invalid Path")
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func ListNotes(w http.ResponseWriter, r *http.Request) {
|
|
|
+ if r.Method == "GET" {
|
|
|
+ w.Write(inout.FileToBytes("./templates/list_notes.tmpl"))
|
|
|
+ buildFolderStructure("./notes_folder", w)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func buildFolderStructure(path string, w http.ResponseWriter /*f []types.Folder*/) {
|
|
|
+ entries, err := os.ReadDir(path)
|
|
|
+ if err != nil {
|
|
|
+ w.WriteHeader(http.StatusBadRequest)
|
|
|
+ fmt.Fprintf(w, "%+v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, entry := range entries {
|
|
|
+ /*if entry.IsDir() {
|
|
|
+ w.WriteHeader(http.StatusNotImplemented)
|
|
|
+ fmt.Fprint(w, "Functie Neimplementata - Subdirectorii")
|
|
|
+ }*/
|
|
|
+ fmt.Fprintln(w, entry, entry.IsDir())
|
|
|
+ if entry.IsDir() {
|
|
|
+ buildFolderStructure(filepath.Join(path, entry.Name()), w)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|