/
create.go
82 lines (66 loc) · 2.05 KB
/
create.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package crud
import (
"errors"
"fmt"
"net/http"
"path"
absto "github.com/ViBiOh/absto/pkg/model"
"github.com/ViBiOh/fibr/pkg/provider"
"github.com/ViBiOh/httputils/v4/pkg/model"
"github.com/ViBiOh/httputils/v4/pkg/renderer"
"github.com/ViBiOh/httputils/v4/pkg/telemetry"
)
func (s Service) Create(w http.ResponseWriter, r *http.Request, request provider.Request) {
telemetry.SetRouteTag(r.Context(), "/mkdir")
if !request.CanEdit {
s.error(w, r, request, model.WrapForbidden(ErrNotAuthorized))
return
}
name, err := checkFormName(r, "name")
if err != nil && !errors.Is(err, ErrEmptyName) {
s.error(w, r, request, err)
return
}
name, err = provider.SanitizeName(name, false)
if err != nil {
s.error(w, r, request, model.WrapInternal(err))
return
}
pathname := request.SubPath(name)
if err = s.storage.Mkdir(r.Context(), pathname, absto.DirectoryPerm); err != nil {
s.error(w, r, request, model.WrapInternal(err))
return
}
s.renderer.Redirect(w, r, fmt.Sprintf("%s/?d=%s", name, request.Display), renderer.NewSuccessMessage("Directory %s successfully created", path.Base(pathname)))
}
func (s Service) CreateSavedSearch(w http.ResponseWriter, r *http.Request, request provider.Request) {
if !request.CanEdit {
s.error(w, r, request, model.WrapForbidden(ErrNotAuthorized))
return
}
name, err := checkFormName(r, "name")
if err != nil && !errors.Is(err, ErrEmptyName) {
s.error(w, r, request, err)
return
}
name, err = provider.SanitizeName(name, false)
if err != nil {
s.error(w, r, request, model.WrapInternal(err))
return
}
ctx := r.Context()
item, err := s.storage.Stat(ctx, request.Filepath())
if err != nil {
s.error(w, r, request, model.WrapNotFound(err))
return
}
if err = s.searchService.Add(ctx, item, provider.Search{
ID: provider.Hash(name),
Name: name,
Query: r.URL.RawQuery,
}); err != nil {
s.error(w, r, request, fmt.Errorf("update: %w", err))
return
}
s.renderer.Redirect(w, r, fmt.Sprintf("?%s", r.URL.RawQuery), renderer.NewSuccessMessage("Saved search %s successfully created", name))
}