utils

package
v1.11.0 Latest Latest
Warning

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

Go to latest
Published: Jul 24, 2026 License: AGPL-3.0 Imports: 35 Imported by: 0

Documentation

Overview

Copyright (C) 2025 timbastin

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.

Index

Constants

View Source
const ISO8601Format = "2006-01-02T15:04:05.000"

Variables

View Source
var EgressClient = *NewEgressClient(30 * time.Second)

EgressTransport is the shared RoundTripper for all outgoing HTTP calls. It adds User-Agent and OpenTelemetry trace propagation headers.

View Source
var GitLister gitLister = commandLineGitLister{}

Functions

func AddSlashCommandsToDependencyVuln

func AddSlashCommandsToDependencyVuln(str *strings.Builder) *strings.Builder

func AddSlashCommandsToFirstPartyVuln

func AddSlashCommandsToFirstPartyVuln(str *strings.Builder) *strings.Builder

func AddToWhitespaceSeparatedStringList

func AddToWhitespaceSeparatedStringList(s string, item string) string

func All

func All[T any](s []T, f func(T) bool) bool

func Any

func Any[T any](s []T, f func(T) bool) bool

func CheckForValidLanguageCode

func CheckForValidLanguageCode(languageCode string) bool

supported languages are declared in `supportedLanguageCodes` at the start of this file

func CheckIfDeleted

func CheckIfDeleted(name string) bool

func CompareFirstTwoDecimals

func CompareFirstTwoDecimals(a, b float64) bool

func Concurrently

func Concurrently(fns ...func() (any, error)) concurrentResultSlice

func Contains

func Contains[T comparable](s []T, el T) bool

func ContainsAll

func ContainsAll[T comparable](s []T, needed []T) bool

func ContainsAny added in v1.4.0

func ContainsAny[T comparable](s []T, needed []T) bool

func DeduplicateSlice

func DeduplicateSlice[T any](slice []T, idFunc func(t T) string) []T

DeduplicateSlice deduplicates a slice in O(n) out of place.

func DereferenceSlice

func DereferenceSlice[T any](s []*T) []T

func DoGetRequestWithContext added in v1.11.0

func DoGetRequestWithContext(ctx context.Context, url string, client *http.Client) (io.ReadCloser, error)

executes a GET request with an empty body to the specified url if no client is passed, the function uses the default http client returns the io.ReadCloser of the body of the response, callers are responsible for closing it

func EmptyThenNil

func EmptyThenNil(s string) *string

func ErrGroup

func ErrGroup[T any](limit int) *errGroup[T]

func ExtractAttestationPayload

func ExtractAttestationPayload(content string) (any, error)

func Filter

func Filter[T any](s []T, f func(T) bool) []T

func Find

func Find[T any](s []T, f func(T) bool) (T, bool)

func Flat

func Flat[T any](s [][]T) []T

func GetDirFromPath

func GetDirFromPath(path string) string

func HashString

func HashString(s string) string

func HashToUUID added in v1.3.0

func HashToUUID(s string) uuid.UUID

HashToUUID hashes the input string with SHA-256 and returns the first 128 bits as a UUID.

func IsCVE added in v1.2.0

func IsCVE(str string) bool

checks if a given string is a valid CVE

func IsEmail added in v1.6.1

func IsEmail(str string) bool

func Map

func Map[T, U any](s []T, f func(T) U) []U

func MapType

func MapType[New any, Old any](s []Old) []New

func NewEgressClient added in v1.11.0

func NewEgressClient(timeout time.Duration) *http.Client

func OrDefault

func OrDefault[T any](val *T, def T) T

func Ptr

func Ptr[T any](t T) *T

func PtrMap added in v1.4.0

func PtrMap[T any, U any](t *T, f func(T) U) *U

func ReadFileFromGitRef

func ReadFileFromGitRef(path string, commitSha string, fileName string) ([]byte, error)

func Reduce

func Reduce[T, U any](s []T, f func(U, T) U, init U) U

func RemoveFromWhitespaceSeparatedStringList

func RemoveFromWhitespaceSeparatedStringList(s string, item string) string

func RemovePrefixInsensitive

func RemovePrefixInsensitive(input string, prefix string) string

func RunsInCI

func RunsInCI() bool

func SafeDereference

func SafeDereference(s *string) string

func ShannonEntropy

func ShannonEntropy(str string) float64

func SlicePtr

func SlicePtr[T any](t []T) []*T

func TeeChannel

func TeeChannel[T any](input <-chan T) (<-chan T, <-chan T)

func ToLowerSlice added in v1.4.0

func ToLowerSlice(s []string) []string

func UniqBy

func UniqBy[T any, K comparable](s []T, f func(T) K) []T

func ValidatePurlFields added in v1.6.1

