2022-06-03 15:24:14 +00:00
#!/usr/bin/python3
2023-04-23 14:16:10 +00:00
from io import StringIO
2022-06-03 15:24:14 +00:00
from json import loads
from glob import glob
from pytablewriter import MarkdownTableWriter
2022-10-19 15:37:13 +00:00
2023-04-23 14:16:10 +00:00
def print_md_table ( settings ) - > MarkdownTableWriter :
2022-12-14 16:09:57 +00:00
writer = MarkdownTableWriter (
headers = [ " Setting " , " Default " , " Context " , " Multiple " , " Description " ] ,
value_matrix = [
2022-10-19 15:37:13 +00:00
[
f " ` { setting } ` " ,
" " if data [ " default " ] == " " else f " ` { data [ ' default ' ] } ` " ,
data [ " context " ] ,
2023-10-03 10:01:24 +00:00
" no " if " multiple " not in data else " yes " ,
2022-10-19 15:37:13 +00:00
data [ " help " ] ,
]
2022-12-14 16:09:57 +00:00
for setting , data in settings . items ( )
] ,
2022-06-03 15:24:14 +00:00
)
2023-04-23 14:16:10 +00:00
return writer
2022-06-03 15:24:14 +00:00
2023-04-30 07:15:06 +00:00
2023-04-27 18:27:07 +00:00
def stream_support ( support ) - > str :
md = " STREAM support "
if support == " no " :
md + = " :x: "
elif support == " yes " :
md + = " :white_check_mark: "
else :
md + = " :warning: "
return md
2022-10-19 15:37:13 +00:00
2023-04-30 07:15:06 +00:00
2023-04-23 14:16:10 +00:00
doc = StringIO ( )
print ( " # Settings \n " , file = doc )
2022-10-19 15:37:13 +00:00
print (
2023-04-23 14:16:10 +00:00
' !!! info " Settings generator tool " \n \n To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io). \n ' ,
file = doc ,
2022-10-19 15:37:13 +00:00
)
print (
2023-10-03 10:01:24 +00:00
" This section contains the full list of settings supported by BunkerWeb. "
+ " If you are not yet familiar with BunkerWeb, you should first read the [concepts](concepts.md) section of the documentation. "
+ " Please follow the instructions for your own [integration](integrations.md) on how to apply the settings. \n " ,
2023-04-23 14:16:10 +00:00
file = doc ,
2022-10-19 15:37:13 +00:00
)
print (
2023-10-03 10:01:24 +00:00
" As a general rule when multisite mode is enabled, if you want to apply settings with multisite context to a specific server, you will need to add the primary "
+ " (first) server name as a prefix like `www.example.com_USE_ANTIBOT=captcha` or `myapp.example.com_USE_GZIP=yes` for example. \n " ,
2023-04-23 14:16:10 +00:00
file = doc ,
2022-10-19 15:37:13 +00:00
)
print (
2023-10-03 10:01:24 +00:00
' When settings are considered as " multiple " , it means that you can have multiple groups of settings for the same feature by adding numbers as suffix like `REVERSE_PROXY_URL_1=/subdir`, '
+ " `REVERSE_PROXY_HOST_1=http://myhost1`, `REVERSE_PROXY_URL_2=/anotherdir`, `REVERSE_PROXY_HOST_2=http://myhost2`, ... for example. \n " ,
2023-04-23 14:16:10 +00:00
file = doc ,
2022-10-19 15:37:13 +00:00
)
2022-06-03 15:24:14 +00:00
# Print global settings
2023-04-23 14:16:10 +00:00
print ( " ## Global settings \n " , file = doc )
2023-04-27 18:27:07 +00:00
print ( f " \n { stream_support ( ' partial ' ) } \n " , file = doc )
2022-11-11 13:55:04 +00:00
with open ( " src/common/settings.json " , " r " ) as f :
2023-04-23 14:16:10 +00:00
print ( print_md_table ( loads ( f . read ( ) ) ) , file = doc )
print ( file = doc )
2022-06-03 15:24:14 +00:00
# Print core settings
2023-04-23 14:16:10 +00:00
print ( " ## Core settings \n " , file = doc )
2022-06-03 15:24:14 +00:00
core_settings = { }
2022-11-11 13:55:04 +00:00
for core in glob ( " src/common/core/*/plugin.json " ) :
2022-10-19 15:37:13 +00:00
with open ( core , " r " ) as f :
2022-06-03 15:24:14 +00:00
core_plugin = loads ( f . read ( ) )
2022-10-19 15:37:13 +00:00
if len ( core_plugin [ " settings " ] ) > 0 :
2023-04-27 18:27:07 +00:00
core_settings [ core_plugin [ " name " ] ] = core_plugin
2023-04-23 14:16:10 +00:00
2023-04-27 18:27:07 +00:00
for name , data in dict ( sorted ( core_settings . items ( ) ) ) . items ( ) :
print ( f " ### { data [ ' name ' ] } \n " , file = doc )
print ( f " { stream_support ( data [ ' stream ' ] ) } \n " , file = doc )
print ( f " { data [ ' description ' ] } \n " , file = doc )
2023-04-30 07:15:06 +00:00
print ( print_md_table ( data [ " settings " ] ) , file = doc )
2023-04-23 14:16:10 +00:00
doc . seek ( 0 )
content = doc . read ( )
doc = StringIO ( content . replace ( " \\ | " , " | " ) )
doc . seek ( 0 )
with open ( " docs/settings.md " , " w " ) as f :
f . write ( doc . read ( ) )