idpsync

package
v2.15.3 Latest Latest
Warning

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

Go to latest
Published: Oct 8, 2024 License: AGPL-3.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ParseStringSliceClaim

func ParseStringSliceClaim(claim interface{}) ([]string, error)

ParseStringSliceClaim parses the claim for groups and roles, expected []string.

Some providers like ADFS return a single string instead of an array if there is only 1 element. So this function handles the edge cases.

Types

type AGPLIDPSync

type AGPLIDPSync struct {
	Logger slog.Logger

	SyncSettings
}

AGPLIDPSync is the configuration for syncing user information from an external IDP. All related code to syncing user information should be in this package.

func NewAGPLSync

func NewAGPLSync(logger slog.Logger, settings SyncSettings) *AGPLIDPSync

func (AGPLIDPSync) OrganizationSyncEnabled

func (AGPLIDPSync) OrganizationSyncEnabled() bool

func (AGPLIDPSync) ParseOrganizationClaims

func (s AGPLIDPSync) ParseOrganizationClaims(_ context.Context, _ jwt.MapClaims) (OrganizationParams, *HTTPError)

func (AGPLIDPSync) SyncOrganizations

func (s AGPLIDPSync) SyncOrganizations(ctx context.Context, tx database.Store, user database.User, params OrganizationParams) error

SyncOrganizations if enabled will ensure the user is a member of the provided organizations. It will add and remove their membership to match the expected set.

type HTTPError

type HTTPError struct {
	Code                 int
	Msg                  string
	Detail               string
	RenderStaticPage     bool
	RenderDetailMarkdown bool
}

HTTPError is a helper struct for returning errors from the IDP sync process. A regular error is not sufficient because many of these errors are surfaced to a user logging in, and the errors should be descriptive.

func IsHTTPError

func IsHTTPError(err error) *HTTPError

IsHTTPError handles us being inconsistent with returning errors as values or pointers.

func (HTTPError) Error

func (e HTTPError) Error() string

func (HTTPError) Write

func (e HTTPError) Write(rw http.ResponseWriter, r *http.Request)

type IDPSync

type IDPSync interface {
	OrganizationSyncEnabled() bool
	// ParseOrganizationClaims takes claims from an OIDC provider, and returns the
	// organization sync params for assigning users into organizations.
	ParseOrganizationClaims(ctx context.Context, _ jwt.MapClaims) (OrganizationParams, *HTTPError)
	// SyncOrganizations assigns and removed users from organizations based on the
	// provided params.
	SyncOrganizations(ctx context.Context, tx database.Store, user database.User, params OrganizationParams) error
}

IDPSync is an interface, so we can implement this as AGPL and as enterprise, and just swap the underlying implementation. IDPSync exists to contain all the logic for mapping a user's external IDP claims to the internal representation of a user in Coder. TODO: Move group + role sync into this interface.

type OrganizationParams

type OrganizationParams struct {
	// SyncEnabled if false will skip syncing the user's organizations.
	SyncEnabled bool
	// IncludeDefault is primarily for single org deployments. It will ensure
	// a user is always inserted into the default org.
	IncludeDefault bool
	// Organizations is the list of organizations the user should be a member of
	// assuming syncing is turned on.
	Organizations []uuid.UUID
}

type SyncSettings

type SyncSettings struct {
	// OrganizationField selects the claim field to be used as the created user's
	// organizations. If the field is the empty string, then no organization updates
	// will ever come from the OIDC provider.
	OrganizationField string
	// OrganizationMapping controls how organizations returned by the OIDC provider get mapped
	OrganizationMapping map[string][]uuid.UUID
	// OrganizationAssignDefault will ensure all users that authenticate will be
	// placed into the default organization. This is mostly a hack to support
	// legacy deployments.
	OrganizationAssignDefault bool
}

Jump to

Keyboard shortcuts

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