Skip to content

Commit 7d569e0

Browse files
authored
Improve DiscordBotTokenDetector and its tests. (#628)
Fixes #627.
1 parent 34f86b0 commit 7d569e0

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed

detect_secrets/plugins/discord.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ class DiscordBotTokenDetector(RegexBasedDetector):
1111
secret_type = 'Discord Bot Token'
1212

1313
denylist = [
14-
# Discord Bot Token ([M|N]XXXXXXXXXXXXXXXXXXXXXXX.XXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX)
14+
# Discord Bot Token ([M|N|O]XXXXXXXXXXXXXXXXXXXXXXX[XX].XXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX)
1515
# Reference: https://discord.com/developers/docs/reference#authentication
16-
re.compile(r'[MN][a-zA-Z\d_-]{23}\.[a-zA-Z\d_-]{6}\.[a-zA-Z\d_-]{27}'),
16+
# Also see: https://github.com/Yelp/detect-secrets/issues/627
17+
re.compile(r'[MNO][a-zA-Z\d_-]{23,25}\.[a-zA-Z\d_-]{6}\.[a-zA-Z\d_-]{27}'),
1718
]

tests/plugins/discord_test.py

+53-3
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,67 @@ class TestDiscordBotTokenDetector:
2222
'MZ1yGvKTjE0rY0cV8i47CjAa.uRHQPq.Xb1Mk2nEhe-4iUcrGOuegj57zMC',
2323
True,
2424
),
25-
# Random values to fail
25+
# From https://github.com/Yelp/detect-secrets/issues/627
26+
(
27+
'OTUyNED5MDk2MTMxNzc2MkEz.YjESug.UNf-1GhsIG8zWT409q2C7Bh_zWQ',
28+
True,
29+
),
30+
(
31+
'OTUyNED5MDk2MTMxNzc2MkEz.GSroKE.g2MTwve8OnUAAByz8KV_ZTV1Ipzg4o_NmQWUMs',
32+
True,
33+
),
34+
(
35+
'MTAyOTQ4MTN5OTU5MTDwMEcxNg.GSwJyi.sbaw8msOR3Wi6vPUzeIWy_P0vJbB0UuRVjH8l8',
36+
True,
37+
),
38+
# Pass - token starts on the 3rd character (first segment is 24 characters)
39+
(
40+
'ATMyOTQ4MTN5OTU5MTDwMEcxNg.GSwJyi.sbaw8msOR3Wi6vPUzeIWy_P0vJbB0UuRVjH8l8',
41+
True,
42+
),
43+
# Pass - token starts on the 2nd character (first segment is 25 characters)
44+
(
45+
'=MTAyOTQ4MTN5OTU5MTDwMEcxN.GSwJyi.sbaw8msOR3Wi6vPUzeIWy_P0vJbB0UuRVjH8l8',
46+
True,
47+
),
48+
# Pass - token ends before the '!' (last segment is 27 characters)
49+
(
50+
'MTAyOTQ4MTN5OTU5MTDwMEcxNg.YjESug.UNf-1GhsIG8zWT409q2C7Bh_zWQ!4o_NmQWUMs',
51+
True,
52+
),
53+
# Fail - all segments too short (23.5.26)
2654
(
2755
'MZ1yGvKTj0rY0cV8i47CjAa.uHQPq.Xb1Mk2nEhe-4icrGOuegj57zMC',
2856
False,
2957
),
58+
# Fail - first segment too short (23.6.27)
59+
(
60+
'MZ1yGvKTj0rY0cV8i47CjAa.uRHQPq.Xb1Mk2nEhe-4iUcrGOuegj57zMC',
61+
False,
62+
),
63+
# Fail - middle segment too short (24.5.27)
64+
(
65+
'MZ1yGvKTjE0rY0cV8i47CjAa.uHQPq.Xb1Mk2nEhe-4iUcrGOuegj57zMC',
66+
False,
67+
),
68+
# Fail - last segment too short (24.6.26)
69+
(
70+
'MZ1yGvKTjE0rY0cV8i47CjAa.uRHQPq.Xb1Mk2nEhe-4iUcrGOuegj57zM',
71+
False,
72+
),
73+
# Fail - contains invalid character ','
74+
(
75+
'MZ1yGvKTjE0rY0cV8i47CjAa.uRHQPq.Xb1Mk2nEhe,4iUcrGOuegj57zMC',
76+
False,
77+
),
78+
# Fail - invalid first character 'P' (must be one of M/N/O)
3079
(
31-
'SZ1yGvKTj0rY0cV8i47CjAa.uHQPq.Xb1Mk2nEhe-4icrGOuegj57zMC',
80+
'PZ1yGvKTjE0rY0cV8i47CjAa.uRHQPq.Xb1Mk2nEhe-4iUcrGOuegj57zMC',
3281
False,
3382
),
83+
# Fail - first segment 1 character too long; causes invalid first character 'T'
3484
(
35-
'MZ1yGvKTj0rY0cV8i47CjAa.uHQPq.Xb1Mk2nEhe-4icrGOuegj57zM',
85+
'MTAyOTQ4MTN5OTU5MTDwMEcxNg0.GSwJyi.sbaw8msOR3Wi6vPUzeIWy_P0vJbB0UuRVjH8l8',
3686
False,
3787
),
3888
],

0 commit comments

Comments
 (0)