func ValidatePurlFields(purl packageurl.PackageURL) error

validate individual fields of purl for any incorrect characters

func Values

func Values[K comparable, T any](m map[K]T) []T

func WaitForChannelDrain

func WaitForChannelDrain[T any](ch <-chan T)

func WrapHTTPClient

func WrapHTTPClient(client *http.Client, wrap func(req *http.Request, next http.RoundTripper) (*http.Response, error))

func ZipReaderFromResponse

func ZipReaderFromResponse(resp *http.Response) (*zip.Reader, error)

Types

type BatchModelWriter

type BatchModelWriter[T Tabler, Tx any] interface {
	CreateBatch(ctx context.Context, tx Tx, ts []T) error
	SaveBatch(ctx context.Context, tx Tx, ts []T) error
	DeleteBatch(ctx context.Context, tx Tx, ids []T) error
	SaveBatchBestEffort(ctx context.Context, tx Tx, ts []T) error
}

type CacheTransport

type CacheTransport struct {
	// contains filtered or unexported fields
}

func NewCacheTransport

func NewCacheTransport(cacheSize int, expiration time.Duration) *CacheTransport

func (*CacheTransport) Handler

func (c *CacheTransport) Handler() func(req *http.Request, next http.RoundTripper) (*http.Response, error)

type CompareResult

type CompareResult[T any] struct {
	OnlyInA []T
	OnlyInB []T
	InBoth  []T // returns the elements in A

	InBothB []T
}

func CompareSlices

func CompareSlices[T any, K comparable](a, b []T, serializer func(T) K) CompareResult[T]

type Date

type Date time.Time

type EgressRoundTripper

type EgressRoundTripper struct {
	R http.RoundTripper
}

func (EgressRoundTripper) RoundTrip

func (mrt EgressRoundTripper) RoundTrip(r *http.Request) (*http.Response, error)

type FireAndForgetSynchronizer

type FireAndForgetSynchronizer interface {
	FireAndForget(fn func())
}

useful for integration testing - use in production to just fire and forget a function "go func()" during testing, this can be used to synchronize the execution of multiple goroutines - and wait for them to finish

type GitVersionInfo

type GitVersionInfo struct {
	IsTag         bool
	BranchOrTag   string
	DefaultBranch *string
}

func GetAssetVersionInfo

func GetAssetVersionInfo(path string) (GitVersionInfo, error)

type GoroutineFireAndForgetSynchronizer

type GoroutineFireAndForgetSynchronizer struct{}

func NewFireAndForgetSynchronizer

func NewFireAndForgetSynchronizer() *GoroutineFireAndForgetSynchronizer

func (*GoroutineFireAndForgetSynchronizer) FireAndForget

func (f *GoroutineFireAndForgetSynchronizer) FireAndForget(fn func())

super simple: create a goroutine and call the function in it

type ModelReader

type ModelReader[ID any, T Tabler, Tx any] interface {
	Read(ctx context.Context, tx Tx, id ID) (T, error)
	List(ctx context.Context, tx Tx, ids []ID) ([]T, error)
	All(ctx context.Context, tx Tx) ([]T, error)
	Upsert(ctx context.Context, tx Tx, t *[]*T, conflictingColumns []clause.Column, updateOnly []string) error
}

type ModelWriter

type ModelWriter[ID any, T Tabler, Tx any] interface {
	Create(ctx context.Context, tx Tx, t *T) error
	Save(ctx context.Context, tx Tx, t *T) error
	Delete(ctx context.Context, tx Tx, id ID) error
	Activate(ctx context.Context, tx Tx, id ID) error
	CleanupOrphanedRecords(ctx context.Context) error
}

type Repository

type Repository[ID any, T Tabler, Tx any] interface {
	ModelWriter[ID, T, Tx]
	ModelReader[ID, T, Tx]
	BatchModelWriter[T, Tx]
	Transactioner[Tx]
}

type SyncFireAndForgetSynchronizer

type SyncFireAndForgetSynchronizer struct{}

SyncFireAndForgetSynchronizer calls functions synchronously. Useful for tests that want predictable execution ordering instead of spawning goroutines.

func NewSyncFireAndForgetSynchronizer

func NewSyncFireAndForgetSynchronizer() *SyncFireAndForgetSynchronizer

func (*SyncFireAndForgetSynchronizer) FireAndForget

func (f *SyncFireAndForgetSynchronizer) FireAndForget(fn func())

type Tabler

type Tabler interface {
	TableName() string
}

type Transactioner

type Transactioner[Tx any] interface {
	Transaction(ctx context.Context, fn func(tx Tx) error) error
	GetDB(ctx context.Context, tx Tx) Tx
	Begin(ctx context.Context) Tx
}

Jump to

Keyboard shortcuts

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