1
1
package main
2
2
3
3
import (
4
+ "flag"
4
5
"fmt"
5
6
"os"
6
7
"text/template"
@@ -16,102 +17,173 @@ type ComposeConfig struct {
16
17
UserLoginCredentials ask.Credentials
17
18
WebAppPort int
18
19
S3StorageBackend ask.S3StorageBackend
20
+ LoggingConfigs bool // generate and include logging configs?
19
21
}
20
22
23
+ var interactive = flag .Bool ("i" , false , "start interactive session" )
24
+ var appVersion = flag .String ("av" , "3.5" , "app version e.g. 3.5" )
25
+ var appPort = flag .Int ("ap" , 12000 , "web app port" )
26
+ var username = flag .String ("u" , "admin" , "username" )
27
+ var password = flag .String ("p" , "" , "password" )
28
+ var withS3Backend = flag .Bool ("s3" , false , "with S3 backend" )
29
+ var withLoggingConfigs = flag .Bool ("lc" , false , "with logging configs" )
30
+
21
31
func main () {
22
32
23
- fmt .Println (`
24
- ###################################################
25
- ### Papermerge DMS docker compose generator ###
26
- ###################################################
27
- ` )
33
+ flag .Parse ()
28
34
29
- cfg := ComposeConfig {}
35
+ var cfg * ComposeConfig
36
+ var err error
30
37
31
- version , err := ask .AppVersion ("3.5" )
38
+ if * interactive {
39
+ cfg , err = InteractiveSession ()
40
+ if err != nil {
41
+ fmt .Printf ("Error: %v\n " , err )
42
+ return
43
+ }
44
+ } else {
45
+ cfg , err = GetComposeConfig ()
46
+ }
32
47
48
+ dir , err := utils .GetExecutableDir ()
33
49
if err != nil {
34
50
fmt .Printf ("Error: %v\n " , err )
35
51
return
36
52
}
37
53
38
- cfg .AppVersion = version
39
-
40
- appPort , err := ask .WebAppPort (12000 )
54
+ templatePath := fmt .Sprintf ("%s/pmcompose_templates/docker-compose.yaml.tmpl" , dir )
41
55
56
+ tmpl , err := template .ParseFiles (templatePath )
42
57
if err != nil {
43
- fmt .Printf ("Error: %v \n " , err )
58
+ fmt .Println ("Error loading template: " , err )
44
59
return
45
60
}
46
61
47
- cfg .WebAppPort = appPort
48
-
49
- creds , err := ask .LoginCredentials ()
50
-
62
+ outputFile , err := os .Create ("docker-compose.yml" )
51
63
if err != nil {
52
- fmt .Printf ("Error: %v \n " , err )
64
+ fmt .Println ("Error creating docker-compose.yml: " , err )
53
65
return
54
66
}
67
+ defer outputFile .Close ()
55
68
56
- cfg .UserLoginCredentials = * creds
57
-
58
- s3StorageBackend , err := ask .StorageBackend ()
59
-
69
+ err = tmpl .Execute (outputFile , cfg )
60
70
if err != nil {
61
- fmt .Printf ("Error: %v \n " , err )
71
+ fmt .Println ("Error executing template: " , err )
62
72
return
63
73
}
64
74
65
- if s3StorageBackend != nil {
66
- cfg .S3StorageBackend = * s3StorageBackend
75
+ fmt .Println ("✅ docker-compose.yml generated successfully." )
76
+
77
+ if cfg .LoggingConfigs {
78
+ err = os .WriteFile ("webapp_logging.yaml" , []byte (logs .WEBAPP_LOGGING ), 0644 )
79
+ if err != nil {
80
+ fmt .Println ("Error writing webapp_logging.yaml file" )
81
+ }
82
+ fmt .Println ("✅ webapp_logging.yaml generated successfully." )
67
83
}
68
84
85
+ if cfg .S3StorageBackend .S3BucketName != "" {
86
+ if cfg .LoggingConfigs {
87
+ err = os .WriteFile ("s3worker_logging.yaml" , []byte (logs .S3WORKER_LOGGING ), 0644 )
88
+ if err != nil {
89
+ fmt .Println ("Error writing s3worker_logging.yaml file" )
90
+ }
91
+ fmt .Println ("✅ s3worker_logging.yaml generated successfully." )
92
+ }
93
+ }
94
+
95
+ }
96
+
97
+ func GetComposeConfig () (* ComposeConfig , error ) {
98
+
99
+ var cfg ComposeConfig
100
+
69
101
secretKey , err := utils .GenerateSecretString (32 )
70
102
if err != nil {
71
- fmt .Printf ("Error: %v\n " , err )
72
- return
103
+ return nil , err
73
104
}
74
- cfg .SecretKey = secretKey
75
105
76
- dir , err := utils .GetExecutableDir ( )
106
+ pass , err := utils .GenerateSecretString ( 5 )
77
107
if err != nil {
78
- fmt .Printf ("Error: %v\n " , err )
79
- return
108
+ return nil , err
80
109
}
81
110
82
- templatePath := fmt .Sprintf ("%s/pmcompose_templates/docker-compose.yaml.tmpl" , dir )
111
+ if * password == "" {
112
+ * password = pass
113
+ }
114
+
115
+ cfg = ComposeConfig {
116
+ AppVersion : * appVersion ,
117
+ SecretKey : secretKey ,
118
+ WebAppPort : * appPort ,
119
+ UserLoginCredentials : ask.Credentials {
120
+ Username : * username ,
121
+ Password : * password ,
122
+ },
123
+ LoggingConfigs : * withLoggingConfigs ,
124
+ }
125
+
126
+ if * withS3Backend == true {
127
+ cfg .S3StorageBackend .S3BucketName = "<your bucket name>"
128
+ cfg .S3StorageBackend .AWSRegionName = "eu-central-1"
129
+ cfg .S3StorageBackend .AWSAccessKeyID = "<your access key ID>"
130
+ cfg .S3StorageBackend .AWSSecretAccessKey = "<your secret access key>"
131
+ }
132
+
133
+ return & cfg , nil
134
+ }
135
+
136
+ func InteractiveSession () (* ComposeConfig , error ) {
137
+
138
+ cfg := ComposeConfig {}
139
+
140
+ fmt .Println (`
141
+ ###################################################
142
+ ### Papermerge DMS docker compose generator ###
143
+ ###################################################
144
+ ` )
145
+
146
+ version , err := ask .AppVersion ("3.5" )
83
147
84
- tmpl , err := template .ParseFiles (templatePath )
85
148
if err != nil {
86
- fmt .Println ("Error loading template:" , err )
87
- return
149
+ return nil , err
88
150
}
89
151
90
- outputFile , err := os .Create ("docker-compose.yml" )
152
+ cfg .AppVersion = version
153
+
154
+ appPort , err := ask .WebAppPort (12000 )
155
+
91
156
if err != nil {
92
- fmt .Println ("Error creating docker-compose.yml:" , err )
93
- return
157
+ return nil , err
94
158
}
95
- defer outputFile .Close ()
96
159
97
- err = tmpl .Execute (outputFile , cfg )
160
+ cfg .WebAppPort = appPort
161
+
162
+ creds , err := ask .LoginCredentials ()
163
+
98
164
if err != nil {
99
- fmt .Println ("Error executing template:" , err )
100
- return
165
+ return nil , err
101
166
}
102
167
103
- fmt .Println ("✅ docker-compose.yml generated successfully." )
168
+ cfg .UserLoginCredentials = * creds
169
+
170
+ s3StorageBackend , err := ask .StorageBackend ()
104
171
105
- err = os .WriteFile ("webapp_logging.yaml" , []byte (logs .WEBAPP_LOGGING ), 0644 )
106
172
if err != nil {
107
- fmt . Println ( "Error writing webapp_logging.yaml file" )
173
+ return nil , err
108
174
}
109
175
110
- if cfg .S3StorageBackend .S3BucketName != "" {
111
- err = os .WriteFile ("s3worker_logging.yaml" , []byte (logs .S3WORKER_LOGGING ), 0644 )
112
- if err != nil {
113
- fmt .Println ("Error writing s3worker_logging.yaml file" )
114
- }
176
+ if s3StorageBackend != nil {
177
+ cfg .S3StorageBackend = * s3StorageBackend
115
178
}
116
179
180
+ cfg .LoggingConfigs = ask .WithLogging ()
181
+
182
+ secretKey , err := utils .GenerateSecretString (32 )
183
+ if err != nil {
184
+ return nil , err
185
+ }
186
+ cfg .SecretKey = secretKey
187
+
188
+ return & cfg , nil
117
189
}
0 commit comments