a mini social media app for small communities
1module webapp
2
3import emmathemartian.maple
4
5// Config stores constant site-wide configuration data.
6pub struct Config {
7pub mut:
8 dev_mode bool
9 static_path string
10 instance struct {
11 pub mut:
12 name string
13 welcome string
14 default_theme string
15 allow_changing_theme bool
16 version string
17 source string
18 }
19 http struct {
20 pub mut:
21 port int
22 }
23 postgres struct {
24 pub mut:
25 host string
26 port int
27 user string
28 password string
29 db string
30 }
31 hcaptcha struct {
32 pub mut:
33 enabled bool
34 secret string
35 site_key string
36 }
37 post struct {
38 pub mut:
39 title_min_len int
40 title_max_len int
41 title_pattern string
42 body_min_len int
43 body_max_len int
44 body_pattern string
45 }
46 user struct {
47 pub mut:
48 username_min_len int
49 username_max_len int
50 username_pattern string
51 nickname_min_len int
52 nickname_max_len int
53 nickname_pattern string
54 password_min_len int
55 password_max_len int
56 password_pattern string
57 pronouns_min_len int
58 pronouns_max_len int
59 pronouns_pattern string
60 bio_min_len int
61 bio_max_len int
62 bio_pattern string
63 }
64 welcome struct {
65 pub mut:
66 summary string
67 body string
68 }
69}
70
71pub fn load_config_from(file_path string) Config {
72 loaded := maple.load_file(file_path) or { panic(err) }
73 mut config := Config{}
74
75 config.dev_mode = loaded.get('dev_mode').to_bool()
76 config.static_path = loaded.get('static_path').to_str()
77
78 loaded_instance := loaded.get('instance')
79 config.instance.name = loaded_instance.get('name').to_str()
80 config.instance.welcome = loaded_instance.get('welcome').to_str()
81 config.instance.default_theme = loaded_instance.get('default_theme').to_str()
82 config.instance.allow_changing_theme = loaded_instance.get('allow_changing_theme').to_bool()
83 config.instance.version = loaded_instance.get('version').to_str()
84 config.instance.source = loaded_instance.get('source').to_str()
85
86 loaded_http := loaded.get('http')
87 config.http.port = loaded_http.get('port').to_int()
88
89 loaded_postgres := loaded.get('postgres')
90 config.postgres.host = loaded_postgres.get('host').to_str()
91 config.postgres.port = loaded_postgres.get('port').to_int()
92 config.postgres.user = loaded_postgres.get('user').to_str()
93 config.postgres.password = loaded_postgres.get('password').to_str()
94 config.postgres.db = loaded_postgres.get('db').to_str()
95
96 loaded_hcaptcha := loaded.get('hcaptcha')
97 config.hcaptcha.enabled = loaded_hcaptcha.get('enabled').to_bool()
98 config.hcaptcha.secret = loaded_hcaptcha.get('secret').to_str()
99 config.hcaptcha.site_key = loaded_hcaptcha.get('site_key').to_str()
100
101 loaded_post := loaded.get('post')
102 config.post.title_min_len = loaded_post.get('title_min_len').to_int()
103 config.post.title_max_len = loaded_post.get('title_max_len').to_int()
104 config.post.title_pattern = loaded_post.get('title_pattern').to_str()
105 config.post.body_min_len = loaded_post.get('body_min_len').to_int()
106 config.post.body_max_len = loaded_post.get('body_max_len').to_int()
107 config.post.body_pattern = loaded_post.get('body_pattern').to_str()
108
109 loaded_user := loaded.get('user')
110 config.user.username_min_len = loaded_user.get('username_min_len').to_int()
111 config.user.username_max_len = loaded_user.get('username_max_len').to_int()
112 config.user.username_pattern = loaded_user.get('username_pattern').to_str()
113 config.user.nickname_min_len = loaded_user.get('nickname_min_len').to_int()
114 config.user.nickname_max_len = loaded_user.get('nickname_max_len').to_int()
115 config.user.nickname_pattern = loaded_user.get('nickname_pattern').to_str()
116 config.user.password_min_len = loaded_user.get('password_min_len').to_int()
117 config.user.password_max_len = loaded_user.get('password_max_len').to_int()
118 config.user.password_pattern = loaded_user.get('password_pattern').to_str()
119 config.user.pronouns_min_len = loaded_user.get('pronouns_min_len').to_int()
120 config.user.pronouns_max_len = loaded_user.get('pronouns_max_len').to_int()
121 config.user.pronouns_pattern = loaded_user.get('pronouns_pattern').to_str()
122 config.user.bio_min_len = loaded_user.get('bio_min_len').to_int()
123 config.user.bio_max_len = loaded_user.get('bio_max_len').to_int()
124 config.user.bio_pattern = loaded_user.get('bio_pattern').to_str()
125
126 loaded_welcome := loaded.get('welcome')
127 config.welcome.summary = loaded_welcome.get('summary').to_str()
128 config.welcome.body = loaded_welcome.get('body').to_str()
129
130 return config
131}