1
- import textwrap
1
+ from __future__ import absolute_import
2
2
3
3
import pytest
4
- import responses
5
4
6
- from detect_secrets .core .constants import VerifiedResult
7
- from detect_secrets .plugins .softlayer import find_username
8
- from detect_secrets .plugins .softlayer import SoftlayerDetector
5
+ from detect_secrets .plugins .softlayer import SoftLayerDetector
9
6
10
- SL_USERNAME = 'test@testy.test'
11
- SL_TOKEN = 'abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234'
12
7
8
+ class TestSoftLayerDetector (object ):
13
9
14
- class TestSoftlayerDetector :
10
+ sl_token = 'abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234'
15
11
16
12
@pytest .mark .parametrize (
17
13
'payload, should_flag' ,
18
14
[
19
- ('--softlayer-api-key "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
20
- ('--softlayer-api-key="{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
21
- ('--softlayer-api-key {sl_token}' .format (sl_token = SL_TOKEN ), True ),
22
- ('--softlayer-api-key={sl_token}' .format (sl_token = SL_TOKEN ), True ),
23
- ('http://api.softlayer.com/soap/v3/{sl_token}' .format (sl_token = SL_TOKEN ), True ),
24
- ('http://api.softlayer.com/soap/v3.1/{sl_token}' .format (sl_token = SL_TOKEN ), True ),
25
- ('softlayer_api_key: {sl_token}' .format (sl_token = SL_TOKEN ), True ),
26
- ('softlayer-key : {sl_token}' .format (sl_token = SL_TOKEN ), True ),
27
- ('SOFTLAYER-API-KEY : "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
28
- ('"softlayer_api_key" : "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
29
- ('softlayer-api-key: "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
30
- ('"softlayer_api_key": "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
31
- ('SOFTLAYER_API_KEY:"{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
32
- ('softlayer-key:{sl_token}' .format (sl_token = SL_TOKEN ), True ),
33
- ('softlayer_key:"{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
34
- ('"softlayer_api_key":"{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
35
- ('softlayerapikey= {sl_token}' .format (sl_token = SL_TOKEN ), True ),
36
- ('softlayer_api_key= "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
37
- ('SOFTLAYERAPIKEY={sl_token}' .format (sl_token = SL_TOKEN ), True ),
38
- ('softlayer_api_key="{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
39
- ('sl_api_key: {sl_token}' .format (sl_token = SL_TOKEN ), True ),
40
- ('SLAPIKEY : {sl_token}' .format (sl_token = SL_TOKEN ), True ),
41
- ('sl_apikey : "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
42
- ('"sl_api_key" : "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
43
- ('sl-key: "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
44
- ('"sl_api_key": "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
45
- ('sl_api_key:"{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
46
- ('sl_api_key:{sl_token}' .format (sl_token = SL_TOKEN ), True ),
47
- ('sl-api-key:"{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
48
- ('"sl_api_key":"{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
49
- ('sl_key= {sl_token}' .format (sl_token = SL_TOKEN ), True ),
50
- ('sl_api_key= "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
51
- ('sl-api-key={sl_token}' .format (sl_token = SL_TOKEN ), True ),
52
- ('slapi_key="{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
53
- ('slapikey:= {sl_token}' .format (sl_token = SL_TOKEN ), True ),
54
- ('softlayer_api_key := {sl_token}' .format (sl_token = SL_TOKEN ), True ),
55
- ('sl_api_key := "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
56
- ('"softlayer_key" := "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
57
- ('sl_api_key: "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
58
- ('"softlayer_api_key":= "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
59
- ('sl-api-key:="{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
60
- ('softlayer_api_key:={sl_token}' .format (sl_token = SL_TOKEN ), True ),
61
- ('slapikey:"{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
62
- ('"softlayer_api_key":="{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
63
- ('sl-api-key:= {sl_token}' .format (sl_token = SL_TOKEN ), True ),
64
- ('softlayer_key:= "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
65
- ('sl_api_key={sl_token}' .format (sl_token = SL_TOKEN ), True ),
66
- ('softlayer_api_key:="{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
67
- ('softlayer_password = "{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
68
- ('sl_pass="{sl_token}"' .format (sl_token = SL_TOKEN ), True ),
69
- ('softlayer-pwd = {sl_token}' .format (sl_token = SL_TOKEN ), True ),
15
+ ('--softlayer-api-key "{sl_token}"' .format (sl_token = sl_token ), True ,),
16
+ ('--softlayer-api-key="{sl_token}"' .format (sl_token = sl_token ), True ,),
17
+ ('--softlayer-api-key {sl_token}' .format (sl_token = sl_token ), True ,),
18
+ ('--softlayer-api-key={sl_token}' .format (sl_token = sl_token ), True ,),
19
+ ('http://api.softlayer.com/soap/v3/{sl_token}' .format (sl_token = sl_token ), True ,),
20
+ ('http://api.softlayer.com/soap/v3.1/{sl_token}' .format (sl_token = sl_token ), True ,),
21
+ ('softlayer_api_key: {sl_token}' .format (sl_token = sl_token ), True ,),
22
+ ('softlayer-key : {sl_token}' .format (sl_token = sl_token ), True ,),
23
+ ('SOFTLAYER-API-KEY : "{sl_token}"' .format (sl_token = sl_token ), True ,),
24
+ ('"softlayer_api_key" : "{sl_token}"' .format (sl_token = sl_token ), True ,),
25
+ ('softlayer-api-key: "{sl_token}"' .format (sl_token = sl_token ), True ,),
26
+ ('"softlayer_api_key": "{sl_token}"' .format (sl_token = sl_token ), True ,),
27
+ ('SOFTLAYER_API_KEY:"{sl_token}"' .format (sl_token = sl_token ), True ,),
28
+ ('softlayer-key:{sl_token}' .format (sl_token = sl_token ), True ,),
29
+ ('softlayer_key:"{sl_token}"' .format (sl_token = sl_token ), True ,),
30
+ ('"softlayer_api_key":"{sl_token}"' .format (sl_token = sl_token ), True ,),
31
+ ('softlayerapikey= {sl_token}' .format (sl_token = sl_token ), True ,),
32
+ ('softlayer_api_key= "{sl_token}"' .format (sl_token = sl_token ), True ,),
33
+ ('SOFTLAYERAPIKEY={sl_token}' .format (sl_token = sl_token ), True ,),
34
+ ('softlayer_api_key="{sl_token}"' .format (sl_token = sl_token ), True ,),
35
+ ('sl_api_key: {sl_token}' .format (sl_token = sl_token ), True ,),
36
+ ('SLAPIKEY : {sl_token}' .format (sl_token = sl_token ), True ,),
37
+ ('sl_apikey : "{sl_token}"' .format (sl_token = sl_token ), True ,),
38
+ ('"sl_api_key" : "{sl_token}"' .format (sl_token = sl_token ), True ,),
39
+ ('sl-key: "{sl_token}"' .format (sl_token = sl_token ), True ,),
40
+ ('"sl_api_key": "{sl_token}"' .format (sl_token = sl_token ), True ,),
41
+ ('sl_api_key:"{sl_token}"' .format (sl_token = sl_token ), True ,),
42
+ ('sl_api_key:{sl_token}' .format (sl_token = sl_token ), True ,),
43
+ ('sl-api-key:"{sl_token}"' .format (sl_token = sl_token ), True ,),
44
+ ('"sl_api_key":"{sl_token}"' .format (sl_token = sl_token ), True ,),
45
+ ('sl_key= {sl_token}' .format (sl_token = sl_token ), True ,),
46
+ ('sl_api_key= "{sl_token}"' .format (sl_token = sl_token ), True ,),
47
+ ('sl-api-key={sl_token}' .format (sl_token = sl_token ), True ,),
48
+ ('slapi_key="{sl_token}"' .format (sl_token = sl_token ), True ,),
49
+ ('slapikey:= {sl_token}' .format (sl_token = sl_token ), True ,),
50
+ ('softlayer_api_key := {sl_token}' .format (sl_token = sl_token ), True ,),
51
+ ('sl_api_key := "{sl_token}"' .format (sl_token = sl_token ), True ,),
52
+ ('"softlayer_key" := "{sl_token}"' .format (sl_token = sl_token ), True ,),
53
+ ('sl_api_key: "{sl_token}"' .format (sl_token = sl_token ), True ,),
54
+ ('"softlayer_api_key":= "{sl_token}"' .format (sl_token = sl_token ), True ,),
55
+ ('sl-api-key:="{sl_token}"' .format (sl_token = sl_token ), True ,),
56
+ ('softlayer_api_key:={sl_token}' .format (sl_token = sl_token ), True ,),
57
+ ('slapikey:"{sl_token}"' .format (sl_token = sl_token ), True ,),
58
+ ('"softlayer_api_key":="{sl_token}"' .format (sl_token = sl_token ), True ,),
59
+ ('sl-api-key:= {sl_token}' .format (sl_token = sl_token ), True ,),
60
+ ('softlayer_key:= "{sl_token}"' .format (sl_token = sl_token ), True ,),
61
+ ('sl_api_key={sl_token}' .format (sl_token = sl_token ), True ),
62
+ ('softlayer_api_key:="{sl_token}"' .format (sl_token = sl_token ), True ),
70
63
('softlayer_api_key="%s" % SL_API_KEY_ENV' , False ),
71
64
('sl_api_key: "%s" % <softlayer_api_key>' , False ),
72
65
('SOFTLAYER_APIKEY: "insert_key_here"' , False ),
@@ -75,91 +68,8 @@ class TestSoftlayerDetector:
75
68
('fake-softlayer-key= "not_long_enough"' , False ),
76
69
],
77
70
)
78
- def test_analyze_line (self , payload , should_flag ):
79
- logic = SoftlayerDetector ()
71
+ def test_analyze_string (self , payload , should_flag ):
72
+ logic = SoftLayerDetector ()
80
73
81
- output = logic .analyze_line (payload , 1 , 'mock_filename' )
74
+ output = logic .analyze_string (payload , 1 , 'mock_filename' )
82
75
assert len (output ) == (1 if should_flag else 0 )
83
-
84
- @responses .activate
85
- def test_verify_invalid_secret (self ):
86
- responses .add (
87
- responses .GET , 'https://api.softlayer.com/rest/v3/SoftLayer_Account.json' ,
88
- json = {'error' : 'Access denied. ' }, status = 401 ,
89
- )
90
-
91
- assert SoftlayerDetector ().verify (
92
- SL_TOKEN ,
93
- 'softlayer_username={}' .format (SL_USERNAME ),
94
- ) == VerifiedResult .VERIFIED_FALSE
95
-
96
- @responses .activate
97
- def test_verify_valid_secret (self ):
98
- responses .add (
99
- responses .GET , 'https://api.softlayer.com/rest/v3/SoftLayer_Account.json' ,
100
- json = {'id' : 1 }, status = 200 ,
101
- )
102
- assert SoftlayerDetector ().verify (
103
- SL_TOKEN ,
104
- 'softlayer_username={}' .format (SL_USERNAME ),
105
- ) == VerifiedResult .VERIFIED_TRUE
106
-
107
- @responses .activate
108
- def test_verify_unverified_secret (self ):
109
- assert SoftlayerDetector ().verify (
110
- SL_TOKEN ,
111
- 'softlayer_username={}' .format (SL_USERNAME ),
112
- ) == VerifiedResult .UNVERIFIED
113
-
114
- def test_verify_no_secret (self ):
115
- assert SoftlayerDetector ().verify (
116
- SL_TOKEN ,
117
- 'no_un={}' .format (SL_USERNAME ),
118
- ) == VerifiedResult .UNVERIFIED
119
-
120
- @pytest .mark .parametrize (
121
- 'content, expected_output' ,
122
- (
123
- (
124
- textwrap .dedent ("""
125
- --softlayer-username = {}
126
- """ )[1 :- 1 ].format (
127
- SL_USERNAME ,
128
- ),
129
- [SL_USERNAME ],
130
- ),
131
-
132
- # With quotes
133
- (
134
- textwrap .dedent ("""
135
- sl_user_id = "{}"
136
- """ )[1 :- 1 ].format (
137
- SL_USERNAME ,
138
- ),
139
- [SL_USERNAME ],
140
- ),
141
-
142
- # multiple candidates
143
- (
144
- textwrap .dedent ("""
145
- softlayer_id = '{}'
146
- sl-user = '{}'
147
- SOFTLAYER_USERID = '{}'
148
- softlayer-uname: {}
149
- """ )[1 :- 1 ].format (
150
- SL_USERNAME ,
151
- 'test2@testy.test' ,
152
- 'test3@testy.testy' ,
153
- 'notanemail' ,
154
- ),
155
- [
156
- SL_USERNAME ,
157
- 'test2@testy.test' ,
158
- 'test3@testy.testy' ,
159
- 'notanemail' ,
160
- ],
161
- ),
162
- ),
163
- )
164
- def test_find_username (self , content , expected_output ):
165
- assert find_username (content ) == expected_output
0 commit comments