mirror of
https://github.com/TecharoHQ/anubis.git
synced 2025-08-03 09:48:08 -04:00
style: apply structpack & goimport (#469)
* refactor: reorder import statements in fetch.go and fetch_test.go Signed-off-by: Jason Cameron <git@jasoncameron.dev> * fix: optimize struct field alignment to reduce memory usage Signed-off-by: Jason Cameron <git@jasoncameron.dev> --------- Signed-off-by: Jason Cameron <git@jasoncameron.dev>
This commit is contained in:
parent
8c7640aa09
commit
529f65674e
@ -159,11 +159,11 @@ func TestGetOGTagsWithHostConsideration(t *testing.T) {
|
|||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
ogCacheConsiderHost bool
|
|
||||||
requests []struct {
|
requests []struct {
|
||||||
host string
|
host string
|
||||||
expectedLoadCount int // Expected load count *after* this request
|
expectedLoadCount int
|
||||||
}
|
}
|
||||||
|
ogCacheConsiderHost bool // Expected load count *after* this request
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Host Not Considered - Same Host",
|
name: "Host Not Considered - Same Host",
|
||||||
|
@ -4,12 +4,13 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"golang.org/x/net/html"
|
|
||||||
"io"
|
"io"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"mime"
|
"mime"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"golang.org/x/net/html"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -2,7 +2,6 @@ package ogtags
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"golang.org/x/net/html"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
@ -10,6 +9,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/net/html"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFetchHTMLDocument(t *testing.T) {
|
func TestFetchHTMLDocument(t *testing.T) {
|
||||||
|
@ -56,10 +56,10 @@ func TestIntegrationGetOGTags(t *testing.T) {
|
|||||||
|
|
||||||
// Test with different configurations
|
// Test with different configurations
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
|
expectedTags map[string]string
|
||||||
name string
|
name string
|
||||||
path string
|
path string
|
||||||
query string
|
query string
|
||||||
expectedTags map[string]string
|
|
||||||
expectError bool
|
expectError bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
|
@ -20,12 +20,12 @@ const (
|
|||||||
type OGTagCache struct {
|
type OGTagCache struct {
|
||||||
cache *decaymap.Impl[string, map[string]string]
|
cache *decaymap.Impl[string, map[string]string]
|
||||||
targetURL *url.URL
|
targetURL *url.URL
|
||||||
ogCacheConsiderHost bool
|
client *http.Client
|
||||||
ogPassthrough bool
|
|
||||||
ogTimeToLive time.Duration
|
|
||||||
approvedTags []string
|
approvedTags []string
|
||||||
approvedPrefixes []string
|
approvedPrefixes []string
|
||||||
client *http.Client
|
ogTimeToLive time.Duration
|
||||||
|
ogCacheConsiderHost bool
|
||||||
|
ogPassthrough bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewOGTagCache(target string, ogPassthrough bool, ogTimeToLive time.Duration, ogTagsConsiderHost bool) *OGTagCache {
|
func NewOGTagCache(target string, ogPassthrough bool, ogTimeToLive time.Duration, ogTagsConsiderHost bool) *OGTagCache {
|
||||||
|
@ -18,9 +18,9 @@ func TestExtractOGTags(t *testing.T) {
|
|||||||
testCache.approvedPrefixes = []string{"og:"}
|
testCache.approvedPrefixes = []string{"og:"}
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
|
expected map[string]string
|
||||||
name string
|
name string
|
||||||
htmlStr string
|
htmlStr string
|
||||||
expected map[string]string
|
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Basic OG tags", // Includes standard 'description' meta tag
|
name: "Basic OG tags", // Includes standard 'description' meta tag
|
||||||
|
@ -106,8 +106,9 @@ type action string
|
|||||||
type testCase struct {
|
type testCase struct {
|
||||||
name string
|
name string
|
||||||
action action
|
action action
|
||||||
|
realIP string
|
||||||
|
userAgent string
|
||||||
isHard bool
|
isHard bool
|
||||||
realIP, userAgent string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func doesNPXExist(t *testing.T) {
|
func doesNPXExist(t *testing.T) {
|
||||||
|
@ -65,12 +65,12 @@ func TestXForwardedForUpdateAddToChain(t *testing.T) {
|
|||||||
|
|
||||||
func TestComputeXFFHeader(t *testing.T) {
|
func TestComputeXFFHeader(t *testing.T) {
|
||||||
for _, tt := range []struct {
|
for _, tt := range []struct {
|
||||||
|
err error
|
||||||
name string
|
name string
|
||||||
remoteAddr string
|
remoteAddr string
|
||||||
origXFFHeader string
|
origXFFHeader string
|
||||||
pref XFFComputePreferences
|
|
||||||
result string
|
result string
|
||||||
err error
|
pref XFFComputePreferences
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "StripPrivate",
|
name: "StripPrivate",
|
||||||
|
@ -58,14 +58,14 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Server struct {
|
type Server struct {
|
||||||
mux *http.ServeMux
|
|
||||||
next http.Handler
|
next http.Handler
|
||||||
priv ed25519.PrivateKey
|
mux *http.ServeMux
|
||||||
pub ed25519.PublicKey
|
|
||||||
policy *policy.ParsedConfig
|
policy *policy.ParsedConfig
|
||||||
opts Options
|
|
||||||
DNSBLCache *decaymap.Impl[string, dnsbl.DroneBLResponse]
|
DNSBLCache *decaymap.Impl[string, dnsbl.DroneBLResponse]
|
||||||
OGTags *ogtags.OGTagCache
|
OGTags *ogtags.OGTagCache
|
||||||
|
priv ed25519.PrivateKey
|
||||||
|
pub ed25519.PublicKey
|
||||||
|
opts Options
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) challengeFor(r *http.Request, difficulty int) string {
|
func (s *Server) challengeFor(r *http.Request, difficulty int) string {
|
||||||
@ -232,8 +232,8 @@ func (s *Server) MakeChallenge(w http.ResponseWriter, r *http.Request) {
|
|||||||
challenge := s.challengeFor(r, rule.Challenge.Difficulty)
|
challenge := s.challengeFor(r, rule.Challenge.Difficulty)
|
||||||
|
|
||||||
err = encoder.Encode(struct {
|
err = encoder.Encode(struct {
|
||||||
Challenge string `json:"challenge"`
|
|
||||||
Rules *config.ChallengeRules `json:"rules"`
|
Rules *config.ChallengeRules `json:"rules"`
|
||||||
|
Challenge string `json:"challenge"`
|
||||||
}{
|
}{
|
||||||
Challenge: challenge,
|
Challenge: challenge,
|
||||||
Rules: rule.Challenge,
|
Rules: rule.Challenge,
|
||||||
|
@ -25,22 +25,19 @@ import (
|
|||||||
type Options struct {
|
type Options struct {
|
||||||
Next http.Handler
|
Next http.Handler
|
||||||
Policy *policy.ParsedConfig
|
Policy *policy.ParsedConfig
|
||||||
RedirectDomains []string
|
Target string
|
||||||
ServeRobotsTXT bool
|
|
||||||
PrivateKey ed25519.PrivateKey
|
|
||||||
|
|
||||||
CookieExpiration time.Duration
|
|
||||||
CookieDomain string
|
CookieDomain string
|
||||||
CookieName string
|
CookieName string
|
||||||
CookiePartitioned bool
|
BasePrefix string
|
||||||
|
WebmasterEmail string
|
||||||
OGPassthrough bool
|
RedirectDomains []string
|
||||||
|
PrivateKey ed25519.PrivateKey
|
||||||
|
CookieExpiration time.Duration
|
||||||
OGTimeToLive time.Duration
|
OGTimeToLive time.Duration
|
||||||
OGCacheConsidersHost bool
|
OGCacheConsidersHost bool
|
||||||
Target string
|
OGPassthrough bool
|
||||||
|
CookiePartitioned bool
|
||||||
WebmasterEmail string
|
ServeRobotsTXT bool
|
||||||
BasePrefix string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadPoliciesOrDefault(fname string, defaultDifficulty int) (*policy.ParsedConfig, error) {
|
func LoadPoliciesOrDefault(fname string, defaultDifficulty int) (*policy.ParsedConfig, error) {
|
||||||
|
@ -8,10 +8,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Bot struct {
|
type Bot struct {
|
||||||
|
Rules Checker
|
||||||
|
Challenge *config.ChallengeRules
|
||||||
Name string
|
Name string
|
||||||
Action config.Rule
|
Action config.Rule
|
||||||
Challenge *config.ChallengeRules
|
|
||||||
Rules Checker
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b Bot) Hash() string {
|
func (b Bot) Hash() string {
|
||||||
|
@ -12,8 +12,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type CELChecker struct {
|
type CELChecker struct {
|
||||||
src string
|
|
||||||
program cel.Program
|
program cel.Program
|
||||||
|
src string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCELChecker(cfg *config.ExpressionOrList) (*CELChecker, error) {
|
func NewCELChecker(cfg *config.ExpressionOrList) (*CELChecker, error) {
|
||||||
|
@ -8,11 +8,11 @@ import (
|
|||||||
|
|
||||||
func TestRemoteAddrChecker(t *testing.T) {
|
func TestRemoteAddrChecker(t *testing.T) {
|
||||||
for _, tt := range []struct {
|
for _, tt := range []struct {
|
||||||
name string
|
|
||||||
cidrs []string
|
|
||||||
ip string
|
|
||||||
ok bool
|
|
||||||
err error
|
err error
|
||||||
|
name string
|
||||||
|
ip string
|
||||||
|
cidrs []string
|
||||||
|
ok bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "match_ipv4",
|
name: "match_ipv4",
|
||||||
@ -86,13 +86,13 @@ func TestRemoteAddrChecker(t *testing.T) {
|
|||||||
|
|
||||||
func TestHeaderMatchesChecker(t *testing.T) {
|
func TestHeaderMatchesChecker(t *testing.T) {
|
||||||
for _, tt := range []struct {
|
for _, tt := range []struct {
|
||||||
|
err error
|
||||||
name string
|
name string
|
||||||
header string
|
header string
|
||||||
rexStr string
|
rexStr string
|
||||||
reqHeaderKey string
|
reqHeaderKey string
|
||||||
reqHeaderValue string
|
reqHeaderValue string
|
||||||
ok bool
|
ok bool
|
||||||
err error
|
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "match",
|
name: "match",
|
||||||
|
@ -51,15 +51,14 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type BotConfig struct {
|
type BotConfig struct {
|
||||||
Name string `json:"name"`
|
|
||||||
UserAgentRegex *string `json:"user_agent_regex"`
|
UserAgentRegex *string `json:"user_agent_regex"`
|
||||||
PathRegex *string `json:"path_regex"`
|
PathRegex *string `json:"path_regex"`
|
||||||
HeadersRegex map[string]string `json:"headers_regex"`
|
HeadersRegex map[string]string `json:"headers_regex"`
|
||||||
RemoteAddr []string `json:"remote_addresses"`
|
|
||||||
Expression *ExpressionOrList `json:"expression"`
|
Expression *ExpressionOrList `json:"expression"`
|
||||||
|
|
||||||
Action Rule `json:"action"`
|
|
||||||
Challenge *ChallengeRules `json:"challenge,omitempty"`
|
Challenge *ChallengeRules `json:"challenge,omitempty"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Action Rule `json:"action"`
|
||||||
|
RemoteAddr []string `json:"remote_addresses"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b BotConfig) Zero() bool {
|
func (b BotConfig) Zero() bool {
|
||||||
@ -171,9 +170,9 @@ func (b BotConfig) Valid() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ChallengeRules struct {
|
type ChallengeRules struct {
|
||||||
|
Algorithm Algorithm `json:"algorithm"`
|
||||||
Difficulty int `json:"difficulty"`
|
Difficulty int `json:"difficulty"`
|
||||||
ReportAs int `json:"report_as"`
|
ReportAs int `json:"report_as"`
|
||||||
Algorithm Algorithm `json:"algorithm"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -15,9 +15,9 @@ func p[V any](v V) *V { return &v }
|
|||||||
|
|
||||||
func TestBotValid(t *testing.T) {
|
func TestBotValid(t *testing.T) {
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
|
err error
|
||||||
name string
|
name string
|
||||||
bot BotConfig
|
bot BotConfig
|
||||||
err error
|
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "simple user agent",
|
name: "simple user agent",
|
||||||
@ -239,9 +239,9 @@ func TestConfigValidKnownGood(t *testing.T) {
|
|||||||
|
|
||||||
func TestImportStatement(t *testing.T) {
|
func TestImportStatement(t *testing.T) {
|
||||||
type testCase struct {
|
type testCase struct {
|
||||||
|
err error
|
||||||
name string
|
name string
|
||||||
importPath string
|
importPath string
|
||||||
err error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var tests []testCase
|
var tests []testCase
|
||||||
|
@ -8,11 +8,11 @@ import (
|
|||||||
|
|
||||||
func TestExpressionOrListUnmarshal(t *testing.T) {
|
func TestExpressionOrListUnmarshal(t *testing.T) {
|
||||||
for _, tt := range []struct {
|
for _, tt := range []struct {
|
||||||
name string
|
|
||||||
inp string
|
|
||||||
err error
|
err error
|
||||||
validErr error
|
validErr error
|
||||||
result *ExpressionOrList
|
result *ExpressionOrList
|
||||||
|
name string
|
||||||
|
inp string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "simple",
|
name: "simple",
|
||||||
|
@ -14,11 +14,11 @@ func TestJoin(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range []struct {
|
for _, tt := range []struct {
|
||||||
name string
|
|
||||||
clauses []string
|
|
||||||
op JoinOperator
|
|
||||||
err error
|
err error
|
||||||
|
name string
|
||||||
|
op JoinOperator
|
||||||
resultStr string
|
resultStr string
|
||||||
|
clauses []string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "no-clauses",
|
name: "no-clauses",
|
||||||
|
@ -12,8 +12,8 @@ func Base(title string, body templ.Component) templ.Component {
|
|||||||
|
|
||||||
func BaseWithChallengeAndOGTags(title string, body templ.Component, challenge string, rules *config.ChallengeRules, ogTags map[string]string) (templ.Component, error) {
|
func BaseWithChallengeAndOGTags(title string, body templ.Component, challenge string, rules *config.ChallengeRules, ogTags map[string]string) (templ.Component, error) {
|
||||||
return base(title, body, struct {
|
return base(title, body, struct {
|
||||||
Challenge string `json:"challenge"`
|
|
||||||
Rules *config.ChallengeRules `json:"rules"`
|
Rules *config.ChallengeRules `json:"rules"`
|
||||||
|
Challenge string `json:"challenge"`
|
||||||
}{
|
}{
|
||||||
Challenge: challenge,
|
Challenge: challenge,
|
||||||
Rules: rules,
|
Rules: rules,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user