pkg: authorization: add Err to tweak response status code
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
parent
16870807fe
commit
16d022c482
3 changed files with 42 additions and 1 deletions
|
@ -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"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in a new issue