/
file_stat.go
107 lines (94 loc) · 3.26 KB
/
file_stat.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
Copyright © 2020 FairOS Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package api
import (
"errors"
"net/http"
"github.com/fairdatasociety/fairOS-dfs/pkg/auth"
"resenje.org/jsonhttp"
"github.com/fairdatasociety/fairOS-dfs/pkg/dfs"
)
// FileStatHandler godoc
//
// @Summary Info of a file
// @Description FileStatHandler is the api handler to get the information of a file
// @ID file-stat-handler
// @Tags file
// @Accept json
// @Produce json
// @Param podName query string true "pod name"
// @Param filePath query string true "file path"
// @Param Cookie header string true "cookie parameter"
// @Success 200 {object} file.Stats
// @Failure 400 {object} response
// @Failure 500 {object} response
// @Router /v1/file/stat [get]
func (h *Handler) FileStatHandler(w http.ResponseWriter, r *http.Request) {
driveName, isGroup := "", false
keys, ok := r.URL.Query()["groupName"]
if ok || (len(keys) == 1 && len(keys[0]) > 0) {
driveName = keys[0]
isGroup = true
} else {
keys, ok = r.URL.Query()["podName"]
if !ok || len(keys[0]) < 1 {
h.logger.Errorf("file stat: \"podName\" argument missing")
jsonhttp.BadRequest(w, &response{Message: "file stat: \"podName\" argument missing"})
return
}
driveName = keys[0]
if driveName == "" {
h.logger.Errorf("file stat: \"podName\" argument missing")
jsonhttp.BadRequest(w, &response{Message: "file stat: \"podName\" argument missing"})
return
}
}
keys, ok = r.URL.Query()["filePath"]
if !ok || len(keys[0]) < 1 {
h.logger.Errorf("file stat: \"filePath\" argument missing")
jsonhttp.BadRequest(w, &response{Message: "file stat: \"filePath\" argument missing"})
return
}
podFileWithPath := keys[0]
if podFileWithPath == "" {
h.logger.Errorf("file stat: \"filePath\" argument missing")
jsonhttp.BadRequest(w, &response{Message: "file stat: \"filePath\" argument missing"})
return
}
// get sessionId from request
sessionId, err := auth.GetSessionIdFromRequest(r)
if err != nil {
h.logger.Errorf("sessionId parse failed: ", err)
jsonhttp.BadRequest(w, &response{Message: ErrUnauthorized.Error()})
return
}
if sessionId == "" {
h.logger.Error("sessionId not set: ", err)
jsonhttp.BadRequest(w, &response{Message: ErrUnauthorized.Error()})
return
}
// get file stat
stat, err := h.dfsAPI.FileStat(driveName, podFileWithPath, sessionId, isGroup)
if err != nil {
if errors.Is(err, dfs.ErrPodNotOpen) {
h.logger.Errorf("file stat: %v", err)
jsonhttp.BadRequest(w, &response{Message: "file stat: " + err.Error()})
return
}
h.logger.Errorf("file stat: %v", err)
jsonhttp.InternalServerError(w, &response{Message: "file stat: " + err.Error()})
return
}
w.Header().Set("Content-Type", " application/json")
jsonhttp.OK(w, stat)
}