diff --git a/go-waf/PROJECT_STRUCTURE.md b/go-waf/PROJECT_STRUCTURE.md new file mode 100644 index 0000000..a18ca76 --- /dev/null +++ b/go-waf/PROJECT_STRUCTURE.md @@ -0,0 +1,109 @@ +# Go project structure (generated from TS interfaces and architecture) + +```text +go-waf/ +├── cmd/ +│ └── waf/ +│ └── main.go +├── internal/ +│ ├── app/ +│ │ ├── bootstrap.go +│ │ └── lifecycle.go +│ ├── config/ +│ │ ├── loader.go +│ │ ├── defaults.go +│ │ ├── model_app_config.go +│ │ ├── model_waf_config.go +│ │ ├── model_api_metrics_sentry.go +│ │ ├── model_static_filters.go +│ │ ├── model_jail_config.go +│ │ └── model_under_attack_config.go +│ ├── api/ +│ │ └── http/ +│ │ ├── handlers/ +│ │ │ ├── health_handler.go +│ │ │ ├── jail_handler.go +│ │ │ └── metrics_handler.go +│ │ ├── middleware/ +│ │ │ └── basic_auth.go +│ │ └── routes/ +│ │ └── routes.go +│ ├── waf/ +│ │ ├── middleware.go +│ │ ├── client_detection.go +│ │ └── reject_response.go +│ ├── jail/ +│ │ ├── manager.go +│ │ ├── types.go +│ │ ├── rules/ +│ │ │ ├── abstract.go +│ │ │ ├── conditions.go +│ │ │ ├── composite.go +│ │ │ ├── flexible.go +│ │ │ └── static.go +│ │ └── storage/ +│ │ ├── interface.go +│ │ ├── file_storage.go +│ │ ├── operator_storage.go +│ │ └── memory_storage.go +│ ├── underattack/ +│ │ ├── middleware.go +│ │ ├── types.go +│ │ ├── challenge/ +│ │ │ ├── manager.go +│ │ │ └── types.go +│ │ ├── fingerprint/ +│ │ │ ├── validator.go +│ │ │ └── types.go +│ │ ├── proofs/ +│ │ │ ├── validator.go +│ │ │ └── types.go +│ │ └── botdetector/ +│ │ ├── detector.go +│ │ └── types.go +│ ├── metrics/ +│ │ ├── service.go +│ │ └── registry.go +│ ├── observability/ +│ │ ├── logging/ +│ │ │ └── logger.go +│ │ └── sentry/ +│ │ └── client.go +│ ├── geoip/ +│ │ └── service.go +│ ├── proxy/ +│ │ └── reverse_proxy.go +│ └── shared/ +│ └── types/ +│ ├── nullable.go +│ └── enums.go +├── pkg/ +│ ├── httpx/ +│ │ ├── response.go +│ │ └── request_id.go +│ ├── authx/ +│ │ └── basic.go +│ └── envx/ +│ └── env.go +├── configs/ +│ ├── config.example.yaml +│ ├── basic.yaml +│ ├── production.yaml +│ └── under_attack.yaml +├── deployments/ +│ ├── docker/ +│ │ ├── Dockerfile +│ │ └── docker-compose.yml +│ └── k8s/ +│ ├── deployment.yaml +│ ├── service.yaml +│ └── configmap.yaml +├── scripts/ +│ ├── run.sh +│ ├── lint.sh +│ └── test.sh +└── tests/ + ├── unit/ + ├── integration/ + └── e2e/ +``` diff --git a/go-waf/README.md b/go-waf/README.md new file mode 100644 index 0000000..6a34728 --- /dev/null +++ b/go-waf/README.md @@ -0,0 +1,9 @@ +# WAF (Go) — project scaffold + +This scaffold mirrors the TypeScript architecture: +- API, Metrics, WAF middleware pipeline +- Jail subsystem (rules + storage adapters) +- UnderAttack subsystem (challenge, fingerprint, proofs) +- GeoIP, proxy, logging, sentry + +See `PROJECT_STRUCTURE.md` for the detailed map of folders/files. diff --git a/go-waf/configs/basic.yaml b/go-waf/configs/basic.yaml new file mode 100644 index 0000000..0e33217 --- /dev/null +++ b/go-waf/configs/basic.yaml @@ -0,0 +1,21 @@ +proxy: + host: "http://localhost:8080" + +api: + auth: + enabled: false + +metrics: + enabled: true + auth: + enabled: false + +wafMiddleware: + mode: audit + +jailManager: + enabled: true + filterRules: [] + +sentry: + enabled: false diff --git a/go-waf/configs/config.example.yaml b/go-waf/configs/config.example.yaml new file mode 100644 index 0000000..0e33217 --- /dev/null +++ b/go-waf/configs/config.example.yaml @@ -0,0 +1,21 @@ +proxy: + host: "http://localhost:8080" + +api: + auth: + enabled: false + +metrics: + enabled: true + auth: + enabled: false + +wafMiddleware: + mode: audit + +jailManager: + enabled: true + filterRules: [] + +sentry: + enabled: false diff --git a/go-waf/configs/production.yaml b/go-waf/configs/production.yaml new file mode 100644 index 0000000..0e33217 --- /dev/null +++ b/go-waf/configs/production.yaml @@ -0,0 +1,21 @@ +proxy: + host: "http://localhost:8080" + +api: + auth: + enabled: false + +metrics: + enabled: true + auth: + enabled: false + +wafMiddleware: + mode: audit + +jailManager: + enabled: true + filterRules: [] + +sentry: + enabled: false diff --git a/go-waf/configs/under_attack.yaml b/go-waf/configs/under_attack.yaml new file mode 100644 index 0000000..0e33217 --- /dev/null +++ b/go-waf/configs/under_attack.yaml @@ -0,0 +1,21 @@ +proxy: + host: "http://localhost:8080" + +api: + auth: + enabled: false + +metrics: + enabled: true + auth: + enabled: false + +wafMiddleware: + mode: audit + +jailManager: + enabled: true + filterRules: [] + +sentry: + enabled: false diff --git a/go-waf/deployments/docker/Dockerfile b/go-waf/deployments/docker/Dockerfile new file mode 100644 index 0000000..3bb5896 --- /dev/null +++ b/go-waf/deployments/docker/Dockerfile @@ -0,0 +1,8 @@ +FROM golang:1.22-alpine AS build +WORKDIR /src +COPY . . +RUN go build -o /out/waf ./cmd/waf + +FROM alpine:3.20 +COPY --from=build /out/waf /usr/local/bin/waf +ENTRYPOINT ["/usr/local/bin/waf"] diff --git a/go-waf/deployments/docker/docker-compose.yml b/go-waf/deployments/docker/docker-compose.yml new file mode 100644 index 0000000..e9a5aea --- /dev/null +++ b/go-waf/deployments/docker/docker-compose.yml @@ -0,0 +1,8 @@ +version: '3.9' +services: + waf: + build: + context: ../../ + dockerfile: deployments/docker/Dockerfile + ports: + - "3000:3000" diff --git a/go-waf/deployments/k8s/configmap.yaml b/go-waf/deployments/k8s/configmap.yaml new file mode 100644 index 0000000..ab454c3 --- /dev/null +++ b/go-waf/deployments/k8s/configmap.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: waf-go-config diff --git a/go-waf/deployments/k8s/deployment.yaml b/go-waf/deployments/k8s/deployment.yaml new file mode 100644 index 0000000..51043b6 --- /dev/null +++ b/go-waf/deployments/k8s/deployment.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: waf-go +spec: + replicas: 1 + selector: + matchLabels: + app: waf-go + template: + metadata: + labels: + app: waf-go + spec: + containers: + - name: waf-go + image: waf-go:latest + ports: + - containerPort: 3000 diff --git a/go-waf/deployments/k8s/service.yaml b/go-waf/deployments/k8s/service.yaml new file mode 100644 index 0000000..e31ee20 --- /dev/null +++ b/go-waf/deployments/k8s/service.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Service +metadata: + name: waf-go +spec: + selector: + app: waf-go + ports: + - port: 3000 + targetPort: 3000 diff --git a/go-waf/go.mod b/go-waf/go.mod new file mode 100644 index 0000000..8c32cb9 --- /dev/null +++ b/go-waf/go.mod @@ -0,0 +1,3 @@ +module github.com/someblackmagic/web-application-firewall-go + +go 1.22 diff --git a/go-waf/internal/api/http/handlers/health_handler.go b/go-waf/internal/api/http/handlers/health_handler.go new file mode 100644 index 0000000..8a662b6 --- /dev/null +++ b/go-waf/internal/api/http/handlers/health_handler.go @@ -0,0 +1,3 @@ +package handlers + +// TODO: implement. diff --git a/go-waf/internal/api/http/handlers/jail_handler.go b/go-waf/internal/api/http/handlers/jail_handler.go new file mode 100644 index 0000000..8a662b6 --- /dev/null +++ b/go-waf/internal/api/http/handlers/jail_handler.go @@ -0,0 +1,3 @@ +package handlers + +// TODO: implement. diff --git a/go-waf/internal/api/http/handlers/metrics_handler.go b/go-waf/internal/api/http/handlers/metrics_handler.go new file mode 100644 index 0000000..8a662b6 --- /dev/null +++ b/go-waf/internal/api/http/handlers/metrics_handler.go @@ -0,0 +1,3 @@ +package handlers + +// TODO: implement. diff --git a/go-waf/internal/api/http/middleware/basic_auth.go b/go-waf/internal/api/http/middleware/basic_auth.go new file mode 100644 index 0000000..f1e5a5c --- /dev/null +++ b/go-waf/internal/api/http/middleware/basic_auth.go @@ -0,0 +1,3 @@ +package middleware + +// TODO: implement. diff --git a/go-waf/internal/api/http/routes/routes.go b/go-waf/internal/api/http/routes/routes.go new file mode 100644 index 0000000..3516d79 --- /dev/null +++ b/go-waf/internal/api/http/routes/routes.go @@ -0,0 +1,3 @@ +package routes + +// TODO: implement. diff --git a/go-waf/internal/app/bootstrap.go b/go-waf/internal/app/bootstrap.go new file mode 100644 index 0000000..022a04e --- /dev/null +++ b/go-waf/internal/app/bootstrap.go @@ -0,0 +1,5 @@ +package app + +func Run() { + // TODO: wire config, logger, sentry, geoip, metrics, jail, under-attack, waf middleware and reverse proxy. +} diff --git a/go-waf/internal/app/lifecycle.go b/go-waf/internal/app/lifecycle.go new file mode 100644 index 0000000..4a539f9 --- /dev/null +++ b/go-waf/internal/app/lifecycle.go @@ -0,0 +1,3 @@ +package app + +// TODO: graceful shutdown, signal handling, panic/recovery integration. diff --git a/go-waf/internal/config/defaults.go b/go-waf/internal/config/defaults.go new file mode 100644 index 0000000..bf71156 --- /dev/null +++ b/go-waf/internal/config/defaults.go @@ -0,0 +1,3 @@ +package config + +// TODO: default values equivalent to TS merge/defaults behavior. diff --git a/go-waf/internal/config/loader.go b/go-waf/internal/config/loader.go new file mode 100644 index 0000000..d9f3445 --- /dev/null +++ b/go-waf/internal/config/loader.go @@ -0,0 +1,3 @@ +package config + +// TODO: implement YAML/file/url config loader with env overrides. diff --git a/go-waf/internal/config/model_api_metrics_sentry.go b/go-waf/internal/config/model_api_metrics_sentry.go new file mode 100644 index 0000000..25e774b --- /dev/null +++ b/go-waf/internal/config/model_api_metrics_sentry.go @@ -0,0 +1,23 @@ +package config + +type HttpBasicAuthConfig struct { + Enabled bool `yaml:"enabled" json:"enabled"` + Username *string `yaml:"username,omitempty" json:"username,omitempty"` + Password *string `yaml:"password,omitempty" json:"password,omitempty"` +} + +type APIConfig struct { + Auth HttpBasicAuthConfig `yaml:"auth" json:"auth"` +} + +type MetricsConfig struct { + Enabled bool `yaml:"enabled" json:"enabled"` + Auth HttpBasicAuthConfig `yaml:"auth" json:"auth"` +} + +type SentryConfig struct { + Enabled bool `yaml:"enabled" json:"enabled"` + DSN *string `yaml:"dsn,omitempty" json:"dsn,omitempty"` + Release *string `yaml:"release,omitempty" json:"release,omitempty"` + Debug *bool `yaml:"debug,omitempty" json:"debug,omitempty"` +} diff --git a/go-waf/internal/config/model_app_config.go b/go-waf/internal/config/model_app_config.go new file mode 100644 index 0000000..9a07236 --- /dev/null +++ b/go-waf/internal/config/model_app_config.go @@ -0,0 +1,13 @@ +package config + +type AppConfig struct { + Proxy struct { + Host string `yaml:"host" json:"host"` + } `yaml:"proxy" json:"proxy"` + + WAFMiddleware WAFMiddlewareConfig `yaml:"wafMiddleware" json:"wafMiddleware"` + JailManager JailManagerConfig `yaml:"jailManager" json:"jailManager"` + API APIConfig `yaml:"api" json:"api"` + Metrics MetricsConfig `yaml:"metrics" json:"metrics"` + Sentry SentryConfig `yaml:"sentry" json:"sentry"` +} diff --git a/go-waf/internal/config/model_jail_config.go b/go-waf/internal/config/model_jail_config.go new file mode 100644 index 0000000..d81240c --- /dev/null +++ b/go-waf/internal/config/model_jail_config.go @@ -0,0 +1,17 @@ +package config + +type JailManagerConfig struct { + Enabled bool `yaml:"enabled" json:"enabled"` + Storage *JailStorageConfig `yaml:"storage,omitempty" json:"storage,omitempty"` + LoadInterval *int `yaml:"loadInterval,omitempty" json:"loadInterval,omitempty"` + FlushInterval *int `yaml:"flushInterval,omitempty" json:"flushInterval,omitempty"` + FlushAlways *bool `yaml:"flushAlways,omitempty" json:"flushAlways,omitempty"` + FilterRules []AbstractRuleConfig `yaml:"filterRules" json:"filterRules"` +} + +type JailStorageConfig struct { + Driver *string `yaml:"driver,omitempty" json:"driver,omitempty"` + DriverConfig any `yaml:"driverConfig,omitempty" json:"driverConfig,omitempty"` +} + +type AbstractRuleConfig struct { Name string `yaml:"name" json:"name"`; Type string `yaml:"type" json:"type"` } diff --git a/go-waf/internal/config/model_static_filters.go b/go-waf/internal/config/model_static_filters.go new file mode 100644 index 0000000..df8abd2 --- /dev/null +++ b/go-waf/internal/config/model_static_filters.go @@ -0,0 +1,11 @@ +package config + +type StaticFilterConfig struct { + IPs []string `yaml:"ips,omitempty" json:"ips,omitempty"` + IPSubnet []string `yaml:"ipSubnet,omitempty" json:"ipSubnet,omitempty"` + GeoCountry []string `yaml:"geoCountry,omitempty" json:"geoCountry,omitempty"` + GeoCity []string `yaml:"geoCity,omitempty" json:"geoCity,omitempty"` +} + +type WhitelistConfig struct{ StaticFilterConfig } +type BlacklistConfig struct{ StaticFilterConfig } diff --git a/go-waf/internal/config/model_under_attack_config.go b/go-waf/internal/config/model_under_attack_config.go new file mode 100644 index 0000000..e2f414d --- /dev/null +++ b/go-waf/internal/config/model_under_attack_config.go @@ -0,0 +1,23 @@ +package config + +type UnderAttackConfig struct { + Enabled *bool `yaml:"enabled,omitempty" json:"enabled,omitempty"` + Mode *string `yaml:"mode,omitempty" json:"mode,omitempty"` + ChallengeDurationMs *int64 `yaml:"challengeDurationMs,omitempty" json:"challengeDurationMs,omitempty"` + Conditions []map[string]any `yaml:"conditions,omitempty" json:"conditions,omitempty"` + FingerprintChecks *FingerprintValidatorConfig `yaml:"fingerprintChecks,omitempty" json:"fingerprintChecks,omitempty"` + ChallengeManager *ChallengeManagerConfig `yaml:"challengeManager,omitempty" json:"challengeManager,omitempty"` + ChallengePage *ChallengePageConfig `yaml:"challengePage,omitempty" json:"challengePage,omitempty"` + SkipURLs []string `yaml:"skipUrls,omitempty" json:"skipUrls,omitempty"` + CookieName *string `yaml:"cookieName,omitempty" json:"cookieName,omitempty"` + BypassHeaders []BypassHeader `yaml:"bypassHeaders,omitempty" json:"bypassHeaders,omitempty"` +} + +type FingerprintValidatorConfig struct { + Enabled bool `yaml:"enabled" json:"enabled"` + MinScore float64 `yaml:"minScore" json:"minScore"` +} + +type ChallengeManagerConfig struct { AutoCleanup bool `yaml:"autoCleanup" json:"autoCleanup"`; AutoCleanupInterval int `yaml:"autoCleanupInterval" json:"autoCleanupInterval"` } +type ChallengePageConfig struct { Title string `yaml:"title" json:"title"`; Path string `yaml:"path" json:"path"` } +type BypassHeader struct { Name string `yaml:"name" json:"name"`; Value string `yaml:"value" json:"value"` } diff --git a/go-waf/internal/config/model_waf_config.go b/go-waf/internal/config/model_waf_config.go new file mode 100644 index 0000000..612a906 --- /dev/null +++ b/go-waf/internal/config/model_waf_config.go @@ -0,0 +1,25 @@ +package config + +type WAFMiddlewareConfig struct { + Mode *string `yaml:"mode,omitempty" json:"mode,omitempty"` + Whitelist *WhitelistConfig `yaml:"whitelist,omitempty" json:"whitelist,omitempty"` + Blacklist *BlacklistConfig `yaml:"blacklist,omitempty" json:"blacklist,omitempty"` + UnderAttack *UnderAttackConfig `yaml:"underAttack,omitempty" json:"underAttack,omitempty"` + BannedResponse *BannedResponseConfig `yaml:"bannedResponse,omitempty" json:"bannedResponse,omitempty"` + DetectClientIP *DetectClientIPConfig `yaml:"detectClientIp,omitempty" json:"detectClientIp,omitempty"` + DetectClientCountry *DetectClientCountryConfig `yaml:"detectClientCountry,omitempty" json:"detectClientCountry,omitempty"` + DetectClientCity *DetectClientCityConfig `yaml:"detectClientCity,omitempty" json:"detectClientCity,omitempty"` + DetectClientRequestID *DetectClientRequestIDConfig `yaml:"detectClientRequestId,omitempty" json:"detectClientRequestId,omitempty"` +} + +type BannedResponseConfig struct { + HTTPCode *int `yaml:"httpCode,omitempty" json:"httpCode,omitempty"` + JSON string `yaml:"json" json:"json"` + HTML *string `yaml:"html,omitempty" json:"html,omitempty"` + HTMLLink *string `yaml:"htmlLink,omitempty" json:"htmlLink,omitempty"` +} + +type DetectClientIPConfig struct { Headers []string `yaml:"headers,omitempty" json:"headers,omitempty"` } +type DetectClientCountryConfig struct { Method string `yaml:"method" json:"method"`; Header *string `yaml:"header,omitempty" json:"header,omitempty"` } +type DetectClientCityConfig struct { Method string `yaml:"method" json:"method"`; Header *string `yaml:"header,omitempty" json:"header,omitempty"` } +type DetectClientRequestIDConfig struct { Header *string `yaml:"header,omitempty" json:"header,omitempty"` } diff --git a/go-waf/internal/geoip/service.go b/go-waf/internal/geoip/service.go new file mode 100644 index 0000000..925b04e --- /dev/null +++ b/go-waf/internal/geoip/service.go @@ -0,0 +1,3 @@ +package geoip + +// TODO: implement. diff --git a/go-waf/internal/jail/manager.go b/go-waf/internal/jail/manager.go new file mode 100644 index 0000000..ffd864e --- /dev/null +++ b/go-waf/internal/jail/manager.go @@ -0,0 +1,3 @@ +package jail + +// TODO: implement. diff --git a/go-waf/internal/jail/rules/abstract.go b/go-waf/internal/jail/rules/abstract.go new file mode 100644 index 0000000..eecfadb --- /dev/null +++ b/go-waf/internal/jail/rules/abstract.go @@ -0,0 +1,3 @@ +package rules + +// TODO: implement. diff --git a/go-waf/internal/jail/rules/composite.go b/go-waf/internal/jail/rules/composite.go new file mode 100644 index 0000000..eecfadb --- /dev/null +++ b/go-waf/internal/jail/rules/composite.go @@ -0,0 +1,3 @@ +package rules + +// TODO: implement. diff --git a/go-waf/internal/jail/rules/conditions.go b/go-waf/internal/jail/rules/conditions.go new file mode 100644 index 0000000..eecfadb --- /dev/null +++ b/go-waf/internal/jail/rules/conditions.go @@ -0,0 +1,3 @@ +package rules + +// TODO: implement. diff --git a/go-waf/internal/jail/rules/flexible.go b/go-waf/internal/jail/rules/flexible.go new file mode 100644 index 0000000..eecfadb --- /dev/null +++ b/go-waf/internal/jail/rules/flexible.go @@ -0,0 +1,3 @@ +package rules + +// TODO: implement. diff --git a/go-waf/internal/jail/rules/static.go b/go-waf/internal/jail/rules/static.go new file mode 100644 index 0000000..eecfadb --- /dev/null +++ b/go-waf/internal/jail/rules/static.go @@ -0,0 +1,3 @@ +package rules + +// TODO: implement. diff --git a/go-waf/internal/jail/storage/file_storage.go b/go-waf/internal/jail/storage/file_storage.go new file mode 100644 index 0000000..378c9d3 --- /dev/null +++ b/go-waf/internal/jail/storage/file_storage.go @@ -0,0 +1,3 @@ +package storage + +// TODO: implement. diff --git a/go-waf/internal/jail/storage/interface.go b/go-waf/internal/jail/storage/interface.go new file mode 100644 index 0000000..378c9d3 --- /dev/null +++ b/go-waf/internal/jail/storage/interface.go @@ -0,0 +1,3 @@ +package storage + +// TODO: implement. diff --git a/go-waf/internal/jail/storage/memory_storage.go b/go-waf/internal/jail/storage/memory_storage.go new file mode 100644 index 0000000..378c9d3 --- /dev/null +++ b/go-waf/internal/jail/storage/memory_storage.go @@ -0,0 +1,3 @@ +package storage + +// TODO: implement. diff --git a/go-waf/internal/jail/storage/operator_storage.go b/go-waf/internal/jail/storage/operator_storage.go new file mode 100644 index 0000000..378c9d3 --- /dev/null +++ b/go-waf/internal/jail/storage/operator_storage.go @@ -0,0 +1,3 @@ +package storage + +// TODO: implement. diff --git a/go-waf/internal/jail/types.go b/go-waf/internal/jail/types.go new file mode 100644 index 0000000..ffd864e --- /dev/null +++ b/go-waf/internal/jail/types.go @@ -0,0 +1,3 @@ +package jail + +// TODO: implement. diff --git a/go-waf/internal/metrics/registry.go b/go-waf/internal/metrics/registry.go new file mode 100644 index 0000000..62a09ce --- /dev/null +++ b/go-waf/internal/metrics/registry.go @@ -0,0 +1,3 @@ +package metrics + +// TODO: implement. diff --git a/go-waf/internal/metrics/service.go b/go-waf/internal/metrics/service.go new file mode 100644 index 0000000..62a09ce --- /dev/null +++ b/go-waf/internal/metrics/service.go @@ -0,0 +1,3 @@ +package metrics + +// TODO: implement. diff --git a/go-waf/internal/observability/logging/logger.go b/go-waf/internal/observability/logging/logger.go new file mode 100644 index 0000000..c13bf01 --- /dev/null +++ b/go-waf/internal/observability/logging/logger.go @@ -0,0 +1,3 @@ +package logging + +// TODO: implement. diff --git a/go-waf/internal/observability/sentry/client.go b/go-waf/internal/observability/sentry/client.go new file mode 100644 index 0000000..d044d72 --- /dev/null +++ b/go-waf/internal/observability/sentry/client.go @@ -0,0 +1,3 @@ +package sentry + +// TODO: implement. diff --git a/go-waf/internal/proxy/reverse_proxy.go b/go-waf/internal/proxy/reverse_proxy.go new file mode 100644 index 0000000..1e39666 --- /dev/null +++ b/go-waf/internal/proxy/reverse_proxy.go @@ -0,0 +1,3 @@ +package proxy + +// TODO: implement. diff --git a/go-waf/internal/shared/types/enums.go b/go-waf/internal/shared/types/enums.go new file mode 100644 index 0000000..8880d8f --- /dev/null +++ b/go-waf/internal/shared/types/enums.go @@ -0,0 +1,3 @@ +package types + +// TODO: implement. diff --git a/go-waf/internal/shared/types/nullable.go b/go-waf/internal/shared/types/nullable.go new file mode 100644 index 0000000..8880d8f --- /dev/null +++ b/go-waf/internal/shared/types/nullable.go @@ -0,0 +1,3 @@ +package types + +// TODO: implement. diff --git a/go-waf/internal/underattack/botdetector/detector.go b/go-waf/internal/underattack/botdetector/detector.go new file mode 100644 index 0000000..365480a --- /dev/null +++ b/go-waf/internal/underattack/botdetector/detector.go @@ -0,0 +1,3 @@ +package botdetector + +// TODO: implement. diff --git a/go-waf/internal/underattack/botdetector/types.go b/go-waf/internal/underattack/botdetector/types.go new file mode 100644 index 0000000..365480a --- /dev/null +++ b/go-waf/internal/underattack/botdetector/types.go @@ -0,0 +1,3 @@ +package botdetector + +// TODO: implement. diff --git a/go-waf/internal/underattack/challenge/manager.go b/go-waf/internal/underattack/challenge/manager.go new file mode 100644 index 0000000..f04a329 --- /dev/null +++ b/go-waf/internal/underattack/challenge/manager.go @@ -0,0 +1,3 @@ +package challenge + +// TODO: implement. diff --git a/go-waf/internal/underattack/challenge/types.go b/go-waf/internal/underattack/challenge/types.go new file mode 100644 index 0000000..f04a329 --- /dev/null +++ b/go-waf/internal/underattack/challenge/types.go @@ -0,0 +1,3 @@ +package challenge + +// TODO: implement. diff --git a/go-waf/internal/underattack/fingerprint/types.go b/go-waf/internal/underattack/fingerprint/types.go new file mode 100644 index 0000000..87dd263 --- /dev/null +++ b/go-waf/internal/underattack/fingerprint/types.go @@ -0,0 +1,3 @@ +package fingerprint + +// TODO: implement. diff --git a/go-waf/internal/underattack/fingerprint/validator.go b/go-waf/internal/underattack/fingerprint/validator.go new file mode 100644 index 0000000..87dd263 --- /dev/null +++ b/go-waf/internal/underattack/fingerprint/validator.go @@ -0,0 +1,3 @@ +package fingerprint + +// TODO: implement. diff --git a/go-waf/internal/underattack/middleware.go b/go-waf/internal/underattack/middleware.go new file mode 100644 index 0000000..74b0214 --- /dev/null +++ b/go-waf/internal/underattack/middleware.go @@ -0,0 +1,3 @@ +package underattack + +// TODO: implement. diff --git a/go-waf/internal/underattack/proofs/types.go b/go-waf/internal/underattack/proofs/types.go new file mode 100644 index 0000000..5c16939 --- /dev/null +++ b/go-waf/internal/underattack/proofs/types.go @@ -0,0 +1,3 @@ +package proofs + +// TODO: implement. diff --git a/go-waf/internal/underattack/proofs/validator.go b/go-waf/internal/underattack/proofs/validator.go new file mode 100644 index 0000000..5c16939 --- /dev/null +++ b/go-waf/internal/underattack/proofs/validator.go @@ -0,0 +1,3 @@ +package proofs + +// TODO: implement. diff --git a/go-waf/internal/underattack/types.go b/go-waf/internal/underattack/types.go new file mode 100644 index 0000000..74b0214 --- /dev/null +++ b/go-waf/internal/underattack/types.go @@ -0,0 +1,3 @@ +package underattack + +// TODO: implement. diff --git a/go-waf/pkg/authx/basic.go b/go-waf/pkg/authx/basic.go new file mode 100644 index 0000000..95c3f17 --- /dev/null +++ b/go-waf/pkg/authx/basic.go @@ -0,0 +1,3 @@ +package authx + +// TODO: implement. diff --git a/go-waf/pkg/envx/env.go b/go-waf/pkg/envx/env.go new file mode 100644 index 0000000..9515230 --- /dev/null +++ b/go-waf/pkg/envx/env.go @@ -0,0 +1,3 @@ +package envx + +// TODO: implement. diff --git a/go-waf/pkg/httpx/request_id.go b/go-waf/pkg/httpx/request_id.go new file mode 100644 index 0000000..1b57c7b --- /dev/null +++ b/go-waf/pkg/httpx/request_id.go @@ -0,0 +1,3 @@ +package httpx + +// TODO: implement. diff --git a/go-waf/pkg/httpx/response.go b/go-waf/pkg/httpx/response.go new file mode 100644 index 0000000..1b57c7b --- /dev/null +++ b/go-waf/pkg/httpx/response.go @@ -0,0 +1,3 @@ +package httpx + +// TODO: implement. diff --git a/go-waf/scripts/lint.sh b/go-waf/scripts/lint.sh new file mode 100755 index 0000000..ce9f9f4 --- /dev/null +++ b/go-waf/scripts/lint.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh +set -e +go vet ./... diff --git a/go-waf/scripts/run.sh b/go-waf/scripts/run.sh new file mode 100755 index 0000000..de65ea1 --- /dev/null +++ b/go-waf/scripts/run.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh +set -e +go run ./cmd/waf diff --git a/go-waf/scripts/test.sh b/go-waf/scripts/test.sh new file mode 100755 index 0000000..3d80386 --- /dev/null +++ b/go-waf/scripts/test.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh +set -e +go test ./...