Documentation
¶
Index ¶
- Constants
- func LoggerNamespace(logNamespace string)
- type Clienter
- type ClienterMock
- type DatasetPermissionsRequestBuilder
- type Error
- type GetPermissionsRequestBuilder
- type GetPermissionsRequestBuilderMock
- type GetRequestVarsFunc
- type HTTPClienter
- type HTTPClienterMock
- type Handler
- type HandlerMock
- type NopHandler
- type Permissions
- type PermissionsClient
- type PermissionsRequestBuilder
- type PermissionsVerifier
- type Verifier
- type VerifierMock
Constants ¶
const ( Create permissionType = "CREATE" Read permissionType = "READ" Update permissionType = "UPDATE" Delete permissionType = "DELETE" )
const (
// CollectionIDHeader is the collection ID request header key.
CollectionIDHeader = "Collection-Id"
)
Variables ¶
This section is empty.
Functions ¶
func LoggerNamespace ¶
func LoggerNamespace(logNamespace string)
LoggerNamespace Deprecated. Do not set a separate namespace for the library by default it will use the namespace configured by the app.
Types ¶
type Clienter ¶
type Clienter interface {
GetPermissions(ctx context.Context, getPermissionsRequest *http.Request) (*Permissions, error)
}
Clienter is the interface that defines a client for obtaining Permissions from a Permissions API. The Parameters argument encapsulates the specifics of the request to make.
type ClienterMock ¶
type ClienterMock struct { // GetPermissionsFunc mocks the GetPermissions method. GetPermissionsFunc func(ctx context.Context, getPermissionsRequest *http.Request) (*Permissions, error) // contains filtered or unexported fields }
ClienterMock is a mock implementation of Clienter.
func TestSomethingThatUsesClienter(t *testing.T) { // make and configure a mocked Clienter mockedClienter := &ClienterMock{ GetPermissionsFunc: func(ctx context.Context, getPermissionsRequest *http.Request) (*Permissions, error) { panic("TODO: mock out the GetPermissions method") }, } // TODO: use mockedClienter in code that requires Clienter // and then make assertions. }
func (*ClienterMock) GetPermissions ¶
func (mock *ClienterMock) GetPermissions(ctx context.Context, getPermissionsRequest *http.Request) (*Permissions, error)
GetPermissions calls GetPermissionsFunc.
func (*ClienterMock) GetPermissionsCalls ¶
func (mock *ClienterMock) GetPermissionsCalls() []struct { Ctx context.Context GetPermissionsRequest *http.Request }
GetPermissionsCalls gets all the calls that were made to GetPermissions. Check the length with:
len(mockedClienter.GetPermissionsCalls())
type DatasetPermissionsRequestBuilder ¶
type DatasetPermissionsRequestBuilder struct { Host string DatasetIDKey string GetRequestVarsFunc func(r *http.Request) map[string]string }
DatasetPermissionsRequestBuilder is an implementation of the GetPermissionsRequestBuilder interface that creates a user datasets permissions request from an inbound http request. Host - the host of Permisssions API. DatasetIDKey - the placeholder name of the dataset ID URL variable. GetRequestVarsFunc - a function for getting request variables.
func (*DatasetPermissionsRequestBuilder) NewPermissionsRequest ¶
func (builder *DatasetPermissionsRequestBuilder) NewPermissionsRequest(req *http.Request) (*http.Request, error)
NewPermissionsRequest fulfilling the GetPermissionsRequestBuilder interface. Create a new get user/service account dataset permissions http requests. The req parameter is the inbound http.Request to generate the get permissions request from.
type GetPermissionsRequestBuilder ¶
type GetPermissionsRequestBuilder interface {
NewPermissionsRequest(req *http.Request) (getPermissionsRequest *http.Request, err error)
}
func NewDatasetPermissionsRequestBuilder ¶
func NewDatasetPermissionsRequestBuilder(host string, datasetIDKey string, getRequestVarsFunc GetRequestVarsFunc) GetPermissionsRequestBuilder
NewDatasetPermissionsRequestBuilder is a constructor function for creating a new DatasetPermissionsRequestBuilder. Host - the host of Permisssions API. DatasetIDKey - the placeholder name of the dataset ID URL variable. GetRequestVarsFunc - a function for getting request variables.
func NewPermissionsRequestBuilder ¶
func NewPermissionsRequestBuilder(host string) GetPermissionsRequestBuilder
NewPermissionsRequestBuilder is a constructor method for creating a new PermissionsRequestBuilder Host - the host of Permissions API.
type GetPermissionsRequestBuilderMock ¶
type GetPermissionsRequestBuilderMock struct { // NewPermissionsRequestFunc mocks the NewPermissionsRequest method. NewPermissionsRequestFunc func(req *http.Request) (*http.Request, error) // contains filtered or unexported fields }
GetPermissionsRequestBuilderMock is a mock implementation of GetPermissionsRequestBuilder.
func TestSomethingThatUsesGetPermissionsRequestBuilder(t *testing.T) { // make and configure a mocked GetPermissionsRequestBuilder mockedGetPermissionsRequestBuilder := &GetPermissionsRequestBuilderMock{ NewPermissionsRequestFunc: func(req *http.Request) (*http.Request, error) { panic("TODO: mock out the NewPermissionsRequest method") }, } // TODO: use mockedGetPermissionsRequestBuilder in code that requires GetPermissionsRequestBuilder // and then make assertions. }
func (*GetPermissionsRequestBuilderMock) NewPermissionsRequest ¶
func (mock *GetPermissionsRequestBuilderMock) NewPermissionsRequest(req *http.Request) (*http.Request, error)
NewPermissionsRequest calls NewPermissionsRequestFunc.
func (*GetPermissionsRequestBuilderMock) NewPermissionsRequestCalls ¶
func (mock *GetPermissionsRequestBuilderMock) NewPermissionsRequestCalls() []struct { Req *http.Request }
NewPermissionsRequestCalls gets all the calls that were made to NewPermissionsRequest. Check the length with:
len(mockedGetPermissionsRequestBuilder.NewPermissionsRequestCalls())
type HTTPClienter ¶
HTTPClienter is the interface that defines a client for making HTTP requests
type HTTPClienterMock ¶
type HTTPClienterMock struct { // DoFunc mocks the Do method. DoFunc func(ctx context.Context, req *http.Request) (*http.Response, error) // contains filtered or unexported fields }
HTTPClienterMock is a mock implementation of HTTPClienter.
func TestSomethingThatUsesHTTPClienter(t *testing.T) { // make and configure a mocked HTTPClienter mockedHTTPClienter := &HTTPClienterMock{ DoFunc: func(ctx context.Context, req *http.Request) (*http.Response, error) { panic("TODO: mock out the Do method") }, } // TODO: use mockedHTTPClienter in code that requires HTTPClienter // and then make assertions. }
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
Handler is object providing functionality for applying authorisation checks to http.HandlerFunc's
func NewHandler ¶
func NewHandler(requestBuilder GetPermissionsRequestBuilder, permissionsClient Clienter, permissionsVerifier Verifier) *Handler
NewHandler construct a new Handler.
- requestBuilder an implementation of GetPermissionsRequestBuilder that creates Permissions API requests from the inbound http request.
- permissionsClient is a client for communicating with the permissions API.
- permissionsVerifier is an object that checks a caller's permissions satisfy the permissions requirements.
func (*Handler) Require ¶
func (h *Handler) Require(required Permissions, handler http.HandlerFunc) http.HandlerFunc
Require is a http.HandlerFunc that wraps another http.HandlerFunc applying an authorisation check. The provided GetPermissionsRequestBuilder determines what Permissions API request to create from the inbound http request.
When a request is received the caller's permissions are retrieved from the Permissions API and are compared against the required permissions.
If the callers permissions satisfy the requirements authorisation is successful and the the wrapped handler is invoked.
If the caller's permissions do not satisfy the permission requirements or there is an issue getting / verifying their permissions then the wrapped handler is NOT called and the appropriate HTTP error status is returned.
type HandlerMock ¶
type HandlerMock struct {
// contains filtered or unexported fields
}
type NopHandler ¶
type NopHandler struct{}
NopHandler is a Nop impl of auth.Handler which simply logs that it has been invoked and returns the wrapped handlerFunc.
func (*NopHandler) Require ¶
func (h *NopHandler) Require(required Permissions, handler http.HandlerFunc) http.HandlerFunc
type PermissionsClient ¶
type PermissionsClient struct {
// contains filtered or unexported fields
}
PermissionsClient implementation of Clienter - provides functionality for getting caller permissions from a Permissions API.
func DefaultPermissionsClient ¶
func DefaultPermissionsClient() *PermissionsClient
func NewPermissionsClient ¶
func NewPermissionsClient(httpClient HTTPClienter) *PermissionsClient
NewPermissionsClient construct a new PermissionsClient instance.
- host is the URL of the permissions API to call.
- httpClient is instance of HTTPClienter
func (*PermissionsClient) GetPermissions ¶
func (client *PermissionsClient) GetPermissions(ctx context.Context, getPermissionsRequest *http.Request) (*Permissions, error)
type PermissionsRequestBuilder ¶
type PermissionsRequestBuilder struct {
Host string
}
PermissionsRequestBuilder is an implementation of the GetPermissionsRequestBuilder interface that creates a user permissions http request from an inbound http request. Host - the host of Permissions API.
func (*PermissionsRequestBuilder) NewPermissionsRequest ¶
func (builder *PermissionsRequestBuilder) NewPermissionsRequest(req *http.Request) (*http.Request, error)
NewPermissionsRequest create a new get permissions http request from the inbound request.
type PermissionsVerifier ¶
type PermissionsVerifier struct { }
func DefaultPermissionsVerifier ¶
func DefaultPermissionsVerifier() *PermissionsVerifier
DefaultPermissionsVerifier construct a new PermissionsVerifier
func (*PermissionsVerifier) CheckAuthorisation ¶
func (verifier *PermissionsVerifier) CheckAuthorisation(ctx context.Context, actual *Permissions, required *Permissions) error
CheckAuthorisation check the actual Permissions satisfy the required Permissions. Returns nil if requirements are satisfied, returns CheckAuthorisation otherwise.
type Verifier ¶
type Verifier interface {
CheckAuthorisation(ctx context.Context, callerPermissions *Permissions, requiredPermissions *Permissions) error
}
Verifier is an interface defining a permissions checker. Checks that the caller's permissions satisfy the required permissions
type VerifierMock ¶
type VerifierMock struct { // CheckAuthorisationFunc mocks the CheckAuthorisation method. CheckAuthorisationFunc func(ctx context.Context, callerPermissions *Permissions, requiredPermissions *Permissions) error // contains filtered or unexported fields }
VerifierMock is a mock implementation of Verifier.
func TestSomethingThatUsesVerifier(t *testing.T) { // make and configure a mocked Verifier mockedVerifier := &VerifierMock{ CheckAuthorisationFunc: func(ctx context.Context, callerPermissions *Permissions, requiredPermissions *Permissions) error { panic("TODO: mock out the CheckAuthorisation method") }, } // TODO: use mockedVerifier in code that requires Verifier // and then make assertions. }
func (*VerifierMock) CheckAuthorisation ¶
func (mock *VerifierMock) CheckAuthorisation(ctx context.Context, callerPermissions *Permissions, requiredPermissions *Permissions) error
CheckAuthorisation calls CheckAuthorisationFunc.
func (*VerifierMock) CheckAuthorisationCalls ¶
func (mock *VerifierMock) CheckAuthorisationCalls() []struct { Ctx context.Context CallerPermissions *Permissions RequiredPermissions *Permissions }
CheckAuthorisationCalls gets all the calls that were made to CheckAuthorisation. Check the length with:
len(mockedVerifier.CheckAuthorisationCalls())