Skip to content

Commit

Permalink
#82, add /kv/present
Browse files Browse the repository at this point in the history
  • Loading branch information
asabya committed Jan 10, 2022
1 parent fead1d8 commit 4104e1a
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 1 deletion.
1 change: 1 addition & 0 deletions cmd/dfs/cmd/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ func startHttpService(logger logging.Logger) {
kvRouter.HandleFunc("/open", handler.KVOpenHandler).Methods("POST")
kvRouter.HandleFunc("/count", handler.KVCountHandler).Methods("POST")
kvRouter.HandleFunc("/delete", handler.KVDeleteHandler).Methods("DELETE")
kvRouter.HandleFunc("/present", handler.KVPresentHandler).Methods("GET")
kvRouter.HandleFunc("/entry/put", handler.KVPutHandler).Methods("POST")
kvRouter.HandleFunc("/entry/get", handler.KVGetHandler).Methods("GET")
kvRouter.HandleFunc("/entry/get-data", handler.KVGetDataHandler).Methods("GET")
Expand Down
82 changes: 81 additions & 1 deletion pkg/api/kv_put_get_del.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (
"net/http"

"github.com/fairdatasociety/fairOS-dfs/cmd/common"

"github.com/fairdatasociety/fairOS-dfs/pkg/collection"
"github.com/fairdatasociety/fairOS-dfs/pkg/cookie"
"resenje.org/jsonhttp"
)
Expand Down Expand Up @@ -170,6 +170,10 @@ func (h *Handler) KVGetHandler(w http.ResponseWriter, r *http.Request) {
columns, data, err := h.dfsAPI.KVGet(sessionId, podName, name, key)
if err != nil {
h.logger.Errorf("kv get: %v", err)
if err == collection.ErrEntryNotFound {
jsonhttp.NotFound(w, "kv get: "+err.Error())
return
}
jsonhttp.InternalServerError(w, "kv get: "+err.Error())
return
}
Expand Down Expand Up @@ -267,6 +271,10 @@ func (h *Handler) KVGetDataHandler(w http.ResponseWriter, r *http.Request) {
columns, data, err := h.dfsAPI.KVGet(sessionId, podName, name, key)
if err != nil {
h.logger.Errorf("kv get: %v", err)
if err == collection.ErrEntryNotFound {
jsonhttp.NotFound(w, "kv get: "+err.Error())
return
}
jsonhttp.InternalServerError(w, "kv get: "+err.Error())
return
}
Expand Down Expand Up @@ -351,3 +359,75 @@ func (h *Handler) KVDelHandler(w http.ResponseWriter, r *http.Request) {
}
jsonhttp.OK(w, "key deleted")
}

// KVPresentHandler is the api handler to check if a value exists in the kv table
// it takes three arguments
// - pod_name: the name of the pod
// - table_name: the name of the kv table
// - key: the key string
func (h *Handler) KVPresentHandler(w http.ResponseWriter, r *http.Request) {
keys, ok := r.URL.Query()["pod_name"]
if !ok || len(keys[0]) < 1 {
h.logger.Errorf("kv get: \"pod_name\" argument missing")
jsonhttp.BadRequest(w, "kv get: \"pod_name\" argument missing")
return
}
podName := keys[0]
if podName == "" {
h.logger.Errorf("kv get: \"pod_name\" argument missing")
jsonhttp.BadRequest(w, "kv get: \"pod_name\" argument missing")
return
}

keys, ok = r.URL.Query()["table_name"]
if !ok || len(keys[0]) < 1 {
h.logger.Errorf("kv get: \"table_name\" argument missing")
jsonhttp.BadRequest(w, "kv get: \"table_name\" argument missing")
return
}
name := keys[0]
if name == "" {
h.logger.Errorf("kv get: \"table_name\" argument missing")
jsonhttp.BadRequest(w, "kv get: \"table_name\" argument missing")
return
}

keys, ok = r.URL.Query()["key"]
if !ok || len(keys[0]) < 1 {
h.logger.Errorf("kv get: \"sharing_ref\" argument missing")
jsonhttp.BadRequest(w, "kv get: \"sharing_ref\" argument missing")
return
}
key := keys[0]
if key == "" {
h.logger.Errorf("kv get: \"key\" argument missing")
jsonhttp.BadRequest(w, "kv get: \"key\" argument missing")
return
}

// get values from cookie
sessionId, err := cookie.GetSessionIdFromCookie(r)
if err != nil {
h.logger.Errorf("kv get: invalid cookie: %v", err)
jsonhttp.BadRequest(w, ErrInvalidCookie)
return
}
if sessionId == "" {
h.logger.Errorf("kv get: \"cookie-id\" parameter missing in cookie")
jsonhttp.BadRequest(w, "kv get: \"cookie-id\" parameter missing in cookie")
return
}
w.Header().Set("Content-Type", "application/json")

_, _, err = h.dfsAPI.KVGet(sessionId, podName, name, key)
if err != nil {
jsonhttp.OK(w, &PresentResponse{
Present: false,
})
return
}

jsonhttp.OK(w, &PresentResponse{
Present: true,
})
}

0 comments on commit 4104e1a

Please sign in to comment.