utils

package
v0.0.0-...-7815854 Latest Latest
Warning

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

Go to latest
Published: Jan 18, 2026 License: MIT Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const (
	LOCAL Environment = "local"
	DEV   Environment = "dev"
	PROD  Environment = "prod"

	IdentityRest     Identity = "rest"
	IdentityListener Identity = "listener"
	IdentityConsumer Identity = "consumer"
)
View Source
const (
	RouteAuth      = "/auth"
	RouteTeam      = "/team"
	RouteEvent     = "/event"
	RouteProfile   = "/profile"
	RouteChallenge = "/challenge"
	RouteScore     = "/score"
	RouteInstance  = "/instance"
)

base route groups

View Source
const (
	RouteAuthRegister       = "/register"
	RouteAuthLogin          = "/login"
	RouteAuthVerify         = "/verify"
	RouteAuthForgotPassword = "/forgot-password"
	RouteAuthResetPassword  = "/reset-password"
	RouteAuthLogout         = "/logout"
)

auth routes

View Source
const (
	RouteTeamCreate = "/create"
	RouteTeamJoin   = "/join"
	RouteTeamInvite = "/invite"
)

team routes

View Source
const (
	RouteProfileMe   = "/me"
	RouteProfileTeam = "/team"
)

profile routes

View Source
const (
	RouteChallengeList       = "/"
	RouteChallengeSubmitFlag = "/submit"
	RouteHintUnlock          = "/hint/unlock"
)

challenge routes

View Source
const (
	RouteScoreboard = "/"
	RouteScoreGraph = "/graph"
)

score routes

View Source
const (
	RouteInstanceList   = "/"
	RouteInstanceStart  = "/start"
	RouteInstanceStop   = "/stop"
	RouteInstanceExtend = "/extend"
)

instance routes

View Source
const (
	AuthTokenCookieName = "token"
	TokenQueryKey       = "token"
	PageQueryKey        = "page"
	PageSizeQueryKey    = "page_size"
	IPHeaderKey         = "X-Real-IP"
)

rest constants

View Source
const (
	ContextKeyUserID    = "user_id"
	ContextKeyTeamID    = "team_id"
	ContextKeyRole      = "role"
	ContextKeySessionID = "session_id"
	ContextKeyIP        = "ip"
)

context keys

View Source
const (
	RegexNonAlphanumeric = `[^a-z0-9]+`
	RegexGenericFlag     = `^(.*\{)([^}]*)\}$`
)

regular expressions

View Source
const (
	InstanceFlagSuffixLength = 8
)

numeric constants

View Source
const (
	RouteEventInfo = "/info"
)

event routes

View Source
const (
	RouteFrontResetPassword = "/reset-password"
)

front-end routes

View Source
const (
	RoutePing = "/ping"
)

misc routes

Variables

View Source
var InterruptHandlerChannel chan func() = make(chan func(), 20)

Functions

func BuildLink(publicURL, token string, pathSegments []string) (string, error)

BuildLink constructs a URL with the given public URL, token, and path segments.

func ComparePassword

func ComparePassword(hashedPwd, plainPwd string) bool

ComparePassword compares a hashed password with a plaintext password.

func GenerateRandom

func GenerateRandom() string

GenerateRandom generates a random 128-character hexadecimal string.

func HMAC256

func HMAC256(data, key string) string

func HashPassword

func HashPassword(passwd string) (string, error)

HashPassword hashes a plaintext password using bcrypt.

func Int64OrNil

func Int64OrNil(i64 int64) *int64

Int64OrNil returns a pointer to the int64 or nil if the int64 is zero.

func IntOrNil

func IntOrNil(i int) *int

IntOrNil returns a pointer to the integer or nil if the integer is zero.

func InterruptHandler

func InterruptHandler()

func RandomUUID

func RandomUUID() string

RandomUUID generates a random UUID string.

func SlugifyForSubdomain

func SlugifyForSubdomain(name string) string

SlugifyForSubdomain generates a slug suitable for use as a subdomain.

func StringOrNil

func StringOrNil(s string) *string

func StructTagsAsString

func StructTagsAsString(obj interface{}, tagKey string, depth int) string

StructTagsAsString collects struct field annotations up to a specified depth.

func TimePtr

func TimePtr(t time.Time) *time.Time

Types

type Config

