mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
check keywords before set/testandset
This commit is contained in:
parent
756b2cc750
commit
612fcf120e
@ -35,6 +35,14 @@ func Multiplexer(w http.ResponseWriter, req *http.Request) {
|
|||||||
func SetHttpHandler(w *http.ResponseWriter, req *http.Request) {
|
func SetHttpHandler(w *http.ResponseWriter, req *http.Request) {
|
||||||
key := req.URL.Path[len("/v1/keys/"):]
|
key := req.URL.Path[len("/v1/keys/"):]
|
||||||
|
|
||||||
|
if store.CheckKeyword(key) {
|
||||||
|
|
||||||
|
(*w).WriteHeader(http.StatusBadRequest)
|
||||||
|
|
||||||
|
(*w).Write(newJsonError(400, "Set"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
debug("[recv] POST http://%v/v1/keys/%s", raftServer.Name(), key)
|
debug("[recv] POST http://%v/v1/keys/%s", raftServer.Name(), key)
|
||||||
|
|
||||||
value := req.FormValue("value")
|
value := req.FormValue("value")
|
||||||
@ -57,6 +65,7 @@ func SetHttpHandler(w *http.ResponseWriter, req *http.Request) {
|
|||||||
(*w).WriteHeader(http.StatusBadRequest)
|
(*w).WriteHeader(http.StatusBadRequest)
|
||||||
|
|
||||||
(*w).Write(newJsonError(202, "Set"))
|
(*w).Write(newJsonError(202, "Set"))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(prevValue) != 0 {
|
if len(prevValue) != 0 {
|
||||||
@ -227,7 +236,7 @@ func GetHttpHandler(w *http.ResponseWriter, req *http.Request) {
|
|||||||
|
|
||||||
(*w).WriteHeader(http.StatusInternalServerError)
|
(*w).WriteHeader(http.StatusInternalServerError)
|
||||||
(*w).Write(newJsonError(300, ""))
|
(*w).Write(newJsonError(300, ""))
|
||||||
return
|
|
||||||
} else {
|
} else {
|
||||||
body, ok := body.([]byte)
|
body, ok := body.([]byte)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -237,7 +246,6 @@ func GetHttpHandler(w *http.ResponseWriter, req *http.Request) {
|
|||||||
(*w).WriteHeader(http.StatusOK)
|
(*w).WriteHeader(http.StatusOK)
|
||||||
(*w).Write(body)
|
(*w).Write(body)
|
||||||
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -274,7 +282,6 @@ func WatchHttpHandler(w http.ResponseWriter, req *http.Request) {
|
|||||||
if body, err := command.Apply(raftServer); err != nil {
|
if body, err := command.Apply(raftServer); err != nil {
|
||||||
warn("Unable to do watch command: %v", err)
|
warn("Unable to do watch command: %v", err)
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
return
|
|
||||||
} else {
|
} else {
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
|
||||||
@ -284,7 +291,6 @@ func WatchHttpHandler(w http.ResponseWriter, req *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
w.Write(body)
|
w.Write(body)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
3
error.go
3
error.go
@ -21,6 +21,9 @@ func init() {
|
|||||||
// raft related errors
|
// raft related errors
|
||||||
errors[300] = "Raft Internal Error"
|
errors[300] = "Raft Internal Error"
|
||||||
errors[301] = "During Leader Election"
|
errors[301] = "During Leader Election"
|
||||||
|
|
||||||
|
// keyword
|
||||||
|
errors[400] = "The prefix of the given key is a keyword in etcd"
|
||||||
}
|
}
|
||||||
|
|
||||||
type jsonError struct {
|
type jsonError struct {
|
||||||
|
37
store/keyword_test.go
Normal file
37
store/keyword_test.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package store
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestKeywords(t *testing.T) {
|
||||||
|
keyword := CheckKeyword("machines")
|
||||||
|
if !keyword {
|
||||||
|
t.Fatal("machines should be keyword")
|
||||||
|
}
|
||||||
|
|
||||||
|
keyword = CheckKeyword("/machines")
|
||||||
|
|
||||||
|
if !keyword {
|
||||||
|
t.Fatal("/machines should be keyword")
|
||||||
|
}
|
||||||
|
|
||||||
|
keyword = CheckKeyword("/machines/")
|
||||||
|
|
||||||
|
if !keyword {
|
||||||
|
t.Fatal("/machines/ contains keyword prefix")
|
||||||
|
}
|
||||||
|
|
||||||
|
keyword = CheckKeyword("/machines/node1")
|
||||||
|
|
||||||
|
if !keyword {
|
||||||
|
t.Fatal("/machines/* contains keyword prefix")
|
||||||
|
}
|
||||||
|
|
||||||
|
keyword = CheckKeyword("/nokeyword/machines/node1")
|
||||||
|
|
||||||
|
if keyword {
|
||||||
|
t.Fatal("this does not contain keyword prefix")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user