pkg: authorization: add Err to tweak response status code

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
Antonio Murdaca 2015-12-15 09:49:18 +01:00
parent 16870807fe
commit 16d022c482
3 changed files with 42 additions and 1 deletions

View file

@ -43,10 +43,12 @@ type Request struct {
// Response represents authZ plugin response // Response represents authZ plugin response
type Response struct { type Response struct {
// Allow indicating whether the user is allowed or not // Allow indicating whether the user is allowed or not
Allow bool `json:"Allow"` Allow bool `json:"Allow"`
// Msg stores the authorization message // Msg stores the authorization message
Msg string `json:"Msg,omitempty"` Msg string `json:"Msg,omitempty"`
// Err stores a message in case there's an error
Err string `json:"Err,omitempty"`
} }

View file

@ -84,6 +84,10 @@ func (a *Ctx) AuthZRequest(w http.ResponseWriter, r *http.Request) error {
return err return err
} }
if authRes.Err != "" {
return fmt.Errorf(authRes.Err)
}
if !authRes.Allow { if !authRes.Allow {
return fmt.Errorf(authRes.Msg) return fmt.Errorf(authRes.Msg)
} }
@ -107,6 +111,10 @@ func (a *Ctx) AuthZResponse(rm ResponseModifier, r *http.Request) error {
return err return err
} }
if authRes.Err != "" {
return fmt.Errorf(authRes.Err)
}
if !authRes.Allow { if !authRes.Allow {
return fmt.Errorf(authRes.Msg) return fmt.Errorf(authRes.Msg)
} }

View file

@ -19,6 +19,37 @@ import (
const pluginAddress = "authzplugin.sock" const pluginAddress = "authzplugin.sock"
func TestAuthZRequestPluginError(t *testing.T) {
server := authZPluginTestServer{t: t}
go server.start()
defer server.stop()
authZPlugin := createTestPlugin(t)
request := Request{
User: "user",
RequestBody: []byte("sample body"),
RequestURI: "www.authz.com",
RequestMethod: "GET",
RequestHeaders: map[string]string{"header": "value"},
}
server.replayResponse = Response{
Err: "an error",
}
actualResponse, err := authZPlugin.AuthZRequest(&request)
if err != nil {
t.Fatalf("Failed to authorize request %v", err)
}
if !reflect.DeepEqual(server.replayResponse, *actualResponse) {
t.Fatalf("Response must be equal")
}
if !reflect.DeepEqual(request, server.recordedRequest) {
t.Fatalf("Requests must be equal")
}
}
func TestAuthZRequestPlugin(t *testing.T) { func TestAuthZRequestPlugin(t *testing.T) {
server := authZPluginTestServer{t: t} server := authZPluginTestServer{t: t}
go server.start() go server.start()