Skip to content

Commit

Permalink
Website: store & check domains as lowercase
Browse files Browse the repository at this point in the history
  • Loading branch information
ovv committed Feb 27, 2020
1 parent dd2c2b8 commit f13395f
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 11 deletions.
2 changes: 1 addition & 1 deletion pyslackersweb/website/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ async def sync_burner_domains(session: ClientSession, pg) -> List[Dict[str, Any]
"https://raw.githubusercontent.com/wesbos/burner-email-providers/master/emails.txt"
) as r:
burners = [
{"domain": x, "blocked": True, "source": Source.WESBOS}
{"domain": x.lower(), "blocked": True, "source": Source.WESBOS}
for x in (await r.text()).split("\n")
if x
]
Expand Down
2 changes: 1 addition & 1 deletion pyslackersweb/website/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ async def allowed_email(self, email: str) -> bool:
if "@" not in email:
return False

_, domain = email.split("@")
_, domain = email.lower().split("@")

logger.info("Checking if domain %s should be allowed", domain)
async with self.pg.acquire() as conn:
Expand Down
9 changes: 8 additions & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import pyslackersweb
import pyslackersweb.website.tasks

from sqlalchemy import delete
from pyslackersweb.models import domains

pytest_plugins = ("slack.tests.plugin",)


Expand All @@ -17,4 +20,8 @@ async def client(aiohttp_client, slack_client):
pyslackersweb.contexts._register_in_app(app_client.app, "slack_client", slack_client)
pyslackersweb.contexts._register_in_app(app_client.app, "slack_client_legacy", slack_client)

return app_client
yield app_client

# cleanup database
async with app_client.app["pg"].acquire() as conn:
await conn.fetch(delete(domains))
36 changes: 28 additions & 8 deletions tests/test_website.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import pytest
import aiohttp.web
from sqlalchemy import select
from sqlalchemy.dialects.postgresql import insert as pg_insert

from pyslackersweb.website import tasks
Expand Down Expand Up @@ -33,35 +34,42 @@ async def test_endpoint_slack(client):
SlackInviteTestParam(
response={},
data={"email": "error@example.com", "agree_tos": True},
expected="successAlert",
expected={"html": "successAlert", "domain": "example.com"},
),
SlackInviteTestParam(
response={}, data={"agree_tos": True}, expected="Missing data for required field"
response={},
data={"email": "error@EXAMPLE.COM", "agree_tos": True},
expected={"html": "successAlert", "domain": "example.com"},
),
SlackInviteTestParam(
response={},
data={"agree_tos": True},
expected={"html": "Missing data for required field"},
),
SlackInviteTestParam(
response={},
data={"email": "error@example.com", "agree_tos": False},
expected="There was an error processing your invite",
expected={"html": "There was an error processing your invite"},
),
SlackInviteTestParam(
response={},
data={"email": "foobar", "agree_tos": True},
expected="Not a valid email address",
expected={"html": "Not a valid email address"},
),
SlackInviteTestParam(
response={"body": {"ok": False, "error": "already_in_team"}},
data={"email": "error@example.com", "agree_tos": True},
expected="Reason: already_in_team",
expected={"html": "Reason: already_in_team", "domain": "example.com"},
),
SlackInviteTestParam(
response={"body": {"ok": False, "error": "not_authed"}},
data={"email": "error@example.com", "agree_tos": True},
expected="Reason: not_authed",
expected={"html": "Reason: not_authed", "domain": "example.com"},
),
SlackInviteTestParam(
response={"status": 500},
data={"email": "error@example.com", "agree_tos": True},
expected="Reason: Error contacting slack API",
expected={"html": "Reason: Error contacting slack API", "domain": "example.com"},
),
),
indirect=["slack_client"],
Expand All @@ -71,7 +79,16 @@ async def test_endpoint_slack_invite(client, data, expected):
html = await r.text()

assert r.status == 200
assert expected in html
assert expected["html"] in html

async with client.app["pg"].acquire() as conn:
rows = await conn.fetch(select([domains.c.blocked, domains.c.domain]))

if "domain" in expected:
assert len(rows) == 1
assert rows[0]["domain"] == expected["domain"]
else:
assert len(rows) == 0


@pytest.mark.parametrize(
Expand All @@ -80,6 +97,9 @@ async def test_endpoint_slack_invite(client, data, expected):
SlackInviteTestParam(
response={}, data={"email": "foo@urhen.com", "agree_tos": True}, expected="successAlert"
),
SlackInviteTestParam(
response={}, data={"email": "foo@URHEN.com", "agree_tos": True}, expected="successAlert"
),
),
indirect=["slack_client"],
)
Expand Down

0 comments on commit f13395f

Please sign in to comment.