#!/bin/sh # wcadduser - add a user to fanr.sqlite # Usage: ./wcadduser [password] # If password omitted, a random one is generated and printed. # Requires: genulid binary in same directory. set -eu DB="fanr.sqlite" DEFAULT_ROOM="general" # Get script directory (POSIX) SCRIPT_DIR=$(dirname "$0") GENULID="$SCRIPT_DIR/genulid" CREATE_PASSWORD="$SCRIPT_DIR/bcrypt_tool hash" if [ ! -x "$GENULID" ]; then echo "Error: $GENULID not found or not executable" >&2 exit 1 fi if [ $# -lt 1 ]; then echo "Usage: $0 [password]" >&2 exit 1 fi USERNAME="$1" PASSWORD="$2" echo "database [$DB]" # Generate random password if not provided if [ -z "$PASSWORD" ]; then # POSIX: head, base64, tr, cut are typically available PASSWORD=$(head -c12 /dev/urandom | base64 | tr -d '\n' | cut -c1-12) echo "Generated password for $USERNAME: $PASSWORD" >&2 fi # Check if user already exists if sqlite3 "$DB" "SELECT 1 FROM users WHERE username = '$USERNAME';" | grep -q 1; then echo "User '$USERNAME' already exists. No changes made." >&2 exit 0 fi HASHED_PASSWORD=$($CREATE_PASSWORD $PASSWORD) # Generate ULID USER_ID=$("$GENULID") if [ -z "$USER_ID" ]; then echo "Error: genulid produced empty output" >&2 exit 1 fi # Insert user and add to default room sqlite3 "$DB" <&2