cerrado @ 3a1359b3ad03b2fdb3b9dc0df8629834f7419a08

feat: Add command to generate user passphrase
diff --git a/main.go b/main.go
index 18b73ff0fd202e715f3f6721bdc26d36fcebee0a..b891c8820f0c8bfd61b4d58dbaa6460d2531796e 100644
--- a/main.go
+++ b/main.go
@@ -3,10 +3,13 @@
 import (
 	"context"
 	"flag"
+	"fmt"
 	"log/slog"
 	"os"
 	"os/signal"
 	"time"
+
+	"golang.org/x/crypto/bcrypt"
 
 	"git.gabrielgio.me/cerrado/pkg/config"
 	"git.gabrielgio.me/cerrado/pkg/handler"
@@ -17,10 +20,30 @@
 func main() {
 	ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill)
 	defer stop()
+
+	if len(os.Args) == 4 && os.Args[1] == "hash" {
+		err := hash(os.Args[2], os.Args[3])
+		if err != nil {
+			slog.Error("Error", "error", err)
+			os.Exit(1)
+		}
+		return
+	}
+
 	if err := run(ctx); err != nil {
 		slog.Error("Error", "error", err)
 		os.Exit(1)
 	}
+}
+
+func hash(username string, password string) error {
+	passphrase := fmt.Sprintf("%s:%s", username, password)
+	bytes, err := bcrypt.GenerateFromPassword([]byte(passphrase), 14)
+	if err != nil {
+		return err
+	}
+	fmt.Println(string(bytes))
+	return nil
 }
 
 func run(ctx context.Context) error {