From ec5ef9d2b72c47a75bc2d19a213554bb006126c0 Mon Sep 17 00:00:00 2001 From: asabya Date: Mon, 27 Dec 2021 18:37:49 +0530 Subject: [PATCH 1/2] #130 handled, /pod/present api added --- cmd/dfs-cli/cmd/user.go | 2 +- cmd/dfs/cmd/server.go | 2 ++ pkg/api/pod_present.go | 48 +++++++++++++++++++++++++++++++++++++++++ pkg/api/user_present.go | 6 +++--- pkg/dfs/pod_api.go | 8 +++++++ pkg/pod/utils.go | 19 ++++++++++++++++ 6 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 pkg/api/pod_present.go diff --git a/cmd/dfs-cli/cmd/user.go b/cmd/dfs-cli/cmd/user.go index 603d788c..cbd09e97 100644 --- a/cmd/dfs-cli/cmd/user.go +++ b/cmd/dfs-cli/cmd/user.go @@ -201,7 +201,7 @@ func presentUser(userName string) { fmt.Println("user present: ", err) return } - var resp api.UserPresentResponse + var resp api.PresentResponse err = json.Unmarshal(data, &resp) if err != nil { fmt.Println("import user: ", err) diff --git a/cmd/dfs/cmd/server.go b/cmd/dfs/cmd/server.go index 2691306c..727447fc 100644 --- a/cmd/dfs/cmd/server.go +++ b/cmd/dfs/cmd/server.go @@ -193,8 +193,10 @@ func startHttpService(logger logging.Logger) { // pod related handlers baseRouter.HandleFunc("/pod/receive", handler.PodReceiveHandler).Methods("GET") baseRouter.HandleFunc("/pod/receiveinfo", handler.PodReceiveInfoHandler).Methods("GET") + baseRouter.HandleFunc("/pod/present", handler.PodPresentHandler).Methods("GET") podRouter := baseRouter.PathPrefix("/pod/").Subrouter() podRouter.Use(handler.LoginMiddleware) + podRouter.HandleFunc("/present", handler.PodPresentHandler).Methods("GET") podRouter.HandleFunc("/new", handler.PodCreateHandler).Methods("POST") podRouter.HandleFunc("/open", handler.PodOpenHandler).Methods("POST") podRouter.HandleFunc("/close", handler.PodCloseHandler).Methods("POST") diff --git a/pkg/api/pod_present.go b/pkg/api/pod_present.go new file mode 100644 index 00000000..935ceded --- /dev/null +++ b/pkg/api/pod_present.go @@ -0,0 +1,48 @@ +package api + +import ( + "net/http" + + "github.com/fairdatasociety/fairOS-dfs/pkg/cookie" + + "resenje.org/jsonhttp" +) + +// PodPresentHandler is the api handler to check if a pod is present +// it takes pod_name as query parameter +func (h *Handler) PodPresentHandler(w http.ResponseWriter, r *http.Request) { + keys, ok := r.URL.Query()["pod_name"] + if !ok || len(keys[0]) < 1 { + h.logger.Errorf("doc ls: \"pod_name\" argument missing") + jsonhttp.BadRequest(w, "doc ls: \"pod_name\" argument missing") + return + } + podName := keys[0] + if podName == "" { + h.logger.Errorf("doc ls: \"pod_name\" argument missing") + jsonhttp.BadRequest(w, "doc ls: \"pod_name\" argument missing") + return + } + + // get values from cookie + sessionId, err := cookie.GetSessionIdFromCookie(r) + if err != nil { + h.logger.Errorf("pod open: invalid cookie: %v", err) + jsonhttp.BadRequest(w, ErrInvalidCookie) + return + } + if sessionId == "" { + h.logger.Errorf("pod open: \"cookie-id\" parameter missing in cookie") + jsonhttp.BadRequest(w, "pod open: \"cookie-id\" parameter missing in cookie") + return + } + if h.dfsAPI.IsPodExist(podName, sessionId) { + jsonhttp.OK(w, &PresentResponse{ + Present: true, + }) + } else { + jsonhttp.OK(w, &PresentResponse{ + Present: false, + }) + } +} diff --git a/pkg/api/user_present.go b/pkg/api/user_present.go index 27520496..f9f1c343 100644 --- a/pkg/api/user_present.go +++ b/pkg/api/user_present.go @@ -22,7 +22,7 @@ import ( "resenje.org/jsonhttp" ) -type UserPresentResponse struct { +type PresentResponse struct { Present bool `json:"present"` } @@ -47,11 +47,11 @@ func (h *Handler) UserPresentHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", " application/json") // check if user is present if h.dfsAPI.IsUserNameAvailable(user) { - jsonhttp.OK(w, &UserPresentResponse{ + jsonhttp.OK(w, &PresentResponse{ Present: true, }) } else { - jsonhttp.OK(w, &UserPresentResponse{ + jsonhttp.OK(w, &PresentResponse{ Present: false, }) } diff --git a/pkg/dfs/pod_api.go b/pkg/dfs/pod_api.go index 89ff4203..36e929aa 100644 --- a/pkg/dfs/pod_api.go +++ b/pkg/dfs/pod_api.go @@ -245,3 +245,11 @@ func (d *DfsAPI) PodReceive(sessionId string, ref utils.Reference) (*pod.Info, e return ui.GetPod().ReceivePod(ref) } + +func (d *DfsAPI) IsPodExist(podName, sessionId string) bool { + ui := d.users.GetLoggedInUserInfo(sessionId) + if ui == nil { + return false + } + return ui.GetPod().IsPodPresent(podName) +} diff --git a/pkg/pod/utils.go b/pkg/pod/utils.go index 0fd1e257..a27d3bbb 100644 --- a/pkg/pod/utils.go +++ b/pkg/pod/utils.go @@ -33,6 +33,25 @@ func (p *Pod) IsPodOpened(podName string) bool { return false } +func (p *Pod) IsPodPresent(podName string) bool { + podName, err := CleanPodName(podName) + if err != nil { + return false + } + // check if pods is present and get free index + pods, sharedPods, err := p.loadUserPods() + if err != nil { + return false + } + if p.checkIfPodPresent(pods, podName) { + return true + } + if p.checkIfSharedPodPresent(sharedPods, podName) { + return true + } + return false +} + func (*Pod) GetPath(inode *d.Inode) string { if inode != nil { return inode.Meta.Path From f19aa8e41da8a36635a5673569897360a485db8c Mon Sep 17 00:00:00 2001 From: asabya Date: Tue, 4 Jan 2022 14:40:16 +0530 Subject: [PATCH 2/2] podPresent only for loggedin user --- cmd/dfs/cmd/server.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cmd/dfs/cmd/server.go b/cmd/dfs/cmd/server.go index 727447fc..a0864058 100644 --- a/cmd/dfs/cmd/server.go +++ b/cmd/dfs/cmd/server.go @@ -193,7 +193,6 @@ func startHttpService(logger logging.Logger) { // pod related handlers baseRouter.HandleFunc("/pod/receive", handler.PodReceiveHandler).Methods("GET") baseRouter.HandleFunc("/pod/receiveinfo", handler.PodReceiveInfoHandler).Methods("GET") - baseRouter.HandleFunc("/pod/present", handler.PodPresentHandler).Methods("GET") podRouter := baseRouter.PathPrefix("/pod/").Subrouter() podRouter.Use(handler.LoginMiddleware) podRouter.HandleFunc("/present", handler.PodPresentHandler).Methods("GET")