From e3f5f4371d9deb4f4a752df996455a38bb477016 Mon Sep 17 00:00:00 2001 From: MrMelon54 Date: Sun, 12 May 2024 22:23:34 +0100 Subject: [PATCH] Commit test program --- .gitignore | 1 - auth.go | 18 +++++++++++- cmd/cardcal-auth-tester/main.go | 50 +++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 cmd/cardcal-auth-tester/main.go diff --git a/.gitignore b/.gitignore index 65d9549..9f11b75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ .idea/ -cardcal-auth-tester diff --git a/auth.go b/auth.go index 62b3919..7ba70ab 100644 --- a/auth.go +++ b/auth.go @@ -3,7 +3,9 @@ package cardcaldav import ( "cardcaldav/database" "context" + "database/sql" "errors" + "github.com/charmbracelet/log" "golang.org/x/crypto/bcrypt" "net/http" "strings" @@ -34,6 +36,21 @@ type ProviderMiddleware interface { var authError = errors.New("auth context error") +func NewAuth(dbStr string, logger *log.Logger) *Auth { + dbOpen, err := sql.Open("mysql", dbStr) + if err != nil { + logger.Fatal("sql.Open()", "err", err) + } + err = dbOpen.Ping() + if err != nil { + logger.Fatal("db.Ping()", "err", err) + } + + dbQueries := database.New(dbOpen) + + return &Auth{DB: dbQueries} +} + type Auth struct { DB *database.Queries } @@ -58,7 +75,6 @@ func (a *Auth) Middleware(next http.Handler) http.Handler { } r = r.WithContext(NewContext(r.Context(), &Context{UserName: username})) - r.BasicAuth() next.ServeHTTP(w, r) }) } diff --git a/cmd/cardcal-auth-tester/main.go b/cmd/cardcal-auth-tester/main.go new file mode 100644 index 0000000..54a45ac --- /dev/null +++ b/cmd/cardcal-auth-tester/main.go @@ -0,0 +1,50 @@ +package main + +import ( + "cardcaldav" + "context" + "flag" + "fmt" + "github.com/charmbracelet/log" + "golang.org/x/term" + "os" +) + +var Logger = log.NewWithOptions(os.Stderr, log.Options{ + ReportTimestamp: true, + ReportCaller: true, +}) + +func main() { + var un, dbStr string + var debugMode bool + flag.StringVar(&un, "un", "", "username of user to authenticate") + flag.StringVar(&dbStr, "db", "", "Connection string for the database - user:password@tcp(127.0.0.1:3306)/dbname") + flag.BoolVar(&debugMode, "debug", false, "enable debug logging") + flag.Parse() + + if debugMode { + Logger.SetLevel(log.DebugLevel) + } + + if !term.IsTerminal(int(os.Stdin.Fd())) { + Logger.Fatal("No terminal input found") + } + + auth := cardcaldav.NewAuth(dbStr, Logger) + + _, _ = fmt.Fprint(os.Stderr, "Password: ") + password, err := term.ReadPassword(int(os.Stdin.Fd())) + if err != nil { + Logger.Fatal("ReadPassword()", "err", err) + } + _, _ = fmt.Fprintln(os.Stderr) + Logger.Info("Verifying password...") + + err = auth.ValidateCredentials(context.Background(), un, string(password)) + if err != nil { + Logger.Fatal("auth.ValidateCredentials()", "err", err) + } + + Logger.Info("Password verified") +}