auth

package
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2024 License: MIT Imports: 10 Imported by: 26

Documentation

Index

Constants

View Source
const (
	Create permissionType = "CREATE"
	Read   permissionType = "READ"
	Update permissionType = "UPDATE"
	Delete permissionType = "DELETE"
)
View Source
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 Error

type Error struct {
	Status  int
	Message string
	Cause   error
}

Error is an auth package implementation of Error.

func (Error) Error

func (e Error) Error() string

Error get the error message & cause if not nil

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 GetRequestVarsFunc

type GetRequestVarsFunc func(r *http.Request) map[string]string

type HTTPClienter

type HTTPClienter interface {
	Do(ctx context.Context, req *http.Request) (*http.Response, error)
}

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.

    }

func (*HTTPClienterMock) Do

func (mock *HTTPClienterMock) Do(ctx context.Context, req *http.Request) (*http.Response, error)

Do calls DoFunc.

func (*HTTPClienterMock) DoCalls

func (mock *HTTPClienterMock) DoCalls() []struct {
	Ctx context.Context
	Req *http.Request
}

DoCalls gets all the calls that were made to Do. Check the length with:

len(mockedHTTPClienter.DoCalls())

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 Permissions

type Permissions struct {
	Create bool
	Read   bool
	Update bool
	Delete bool
}

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())

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL