Skip to content
This repository was archived by the owner on Feb 18, 2023. It is now read-only.

Commit 64e1cbc

Browse files
committed
[SPARK-243] Fix Vhost parsing for special-cased users
1 parent f50abd7 commit 64e1cbc

3 files changed

Lines changed: 24 additions & 15 deletions

File tree

src/packages/user/user.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,10 @@ def process_vhost(cls, vhost: Union[str, None]) -> Optional[str]:
8686
# identify the role
8787
host = vhost.rsplit(".", 3)[-3]
8888

89+
# special case: privileged user naming scheme
90+
if '@' in host:
91+
# Split off the user from the host and return the group
92+
host = host.split('@', maxsplit=1)[-1]
93+
8994
# return the corresponding vhost
9095
return f"{host}.fuelrats.com"

tests/fixtures/mock_bot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def __init__(self, *args, **kwargs):
3333
"some_recruit": {
3434
"nickname": "some_recruit",
3535
"username": "ident_ed_your_car_sorry_bad_pun",
36-
"hostname": "recruit.fuelrats.com",
36+
"hostname": "some-recruit@some-recruit.recruit.fuelrats.com",
3737
"away": False,
3838
"away_message": None,
3939
"account": None,

tests/unit/test_user.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,28 @@
1010
"""
1111
import pytest
1212

13+
from src.packages.permissions import has_required_permission, ADMIN
1314
from src.packages.user.user import User
1415

1516
pytestmark = [pytest.mark.unit, pytest.mark.user]
1617

1718

18-
@pytest.mark.parametrize("expected_host", [
19-
"recruit.fuelrats.com",
20-
"rat.fuelrats.com",
21-
"dispatch.fuelrats.com",
22-
"overseer.fuelrats.com",
23-
"op.fuelrats.com",
24-
"techrat.fuelrats.com",
25-
"netadmin.fuelrats.com",
26-
"admin.fuelrats.com",
19+
@pytest.mark.parametrize("expected_host, payload", [
20+
("recruit.fuelrats.com", "someone@someone.recruit.fuelrats.com"),
21+
("rat.fuelrats.com", "someone@someone.rat.fuelrats.com"),
22+
("dispatch.fuelrats.com", "someone@someone.dispatch.fuelrats.com"),
23+
("overseer.fuelrats.com", "someone@someone.overseer.fuelrats.com"),
24+
("op.fuelrats.com", "someone@someone.op.fuelrats.com"),
25+
("techrat.fuelrats.com", "someone@someone.techrat.fuelrats.com"),
26+
("netadmin.fuelrats.com", "someone@someone.netadmin.fuelrats.com"),
27+
("admin.fuelrats.com", "someone@someone.admin.fuelrats.com"),
28+
("netadmin.fuelrats.com", "reality@netadmin.fuelrats.com")
2729
])
28-
@pytest.mark.parametrize("prefix", ["potato.", "Orbital.", ""])
29-
def test_process_vhost(prefix: str, expected_host: str):
30+
def test_process_vhost(payload: str, expected_host: str):
3031
"""
3132
Asserts vhost processing functions as expected
3233
"""
33-
mixed_host = f"{prefix}{expected_host}"
34-
assert User.process_vhost(mixed_host) == expected_host
34+
assert User.process_vhost(payload) == expected_host
3535

3636

3737
def test_process_vhost_orange():
@@ -110,7 +110,7 @@ async def test_user_from_whois_existing_user(bot_fx):
110110
assert data['identified'] == my_user.identified
111111
assert data['account'] == my_user.account
112112
assert "some_recruit" == my_user.nickname
113-
assert data['hostname'] == my_user.hostname
113+
assert data['hostname'].endswith(my_user.hostname)
114114
assert data['username'] == my_user.username
115115
assert data['realname'] == my_user.realname
116116

@@ -162,6 +162,10 @@ async def test_user_eq(data: dict, monkeypatch, bot_fx):
162162
assert user_alpha == user_beta
163163

164164

165+
async def test_effective_permission(bot_fx):
166+
user = await User.from_pydle(bot_fx, "some_admin")
167+
has_required_permission(user, ADMIN)
168+
165169
@pytest.mark.regressions
166170
def test_hash(user_fx):
167171
assert hash(user_fx)

0 commit comments

Comments
 (0)