Skip to content
Snippets Groups Projects
Unverified Commit 24a2cc22 authored by xgui3783's avatar xgui3783 Committed by GitHub
Browse files

Merge pull request #1426 from FZJ-INM1-BDA/staging

v2.13.5
parents 3fab96ba 00fa50f0
No related branches found
No related tags found
No related merge requests found
......@@ -12,6 +12,7 @@ from pydantic import BaseModel
from .config import SXPLR_EBRAINS_IAM_SA_CLIENT_ID, SXPLR_EBRAINS_IAM_SA_CLIENT_SECRET, SXPLR_BUCKET_NAME, HOST_PATHNAME
from .const import EBRAINS_IAM_DISCOVERY_URL
from ._store import DataproxyStore
from .user import get_user_from_request
router = APIRouter()
......@@ -76,9 +77,10 @@ class SaneUrlDPStore(DataproxyStore):
return super()._get_bucket()
def _prepare_aux(self, request: Optional[Request]=None):
user = get_user_from_request(request) if request else None
return {
"userId": None,
"expiry": SaneUrlDPStore.GetTimeMs() + (self.expiry_s * 1e3)
"userId": user.get("id") if user else None,
"expiry": None if user else SaneUrlDPStore.GetTimeMs() + (self.expiry_s * 1e3)
}
def get(self, key: str):
......@@ -160,9 +162,9 @@ class SaneUrlModel(BaseModel):
@router.post("/{short_id:str}")
async def post_short(short_id: str, saneurl: SaneUrlModel):
async def post_short(short_id: str, saneurl: SaneUrlModel, request:Request):
try:
data_proxy_store.set(short_id, saneurl.model_dump())
data_proxy_store.set(short_id, saneurl.model_dump(), request=request)
return Response(status_code=201)
except Exception as e:
raise HTTPException(500, str(e))
from typing import Any, Coroutine
from starlette.requests import Request
from starlette.responses import Response
from fastapi import FastAPI, APIRouter
from fastapi import APIRouter
from functools import wraps
from inspect import iscoroutine
......@@ -9,50 +8,42 @@ import json
from .const import PROFILE_KEY
from .auth import _store
def is_authenticated(fn):
class NotAuthenticatedEx(Exception): ...
def check_auth(request: Request):
if PROFILE_KEY not in request.session:
raise NotAuthenticatedEx
profile_uuid = request.session[PROFILE_KEY]
user = _store.get(profile_uuid)
if not user:
raise NotAuthenticatedEx
class NotAuthenticatedEx(Exception): ...
request.state.user = json.loads(user)
def get_user_from_request(request: Request):
if PROFILE_KEY not in request.session:
return None
profile_uuid = request.session[PROFILE_KEY]
user = _store.get(profile_uuid)
return json.loads(user) if user else None
def is_authenticated(fn):
@wraps(fn)
async def async_wrapper(*args, request: Request, **kwargs):
try:
check_auth(request)
except NotAuthenticatedEx:
user = get_user_from_request(request)
if not user:
return Response("Not authenticated", 401)
request.state.user = user
return await fn(*args, request=request, **kwargs)
@wraps(fn)
def sync_wrapper(*args, request: Request, **kwargs):
try:
check_auth(request)
except NotAuthenticatedEx:
user = get_user_from_request(request)
if not user:
return Response("Not authenticated", 401)
request.state.user = user
return fn(*args, request=request, **kwargs)
return async_wrapper if iscoroutine(fn) else sync_wrapper
router = APIRouter()
@router.get("/foo")
@is_authenticated
def foo(request: Request):
return "foo"
@router.get("")
@router.get("/")
@is_authenticated
def get_user(request: Request):
def route_get_user(request: Request):
try:
user = request.state.user
if user:
......
# v2.13.5
## Bugfix
- Fix saneurl generation. Logged in user can generate long lived saneurls again
......@@ -33,6 +33,7 @@ nav:
- Fetching datasets: 'advanced/datasets.md'
- Display non-atlas volumes: 'advanced/otherVolumes.md'
- Release notes:
- v2.13.5: 'releases/v2.13.5.md'
- v2.13.4: 'releases/v2.13.4.md'
- v2.13.3: 'releases/v2.13.3.md'
- v2.13.2: 'releases/v2.13.2.md'
......
{
"name": "siibra-explorer",
"version": "2.13.4",
"version": "2.13.5",
"description": "siibra-explorer - explore brain atlases. Based on humanbrainproject/nehuba & google/neuroglancer. Built with angular",
"scripts": {
"lint": "eslint src --ext .ts",
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment