Initial commit: wb-mock skeleton

This commit is contained in:
root
2026-07-23 19:02:03 +03:00
commit 93ebcf4406
9 changed files with 217 additions and 0 deletions

22
internal/config/config.go Normal file
View File

@ -0,0 +1,22 @@
package config
import "os"
type Config struct {
Port string
APIKey string
}
func Load() *Config {
return &Config{
Port: getEnv("PORT", "8080"),
APIKey: os.Getenv("WB_API_KEY"),
}
}
func getEnv(key, defaultVal string) string {
if val := os.Getenv(key); val != "" {
return val
}
return defaultVal
}

View File

@ -0,0 +1,22 @@
package handlers
import (
"encoding/json"
"log"
"net/http"
)
func writeJSON(w http.ResponseWriter, status int, v any) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
json.NewEncoder(w).Encode(v)
}
func decodeBody(r *http.Request, v any) error {
defer r.Body.Close()
return json.NewDecoder(r.Body).Decode(v)
}
func logRequest(r *http.Request) {
log.Printf("[wb-mock] %s %s", r.Method, r.URL.Path)
}

View File

@ -0,0 +1,33 @@
package middleware
import (
"encoding/json"
"net/http"
)
func Auth(expectedAPIKey string, next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
apiKey := r.Header.Get("Authorization")
if apiKey == "" {
writeError(w, 401, "missing credentials: Authorization header is required")
return
}
if expectedAPIKey != "" && apiKey != expectedAPIKey {
writeError(w, 403, "invalid api key")
return
}
next(w, r)
}
}
func writeError(w http.ResponseWriter, code int, msg string) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(code)
json.NewEncoder(w).Encode(map[string]any{
"code": code,
"message": msg,
})
}