auth

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Apr 9, 2025 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrForbidden = errors.New("forbidden")
View Source
var ErrNeedAuth = errors.New("authentication required")

Functions

func AuthMiddleware

func AuthMiddleware(c Config) func(next http.Handler) http.Handler

Provide middleware for authentication Checks if api key allowed or token is valid Get user and role from headers or token if request is anonymous, check if it allowed and add role

func ContextWithAuthInfo

func ContextWithAuthInfo(ctx context.Context, info *AuthInfo) context.Context

func ContextWithFullAccess

func ContextWithFullAccess(ctx context.Context) context.Context

func IsFullAccess

func IsFullAccess(ctx context.Context) bool

Types

type AnonymousConfig

type AnonymousConfig struct {
	Allowed bool   `json:"allowed" yaml:"allowed"`
	Role    string `json:"role" yaml:"role"`
}

type AnonymousProvider

type AnonymousProvider struct {
	Config AnonymousConfig
}

func NewAnonymous

func NewAnonymous(config AnonymousConfig) *AnonymousProvider

func (*AnonymousProvider) Authenticate

func (p *AnonymousProvider) Authenticate(r *http.Request) (*AuthInfo, error)

type ApiKeyConfig

type ApiKeyConfig struct {
	Key         string `json:"key" yaml:"key"`
	Header      string `json:"header" yaml:"header"`
	DefaultRole string `json:"default_role" yaml:"default-role"`

	Headers UserAuthInfoConfig
}

type ApiKeyProvider

type ApiKeyProvider struct {
	Name string
	// contains filtered or unexported fields
}

func NewApiKey

func NewApiKey(name string, config ApiKeyConfig) *ApiKeyProvider

func (*ApiKeyProvider) Authenticate

func (p *ApiKeyProvider) Authenticate(r *http.Request) (*AuthInfo, error)

type AuthInfo

type AuthInfo struct {
	Role     string
	UserId   string
	UserName string

	AuthType     string
	AuthProvider string
}

func AuthInfoFromContext

func AuthInfoFromContext(ctx context.Context) *AuthInfo

type AuthProvider

type AuthProvider interface {
	Authenticate(r *http.Request) (*AuthInfo, error)
}

type Config

type Config struct {
	Providers []AuthProvider

	RedirectLoginPaths []string
	LoginUrl           string
	RedirectUrl        string
}

type JwtConfig

type JwtConfig struct {
	Issuer    string `json:"issuer" yaml:"issuer"`
	PublicKey []byte `json:"public_key" yaml:"public-key"`

	CookieName string `json:"cookie_name" yaml:"cookie-name"`

	ScopeRolePrefix string `json:"scope_role_prefix" yaml:"scope-role-prefix"`
	// RoleHeader is the header to check for role if not in claims than check that scope contains prefix+role (if the many roles a)
	RoleHeader string             `json:"role_header" yaml:"role-header"`
	Claims     UserAuthInfoConfig `json:"claims" yaml:"claims"`
}

type JwtProvider

type JwtProvider struct {
	Issuer string
	// contains filtered or unexported fields
}

func NewJwt

func NewJwt(config *JwtConfig) (*JwtProvider, error)

func (*JwtProvider) Authenticate

func (p *JwtProvider) Authenticate(r *http.Request) (*AuthInfo, error)

type UserAuthInfoConfig

type UserAuthInfoConfig struct {
	Role     string `json:"role" yaml:"role"`
	UserId   string `json:"user_id" yaml:"user-id"`
	UserName string `json:"user_name" yaml:"user-name"`
}

Jump to

Keyboard shortcuts

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