Skip to content

Commit 8aab65c

Browse files
author
Aaron Suarez
committed
Change blacklisted -> denied for inclusivity
1 parent 27599d2 commit 8aab65c

9 files changed

Lines changed: 77 additions & 48 deletions

File tree

app/api/auth.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def __init__(self, message, error_code):
2626

2727
class ApiKeyErrorCode(Enum):
2828
NOT_FOUND = 1
29-
ALREADY_BLACKLISTED = 2
30-
NOT_BLACKLISTED = 3
29+
ALREADY_DENIED = 2
30+
NOT_DENIED = 3
3131

3232

3333
def find_key_by_apikey_or_email(apikey_or_email):
@@ -37,20 +37,20 @@ def find_key_by_apikey_or_email(apikey_or_email):
3737
return Key.query.filter_by(email=apikey_or_email).first()
3838

3939

40-
def blacklist_key(apikey_or_email, blacklisted, session):
40+
def deny_key(apikey_or_email, denied, session):
4141
key = find_key_by_apikey_or_email(apikey_or_email)
4242
if not key:
4343
raise ApiKeyError('Could not find that apikey or email.',
4444
ApiKeyErrorCode.NOT_FOUND)
4545

46-
if key.blacklisted == blacklisted:
46+
if key.denied == denied:
4747
raise ApiKeyError(
48-
('Already' if blacklisted else 'Not') + ' blacklisted',
49-
ApiKeyErrorCode.ALREADY_BLACKLISTED if blacklisted
50-
else ApiKeyErrorCode.NOT_BLACKLISTED
48+
('Already' if denied else 'Not') + ' denied',
49+
ApiKeyErrorCode.ALREADY_DENIED if denied
50+
else ApiKeyErrorCode.NOT_DENIED
5151
)
5252

53-
key.blacklisted = blacklisted
53+
key.denied = denied
5454

5555
session.commit()
5656

@@ -117,7 +117,7 @@ def jwt_to_key():
117117
def get_api_key_from_authenticated_email(email):
118118
apikey = Key.query.filter_by(email=email).first()
119119

120-
if apikey and apikey.blacklisted:
120+
if apikey and apikey.denied:
121121
return None
122122

123123
if not apikey:
@@ -131,7 +131,7 @@ def authenticate(func):
131131
def wrapper(*args, **kwargs):
132132
apikey = request.headers.get('x-apikey')
133133
try:
134-
filters = {'apikey': apikey, 'blacklisted': False}
134+
filters = {'apikey': apikey, 'denied': False}
135135
key = Key.query.filter_by(**filters).first() if apikey else jwt_to_key()
136136
except Exception:
137137
return standardize_response(status_code=500)

app/api/routes/api_key.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ def apikey():
3131
# We need to check the database for an existing key
3232
apikey = Key.query.filter_by(email=email).first()
3333

34-
# Don't return success for blacklisted keys
35-
if apikey and apikey.blacklisted:
34+
# Don't return success for denied keys
35+
if apikey and apikey.denied:
3636
return unauthorized_response()
3737

3838
if not apikey:

