From 273ab4cdab5ece0146e5d80561316cfa8ea105db Mon Sep 17 00:00:00 2001 From: Caozhenhui <823914102@qq.com> Date: Fri, 17 Dec 2021 09:45:10 +0800 Subject: [PATCH 1/2] avoid merge conflict --- myems-api/config.py | 163 ++++++++++++++--------------------------- myems-api/core/user.py | 23 ++++-- 2 files changed, 69 insertions(+), 117 deletions(-) diff --git a/myems-api/config.py b/myems-api/config.py index 29b019ae..c9ad8e57 100644 --- a/myems-api/config.py +++ b/myems-api/config.py @@ -1,154 +1,97 @@ from decouple import config -MYEMS_SYSTEM_DB_HOST = config('MYEMS_SYSTEM_DB_HOST', default='127.0.0.1') -MYEMS_SYSTEM_DB_PORT = config('MYEMS_SYSTEM_DB_PORT', default=3306, cast=int) -MYEMS_SYSTEM_DB_DATABASE = config('MYEMS_SYSTEM_DB_DATABASE', default='myems_system_db') -MYEMS_SYSTEM_DB_USER = config('MYEMS_SYSTEM_DB_USER', default='root') -MYEMS_SYSTEM_DB_PASSWORD = config('MYEMS_SYSTEM_DB_PASSWORD', default='!MyEMS1') - -MYEMS_ENERGY_DB_HOST = config('MYEMS_ENERGY_DB_HOST', default='127.0.0.1') -MYEMS_ENERGY_DB_PORT = config('MYEMS_ENERGY_DB_PORT', default=3306, cast=int) -MYEMS_ENERGY_DB_DATABASE = config('MYEMS_ENERGY_DB_DATABASE', default='myems_energy_db') -MYEMS_ENERGY_DB_USER = config('MYEMS_ENERGY_DB_USER', default='root') -MYEMS_ENERGY_DB_PASSWORD = config('MYEMS_ENERGY_DB_PASSWORD', default='!MyEMS1') - -MYEMS_ENERGY_BASELINE_DB_HOST = config('MYEMS_ENERGY_BASELINE_DB_HOST', default='127.0.0.1') -MYEMS_ENERGY_BASELINE_DB_PORT = config('MYEMS_ENERGY_BASELINE_DB_PORT', default=3306, cast=int) -MYEMS_ENERGY_BASELINE_DB_DATABASE = config('MYEMS_ENERGY_BASELINE_DB_DATABASE', default='myems_energy_baseline_db') -MYEMS_ENERGY_BASELINE_DB_USER = config('MYEMS_ENERGY_BASELINE_DB_USER', default='root') -MYEMS_ENERGY_BASELINE_DB_PASSWORD = config('MYEMS_ENERGY_BASELINE_DB_PASSWORD', default='!MyEMS1') - -MYEMS_BILLING_DB_HOST = config('MYEMS_BILLING_DB_HOST', default='127.0.0.1') -MYEMS_BILLING_DB_PORT = config('MYEMS_BILLING_DB_PORT', default=3306, cast=int) -MYEMS_BILLING_DB_DATABASE = config('MYEMS_BILLING_DB_DATABASE', default='myems_billing_db') -MYEMS_BILLING_DB_USER = config('MYEMS_BILLING_DB_USER', default='root') -MYEMS_BILLING_DB_PASSWORD = config('MYEMS_BILLING_DB_PASSWORD', default='!MyEMS1') - -MYEMS_BILLING_BASELINE_DB_HOST = config('MYEMS_BILLING_BASELINE_DB_HOST', default='127.0.0.1') -MYEMS_BILLING_BASELINE_DB_PORT = config('MYEMS_BILLING_BASELINE_DB_PORT', default=3306, cast=int) -MYEMS_BILLING_BASELINE_DB_DATABASE = config('MYEMS_BILLING_BASELINE_DB_DATABASE', default='myems_billing_baseline_db') -MYEMS_BILLING_BASELINE_DB_USER = config('MYEMS_BILLING_BASELINE_DB_USER', default='root') -MYEMS_BILLING_BASELINE_DB_PASSWORD = config('MYEMS_BILLING_BASELINE_DB_PASSWORD', default='!MyEMS1') - -MYEMS_HISTORICAL_DB_HOST = config('MYEMS_HISTORICAL_DB_HOST', default='127.0.0.1') -MYEMS_HISTORICAL_DB_PORT = config('MYEMS_HISTORICAL_DB_PORT', default=3306, cast=int) -MYEMS_HISTORICAL_DB_DATABASE = config('MYEMS_HISTORICAL_DB_DATABASE', default='myems_historical_db') -MYEMS_HISTORICAL_DB_USER = config('MYEMS_HISTORICAL_DB_USER', default='root') -MYEMS_HISTORICAL_DB_PASSWORD = config('MYEMS_HISTORICAL_DB_PASSWORD', default='!MyEMS1') - -MYEMS_USER_DB_HOST = config('MYEMS_USER_DB_HOST', default='127.0.0.1') -MYEMS_USER_DB_PORT = config('MYEMS_USER_DB_PORT', default=3306, cast=int) -MYEMS_USER_DB_DATABASE = config('MYEMS_USER_DB_DATABASE', default='myems_user_db') -MYEMS_USER_DB_USER = config('MYEMS_USER_DB_USER', default='root') -MYEMS_USER_DB_PASSWORD = config('MYEMS_USER_DB_PASSWORD', default='!MyEMS1') - -MYEMS_FDD_DB_HOST = config('MYEMS_FDD_DB_HOST', default='127.0.0.1') -MYEMS_FDD_DB_PORT = config('MYEMS_FDD_DB_PORT', default=3306, cast=int) -MYEMS_FDD_DB_DATABASE = config('MYEMS_FDD_DB_DATABASE', default='myems_fdd_db') -MYEMS_FDD_DB_USER = config('MYEMS_FDD_DB_USER', default='root') -MYEMS_FDD_DB_PASSWORD = config('MYEMS_FDD_DB_PASSWORD', default='!MyEMS1') - -MYEMS_REPORTING_DB_HOST = config('MYEMS_REPORTING_DB_HOST', default='127.0.0.1') -MYEMS_REPORTING_DB_PORT = config('MYEMS_REPORTING_DB_PORT', default=3306, cast=int) -MYEMS_REPORTING_DB_DATABASE = config('MYEMS_REPORTING_DB_DATABASE', default='myems_reporting_db') -MYEMS_REPORTING_DB_USER = config('MYEMS_REPORTING_DB_USER', default='root') -MYEMS_REPORTING_DB_PASSWORD = config('MYEMS_REPORTING_DB_PASSWORD', default='!MyEMS1') - -MINUTES_TO_COUNT = config('MINUTES_TO_COUNT', default=60, cast=int) -UTC_OFFSET = config('UTC_OFFSET', default='+08:00') -WORKING_DAY_START_TIME_LOCAL = config('WORKING_DAY_START_TIME_LOCAL', default='00:00:00') -UPLOAD_PATH = config('UPLOAD_PATH', default='/var/www/html/admin/upload/') -CURRENCY_UNIT = config('CURRENCY_UNIT', default='CNY') - myems_system_db = { - 'host': MYEMS_SYSTEM_DB_HOST, - 'port': MYEMS_SYSTEM_DB_PORT, - 'database': MYEMS_SYSTEM_DB_DATABASE, - 'user': MYEMS_SYSTEM_DB_USER, - 'password': MYEMS_SYSTEM_DB_PASSWORD, + 'host': config('MYEMS_SYSTEM_DB_HOST', default='127.0.0.1'), + 'port': config('MYEMS_SYSTEM_DB_PORT', default=3306, cast=int), + 'database': config('MYEMS_SYSTEM_DB_DATABASE', default='myems_system_db'), + 'user': config('MYEMS_SYSTEM_DB_USER', default='root'), + 'password': config('MYEMS_SYSTEM_DB_PASSWORD', default='!MyEMS1'), } myems_energy_db = { - 'host': MYEMS_ENERGY_DB_HOST, - 'port': MYEMS_ENERGY_DB_PORT, - 'database': MYEMS_ENERGY_DB_DATABASE, - 'user': MYEMS_ENERGY_DB_USER, - 'password': MYEMS_ENERGY_DB_PASSWORD, + 'host': config('MYEMS_ENERGY_DB_HOST', default='127.0.0.1'), + 'port': config('MYEMS_ENERGY_DB_PORT', default=3306, cast=int), + 'database': config('MYEMS_ENERGY_DB_DATABASE', default='myems_energy_db'), + 'user': config('MYEMS_ENERGY_DB_USER', default='root'), + 'password': config('MYEMS_ENERGY_DB_PASSWORD', default='!MyEMS1'), } myems_energy_baseline_db = { - 'host': MYEMS_ENERGY_BASELINE_DB_HOST, - 'port': MYEMS_ENERGY_BASELINE_DB_PORT, - 'database': MYEMS_ENERGY_BASELINE_DB_DATABASE, - 'user': MYEMS_ENERGY_BASELINE_DB_USER, - 'password': MYEMS_ENERGY_BASELINE_DB_PASSWORD, + 'host': config('MYEMS_ENERGY_BASELINE_DB_HOST', default='127.0.0.1'), + 'port': config('MYEMS_ENERGY_BASELINE_DB_PORT', default=3306, cast=int), + 'database': config('MYEMS_ENERGY_BASELINE_DB_DATABASE', default='myems_energy_baseline_db'), + 'user': config('MYEMS_ENERGY_BASELINE_DB_USER', default='root'), + 'password': config('MYEMS_ENERGY_BASELINE_DB_PASSWORD', default='!MyEMS1'), } myems_billing_db = { - 'host': MYEMS_BILLING_DB_HOST, - 'port': MYEMS_BILLING_DB_PORT, - 'database': MYEMS_BILLING_DB_DATABASE, - 'user': MYEMS_BILLING_DB_USER, - 'password': MYEMS_BILLING_DB_PASSWORD, + 'host': config('MYEMS_BILLING_DB_HOST', default='127.0.0.1'), + 'port': config('MYEMS_BILLING_DB_PORT', default=3306, cast=int), + 'database': config('MYEMS_BILLING_DB_DATABASE', default='myems_billing_db'), + 'user': config('MYEMS_BILLING_DB_USER', default='root'), + 'password': config('MYEMS_BILLING_DB_PASSWORD', default='!MyEMS1'), } myems_billing_baseline_db = { - 'host': MYEMS_BILLING_BASELINE_DB_HOST, - 'port': MYEMS_BILLING_BASELINE_DB_PORT, - 'database': MYEMS_BILLING_BASELINE_DB_DATABASE, - 'user': MYEMS_BILLING_BASELINE_DB_USER, - 'password': MYEMS_BILLING_BASELINE_DB_PASSWORD, + 'host': config('MYEMS_BILLING_BASELINE_DB_HOST', default='127.0.0.1'), + 'port': config('MYEMS_BILLING_BASELINE_DB_PORT', default=3306, cast=int), + 'database': config('MYEMS_BILLING_BASELINE_DB_DATABASE', default='myems_billing_baseline_db'), + 'user': config('MYEMS_BILLING_BASELINE_DB_USER', default='root'), + 'password': config('MYEMS_BILLING_BASELINE_DB_PASSWORD', default='!MyEMS1'), } myems_historical_db = { - 'host': MYEMS_HISTORICAL_DB_HOST, - 'port': MYEMS_HISTORICAL_DB_PORT, - 'database': MYEMS_HISTORICAL_DB_DATABASE, - 'user': MYEMS_HISTORICAL_DB_USER, - 'password': MYEMS_HISTORICAL_DB_PASSWORD, + 'host': config('MYEMS_HISTORICAL_DB_HOST', default='127.0.0.1'), + 'port': config('MYEMS_HISTORICAL_DB_PORT', default=3306, cast=int), + 'database': config('MYEMS_HISTORICAL_DB_DATABASE', default='myems_historical_db'), + 'user': config('MYEMS_HISTORICAL_DB_USER', default='root'), + 'password': config('MYEMS_HISTORICAL_DB_PASSWORD', default='!MyEMS1'), } myems_user_db = { - 'host': MYEMS_USER_DB_HOST, - 'port': MYEMS_USER_DB_PORT, - 'database': MYEMS_USER_DB_DATABASE, - 'user': MYEMS_USER_DB_USER, - 'password': MYEMS_USER_DB_PASSWORD, + 'host': config('MYEMS_USER_DB_HOST', default='127.0.0.1'), + 'port': config('MYEMS_USER_DB_PORT', default=3306, cast=int), + 'database': config('MYEMS_USER_DB_DATABASE', default='myems_user_db'), + 'user': config('MYEMS_USER_DB_USER', default='root'), + 'password': config('MYEMS_USER_DB_PASSWORD', default='!MyEMS1'), } myems_fdd_db = { - 'host': MYEMS_FDD_DB_HOST, - 'port': MYEMS_FDD_DB_PORT, - 'database': MYEMS_FDD_DB_DATABASE, - 'user': MYEMS_FDD_DB_USER, - 'password': MYEMS_FDD_DB_PASSWORD, + 'host': config('MYEMS_FDD_DB_HOST', default='127.0.0.1'), + 'port': config('MYEMS_FDD_DB_PORT', default=3306, cast=int), + 'database': config('MYEMS_FDD_DB_DATABASE', default='myems_fdd_db'), + 'user': config('MYEMS_FDD_DB_USER', default='root'), + 'password': config('MYEMS_FDD_DB_PASSWORD', default='!MyEMS1'), } myems_reporting_db = { - 'host': MYEMS_REPORTING_DB_HOST, - 'port': MYEMS_REPORTING_DB_PORT, - 'database': MYEMS_REPORTING_DB_DATABASE, - 'user': MYEMS_REPORTING_DB_USER, - 'password': MYEMS_REPORTING_DB_PASSWORD, + 'host': config('MYEMS_REPORTING_DB_HOST', default='127.0.0.1'), + 'port': config('MYEMS_REPORTING_DB_PORT', default=3306, cast=int), + 'database': config('MYEMS_REPORTING_DB_DATABASE', default='myems_reporting_db'), + 'user': config('MYEMS_REPORTING_DB_USER', default='root'), + 'password': config('MYEMS_REPORTING_DB_PASSWORD', default='!MyEMS1'), } # indicated in how many minutes to calculate meter energy consumption # 30 for half hourly period # 60 for hourly period -minutes_to_count = MINUTES_TO_COUNT +minutes_to_count = config('MINUTES_TO_COUNT', default=60, cast=int) # indicates the project's time zone offset from UTC -utc_offset = UTC_OFFSET +utc_offset = config('UTC_OFFSET', default='+08:00') # indicates from when ( in local timezone) of the day to calculate working days -working_day_start_time_local = WORKING_DAY_START_TIME_LOCAL +working_day_start_time_local = config('WORKING_DAY_START_TIME_LOCAL', default='00:00:00') # indicates where user uploaded files will be saved to # must use the root folder of myems-admin web application # for example if you serve myems-admin at /var/www/html/admin # you should set the upload_path as below -upload_path = UPLOAD_PATH +upload_path = config('UPLOAD_PATH', default='/var/www/html/admin/upload/') # main currency unit -currency_unit = CURRENCY_UNIT +currency_unit = config('CURRENCY_UNIT', default='CNY') + +# maximum failed login count, otherwise the user should be locked +maximum_failed_login_count = config('MAXIMUM_FAILED_LOGIN_COUNT', default=3, cast=int) \ No newline at end of file diff --git a/myems-api/core/user.py b/myems-api/core/user.py index 69df28de..6444a3ad 100644 --- a/myems-api/core/user.py +++ b/myems-api/core/user.py @@ -27,7 +27,7 @@ class UserCollection: cursor = cnx.cursor() query = (" SELECT u.id, u.name, u.display_name, u.uuid, " " u.email, u.is_admin, p.id, p.name, " - " u.account_expiration_datetime_utc, u.password_expiration_datetime_utc " + " u.account_expiration_datetime_utc, u.password_expiration_datetime_utc, u.failed_login_count " " FROM tbl_users u " " LEFT JOIN tbl_privileges p ON u.privilege_id = p.id " " ORDER BY u.name ") @@ -59,7 +59,8 @@ class UserCollection: "account_expiration_datetime": account_expiration_datetime_local.strftime('%Y-%m-%dT%H:%M:%S'), "password_expiration_datetime": - password_expiration_datetime_local.strftime('%Y-%m-%dT%H:%M:%S')} + password_expiration_datetime_local.strftime('%Y-%m-%dT%H:%M:%S'), + "failed_login_count": row[10]} result.append(meta_result) resp.text = json.dumps(result) @@ -503,7 +504,7 @@ class UserLogin: failed_login_count = result['failed_login_count'] - if failed_login_count >= 3: + if failed_login_count >= config.maximum_failed_login_count: cursor.close() cnx.disconnect() raise falcon.HTTPError(falcon.HTTP_400, 'API.BAD_REQUEST', 'API.USER_ACCOUNT_HAS_BEEN_LOCKED') @@ -514,8 +515,8 @@ class UserLogin: if hashed_password != result['password']: update_failed_login_count = (" UPDATE tbl_users " - " SET failed_login_count = %s " - " WHERE uuid = %s ") + " SET failed_login_count = %s " + " WHERE uuid = %s ") user_uuid = result['uuid'] cursor.execute(update_failed_login_count, (failed_login_count + 1, user_uuid)) cnx.commit() @@ -523,6 +524,14 @@ class UserLogin: cnx.disconnect() raise falcon.HTTPError(falcon.HTTP_400, 'API.BAD_REQUEST', 'API.INVALID_PASSWORD') + if failed_login_count != 0: + update_failed_login_count = (" UPDATE tbl_users " + " SET failed_login_count = 0 " + " WHERE uuid = %s ") + user_uuid = result['uuid'] + cursor.execute(update_failed_login_count, (user_uuid, )) + cnx.commit() + if result['account_expiration_datetime_utc'] <= datetime.utcnow(): cursor.close() cnx.disconnect() @@ -886,7 +895,7 @@ class Unlock: raise falcon.HTTPError(falcon.HTTP_400, 'API.BAD_REQUEST', 'API.INVALID_Id') failed_login_count = row[0] - if failed_login_count < 3: + if failed_login_count < config.maximum_failed_login_count: cursor.close() cnx.disconnect() raise falcon.HTTPError(falcon.HTTP_400, 'API.BAD_REQUEST', 'API.USER_ACCOUNT_IS_NOT_LOCKED') @@ -912,4 +921,4 @@ class Unlock: resp.text = json.dumps("OK") resp.status = falcon.HTTP_200 write_log(user_uuid=admin_user_uuid, request_method='PUT', resource_type='UnlockUser', - resource_id=Id, request_body=None) + resource_id=Id, request_body=None) \ No newline at end of file From 1b1afa7de1c6ff45aea35e9815e81a14864fe63d Mon Sep 17 00:00:00 2001 From: Caozhenhui <823914102@qq.com> Date: Fri, 17 Dec 2021 10:19:06 +0800 Subject: [PATCH 2/2] The step of judging the number of 'failed login count' moves to myems-api --- admin/views/users/user/user.html | 2 +- myems-api/core/user.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/views/users/user/user.html b/admin/views/users/user/user.html index eae9dd2d..9d92622a 100644 --- a/admin/views/users/user/user.html +++ b/admin/views/users/user/user.html @@ -36,7 +36,7 @@ {{'SETTING.EDIT' | translate}} {{'USER.RESET_PASSWORD' | translate}} {{'SETTING.DELETE' | translate}} - {{'SETTING.UNLOCK' | translate}} + {{'SETTING.UNLOCK' | translate}} diff --git a/myems-api/core/user.py b/myems-api/core/user.py index 6444a3ad..99116de0 100644 --- a/myems-api/core/user.py +++ b/myems-api/core/user.py @@ -60,7 +60,7 @@ class UserCollection: account_expiration_datetime_local.strftime('%Y-%m-%dT%H:%M:%S'), "password_expiration_datetime": password_expiration_datetime_local.strftime('%Y-%m-%dT%H:%M:%S'), - "failed_login_count": row[10]} + "failed_login_count": True if row[10] < 3 else False} result.append(meta_result) resp.text = json.dumps(result)