Implement global tokens.
This commit is contained in:
@@ -94,6 +94,9 @@ func (token *Stateful) match(group string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if token.IncludeSubgroups {
|
if token.IncludeSubgroups {
|
||||||
|
if token.Group == "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
return strings.HasPrefix(group, token.Group + "/")
|
return strings.HasPrefix(group, token.Group + "/")
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -80,6 +80,22 @@ func TestStatefulCheck(t *testing.T) {
|
|||||||
Permissions: []string{"present", "message"},
|
Permissions: []string{"present", "message"},
|
||||||
Expires: &future,
|
Expires: &future,
|
||||||
}
|
}
|
||||||
|
token6 := &Stateful{
|
||||||
|
Token: "token",
|
||||||
|
Group: "",
|
||||||
|
IncludeSubgroups: false,
|
||||||
|
Username: &user,
|
||||||
|
Permissions: []string{"present", "message"},
|
||||||
|
Expires: &future,
|
||||||
|
}
|
||||||
|
token7 := &Stateful{
|
||||||
|
Token: "token",
|
||||||
|
Group: "",
|
||||||
|
IncludeSubgroups: true,
|
||||||
|
Username: &user,
|
||||||
|
Permissions: []string{"present", "message"},
|
||||||
|
Expires: &future,
|
||||||
|
}
|
||||||
|
|
||||||
success := []struct {
|
success := []struct {
|
||||||
token *Stateful
|
token *Stateful
|
||||||
@@ -129,6 +145,13 @@ func TestStatefulCheck(t *testing.T) {
|
|||||||
expUsername: "user",
|
expUsername: "user",
|
||||||
expPermissions: []string{"present", "message"},
|
expPermissions: []string{"present", "message"},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
token: token7,
|
||||||
|
group: "group/subgroup",
|
||||||
|
username: &user,
|
||||||
|
expUsername: "user",
|
||||||
|
expPermissions: []string{"present", "message"},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, s := range success {
|
for i, s := range success {
|
||||||
@@ -166,6 +189,21 @@ func TestStatefulCheck(t *testing.T) {
|
|||||||
group: "groups",
|
group: "groups",
|
||||||
username: &user,
|
username: &user,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
token: token6,
|
||||||
|
group: "",
|
||||||
|
username: &user,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: token6,
|
||||||
|
group: "group",
|
||||||
|
username: &user,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
token: token7,
|
||||||
|
group: "",
|
||||||
|
username: &user,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, s := range failure {
|
for i, s := range failure {
|
||||||
|
|||||||
+5
-4
@@ -155,11 +155,10 @@ func apiHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
func apiGroupHandler(w http.ResponseWriter, r *http.Request, pth string) {
|
func apiGroupHandler(w http.ResponseWriter, r *http.Request, pth string) {
|
||||||
first, kind, rest := splitPath(pth)
|
first, kind, rest := splitPath(pth)
|
||||||
if first == "" {
|
g := ""
|
||||||
notFound(w)
|
if first != "" {
|
||||||
return
|
g = first[1:]
|
||||||
}
|
}
|
||||||
g := first[1:]
|
|
||||||
if g == "" && kind == "" {
|
if g == "" && kind == "" {
|
||||||
if apiCORS(w, r, "HEAD, GET") {
|
if apiCORS(w, r, "HEAD, GET") {
|
||||||
return
|
return
|
||||||
@@ -537,12 +536,14 @@ func tokensHandler(w http.ResponseWriter, r *http.Request, g, pth string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if g != "" {
|
||||||
// check that the group exists
|
// check that the group exists
|
||||||
_, err := group.GetDescription(g)
|
_, err := group.GetDescription(g)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
httpError(w, err)
|
httpError(w, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if pth == "/" {
|
if pth == "/" {
|
||||||
if r.Method == "HEAD" || r.Method == "GET" {
|
if r.Method == "HEAD" || r.Method == "GET" {
|
||||||
tokens, etag, err := token.List(g)
|
tokens, etag, err := token.List(g)
|
||||||
|
|||||||
@@ -312,6 +312,12 @@ func TestApi(t *testing.T) {
|
|||||||
t.Errorf("Create token: %v %v", err, resp.StatusCode)
|
t.Errorf("Create token: %v %v", err, resp.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resp, err = do("POST", "/galene-api/v0/.groups/.tokens/",
|
||||||
|
"application/json", "", "", "{\"includeSubgroups\": true}")
|
||||||
|
if err != nil || resp.StatusCode != http.StatusCreated {
|
||||||
|
t.Errorf("Create global token: %v %v", err, resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
var toknames []string
|
var toknames []string
|
||||||
err = getJSON("/galene-api/v0/.groups/test/.tokens/", &toknames)
|
err = getJSON("/galene-api/v0/.groups/test/.tokens/", &toknames)
|
||||||
if err != nil || len(toknames) != 1 {
|
if err != nil || len(toknames) != 1 {
|
||||||
@@ -319,6 +325,12 @@ func TestApi(t *testing.T) {
|
|||||||
}
|
}
|
||||||
tokname := toknames[0]
|
tokname := toknames[0]
|
||||||
|
|
||||||
|
var globalToknames []string
|
||||||
|
err = getJSON("/galene-api/v0/.groups/test/.tokens/", &globalToknames)
|
||||||
|
if err != nil || len(globalToknames) != 1 {
|
||||||
|
t.Errorf("Get global tokens: %v %v", err, globalToknames)
|
||||||
|
}
|
||||||
|
|
||||||
tokens, etag, err := token.List("test")
|
tokens, etag, err := token.List("test")
|
||||||
if err != nil || len(tokens) != 1 || tokens[0].Token != tokname {
|
if err != nil || len(tokens) != 1 || tokens[0].Token != tokname {
|
||||||
t.Errorf("token.List: %v %v", tokens, err)
|
t.Errorf("token.List: %v %v", tokens, err)
|
||||||
|
|||||||
Reference in New Issue
Block a user