cli: add create-user command to main_server

This replaces the bash script with an embedded command in the Go binary so it can be executed within the docker container.
This commit is contained in:
2026-04-27 09:05:59 +02:00
parent f28fa27eda
commit 6b19a0dce7
2 changed files with 31 additions and 68 deletions

View File

@@ -12,8 +12,10 @@ import (
"syscall" "syscall"
"time" "time"
"github.com/google/uuid"
"github.com/joho/godotenv" "github.com/joho/godotenv"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
"golang.org/x/crypto/bcrypt"
"mal/api/auth" "mal/api/auth"
"mal/integrations/jikan" "mal/integrations/jikan"
@@ -26,6 +28,35 @@ import (
func main() { func main() {
_ = godotenv.Load() _ = godotenv.Load()
if len(os.Args) > 1 && os.Args[1] == "create-user" {
if len(os.Args) != 4 {
log.Fatalf("Usage: %s create-user <username> <password>", 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())) db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?_foreign_keys=on", dbFile()))
if err != nil { if err != nil {
log.Fatalf("failed to open db: %v", err) log.Fatalf("failed to open db: %v", err)

View File

@@ -1,68 +0,0 @@
#!/usr/bin/env bash
set -e
usage() {
echo "Brug: $0 --username=<brugernavn> --password=<adgangskode>"
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);
}
"