#!/usr/bin/env php /dev/null'); $v = rtrim((string)fgets(STDIN), "\n"); shell_exec('stty echo 2>/dev/null'); fwrite(STDOUT, "\n"); return $v; } function fail(string $msg): void { fwrite(STDERR, "FEL: $msg\n"); exit(1); } $c = cfg()['redis'] ?? []; fwrite(STDOUT, "Redis: " . ($c['unix_socket'] ?? ($c['host'] ?? '?')) . " prefix='" . ($c['prefix'] ?? '') . "' (från " . $LIB . ")\n\n"); $r = redis(); /* --- Callsign (samma regler som signup.php) --- */ $cs = base_call(ask('Callsign')); if (strlen($cs) < 3 || strlen($cs) > 10 || !preg_match('/^[A-Z0-9]+$/', $cs)) { fail('Callsign måste vara 3-10 tecken A-Z/0-9.'); } if ((string)$r->get(call_index_key($cs)) !== '') fail("Callsign $cs finns redan."); /* --- Profil --- */ $first = ask('Förnamn'); $last = ask('Efternamn'); $email = norm_email(ask('E-post')); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) fail('Ogiltig e-postadress.'); if ((string)$r->get(email_index_key($email)) !== '') fail("E-posten $email finns redan."); $city = ask('Stad', ''); $state = ask('Region/State', ''); $country = ask('Land', ''); /* --- Adminnivå (1=vanlig, 2=admin, 3=super; jfr acct_admin_level/require_admin) --- */ $level = (int)ask('admin_level (1-3)', '3'); if ($level < 1 || $level > 3) fail('admin_level måste vara 1-3.'); /* --- Lösenord (dolt, dubbelt) --- */ $p1 = ask_secret('Lösenord'); $p2 = ask_secret('Lösenord igen'); if ($p1 !== $p2) fail('Lösenorden matchar inte.'); if (strlen($p1) < 6) fail('Lösenord måste vara minst 6 tecken.'); /* --- Skapa konto + index (samma layout som signup.php) --- */ $uuid = uuidv4(); $r->hMSet(acct_key($uuid), [ 'callsign' => $cs, 'firstname' => $first, 'lastname' => $last, 'shortname' => $first, 'email' => $email, 'city' => $city, 'state' => $state, 'country' => $country, 'password_hash' => password_hash($p1, PASSWORD_DEFAULT), 'email_verified' => '1', // admin-provisionering: hoppa över mejlverifiering 'admin_level' => (string)$level, 'created_at' => (string)time(), ]); $r->set(call_index_key($cs), $uuid); $r->set(email_index_key($email), $uuid); fwrite(STDOUT, "\nOK: konto '$cs' skapat (admin_level $level)\n"); fwrite(STDOUT, " uuid = $uuid\n"); fwrite(STDOUT, " logga in med callsign eller e-post + lösenordet ovan.\n");