Documentation ¶
Index ¶
- Constants
- func AnyStartsWith(array []string, word string) bool
- func ArrayContainsIgnoreCase(keys []string, value string) bool
- func Base64decode(v string) (string, error)
- func Base64encode(v []byte) string
- func Bool(v bool) *bool
- func BoolValue(v *bool) bool
- func BuildPKISerial() (*big.Int, error)
- func CSRF(excludePaths []string) gin.HandlerFunc
- func Contains[T comparable](array []T, value T) bool
- func ContainsIgnoreCase(array []string, word string) bool
- func ContainsInteger(array []int, value int) bool
- func ContainsString(array []string, word string) bool
- func DELETE(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
- func Decrypt(data []byte, passphrase string) ([]byte, error)
- func Encrypt(data []byte, passphrase string) ([]byte, error)
- func EnsureDot(input string) string
- func EqualArrays[T comparable](a, b []T) bool
- func EqualStringArrays(a, b []string) bool
- func Float64(value float64) *float64
- func Float64Value(v *float64) float64
- func GET(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
- func GetFreeLocalhostTCPPort() (int, error)
- func GetResultDiff[T comparable](results []T, desiredResults []T) []T
- func Int(value int) *int
- func Int32(value int32) *int32
- func Int32Value(v *int32) int32
- func Int64(value int64) *int64
- func Int64Value(v *int64) int64
- func IsHTTPS(r *http.Request) bool
- func LoadAndListenConfig[Conf any](path string, c Conf, onUpdate func(c Conf)) (Conf, error)
- func MakeSentryTransaction(ctx context.Context, name string, opts ...sentry.SpanOption) (context.Context, *sentry.Span, *sentry.Hub)
- func MakeSpan(ctx context.Context, skip int) *sentry.Span
- func MapToString(input map[string]string) []string
- func MfaValidation(secret string, token string) error
- func MinUint(a, b uint) uint
- func PATCH(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
- func POST(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
- func PUT(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
- func Ptr[T any](v T) *T
- func PtrValue[T any](p *T) T
- func RandomString(n int) (string, error)
- func RandomToken() (string, error)
- func RecoverWithContext(ctx context.Context, transaction *sentry.Span)
- func RedisRateLimiter(rdb *redis.Client, key KeyFunc, errFunc ErrFunc) gin.HandlerFunc
- func RemoveDot(input string) string
- func SentryErr(ctx context.Context, err error)
- func SleepUntil(backoff Backoff, condition ConditionFunc) error
- func String(s string) *string
- func StringEmpty(value string) bool
- func StringToBool(value string) bool
- func StringValue(s *string) string
- func UintValue(v *uint) uint
- func Unique[T comparable](values []T) []T
- type Backoff
- type ConditionFunc
- type Datastore
- type ErrFunc
- type ErrorResponse
- type HTTPClient
- type HTTPRequest
- type HTTPResponse
- type Internal
- type JWTKey
- type KeyFunc
- type MockClient
- type Model
- type User
Examples ¶
Constants ¶
const ( // CsrfTokenKey is the cookie name which contains the CSRF token. CsrfTokenKey = "csrftoken" // Xcsrf is the header name which contains the CSRF token. Xcsrf = "X-CSRF-Token" // Authorization is the header name which contains the token. Authorization = "Authorization" )
const ServiceAccountPrefix = "@oauth2"
ServiceAccountPrefix email domain for service accounts.
Variables ¶
This section is empty.
Functions ¶
func ArrayContainsIgnoreCase ¶ added in v1.2.13
ArrayContainsIgnoreCase returns true if value is found from any item in array.
func Base64decode ¶
Base64decode decodes base64 input to string.
Example ¶
out, _ := Base64decode("U1VDQ0VTUw==") fmt.Println(out)
Output: SUCCESS
func Base64encode ¶ added in v1.1.1
Base64encode encode input to base64.
Example ¶
fmt.Println(Base64encode([]byte("SUCCESS")))
Output: U1VDQ0VTUw==
func BuildPKISerial ¶ added in v1.2.4
BuildPKISerial generates random big.Int.
func CSRF ¶
func CSRF(excludePaths []string) gin.HandlerFunc
CSRF is middleware for handling CSRF protection in gin.
Example ¶
r := gin.New() excludePaths := []string{"/oauth2/token"} r.Use(CSRF(excludePaths))
Output:
func Contains ¶
func Contains[T comparable](array []T, value T) bool
Contains returns true if value is found in array. Both input variables must be same type.
Example ¶
fmt.Println(Contains([]string{"foo", "bar"}, "bar")) fmt.Println(Contains([]int{1, 2}, 1)) fmt.Println(Contains([]string{"foo", "bar"}, "heh")) fmt.Println(Contains([]int{1, 2}, 66))
Output: true true false false
func ContainsIgnoreCase ¶
ContainsIgnoreCase returns true if word is found from array. Case of word and words in array is ignored.
func ContainsInteger ¶
ContainsInteger returns true if integer is found from array.
func ContainsString ¶
ContainsString returns true if string is found from array.
Example ¶
fmt.Println(ContainsString([]string{"foo", "bar"}, "bar")) fmt.Println(ContainsString([]string{"foo", "bar"}, "BAR")) fmt.Println(ContainsString([]string{"foo", "bar"}, "bar2"))
Output: true false false
func DELETE ¶ added in v1.2.7
func DELETE(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
DELETE wrapper to include sentrySpanTracer as last middleware.
func Decrypt ¶
Decrypt the encrypted secret with passphrase.
Example ¶
encrypted, _ := Encrypt([]byte("supersecret"), "testpassword") data, _ := Decrypt(encrypted, "testpassword") fmt.Println(string(data))
Output: supersecret
func Encrypt ¶
Encrypt the secret input with passphrase source https://www.thepolyglotdeveloper.com/2018/02/encrypt-decrypt-data-golang-application-crypto-packages/
Example ¶
encrypted, _ := Encrypt([]byte("supersecret"), "testpassword") data, _ := Decrypt(encrypted, "testpassword") fmt.Println(string(data))
Output: supersecret
func EqualArrays ¶
func EqualArrays[T comparable](a, b []T) bool
EqualArrays compares equality of two arrays. Both input variables must be same type.
Example ¶
fmt.Println(EqualArrays([]string{"1", "2"}, []string{"1", "2"})) fmt.Println(EqualArrays([]int{1, 2, 3}, []int{1, 2, 3})) fmt.Println(EqualArrays([]string{"1", "2", "3"}, []string{"1", "2"}))
Output: true true false
func EqualStringArrays ¶
EqualStringArrays compares equality of two string arrays.
func GET ¶ added in v1.2.7
func GET(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
GET wrapper to include sentrySpanTracer as last middleware.
func GetFreeLocalhostTCPPort ¶ added in v1.4.0
func GetResultDiff ¶
func GetResultDiff[T comparable](results []T, desiredResults []T) []T
GetResultDiff returns array of strings that were desired but missing from results.
Example ¶
fmt.Println(GetResultDiff([]string{"foo", "bar"}, []string{"foo"})) fmt.Println(GetResultDiff([]string{"foo", "bar"}, []string{"foo", "heh"}))
Output: [] [heh]
func IsHTTPS ¶
IsHTTPS is a helper function that evaluates the http.Request and returns True if the Request uses HTTPS. It is able to detect, using the X-Forwarded-Proto, if the original request was HTTPS and routed through a reverse proxy with SSL termination.
func LoadAndListenConfig ¶ added in v1.1.10
LoadAndListenConfig loads config file to struct and listen changes in it. User of this function should make sure to protect application state by mutex if changing configuration on thr flight might cause date race or other problems in application using this functionality.
NOTES: When application is run by orchestrator like k8s applying configuration changes by starting new instance should be preferred if possible. That way we avoid reimplementing state management inside application which is already done by k8s. However for applications with big internal caches or otherwise stateful implementations this functionality can offer huge performance benefits.
func MakeSentryTransaction ¶ added in v1.2.7
func MakeSentryTransaction(ctx context.Context, name string, opts ...sentry.SpanOption) (context.Context, *sentry.Span, *sentry.Hub)
MakeSentryTransaction creates Sentry transaction.
func MapToString ¶
MapToString modifies map to string array.
func MfaValidation ¶
MfaValidation validates TOTP mfa with given secret and token.
func PATCH ¶ added in v1.2.7
func PATCH(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
PATCH wrapper to include sentrySpanTracer as last middleware.
func POST ¶ added in v1.2.7
func POST(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
POST wrapper to include sentrySpanTracer as last middleware.
func PUT ¶ added in v1.2.7
func PUT(group *gin.RouterGroup, relativePath string, handlers ...gin.HandlerFunc) gin.IRoutes
PUT wrapper to include sentrySpanTracer as last middleware.
func RandomString ¶
RandomString returns a random string length of argument n.
func RecoverWithContext ¶ added in v1.2.7
RecoverWithContext recovers from panic and sends it to Sentry.
func RedisRateLimiter ¶ added in v1.1.4
func RedisRateLimiter(rdb *redis.Client, key KeyFunc, errFunc ErrFunc) gin.HandlerFunc
RedisRateLimiter ...
func SleepUntil ¶
func SleepUntil(backoff Backoff, condition ConditionFunc) error
SleepUntil waits for condition to succeeds.
Example ¶
// retry once in second, maximum retries 3 times backoff := Backoff{ Duration: 1 * time.Second, MaxRetries: 3, } err := SleepUntil(backoff, func() (done bool, err error) { // will continue retrying return false, nil // return true, nil, exit immediately, should be used when ConditionFunc succeed // return false, err, exit immediately, should be used when ConditionFunc returns err that we should not retry anymore }) fmt.Println(err.Error())
Output: Timed out waiting for the condition
func StringEmpty ¶
StringEmpty returns boolean value if string is empty.
func StringToBool ¶
StringToBool returns boolean value from string.
func StringValue ¶
StringValue returns string value from pointervalue.
func Unique ¶
func Unique[T comparable](values []T) []T
Unique returns unique array items.
Example ¶
fmt.Println(Unique([]string{"1", "1", "2"}))
Output: [1 2]
Types ¶
type Backoff ¶ added in v1.1.1
type Backoff struct { // The initial duration. Duration time.Duration // The remaining number of iterations in which the duration // parameter may change. If not positive, the duration is not // changed. MaxRetries int }
Backoff contains struct for retrying strategy.
type ConditionFunc ¶ added in v1.1.1
ConditionFunc returns true if the condition is satisfied, or an error if the loop should be aborted.
type Datastore ¶ added in v1.2.4
type Datastore interface { AddJWTKey(context.Context, JWTKey) (*JWTKey, error) ListJWTKeys(context.Context) ([]JWTKey, error) RotateJWTKeys(context.Context, uint) error }
Datastore will contain interface to store auth keys.
type ErrorResponse ¶
type ErrorResponse struct { Code uint `json:"code,omitempty" example:"400"` Message string `json:"message" example:"Bad request"` ErrorType string `json:"error_type,omitempty" example:"invalid_scope"` }
ErrorResponse provides HTTP error response.
func (ErrorResponse) Error ¶
func (e ErrorResponse) Error() string
type HTTPClient ¶ added in v1.2.13
HTTPClient allows inserting either *http.Client or mock client.
type HTTPRequest ¶
type HTTPRequest struct { Method string URL string Body []byte Cookies []*http.Cookie Headers map[string]string OKCode []int Unmarshaler func(data []byte, v any) error }
HTTPRequest ...
type HTTPResponse ¶ added in v1.1.0
HTTPResponse ...
func MakeRequest ¶
func MakeRequest( ctx context.Context, request HTTPRequest, output interface{}, client HTTPClient, backoff Backoff, ) (*HTTPResponse, error)
MakeRequest ...
Example ¶
// retry once in second, maximum retries 2 times backoff := Backoff{ Duration: 1 * time.Second, MaxRetries: 2, } type Out struct { Message string `json:"message"` } out := Out{} client := &http.Client{} ctx := context.Background() body, err := MakeRequest( ctx, HTTPRequest{ URL: "https://ingress-api.csf.elisa.fi/healthz", Method: "GET", OKCode: []int{200}, }, &out, client, backoff, ) fmt.Printf("%s\n%s\n%d\n%v\n", out.Message, body.Body, body.StatusCode, err) ctx, cancel := context.WithTimeout(ctx, 1*time.Millisecond) defer cancel() _, err = MakeRequest( ctx, HTTPRequest{ URL: "https://ingress-api.csf.elisa.fi/healthz", Method: "GET", OKCode: []int{200}, }, &out, client, backoff, ) fmt.Printf("%v", err)
Output: pong {"message":"pong","error":""} 200 <nil> Get "https://ingress-api.csf.elisa.fi/healthz": context deadline exceeded
type Internal ¶ added in v1.2.5
type Internal struct { Cluster *string `json:"cluster,omitempty"` ChangeLimit *int `json:"limit,omitempty"` MFA *bool `json:"mfa"` EmployeeID string `json:"employeeid,omitempty"` }
Internal contains struct for internal non standard variables.
type JWTKey ¶ added in v1.2.4
type JWTKey struct { Model KID string `yaml:"kid" json:"kid"` PrivateKey *rsa.PrivateKey `yaml:"-" json:"-" gorm:"-"` PrivateKeyAsBytes []byte `yaml:"-" json:"-"` PublicKey *rsa.PublicKey `yaml:"-" json:"-" gorm:"-"` PublicKeyAsBytes []byte `yaml:"-" json:"-"` }
JWTKey is struct for storing auth private keys.
func GenerateNewKeyPair ¶ added in v1.2.4
GenerateNewKeyPair generates new private and public keys.
type MockClient ¶ added in v1.2.13
MockClient is helper client for mock tests.
type Model ¶ added in v1.2.4
type Model struct { ID uint `json:"id" gorm:"primarykey"` CreatedAt time.Time `gorm:"index"` UpdatedAt time.Time DeletedAt gorm.DeletedAt `json:"-" gorm:"index"` }
Model is tuned gorm.model.
type User ¶ added in v1.2.5
type User struct { Groups []string `json:"groups,omitempty"` Eid string `json:"custom:employeeid,omitempty"` Department string `json:"custom:department,omitempty"` JobTitle string `json:"custom:jobtitle,omitempty"` ImportGroups []string `json:"cognito:groups,omitempty"` Email *string `json:"email,omitempty"` EmailVerified *bool `json:"email_verified,omitempty"` Name *string `json:"name,omitempty"` Internal *Internal `json:"internal,omitempty"` }
User contains struct for single user.
func (User) IsServiceAccount ¶ added in v1.2.6
IsServiceAccount returns boolean is the account service account.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package clienv supports adding env variables automatically into github.com/urfave/cli flags.
|
Package clienv supports adding env variables automatically into github.com/urfave/cli flags. |
Package integrationtest makes it easier to run integration tests against compiled binary.
|
Package integrationtest makes it easier to run integration tests against compiled binary. |
Package log provides sane default loggers using slog.
|
Package log provides sane default loggers using slog. |
Package service provides simple service framework on top of Module interface.
|
Package service provides simple service framework on top of Module interface. |
module/httpserver
Package httpserver provides http server as module.
|
Package httpserver provides http server as module. |
module/httpserver/pprof
Package pprof provides pprof handler options for httpserver module.
|
Package pprof provides pprof handler options for httpserver module. |
module/httpserver/prom
Package prom provides prometheus metrics handler options for httpserver module.
|
Package prom provides prometheus metrics handler options for httpserver module. |
module/sentry
Package sentry provides sentry functionality as a module.
|
Package sentry provides sentry functionality as a module. |
module/siglistener
Package siglistener provides signal listening as a module.
|
Package siglistener provides signal listening as a module. |
module/ticker
Package ticker provides ticker functionality as a module.
|
Package ticker provides ticker functionality as a module. |