Skip to content

Commit 575737a

Browse files
committed
Modified to work with updated web3login package to respect applications
1 parent d9ce75f commit 575737a

File tree

5 files changed

+38
-24
lines changed

5 files changed

+38
-24
lines changed

brood/actions.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from sqlalchemy.orm.exc import MultipleResultsFound
2121
from sqlalchemy.orm.session import Session
2222
from web3login.auth import to_checksum_address, verify
23-
from web3login.exceptions import MoonstreamVerificationError
23+
from web3login.exceptions import Web3VerificationError
2424

2525
from . import data, exceptions, subscriptions
2626
from .models import (
@@ -40,6 +40,7 @@
4040
VerificationEmail,
4141
)
4242
from .settings import (
43+
APPLICATION_NAME,
4344
BUGOUT_FROM_EMAIL,
4445
BUGOUT_URL,
4546
DEFAULT_USER_GROUP_LIMIT,
@@ -461,10 +462,12 @@ def create_user(
461462
if signature is not None:
462463
payload_json = base64.decodebytes(signature.encode()).decode("utf-8")
463464
payload = json.loads(payload_json)
464-
verified = verify(authorization_payload=payload, schema="registration")
465+
verified = verify(
466+
authorization_payload=payload, application_to_check=APPLICATION_NAME
467+
)
465468
if not verified:
466-
logger.info("Moonstream registration verification error")
467-
raise MoonstreamVerificationError()
469+
logger.info("Web3 registration verification error")
470+
raise Web3VerificationError()
468471
web3_address = payload.get("address")
469472
if web3_address is None:
470473
logger.error(

brood/api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from fastapi.middleware.cors import CORSMiddleware
2222
from fastapi.security import OAuth2PasswordRequestForm
2323
from fastapi.security.utils import get_authorization_scheme_param
24-
from web3login.exceptions import MoonstreamVerificationError
24+
from web3login.exceptions import Web3VerificationError
2525

2626
from . import actions, data, exceptions, models, subscriptions
2727
from .db import yield_db_session_from_env
@@ -160,7 +160,7 @@ async def create_user_handler(
160160
status_code=422,
161161
detail=invalid_password_error.generic_error_message,
162162
)
163-
except MoonstreamVerificationError:
163+
except Web3VerificationError:
164164
raise HTTPException(status_code=400, detail="Invalid user signature")
165165
except Exception:
166166
raise HTTPException(status_code=500)

brood/middleware.py

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
import base64
22
import json
33
import logging
4-
from typing import Any, Optional
4+
from typing import Optional
55
from uuid import UUID
66

77
from fastapi import Depends, HTTPException, Request
88
from fastapi.exceptions import HTTPException
99
from fastapi.security.utils import get_authorization_scheme_param
1010
from web3login.auth import to_checksum_address, verify
11-
from web3login.exceptions import MoonstreamVerificationError
12-
from web3login.middlewares.fastapi import OAuth2BearerOrSignature
11+
from web3login.exceptions import Web3VerificationError
12+
from web3login.middlewares.fastapi import OAuth2BearerOrWeb3
1313

1414
from . import actions, data
1515
from .db import yield_db_read_only_session
16-
from .settings import BOT_INSTALLATION_TOKEN, BOT_INSTALLATION_TOKEN_HEADER
16+
from .settings import (
17+
APPLICATION_NAME,
18+
BOT_INSTALLATION_TOKEN,
19+
BOT_INSTALLATION_TOKEN_HEADER,
20+
)
1721

1822
logger = logging.getLogger(__name__)
1923

20-
2124
# Login implementation follows:
2225
# https://fastapi.tiangolo.com/tutorial/security/simple-oauth2/
23-
oauth2_scheme = OAuth2BearerOrSignature(tokenUrl="token")
24-
oauth2_scheme_manual = OAuth2BearerOrSignature(tokenUrl="token", auto_error=False)
26+
oauth2_scheme = OAuth2BearerOrWeb3(tokenUrl="token")
27+
oauth2_scheme_manual = OAuth2BearerOrWeb3(tokenUrl="token", auto_error=False)
2528

2629

2730
async def get_current_user(
@@ -39,13 +42,16 @@ async def get_current_user(
3942
raise HTTPException(status_code=404, detail="Access token not found")
4043

4144
try:
42-
if scheme == "moonstream":
45+
if scheme == "web3":
4346
payload_json = base64.decodebytes(str(token).encode()).decode("utf-8")
4447
payload = json.loads(payload_json)
45-
verified = verify(authorization_payload=payload, schema="registration")
48+
verified = verify(
49+
authorization_payload=payload,
50+
application_to_check=APPLICATION_NAME,
51+
)
4652
if not verified:
47-
logger.info("Moonstream verification error")
48-
raise MoonstreamVerificationError()
53+
logger.info("Web3 verification error")
54+
raise Web3VerificationError()
4955
web3_address = payload.get("address")
5056
if web3_address is None:
5157
logger.error("Web3 address in payload could not be None")
@@ -76,7 +82,7 @@ async def get_current_user(
7682
except actions.UserInvalidParameters as e:
7783
logger.info(e)
7884
raise HTTPException(status_code=500)
79-
except MoonstreamVerificationError:
85+
except Web3VerificationError:
8086
raise HTTPException(status_code=403, detail="Signature not verified")
8187
except Exception:
8288
logger.error("Unhandled exception at get_current_user")
@@ -112,13 +118,16 @@ async def get_current_user_with_groups(
112118
raise HTTPException(status_code=404, detail="Access token not found")
113119

114120
try:
115-
if scheme == "moonstream":
121+
if scheme == "web3":
116122
payload_json = base64.decodebytes(str(token).encode()).decode("utf-8")
117123
payload = json.loads(payload_json)
118-
verified = verify(authorization_payload=payload, schema="registration")
124+
verified = verify(
125+
authorization_payload=payload,
126+
application_to_check=APPLICATION_NAME,
127+
)
119128
if not verified:
120-
logger.info("Moonstream authorization verification error")
121-
raise MoonstreamVerificationError()
129+
logger.info("Web3 authorization verification error")
130+
raise Web3VerificationError()
122131
web3_address = payload.get("address")
123132
if web3_address is None:
124133
logger.error("Web3 address in payload could not be None")
@@ -154,7 +163,7 @@ async def get_current_user_with_groups(
154163
except actions.UserInvalidParameters as e:
155164
logger.info(e)
156165
raise HTTPException(status_code=500)
157-
except MoonstreamVerificationError:
166+
except Web3VerificationError:
158167
raise HTTPException(status_code=403, detail="Signature not verified")
159168
except Exception:
160169
logger.error("Unhandled exception at get_current_user_with_groups")

brood/settings.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import stripe # type: ignore
55

6+
APPLICATION_NAME = "brood"
7+
68
RAW_ORIGIN = os.environ.get("BROOD_CORS_ALLOWED_ORIGINS")
79
if RAW_ORIGIN is None:
810
raise ValueError(

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"sqlalchemy>=1.4.26",
2323
"stripe>=2.61.0",
2424
"uvicorn>=0.15.0",
25-
"web3login[fastapi]>=0.0.2",
25+
"web3login[fastapi]>=0.0.3",
2626
],
2727
extras_require={
2828
"dev": ["alembic>=1.7.4", "black", "isort", "mypy"],

0 commit comments

Comments
 (0)