mirror of
https://github.com/shlldev/miniws.git
synced 2025-09-03 11:20:59 +02:00
minor tweaks + change to help text & readme
This commit is contained in:
@@ -1,14 +1,19 @@
|
|||||||
# miniws
|
# miniws
|
||||||
miniws (minimalist web server) is a very simple web server written in golang. its purpose is to be lightweight, easy to configure and easily expandable for personal use.
|
miniws (minimal web server) is a very simple web server written in golang. its purpose is to be lightweight, easy to configure and easily expandable for personal use.
|
||||||
|
|
||||||
## command line arguments
|
## command line arguments
|
||||||
```
|
```
|
||||||
-h --help Print help information
|
-h --help Print help information
|
||||||
|
-s --signal runs the executable in command mode, meaning it will
|
||||||
|
just send a command to an already running miniws server
|
||||||
|
process, then terminate. Default:
|
||||||
-p --port what port miniws will run on. Default: 8040
|
-p --port what port miniws will run on. Default: 8040
|
||||||
-l --logs-folder the logs folder. Default: logs
|
-l --logs-folder the logs folder. Default: logs
|
||||||
-c --config-folder the configurations folder. Default: config
|
-c --config-folder the configurations folder. Default: config
|
||||||
-w --www-folder the www folder where miniws will look for files to
|
-w --www-folder the www folder where miniws will look for files to
|
||||||
serve. Default: .
|
serve. Default: .
|
||||||
|
-b --max-log-bytes the maximum bytes after which the log files get split.
|
||||||
|
Default: 1048576
|
||||||
```
|
```
|
||||||
|
|
||||||
## how to configure
|
## how to configure
|
||||||
|
13
main.go
13
main.go
@@ -11,18 +11,23 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
HELP_LONGDESCRIPTION string = "minimal web server - lightweight and easy to configure web " +
|
||||||
|
"server.\n\nYou can specify the following options via command line arguments: the server port, " +
|
||||||
|
"where to put the configuration files (they are auto-generated on first run), the folder with your " +
|
||||||
|
"web content, the folder to put the access and error logs inside, and more (see below)."
|
||||||
HELP_PORT string = "what port miniws will run on"
|
HELP_PORT string = "what port miniws will run on"
|
||||||
HELP_LOGFOLDER string = "the logs folder"
|
HELP_LOGFOLDER string = "the logs folder"
|
||||||
HELP_CONFIGFOLDER string = "the configurations folder"
|
HELP_CONFIGFOLDER string = "the configurations folder"
|
||||||
HELP_WWWFOLDER string = "the www folder where miniws will look for files to serve"
|
HELP_WWWFOLDER string = "the www folder where miniws will look for files to serve"
|
||||||
HELP_MAXLOGBYTES string = "the maximum bytes after which the log files get split"
|
HELP_MAXLOGBYTES string = "the maximum bytes after which the log files get split"
|
||||||
HELP_SIGNAL string = "runs the executable in command mode, meaning it will just send a command to the already running miniws server"
|
HELP_SIGNAL string = "runs the executable in command mode, meaning it will just " +
|
||||||
|
"send a command to an already running miniws server process, then terminate"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
parser := argparse.NewParser("miniws", "")
|
parser := argparse.NewParser("miniws", HELP_LONGDESCRIPTION)
|
||||||
|
|
||||||
signal := parser.String("s", "signal", &argparse.Options{Default: "", Help: HELP_SIGNAL})
|
signal := parser.String("s", "signal", &argparse.Options{Help: HELP_SIGNAL})
|
||||||
port := parser.Int("p", "port", &argparse.Options{Default: 8040, Help: HELP_PORT})
|
port := parser.Int("p", "port", &argparse.Options{Default: 8040, Help: HELP_PORT})
|
||||||
logFolder := parser.String("l", "logs-folder", &argparse.Options{Default: "logs", Help: HELP_LOGFOLDER})
|
logFolder := parser.String("l", "logs-folder", &argparse.Options{Default: "logs", Help: HELP_LOGFOLDER})
|
||||||
configFolder := parser.String("c", "config-folder", &argparse.Options{Default: "config", Help: HELP_CONFIGFOLDER})
|
configFolder := parser.String("c", "config-folder", &argparse.Options{Default: "config", Help: HELP_CONFIGFOLDER})
|
||||||
@@ -37,12 +42,14 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// signal mode
|
||||||
if *signal != "" {
|
if *signal != "" {
|
||||||
client := sockets.Client{}
|
client := sockets.Client{}
|
||||||
client.OneShotWrite("unix", miniws.SOCKET_PATH, []byte(*signal))
|
client.OneShotWrite("unix", miniws.SOCKET_PATH, []byte(*signal))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// webserver mode
|
||||||
webserver := miniws.NewWebServer(*port, *logFolder, *configFolder, *wwwFolder, int64(*maxLogBytes))
|
webserver := miniws.NewWebServer(*port, *logFolder, *configFolder, *wwwFolder, int64(*maxLogBytes))
|
||||||
webserver.Run()
|
webserver.Run()
|
||||||
|
|
||||||
|
@@ -3,5 +3,6 @@ package sockets
|
|||||||
type buffer []byte
|
type buffer []byte
|
||||||
|
|
||||||
func (b *buffer) Zero() {
|
func (b *buffer) Zero() {
|
||||||
|
// shoutout to The C Programming Language by Kernighan & Ritchie
|
||||||
*b = make(buffer, len(*b))
|
*b = make(buffer, len(*b))
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,7 @@ import (
|
|||||||
|
|
||||||
type Server struct{}
|
type Server struct{}
|
||||||
|
|
||||||
func (s *Server) Start(RecvBind func(string, []string) byte, network, address string) int {
|
func (s *Server) Start(recvBind func(string, []string) bool, network, address string) int {
|
||||||
socket, err := net.Listen(network, address)
|
socket, err := net.Listen(network, address)
|
||||||
logplus.LogIfErrorFatal(err)
|
logplus.LogIfErrorFatal(err)
|
||||||
|
|
||||||
@@ -49,10 +49,17 @@ func (s *Server) Start(RecvBind func(string, []string) byte, network, address st
|
|||||||
logplus.LogIfErrorFatal(err)
|
logplus.LogIfErrorFatal(err)
|
||||||
fullstring := string(buffer)
|
fullstring := string(buffer)
|
||||||
arguments := strings.Split(fullstring, " ")
|
arguments := strings.Split(fullstring, " ")
|
||||||
ret := RecvBind(arguments[0], arguments[1:])
|
ret := recvBind(arguments[0], arguments[1:])
|
||||||
conn.Write([]byte{ret})
|
conn.Write([]byte{bool2byte(ret)})
|
||||||
buffer.Zero()
|
buffer.Zero()
|
||||||
}
|
}
|
||||||
}(conn)
|
}(conn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func bool2byte(b bool) byte {
|
||||||
|
if b {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
@@ -70,6 +70,7 @@ func (ws *WebServer) Run() {
|
|||||||
ws.ipFilterMode, ws.ipFilter = ws.parseFilterPanics(FILENAME_IPFILTER)
|
ws.ipFilterMode, ws.ipFilter = ws.parseFilterPanics(FILENAME_IPFILTER)
|
||||||
ws.userAgentFilterMode, ws.userAgentFilter = ws.parseFilterPanics(FILENAME_USERAGENTFILTER)
|
ws.userAgentFilterMode, ws.userAgentFilter = ws.parseFilterPanics(FILENAME_USERAGENTFILTER)
|
||||||
|
|
||||||
|
// create and start a unix socket server (to accept signal from another process using -s <cmd>)
|
||||||
socketserver := sockets.Server{}
|
socketserver := sockets.Server{}
|
||||||
go socketserver.Start(ws.recvBind, "unix", SOCKET_PATH)
|
go socketserver.Start(ws.recvBind, "unix", SOCKET_PATH)
|
||||||
|
|
||||||
@@ -78,16 +79,16 @@ func (ws *WebServer) Run() {
|
|||||||
http.ListenAndServe(":"+strconv.Itoa(ws.port), nil)
|
http.ListenAndServe(":"+strconv.Itoa(ws.port), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *WebServer) recvBind(command string, arguments []string) byte {
|
func (ws *WebServer) recvBind(command string, arguments []string) bool {
|
||||||
command = string(bytes.Trim([]byte(command), "\x00"))
|
command = string(bytes.Trim([]byte(command), "\x00"))
|
||||||
switch command {
|
switch command {
|
||||||
case "reload":
|
case "reload":
|
||||||
ws.parseFilterPanics(FILENAME_IPFILTER)
|
ws.parseFilterPanics(FILENAME_IPFILTER)
|
||||||
ws.parseFilterPanics(FILENAME_USERAGENTFILTER)
|
ws.parseFilterPanics(FILENAME_USERAGENTFILTER)
|
||||||
return byte(1)
|
return true
|
||||||
default:
|
default:
|
||||||
log.Println("Error: unknown command", command, arguments)
|
log.Println("Error: unknown command", command, arguments)
|
||||||
return byte(0)
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user