Skip to content

Commit d47e9d6

Browse files
authored
Merge pull request Boris-code#238 from XMQSVIP/add_dingding_secret
支持钉钉报警的加签密钥
2 parents 6c4228e + 8f52436 commit d47e9d6

2 files changed

Lines changed: 11 additions & 1 deletion

File tree

feapder/setting.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@
167167
DINGDING_WARNING_URL = "" # 钉钉机器人api
168168
DINGDING_WARNING_PHONE = "" # 报警人 支持列表,可指定多个
169169
DINGDING_WARNING_ALL = False # 是否提示所有人, 默认为False
170+
DINGDING_WARNING_SECRET = None # 加签密钥
170171
# 飞书报警
171172
# https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN#e1cdee9f
172173
FEISHU_WARNING_URL = "" # 飞书机器人api

feapder/utils/tools.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
@author: Boris
88
99
"""
10+
import hmac
1011
import asyncio
1112
import base64
1213
import calendar
@@ -2466,12 +2467,20 @@ def reach_freq_limit(rate_limit, *key):
24662467

24672468

24682469
def dingding_warning(
2469-
message, message_prefix=None, rate_limit=None, url=None, user_phone=None
2470+
message, message_prefix=None, rate_limit=None, url=None, user_phone=None, secret=None
24702471
):
24712472
# 为了加载最新的配置
24722473
rate_limit = rate_limit if rate_limit is not None else setting.WARNING_INTERVAL
24732474
url = url or setting.DINGDING_WARNING_URL
24742475
user_phone = user_phone or setting.DINGDING_WARNING_PHONE
2476+
secret = secret or setting.DINGDING_WARNING_SECRET
2477+
if secret:
2478+
timestamp = str(round(time.time() * 1000))
2479+
secret_enc = secret.encode('utf-8')
2480+
string_to_sign_enc = f'{timestamp}\n{secret}'.encode('utf-8')
2481+
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
2482+
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
2483+
url = f"{url}&timestamp={timestamp}&sign={sign}"
24752484

24762485
if not all([url, message]):
24772486
return

0 commit comments

Comments
 (0)