diff --git a/cmd/server/main.go b/cmd/server/main.go index de202a7..271804d 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -12,8 +12,10 @@ import ( "syscall" "time" + "github.com/google/uuid" "github.com/joho/godotenv" _ "github.com/mattn/go-sqlite3" + "golang.org/x/crypto/bcrypt" "mal/api/auth" "mal/integrations/jikan" @@ -26,6 +28,35 @@ import ( func main() { _ = godotenv.Load() + if len(os.Args) > 1 && os.Args[1] == "create-user" { + if len(os.Args) != 4 { + log.Fatalf("Usage: %s create-user ", os.Args[0]) + } + + username := os.Args[2] + password := os.Args[3] + + db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?_foreign_keys=on", dbFile())) + if err != nil { + log.Fatalf("failed to open db: %v", err) + } + defer db.Close() + + hash, err := bcrypt.GenerateFromPassword([]byte(password), 12) + if err != nil { + log.Fatalf("failed to hash password: %v", err) + } + + id := uuid.New().String() + _, err = db.Exec("INSERT INTO user (id, username, password_hash) VALUES (?, ?, ?)", id, username, string(hash)) + if err != nil { + log.Fatalf("failed to create user (might already exist): %v", err) + } + + fmt.Printf("✅ Brugeren '%s' blev oprettet med succes!\n", username) + return + } + db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?_foreign_keys=on", dbFile())) if err != nil { log.Fatalf("failed to open db: %v", err) diff --git a/create-user.sh b/create-user.sh deleted file mode 100755 index c3922b6..0000000 --- a/create-user.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env bash - -set -e - -usage() { - echo "Brug: $0 --username= --password=" - exit 1 -} - -USERNAME="" -PASSWORD="" - -for i in "$@"; do - case $i in - --username=*) - USERNAME="${i#*=}" - shift - ;; - --password=*) - PASSWORD="${i#*=}" - shift - ;; - *) - echo "Ukendt parameter: $i" - usage - ;; - esac -done - -if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then - usage -fi - -export USERNAME -export PASSWORD - -bun -e " -import { Database } from 'bun:sqlite'; -import { randomUUID } from 'crypto'; - -const username = process.env.USERNAME; -const password = process.env.PASSWORD; - -try { - const db = new Database('mal.db'); - - const hash = await Bun.password.hash(password, { algorithm: 'bcrypt' }); - - const id = randomUUID(); - - const query = db.query('INSERT INTO user (id, username, password_hash) VALUES (\$id, \$username, \$hash)'); - - query.run({ - \$id: id, - \$username: username, - \$hash: hash - }); - - console.log(\`✅ Brugeren '\${username}' blev oprettet med succes!\`); -} catch (error) { - if (error.message.includes('UNIQUE constraint failed')) { - console.error(\`❌ Fejl: Brugeren '\${username}' findes allerede.\`); - } else { - console.error('❌ Database fejl:', error.message); - } - process.exit(1); -} -"