mirror of
https://github.com/neon-mmd/websurfx.git
synced 2024-11-21 21:48:21 -05:00
Merge branch 'rolling' into xss-fix
This commit is contained in:
commit
5fa5495601
45
.gitpod.yml
Normal file
45
.gitpod.yml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
---
|
||||||
|
image: ubuntu:latest
|
||||||
|
# Commands that will run on workspace start
|
||||||
|
tasks:
|
||||||
|
- name: Setup, Install & Build
|
||||||
|
- before: apt install cargo redis-server nodejs npm && cargo test
|
||||||
|
- init: cargo install cargo-watch
|
||||||
|
- command: redis-server --port 8080 & cargo watch -q -w "." -x "run"
|
||||||
|
# Ports to expose on workspace startup
|
||||||
|
ports:
|
||||||
|
- port: 8080
|
||||||
|
- onOpen: open-preview
|
||||||
|
- name: Website
|
||||||
|
- description: Website Preview
|
||||||
|
# vscode IDE setup
|
||||||
|
vscode:
|
||||||
|
extensions:
|
||||||
|
- vadimcn.vscode-lldb
|
||||||
|
- rust-lang.rust-analyzer
|
||||||
|
- bungcip.better-toml
|
||||||
|
- serayuzgur.crates
|
||||||
|
- usernamehw.errorlens
|
||||||
|
- DavidAnson.vscode-markdownlint
|
||||||
|
- esbenp.prettier-vscode
|
||||||
|
- stylelint.vscode-stylelint
|
||||||
|
- dbaeumer.vscode-eslint
|
||||||
|
- evgeniypeshkov.syntax-highlighter
|
||||||
|
- redhat.vscode-yaml
|
||||||
|
- ms-azuretools.vscode-docker
|
||||||
|
- GitHub.vscode-github-actions
|
||||||
|
- Catppuccin.catppuccin-vsc
|
||||||
|
- PKief.material-icon-theme
|
||||||
|
- tal7aouy.rainbow-bracket
|
||||||
|
- oderwat.indent-rainbow
|
||||||
|
- formulahendry.auto-rename-tag
|
||||||
|
- eamodio.gitlens
|
||||||
|
github:
|
||||||
|
prebuilds:
|
||||||
|
- master: true
|
||||||
|
- branches: true
|
||||||
|
- pullRequests: true
|
||||||
|
- pullRequestsFromForks: true
|
||||||
|
- addCheck: true
|
||||||
|
- addComment: false
|
||||||
|
- addBadge: true
|
@ -14,7 +14,7 @@ Know how to fix or improve a github action?. Consider Submitting a Pull request
|
|||||||
|
|
||||||
## Source Code
|
## Source Code
|
||||||
|
|
||||||
You should know atleast one of the things below to start contributing:
|
You should know at least one of the things below to start contributing:
|
||||||
|
|
||||||
- Rust basics
|
- Rust basics
|
||||||
- Actix-web crate basics
|
- Actix-web crate basics
|
||||||
|
92
Cargo.lock
generated
92
Cargo.lock
generated
@ -201,7 +201,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9"
|
checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"actix-router",
|
"actix-router",
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
@ -620,7 +620,7 @@ dependencies = [
|
|||||||
"itoa 1.0.6",
|
"itoa 1.0.6",
|
||||||
"matches",
|
"matches",
|
||||||
"phf 0.10.1",
|
"phf 0.10.1",
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"smallvec 1.10.0",
|
"smallvec 1.10.0",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
@ -633,7 +633,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
|
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 2.0.18",
|
"syn 2.0.22",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -643,7 +643,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
|
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"convert_case",
|
"convert_case",
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"rustc_version 0.4.0",
|
"rustc_version 0.4.0",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
@ -771,7 +771,7 @@ version = "0.1.8"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
|
checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
"synstructure",
|
"synstructure",
|
||||||
@ -1082,7 +1082,7 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"mac",
|
"mac",
|
||||||
"markup5ever 0.11.0",
|
"markup5ever 0.11.0",
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
@ -1662,9 +1662,9 @@ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl"
|
name = "openssl"
|
||||||
version = "0.10.54"
|
version = "0.10.55"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "69b3f656a17a6cbc115b5c7a40c616947d213ba182135b014d6051b73ab6f019"
|
checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
@ -1681,9 +1681,9 @@ version = "0.1.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 2.0.18",
|
"syn 2.0.22",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1694,9 +1694,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl-sys"
|
name = "openssl-sys"
|
||||||
version = "0.9.88"
|
version = "0.9.90"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617"
|
checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"libc",
|
"libc",
|
||||||
@ -1773,9 +1773,9 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pest"
|
name = "pest"
|
||||||
version = "2.6.1"
|
version = "2.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "16833386b02953ca926d19f64af613b9bf742c48dcd5e09b32fbfc9740bf84e2"
|
checksum = "f73935e4d55e2abf7f130186537b19e7a4abc886a0252380b59248af473a3fc9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"ucd-trie",
|
"ucd-trie",
|
||||||
@ -1783,9 +1783,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pest_derive"
|
name = "pest_derive"
|
||||||
version = "2.6.1"
|
version = "2.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7763190f9406839f99e5197afee8c9e759969f7dbfa40ad3b8dbee8757b745b5"
|
checksum = "aef623c9bbfa0eedf5a0efba11a5ee83209c326653ca31ff019bec3a95bfff2b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pest",
|
"pest",
|
||||||
"pest_generator",
|
"pest_generator",
|
||||||
@ -1793,22 +1793,22 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pest_generator"
|
name = "pest_generator"
|
||||||
version = "2.6.1"
|
version = "2.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "249061b22e99973da1f5f5f1410284419e283bb60b79255bf5f42a94b66a2e00"
|
checksum = "b3e8cba4ec22bada7fc55ffe51e2deb6a0e0db2d0b7ab0b103acc80d2510c190"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pest",
|
"pest",
|
||||||
"pest_meta",
|
"pest_meta",
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 2.0.18",
|
"syn 2.0.22",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pest_meta"
|
name = "pest_meta"
|
||||||
version = "2.6.1"
|
version = "2.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "457c310cfc9cf3f22bc58901cc7f0d3410ac5d6298e432a4f9a6138565cb6df6"
|
checksum = "a01f71cb40bd8bb94232df14b946909e14660e33fc05db3e50ae2a82d7ea0ca0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"pest",
|
"pest",
|
||||||
@ -1913,7 +1913,7 @@ dependencies = [
|
|||||||
"phf_generator 0.10.0",
|
"phf_generator 0.10.0",
|
||||||
"phf_shared 0.10.0",
|
"phf_shared 0.10.0",
|
||||||
"proc-macro-hack",
|
"proc-macro-hack",
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
@ -1992,9 +1992,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.60"
|
version = "1.0.63"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"
|
checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
@ -2024,7 +2024,7 @@ version = "1.0.28"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
|
checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2548,16 +2548,16 @@ version = "1.0.164"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
|
checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 2.0.18",
|
"syn 2.0.22",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.97"
|
version = "1.0.99"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bdf3bf93142acad5821c99197022e170842cdbc1c30482b98750c688c640842a"
|
checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa 1.0.6",
|
"itoa 1.0.6",
|
||||||
"ryu",
|
"ryu",
|
||||||
@ -2733,7 +2733,7 @@ checksum = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"phf_generator 0.7.24",
|
"phf_generator 0.7.24",
|
||||||
"phf_shared 0.7.24",
|
"phf_shared 0.7.24",
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"string_cache_shared",
|
"string_cache_shared",
|
||||||
]
|
]
|
||||||
@ -2746,7 +2746,7 @@ checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"phf_generator 0.10.0",
|
"phf_generator 0.10.0",
|
||||||
"phf_shared 0.10.0",
|
"phf_shared 0.10.0",
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -2773,18 +2773,18 @@ version = "1.0.109"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.18"
|
version = "2.0.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
|
checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
@ -2795,7 +2795,7 @@ version = "0.12.6"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
|
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
"unicode-xid 0.2.4",
|
"unicode-xid 0.2.4",
|
||||||
@ -2850,9 +2850,9 @@ version = "1.0.40"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
|
checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 2.0.18",
|
"syn 2.0.22",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2994,9 +2994,9 @@ version = "2.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
|
checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 2.0.18",
|
"syn 2.0.22",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3322,9 +3322,9 @@ dependencies = [
|
|||||||
"bumpalo",
|
"bumpalo",
|
||||||
"log",
|
"log",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 2.0.18",
|
"syn 2.0.22",
|
||||||
"wasm-bindgen-shared",
|
"wasm-bindgen-shared",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -3356,9 +3356,9 @@ version = "0.2.87"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
|
checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.60",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.28",
|
"quote 1.0.28",
|
||||||
"syn 2.0.18",
|
"syn 2.0.22",
|
||||||
"wasm-bindgen-backend",
|
"wasm-bindgen-backend",
|
||||||
"wasm-bindgen-shared",
|
"wasm-bindgen-shared",
|
||||||
]
|
]
|
||||||
@ -3381,7 +3381,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "websurfx"
|
name = "websurfx"
|
||||||
version = "0.13.0"
|
version = "0.13.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"actix-files",
|
"actix-files",
|
||||||
"actix-web",
|
"actix-web",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "websurfx"
|
name = "websurfx"
|
||||||
version = "0.13.0"
|
version = "0.13.5"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "An open-source alternative to Searx that provides clean, ad-free, and organic results with incredible speed while keeping privacy and security in mind."
|
description = "An open-source alternative to Searx that provides clean, ad-free, and organic results with incredible speed while keeping privacy and security in mind."
|
||||||
repository = "https://github.com/neon-mmd/websurfx"
|
repository = "https://github.com/neon-mmd/websurfx"
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
## Author's checklist
|
## Author's checklist
|
||||||
|
|
||||||
<!-- additional notes for reviewiers -->
|
<!-- additional notes for reviewers -->
|
||||||
|
|
||||||
## Related issues
|
## Related issues
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
- **Community**
|
- **Community**
|
||||||
- [📊 System Requirements](#system-requirements-)
|
- [📊 System Requirements](#system-requirements-)
|
||||||
- [🗨️ FAQ (Frequently Asked Questions)](#faq-frequently-asked-questions-)
|
- [🗨️ FAQ (Frequently Asked Questions)](#faq-frequently-asked-questions-)
|
||||||
- [📣 More Contributers Wanted](#more-contributers-wanted-)
|
- [📣 More Contributors Wanted](#more-contributors-wanted-)
|
||||||
- [💖 Supporting Websurfx](#supporting-websurfx-)
|
- [💖 Supporting Websurfx](#supporting-websurfx-)
|
||||||
- [📘 Documentation](#documentation-)
|
- [📘 Documentation](#documentation-)
|
||||||
- [🛣️ Roadmap](#roadmap-)
|
- [🛣️ Roadmap](#roadmap-)
|
||||||
@ -165,7 +165,7 @@ Websurfx is based on Rust due to its memory safety features, which prevents vuln
|
|||||||
|
|
||||||
**[⬆️ Back to Top](#--)**
|
**[⬆️ Back to Top](#--)**
|
||||||
|
|
||||||
# More Contributers Wanted 📣
|
# More Contributors Wanted 📣
|
||||||
|
|
||||||
We are looking for more willing contributors to help grow this project. For more information on how you can contribute, check out the [project board](https://github.com/neon-mmd/websurfx/projects?query=is%3Aopen) and the [CONTRIBUTING.md](CONTRIBUTING.md) file for guidelines and rules for making contributions.
|
We are looking for more willing contributors to help grow this project. For more information on how you can contribute, check out the [project board](https://github.com/neon-mmd/websurfx/projects?query=is%3Aopen) and the [CONTRIBUTING.md](CONTRIBUTING.md) file for guidelines and rules for making contributions.
|
||||||
|
|
||||||
|
@ -30,8 +30,8 @@ function navigate_backward() {
|
|||||||
let page = parseInt(searchParams.get('page'));
|
let page = parseInt(searchParams.get('page'));
|
||||||
|
|
||||||
if (isNaN(page)) {
|
if (isNaN(page)) {
|
||||||
page = 1;
|
page = 0;
|
||||||
} else if (page > 1) {
|
} else if (page > 0) {
|
||||||
page--;
|
page--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,46 +24,35 @@ pub struct Config {
|
|||||||
pub binding_ip_addr: String,
|
pub binding_ip_addr: String,
|
||||||
pub style: Style,
|
pub style: Style,
|
||||||
pub redis_connection_url: String,
|
pub redis_connection_url: String,
|
||||||
pub aggregator: AggreatorConfig,
|
pub aggregator: AggregatorConfig,
|
||||||
pub logging: bool,
|
pub logging: bool,
|
||||||
pub debug: bool,
|
pub debug: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Configuration options for the aggregator.
|
/// Configuration options for the aggregator.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct AggreatorConfig {
|
pub struct AggregatorConfig {
|
||||||
/// Whether to introduce a random delay before sending the request to the search engine.
|
/// Whether to introduce a random delay before sending the request to the search engine.
|
||||||
pub random_delay: bool,
|
pub random_delay: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
/// A function which parses the config.lua file and puts all the parsed options in the newly
|
/// A function which parses the config.lua file and puts all the parsed options in the newly
|
||||||
/// contructed Config struct and returns it.
|
/// constructed Config struct and returns it.
|
||||||
///
|
///
|
||||||
/// # Error
|
/// # Error
|
||||||
///
|
///
|
||||||
/// Returns a lua parse error if parsing of the config.lua file fails or has a syntax error
|
/// Returns a lua parse error if parsing of the config.lua file fails or has a syntax error
|
||||||
/// or io error if the config.lua file doesn't exists otherwise it returns a newly contructed
|
/// or io error if the config.lua file doesn't exists otherwise it returns a newly constructed
|
||||||
/// Config struct with all the parsed config options from the parsed config file.
|
/// Config struct with all the parsed config options from the parsed config file.
|
||||||
pub fn parse() -> Result<Self, Box<dyn std::error::Error>> {
|
pub fn parse() -> Result<Self, Box<dyn std::error::Error>> {
|
||||||
Lua::new().context(|context| -> Result<Self, Box<dyn std::error::Error>> {
|
Lua::new().context(|context| -> Result<Self, Box<dyn std::error::Error>> {
|
||||||
let globals = context.globals();
|
let globals = context.globals();
|
||||||
|
|
||||||
context
|
context
|
||||||
.load(&fs::read_to_string(
|
.load(&fs::read_to_string(Config::get_config_path()?)?)
|
||||||
Config::handle_different_config_file_path()?,
|
|
||||||
)?)
|
|
||||||
.exec()?;
|
.exec()?;
|
||||||
|
|
||||||
let production_use = globals.get::<_, bool>("production_use")?;
|
|
||||||
let aggregator_config = if production_use {
|
|
||||||
AggreatorConfig { random_delay: true }
|
|
||||||
} else {
|
|
||||||
AggreatorConfig {
|
|
||||||
random_delay: false,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(Config {
|
Ok(Config {
|
||||||
port: globals.get::<_, u16>("port")?,
|
port: globals.get::<_, u16>("port")?,
|
||||||
binding_ip_addr: globals.get::<_, String>("binding_ip_addr")?,
|
binding_ip_addr: globals.get::<_, String>("binding_ip_addr")?,
|
||||||
@ -72,7 +61,9 @@ impl Config {
|
|||||||
globals.get::<_, String>("colorscheme")?,
|
globals.get::<_, String>("colorscheme")?,
|
||||||
),
|
),
|
||||||
redis_connection_url: globals.get::<_, String>("redis_connection_url")?,
|
redis_connection_url: globals.get::<_, String>("redis_connection_url")?,
|
||||||
aggregator: aggregator_config,
|
aggregator: AggregatorConfig {
|
||||||
|
random_delay: globals.get::<_, bool>("production_use")?,
|
||||||
|
},
|
||||||
logging: globals.get::<_, bool>("logging")?,
|
logging: globals.get::<_, bool>("logging")?,
|
||||||
debug: globals.get::<_, bool>("debug")?,
|
debug: globals.get::<_, bool>("debug")?,
|
||||||
})
|
})
|
||||||
@ -90,35 +81,37 @@ impl Config {
|
|||||||
/// one (3).
|
/// one (3).
|
||||||
/// 3. `websurfx/` (under project folder ( or codebase in other words)) if it is not present
|
/// 3. `websurfx/` (under project folder ( or codebase in other words)) if it is not present
|
||||||
/// here then it returns an error as mentioned above.
|
/// here then it returns an error as mentioned above.
|
||||||
fn handle_different_config_file_path() -> Result<String, Box<dyn std::error::Error>> {
|
fn get_config_path() -> Result<String, Box<dyn std::error::Error>> {
|
||||||
if Path::new(
|
// check user config
|
||||||
format!(
|
|
||||||
"{}/.config/{}/config.lua",
|
let path = format!(
|
||||||
std::env::var("HOME").unwrap(),
|
"{}/.config/{}/config.lua",
|
||||||
COMMON_DIRECTORY_NAME
|
std::env::var("HOME").unwrap(),
|
||||||
)
|
COMMON_DIRECTORY_NAME
|
||||||
.as_str(),
|
);
|
||||||
)
|
if Path::new(path.as_str()).exists() {
|
||||||
.exists()
|
return Ok(format!(
|
||||||
{
|
|
||||||
Ok(format!(
|
|
||||||
"{}/.config/{}/{}",
|
"{}/.config/{}/{}",
|
||||||
std::env::var("HOME").unwrap(),
|
std::env::var("HOME").unwrap(),
|
||||||
COMMON_DIRECTORY_NAME,
|
COMMON_DIRECTORY_NAME,
|
||||||
CONFIG_FILE_NAME
|
CONFIG_FILE_NAME
|
||||||
))
|
));
|
||||||
} else if Path::new(
|
}
|
||||||
format!("/etc/xdg/{}/{}", COMMON_DIRECTORY_NAME, CONFIG_FILE_NAME).as_str(),
|
|
||||||
)
|
// look for config in /etc/xdg
|
||||||
.exists()
|
if Path::new(format!("/etc/xdg/{}/{}", COMMON_DIRECTORY_NAME, CONFIG_FILE_NAME).as_str())
|
||||||
{
|
|
||||||
Ok("/etc/xdg/websurfx/config.lua".to_string())
|
|
||||||
} else if Path::new(format!("./{}/{}", COMMON_DIRECTORY_NAME, CONFIG_FILE_NAME).as_str())
|
|
||||||
.exists()
|
.exists()
|
||||||
{
|
{
|
||||||
Ok("./websurfx/config.lua".to_string())
|
return Ok("/etc/xdg/websurfx/config.lua".to_string());
|
||||||
} else {
|
|
||||||
Err("Config file not found!!".to_string().into())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// use dev config
|
||||||
|
if Path::new(format!("./{}/{}", COMMON_DIRECTORY_NAME, CONFIG_FILE_NAME).as_str()).exists()
|
||||||
|
{
|
||||||
|
return Ok("./websurfx/config.lua".to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
// if no of the configs above exist, return error
|
||||||
|
Err("Config file not found!!".to_string().into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//! This module provides public models for handling, storing and serializing parsed config file
|
//! This module provides public models for handling, storing and serializing parsed config file
|
||||||
//! options from config.lua by grouping them togather.
|
//! options from config.lua by grouping them together.
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ pub async fn results(
|
|||||||
user_agent: &str,
|
user_agent: &str,
|
||||||
) -> Result<HashMap<String, RawSearchResult>, EngineError> {
|
) -> Result<HashMap<String, RawSearchResult>, EngineError> {
|
||||||
// Page number can be missing or empty string and so appropriate handling is required
|
// Page number can be missing or empty string and so appropriate handling is required
|
||||||
// so that upstream server recieves valid page number.
|
// so that upstream server receives valid page number.
|
||||||
let url: String = match page {
|
let url: String = match page {
|
||||||
1 => {
|
1 => {
|
||||||
format!("https://html.duckduckgo.com/html/?q={query}&s=&dc=&v=1&o=json&api=/d.js")
|
format!("https://html.duckduckgo.com/html/?q={query}&s=&dc=&v=1&o=json&api=/d.js")
|
||||||
@ -86,7 +86,7 @@ pub async fn results(
|
|||||||
let results: String = reqwest::Client::new()
|
let results: String = reqwest::Client::new()
|
||||||
.get(url)
|
.get(url)
|
||||||
.timeout(Duration::from_secs(5))
|
.timeout(Duration::from_secs(5))
|
||||||
.headers(header_map) // add spoofed headers to emulate human behaviour
|
.headers(header_map) // add spoofed headers to emulate human behavior
|
||||||
.send()
|
.send()
|
||||||
.await
|
.await
|
||||||
.into_report()
|
.into_report()
|
||||||
|
@ -13,7 +13,7 @@ use std::fmt;
|
|||||||
/// search engines.
|
/// search engines.
|
||||||
/// * `UnexpectedError` - This variant handles all the errors which are unexpected or occur rarely
|
/// * `UnexpectedError` - This variant handles all the errors which are unexpected or occur rarely
|
||||||
/// and are errors mostly related to failure in initialization of HeaderMap, Selector errors and
|
/// and are errors mostly related to failure in initialization of HeaderMap, Selector errors and
|
||||||
/// all other errors occuring within the code handling the `upstream search engines`.
|
/// all other errors occurring within the code handling the `upstream search engines`.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum EngineError {
|
pub enum EngineError {
|
||||||
EmptyResultSet,
|
EmptyResultSet,
|
||||||
|
@ -17,7 +17,7 @@ use crate::engines::{duckduckgo, searx};
|
|||||||
/// then removes duplicate results and if two results are found to be from two or more engines
|
/// then removes duplicate results and if two results are found to be from two or more engines
|
||||||
/// then puts their names together to show the results are fetched from these upstream engines
|
/// then puts their names together to show the results are fetched from these upstream engines
|
||||||
/// and then removes all data from the HashMap and puts into a struct of all results aggregated
|
/// and then removes all data from the HashMap and puts into a struct of all results aggregated
|
||||||
/// into a vector and also adds the query used into the struct this is neccessory because
|
/// into a vector and also adds the query used into the struct this is necessary because
|
||||||
/// otherwise the search bar in search remains empty if searched from the query url
|
/// otherwise the search bar in search remains empty if searched from the query url
|
||||||
///
|
///
|
||||||
/// # Example:
|
/// # Example:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//! This module provides the functionality to handle different routes of the `websurfx`
|
//! This module provides the functionality to handle different routes of the `websurfx`
|
||||||
//! meta search engine website and provide approriate response to each route/page
|
//! meta search engine website and provide appropriate response to each route/page
|
||||||
//! when requested.
|
//! when requested.
|
||||||
|
|
||||||
use std::fs::read_to_string;
|
use std::fs::read_to_string;
|
||||||
@ -82,40 +82,16 @@ pub async fn search(
|
|||||||
.insert_header(("location", "/"))
|
.insert_header(("location", "/"))
|
||||||
.finish())
|
.finish())
|
||||||
} else {
|
} else {
|
||||||
let page_url: String; // Declare the page_url variable without initializing it
|
let page = match ¶ms.page {
|
||||||
|
Some(page) => *page,
|
||||||
// ...
|
None => 0,
|
||||||
|
|
||||||
let page = match params.page {
|
|
||||||
Some(page_number) => {
|
|
||||||
if page_number <= 1 {
|
|
||||||
page_url = format!(
|
|
||||||
"http://{}:{}/search?q={}&page={}",
|
|
||||||
config.binding_ip_addr, config.port, query, 1
|
|
||||||
);
|
|
||||||
1
|
|
||||||
} else {
|
|
||||||
page_url = format!(
|
|
||||||
"http://{}:{}/search?q={}&page={}",
|
|
||||||
config.binding_ip_addr, config.port, query, page_number
|
|
||||||
);
|
|
||||||
|
|
||||||
page_number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
None => {
|
|
||||||
page_url = format!(
|
|
||||||
"http://{}:{}{}&page={}",
|
|
||||||
config.binding_ip_addr,
|
|
||||||
config.port,
|
|
||||||
req.uri(),
|
|
||||||
1
|
|
||||||
);
|
|
||||||
|
|
||||||
1
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let page_url = format!(
|
||||||
|
"http://{}:{}/search?q={}&page={}",
|
||||||
|
config.binding_ip_addr, config.port, query, page
|
||||||
|
);
|
||||||
|
|
||||||
// fetch the cached results json.
|
// fetch the cached results json.
|
||||||
let cached_results_json = redis_cache.cached_results_json(&page_url);
|
let cached_results_json = redis_cache.cached_results_json(&page_url);
|
||||||
// check if fetched results was indeed fetched or it was an error and if so
|
// check if fetched results was indeed fetched or it was an error and if so
|
||||||
|
Loading…
Reference in New Issue
Block a user