mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
|
package server
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
|
||
|
log "github.com/sirupsen/logrus"
|
||
|
)
|
||
|
|
||
|
type Server struct {
|
||
|
http.Server
|
||
|
}
|
||
|
|
||
|
type Config struct {
|
||
|
// Hostname to use for download links
|
||
|
Hostname string `toml:"hostname"`
|
||
|
// Port is a server port to listen to
|
||
|
Port int `toml:"port"`
|
||
|
// Bind a specific IP addresses for server
|
||
|
// "*": bind all IP addresses which is default option
|
||
|
// localhost or 127.0.0.1 bind a single IPv4 address
|
||
|
BindAddress string `toml:"bind_address"`
|
||
|
// Specify path for reverse proxy and only [A-Za-z0-9]
|
||
|
Path string `toml:"path"`
|
||
|
// DataDir is a path to a directory to keep XML feeds and downloaded episodes,
|
||
|
// that will be available to user via web server for download.
|
||
|
DataDir string `toml:"data_dir"`
|
||
|
}
|
||
|
|
||
|
func New(cfg Config, storage http.FileSystem) *Server {
|
||
|
port := cfg.Port
|
||
|
if port == 0 {
|
||
|
port = 8080
|
||
|
}
|
||
|
|
||
|
bindAddress := cfg.BindAddress
|
||
|
if bindAddress == "*" {
|
||
|
bindAddress = ""
|
||
|
}
|
||
|
|
||
|
srv := Server{}
|
||
|
|
||
|
srv.Addr = fmt.Sprintf("%s:%d", bindAddress, port)
|
||
|
log.Debugf("using address: %s:%s", bindAddress, srv.Addr)
|
||
|
|
||
|
fileServer := http.FileServer(storage)
|
||
|
|
||
|
log.Debugf("handle path: /%s", cfg.Path)
|
||
|
http.Handle(fmt.Sprintf("/%s", cfg.Path), fileServer)
|
||
|
|
||
|
return &srv
|
||
|
}
|