🗑️ Clean up project
This commit is contained in:
		| @@ -1,10 +0,0 @@ | ||||
| { | ||||
|     "configurations": [ | ||||
|         { | ||||
|             "type": "go", | ||||
|             "name": "Run RoadSign", | ||||
|             "goExecPath": "/opt/homebrew/bin/go", | ||||
|             "buildParams": ["git.solsynth.dev/goatworks/roadsign/pkg/cmd/server"], | ||||
|         }, | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,5 @@ | ||||
| /letsencrypt | ||||
| /certs | ||||
| /dist | ||||
|  | ||||
| .DS_Store | ||||
							
								
								
									
										16
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,16 +0,0 @@ | ||||
| { | ||||
|     // Use IntelliSense to learn about possible attributes. | ||||
|     // Hover to view descriptions of existing attributes. | ||||
|     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||
|     "version": "0.2.0", | ||||
|     "configurations": [ | ||||
|         { | ||||
|             "name": "Run RoadSign", | ||||
|             "type": "go", | ||||
|             "request": "launch", | ||||
|             "mode": "auto", | ||||
|             "program": "${workspaceFolder}/pkg/cmd/main.go", | ||||
|             "cwd": "${workspaceFolder}" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										24
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| # 🚦 RoadSign | ||||
|  | ||||
| A blazing fast reverse proxy with a lot of shining features. | ||||
| A blazing fast http server with a lot of shining features. | ||||
|  | ||||
| ## Features | ||||
|  | ||||
| @@ -10,18 +10,21 @@ A blazing fast reverse proxy with a lot of shining features. | ||||
| 4. Low Configuration | ||||
| 5. Analytics and Metrics | ||||
| 6. Integrate with CI/CD | ||||
| 7. Web management panel (Work in progres for v2, available in v1) | ||||
| 8. One-liner CLI | ||||
| 9. Open-source and free | ||||
| 10. **Blazing fast ⚡** | ||||
| 7. One-liner CLI | ||||
| 8. Open-source and free | ||||
| 9. **Blazing fast ⚡** | ||||
|  | ||||
| > [!IMPORTANT] | ||||
| > Currently roadsign haven't supported for server-side events. We are working on it. | ||||
| > At the same time, we don't support HTTP/2.0, [here's](https://github.com/gofiber/fiber/issues/262) the reason | ||||
| But, as we said, this isn't a reverse proxy. It's a http server. | ||||
| So we didn't recommend you directly use it as a gateway to users, because it doesn't support all the features of http. | ||||
| For example like doesn't support multiple site HTTPS, HTTP/2.0, HTTP/3 and Server-Side Events. | ||||
|  | ||||
| You can use RoadSign behind a reverse proxy like caddy, and let it handle the HTTP/2.0, HTTP/3 and all the other | ||||
| cutting-edge stuff. | ||||
|  | ||||
| ### How fast is it? | ||||
|  | ||||
| We use roadsign and nginx to host a same static file, and test them with [go-wrk](https://github.com/tsliwowicz/go-wrk). | ||||
| We use roadsign and nginx to host the same static file | ||||
| and test them with [go-wrk](https://github.com/tsliwowicz/go-wrk). | ||||
| Here's the result: | ||||
|  | ||||
| |     **Software**      | Total Requests | Requests per Seconds | Transfer per Seconds |  Avg Time   | Fastest Time | Slowest Time | Errors Count | | ||||
| @@ -69,7 +72,8 @@ go install git.solsynth.dev/goatworks/roadsign/pkg/cmd/rdc@latest | ||||
| ## Usage | ||||
|  | ||||
| To use roadsign, you need to add a configuration for it. Create a file locally. | ||||
| Name whatever you like. And follow our [documentation](https://wiki.smartsheep.studio/roadsign/configuration/index.html) to | ||||
| Name whatever you like. And follow our [documentation](https://wiki.smartsheep.studio/roadsign/configuration/index.html) | ||||
| to | ||||
| write it. | ||||
|  | ||||
| After configure, you need sync your config to remote server. Before that, add a connection between roadsign server and | ||||
|   | ||||
							
								
								
									
										20
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								go.mod
									
									
									
									
									
								
							| @@ -4,7 +4,8 @@ go 1.21.4 | ||||
|  | ||||
| require ( | ||||
| 	github.com/fasthttp/websocket v1.5.7 | ||||
| 	github.com/gofiber/fiber/v2 v2.52.0 | ||||
| 	github.com/gofiber/fiber/v2 v2.52.5 | ||||
| 	github.com/gofiber/template/html/v2 v2.1.0 | ||||
| 	github.com/google/uuid v1.6.0 | ||||
| 	github.com/json-iterator/go v1.1.12 | ||||
| 	github.com/rs/zerolog v1.31.0 | ||||
| @@ -12,13 +13,12 @@ require ( | ||||
| 	github.com/saracen/fastzip v0.1.11 | ||||
| 	github.com/spf13/viper v1.17.0 | ||||
| 	github.com/urfave/cli/v2 v2.26.0 | ||||
| 	github.com/valyala/fasthttp v1.51.0 | ||||
| 	github.com/valyala/fasthttp v1.56.0 | ||||
| ) | ||||
|  | ||||
| require ( | ||||
| 	github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect | ||||
| 	github.com/gofiber/template v1.8.2 // indirect | ||||
| 	github.com/gofiber/template/html/v2 v2.1.0 // indirect | ||||
| 	github.com/gofiber/utils v1.1.0 // indirect | ||||
| 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||
| 	github.com/modern-go/reflect2 v1.0.2 // indirect | ||||
| @@ -26,23 +26,23 @@ require ( | ||||
| 	github.com/saracen/zipextra v0.0.0-20220303013732-0187cb0159ea // indirect | ||||
| 	github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee // indirect | ||||
| 	github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect | ||||
| 	golang.org/x/net v0.20.0 // indirect | ||||
| 	golang.org/x/sync v0.5.0 // indirect | ||||
| 	golang.org/x/net v0.29.0 // indirect | ||||
| 	golang.org/x/sync v0.8.0 // indirect | ||||
| ) | ||||
|  | ||||
| require ( | ||||
| 	github.com/andybalholm/brotli v1.1.0 // indirect | ||||
| 	github.com/fsnotify/fsnotify v1.6.0 // indirect | ||||
| 	github.com/hashicorp/hcl v1.0.0 // indirect | ||||
| 	github.com/klauspost/compress v1.17.4 // indirect | ||||
| 	github.com/klauspost/compress v1.17.10 // indirect | ||||
| 	github.com/magiconair/properties v1.8.7 // indirect | ||||
| 	github.com/mattn/go-colorable v0.1.13 // indirect | ||||
| 	github.com/mattn/go-isatty v0.0.20 // indirect | ||||
| 	github.com/mattn/go-runewidth v0.0.15 // indirect | ||||
| 	github.com/mattn/go-runewidth v0.0.16 // indirect | ||||
| 	github.com/mitchellh/mapstructure v1.5.0 // indirect | ||||
| 	github.com/pelletier/go-toml/v2 v2.1.1 | ||||
| 	github.com/philhofer/fwd v1.1.2 // indirect | ||||
| 	github.com/rivo/uniseg v0.4.4 // indirect | ||||
| 	github.com/rivo/uniseg v0.4.7 // indirect | ||||
| 	github.com/sagikazarmark/locafero v0.3.0 // indirect | ||||
| 	github.com/sagikazarmark/slog-shim v0.1.0 // indirect | ||||
| 	github.com/sourcegraph/conc v0.3.0 // indirect | ||||
| @@ -56,8 +56,8 @@ require ( | ||||
| 	go.uber.org/atomic v1.9.0 // indirect | ||||
| 	go.uber.org/multierr v1.9.0 // indirect | ||||
| 	golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect | ||||
| 	golang.org/x/sys v0.16.0 // indirect | ||||
| 	golang.org/x/text v0.14.0 // indirect | ||||
| 	golang.org/x/sys v0.25.0 // indirect | ||||
| 	golang.org/x/text v0.18.0 // indirect | ||||
| 	gopkg.in/ini.v1 v1.67.0 // indirect | ||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||
| ) | ||||
|   | ||||
							
								
								
									
										36
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								go.sum
									
									
									
									
									
								
							| @@ -14,8 +14,8 @@ github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7z | ||||
| github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= | ||||
| github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= | ||||
| github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= | ||||
| github.com/gofiber/fiber/v2 v2.52.0 h1:S+qXi7y+/Pgvqq4DrSmREGiFwtB7Bu6+QFLuIHYw/UE= | ||||
| github.com/gofiber/fiber/v2 v2.52.0/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= | ||||
| github.com/gofiber/fiber/v2 v2.52.5 h1:tWoP1MJQjGEe4GB5TUGOi7P2E0ZMMRx5ZTG4rT+yGMo= | ||||
| github.com/gofiber/fiber/v2 v2.52.5/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= | ||||
| github.com/gofiber/template v1.8.2 h1:PIv9s/7Uq6m+Fm2MDNd20pAFFKt5wWs7ZBd8iV9pWwk= | ||||
| github.com/gofiber/template v1.8.2/go.mod h1:bs/2n0pSNPOkRa5VJ8zTIvedcI/lEYxzV3+YPXdBvq8= | ||||
| github.com/gofiber/template/html/v2 v2.1.0 h1:FjwzqhhdJpnhyCvav60Z1ytnBqOUr5sGO/aTeob9/ng= | ||||
| @@ -31,8 +31,8 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= | ||||
| github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= | ||||
| github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= | ||||
| github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | ||||
| github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= | ||||
| github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= | ||||
| github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= | ||||
| github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= | ||||
| github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||
| github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||||
| github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | ||||
| @@ -45,8 +45,8 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ | ||||
| github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | ||||
| github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= | ||||
| github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | ||||
| github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= | ||||
| github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= | ||||
| github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= | ||||
| github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= | ||||
| github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= | ||||
| github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||
| github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||||
| @@ -63,8 +63,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN | ||||
| github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= | ||||
| github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= | ||||
| github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= | ||||
| github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= | ||||
| github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= | ||||
| github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= | ||||
| github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= | ||||
| github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= | ||||
| github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= | ||||
| @@ -110,8 +110,8 @@ github.com/urfave/cli/v2 v2.26.0 h1:3f3AMg3HpThFNT4I++TKOejZO8yU55t3JnnSr4S4QEI= | ||||
| github.com/urfave/cli/v2 v2.26.0/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= | ||||
| github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= | ||||
| github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= | ||||
| github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= | ||||
| github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= | ||||
| github.com/valyala/fasthttp v1.56.0 h1:bEZdJev/6LCBlpdORfrLu/WOZXXxvrUQSiyniuaoW8U= | ||||
| github.com/valyala/fasthttp v1.56.0/go.mod h1:sReBt3XZVnudxuLOx4J/fMrJVorWRiWY2koQKgABiVI= | ||||
| github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= | ||||
| github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= | ||||
| github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= | ||||
| @@ -131,13 +131,13 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL | ||||
| golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | ||||
| golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= | ||||
| golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= | ||||
| golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= | ||||
| golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= | ||||
| golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= | ||||
| golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= | ||||
| golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= | ||||
| golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= | ||||
| golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= | ||||
| golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| @@ -148,8 +148,8 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc | ||||
| golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= | ||||
| golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= | ||||
| golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||
| golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | ||||
| golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= | ||||
| @@ -157,8 +157,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= | ||||
| golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= | ||||
| golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= | ||||
| golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= | ||||
| golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= | ||||
| golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= | ||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= | ||||
|   | ||||
| @@ -63,7 +63,7 @@ func main() { | ||||
| 	// Init sideload server | ||||
| 	hypertext.RunServer( | ||||
| 		sideload.InitSideload(), | ||||
| 		viper.GetStringSlice("hypertext.sideload_ports"), | ||||
| 		viper.GetStringSlice("sideload.ports"), | ||||
| 		[]string{}, | ||||
| 	) | ||||
|  | ||||
|   | ||||
| @@ -77,7 +77,7 @@ type CertificateConfig struct { | ||||
| func RunServer(app *fiber.App, ports []string, securedPorts []string) { | ||||
| 	var certs []CertificateConfig | ||||
| 	raw, _ := jsoniter.Marshal(viper.Get("hypertext.certificate")) | ||||
| 	jsoniter.Unmarshal(raw, &certs) | ||||
| 	_ = jsoniter.Unmarshal(raw, &certs) | ||||
|  | ||||
| 	tlsCfg := &tls.Config{ | ||||
| 		MinVersion:   tls.VersionTLS12, | ||||
| @@ -118,6 +118,8 @@ func RunServer(app *fiber.App, ports []string, securedPorts []string) { | ||||
| 				} | ||||
| 			} | ||||
| 		}() | ||||
|  | ||||
| 		log.Info().Msgf("Listening for %s... http://0.0.0.0%s", app.Config().AppName, port) | ||||
| 	} | ||||
|  | ||||
| 	for _, port := range securedPorts { | ||||
| @@ -131,5 +133,7 @@ func RunServer(app *fiber.App, ports []string, securedPorts []string) { | ||||
| 				log.Panic().Err(err).Msg("An error occurred when listening hypertext tls ports.") | ||||
| 			} | ||||
| 		}() | ||||
|  | ||||
| 		log.Info().Msgf("Listening for %s... https://0.0.0.0%s", app.Config().AppName, port) | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -68,7 +68,7 @@ | ||||
|     <div class="text-center"> | ||||
|         {{embed}} | ||||
|  | ||||
|         <footer class="mt-3 text-sm text-neutral"> | ||||
|         <footer class="mt-3 text-sm"> | ||||
|             <p> | ||||
|                 Powered by | ||||
|                 <a href="https://wiki.smartsheep.studio/roadsign/index.html" target="_blank" class="link link-primary"> | ||||
|   | ||||
| @@ -14,4 +14,4 @@ func init() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| var AppVersion = "2.0.0-delta2" | ||||
| var AppVersion = "2.1.0" | ||||
|   | ||||
| @@ -38,7 +38,7 @@ func makeHypertextResponse(c *fiber.Ctx, dest *Destination) error { | ||||
| 	} | ||||
|  | ||||
| 	limit := time.Duration(num) * time.Millisecond | ||||
| 	uri := dest.MakeUri(c) | ||||
| 	uri := dest.BuildUri(c) | ||||
| 	return proxy.Do(c, uri, &fasthttp.Client{ | ||||
| 		ReadTimeout:  limit, | ||||
| 		WriteTimeout: limit, | ||||
|   | ||||
| @@ -60,13 +60,13 @@ func (v *Destination) GetType() DestinationType { | ||||
| func (v *Destination) GetRawUri() (string, url.Values) { | ||||
| 	uri := strings.SplitN(v.Uri, "://", 2)[1] | ||||
| 	data := strings.SplitN(uri, "?", 2) | ||||
| 	data = append(data, " ") // Make data array least have two element | ||||
| 	data = append(data, " ") // Make the data array least have two elements | ||||
| 	qs, _ := url.ParseQuery(data[1]) | ||||
|  | ||||
| 	return data[0], qs | ||||
| } | ||||
|  | ||||
| func (v *Destination) MakeUri(ctx *fiber.Ctx) string { | ||||
| func (v *Destination) BuildUri(ctx *fiber.Ctx) string { | ||||
| 	var queries []string | ||||
| 	for k, v := range ctx.Queries() { | ||||
| 		parsed, _ := url.QueryUnescape(v) | ||||
| @@ -85,5 +85,5 @@ func (v *Destination) MakeUri(ctx *fiber.Ctx) string { | ||||
| } | ||||
|  | ||||
| func (v *Destination) MakeWebsocketUri(ctx *fiber.Ctx) string { | ||||
| 	return strings.Replace(v.MakeUri(ctx), "http", "ws", 1) | ||||
| 	return strings.Replace(v.BuildUri(ctx), "http", "ws", 1) | ||||
| } | ||||
|   | ||||
| @@ -2,15 +2,11 @@ package sideload | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"git.solsynth.dev/goatworks/roadsign/pkg/sideload/view" | ||||
| 	"github.com/gofiber/fiber/v2/middleware/filesystem" | ||||
| 	jsoniter "github.com/json-iterator/go" | ||||
| 	"net/http" | ||||
|  | ||||
| 	roadsign "git.solsynth.dev/goatworks/roadsign/pkg" | ||||
| 	"github.com/gofiber/fiber/v2" | ||||
| 	"github.com/gofiber/fiber/v2/middleware/basicauth" | ||||
| 	"github.com/gofiber/fiber/v2/middleware/logger" | ||||
| 	jsoniter "github.com/json-iterator/go" | ||||
| 	"github.com/rs/zerolog/log" | ||||
| 	"github.com/spf13/viper" | ||||
| ) | ||||
| @@ -25,7 +21,7 @@ func InitSideload() *fiber.App { | ||||
| 		JSONEncoder:           jsoniter.ConfigCompatibleWithStandardLibrary.Marshal, | ||||
| 		ProxyHeader:           fiber.HeaderXForwardedFor, | ||||
| 		EnablePrintRoutes:     viper.GetBool("debug.print_routes"), | ||||
| 		TrustedProxies:        viper.GetStringSlice("security.sideload_trusted_proxies"), | ||||
| 		TrustedProxies:        viper.GetStringSlice("sideload.trusted_proxies"), | ||||
| 		BodyLimit:             viper.GetInt("hypertext.limitation.max_body_size"), | ||||
| 	}) | ||||
|  | ||||
| @@ -52,7 +48,7 @@ func InitSideload() *fiber.App { | ||||
| 		cgi.Get("/regions", getRegions) | ||||
| 		cgi.Get("/regions/cfg/:id", getRegionConfig) | ||||
| 		cgi.Get("/applications", getApplications) | ||||
| 		cgi.Get("/applications/logs/:id", getApplicationLogs) | ||||
| 		cgi.Get("/applications/:id/logs", getApplicationLogs) | ||||
|  | ||||
| 		cgi.Post("/reload", doReload) | ||||
| 	} | ||||
| @@ -63,12 +59,5 @@ func InitSideload() *fiber.App { | ||||
| 		webhooks.Put("/sync/:slug", doSync) | ||||
| 	} | ||||
|  | ||||
| 	app.Use("/", filesystem.New(filesystem.Config{ | ||||
| 		Root:         http.FS(view.FS), | ||||
| 		PathPrefix:   "dist", | ||||
| 		Index:        "index.html", | ||||
| 		NotFoundFile: "dist/index.html", | ||||
| 	})) | ||||
|  | ||||
| 	return app | ||||
| } | ||||
|   | ||||
							
								
								
									
										27
									
								
								pkg/sideload/view/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								pkg/sideload/view/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,27 +0,0 @@ | ||||
| # Logs | ||||
| logs | ||||
| *.log | ||||
| npm-debug.log* | ||||
| yarn-debug.log* | ||||
| yarn-error.log* | ||||
| pnpm-debug.log* | ||||
| lerna-debug.log* | ||||
|  | ||||
| node_modules | ||||
| dist | ||||
| dist-ssr | ||||
| *.local | ||||
|  | ||||
| # Editor directories and files | ||||
| .vscode/* | ||||
| !.vscode/extensions.json | ||||
| .idea | ||||
| .DS_Store | ||||
| *.suo | ||||
| *.ntvs* | ||||
| *.njsproj | ||||
| *.sln | ||||
| *.sw? | ||||
|  | ||||
| *.lock | ||||
| package-lock.json | ||||
| @@ -1,6 +0,0 @@ | ||||
| package view | ||||
|  | ||||
| import "embed" | ||||
|  | ||||
| //go:embed all:dist | ||||
| var FS embed.FS | ||||
| @@ -1,13 +0,0 @@ | ||||
| <!doctype html> | ||||
| <html lang="en"> | ||||
|   <head> | ||||
|     <meta charset="UTF-8" /> | ||||
|     <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
|     <title>RoadSign Sideload</title> | ||||
|   </head> | ||||
|   <body> | ||||
|     <div id="root"></div> | ||||
|     <script type="module" src="/src/index.tsx"></script> | ||||
|   </body> | ||||
| </html> | ||||
| @@ -1,24 +0,0 @@ | ||||
| { | ||||
|   "name": "roadsign-sideload", | ||||
|   "private": true, | ||||
|   "version": "0.0.0", | ||||
|   "type": "module", | ||||
|   "scripts": { | ||||
|     "dev": "vite", | ||||
|     "build": "tsc && vite build", | ||||
|     "preview": "vite preview" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@solidjs/router": "^0.10.10", | ||||
|     "solid-js": "^1.8.7" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "autoprefixer": "^10.4.17", | ||||
|     "daisyui": "^4.6.0", | ||||
|     "postcss": "^8.4.33", | ||||
|     "tailwindcss": "^3.4.1", | ||||
|     "typescript": "^5.2.2", | ||||
|     "vite": "^5.0.8", | ||||
|     "vite-plugin-solid": "^2.8.0" | ||||
|   } | ||||
| } | ||||
| @@ -1,6 +0,0 @@ | ||||
| export default { | ||||
|   plugins: { | ||||
|     tailwindcss: {}, | ||||
|     autoprefixer: {}, | ||||
|   }, | ||||
| } | ||||
| @@ -1,3 +0,0 @@ | ||||
| @tailwind base; | ||||
| @tailwind components; | ||||
| @tailwind utilities; | ||||
| @@ -1,17 +0,0 @@ | ||||
| import "./index.css"; | ||||
|  | ||||
| /* @refresh reload */ | ||||
| import { render } from "solid-js/web"; | ||||
|  | ||||
| import { Route, Router } from "@solidjs/router"; | ||||
|  | ||||
| import RootLayout from "./layouts/RootLayout"; | ||||
| import Dashboard from "./pages/dashboard"; | ||||
|  | ||||
| const root = document.getElementById("root"); | ||||
|  | ||||
| render(() => ( | ||||
|     <Router root={RootLayout}> | ||||
|         <Route path="/" component={Dashboard} /> | ||||
|     </Router> | ||||
| ), root!); | ||||
| @@ -1,11 +0,0 @@ | ||||
| import Navbar from "./shared/Navbar"; | ||||
|  | ||||
| export default function RootLayout(props: any) { | ||||
|   return ( | ||||
|     <div> | ||||
|       <Navbar /> | ||||
|  | ||||
|       <main class="h-[calc(100vh-64px)]">{props.children}</main> | ||||
|     </div> | ||||
|   ); | ||||
| } | ||||
| @@ -1,62 +0,0 @@ | ||||
| import { For } from "solid-js"; | ||||
|  | ||||
| interface MenuItem { | ||||
|   label: string; | ||||
|   href: string; | ||||
| } | ||||
|  | ||||
| export default function Navbar() { | ||||
|   const nav: MenuItem[] = [{ label: "Dashboard", href: "/" }]; | ||||
|  | ||||
|   return ( | ||||
|     <div class="navbar bg-base-100 shadow-md"> | ||||
|       <div class="navbar-start"> | ||||
|         <div class="dropdown"> | ||||
|           <div tabIndex={0} role="button" class="btn btn-ghost lg:hidden"> | ||||
|             <svg | ||||
|               xmlns="http://www.w3.org/2000/svg" | ||||
|               class="h-5 w-5" | ||||
|               fill="none" | ||||
|               viewBox="0 0 24 24" | ||||
|               stroke="currentColor" | ||||
|             > | ||||
|               <path | ||||
|                 stroke-linecap="round" | ||||
|                 stroke-linejoin="round" | ||||
|                 stroke-width="2" | ||||
|                 d="M4 6h16M4 12h8m-8 6h16" | ||||
|               /> | ||||
|             </svg> | ||||
|           </div> | ||||
|           <ul | ||||
|             tabIndex={0} | ||||
|             class="menu menu-sm dropdown-content mt-3 z-[1] p-2 shadow bg-base-100 rounded-box w-52" | ||||
|           > | ||||
|             <For each={nav}> | ||||
|               {(item) => ( | ||||
|                 <li> | ||||
|                   <a href={item.href}>{item.label}</a> | ||||
|                 </li> | ||||
|               )} | ||||
|             </For> | ||||
|           </ul> | ||||
|         </div> | ||||
|         <a href="/" class="btn btn-ghost text-xl"> | ||||
|           RoadSign | ||||
|         </a> | ||||
|       </div> | ||||
|       <div class="navbar-center hidden lg:flex"> | ||||
|         <ul class="menu menu-horizontal px-1"> | ||||
|           <For each={nav}> | ||||
|             {(item) => ( | ||||
|               <li> | ||||
|                 <a href={item.href}>{item.label}</a> | ||||
|               </li> | ||||
|             )} | ||||
|           </For> | ||||
|         </ul> | ||||
|       </div> | ||||
|       <div class="navbar-end"></div> | ||||
|     </div> | ||||
|   ); | ||||
| } | ||||
| @@ -1,10 +0,0 @@ | ||||
| export default function Dashboard() { | ||||
|     return ( | ||||
|         <div class="h-full w-full flex justify-center items-center"> | ||||
|             <div class="max-w-96 text-center"> | ||||
|                 <h1 class="text-2xl font-bold">Hold on</h1> | ||||
|                 <p>Our brand new sideload administration panel is still in progress. For now, you can use sideload api and roadsign cli.</p> | ||||
|             </div> | ||||
|         </div> | ||||
|     ) | ||||
| } | ||||
							
								
								
									
										1
									
								
								pkg/sideload/view/src/vite-env.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								pkg/sideload/view/src/vite-env.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | ||||
| /// <reference types="vite/client" /> | ||||
| @@ -1,57 +0,0 @@ | ||||
| /** @type {import("tailwindcss").Config} */ | ||||
| export default { | ||||
|   content: ["./src/**/*.{js,jsx,ts,tsx}"], | ||||
|   theme: { | ||||
|     extend: {} | ||||
|   }, | ||||
|   daisyui: { | ||||
|     themes: [ | ||||
|       { | ||||
|         light: { | ||||
|           primary: "#4750a3", | ||||
|           secondary: "#93c5fd", | ||||
|           accent: "#0f766e", | ||||
|           info: "#67e8f9", | ||||
|           success: "#15803d", | ||||
|           warning: "#f97316", | ||||
|           error: "#dc2626", | ||||
|           neutral: "#2B3440", | ||||
|           "secondary-content": "oklch(98.71% 0.0106 342.55)", | ||||
|           "neutral-content": "#D7DDE4", | ||||
|           "base-100": "oklch(100% 0 0)", | ||||
|           "base-200": "#F2F2F2", | ||||
|           "base-300": "#E5E6E6", | ||||
|           "base-content": "#1f2937", | ||||
|           "color-scheme": "light", | ||||
|           "--rounded-box": "0", | ||||
|           "--rounded-btn": "0", | ||||
|           "--rounded-badge": "0", | ||||
|           "--tab-radius": "0" | ||||
|         } | ||||
|       }, | ||||
|       { | ||||
|         dark: { | ||||
|           primary: "#4750a3", | ||||
|           secondary: "#93c5fd", | ||||
|           accent: "#0f766e", | ||||
|           info: "#67e8f9", | ||||
|           success: "#15803d", | ||||
|           warning: "#f97316", | ||||
|           error: "#dc2626", | ||||
|           neutral: "#2a323c", | ||||
|           "neutral-content": "#A6ADBB", | ||||
|           "base-100": "#1d232a", | ||||
|           "base-200": "#191e24", | ||||
|           "base-300": "#15191e", | ||||
|           "base-content": "#A6ADBB", | ||||
|           "color-scheme": "dark", | ||||
|           "--rounded-box": "0", | ||||
|           "--rounded-btn": "0", | ||||
|           "--rounded-badge": "0", | ||||
|           "--tab-radius": "0" | ||||
|         } | ||||
|       } | ||||
|     ] | ||||
|   }, | ||||
|   plugins: [require("daisyui")] | ||||
| } | ||||
| @@ -1,26 +0,0 @@ | ||||
| { | ||||
|   "compilerOptions": { | ||||
|     "target": "ES2020", | ||||
|     "useDefineForClassFields": true, | ||||
|     "module": "ESNext", | ||||
|     "lib": ["ES2020", "DOM", "DOM.Iterable"], | ||||
|     "skipLibCheck": true, | ||||
|  | ||||
|     /* Bundler mode */ | ||||
|     "moduleResolution": "bundler", | ||||
|     "allowImportingTsExtensions": true, | ||||
|     "resolveJsonModule": true, | ||||
|     "isolatedModules": true, | ||||
|     "noEmit": true, | ||||
|     "jsx": "preserve", | ||||
|     "jsxImportSource": "solid-js", | ||||
|  | ||||
|     /* Linting */ | ||||
|     "strict": true, | ||||
|     "noUnusedLocals": true, | ||||
|     "noUnusedParameters": true, | ||||
|     "noFallthroughCasesInSwitch": true | ||||
|   }, | ||||
|   "include": ["src"], | ||||
|   "references": [{ "path": "./tsconfig.node.json" }] | ||||
| } | ||||
| @@ -1,10 +0,0 @@ | ||||
| { | ||||
|   "compilerOptions": { | ||||
|     "composite": true, | ||||
|     "skipLibCheck": true, | ||||
|     "module": "ESNext", | ||||
|     "moduleResolution": "bundler", | ||||
|     "allowSyntheticDefaultImports": true | ||||
|   }, | ||||
|   "include": ["vite.config.ts"] | ||||
| } | ||||
| @@ -1,6 +0,0 @@ | ||||
| import { defineConfig } from 'vite' | ||||
| import solid from 'vite-plugin-solid' | ||||
|  | ||||
| export default defineConfig({ | ||||
|   plugins: [solid()], | ||||
| }) | ||||
| @@ -3,16 +3,19 @@ id = "central" | ||||
| [debug] | ||||
| print_routes = false | ||||
|  | ||||
| [sideload] | ||||
| ports = [":81"] | ||||
| secured_ports = [] | ||||
| trusted_proxies = ["localhost"] | ||||
|  | ||||
| [hypertext] | ||||
| sideload_ports = [":81"] | ||||
| sideload_secured_ports = [] | ||||
| ports = [":8000"] | ||||
| secured_ports = [":8443"] | ||||
| secured_ports = [] | ||||
| force_https = false | ||||
|  | ||||
| [[hypertext.certificate]] | ||||
| key = "./certs/privkey.pem" | ||||
| pem = "./certs/fullchain.pem" | ||||
| # [[hypertext.certificate]] | ||||
| # key = "./certs/privkey.pem" | ||||
| # pem = "./certs/fullchain.pem" | ||||
|  | ||||
| [hypertext.limitation] | ||||
| max_body_size = 549_755_813_888 # 512 GiB | ||||
| @@ -30,5 +33,4 @@ traces_limit = 256 | ||||
| prefork = false | ||||
|  | ||||
| [security] | ||||
| sideload_trusted_proxies = ["localhost"] | ||||
| credential = "e81f43f32d934271af6322e5376f5f59" | ||||
|   | ||||
							
								
								
									
										2
									
								
								test/data/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								test/data/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1 +1 @@ | ||||
| /warden | ||||
| /capital | ||||
| @@ -1,15 +1,15 @@ | ||||
| id = "example-region" | ||||
| id = "capital" | ||||
|  | ||||
| [[locations]] | ||||
| id = "example-warden" | ||||
| host = ["localhost:8000"] | ||||
| path = ["/"] | ||||
| id = "capital" | ||||
| hosts = ["localhost:8000"] | ||||
| paths = ["/"] | ||||
| [[locations.destinations]] | ||||
| id = "example-warden-destination" | ||||
| uri = "http://localhost:4321" | ||||
| id = "capital-destination" | ||||
| uri = "http://localhost:3000" | ||||
|  | ||||
| [[applications]] | ||||
| id = "example-warden-app" | ||||
| workdir = "../data/warden" | ||||
| command = ["node", "dist/server/entry.mjs"] | ||||
| environment = ["PUBLIC_CMS=https://smartsheep.studio"] | ||||
| id = "capital-app" | ||||
| workdir = "../data/capital" | ||||
| command = ["node", "server/index.mjs"] | ||||
| environment = [] | ||||
| @@ -1,18 +1,21 @@ | ||||
| id = "central-dc" | ||||
|  | ||||
| [debug] | ||||
| print_routes = true | ||||
| print_routes = false | ||||
|  | ||||
| [sideload] | ||||
| ports = [":81"] | ||||
| secured_ports = [] | ||||
| trusted_proxies = ["localhost"] | ||||
|  | ||||
| [hypertext] | ||||
| sideload_ports = [":81"] | ||||
| sideload_secured_ports = [] | ||||
| ports = [":8000"] | ||||
| secured_ports = [] | ||||
| force_https = false | ||||
|  | ||||
| [hypertext.certificate] | ||||
| redirect = false | ||||
| sideload_key = "./cert.key" | ||||
| sideload_pem = "./cert.pem" | ||||
| key = "./cert.key" | ||||
| pem = "./cert.pem" | ||||
| # [[hypertext.certificate]] | ||||
| # key = "./certs/privkey.pem" | ||||
| # pem = "./certs/fullchain.pem" | ||||
|  | ||||
| [hypertext.limitation] | ||||
| max_body_size = 549_755_813_888 # 512 GiB | ||||
| @@ -21,11 +24,13 @@ max_qps = -1 | ||||
| [paths] | ||||
| configs = "./config" | ||||
|  | ||||
| [performance] | ||||
| [telemetry] | ||||
| request_logging = true | ||||
| network_timeout = 3_000 | ||||
| capture_traces = true | ||||
|  | ||||
| [performance] | ||||
| traces_limit = 256 | ||||
| prefork = false | ||||
|  | ||||
| [security] | ||||
| sideload_trusted_proxies = ["localhost"] | ||||
| credential = "e81f43f32d934271af6322e5376f5f59" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user