alamin655 commited on
Commit
d110f40
β€’
2 Parent(s): 05b4cf3 4a34c56

Merge pull request #272 from neon-mmd/docs-revision

Browse files

πŸ“ Revise the `docs` to remain in sync with the current changes

Cargo.lock CHANGED
@@ -215,7 +215,7 @@ dependencies = [
215
  "serde_urlencoded 0.7.1",
216
  "smallvec 1.11.1",
217
  "socket2 0.5.4",
218
- "time 0.3.28",
219
  "url 2.4.1",
220
  ]
221
 
@@ -650,7 +650,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
650
  checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
651
  dependencies = [
652
  "percent-encoding 2.3.0",
653
- "time 0.3.28",
654
  "version_check",
655
  ]
656
 
@@ -3397,9 +3397,9 @@ dependencies = [
3397
 
3398
  [[package]]
3399
  name = "time"
3400
- version = "0.3.28"
3401
  source = "registry+https://github.com/rust-lang/crates.io-index"
3402
- checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48"
3403
  dependencies = [
3404
  "deranged",
3405
  "itoa 1.0.9",
@@ -3410,15 +3410,15 @@ dependencies = [
3410
 
3411
  [[package]]
3412
  name = "time-core"
3413
- version = "0.1.1"
3414
  source = "registry+https://github.com/rust-lang/crates.io-index"
3415
- checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
3416
 
3417
  [[package]]
3418
  name = "time-macros"
3419
- version = "0.2.14"
3420
  source = "registry+https://github.com/rust-lang/crates.io-index"
3421
- checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572"
3422
  dependencies = [
3423
  "time-core",
3424
  ]
@@ -3932,7 +3932,7 @@ dependencies = [
3932
 
3933
  [[package]]
3934
  name = "websurfx"
3935
- version = "0.23.4"
3936
  dependencies = [
3937
  "actix-cors",
3938
  "actix-files",
 
215
  "serde_urlencoded 0.7.1",
216
  "smallvec 1.11.1",
217
  "socket2 0.5.4",
218
+ "time 0.3.29",
219
  "url 2.4.1",
220
  ]
221
 
 
650
  checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
651
  dependencies = [
652
  "percent-encoding 2.3.0",
653
+ "time 0.3.29",
654
  "version_check",
655
  ]
656
 
 
3397
 
3398
  [[package]]
3399
  name = "time"
3400
+ version = "0.3.29"
3401
  source = "registry+https://github.com/rust-lang/crates.io-index"
3402
+ checksum = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe"
3403
  dependencies = [
3404
  "deranged",
3405
  "itoa 1.0.9",
 
3410
 
3411
  [[package]]
3412
  name = "time-core"
3413
+ version = "0.1.2"
3414
  source = "registry+https://github.com/rust-lang/crates.io-index"
3415
+ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
3416
 
3417
  [[package]]
3418
  name = "time-macros"
3419
+ version = "0.2.15"
3420
  source = "registry+https://github.com/rust-lang/crates.io-index"
3421
+ checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
3422
  dependencies = [
3423
  "time-core",
3424
  ]
 
3932
 
3933
  [[package]]
3934
  name = "websurfx"
3935
+ version = "0.23.5"
3936
  dependencies = [
3937
  "actix-cors",
3938
  "actix-files",
Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
  [package]
2
  name = "websurfx"
3
- version = "0.23.4"
4
  edition = "2021"
5
  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."
6
  repository = "https://github.com/neon-mmd/websurfx"
 
1
  [package]
2
  name = "websurfx"
3
+ version = "0.23.5"
4
  edition = "2021"
5
  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."
6
  repository = "https://github.com/neon-mmd/websurfx"
docs/README.md CHANGED
@@ -9,6 +9,7 @@
9
 
10
  - [Instances](./instances.md)
11
  - [Installation](./installation.md)
 
12
  - [Configuration](./configuration.md)
13
  - [Theming](./theming.md)
14
 
 
9
 
10
  - [Instances](./instances.md)
11
  - [Installation](./installation.md)
12
+ - [Building](./building.md)
13
  - [Configuration](./configuration.md)
14
  - [Theming](./theming.md)
15
 
docs/building.md ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Build Options
2
+
3
+ The project provides 4 caching options as conditionally compiled features. This helps reduce the size of the compiled app by only including the code that is necessary for a particular caching option.
4
+
5
+ The different caching features provided are as follows:
6
+ - No cache
7
+ - Redis cache
8
+ - In memory cache
9
+ - Hybrid cache
10
+
11
+ ## No Cache
12
+
13
+ This feature disables caching for the search engine. This option can drastically reduce binary size but with the cost that subsequent search requests and previous & next page search results are not cached which can make navigating between pages slower. As well as page refreshes of the same page also becomes slower as each refresh has to fetch the results from the upstream search engines.
14
+
15
+ To build the app with this option run the following command:
16
+
17
+ ``` shell
18
+ cargo build -r --no-default-features
19
+ ```
20
+
21
+ Once you have build the app with this option follow the commands listed on the [**Installation**](./installation.md#install-from-source) page of the docs to run the app.
22
+
23
+ ## Redis Cache
24
+
25
+ This feature enables `Redis` caching ability for the search engine. This option allows the search engine to cache the results on the redis server. This feature can be useful for having a dedicated cache server for multiple devices hosted with the `Websurfx` server which can use the one dedicated cache server for hosting their cache on it. But a disadvantage of this solution is that if the `Redis`server is located far away (for example provided by a vps as service) and if it is unavailable or down for some reason then the `Websurfx` server would not be able to function properly or will crash on startup.
26
+
27
+ To build the app with this option run the following command:
28
+
29
+ ``` shell
30
+ cargo build -r --no-default-features --features redis-cache
31
+ ```
32
+
33
+ Once you have build the app with this option follow the commands listed on the [**Installation**](./installation.md#install-from-source) page of the docs to run the app.
34
+
35
+ ## In Memory Cache
36
+
37
+ This feature enables `In Memory` caching soluion within the search engine and it is the default feature provided by the project. This option allows the search engine to cache the results in the memory which can help increase the speed of the fetched cache results and it also has an advantage that it is extremely reliable as all the results are stored in memory within the search engine. Though the disadvantage of this solution are that caching of results is slightly slower than the `redis-cache` solution, it requires a good amount of memory on the system and as such is not ideal for very low memory devices and is highly unscalable.
38
+
39
+ To build the app with this option run the following command:
40
+
41
+ ``` shell
42
+ cargo build -r
43
+ ```
44
+
45
+ Once you have build the app with this option follow the commands listed on the [**Installation**](./installation.md#install-from-source) page of the docs to run the app.
46
+
47
+ ## Hybrid Cache
48
+
49
+ This feature enables the `Hybrid` caching solution for the search engine which provides the advantages of both `In Memory` caching and `Redis` caching and it is an ideal solution if you need a very resiliant and reliable solution for the `Websurfx` which can provide both speed and reliability. Like for example if the `Redis` server becomes unavailable then the search engine switches to `In Memory` caching until the server becomes available again. This solution can be useful for hosting `Websurfx` instance which will be used by hundreds or thousands of users over the world.
50
+
51
+ To build the app with this option run the following command:
52
+
53
+ ``` shell
54
+ cargo build -r --features redis-cache
55
+ ```
56
+
57
+ Once you have build the app with this option follow the commands listed on the [**Installation**](./installation.md#install-from-source) page of the docs to run the app.
58
+
59
+ [⬅️ Go back to Home](./README.md)
docs/configuration.md CHANGED
@@ -15,6 +15,7 @@ Some of the configuration options provided in the file are stated below. These a
15
 
16
  - General
17
  - Server
 
18
  - Website
19
  - Cache
20
  - Search Engines
@@ -29,8 +30,21 @@ Some of the configuration options provided in the file are stated below. These a
29
 
30
  - **port:** Port number on which server should be launched.
31
  - **binding_ip_addr:** IP address on the which server should be launched.
32
- - **production_use:** Whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users). If production_use is set to true. There will be a random delay before sending the request to the search engines, this is to prevent DDoSing the upstream search engines from a large number of simultaneous requests. This is newly added option and hence is only available in the **edge version**.
33
  - **request_timeout:** Timeout for the search requests sent to the upstream search engines to be fetched (value in seconds).
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
  ## Website
36
 
@@ -61,6 +75,9 @@ Some of the configuration options provided in the file are stated below. These a
61
 
62
  - **redis_url:** Redis connection url address on which the client should connect on.
63
 
 
 
 
64
  ## Search Engines
65
 
66
  - **upstream_search_engines:** Select from the different upstream search engines from which the results should be fetched.
 
15
 
16
  - General
17
  - Server
18
+ - Search
19
  - Website
20
  - Cache
21
  - Search Engines
 
30
 
31
  - **port:** Port number on which server should be launched.
32
  - **binding_ip_addr:** IP address on the which server should be launched.
33
+ - **production_use:** Whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users). If production_use is set to true. There will be a random delay before sending the request to the search engines, this is to prevent DDoSing the upstream search engines from a large number of simultaneous requests.
34
  - **request_timeout:** Timeout for the search requests sent to the upstream search engines to be fetched (value in seconds).
35
+ - **rate_limiter:** The configuration option to configure rate limiting on the search engine website.
36
+
37
+ ## Search
38
+
39
+ - **safe_search:** This option is used to configure the search filtering based on different safe search levels. (value a number between 0 to 4)
40
+
41
+ > This option provides 4 levels of search filtering:
42
+ >
43
+ > - Level 0 - With this level no search filtering occurs.
44
+ > - Level 1 - With this level some search filtering occurs.
45
+ > - Level 2 - With this level the upstream search engines are restricted to send sensitive contents like NSFW search results, etc.
46
+ > - Level 3 - With this level the regex based filter lists is used alongside level 2 to filter more search results that have slipped in or custom results that needs to be filtered using the filter lists.
47
+ > - Level 4 - This level is similar to level 3 except in this level the regex based filter lists are used to disallow users to search sensitive or disallowed content. This level could be useful if you are parent or someone who wants to completely disallow their kids or yourself from watching sensitive content.
48
 
49
  ## Website
50
 
 
75
 
76
  - **redis_url:** Redis connection url address on which the client should connect on.
77
 
78
+ > **Note**
79
+ > This option can be commented out if you have compiled the app without the `redis-cache` feature. For more information, See [**building**](./building.md).
80
+
81
  ## Search Engines
82
 
83
  - **upstream_search_engines:** Select from the different upstream search engines from which the results should be fetched.
docs/installation.md CHANGED
@@ -51,8 +51,19 @@ If you want to use the rolling/edge branch, run the following commands instead:
51
  ```shell
52
  git clone https://github.com/neon-mmd/websurfx.git
53
  cd websurfx
54
- cargo build -r
 
 
 
 
 
 
55
  redis-server --port 8082 &
 
 
 
 
 
56
  ./target/release/websurfx
57
  ```
58
 
@@ -79,15 +90,30 @@ After that edit the config.lua file located under `websurfx` directory. In the c
79
  -- ### General ###
80
  logging = true -- an option to enable or disable logs.
81
  debug = false -- an option to enable or disable debug mode.
82
- threads = 10 -- the amount of threads that the app will use to run (the value should be greater than 0).
83
 
84
  -- ### Server ###
85
  port = "8080" -- port on which server should be launched
86
- binding_ip_addr = "0.0.0.0" --ip address on the which server should be launched.
87
- production_use = false -- whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users)
88
  -- if production_use is set to true
89
  -- There will be a random delay before sending the request to the search engines, this is to prevent DDoSing the upstream search engines from a large number of simultaneous requests.
90
- request_timeout = 60 -- timeout for the search requests sent to the upstream search engines to be fetched (value in seconds).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
 
92
  -- ### Website ###
93
  -- The different colorschemes provided are:
@@ -112,7 +138,10 @@ theme = "simple" -- the theme name which should be used for the website
112
  redis_url = "redis://redis:6379" -- redis connection url address on which the client should connect on.
113
 
114
  -- ### Search Engines ###
115
- upstream_search_engines = { DuckDuckGo = true, Searx = false } -- select the upstream search engines from which the results should be fetched.
 
 
 
116
  ```
117
 
118
  After this run the following command to deploy the app:
 
51
  ```shell
52
  git clone https://github.com/neon-mmd/websurfx.git
53
  cd websurfx
54
+ ```
55
+
56
+ Once you have changed the directory to the `websurfx` directory then follow the build options listed in the [building docs](./building.md).
57
+
58
+ After that run the following command if you have build the app with the `redis-cache` feature:
59
+
60
+ ``` shell
61
  redis-server --port 8082 &
62
+ ```
63
+
64
+ After that run the following command to start the search engine:
65
+
66
+ ``` shell
67
  ./target/release/websurfx
68
  ```
69
 
 
90
  -- ### General ###
91
  logging = true -- an option to enable or disable logs.
92
  debug = false -- an option to enable or disable debug mode.
93
+ threads = 8 -- the amount of threads that the app will use to run (the value should be greater than 0).
94
 
95
  -- ### Server ###
96
  port = "8080" -- port on which server should be launched
97
+ binding_ip = "0.0.0.0" --ip address on the which server should be launched.
98
+ production_use = false -- whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users (more than one))
99
  -- if production_use is set to true
100
  -- There will be a random delay before sending the request to the search engines, this is to prevent DDoSing the upstream search engines from a large number of simultaneous requests.
101
+ request_timeout = 30 -- timeout for the search requests sent to the upstream search engines to be fetched (value in seconds).
102
+ rate_limiter = {
103
+ number_of_requests = 20, -- The number of request that are allowed within a provided time limit.
104
+ time_limit = 3, -- The time limit in which the quantity of requests that should be accepted.
105
+ }
106
+
107
+ -- ### Search ###
108
+ -- Filter results based on different levels. The levels provided are:
109
+ -- {{
110
+ -- 0 - None
111
+ -- 1 - Low
112
+ -- 2 - Moderate
113
+ -- 3 - High
114
+ -- 4 - Aggressive
115
+ -- }}
116
+ safe_search = 2
117
 
118
  -- ### Website ###
119
  -- The different colorschemes provided are:
 
138
  redis_url = "redis://redis:6379" -- redis connection url address on which the client should connect on.
139
 
140
  -- ### Search Engines ###
141
+ upstream_search_engines = {
142
+ DuckDuckGo = true,
143
+ Searx = false,
144
+ } -- select the upstream search engines from which the results should be fetched.
145
  ```
146
 
147
  After this run the following command to deploy the app:
docs/theming.md CHANGED
@@ -129,6 +129,126 @@ body {
129
  .search_bar button:hover {
130
  filter: brightness(1.2);
131
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  ```
133
 
134
  ### Styles for the footer and header
@@ -499,7 +619,8 @@ This part is only available right now in the **rolling/edge/unstable** version
499
  color: var(--foreground-color);
500
  }
501
 
502
- .settings_container .user_interface select {
 
503
  margin: 0.7rem 0;
504
  width: 20rem;
505
  background-color: var(--background-color);
@@ -511,7 +632,8 @@ This part is only available right now in the **rolling/edge/unstable** version
511
  text-transform: capitalize;
512
  }
513
 
514
- .settings_container .user_interface option:hover {
 
515
  background-color: var(--color-one);
516
  }
517
 
 
129
  .search_bar button:hover {
130
  filter: brightness(1.2);
131
  }
132
+
133
+ .search_area .search_options {
134
+ display: flex;
135
+ justify-content: space-between;
136
+ align-items: center;
137
+ }
138
+
139
+ .search_area .search_options select {
140
+ margin: 0.7rem 0;
141
+ width: 20rem;
142
+ background-color: var(--color-one);
143
+ color: var(--foreground-color);
144
+ padding: 1rem 2rem;
145
+ border-radius: 0.5rem;
146
+ outline: none;
147
+ border: none;
148
+ text-transform: capitalize;
149
+ }
150
+
151
+ .search_area .search_options option:hover {
152
+ background-color: var(--color-one);
153
+ }
154
+
155
+ .result_not_found {
156
+ display: flex;
157
+ flex-direction: column;
158
+ font-size: 1.5rem;
159
+ color: var(--foreground-color);
160
+ }
161
+
162
+ .result_not_found p {
163
+ margin: 1rem 0;
164
+ }
165
+
166
+ .result_not_found ul {
167
+ margin: 1rem 0;
168
+ }
169
+
170
+ .result_not_found img {
171
+ width: 40rem;
172
+ }
173
+ ```
174
+
175
+ ```css
176
+ /* styles for the error box */
177
+ .error_box .error_box_toggle_button {
178
+ background: var(--foreground-color);
179
+ }
180
+
181
+ .error_box .dropdown_error_box {
182
+ position: absolute;
183
+ display: none;
184
+ flex-direction: column;
185
+ background: var(--background-color);
186
+ border-radius: 0;
187
+ margin-left: 2rem;
188
+ min-height: 20rem;
189
+ min-width: 22rem;
190
+ }
191
+ .error_box .dropdown_error_box.show {
192
+ display: flex;
193
+ }
194
+ .error_box .dropdown_error_box .error_item,
195
+ .error_box .dropdown_error_box .no_errors {
196
+ display: flex;
197
+ align-items: center;
198
+ color: var(--foreground-color);
199
+ letter-spacing: 0.1rem;
200
+ padding: 1rem;
201
+ font-size: 1.2rem;
202
+ }
203
+ .error_box .dropdown_error_box .error_item {
204
+ justify-content: space-between;
205
+ }
206
+ .error_box .dropdown_error_box .no_errors {
207
+ min-height: 18rem;
208
+ justify-content: center;
209
+ }
210
+
211
+ .error_box .dropdown_error_box .error_item:hover {
212
+ box-shadow: inset 0 0 100px 100px rgba(255, 255, 255, 0.1);
213
+ }
214
+
215
+ .error_box .error_item .severity_color {
216
+ width: 1.2rem;
217
+ height: 1.2rem;
218
+ }
219
+ .results .result_disallowed,
220
+ .results .result_filtered,
221
+ .results .result_engine_not_selected {
222
+ display: flex;
223
+ justify-content: center;
224
+ align-items: center;
225
+ gap: 10rem;
226
+ font-size: 2rem;
227
+ color: var(--foreground-color);
228
+ margin: 0rem 7rem;
229
+ }
230
+
231
+ .results .result_disallowed .user_query,
232
+ .results .result_filtered .user_query,
233
+ .results .result_engine_not_selected .user_query {
234
+ color: var(--background-color);
235
+ font-weight: 300;
236
+ }
237
+
238
+ .results .result_disallowed img,
239
+ .results .result_filtered img,
240
+ .results .result_engine_not_selected img {
241
+ width: 30rem;
242
+ }
243
+
244
+ .results .result_disallowed div,
245
+ .results .result_filtered div,
246
+ .results .result_engine_not_selected div {
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: 1rem;
250
+ line-break: strict;
251
+ }
252
  ```
253
 
254
  ### Styles for the footer and header
 
619
  color: var(--foreground-color);
620
  }
621
 
622
+ .settings_container .user_interface select,
623
+ .settings_container .general select {
624
  margin: 0.7rem 0;
625
  width: 20rem;
626
  background-color: var(--background-color);
 
632
  text-transform: capitalize;
633
  }
634
 
635
+ .settings_container .user_interface option:hover,
636
+ .settings_container .general option:hover {
637
  background-color: var(--color-one);
638
  }
639