"""Generator wpisu do APP_USERS — konta imienne (PRE-17). Hasło podajesz interaktywnie (nie w argumencie), żeby nie zostało w historii powłoki ani w liście procesów. Na wyjściu dostajesz gotowy wpis `login:hash` do zmiennej APP_USERS — samo hasło nigdzie nie jest zapisywane. python scripts/make_user.py alicja Kilka kont sklejasz przecinkiem: APP_USERS='alicja:scrypt$…,bartek:scrypt$…' Odebranie dostępu jednej osobie = usunięcie jej wpisu (reszta nie zmienia haseł). """ import getpass import sys import pathlib sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1])) from app.security import hash_password # noqa: E402 def main() -> int: if len(sys.argv) != 2: print(__doc__) return 2 login = sys.argv[1].strip() if not login or ":" in login or "," in login: print("Login nie może być pusty ani zawierać ':' lub ',' (rozdzielają wpisy).") return 2 first = getpass.getpass(f"Hasło dla '{login}': ") if not first: print("Puste hasło — przerwane.") return 2 if first != getpass.getpass("Powtórz hasło: "): print("Hasła się różnią — przerwane.") return 2 print("\nDopisz do APP_USERS (wpisy po przecinku):\n") print(f"{login}:{hash_password(first)}\n") return 0 if __name__ == "__main__": raise SystemExit(main())