2024-05-12 22:23:34 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
2024-05-12 22:27:05 +01:00
|
|
|
"github.com/1f349/cardcaldav"
|
2024-05-12 22:23:34 +01:00
|
|
|
"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")
|
|
|
|
}
|