Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Origin/proxy v2 #50

Draft
wants to merge 194 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
194 commits
Select commit Hold shift + click to select a range
f6341f2
begin refactor of proxy engine
deoxykev Nov 18, 2023
98fa532
fix nil pointer deref
deoxykev Nov 19, 2023
ee9066d
refactor wip
deoxykev Nov 19, 2023
5035f65
wip
deoxykev Nov 20, 2023
1d88f14
rewrite resource URLs based on html tokenizer instead of regex
deoxykev Nov 20, 2023
5d46adc
wip
deoxykev Nov 20, 2023
6222476
forward content-type headers
deoxykev Nov 20, 2023
79a229f
handle srcset resource URL rewrites; monkey patch JS for URL rewrites
deoxykev Nov 21, 2023
543192a
support js URL rewriting; support post req
deoxykev Nov 21, 2023
dab77d7
url rewriter tweaks
deoxykev Nov 21, 2023
0fc0942
encorporate url encoding issue fix from https://github.com/everywall/…
deoxykev Nov 21, 2023
0e620e4
organize rewriters
deoxykev Nov 22, 2023
a4e016b
add common referrer options
deoxykev Nov 22, 2023
854dafb
improve js rewriting functionality by not relying on js to get proxy …
deoxykev Nov 22, 2023
efa43a6
minor fix with parameterization
deoxykev Nov 22, 2023
bfd647e
url rewrite improvements
deoxykev Nov 22, 2023
7668713
fix recursive proxy calls
deoxykev Nov 22, 2023
5d55a2f
refactor rewriters to modify html in single pass with multiple rewrit…
deoxykev Nov 23, 2023
6c54d31
add dynamic resource url patcher as standalone responsemodifier
deoxykev Nov 23, 2023
d71ebe5
test demo
deoxykev Nov 26, 2023
cb409f9
add package.json
deoxykev Nov 26, 2023
ae48429
merge main
deoxykev Nov 27, 2023
98d6b65
simplify rewriters api usage
deoxykev Nov 27, 2023
6427361
aider: Add public API to add a RequestModification to fire only once.
deoxykev Nov 27, 2023
a295f2a
aider: Add public API to add a ResponseModification to fire only once.
deoxykev Nov 27, 2023
fb63dba
add response / request modifier API to only fire once
deoxykev Nov 27, 2023
59cf031
improve ua modifier with client side spoofing
deoxykev Nov 27, 2023
2dccc7c
add req/resp header forwarding modifiers
deoxykev Nov 27, 2023
7b3aecc
add TLS fingerprint (ja3) spoofer request modifier
deoxykev Nov 27, 2023
81cda11
improve wayback/archist display / refactor cycletls transport with PR…
deoxykev Nov 28, 2023
78e15d8
fix archivist response modifier
deoxykev Nov 28, 2023
0fe02c3
fix srcset handler in html rewriter
deoxykev Nov 28, 2023
9a8d4ac
fix cycletls imports
deoxykev Nov 28, 2023
214790f
fix fwd response headers
deoxykev Nov 28, 2023
9d31f7e
improve token rewriting
deoxykev Nov 28, 2023
31200cf
replace cycletls with bogdanfinn/tls-client for better tls fingerprin…
deoxykev Nov 28, 2023
b7a012d
add outline test
deoxykev Nov 29, 2023
e5bd5df
structured article json first draft
deoxykev Nov 29, 2023
909d292
improve outline api with error handling and proper content-type response
deoxykev Nov 29, 2023
53ce3ff
add /api/outline path
deoxykev Nov 29, 2023
3fdbf35
rename `proxychain.ProxyChainPool` to `proxychain.Pool`
dxbednarczyk Nov 29, 2023
dc558b3
fix import orders
dxbednarczyk Nov 29, 2023
382d5f3
ignore unused params
dxbednarczyk Nov 29, 2023
439ec61
rename `api.ApiError` to `api.Error`
dxbednarczyk Nov 29, 2023
23fb025
Merge pull request #52 from dxbednarczyk/origin/proxy_v2
deoxykev Nov 29, 2023
97afbaa
add ascii art
deoxykev Nov 29, 2023
0122b2f
add option to use random ip from googlebot pool
dxbednarczyk Nov 30, 2023
dbaf102
woops
dxbednarczyk Nov 30, 2023
6749f76
Begin work on outline page and route
joncrangle Nov 30, 2023
bc01028
Add dark mode
joncrangle Nov 30, 2023
2beeeca
Rename ExecuteForAPI to ExecuteForOutline
joncrangle Nov 30, 2023
c89ba91
Tidy
joncrangle Nov 30, 2023
a66f922
Update form
joncrangle Nov 30, 2023
4acb5f6
Fix error message styling
joncrangle Nov 30, 2023
73cae94
handle request and url param types in fetch monkey patch
deoxykev Nov 30, 2023
f5458aa
Fix link hover in dark mode
joncrangle Nov 30, 2023
1c810ad
Merge branch 'origin/proxy_v2' of https://github.com/everywall/ladder…
joncrangle Nov 30, 2023
1ec0d2c
refactor outline api to become a response modifier
deoxykev Nov 30, 2023
8862b7d
rough draft of more modular design
dxbednarczyk Nov 30, 2023
cd891d8
tweak outline template rendering
deoxykev Dec 1, 2023
ba252f5
add other headers
dxbednarczyk Dec 1, 2023
0043b67
rewrite a href URLs for outline pages
deoxykev Dec 1, 2023
130fdb6
add bing bot + create generic struct for bots
dxbednarczyk Dec 1, 2023
5877a49
Merge branch 'origin/proxy_v2' of https://github.com/everywall/ladder…
dxbednarczyk Dec 1, 2023
b4b2373
Generated stylesheet
Dec 1, 2023
518a941
author metadata in outline links to wikipedia; sitename metadata is n…
deoxykev Dec 1, 2023
d639ee6
Watch for changes in js
joncrangle Dec 1, 2023
04dfd87
Specify updated content locations
joncrangle Dec 1, 2023
4d5786a
Add outline html to css build
joncrangle Dec 1, 2023
3422154
Fix null localstorage and h1 styling
joncrangle Dec 1, 2023
2ad1535
Update base h1 and code styles
joncrangle Dec 1, 2023
0fc84cb
Styling updates
joncrangle Dec 1, 2023
fcd8004
Build updated stylesheet
joncrangle Dec 1, 2023
0130c01
Update full bin and pre_cmd
joncrangle Dec 1, 2023
8bd4ca8
Ladder logo link to /
joncrangle Dec 1, 2023
85be697
Apply consistent template format
joncrangle Dec 1, 2023
0aa34e2
Update caption styling
joncrangle Dec 1, 2023
ac00c7f
Build css
joncrangle Dec 1, 2023
ef50c81
improve version display start message
deoxykev Dec 1, 2023
140a38f
improve /api/content metadata and tag handling
deoxykev Dec 1, 2023
1cd1aa8
rename
deoxykev Dec 1, 2023
6e4bba7
Set theme to system in localstorage if null
joncrangle Dec 1, 2023
7e455c9
Move script tag to head
joncrangle Dec 1, 2023
d7b827a
Merge branch 'origin/proxy_v2' into origin/proxy_v2
dxbednarczyk Dec 1, 2023
b9c6377
Generated stylesheet
Dec 1, 2023
b996df3
add rulesetmap type for efficient ruleset lookup for proxychain impl
deoxykev Dec 1, 2023
9f0e33a
Merge pull request #53 from dxbednarczyk/origin/proxy_v2
deoxykev Dec 1, 2023
8aba4a1
lint
deoxykev Dec 1, 2023
f7ddd67
add patch google analytics response modifier
deoxykev Dec 1, 2023
cdac75b
add troubleshooting comment for CF-Connecting-IP header spoofing issu…
deoxykev Dec 1, 2023
47def5c
add patch tracker scripts response modifier
deoxykev Dec 1, 2023
59a57f2
tweak dynamic url rewriting logic
deoxykev Dec 2, 2023
d9714fb
Error container improvement
joncrangle Dec 2, 2023
54173cf
fix typo in `main()` and add random ip generation
dxbednarczyk Dec 2, 2023
a1a2f26
update test to run on every ip in googlebot pool
dxbednarczyk Dec 2, 2023
dcdf75b
add response modifier to prevent the removal of elements by paywall s…
deoxykev Dec 2, 2023
c8a4112
Merge pull request #55 from dxbednarczyk/origin/proxy_v2
deoxykev Dec 2, 2023
117ded5
Update button styles
joncrangle Dec 3, 2023
6c0721d
fix "modifer" -> "modifier" typo everywhere
deoxykev Dec 3, 2023
1fc47c7
fix air config
deoxykev Dec 3, 2023
547cf61
begin work on refactor of ruleset and functional options serializer f…
deoxykev Dec 4, 2023
a83a95c
Change form type to url #57
deoxykev Dec 4, 2023
7883b32
work on rule reqmod resmod codegen for serialization
deoxykev Dec 4, 2023
8f81583
Add git clone command and submodule update command for development s…
ladddder Dec 4, 2023
c28470e
improve codegen for JSON serialization of response/request modifiers
deoxykev Dec 4, 2023
b399550
Merge pull request #58 from everywall/proxy_v2_docs
deoxykev Dec 4, 2023
6157d65
add YAML serialization for ruleset
deoxykev Dec 5, 2023
f8621e7
implement proper ruleset json serializer
deoxykev Dec 5, 2023
bc715d9
implement proper marshaller/unmarshaller for rulesets in yaml format
deoxykev Dec 5, 2023
692b2a5
update makefile and air config to run codegen
deoxykev Dec 5, 2023
a56ec1f
use make to build binaries
mms-gianni Dec 5, 2023
f437bca
move auth and favicon form main to handlers, linting
ladddder Dec 5, 2023
7fd2b2b
move script from main to handlers
ladddder Dec 5, 2023
eef6061
moved styles css from main to handlers
ladddder Dec 5, 2023
f2543d2
move minified tailwind css build to handler folder
ladddder Dec 5, 2023
9d77c63
add ruleset_v2 loading code
deoxykev Dec 5, 2023
b2f6cf9
finish ruleset_v2 implementation
deoxykev Dec 5, 2023
4b04268
Merge pull request #61 from everywall/proxy_v2/cleanup-main
deoxykev Dec 5, 2023
e6e8b0e
Merge pull request #60 from everywall/proxy_v2_improve_docker_buildjob
deoxykev Dec 5, 2023
52d12dd
ruleset_v2 integration test working
deoxykev Dec 5, 2023
0b33765
add support for rulesets in JSON format for frontend use
deoxykev Dec 6, 2023
5a7fe8a
re-add googlebot ip randomization flag to fix import cycle
deoxykev Dec 6, 2023
0bfd83f
update deps
dxbednarczyk Dec 6, 2023
2098443
move all non *.go files to vendor directory
dxbednarczyk Dec 6, 2023
6192373
update cli flags to load ruleset
deoxykev Dec 6, 2023
b4dd0e5
add localstorage clearer, sessionstorage cleaer, and cachebuster modi…
deoxykev Dec 6, 2023
f559e7f
Merge pull request #62 from dxbednarczyk/origin/proxy_v2
deoxykev Dec 6, 2023
9d6cedb
update vendor path for generate_readable_outline.go
deoxykev Dec 6, 2023
0e940ec
fix tailwind css builder path
deoxykev Dec 6, 2023
6a5b85f
add subdomain url extractor; add 3p script blocker modifier
deoxykev Dec 6, 2023
4779229
add raw handler support
deoxykev Dec 7, 2023
8166eb3
add ruleset path support
deoxykev Dec 7, 2023
be68ae7
add gitignore for air
deoxykev Dec 7, 2023
1ebb486
move ruleset and raw endpoints to /api/*, update docs, fix ruleset ya…
deoxykev Dec 7, 2023
df19209
fix content-type not set regression on main proxy handler
deoxykev Dec 7, 2023
4cf2f8c
for outline path content type to always be text/html
deoxykev Dec 7, 2023
3aad9cf
improve yaml content type for display in browser; improve api ergonomics
deoxykev Dec 7, 2023
0b084f4
cleanup handlers directory
deoxykev Dec 7, 2023
c9bb0f6
WIP endpoint for listing available modifiers for frontend
deoxykev Dec 7, 2023
c870cd6
add list modifiers api endpoint
deoxykev Dec 7, 2023
dc82db8
Migrate js to script and make input required
joncrangle Dec 8, 2023
8e6a6aa
fix tailwind css builder for github action
deoxykev Dec 8, 2023
518f4d6
Migrate code and utilize api/modifiers endpoint
joncrangle Dec 8, 2023
aabc34b
Delete handlers/api_modifiers_structdef.gen.go
joncrangle Dec 8, 2023
424893a
Undo delete -> don't merge
joncrangle Dec 8, 2023
b76a941
Remove extra quote
joncrangle Dec 8, 2023
b94e64a
Empty array instead of empty object in null coalesce
joncrangle Dec 8, 2023
7661c66
#65 use full URL in package line
ladddder Dec 8, 2023
5bb6b87
Merge pull request #68 from everywall/fix/proxy_v2/add-package-urls
deoxykev Dec 8, 2023
81c9982
fix title on outline generatation if it contains a ;
deoxykev Dec 8, 2023
b3d799e
a11y improvements
joncrangle Dec 8, 2023
cc42ce1
Generated stylesheet
Dec 8, 2023
de640ce
Update title link styles
joncrangle Dec 8, 2023
4d37046
Generated stylesheet
Dec 8, 2023
9533f66
Update title link styles
joncrangle Dec 8, 2023
165ffce
Update title style
joncrangle Dec 8, 2023
22f0007
improve outline UX; add print mode and reading time estimation
deoxykev Dec 8, 2023
2f6a67f
Generated stylesheet
Dec 8, 2023
9fa0018
fix date formatting in outline
deoxykev Dec 8, 2023
c8a3c55
Work on js syntax highlighting in textarea
joncrangle Dec 8, 2023
b0af028
Generated stylesheet
Dec 8, 2023
7d379f9
Handle existing values, begin work on json2yaml
joncrangle Dec 9, 2023
8ffaa5f
Generated stylesheet
Dec 9, 2023
27c3892
add modify incoming scripts with regex modifier
deoxykev Dec 9, 2023
22533dc
improve ruleset unmarshalling behavior if there isnt a top level rule…
deoxykev Dec 9, 2023
f165a40
update ruleset
deoxykev Dec 9, 2023
82b5a74
begin migrating old v1 rulesets to v2 rulesets
deoxykev Dec 9, 2023
1e41e6f
Export to yaml
joncrangle Dec 10, 2023
6effb51
fix: styling bug in code / textarea
joncrangle Dec 10, 2023
0082acf
Update tags to avoid devtools issues
joncrangle Dec 10, 2023
8c741f0
Link to playground
joncrangle Dec 10, 2023
9159d44
Generated stylesheet
Dec 10, 2023
16df26c
Remove contribute rules link
joncrangle Dec 10, 2023
6a9d010
Merge branch 'origin/proxy_v2' into proxy_v2/playground
joncrangle Dec 11, 2023
3985201
Generated stylesheet
Dec 11, 2023
70033b8
Update import to url
joncrangle Dec 11, 2023
0940bbb
Merge pull request #67 from joncrangle/proxy_v2/playground
deoxykev Dec 11, 2023
02eb069
Generate struct defs
joncrangle Dec 13, 2023
c2d6a2c
Generate styles
joncrangle Dec 13, 2023
ad415be
Add error page when accept header is text/html
joncrangle Dec 13, 2023
10d4b68
Undo print view after printing, a11y, styling and prettier
joncrangle Dec 13, 2023
5492921
Common footer to outline page
joncrangle Dec 13, 2023
f901e4a
Common footer to outline page
joncrangle Dec 13, 2023
8947647
Generated stylesheet
Dec 13, 2023
ee26eaf
Simpler error return for non text/html
joncrangle Dec 13, 2023
b8fb930
Merge pull request #69 from everywall/errorpage
deoxykev Dec 13, 2023
e8255bd
Use CreateAPIErrReader for error_page middleware
joncrangle Dec 15, 2023
909bca5
Generated stylesheet
Dec 15, 2023
e4155f1
Undo uncomment of chain._reset
joncrangle Dec 15, 2023
a1b6230
Merge branch 'origin/proxy_v2' of https://github.com/everywall/ladder…
joncrangle Dec 15, 2023
88dce97
tweak error page middleware to return proper json response if on API …
deoxykev Dec 15, 2023
251b7e3
Add tailwind watch to air; use tailwind native minify
joncrangle Dec 16, 2023
01efe42
Remove pnpm watch from pre_cmd
joncrangle Dec 16, 2023
2dcc832
fix ruleset application bug where rulesets that apply other rulesets …
deoxykev Dec 16, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .air.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@ tmp_dir = "tmp"
bin = "./tmp/main"
cmd = "go build -o ./tmp/main ./cmd"
delay = 1000
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
exclude_file = []
exclude_dir = ["assets", "tmp", "vendor", "testdata",]
exclude_file = ["proxychain/ruleset/rule_resmod_types.gen.go", "proxychain/ruleset/rule_reqmod_types.gen.go", "handlers/api_modifiers_structdef.gen.go"]
exclude_regex = ["_test.go"]
exclude_unchanged = false
follow_symlink = false
full_bin = "RULESET=./ruleset.yaml ./tmp/main"
full_bin = "./tmp/main --ruleset ./rulesets_v2"
include_dir = []
include_ext = ["go", "tpl", "tmpl", "yaml", "html"]
include_ext = ["go", "tpl", "tmpl", "yaml", "html", "js"]
include_file = []
kill_delay = "0s"
log = "build-errors.log"
poll = false
poll_interval = 0
post_cmd = []
pre_cmd = ["echo 'dev' > handlers/VERSION"]
pre_cmd = ["git submodule update --init --recursive; git rev-parse --short HEAD > handlers/VERSION; git rev-parse --short HEAD > cmd/VERSION; cd proxychain/codegen && go run codegen.go && cd ../../handlers/api_modifiers_codegen && go run api_modifiers_codegen.go"]
rerun = false
rerun_delay = 500
send_interrupt = false
Expand Down
12 changes: 8 additions & 4 deletions .github/workflows/build-css.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ name: Build Tailwind CSS
on:
push:
paths:
- "handlers/error_page.html"
- "handlers/form.html"
- "handlers/playground.html"
- "proxychain/responsemodifiers/vendor/generate_readable_outline.html"
workflow_dispatch:

jobs:
Expand All @@ -27,16 +30,17 @@ jobs:
name: Build Tailwind CSS
run: pnpm build
-
name: Commit generated stylesheet
name: Commit generated stylesheet for handlers/styles.css
run: |
if git diff --quiet cmd/styles.css; then
if git diff --quiet handlers/styles.css; then
echo "No changes to commit."
exit 0
else
echo "Changes detected, committing..."
git config --global user.name "Github action"
git config --global user.email "username@users.noreply.github.com"
git add cmd
git add handlers
git add proxychain/responsemodifiers/vendor/
git commit -m "Generated stylesheet"
git push
fi
fi
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# dev binary
ladder
tmp/main
tmp

VERSION
output.css
output.css
.aider*
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[submodule "proxychain/responsemodifiers/vendor/ddg-tracker-surrogates"]
path = proxychain/responsemodifiers/vendor/ddg-tracker-surrogates
url = https://github.com/duckduckgo/tracker-surrogates
[submodule "proxychain/requestmodifiers/vendor/ua-parser-js"]
path = proxychain/requestmodifiers/vendor/ua-parser-js
url = https://github.com/faisalman/ua-parser-js.git
6 changes: 1 addition & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ COPY . .

RUN go mod download

RUN CGO_ENABLED=0 GOOS=linux go build -o ladder cmd/main.go
RUN make build

FROM debian:12-slim as release

Expand All @@ -18,8 +18,4 @@ RUN chmod +x /app/ladder

RUN apt update && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/*

#EXPOSE 8080

#ENTRYPOINT ["/usr/bin/dumb-init", "--"]

CMD ["sh", "-c", "/app/ladder"]
13 changes: 12 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
build:
cd proxychain/codegen && go run codegen.go
cd handlers/api_modifiers_codegen && go run api_modifiers_codegen.go
git submodule update --init --recursive
git rev-parse --short HEAD > handlers/VERSION
git rev-parse --short HEAD > cmd/VERSION
go build -o ladder -ldflags="-s -w" cmd/main.go

lint:
gofumpt -l -w .
golangci-lint run -c .golangci-lint.yaml --fix
Expand All @@ -7,4 +15,7 @@ lint:

install-linters:
go install mvdan.cc/gofumpt@latest
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2

run:
go run ./cmd/.
21 changes: 17 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,18 +91,28 @@ Or create a bookmark with the following URL:
```javascript
javascript:window.location.href="http://localhost:8080/"+location.href
```
### Outline
```bash
curl -X GET "http://localhost:8080/outline/https://www.example.com"
```

### API
```bash
curl -X GET "http://localhost:8080/api/https://www.example.com"
curl -X GET "http://localhost:8080/api/content/https://www.example.com"
```

### RAW
http://localhost:8080/raw/https://www.example.com
http://localhost:8080/api/raw/https://www.example.com


### Running Ruleset
http://localhost:8080/ruleset
http://localhost:8080/api/ruleset

### Running Rule
http://localhost:8080/api/ruleset/https://example.com

### List available modifiers
http://localhost:8080/api/modifiers

## Configuration

Expand Down Expand Up @@ -189,7 +199,10 @@ There is a basic ruleset available in a separate repository [ruleset.yaml](https
To run a development server at http://localhost:8080:

```bash
echo "dev" > handlers/VERSION
git clone git@github.com-ladddder:everywall/ladder.git
git submodule update --init --recursive
echo "dev " > handlers/VERSION
echo "dev " > cmd/VERSION
RULESET="./ruleset.yaml" go run cmd/main.go
```

Expand Down
130 changes: 81 additions & 49 deletions cmd/main.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
package main

import (
"embed"
_ "embed"
"fmt"
"log"
"os"
"strings"

"ladder/handlers"
"ladder/handlers/cli"
"github.com/everywall/ladder/handlers"
"github.com/everywall/ladder/internal/cli"

"github.com/everywall/ladder/proxychain/requestmodifiers/bot"
ruleset_v2 "github.com/everywall/ladder/proxychain/ruleset"

"github.com/akamensky/argparse"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/basicauth"
"github.com/gofiber/fiber/v2/middleware/favicon"
)

//go:embed favicon.ico
var faviconData string

//go:embed styles.css
var cssData embed.FS
//go:embed VERSION
var version string

func main() {
parser := argparse.NewParser("ladder", "Every Wall needs a Ladder")
Expand All @@ -41,6 +38,23 @@ func main() {
Help: "This will spawn multiple processes listening",
})

verbose := parser.Flag("v", "verbose", &argparse.Options{
Required: false,
Help: "Adds verbose logging",
})

randomGoogleBot := parser.Flag("", "random-googlebot", &argparse.Options{
Required: false,
Help: "Update the list of trusted Googlebot IPs, and use a random one for each masqueraded request",
})

randomBingBot := parser.Flag("", "random-bingbot", &argparse.Options{
Required: false,
Help: "Update the list of trusted Bingbot IPs, and use a random one for each masqueraded request",
})

// TODO: add version flag that reads from handers/VERSION

ruleset := parser.String("r", "ruleset", &argparse.Options{
Required: false,
Help: "File, Directory or URL to a ruleset.yaml. Overrides RULESET environment variable.",
Expand All @@ -51,35 +65,46 @@ func main() {
Help: "Compiles a directory of yaml files into a single ruleset.yaml. Requires --ruleset arg.",
})

mergeRulesetsGzip := parser.Flag("", "merge-rulesets-gzip", &argparse.Options{
Required: false,
Help: "Compiles a directory of yaml files into a single ruleset.gz Requires --ruleset arg.",
})

mergeRulesetsOutput := parser.String("", "merge-rulesets-output", &argparse.Options{
Required: false,
Help: "Specify output file for --merge-rulesets and --merge-rulesets-gzip. Requires --ruleset and --merge-rulesets args.",
Help: "Specify output file for --merge-rulesets. Requires --ruleset and --merge-rulesets args.",
})

err := parser.Parse(os.Args)
if err != nil {
fmt.Print(parser.Usage(err))
}

if *randomGoogleBot {
err := bot.GoogleBot.UpdatePool("https://developers.google.com/static/search/apis/ipranges/googlebot.json")
if err != nil {
fmt.Println("error while retrieving list of Googlebot IPs: " + err.Error())
fmt.Println("defaulting to known trusted Googlebot identity")
}
}

if *randomBingBot {
err := bot.BingBot.UpdatePool("https://www.bing.com/toolbox/bingbot.json")
if err != nil {
fmt.Println("error while retrieving list of Bingbot IPs: " + err.Error())
fmt.Println("defaulting to known trusted Bingbot identity")
}
}

// utility cli flag to compile ruleset directory into single ruleset.yaml
if *mergeRulesets || *mergeRulesetsGzip {
if *mergeRulesets {
output := os.Stdout

if *mergeRulesetsOutput != "" {
output, err = os.Create(*mergeRulesetsOutput)

if err != nil {
fmt.Println(err)
os.Exit(1)
}
}

err = cli.HandleRulesetMerge(*ruleset, *mergeRulesets, *mergeRulesetsGzip, output)
err = cli.HandleRulesetMerge(*ruleset, *mergeRulesets, output)
if err != nil {
fmt.Println(err)
os.Exit(1)
Expand All @@ -91,28 +116,30 @@ func main() {
*prefork = true
}

var rs ruleset_v2.IRuleset

switch {
case *ruleset != "":
rs, err = ruleset_v2.NewRuleset(*ruleset)
if err != nil {
fmt.Printf("ERROR: failed to load ruleset from %s\n", *ruleset)
}
case os.Getenv("RULESET") != "":
rs = ruleset_v2.NewRulesetFromEnv()
}

app := fiber.New(
fiber.Config{
Prefork: *prefork,
GETOnly: true,
Prefork: *prefork,
GETOnly: false,
ReadBufferSize: 4096 * 4, // increase max header size
DisableStartupMessage: true,
},
)

userpass := os.Getenv("USERPASS")
if userpass != "" {
userpass := strings.Split(userpass, ":")

app.Use(basicauth.New(basicauth.Config{
Users: map[string]string{
userpass[0]: userpass[1],
},
}))
}

app.Use(favicon.New(favicon.Config{
Data: []byte(faviconData),
URL: "/favicon.ico",
}))
app.Use(handlers.Auth())
app.Use(handlers.Favicon())
app.Use(handlers.RenderErrorPage())

if os.Getenv("NOLOGS") != "true" {
app.Use(func(c *fiber.Ctx) error {
Expand All @@ -122,23 +149,28 @@ func main() {
})
}

proxyOpts := &handlers.ProxyOptions{
Verbose: *verbose,
Ruleset: rs,
}

app.Get("/", handlers.Form)

app.Get("/styles.css", func(c *fiber.Ctx) error {
cssData, err := cssData.ReadFile("styles.css")
if err != nil {
return c.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
app.Get("styles.css", handlers.Styles)
app.Get("script.js", handlers.Script)
app.Get("playground-script.js", handlers.Script)

c.Set("Content-Type", "text/css")
app.All("api/raw/*", handlers.NewRawProxySiteHandler(proxyOpts))

return c.Send(cssData)
})
app.Get("api/modifiers", handlers.NewAPIModifersListHandler(proxyOpts))
app.Get("api/ruleset/*", handlers.NewRulesetSiteHandler(proxyOpts))
app.Get("api/content/*", handlers.NewAPIContentHandler("api/outline/*", proxyOpts))

app.Get("outline/*", handlers.NewOutlineHandler("outline/*", proxyOpts))
app.All("playground/*", handlers.PlaygroundHandler("playground/*", proxyOpts))

app.Get("ruleset", handlers.Ruleset)
app.Get("raw/*", handlers.Raw)
app.Get("api/*", handlers.Api)
app.Get("/*", handlers.ProxySite(*ruleset))
app.All("/*", handlers.NewProxySiteHandler(proxyOpts))

fmt.Println(cli.StartupMessage(version, *port, *ruleset))
log.Fatal(app.Listen(":" + *port))
}
1 change: 0 additions & 1 deletion cmd/styles.css

This file was deleted.

2 changes: 1 addition & 1 deletion docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ services:
ladder:
image: ghcr.io/everywall/ladder:latest
container_name: ladder
#build: .
build: .
#restart: always
#command: sh -c ./ladder
environment:
Expand Down
Loading