agent: Adding token parsing

This commit is contained in:
Armon Dadgar 2014-08-12 11:35:22 -07:00
parent fee3524dea
commit 88c2a9c947
2 changed files with 32 additions and 10 deletions

View File

@ -21,9 +21,10 @@ func aclDisabled(resp http.ResponseWriter, req *http.Request) (interface{}, erro
func (s *HTTPServer) ACLDelete(resp http.ResponseWriter, req *http.Request) (interface{}, error) { func (s *HTTPServer) ACLDelete(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
args := structs.ACLRequest{ args := structs.ACLRequest{
Datacenter: s.agent.config.ACLDatacenter,
Op: structs.ACLDelete, Op: structs.ACLDelete,
} }
s.parseDC(req, &args.Datacenter) s.parseToken(req, &args.Token)
// Pull out the acl id // Pull out the acl id
args.ACL.ID = strings.TrimPrefix(req.URL.Path, "/v1/acl/delete/") args.ACL.ID = strings.TrimPrefix(req.URL.Path, "/v1/acl/delete/")
@ -56,12 +57,13 @@ func (s *HTTPServer) aclSet(resp http.ResponseWriter, req *http.Request, update
} }
args := structs.ACLRequest{ args := structs.ACLRequest{
Datacenter: s.agent.config.ACLDatacenter,
Op: structs.ACLSet, Op: structs.ACLSet,
ACL: structs.ACL{ ACL: structs.ACL{
Type: structs.ACLTypeClient, Type: structs.ACLTypeClient,
}, },
} }
s.parseDC(req, &args.Datacenter) s.parseToken(req, &args.Token)
// Handle optional request body // Handle optional request body
if req.ContentLength > 0 { if req.ContentLength > 0 {
@ -97,8 +99,11 @@ func (s *HTTPServer) aclSet(resp http.ResponseWriter, req *http.Request, update
} }
func (s *HTTPServer) ACLClone(resp http.ResponseWriter, req *http.Request) (interface{}, error) { func (s *HTTPServer) ACLClone(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
args := structs.ACLSpecificRequest{} args := structs.ACLSpecificRequest{
if done := s.parse(resp, req, &args.Datacenter, &args.QueryOptions); done { Datacenter: s.agent.config.ACLDatacenter,
}
var dc string
if done := s.parse(resp, req, &dc, &args.QueryOptions); done {
return nil, nil return nil, nil
} }
@ -130,6 +135,7 @@ func (s *HTTPServer) ACLClone(resp http.ResponseWriter, req *http.Request) (inte
ACL: *out.ACLs[0], ACL: *out.ACLs[0],
} }
createArgs.ACL.ID = "" createArgs.ACL.ID = ""
createArgs.Token = args.Token
// Create the acl, get the ID // Create the acl, get the ID
var outID string var outID string
@ -142,8 +148,11 @@ func (s *HTTPServer) ACLClone(resp http.ResponseWriter, req *http.Request) (inte
} }
func (s *HTTPServer) ACLGet(resp http.ResponseWriter, req *http.Request) (interface{}, error) { func (s *HTTPServer) ACLGet(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
args := structs.ACLSpecificRequest{} args := structs.ACLSpecificRequest{
if done := s.parse(resp, req, &args.Datacenter, &args.QueryOptions); done { Datacenter: s.agent.config.ACLDatacenter,
}
var dc string
if done := s.parse(resp, req, &dc, &args.QueryOptions); done {
return nil, nil return nil, nil
} }
@ -164,8 +173,11 @@ func (s *HTTPServer) ACLGet(resp http.ResponseWriter, req *http.Request) (interf
} }
func (s *HTTPServer) ACLList(resp http.ResponseWriter, req *http.Request) (interface{}, error) { func (s *HTTPServer) ACLList(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
args := structs.DCSpecificRequest{} args := structs.DCSpecificRequest{
if done := s.parse(resp, req, &args.Datacenter, &args.QueryOptions); done { Datacenter: s.agent.config.ACLDatacenter,
}
var dc string
if done := s.parse(resp, req, &dc, &args.QueryOptions); done {
return nil, nil return nil, nil
} }

View File

@ -289,10 +289,20 @@ func (s *HTTPServer) parseDC(req *http.Request, dc *string) {
} }
} }
// parseToken is used to parse the ?token query param
func (s *HTTPServer) parseToken(req *http.Request, token *string) {
if other := req.URL.Query().Get("token"); other != "" {
*token = other
} else if *token == "" {
*token = s.agent.config.ACLToken
}
}
// parse is a convenience method for endpoints that need // parse is a convenience method for endpoints that need
// to use both parseWait and parseDC. // to use both parseWait and parseDC.
func (s *HTTPServer) parse(resp http.ResponseWriter, req *http.Request, dc *string, b *structs.QueryOptions) bool { func (s *HTTPServer) parse(resp http.ResponseWriter, req *http.Request, dc *string, b *structs.QueryOptions) bool {
s.parseDC(req, dc) s.parseDC(req, dc)
s.parseToken(req, &b.Token)
if parseConsistency(resp, req, b) { if parseConsistency(resp, req, b) {
return true return true
} }