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:
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
"
|
|
||||||
Reference in New Issue
Block a user