app/cli.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import click
99
from app import index, search_client
10-
from app.api.auth import (ApiKeyError, blacklist_key,
10+
from app.api.auth import (ApiKeyError, deny_key,
1111
find_key_by_apikey_or_email, rotate_key)
1212
from sqlalchemy import exc
1313

@@ -207,20 +207,20 @@ def reindex():
207207

208208
@apikey.command()
209209
@click.argument('apikey_or_email')
210-
def blacklist(apikey_or_email):
210+
def deny(apikey_or_email):
211211
try:
212-
key = blacklist_key(apikey_or_email, True, db.session)
212+
key = deny_key(apikey_or_email, True, db.session)
213213
except ApiKeyError as error:
214214
print(error.message)
215215
return error.error_code
216216

217-
print(f'Blacklisted {key}')
217+
print(f'Denied {key}')
218218

219219
@apikey.command()
220220
@click.argument('apikey_or_email')
221221
def reactivate(apikey_or_email):
222222
try:
223-
key = blacklist_key(apikey_or_email, False, db.session)
223+
key = deny_key(apikey_or_email, False, db.session)
224224
except ApiKeyError as error:
225225
print(error.message)
226226
return error.error_code

app/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ class Key(TimestampMixin, db.Model):
161161
id = db.Column(db.Integer, primary_key=True)
162162
apikey = db.Column(db.String, unique=True, nullable=False, index=True)
163163
email = db.Column(db.String, unique=True, nullable=False)
164-
blacklisted = db.Column(db.Boolean, default=False)
164+
denied = db.Column(db.Boolean, default=False)
165165
voted_resources = db.relationship('VoteInformation', back_populates='voter')
166166

167167
@property
@@ -192,8 +192,8 @@ def __hash__(self):
192192

193193
def __repr__(self):
194194
tags = ''
195-
if self.blacklisted:
196-
tags = ' BLACKLISTED'
195+
if self.denied:
196+
tags = ' DENIED'
197197
return f"<Key email={self.email} apikey={self.apikey}{tags}>"
198198

199199

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""Change blacklist to deny
2+
3+
Revision ID: 205742d3b3f5
4+
Revises: 4b6587b98b26
5+
Create Date: 2020-07-04 19:29:40.607069
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
import sqlalchemy_utils
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = '205742d3b3f5'
15+
down_revision = '4b6587b98b26'
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
# ### commands auto generated by Alembic - please adjust! ###
22+
op.alter_column('key', 'blacklisted', new_column_name='denied')
23+
# ### end Alembic commands ###
24+
25+
26+
def downgrade():
27+
# ### commands auto generated by Alembic - please adjust! ###
28+
op.alter_column('key', 'denied', new_column_name='blacklisted')
29+
# ### end Alembic commands ###

tests/unit/test_auth.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from unittest.mock import patch
22

33
from app.api.auth import (ApiKeyError, ApiKeyErrorCode, authenticate,
4-
blacklist_key, find_key_by_apikey_or_email,
4+
deny_key, find_key_by_apikey_or_email,
55
rotate_key)
66
from app.models import Key
77
from flask import g
@@ -56,9 +56,9 @@ def callback(*args, **kwargs):
5656
assert g.auth_key == key
5757

5858

59-
def test_authenticate_blacklisted(module_client, function_empty_db):
59+
def test_authenticate_denied(module_client, function_empty_db):
6060
# Arrange
61-
create_fake_key(function_empty_db.session, blacklisted=True)
61+
create_fake_key(function_empty_db.session, denied=True)
6262

6363
def callback(*args, **kwargs):
6464
return 1
@@ -88,75 +88,75 @@ def test_find_key_by_apikey_or_email(module_client, function_empty_db):
8888
assert key == key2
8989

9090

91-
def test_blacklist_key_not_found(module_client, function_empty_db):
91+
def test_denied_key_not_found(module_client, function_empty_db):
9292
# Arrange
9393
error = None
9494

9595
# Act
9696
try:
97-
blacklist_key(FAKE_APIKEY + 'b', True, function_empty_db.session)
97+
deny_key(FAKE_APIKEY + 'b', True, function_empty_db.session)
9898
except ApiKeyError as e:
9999
error = e
100100

101101
# Assert
102102
assert error.error_code == ApiKeyErrorCode.NOT_FOUND
103103

104104

105-
def test_blacklist_key_already_blacklisted(module_client, function_empty_db):
105+
def test_deny_key_already_denied(module_client, function_empty_db):
106106
# Arrange
107107
error = None
108108
key1 = None
109-
create_fake_key(function_empty_db.session, blacklisted=True)
109+
create_fake_key(function_empty_db.session, denied=True)
110110

111111
# Act
112112
try:
113-
key1 = blacklist_key(FAKE_APIKEY, True, function_empty_db.session)
113+
key1 = deny_key(FAKE_APIKEY, True, function_empty_db.session)
114114
except ApiKeyError as e:
115115
error = e
116116

117117
# Assert
118-
assert error.error_code == ApiKeyErrorCode.ALREADY_BLACKLISTED
118+
assert error.error_code == ApiKeyErrorCode.ALREADY_DENIED
119119
assert key1 is None
120120

121121

122-
def test_blacklist_key_not_blacklisted(module_client, function_empty_db):
122+
def test_deny_key_not_denied(module_client, function_empty_db):
123123
# Arrange
124124
error = None
125125
key1 = None
126126
create_fake_key(function_empty_db.session)
127127

128128
# Act
129129
try:
130-
key1 = blacklist_key(FAKE_APIKEY, False, function_empty_db.session)
130+
key1 = deny_key(FAKE_APIKEY, False, function_empty_db.session)
131131
except ApiKeyError as e:
132132
error = e
133133

134134
# Assert
135-
assert error.error_code == ApiKeyErrorCode.NOT_BLACKLISTED
135+
assert error.error_code == ApiKeyErrorCode.NOT_DENIED
136136
assert key1 is None
137137

138138

139-
def test_blacklist_key_set_blacklisted_on(module_client, function_empty_db):
139+
def test_deny_key_set_denied_on(module_client, function_empty_db):
140140
# Arrange
141141
key = create_fake_key(function_empty_db.session)
142142

143143
# Act
144-
key1 = blacklist_key(FAKE_APIKEY, True, function_empty_db.session)
144+
key1 = deny_key(FAKE_APIKEY, True, function_empty_db.session)
145145

146146
# Assert
147-
assert key.blacklisted
147+
assert key.denied
148148
assert key == key1
149149

150150

151-
def test_blacklist_key_set_blacklisted_off(module_client, function_empty_db):
151+
def test_deny_key_set_denied_off(module_client, function_empty_db):
152152
# Arrange
153-
key = create_fake_key(function_empty_db.session, blacklisted=True)
153+
key = create_fake_key(function_empty_db.session, denied=True)
154154

155155
# Act
156-
key1 = blacklist_key(FAKE_APIKEY, False, function_empty_db.session)
156+
key1 = deny_key(FAKE_APIKEY, False, function_empty_db.session)
157157

158158
# Assert
159-
assert not key.blacklisted
159+
assert not key.denied
160160
assert key == key1
161161

162162

tests/unit/test_auth_jwt.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,11 @@ def callback(*args, **kwargs):
175175
assert result == 1
176176

177177

178-
def test_blacklisted_apikey(module_client, function_empty_db):
178+
def test_denied_apikey(module_client, function_empty_db):
179179
# Arrange
180180
def callback(*args, **kwargs):
181181
return 1
182-
create_fake_key(function_empty_db.session, blacklisted=True)
182+
create_fake_key(function_empty_db.session, denied=True)
183183

184184
# Act
185185
wrapper = authenticate(callback)

tests/unit/test_models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,10 @@ def test_key():
9494
})
9595

