diff --git a/natster-io/public/install.sh b/natster-io/public/install.sh index 326b2ba..e1fa6bc 100755 --- a/natster-io/public/install.sh +++ b/natster-io/public/install.sh @@ -12,7 +12,7 @@ get_version() { command curl -L -s \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/synadia-labs/natster/releases/latest | + https://natster.io/dl/latest | command jq -r '.name' ) } @@ -89,16 +89,20 @@ echo " os=$(get_os) arch=$(get_arch) binary_version=$(get_version) -file_name="nex_${binary_version}_${os}_${arch}" -asset_uri="https://github.com/synadia-labs/natster/releases/download/${binary_version}/${file_name}" +# file_name="natster_${binary_version}_${os}_${arch}" +# asset_uri="https://github.com/synadia-labs/natster/releases/download/${binary_version}/${file_name}" +file_name="natster" +asset_uri="https://natster.io/dl/natster_${os}_${arch}/${file_name}" -downloadFolder="${TMPDIR:-/tmp}" -mkdir -p ${downloadFolder} +downloadFolder="${TMPDIR:-/tmp}/natster_installer" +executable_folder="${HOME}/.natster/bin" downloaded_file="${downloadFolder}/natster" -executable_folder="/usr/local/bin" + +mkdir -p ${downloadFolder} +mkdir -p ${executable_folder} echo "[1/3] Download ${asset_uri} to ${downloadFolder}" -rm -f ${downloaded_file} +rm -f ${downloadedFolder} curl --silent --fail --location --output "${downloaded_file}" "${asset_uri}" echo "[2/3] Install natster to ${executable_folder}" diff --git a/natster-io/server/main.go b/natster-io/server/main.go index f2e958e..d561908 100644 --- a/natster-io/server/main.go +++ b/natster-io/server/main.go @@ -17,6 +17,9 @@ var static embed.FS type Options struct { servePort int serveHost string + + binDir string + logging bool } var ( @@ -37,6 +40,8 @@ func main() { serve := natsterServer.Command("serve", "Serve webapp") serve.Flag("host", "Host to serve on").StringVar(&Opts.serveHost) serve.Flag("port", "Port to listen on").Default("8080").IntVar(&Opts.servePort) + serve.Flag("binDir", "Directory holding natster binaries").Default("/tmp/natster_binaries/").StringVar(&Opts.binDir) + serve.Flag("withLogging", "Logs web request").Default("false").UnNegatableBoolVar(&Opts.logging) serve.Action(func(_ *fisk.ParseContext) error { return RunServer() }) @@ -45,13 +50,38 @@ func main() { } func RunServer() error { + muxer := http.NewServeMux() + + info, err := os.Stat(Opts.binDir) + if err != nil { + fmt.Println("WARN no bin dir, not serving") + } else { + if info.IsDir() { + binServe := http.FileServer(http.Dir(Opts.binDir)) + muxer.Handle("/dl/", http.StripPrefix("/dl", binServe)) + } else { + fmt.Println("WARN user did not provide directory, not serving") + } + } + var staticFS = fs.FS(static) htmlContent, err := fs.Sub(staticFS, "dist") if err != nil { log.Fatal(err) } - fs := http.FileServer(http.FS(htmlContent)) + muxer.Handle("/", http.FileServer(http.FS(htmlContent))) fmt.Printf("Server started %s:%d\n", Opts.serveHost, Opts.servePort) - return http.ListenAndServe(fmt.Sprintf("%s:%d", Opts.serveHost, Opts.servePort), fs) + if Opts.logging { + return http.ListenAndServe(fmt.Sprintf("%s:%d", Opts.serveHost, Opts.servePort), logz(muxer)) + } else { + return http.ListenAndServe(fmt.Sprintf("%s:%d", Opts.serveHost, Opts.servePort), muxer) + } +} + +func logz(handler http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Printf("Host: %s | Path: %s | Query: %s\n", r.Host, r.URL.Path, r.URL.RawQuery) + handler.ServeHTTP(w, r) + }) }