File tree Expand file tree Collapse file tree 3 files changed +64
-0
lines changed Expand file tree Collapse file tree 3 files changed +64
-0
lines changed Original file line number Diff line number Diff line change @@ -96,6 +96,8 @@ AWSKeyDetector
96
96
AzureStorageKeyDetector
97
97
BasicAuthDetector
98
98
CloudantDetector
99
+ DiscordBotTokenDetector
100
+ GitHubTokenDetector
99
101
Base64HighEntropyString
100
102
HexHighEntropyString
101
103
IbmCloudIamDetector
@@ -105,8 +107,10 @@ KeywordDetector
105
107
MailchimpDetector
106
108
NpmDetector
107
109
PrivateKeyDetector
110
+ SendGridDetector
108
111
SlackDetector
109
112
SoftlayerDetector
113
+ SquareOAuthDetector
110
114
StripeDetector
111
115
TwilioKeyDetector
112
116
```
Original file line number Diff line number Diff line change
1
+ """
2
+ This plugin searches for Discord Bot Token
3
+ """
4
+ import re
5
+
6
+ from .base import RegexBasedDetector
7
+
8
+
9
+ class DiscordBotTokenDetector (RegexBasedDetector ):
10
+ """Scans for Discord Bot token."""
11
+ secret_type = 'Discord Bot Token'
12
+
13
+ denylist = [
14
+ # Discord Bot Token ([M|N]XXXXXXXXXXXXXXXXXXXXXXX.XXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX)
15
+ # 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}' ),
17
+ ]
Original file line number Diff line number Diff line change
1
+ import pytest
2
+
3
+ from detect_secrets .plugins .discord import DiscordBotTokenDetector
4
+
5
+
6
+ class TestDiscordBotTokenDetector :
7
+
8
+ @pytest .mark .parametrize (
9
+ 'payload, should_flag' ,
10
+ [
11
+ # From https://discord.com/developers/docs/reference#authentication
12
+ (
13
+ 'MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWs' ,
14
+ True ,
15
+ ),
16
+ (
17
+ 'Nzk5MjgxNDk0NDc2NDU1OTg3.YABS5g.2lmzECVlZv3vv6miVnUaKPQi2wI' ,
18
+ True ,
19
+ ),
20
+ # From https://docs.gitguardian.com/secrets-detection/detectors/specifics/discord_bot_token#examples # noqa: E501
21
+ (
22
+ 'MZ1yGvKTjE0rY0cV8i47CjAa.uRHQPq.Xb1Mk2nEhe-4iUcrGOuegj57zMC' ,
23
+ True ,
24
+ ),
25
+ # Random values to fail
26
+ (
27
+ 'MZ1yGvKTj0rY0cV8i47CjAa.uHQPq.Xb1Mk2nEhe-4icrGOuegj57zMC' ,
28
+ False ,
29
+ ),
30
+ (
31
+ 'SZ1yGvKTj0rY0cV8i47CjAa.uHQPq.Xb1Mk2nEhe-4icrGOuegj57zMC' ,
32
+ False ,
33
+ ),
34
+ (
35
+ 'MZ1yGvKTj0rY0cV8i47CjAa.uHQPq.Xb1Mk2nEhe-4icrGOuegj57zM' ,
36
+ False ,
37
+ ),
38
+ ],
39
+ )
40
+ def test_analyze (self , payload , should_flag ):
41
+ logic = DiscordBotTokenDetector ()
42
+ output = logic .analyze_line (filename = 'mock_filename' , line = payload )
43
+ assert len (output ) == (1 if should_flag else 0 )
You can’t perform that action at this time.
0 commit comments