Skip to content

Commit

Permalink
Merge pull request #175 from fairDataSociety/feature/issue130
Browse files Browse the repository at this point in the history
#130 handled, /pod/present api added
  • Loading branch information
asabya authored Jan 4, 2022
2 parents 2140b19 + f19aa8e commit fead1d8
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 4 deletions.
2 changes: 1 addition & 1 deletion cmd/dfs-cli/cmd/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions cmd/dfs/cmd/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ func startHttpService(logger logging.Logger) {
baseRouter.HandleFunc("/pod/receiveinfo", handler.PodReceiveInfoHandler).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")
Expand Down
48 changes: 48 additions & 0 deletions pkg/api/pod_present.go
Original file line number Diff line number Diff line change
@@ -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,
})
}
}
6 changes: 3 additions & 3 deletions pkg/api/user_present.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (
"resenje.org/jsonhttp"
)

type UserPresentResponse struct {
type PresentResponse struct {
Present bool `json:"present"`
}

Expand All @@ -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,
})
}
Expand Down
8 changes: 8 additions & 0 deletions pkg/dfs/pod_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
19 changes: 19 additions & 0 deletions pkg/pod/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit fead1d8

Please sign in to comment.