9696

97-
def test_key_blacklisted():
98-
key = Key(email="test@example.org", apikey="1234abcd", blacklisted=True)
97+
def test_key_denied():
98+
key = Key(email="test@example.org", apikey="1234abcd", denied=True)
9999
assert (
100-
key.__repr__() == "<Key email=test@example.org apikey=1234abcd BLACKLISTED>"
100+
key.__repr__() == "<Key email=test@example.org apikey=1234abcd DENIED>"
101101
)
102102
assert (key != 1)
103103
assert (key == key)

tests/unit/test_routes/test_api_key.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from app.api.auth import blacklist_key
1+
from app.api.auth import deny_key
22
from .helpers import get_api_key, assert_correct_response
33

44

@@ -52,11 +52,11 @@ def test_get_api_key_bad_password(module_client, module_db, fake_invalid_auth_fr
5252
assert_correct_response(response, 401)
5353

5454

55-
def test_get_api_key_blacklisted(module_client, module_db, fake_auth_from_oc):
55+
def test_get_api_key_denied(module_client, module_db, fake_auth_from_oc):
5656
client = module_client
5757

5858
apikey = get_api_key(client)
59-
blacklist_key(apikey, True, module_db.session)
59+
deny_key(apikey, True, module_db.session)
6060

6161
try:
6262
response = client.post(
@@ -69,7 +69,7 @@ def test_get_api_key_blacklisted(module_client, module_db, fake_auth_from_oc):
6969
)
7070
assert_correct_response(response, 401)
7171
finally:
72-
blacklist_key(apikey, False, module_db.session)
72+
deny_key(apikey, False, module_db.session)
7373

7474

7575
def test_rotate_api_key_unauthorized(module_client, module_db):

0 commit comments

Comments
 (0)