Documentation
¶
Index ¶
- Constants
- Variables
- func BuildLink(publicURL, token string, pathSegments []string) (string, error)
- func ComparePassword(hashedPwd, plainPwd string) bool
- func GenerateRandom() string
- func HMAC256(data, key string) string
- func HashPassword(passwd string) (string, error)
- func Int64OrNil(i64 int64) *int64
- func IntOrNil(i int) *int
- func InterruptHandler()
- func RandomUUID() string
- func SlugifyForSubdomain(name string) string
- func StringOrNil(s string) *string
- func StructTagsAsString(obj interface{}, tagKey string, depth int) string
- func TimePtr(t time.Time) *time.Time
- type Config
- type Environment
- type Identity
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 ComparePassword ¶
ComparePassword compares a hashed password with a plaintext password.
func GenerateRandom ¶
func GenerateRandom() string
GenerateRandom generates a random 128-character hexadecimal string.
func HashPassword ¶
HashPassword hashes a plaintext password using bcrypt.
func Int64OrNil ¶
Int64OrNil returns a pointer to the int64 or nil if the int64 is zero.
func InterruptHandler ¶
func InterruptHandler()
func SlugifyForSubdomain ¶
SlugifyForSubdomain generates a slug suitable for use as a subdomain.
func StringOrNil ¶
func StructTagsAsString ¶
StructTagsAsString collects struct field annotations up to a specified depth.
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"`
}
}
type Environment ¶
type Environment string
Click to show internal directories.
Click to hide internal directories.