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)