type Config struct {
	Name        string      `env:"NAME"        envDefault:"api"`
	LogLevel    string      `env:"LOG_LEVEL"   envDefault:"DEBUG"`
	Environment Environment `env:"ENVIRONMENT" envDefault:"local"`
	Version     string      `env:"VERSION"     envDefault:"2.0.0"`
	Identity    Identity    `env:"IDENTITY"    envDefault:"rest"`

	Database struct {
		Name                  string        `env:"DB_NAME" envDefault:"isolet"`
		User                  string        `env:"DB_USER" envDefault:"postgres"`
		Password              string        `env:"DB_PASSWORD" envDefault:"postgres"`
		Host                  string        `env:"DB_HOST" envDefault:"localhost"`
		Port                  int           `env:"DB_PORT" envDefault:"5432"`
		MaxOpenConnections    int           `env:"DB_MAX_OPEN_CONNECTIONS" envDefault:"30"`
		MaxIdleConnections    int           `env:"DB_MAX_IDLE_CONNECTIONS" envDefault:"30"`
		MaxConnectionLifeTime time.Duration `env:"DB_MAX_CONNECTION_LIFETIME" envDefault:"3600s"`
	}

	Sentry struct {
		DSN             string  `env:"SENTRY_DSN" envDefault:""`
		SampleRate      float64 `env:"SENTRY_SAMPLE_RATE" envDefault:"1.0"`
		TraceSampleRate float64 `env:"SENTRY_TRACE_SAMPLE_RATE" envDefault:"0.05"`
	}

	Rest struct {
		Port             int    `env:"REST_PORT" envDefault:"80"`
		APIVersionPrefix string `env:"REST_API_VERSION_PREFIX" envDefault:"/api/v1"`
	}

	Valkey struct {
		Address  []string `env:"VALKEY_ADDRESS" envDefault:"valkey://localhost:6379"`
		Username string   `env:"VALKEY_USERNAME" envDefault:""`
		Password string   `env:"VALKEY_PASSWORD" envDefault:""`
		UseTLS   bool     `env:"VALKEY_USE_TLS" envDefault:"false"`
	}

	Token struct {
		SigningKey                string        `env:"TOKEN_SIGNING_KEY" envDefault:"trustmebro"`
		EmailVerificationValidity time.Duration `env:"TOKEN_EMAIL_VERIFICATION_VALIDITY" envDefault:"10m"`
		AuthValidity              time.Duration `env:"TOKEN_AUTH_VALIDITY" envDefault:"24h"`
		PasswordResetValidity     time.Duration `env:"TOKEN_PASSWORD_RESET_VALIDITY" envDefault:"30m"`
		TeamInviteValidity        time.Duration `env:"TOKEN_TEAM_INVITE_VALIDITY" envDefault:"1h"`
	}

	CNC struct {
		Channel string `env:"CNC_CHANNEL" envDefault:"cnc"`
	}

	ConfigVars struct {
		RefreshInterval time.Duration `env:"CONFIG_VARS_REFRESH_INTERVAL" envDefault:"10m"`
	}

	SMTP struct {
		Retries     int           `env:"SMTP_RETRIES" envDefault:"3"`
		Timeout     time.Duration `env:"SMTP_TIMEOUT" envDefault:"10s"`
		ChannelSize int           `env:"SMTP_CHANNEL_SIZE" envDefault:"10"`
	}

	Challenges struct {
		CacheTTL time.Duration `env:"CHALLENGE_CACHE_TTL" envDefault:"1h"`
	}

	Hints struct {
		CacheTTL time.Duration `env:"HINT_CACHE_TTL" envDefault:"1h"`
	}

	Instances struct {
		Namespace     string        `env:"INSTANCE_NAMESPACE" envDefault:"isolet"`
		StartTimeout  time.Duration `env:"INSTANCE_START_TIMEOUT" envDefault:"5m"`
		StopTimeout   time.Duration `env:"INSTANCE_STOP_TIMEOUT" envDefault:"2m"`
		ExtendTimeout time.Duration `env:"INSTANCE_EXTEND_TIMEOUT" envDefault:"5s"`
		Lifetime      time.Duration `env:"INSTANCE_LIFETIME" envDefault:"30m"`
		MaxLifetime   time.Duration `env:"INSTANCE_MAX_LIFETIME" envDefault:"2h"`
		LimitCPU      string        `env:"INSTANCE_LIMIT_CPU" envDefault:"50m"`
		LimitMemory   string        `env:"INSTANCE_LIMIT_MEMORY" envDefault:"128Mi"`
		SecretKey     string        `env:"INSTANCE_SECRET_KEY" envDefault:"trustmebro"`
		FactTopic     string        `env:"INSTANCE_FACT_TOPIC" envDefault:"herald.instance.lifecycle"`
	}

	K8s struct {
		KubeConfigFilePath string        `env:"K8S_KUBE_CONFIG_FILE_PATH" envDefault:""`
		InstanceKind       string        `env:"K8S_INSTANCE_KIND" envDefault:"Instance"`
		InstanceAPIVersion string        `env:"K8S_INSTANCE_API_VERSION" envDefault:"challenges.isolet.dev/v1"`
		InstancePollRate   time.Duration `env:"K8S_INSTANCE_POLL_RATE" envDefault:"5s"`
		InsecureSkipVerify bool          `env:"K8S_INSECURE_SKIP_VERIFY" envDefault:"false"`
	}

	Manifest struct {
		CacheTTL time.Duration `env:"MANIFEST_CACHE_TTL" envDefault:"1h"`
	}

	Kafka struct {
		Brokers string `env:"KAFKA_BROKERS" envDefault:"localhost:9092"`
		GroupID string `env:"KAFKA_GROUP_ID" envDefault:"oracle-consumer"`
	}
}

func GetConfig

func GetConfig() *Config

type Environment

type Environment string

type Identity

type Identity string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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