Rename public group URLs to halls
This commit is contained in:
1 parent
bda0e548d3
commit
55528b8e62
21 files changed
+312
-312
No files matched your search
+4
-4
@@ -34,7 +34,7 @@ func checkAdmin(w http.ResponseWriter, r *http.Request) bool {
|
||||
// checkPasswordAdmin checks whether the client authentifies as either an
|
||||
// administrator or the given user. It is used to check whether the
|
||||
// client has the right to change user's password.
|
||||
func checkPasswordAdmin(w http.ResponseWriter, r *http.Request, groupname, user string, wildcard bool) bool {
|
||||
func checkPasswordAdmin(w http.ResponseWriter, r *http.Request, hallname, user string, wildcard bool) bool {
|
||||
username, password, ok := r.BasicAuth()
|
||||
if ok {
|
||||
ok, err := adminMatch(username, password)
|
||||
@@ -47,11 +47,11 @@ func checkPasswordAdmin(w http.ResponseWriter, r *http.Request, groupname, user
|
||||
}
|
||||
}
|
||||
if ok && !wildcard && username == user {
|
||||
desc, err := group.GetDescription(groupname)
|
||||
desc, err := group.GetDescription(hallname)
|
||||
if err != nil {
|
||||
internalError(w,
|
||||
"Get description for group %v: %v",
|
||||
groupname, err,
|
||||
hallname, err,
|
||||
)
|
||||
return false
|
||||
}
|
||||
@@ -169,7 +169,7 @@ func apiHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
w.Header().Set("cache-control", "no-cache")
|
||||
sendJSON(w, r, stats.GetGroups())
|
||||
case ".groups":
|
||||
case ".halls":
|
||||
apiGroupHandler(w, r, rest)
|
||||
default:
|
||||
http.NotFound(w, r)
|
||||
|
||||
+59
-59
@@ -115,58 +115,58 @@ func TestApi(t *testing.T) {
|
||||
}
|
||||
|
||||
var groups []string
|
||||
err = getJSON("/skald-api/v0/.groups/", &groups)
|
||||
err = getJSON("/skald-api/v0/.halls/", &groups)
|
||||
if err != nil || len(groups) != 0 {
|
||||
t.Errorf("Get groups: %v", err)
|
||||
t.Errorf("Get halls: %v", err)
|
||||
}
|
||||
|
||||
resp, err := do("PUT", "/skald-api/v0/.groups/test/",
|
||||
resp, err := do("PUT", "/skald-api/v0/.halls/test/",
|
||||
"application/json", "\"foo\"", "",
|
||||
"{}")
|
||||
if err != nil || resp.StatusCode != http.StatusPreconditionFailed {
|
||||
t.Errorf("Create group (bad ETag): %v %v", err, resp.StatusCode)
|
||||
t.Errorf("Create hall (bad ETag): %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test/",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test/",
|
||||
"text/plain", "", "",
|
||||
"Hello, world!")
|
||||
if err != nil || resp.StatusCode != http.StatusUnsupportedMediaType {
|
||||
t.Errorf("Create group (bad content-type): %v %v",
|
||||
t.Errorf("Create hall (bad content-type): %v %v",
|
||||
err, resp.StatusCode)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test/",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test/",
|
||||
"application/json", "", "*",
|
||||
"{}")
|
||||
if err != nil || resp.StatusCode != http.StatusCreated {
|
||||
t.Errorf("Create group: %v %v", err, resp.StatusCode)
|
||||
t.Errorf("Create hall: %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
var desc *group.Description
|
||||
err = getJSON("/skald-api/v0/.groups/test/", &desc)
|
||||
err = getJSON("/skald-api/v0/.halls/test/", &desc)
|
||||
if err != nil || len(desc.Users) != 0 {
|
||||
t.Errorf("Get group: %v", err)
|
||||
t.Errorf("Get hall: %v", err)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test/",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test/",
|
||||
"application/json", "", "*",
|
||||
"{}")
|
||||
if err != nil || resp.StatusCode != http.StatusPreconditionFailed {
|
||||
t.Errorf("Create group (bad ETag): %v %v", err, resp.StatusCode)
|
||||
t.Errorf("Create hall (bad ETag): %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
resp, err = do("DELETE", "/skald-api/v0/.groups/test/",
|
||||
resp, err = do("DELETE", "/skald-api/v0/.halls/test/",
|
||||
"", "", "*", "")
|
||||
if err != nil || resp.StatusCode != http.StatusPreconditionFailed {
|
||||
t.Errorf("Delete group (bad ETag): %v %v", err, resp.StatusCode)
|
||||
t.Errorf("Delete hall (bad ETag): %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
err = getJSON("/skald-api/v0/.groups/", &groups)
|
||||
err = getJSON("/skald-api/v0/.halls/", &groups)
|
||||
if err != nil || len(groups) != 1 || groups[0] != "test" {
|
||||
t.Errorf("Get groups: %v %v", err, groups)
|
||||
t.Errorf("Get halls: %v %v", err, groups)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test/.keys",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test/.keys",
|
||||
"application/jwk-set+json", "", "",
|
||||
`{"keys": [{
|
||||
"kty": "oct", "alg": "HS256",
|
||||
@@ -176,12 +176,12 @@ func TestApi(t *testing.T) {
|
||||
t.Errorf("Set key: %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
err = getJSON("/skald-api/v0/.groups/test/.users/", &groups)
|
||||
err = getJSON("/skald-api/v0/.halls/test/.users/", &groups)
|
||||
if err != nil || len(groups) != 0 {
|
||||
t.Errorf("Get users: %v", err)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test/.users/jch",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test/.users/jch",
|
||||
"text/plain", "", "*",
|
||||
`hello, world!`)
|
||||
if err != nil || resp.StatusCode != http.StatusUnsupportedMediaType {
|
||||
@@ -189,7 +189,7 @@ func TestApi(t *testing.T) {
|
||||
err, resp.StatusCode)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test/.users/jch",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test/.users/jch",
|
||||
"application/json", "", "*",
|
||||
`{"permissions": "present"}`)
|
||||
if err != nil || resp.StatusCode != http.StatusCreated {
|
||||
@@ -197,26 +197,26 @@ func TestApi(t *testing.T) {
|
||||
}
|
||||
|
||||
var users []string
|
||||
err = getJSON("/skald-api/v0/.groups/test/.users/", &users)
|
||||
err = getJSON("/skald-api/v0/.halls/test/.users/", &users)
|
||||
if err != nil || len(users) != 1 || users[0] != "jch" {
|
||||
t.Errorf("Get users: %v %v", err, users)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test/.users/jch",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test/.users/jch",
|
||||
"application/json", "", "*",
|
||||
`{"permissions": "present"}`)
|
||||
if err != nil || resp.StatusCode != http.StatusPreconditionFailed {
|
||||
t.Errorf("Create user (bad ETag): %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test/.users/jch/.password",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test/.users/jch/.password",
|
||||
"application/json", "", "",
|
||||
`"toto"`)
|
||||
if err != nil || resp.StatusCode != http.StatusNoContent {
|
||||
t.Errorf("Set password (PUT): %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
resp, err = do("POST", "/skald-api/v0/.groups/test/.users/jch/.password",
|
||||
resp, err = do("POST", "/skald-api/v0/.halls/test/.users/jch/.password",
|
||||
"text/plain", "", "",
|
||||
`toto`)
|
||||
if err != nil || resp.StatusCode != http.StatusNoContent {
|
||||
@@ -224,7 +224,7 @@ func TestApi(t *testing.T) {
|
||||
}
|
||||
|
||||
var user group.UserDescription
|
||||
err = getJSON("/skald-api/v0/.groups/test/.users/jch", &user)
|
||||
err = getJSON("/skald-api/v0/.halls/test/.users/jch", &user)
|
||||
if err != nil {
|
||||
t.Errorf("Get user: %v", err)
|
||||
}
|
||||
@@ -245,10 +245,10 @@ func TestApi(t *testing.T) {
|
||||
t.Errorf("Password.Type: %v", desc.Users["jch"].Password.Type)
|
||||
}
|
||||
|
||||
resp, err = do("DELETE", "/skald-api/v0/.groups/test/.users/jch",
|
||||
resp, err = do("DELETE", "/skald-api/v0/.halls/test/.users/jch",
|
||||
"", "", "", "")
|
||||
if err != nil || resp.StatusCode != http.StatusNoContent {
|
||||
t.Errorf("Delete group: %v %v", err, resp.StatusCode)
|
||||
t.Errorf("Delete hall: %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
desc, err = group.GetDescription("test")
|
||||
@@ -260,14 +260,14 @@ func TestApi(t *testing.T) {
|
||||
t.Errorf("Users (after delete): %#v", desc.Users)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test/.wildcard-user",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test/.wildcard-user",
|
||||
"application/json", "", "*",
|
||||
`{"permissions": "present"}`)
|
||||
if err != nil || resp.StatusCode != http.StatusCreated {
|
||||
t.Errorf("Create wildcard user: %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
err = getJSON("/skald-api/v0/.groups/test/.wildcard-user", &user)
|
||||
err = getJSON("/skald-api/v0/.halls/test/.wildcard-user", &user)
|
||||
if err != nil {
|
||||
t.Errorf("Get wildcard user: %v", err)
|
||||
}
|
||||
@@ -281,7 +281,7 @@ func TestApi(t *testing.T) {
|
||||
t.Errorf("Got %v, expected %v", desc.WildcardUser, user)
|
||||
}
|
||||
|
||||
resp, err = do("DELETE", "/skald-api/v0/.groups/test/.wildcard-user",
|
||||
resp, err = do("DELETE", "/skald-api/v0/.halls/test/.wildcard-user",
|
||||
"", "", "", "")
|
||||
if err != nil || resp.StatusCode != http.StatusNoContent {
|
||||
t.Errorf("Delete wildcard user: %v %v", err, resp.StatusCode)
|
||||
@@ -300,33 +300,33 @@ func TestApi(t *testing.T) {
|
||||
t.Errorf("Keys: %v", len(desc.AuthKeys))
|
||||
}
|
||||
|
||||
resp, err = do("POST", "/skald-api/v0/.groups/test/.tokens/",
|
||||
resp, err = do("POST", "/skald-api/v0/.halls/test/.tokens/",
|
||||
"application/json", "", "", `{"group":"bad"}`)
|
||||
if err != nil || resp.StatusCode != http.StatusBadRequest {
|
||||
t.Errorf("Create token (bad group): %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
resp, err = do("POST", "/skald-api/v0/.groups/test/.tokens/",
|
||||
resp, err = do("POST", "/skald-api/v0/.halls/test/.tokens/",
|
||||
"application/json", "", "", "{}")
|
||||
if err != nil || resp.StatusCode != http.StatusCreated {
|
||||
t.Errorf("Create token: %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
resp, err = do("POST", "/skald-api/v0/.groups/.tokens/",
|
||||
resp, err = do("POST", "/skald-api/v0/.halls/.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
|
||||
err = getJSON("/skald-api/v0/.groups/test/.tokens/", &toknames)
|
||||
err = getJSON("/skald-api/v0/.halls/test/.tokens/", &toknames)
|
||||
if err != nil || len(toknames) != 1 {
|
||||
t.Errorf("Get tokens: %v %v", err, toknames)
|
||||
}
|
||||
tokname := toknames[0]
|
||||
|
||||
var globalToknames []string
|
||||
err = getJSON("/skald-api/v0/.groups/test/.tokens/", &globalToknames)
|
||||
err = getJSON("/skald-api/v0/.halls/test/.tokens/", &globalToknames)
|
||||
if err != nil || len(globalToknames) != 1 {
|
||||
t.Errorf("Get global tokens: %v %v", err, globalToknames)
|
||||
}
|
||||
@@ -336,7 +336,7 @@ func TestApi(t *testing.T) {
|
||||
t.Errorf("token.List: %v %v", tokens, err)
|
||||
}
|
||||
|
||||
tokenpath := "/skald-api/v0/.groups/test/.tokens/" + tokname
|
||||
tokenpath := "/skald-api/v0/.halls/test/.tokens/" + tokname
|
||||
var tok token.Stateful
|
||||
err = getJSON(tokenpath, &tok)
|
||||
if err != nil {
|
||||
@@ -375,13 +375,13 @@ func TestApi(t *testing.T) {
|
||||
t.Errorf("Got %v, expected %v (%v)", tok.Expires, e, err)
|
||||
}
|
||||
|
||||
resp, err = do("PUT", "/skald-api/v0/.groups/test2",
|
||||
resp, err = do("PUT", "/skald-api/v0/.halls/test2",
|
||||
"application/json", "", "*", "{}")
|
||||
if err != nil || resp.StatusCode != http.StatusCreated {
|
||||
t.Errorf("Create test2: %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
tokenpath2 := "/skald-api/v0/.groups/test2/.tokens/" + tokname
|
||||
tokenpath2 := "/skald-api/v0/.halls/test2/.tokens/" + tokname
|
||||
resp, err = do("GET", tokenpath2, "", "", "", "")
|
||||
if err != nil || resp.StatusCode != http.StatusNotFound {
|
||||
t.Errorf("Get token in bad group: %v %v", err, resp.StatusCode)
|
||||
@@ -402,16 +402,16 @@ func TestApi(t *testing.T) {
|
||||
t.Errorf("Token list: %v %v", tokens, err)
|
||||
}
|
||||
|
||||
resp, err = do("DELETE", "/skald-api/v0/.groups/test/.keys",
|
||||
resp, err = do("DELETE", "/skald-api/v0/.halls/test/.keys",
|
||||
"", "", "", "")
|
||||
if err != nil || resp.StatusCode != http.StatusNoContent {
|
||||
t.Errorf("Delete keys: %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
resp, err = do("DELETE", "/skald-api/v0/.groups/test/",
|
||||
resp, err = do("DELETE", "/skald-api/v0/.halls/test/",
|
||||
"", "", "", "")
|
||||
if err != nil || resp.StatusCode != http.StatusNoContent {
|
||||
t.Errorf("Delete group: %v %v", err, resp.StatusCode)
|
||||
t.Errorf("Delete hall: %v %v", err, resp.StatusCode)
|
||||
}
|
||||
|
||||
_, err = group.GetDescription("test")
|
||||
@@ -448,8 +448,8 @@ func TestApiBadAuth(t *testing.T) {
|
||||
}
|
||||
|
||||
do("GET", "/skald-api/v0/.stats")
|
||||
do("GET", "/skald-api/v0/.groups/")
|
||||
do("PUT", "/skald-api/v0/.groups/test/")
|
||||
do("GET", "/skald-api/v0/.halls/")
|
||||
do("PUT", "/skald-api/v0/.halls/test/")
|
||||
|
||||
f, err := os.Create(filepath.Join(group.Directory, "test.json"))
|
||||
if err != nil {
|
||||
@@ -460,20 +460,20 @@ func TestApiBadAuth(t *testing.T) {
|
||||
}\n`)
|
||||
f.Close()
|
||||
|
||||
do("PUT", "/skald-api/v0/.groups/test/")
|
||||
do("DELETE", "/skald-api/v0/.groups/test/")
|
||||
do("GET", "/skald-api/v0/.groups/test/.users/")
|
||||
do("GET", "/skald-api/v0/.groups/test/.users/jch")
|
||||
do("GET", "/skald-api/v0/.groups/test/.users/jch")
|
||||
do("PUT", "/skald-api/v0/.groups/test/.users/jch")
|
||||
do("DELETE", "/skald-api/v0/.groups/test/.users/jch")
|
||||
do("GET", "/skald-api/v0/.groups/test/.users/not-jch")
|
||||
do("PUT", "/skald-api/v0/.groups/test/.users/not-jch")
|
||||
do("PUT", "/skald-api/v0/.groups/test/.users/jch/.password")
|
||||
do("POST", "/skald-api/v0/.groups/test/.users/jch/.password")
|
||||
do("GET", "/skald-api/v0/.groups/test/.tokens/")
|
||||
do("POST", "/skald-api/v0/.groups/test/.tokens/")
|
||||
do("GET", "/skald-api/v0/.groups/test/.tokens/token")
|
||||
do("PUT", "/skald-api/v0/.groups/test/.tokens/token")
|
||||
do("DELETE", "/skald-api/v0/.groups/test/.tokens/token")
|
||||
do("PUT", "/skald-api/v0/.halls/test/")
|
||||
do("DELETE", "/skald-api/v0/.halls/test/")
|
||||
do("GET", "/skald-api/v0/.halls/test/.users/")
|
||||
do("GET", "/skald-api/v0/.halls/test/.users/jch")
|
||||
do("GET", "/skald-api/v0/.halls/test/.users/jch")
|
||||
do("PUT", "/skald-api/v0/.halls/test/.users/jch")
|
||||
do("DELETE", "/skald-api/v0/.halls/test/.users/jch")
|
||||
do("GET", "/skald-api/v0/.halls/test/.users/not-jch")
|
||||
do("PUT", "/skald-api/v0/.halls/test/.users/not-jch")
|
||||
do("PUT", "/skald-api/v0/.halls/test/.users/jch/.password")
|
||||
do("POST", "/skald-api/v0/.halls/test/.users/jch/.password")
|
||||
do("GET", "/skald-api/v0/.halls/test/.tokens/")
|
||||
do("POST", "/skald-api/v0/.halls/test/.tokens/")
|
||||
do("GET", "/skald-api/v0/.halls/test/.tokens/token")
|
||||
do("PUT", "/skald-api/v0/.halls/test/.tokens/token")
|
||||
do("DELETE", "/skald-api/v0/.halls/test/.tokens/token")
|
||||
}
|
||||
@@ -35,7 +35,7 @@ var Insecure bool
|
||||
|
||||
func Serve(address string, dataDir string) error {
|
||||
http.Handle("/", &fileHandler{http.Dir(StaticRoot)})
|
||||
http.HandleFunc("/group/", groupHandler)
|
||||
http.HandleFunc("/hall/", groupHandler)
|
||||
http.HandleFunc("/recordings",
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
http.Redirect(w, r,
|
||||
@@ -43,7 +43,7 @@ func Serve(address string, dataDir string) error {
|
||||
})
|
||||
http.HandleFunc("/recordings/", recordingsHandler)
|
||||
http.HandleFunc("/ws", wsHandler)
|
||||
http.HandleFunc("/public-groups.json", publicHandler)
|
||||
http.HandleFunc("/public-halls.json", publicHandler)
|
||||
http.HandleFunc("/skald-api/", apiHandler)
|
||||
|
||||
s := &http.Server{
|
||||
@@ -346,7 +346,7 @@ func groupHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
name := parseGroupName("/group/", r.URL.Path)
|
||||
name := parseGroupName("/hall/", r.URL.Path)
|
||||
if name == "" {
|
||||
notFound(w)
|
||||
return
|
||||
@@ -358,8 +358,8 @@ func groupHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if r.URL.Path != "/group/"+name+"/" {
|
||||
http.Redirect(w, r, "/group/"+name+"/",
|
||||
if r.URL.Path != "/hall/"+name+"/" {
|
||||
http.Redirect(w, r, "/hall/"+name+"/",
|
||||
http.StatusPermanentRedirect)
|
||||
return
|
||||
}
|
||||
@@ -415,7 +415,7 @@ func groupStatusHandler(w http.ResponseWriter, r *http.Request) {
|
||||
internalError(w, "groupStatusHandler: this shouldn't happen")
|
||||
return
|
||||
}
|
||||
name := parseGroupName("/group/", pth)
|
||||
name := parseGroupName("/hall/", pth)
|
||||
if name == "" {
|
||||
notFound(w)
|
||||
return
|
||||
@@ -705,13 +705,13 @@ func handleGroupAction(w http.ResponseWriter, r *http.Request, group string) {
|
||||
}
|
||||
}
|
||||
|
||||
func checkGroupPermissions(w http.ResponseWriter, r *http.Request, groupname string) bool {
|
||||
func checkGroupPermissions(w http.ResponseWriter, r *http.Request, hallname string) bool {
|
||||
user, pass, ok := r.BasicAuth()
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
||||
g := group.Get(groupname)
|
||||
g := group.Get(hallname)
|
||||
if g == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -19,17 +19,17 @@ func TestParseGroupName(t *testing.T) {
|
||||
{"/foo", ""},
|
||||
{"foo", ""},
|
||||
{"group/foo", ""},
|
||||
{"/group", ""},
|
||||
{"/group/..", ""},
|
||||
{"/group/foo/../bar", "bar"},
|
||||
{"/group/foo", "foo"},
|
||||
{"/group/foo/", "foo"},
|
||||
{"/group/foo/bar", "foo/bar"},
|
||||
{"/group/foo/bar/", "foo/bar"},
|
||||
{"/hall", ""},
|
||||
{"/hall/..", ""},
|
||||
{"/hall/foo/../bar", "bar"},
|
||||
{"/hall/foo", "foo"},
|
||||
{"/hall/foo/", "foo"},
|
||||
{"/hall/foo/bar", "foo/bar"},
|
||||
{"/hall/foo/bar/", "foo/bar"},
|
||||
}
|
||||
|
||||
for _, pg := range a {
|
||||
g := parseGroupName("/group/", pg.p)
|
||||
g := parseGroupName("/hall/", pg.p)
|
||||
if g != pg.g {
|
||||
t.Errorf("Path %v, got %v, expected %v",
|
||||
pg.p, g, pg.g)
|
||||
|
||||
+2
-2
@@ -153,7 +153,7 @@ func whipEndpointHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
name := parseGroupName("/group/", pth)
|
||||
name := parseGroupName("/hall/", pth)
|
||||
if name == "" {
|
||||
notFound(w)
|
||||
return
|
||||
@@ -269,7 +269,7 @@ func whipResourceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
name := parseGroupName("/group/", pth)
|
||||
name := parseGroupName("/hall/", pth)
|
||||
if name == "" {
|
||||
notFound(w)
|
||||
return
|
||||
|
||||
Reference in new issue
Block a user