diff --git a/scripts/gen_password b/scripts/gen_password
deleted file mode 100644
index 7afd3a5dfd..0000000000
--- a/scripts/gen_password
+++ /dev/null
@@ -1 +0,0 @@
-perl -MCrypt::Random -MCrypt::Eksblowfish::Bcrypt -e 'print Crypt::Eksblowfish::Bcrypt::bcrypt("secret", "\$2\$12\$" . Crypt::Eksblowfish::Bcrypt::en_base64(Crypt::Random::makerandom_octet(Length=>16)))."\n"'
diff --git a/scripts/hash_password b/scripts/hash_password
new file mode 100755
index 0000000000..e784600989
--- /dev/null
+++ b/scripts/hash_password
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+
+import argparse
+import bcrypt
+import getpass
+
+bcrypt_rounds=12
+
+def prompt_for_pass():
+ password = getpass.getpass("Password: ")
+
+ if not password:
+ raise Exception("Password cannot be blank.")
+
+ confirm_password = getpass.getpass("Confirm password: ")
+
+ if password != confirm_password:
+ raise Exception("Passwords do not match.")
+
+ return password
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(
+ description="Calculate the hash of a new password, so that passwords"
+ " can be reset")
+ parser.add_argument(
+ "-p", "--password",
+ default=None,
+ help="New password for user. Will prompt if omitted.",
+ )
+
+ args = parser.parse_args()
+ password = args.password
+
+ if not password:
+ password = prompt_for_pass()
+
+ print bcrypt.hashpw(password, bcrypt.gensalt(bcrypt_rounds))
+
diff --git a/scripts/synapse_port_db b/scripts/synapse_port_db
index fc92bbf2d8..a2a0f364cf 100755
--- a/scripts/synapse_port_db
+++ b/scripts/synapse_port_db
@@ -309,8 +309,8 @@ class Porter(object):
**self.postgres_config["args"]
)
- sqlite_engine = create_engine("sqlite3")
- postgres_engine = create_engine("psycopg2")
+ sqlite_engine = create_engine(FakeConfig(sqlite_config))
+ postgres_engine = create_engine(FakeConfig(postgres_config))
self.sqlite_store = Store(sqlite_db_pool, sqlite_engine)
self.postgres_store = Store(postgres_db_pool, postgres_engine)
@@ -792,3 +792,8 @@ if __name__ == "__main__":
if end_error_exec_info:
exc_type, exc_value, exc_traceback = end_error_exec_info
traceback.print_exception(exc_type, exc_value, exc_traceback)
+
+
+class FakeConfig:
+ def __init__(self, database_config):
+ self.database_config = database_config
|