diff --git a/develop.go b/develop.go index e5417ce..899fd34 100644 --- a/develop.go +++ b/develop.go @@ -2,10 +2,8 @@ package main -const port = 8080 - -func getSecret() string { - return "test" +func getSecret() (string, error) { + return "test", nil } func getDbPath() string { diff --git a/internal/server/middleware.go b/internal/server/middleware.go index 432eb6e..edb3bc9 100644 --- a/internal/server/middleware.go +++ b/internal/server/middleware.go @@ -11,7 +11,7 @@ func (s *Server) Auth(next http.Handler) http.Handler { next.ServeHTTP(w, r) return } - if cookie != nil && cookie.Value == s.secret { + if s.secret == "" || (cookie != nil && cookie.Value == s.secret) { next.ServeHTTP(w, r) } else { http.Redirect(w, r, "/login", http.StatusFound) diff --git a/main.go b/main.go index 4b15ba1..45570f9 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "flag" "fmt" "net/http" "os" @@ -15,20 +16,39 @@ import ( "github.com/pablu23/mangaGetter/internal/server" ) +var ( + secretFlag = flag.String("secret", "", "Secret to use for Auth") + authFlag = flag.Bool("auth", false, "Use Auth, does not need to be set if secret or secret-path is set") + secretFilePathFlag = flag.String("secret-path", "", "Path to file with ONLY secret in it") + portFlag = flag.Int("port", 80, "The port on which to host") + serverFlag = flag.Bool("server", false, "If false dont open Browser with Address") + databaseFlag = flag.String("database", "", "Path to sqlite.db file") +) + func main() { - openBrowser := true + var secret string = "" var filePath string - var secret string - if len(os.Args) >= 2 { - openBrowser = false - filePath = os.Args[2] - buf, err := os.ReadFile(os.Args[3]) + + flag.Parse() + if secretFlag != nil && *secretFlag != "" { + secret = *secretFlag + } else if secretFilePathFlag != nil && *secretFilePathFlag != "" { + buf, err := os.ReadFile(*secretFilePathFlag) if err != nil { panic(err) } secret = string(buf) + } else if *authFlag { + cacheSecret, err := getSecret() + secret = cacheSecret + if err != nil { + fmt.Printf("Secret file could not be found or read because of %s, not activating Auth\n", err) + } + } + + if databaseFlag != nil && *databaseFlag != "" { + filePath = *databaseFlag } else { - secret = getSecret() filePath = getDbPath() } @@ -39,7 +59,7 @@ func main() { return } - secret = strings.TrimSpace(secret) + secret = strings.TrimSpace(secret) mux := http.NewServeMux() s := server.New(&provider.Bato{}, &db, mux, secret) @@ -52,17 +72,17 @@ func main() { } }() - if openBrowser { + if serverFlag != nil && !*serverFlag { go func() { time.Sleep(300 * time.Millisecond) - err := open(fmt.Sprintf("http://localhost:%d", port)) + err := open(fmt.Sprintf("http://localhost:%d", *portFlag)) if err != nil { fmt.Println(err) } }() } - err = s.Start(port) + err = s.Start(*portFlag) if err != nil { panic(err) } diff --git a/release.go b/release.go index 1425f65..027a9b6 100644 --- a/release.go +++ b/release.go @@ -7,21 +7,19 @@ import ( "path/filepath" ) -const port = 80 - -func getSecret() string { +func getSecret() (string, error) { dir, err := os.UserCacheDir() if err != nil { - panic(err) + return "", err } dirPath := filepath.Join(dir, "MangaGetter") filePath := filepath.Join(dirPath, "secret.secret") buf, err := os.ReadFile(filePath) if err != nil { - panic(err) + return "", err } - return string(buf) + return string(buf), nil } func getDbPath() string {