]> git.lizzy.rs Git - cheatdb.git/commitdiff
Add default password to admin user
authornOOb3167 <nOOb3167@gmail.com>
Sun, 24 Jun 2018 11:27:28 +0000 (11:27 +0000)
committerrubenwardy <rw@rubenwardy.com>
Tue, 24 Jul 2018 19:39:48 +0000 (20:39 +0100)
app/utils.py
setup.py

index b2faa7aa6c091300c23f33f39a21d83326865bf0..dc657367260c362d96d090bd067513f0d0ba18f0 100644 (file)
@@ -50,6 +50,25 @@ def doFileUpload(file, allowedExtensions, fileTypeName):
        file.save(os.path.join("app/public/uploads", filename))
        return "/uploads/" + filename
 
+def make_flask_user_password(plaintext_str):
+       # http://passlib.readthedocs.io/en/stable/modular_crypt_format.html
+       # http://passlib.readthedocs.io/en/stable/lib/passlib.hash.bcrypt.html#format-algorithm
+       # Flask_User stores passwords in the Modular Crypt Format.
+       # https://github.com/lingthio/Flask-User/blob/master/flask_user/user_manager__settings.py#L166
+       #   Note that Flask_User allows customizing password algorithms.
+       #   USER_PASSLIB_CRYPTCONTEXT_SCHEMES defaults to bcrypt but if
+       #   default changes or is customized, the code below needs adapting.
+       # Individual password values will look like:
+       #   $2b$12$.az4S999Ztvy/wa3UdQvMOpcki1Qn6VYPXmEFMIdWQyYs7ULnH.JW
+       #   $XX$RR$SSSSSSSSSSSSSSSSSSSSSSHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+       # $XX : Selects algorithm (2b is bcrypt).
+       # $RR : Selects bcrypt key expansion rounds (12 is 2**12 rounds).
+       # $SSS... : 22 chars of (random, per-password) salt
+       #  HHH... : 31 remaining chars of password hash (note no dollar sign)
+       import bcrypt
+       plaintext = plaintext_str.encode("UTF-8")
+       password = bcrypt.hashpw(plaintext, bcrypt.gensalt())
+       return password.decode("UTF-8")
 
 def _do_login_user(user, remember_me=False):
        def _call_or_get(v):
index e1c0168568d9e3d2fe4d71a8a45673be455d7ea1..e106aa2eba20b0f154a5c09ab60e4bd5cded1f5b 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -23,6 +23,7 @@ if not "FLASK_CONFIG" in os.environ:
 test_data = len(sys.argv) >= 2 and sys.argv[1].strip() == "-t"
 
 from app.models import *
+from app.utils import make_flask_user_password
 
 def defineDummyData(licenses, tags, ruben):
        ez = User("Shara")
@@ -342,6 +343,8 @@ db.create_all()
 print("Filling database...")
 
 ruben = User("rubenwardy")
+ruben.active = True
+ruben.password = make_flask_user_password("tuckfrump")
 ruben.github_username = "rubenwardy"
 ruben.forums_username = "rubenwardy"
 ruben.rank = UserRank.ADMIN