Przeglądaj źródła

converted passwords to argon2 from sha256 hashing

control 3 lat temu
rodzic
commit
33a116ecbd

+ 1 - 0
Pipfile

@@ -15,6 +15,7 @@ apscheduler = "*"
 stripe = "*"
 stripe = "*"
 pyotp = "*"
 pyotp = "*"
 gunicorn = "*"
 gunicorn = "*"
+argon2-cffi = "*"
 
 
 [dev-packages]
 [dev-packages]
 
 

+ 101 - 4
Pipfile.lock

@@ -1,7 +1,7 @@
 {
 {
     "_meta": {
     "_meta": {
         "hash": {
         "hash": {
-            "sha256": "788d94c8ce84405d5fc3b5cd9c06f6afca1ecb4f460bcc268f6a1703bca6c397"
+            "sha256": "ecb19eb332c576288a9884efa979f6ba717c516d4c3b20b13b50b8883dd8010c"
         },
         },
         "pipfile-spec": 6,
         "pipfile-spec": 6,
         "requires": {
         "requires": {
@@ -24,6 +24,41 @@
             "index": "pypi",
             "index": "pypi",
             "version": "==3.9.1"
             "version": "==3.9.1"
         },
         },
+        "argon2-cffi": {
+            "hashes": [
+                "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80",
+                "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"
+            ],
+            "index": "pypi",
+            "version": "==21.3.0"
+        },
+        "argon2-cffi-bindings": {
+            "hashes": [
+                "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670",
+                "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f",
+                "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583",
+                "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194",
+                "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c",
+                "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a",
+                "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082",
+                "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5",
+                "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f",
+                "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7",
+                "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d",
+                "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f",
+                "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae",
+                "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3",
+                "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86",
+                "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367",
+                "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d",
+                "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93",
+                "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb",
+                "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e",
+                "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"
+            ],
+            "markers": "python_version >= '3.6'",
+            "version": "==21.2.0"
+        },
         "certifi": {
         "certifi": {
             "hashes": [
             "hashes": [
                 "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872",
                 "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872",
@@ -31,6 +66,61 @@
             ],
             ],
             "version": "==2021.10.8"
             "version": "==2021.10.8"
         },
         },
+        "cffi": {
+            "hashes": [
+                "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3",
+                "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2",
+                "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636",
+                "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20",
+                "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728",
+                "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27",
+                "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66",
+                "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443",
+                "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0",
+                "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7",
+                "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39",
+                "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605",
+                "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a",
+                "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37",
+                "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029",
+                "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139",
+                "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc",
+                "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df",
+                "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14",
+                "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880",
+                "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2",
+                "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a",
+                "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e",
+                "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474",
+                "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024",
+                "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8",
+                "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0",
+                "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e",
+                "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a",
+                "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e",
+                "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032",
+                "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6",
+                "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e",
+                "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b",
+                "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e",
+                "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954",
+                "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962",
+                "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c",
+                "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4",
+                "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55",
+                "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962",
+                "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023",
+                "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c",
+                "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6",
+                "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8",
+                "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382",
+                "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7",
+                "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc",
+                "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997",
+                "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"
+            ],
+            "version": "==1.15.0"
+        },
         "charset-normalizer": {
         "charset-normalizer": {
             "hashes": [
             "hashes": [
                 "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597",
                 "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597",
@@ -234,6 +324,13 @@
             "markers": "python_version >= '3.7'",
             "markers": "python_version >= '3.7'",
             "version": "==2.1.1"
             "version": "==2.1.1"
         },
         },
+        "pycparser": {
+            "hashes": [
+                "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9",
+                "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"
+            ],
+            "version": "==2.21"
+        },
         "pyotp": {
         "pyotp": {
             "hashes": [
             "hashes": [
                 "sha256:9d144de0f8a601d6869abe1409f4a3f75f097c37b50a36a3bf165810a6e23f28",
                 "sha256:9d144de0f8a601d6869abe1409f4a3f75f097c37b50a36a3bf165810a6e23f28",
@@ -267,11 +364,11 @@
         },
         },
         "setuptools": {
         "setuptools": {
             "hashes": [
             "hashes": [
-                "sha256:7999cbd87f1b6e1f33bf47efa368b224bed5e27b5ef2c4d46580186cbcb1a86a",
-                "sha256:a65e3802053e99fc64c6b3b29c11132943d5b8c8facbcc461157511546510967"
+                "sha256:26ead7d1f93efc0f8c804d9fafafbe4a44b179580a7105754b245155f9af05a8",
+                "sha256:47c7b0c0f8fc10eec4cf1e71c6fdadf8decaa74ffa087e68cd1c20db7ad6a592"
             ],
             ],
             "markers": "python_version >= '3.7'",
             "markers": "python_version >= '3.7'",
-            "version": "==62.0.0"
+            "version": "==62.1.0"
         },
         },
         "six": {
         "six": {
             "hashes": [
             "hashes": [

+ 11 - 4
app/accounts.py

@@ -3,6 +3,7 @@ from unicodedata import category
 from flask import Blueprint, render_template, request, flash, redirect, url_for
 from flask import Blueprint, render_template, request, flash, redirect, url_for
 from flask_login import login_user, login_required, logout_user, current_user
 from flask_login import login_user, login_required, logout_user, current_user
 from werkzeug.security import generate_password_hash, check_password_hash
 from werkzeug.security import generate_password_hash, check_password_hash
+from argon2 import PasswordHasher
 from .models import User
 from .models import User
 from . import db
 from . import db
 
 
@@ -29,7 +30,9 @@ def login():
 
 
         # If there's a user
         # If there's a user
         if user:
         if user:
-            if check_password_hash(user.password, challenge_passwd):
+            ##:
+            ph = PasswordHasher()
+            if ph.verify(user.password, challenge_passwd):
                 return redirect(url_for('accounts.mfa', user_chal = user.id)) # passes user to mfa
                 return redirect(url_for('accounts.mfa', user_chal = user.id)) # passes user to mfa
             else:
             else:
                 flash('Unsucessful Login!', category='error')
                 flash('Unsucessful Login!', category='error')
@@ -71,16 +74,20 @@ def register():
         else:
         else:
             pass_list.append('p')
             pass_list.append('p')
 
 
-        if len(passwd_1) < 8 or len(passwd_2) < 8:
-            flash('Your Password must be longer than or equal to 8 characters.', category='error')
+        if len(passwd_1) < 12 or len(passwd_2) < 12:
+            flash('Your Password must be longer than or equal to 12 characters.', category='error')
         else:
         else:
             if passwd_1 != passwd_2:
             if passwd_1 != passwd_2:
                 flash('Your Passwords must match!', category='error')
                 flash('Your Passwords must match!', category='error')
             else:
             else:
                 if len(pass_list) == 2:
                 if len(pass_list) == 2:
+                    ##:
+                    ph = PasswordHasher()
+                    npasswd = ph.hash(passwd_2)
+
                     new_user = User(email=email, 
                     new_user = User(email=email, 
                                     username=username,
                                     username=username,
-                                    password=generate_password_hash(passwd_2, method='sha256')
+                                    password=npasswd
                                     )
                                     )
                     db.session.add(new_user)
                     db.session.add(new_user)
                     db.session.commit()
                     db.session.commit()

+ 15 - 5
app/dashboards.py

@@ -1,6 +1,7 @@
 from flask import Blueprint, render_template, request, flash, redirect, url_for
 from flask import Blueprint, render_template, request, flash, redirect, url_for
 from flask_login import login_required, current_user
 from flask_login import login_required, current_user
 from werkzeug.security import generate_password_hash, check_password_hash
 from werkzeug.security import generate_password_hash, check_password_hash
+from argon2 import PasswordHasher
 from sqlalchemy import desc
 from sqlalchemy import desc
 from .models import User, Art, List, Bids, Wallet, Stripe, TX, Hashchain
 from .models import User, Art, List, Bids, Wallet, Stripe, TX, Hashchain
 from . import db
 from . import db
@@ -42,6 +43,8 @@ def profile():
 
 
     seform = SearchForm()
     seform = SearchForm()
 
 
+    ph = PasswordHasher()
+
     # Initializes wallet and fetches amount
     # Initializes wallet and fetches amount
     dispatch.init_wallet(current_user.id)
     dispatch.init_wallet(current_user.id)
     wallet = Wallet.query.filter_by(user_id = current_user.id).first()
     wallet = Wallet.query.filter_by(user_id = current_user.id).first()
@@ -99,13 +102,20 @@ def profile():
 
 
         # Basic password checks before adding to db
         # Basic password checks before adding to db
         if passwd and passwd_con and cpasswd:
         if passwd and passwd_con and cpasswd:
-            if passwd == passwd_con and check_password_hash(current_user.password, cpasswd):
-                npasswd_dbcall = User.query.filter_by(id=current_user.id).first()
-                npasswd_dbcall.password = generate_password_hash(passwd_con, method='sha256')
-                db.session.commit()
-                flash('Updated password!', category='success')
+            if passwd == passwd_con and ph.verify(current_user.password, cpasswd):
+                if len(passwd_con) >= 12:
+                    ##:
+                    npasswd = ph.hash(passwd_con)
+                    npasswd_dbcall = User.query.filter_by(id=current_user.id).first()
+                    npasswd_dbcall.password = npasswd
+                    db.session.commit()
+                    flash('Updated password!', category='success')
+                elif len(passwd_con) < 12:
+                    flash('Password must be equal or longer than 12 characters!', category='error')
             else:
             else:
                 flash('Password update failed!', category='error')
                 flash('Password update failed!', category='error')
+        else:
+            flash('Fill in all password fields!', category='error')
 
 
     my_art = Art.query.filter_by(owner=current_user.id).all()
     my_art = Art.query.filter_by(owner=current_user.id).all()
     my_creation = Art.query.filter_by(creator=current_user.id).all()
     my_creation = Art.query.filter_by(creator=current_user.id).all()

BIN
app/database.db


BIN
app/static/repository/AnJxUhcoPIBghcy9.jpeg


+ 0 - 0
app/static/repository/aBUEwIIePGtUAn0R.jpeg → app/static/repository/BgnVmr3VmNKCJMJW.jpeg


BIN
app/static/repository/LB0Ix379Cfp5Oa1H.jpg


BIN
app/static/repository/ivfkWrh26doh3Fyd.jpeg


BIN
app/static/repository/kTLGDhxQ1XhmL8BD.jpg


BIN
app/static/repository/oJvqmOoRefw2aYBl.jpeg


BIN
app/static/repository/qoMyozKNS15XWDfb.jpg


BIN
app/static/uploads/yoOlNBvdf9P1RvtQ.jpeg