@@ -16,10 +16,13 @@ var logger *logrus.Logger
16
16
func run (args []string ) int {
17
17
bindAddress := flag .String ("ip" , "0.0.0.0" , "IP address to bind" )
18
18
listenPort := flag .Int ("port" , 25478 , "port number to listen on" )
19
+ tlsListenPort := flag .Int ("tlsport" , 25443 , "port number to listen on with TLS" )
19
20
// 5,242,880 bytes == 5 MiB
20
21
maxUploadSize := flag .Int64 ("upload_limit" , 5242880 , "max size of uploaded file (byte)" )
21
22
tokenFlag := flag .String ("token" , "" , "specify the security token (it is automatically generated if empty)" )
22
23
logLevelFlag := flag .String ("loglevel" , "info" , "logging level" )
24
+ certFile := flag .String ("cert" , "" , "path to certificate file" )
25
+ keyFile := flag .String ("key" , "" , "path to key file" )
23
26
flag .Parse ()
24
27
serverRoot := flag .Arg (0 )
25
28
if len (serverRoot ) == 0 {
@@ -42,17 +45,44 @@ func run(args []string) int {
42
45
token = fmt .Sprintf ("%x" , b )
43
46
logger .WithField ("token" , token ).Warn ("token generated" )
44
47
}
45
- logger .WithFields (logrus.Fields {
46
- "ip" : * bindAddress ,
47
- "port" : * listenPort ,
48
- "token" : token ,
49
- "upload_limit" : * maxUploadSize ,
50
- "root" : serverRoot ,
51
- }).Info ("start listening" )
48
+ tlsEnabled := * certFile != "" && * keyFile != ""
52
49
server := NewServer (serverRoot , * maxUploadSize , token )
53
50
http .Handle ("/upload" , server )
54
51
http .Handle ("/files/" , server )
55
- http .ListenAndServe (fmt .Sprintf ("%s:%d" , * bindAddress , * listenPort ), nil )
52
+
53
+ errors := make (chan error )
54
+
55
+ go func () {
56
+ logger .WithFields (logrus.Fields {
57
+ "ip" : * bindAddress ,
58
+ "port" : * listenPort ,
59
+ "token" : token ,
60
+ "upload_limit" : * maxUploadSize ,
61
+ "root" : serverRoot ,
62
+ }).Info ("start listening" )
63
+
64
+ if err := http .ListenAndServe (fmt .Sprintf ("%s:%d" , * bindAddress , * listenPort ), nil ); err != nil {
65
+ errors <- err
66
+ }
67
+ }()
68
+
69
+ if tlsEnabled {
70
+ go func () {
71
+ logger .WithFields (logrus.Fields {
72
+ "cert" : * certFile ,
73
+ "key" : * keyFile ,
74
+ "port" : * tlsListenPort ,
75
+ }).Info ("start listening TLS" )
76
+
77
+ if err := http .ListenAndServeTLS (fmt .Sprintf ("%s:%d" , * bindAddress , * tlsListenPort ), * certFile , * keyFile , nil ); err != nil {
78
+ errors <- err
79
+ }
80
+ }()
81
+ }
82
+
83
+ err := <- errors
84
+ logger .WithError (err ).Info ("closing server" )
85
+
56
86
return 0
57
87
}
58
88
0 commit comments