Skip to content

Commit 00fd397

Browse files
committed
WIP
1 parent 57b0abe commit 00fd397

File tree

2 files changed

+80
-12
lines changed

2 files changed

+80
-12
lines changed

api/main.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,21 @@ async def catch_all(
6363
current_user: UserInfo = Depends(validate_token),
6464
service: WorkspaceService = Depends(get_workspace_service),
6565
):
66-
validWorkspace = await service.get_workspace(
67-
current_user.projectGroups, int(request.headers.get("X-Workspace") or "-1")
68-
)
66+
authorizedWorkspace = None
6967

70-
if validWorkspace is None:
71-
raise HTTPException(
72-
status_code=status.HTTP_401_UNAUTHORIZED,
73-
detail="Invalid authentication credentials",
74-
headers={"WWW-Authenticate": "Bearer"},
68+
if(request.headers.get("X-Workspace") is not None):
69+
authorizedWorkspace = await service.get_workspace(
70+
current_user.projectGroups, int(request.headers.get("X-Workspace") or "-1")
7571
)
7672

73+
# user specified a workspace they wanted access to, but didn't get it
74+
if authorizedWorkspace is None:
75+
raise HTTPException(
76+
status_code=status.HTTP_401_UNAUTHORIZED,
77+
detail="Invalid authentication credentials",
78+
headers={"WWW-Authenticate": "Bearer"},
79+
)
80+
7781
print(
7882
f"Path proxied: {request.url} workspace_id: {request.headers.get("X-Workspace")}"
7983
)
@@ -87,9 +91,11 @@ async def catch_all(
8791
new_headers.append(
8892
(bytes("Authorization", "utf-8"), request.headers.get("Authorization"))
8993
)
90-
new_headers.append(
91-
(bytes("X-Workspace", "utf-8"), bytes(str(validWorkspace.id), "utf-8"))
92-
)
94+
95+
if(authorizedWorkspace is not None):
96+
new_headers.append(
97+
(bytes("X-Workspace", "utf-8"), bytes(str(authorizedWorkspace.id), "utf-8"))
98+
)
9399
new_headers.append((bytes("Host", "utf-8"), bytes(client.base_url.host, "utf-8")))
94100

95101
rp_req = client.build_request(

api/src/workspaces/routes.py

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from fastapi import APIRouter, Depends, status
1+
from fastapi import APIRouter, Depends, HTTPException, status
22
from sqlalchemy.ext.asyncio import AsyncSession
33

44
from api.core.database import get_session
@@ -7,6 +7,7 @@
77
from api.src.workspaces.repository import WorkspaceRepository
88
from api.src.workspaces.schemas import (
99
WorkspaceCreate,
10+
WorkspaceLongQuestBase,
1011
WorkspaceResponse,
1112
WorkspaceUpdate,
1213
)
@@ -98,3 +99,64 @@ async def delete_workspace(
9899
except Exception as e:
99100
logger.error(f"Failed to delete workspace {workspace_id}: {str(e)}")
100101
raise
102+
103+
104+
@router.get("/{workspace_id}/quests/long", response_model=WorkspaceResponse)
105+
async def get_long_quest(
106+
workspace_id: int,
107+
service: WorkspaceService = Depends(get_workspace_service),
108+
current_user: UserInfo = Depends(validate_token),
109+
) -> WorkspaceLongQuestBase | None:
110+
try:
111+
workspace = await service.get_workspace(
112+
current_user.projectGroups, workspace_id
113+
)
114+
return workspace.longFormQuestDef
115+
except Exception as e:
116+
logger.error(f"Failed to fetch workspace {workspace_id}: {str(e)}")
117+
raise
118+
119+
120+
@router.get("/{workspace_id}/quests/long/settings", response_model=WorkspaceLongQuestBase)
121+
async def get_long_quest_settings(
122+
workspace_id: int,
123+
service: WorkspaceService = Depends(get_workspace_service),
124+
current_user: UserInfo = Depends(validate_token),
125+
) -> WorkspaceLongQuestBase | None:
126+
try:
127+
workspace = await service.get_workspace(
128+
current_user.projectGroups, workspace_id
129+
)
130+
131+
if(workspace.longFormQuestDef is None):
132+
raise HTTPException(
133+
status_code=status.HTTP_204_NO_CONTENT,
134+
detail="No Content",
135+
)
136+
137+
return workspace.longFormQuestDef
138+
except Exception as e:
139+
logger.error(f"Failed to fetch workspace {workspace_id}: {str(e)}")
140+
raise
141+
142+
@router.patch("/{workspace_id}/quests/long/settings", response_model=WorkspaceLongQuestBase)
143+
async def update_long_quest_settings(
144+
workspace_id: int,
145+
workspace_data: WorkspaceUpdate,
146+
service: WorkspaceService = Depends(get_workspace_service),
147+
current_user: UserInfo = Depends(validate_token),
148+
) -> WorkspaceLongQuestBase | None:
149+
try:
150+
workspace:WorkspaceUpdate = await service.get_workspace(
151+
current_user.projectGroups, workspace_id
152+
) # type: ignore
153+
154+
# workspace.longFormQuestDef = longform_quest_data
155+
156+
updatedWorkspace = await service.update_workspace(
157+
current_user.projectGroups, workspace_id, workspace
158+
)
159+
return updatedWorkspace.longFormQuestDef
160+
except Exception as e:
161+
logger.error(f"Failed to update workspace {workspace_id}: {str(e)}")
162+
raise

0 commit comments

Comments
 (0)