diff --git a/autogpt_platform/backend/backend/api/auth/helpers_test.py b/autogpt_platform/backend/backend/api/auth/helpers_test.py index 4f8712ad4b..cfd3a8dfab 100644 --- a/autogpt_platform/backend/backend/api/auth/helpers_test.py +++ b/autogpt_platform/backend/backend/api/auth/helpers_test.py @@ -413,9 +413,7 @@ def test_components_with_existing_responses(): assert "HTTP401NotAuthenticatedError" in schema["components"]["responses"] # Verify our 401 response structure - error_response = schema["components"]["responses"][ - "HTTP401NotAuthenticatedError" - ] + error_response = schema["components"]["responses"]["HTTP401NotAuthenticatedError"] assert error_response["description"] == "Authentication required" diff --git a/autogpt_platform/backend/backend/api/features/admin/credit_admin_routes.py b/autogpt_platform/backend/backend/api/features/admin/credit_admin_routes.py index 8506bed05f..5e6f443a66 100644 --- a/autogpt_platform/backend/backend/api/features/admin/credit_admin_routes.py +++ b/autogpt_platform/backend/backend/api/features/admin/credit_admin_routes.py @@ -1,10 +1,10 @@ import logging import typing -from backend.api.auth import get_user_id, requires_admin_user from fastapi import APIRouter, Body, Security from prisma.enums import CreditTransactionType +from backend.api.auth import get_user_id, requires_admin_user from backend.data.credit import admin_get_user_history, get_user_credit_model from backend.util.json import SafeJson diff --git a/autogpt_platform/backend/backend/api/features/admin/credit_admin_routes_test.py b/autogpt_platform/backend/backend/api/features/admin/credit_admin_routes_test.py index 34cc27222d..c1db7601dc 100644 --- a/autogpt_platform/backend/backend/api/features/admin/credit_admin_routes_test.py +++ b/autogpt_platform/backend/backend/api/features/admin/credit_admin_routes_test.py @@ -6,9 +6,9 @@ import fastapi.testclient import prisma.enums import pytest import pytest_mock -from backend.api.auth.jwt_utils import get_jwt_payload from pytest_snapshot.plugin import Snapshot +from backend.api.auth.jwt_utils import get_jwt_payload from backend.data.model import UserTransaction from backend.util.json import SafeJson from backend.util.models import Pagination diff --git a/autogpt_platform/backend/backend/api/features/admin/execution_analytics_routes.py b/autogpt_platform/backend/backend/api/features/admin/execution_analytics_routes.py index 66489eed4e..ec4d2e46d4 100644 --- a/autogpt_platform/backend/backend/api/features/admin/execution_analytics_routes.py +++ b/autogpt_platform/backend/backend/api/features/admin/execution_analytics_routes.py @@ -3,10 +3,10 @@ import logging from datetime import datetime from typing import Optional -from backend.api.auth import get_user_id, requires_admin_user from fastapi import APIRouter, HTTPException, Security from pydantic import BaseModel, Field +from backend.api.auth import get_user_id, requires_admin_user from backend.blocks.llm import LlmModel from backend.data.analytics import ( AccuracyTrendsResponse, diff --git a/autogpt_platform/backend/backend/api/features/admin/store_admin_routes.py b/autogpt_platform/backend/backend/api/features/admin/store_admin_routes.py index 131d8d59c9..e95390d9ff 100644 --- a/autogpt_platform/backend/backend/api/features/admin/store_admin_routes.py +++ b/autogpt_platform/backend/backend/api/features/admin/store_admin_routes.py @@ -2,11 +2,11 @@ import logging import tempfile import typing -import backend.api.auth import fastapi import fastapi.responses import prisma.enums +import backend.api.auth import backend.api.features.store.cache as store_cache import backend.api.features.store.db as store_db import backend.api.features.store.model as store_model diff --git a/autogpt_platform/backend/backend/api/features/analytics.py b/autogpt_platform/backend/backend/api/features/analytics.py index 97d011f319..d86fa19e67 100644 --- a/autogpt_platform/backend/backend/api/features/analytics.py +++ b/autogpt_platform/backend/backend/api/features/analytics.py @@ -5,10 +5,10 @@ from typing import Annotated import fastapi import pydantic -from backend.api.auth import get_user_id -from backend.api.auth.dependencies import requires_user import backend.data.analytics +from backend.api.auth import get_user_id +from backend.api.auth.dependencies import requires_user router = fastapi.APIRouter(dependencies=[fastapi.Security(requires_user)]) logger = logging.getLogger(__name__) diff --git a/autogpt_platform/backend/backend/api/features/builder/routes.py b/autogpt_platform/backend/backend/api/features/builder/routes.py index 418f6520f9..bc12b30131 100644 --- a/autogpt_platform/backend/backend/api/features/builder/routes.py +++ b/autogpt_platform/backend/backend/api/features/builder/routes.py @@ -2,8 +2,8 @@ import logging from typing import Annotated, Sequence import fastapi -from backend.api.auth.dependencies import get_user_id, requires_user +from backend.api.auth.dependencies import get_user_id, requires_user from backend.integrations.providers import ProviderName from backend.util.models import Pagination diff --git a/autogpt_platform/backend/backend/api/features/chat/routes.py b/autogpt_platform/backend/backend/api/features/chat/routes.py index 2b320ffae8..b4374a81bb 100644 --- a/autogpt_platform/backend/backend/api/features/chat/routes.py +++ b/autogpt_platform/backend/backend/api/features/chat/routes.py @@ -5,11 +5,11 @@ import uuid as uuid_module from collections.abc import AsyncGenerator from typing import Annotated -from backend.api import auth from fastapi import APIRouter, Depends, Header, HTTPException, Query, Response, Security from fastapi.responses import StreamingResponse from pydantic import BaseModel +from backend.api import auth from backend.util.exceptions import NotFoundError from . import service as chat_service diff --git a/autogpt_platform/backend/backend/api/features/executions/review/routes.py b/autogpt_platform/backend/backend/api/features/executions/review/routes.py index f32f654ec4..9397a28688 100644 --- a/autogpt_platform/backend/backend/api/features/executions/review/routes.py +++ b/autogpt_platform/backend/backend/api/features/executions/review/routes.py @@ -2,10 +2,10 @@ import asyncio import logging from typing import Any, List -import backend.api.auth as autogpt_auth_lib from fastapi import APIRouter, HTTPException, Query, Security, status from prisma.enums import ReviewStatus +import backend.api.auth as autogpt_auth_lib from backend.data.execution import ( ExecutionContext, ExecutionStatus, diff --git a/autogpt_platform/backend/backend/api/features/integrations/router.py b/autogpt_platform/backend/backend/api/features/integrations/router.py index ae74295ddd..913481cdb7 100644 --- a/autogpt_platform/backend/backend/api/features/integrations/router.py +++ b/autogpt_platform/backend/backend/api/features/integrations/router.py @@ -3,7 +3,6 @@ import logging from datetime import datetime, timedelta, timezone from typing import TYPE_CHECKING, Annotated, List, Literal -from backend.api.auth import get_user_id from fastapi import ( APIRouter, Body, @@ -17,6 +16,7 @@ from fastapi import ( from pydantic import BaseModel, Field, SecretStr from starlette.status import HTTP_500_INTERNAL_SERVER_ERROR, HTTP_502_BAD_GATEWAY +from backend.api.auth import get_user_id from backend.api.features.library.db import set_preset_webhook, update_preset from backend.api.features.library.model import LibraryAgentPreset from backend.data.graph import NodeModel, get_graph, set_node_webhook diff --git a/autogpt_platform/backend/backend/api/features/library/routes/agents.py b/autogpt_platform/backend/backend/api/features/library/routes/agents.py index 028911eaf2..1cb859dcc4 100644 --- a/autogpt_platform/backend/backend/api/features/library/routes/agents.py +++ b/autogpt_platform/backend/backend/api/features/library/routes/agents.py @@ -1,10 +1,10 @@ from typing import Literal, Optional -import backend.api.auth as autogpt_auth_lib from fastapi import APIRouter, Body, HTTPException, Query, Security, status from fastapi.responses import Response from prisma.enums import OnboardingStep +import backend.api.auth as autogpt_auth_lib from backend.data.onboarding import complete_onboarding_step from .. import db as library_db diff --git a/autogpt_platform/backend/backend/api/features/library/routes/presets.py b/autogpt_platform/backend/backend/api/features/library/routes/presets.py index 7231e8790c..e91ec7881f 100644 --- a/autogpt_platform/backend/backend/api/features/library/routes/presets.py +++ b/autogpt_platform/backend/backend/api/features/library/routes/presets.py @@ -1,9 +1,9 @@ import logging from typing import Any, Optional -import backend.api.auth as autogpt_auth_lib from fastapi import APIRouter, Body, HTTPException, Query, Security, status +import backend.api.auth as autogpt_auth_lib from backend.data.execution import GraphExecutionMeta from backend.data.graph import get_graph from backend.data.integrations import get_webhook diff --git a/autogpt_platform/backend/backend/api/features/oauth.py b/autogpt_platform/backend/backend/api/features/oauth.py index 6cc6b13df6..a015bb4939 100644 --- a/autogpt_platform/backend/backend/api/features/oauth.py +++ b/autogpt_platform/backend/backend/api/features/oauth.py @@ -21,13 +21,13 @@ from datetime import datetime from typing import Literal, Optional from urllib.parse import urlencode -from backend.api.auth import get_user_id from fastapi import APIRouter, Body, HTTPException, Security, UploadFile, status from gcloud.aio import storage as async_storage from PIL import Image from prisma.enums import APIKeyPermission from pydantic import BaseModel, Field +from backend.api.auth import get_user_id from backend.data.auth.oauth import ( InvalidClientError, InvalidGrantError, diff --git a/autogpt_platform/backend/backend/api/features/oauth_test.py b/autogpt_platform/backend/backend/api/features/oauth_test.py index db35881903..cd44089569 100644 --- a/autogpt_platform/backend/backend/api/features/oauth_test.py +++ b/autogpt_platform/backend/backend/api/features/oauth_test.py @@ -21,7 +21,6 @@ from typing import AsyncGenerator import httpx import pytest import pytest_asyncio -from backend.api.auth.api_key.keysmith import APIKeySmith from prisma.enums import APIKeyPermission from prisma.models import OAuthAccessToken as PrismaOAuthAccessToken from prisma.models import OAuthApplication as PrismaOAuthApplication @@ -29,6 +28,7 @@ from prisma.models import OAuthAuthorizationCode as PrismaOAuthAuthorizationCode from prisma.models import OAuthRefreshToken as PrismaOAuthRefreshToken from prisma.models import User as PrismaUser +from backend.api.auth.api_key.keysmith import APIKeySmith from backend.api.rest_api import app keysmith = APIKeySmith() diff --git a/autogpt_platform/backend/backend/api/features/otto/routes.py b/autogpt_platform/backend/backend/api/features/otto/routes.py index f3a082f4c6..f65b814c26 100644 --- a/autogpt_platform/backend/backend/api/features/otto/routes.py +++ b/autogpt_platform/backend/backend/api/features/otto/routes.py @@ -1,8 +1,9 @@ import logging -from backend.api.auth import get_user_id, requires_user from fastapi import APIRouter, HTTPException, Security +from backend.api.auth import get_user_id, requires_user + from .models import ApiResponse, ChatRequest from .service import OttoService diff --git a/autogpt_platform/backend/backend/api/features/store/routes.py b/autogpt_platform/backend/backend/api/features/store/routes.py index 68203c57a5..388c5ddbf6 100644 --- a/autogpt_platform/backend/backend/api/features/store/routes.py +++ b/autogpt_platform/backend/backend/api/features/store/routes.py @@ -4,11 +4,11 @@ import typing import urllib.parse from typing import Literal -import backend.api.auth import fastapi import fastapi.responses import prisma.enums +import backend.api.auth import backend.data.graph import backend.util.json from backend.util.models import Pagination diff --git a/autogpt_platform/backend/backend/api/features/v1.py b/autogpt_platform/backend/backend/api/features/v1.py index d1d990bef4..b4ac24b1f9 100644 --- a/autogpt_platform/backend/backend/api/features/v1.py +++ b/autogpt_platform/backend/backend/api/features/v1.py @@ -9,8 +9,6 @@ from typing import Annotated, Any, Sequence, get_args import pydantic import stripe -from backend.api.auth import get_user_id, requires_user -from backend.api.auth.jwt_utils import get_jwt_payload from fastapi import ( APIRouter, Body, @@ -28,6 +26,8 @@ from pydantic import BaseModel from starlette.status import HTTP_204_NO_CONTENT, HTTP_404_NOT_FOUND from typing_extensions import Optional, TypedDict +from backend.api.auth import get_user_id, requires_user +from backend.api.auth.jwt_utils import get_jwt_payload from backend.api.model import ( CreateAPIKeyRequest, CreateAPIKeyResponse, diff --git a/autogpt_platform/backend/backend/api/features/workspace/routes.py b/autogpt_platform/backend/backend/api/features/workspace/routes.py index df7fbb6c72..558b91bc19 100644 --- a/autogpt_platform/backend/backend/api/features/workspace/routes.py +++ b/autogpt_platform/backend/backend/api/features/workspace/routes.py @@ -8,9 +8,9 @@ from typing import Annotated from urllib.parse import quote import fastapi -from backend.api.auth.dependencies import get_user_id, requires_user from fastapi.responses import Response +from backend.api.auth.dependencies import get_user_id, requires_user from backend.data.workspace import get_workspace, get_workspace_file from backend.util.workspace_storage import get_workspace_storage diff --git a/autogpt_platform/backend/backend/api/rest_api.py b/autogpt_platform/backend/backend/api/rest_api.py index b449bc7be8..54376e9f55 100644 --- a/autogpt_platform/backend/backend/api/rest_api.py +++ b/autogpt_platform/backend/backend/api/rest_api.py @@ -9,8 +9,6 @@ import fastapi.responses import pydantic import starlette.middleware.cors import uvicorn -from backend.api.auth import add_auth_responses_to_openapi -from backend.api.auth import verify_settings as verify_auth_settings from fastapi.exceptions import RequestValidationError from fastapi.middleware.gzip import GZipMiddleware from fastapi.routing import APIRoute @@ -40,6 +38,8 @@ import backend.data.user import backend.integrations.webhooks.utils import backend.util.service import backend.util.settings +from backend.api.auth import add_auth_responses_to_openapi +from backend.api.auth import verify_settings as verify_auth_settings from backend.api.features.chat.completion_consumer import ( start_completion_consumer, stop_completion_consumer, diff --git a/autogpt_platform/backend/backend/api/ws_api.py b/autogpt_platform/backend/backend/api/ws_api.py index d51dbfc42a..aad9025f2f 100644 --- a/autogpt_platform/backend/backend/api/ws_api.py +++ b/autogpt_platform/backend/backend/api/ws_api.py @@ -5,10 +5,10 @@ from typing import Protocol import pydantic import uvicorn -from backend.api.auth.jwt_utils import parse_jwt_token from fastapi import Depends, FastAPI, WebSocket, WebSocketDisconnect from starlette.middleware.cors import CORSMiddleware +from backend.api.auth.jwt_utils import parse_jwt_token from backend.api.conn_manager import ConnectionManager from backend.api.model import ( WSMessage, diff --git a/autogpt_platform/backend/backend/cli/oauth_tool.py b/autogpt_platform/backend/backend/cli/oauth_tool.py index 0dc37e1d05..b60f6e8878 100755 --- a/autogpt_platform/backend/backend/cli/oauth_tool.py +++ b/autogpt_platform/backend/backend/cli/oauth_tool.py @@ -40,9 +40,10 @@ from typing import Optional from urllib.parse import urlparse import click -from backend.api.auth.api_key.keysmith import APIKeySmith from prisma.enums import APIKeyPermission +from backend.api.auth.api_key.keysmith import APIKeySmith + keysmith = APIKeySmith() diff --git a/autogpt_platform/backend/backend/data/auth/api_key.py b/autogpt_platform/backend/backend/data/auth/api_key.py index ffa33a0a17..5b509282ff 100644 --- a/autogpt_platform/backend/backend/data/auth/api_key.py +++ b/autogpt_platform/backend/backend/data/auth/api_key.py @@ -3,12 +3,12 @@ import uuid from datetime import datetime, timezone from typing import Literal, Optional -from backend.api.auth.api_key.keysmith import APIKeySmith from prisma.enums import APIKeyPermission, APIKeyStatus from prisma.models import APIKey as PrismaAPIKey from prisma.types import APIKeyWhereUniqueInput from pydantic import Field +from backend.api.auth.api_key.keysmith import APIKeySmith from backend.data.includes import MAX_USER_API_KEYS_FETCH from backend.util.exceptions import NotAuthorizedError, NotFoundError diff --git a/autogpt_platform/backend/backend/data/auth/oauth.py b/autogpt_platform/backend/backend/data/auth/oauth.py index 1608c8cf41..e898b1166c 100644 --- a/autogpt_platform/backend/backend/data/auth/oauth.py +++ b/autogpt_platform/backend/backend/data/auth/oauth.py @@ -16,7 +16,6 @@ import uuid from datetime import datetime, timedelta, timezone from typing import Literal, Optional -from backend.api.auth.api_key.keysmith import APIKeySmith from prisma.enums import APIKeyPermission as APIPermission from prisma.models import OAuthAccessToken as PrismaOAuthAccessToken from prisma.models import OAuthApplication as PrismaOAuthApplication @@ -25,6 +24,8 @@ from prisma.models import OAuthRefreshToken as PrismaOAuthRefreshToken from prisma.types import OAuthApplicationUpdateInput from pydantic import BaseModel, Field, SecretStr +from backend.api.auth.api_key.keysmith import APIKeySmith + from .base import APIAuthorizationInfo logger = logging.getLogger(__name__) diff --git a/autogpt_platform/backend/backend/data/user.py b/autogpt_platform/backend/backend/data/user.py index 578cc3192d..24cb608f54 100644 --- a/autogpt_platform/backend/backend/data/user.py +++ b/autogpt_platform/backend/backend/data/user.py @@ -6,12 +6,12 @@ from datetime import datetime, timedelta from typing import Optional, cast from urllib.parse import quote_plus -from backend.api.auth.models import DEFAULT_USER_ID from fastapi import HTTPException from prisma.enums import NotificationType from prisma.models import User as PrismaUser from prisma.types import JsonFilter, UserCreateInput, UserUpdateInput +from backend.api.auth.models import DEFAULT_USER_ID from backend.data.db import prisma from backend.data.model import User, UserIntegrations, UserMetadata from backend.data.notifications import NotificationPreference, NotificationPreferenceDTO diff --git a/autogpt_platform/backend/backend/integrations/credentials_store.py b/autogpt_platform/backend/backend/integrations/credentials_store.py index 9c4b8626f0..f6a7df9a43 100644 --- a/autogpt_platform/backend/backend/integrations/credentials_store.py +++ b/autogpt_platform/backend/backend/integrations/credentials_store.py @@ -5,7 +5,6 @@ from contextlib import asynccontextmanager from datetime import datetime, timedelta, timezone from typing import Optional -from backend.util.synchronize import AsyncRedisKeyedMutex from pydantic import SecretStr from backend.data.db import prisma @@ -19,6 +18,7 @@ from backend.data.model import ( ) from backend.data.redis_client import get_redis_async from backend.util.settings import Settings +from backend.util.synchronize import AsyncRedisKeyedMutex settings = Settings() diff --git a/autogpt_platform/backend/backend/integrations/creds_manager.py b/autogpt_platform/backend/backend/integrations/creds_manager.py index 54fe6396c6..1dd6cadefc 100644 --- a/autogpt_platform/backend/backend/integrations/creds_manager.py +++ b/autogpt_platform/backend/backend/integrations/creds_manager.py @@ -4,7 +4,6 @@ from contextlib import asynccontextmanager from datetime import datetime from typing import TYPE_CHECKING, Any, Callable, Coroutine -from backend.util.synchronize import AsyncRedisKeyedMutex from redis.asyncio.lock import Lock as AsyncRedisLock from backend.data.model import Credentials, OAuth2Credentials @@ -14,6 +13,7 @@ from backend.integrations.oauth import CREDENTIALS_BY_PROVIDER, HANDLERS_BY_NAME from backend.integrations.providers import ProviderName from backend.util.exceptions import MissingConfigError from backend.util.settings import Settings +from backend.util.synchronize import AsyncRedisKeyedMutex if TYPE_CHECKING: from backend.integrations.oauth import BaseOAuthHandler diff --git a/autogpt_platform/backend/backend/util/feature_flag.py b/autogpt_platform/backend/backend/util/feature_flag.py index 7d8134ca6c..bc4a60cedf 100644 --- a/autogpt_platform/backend/backend/util/feature_flag.py +++ b/autogpt_platform/backend/backend/util/feature_flag.py @@ -5,12 +5,12 @@ from functools import wraps from typing import Any, Awaitable, Callable, TypeVar import ldclient -from backend.api.auth.dependencies import get_optional_user_id from fastapi import HTTPException, Security from ldclient import Context, LDClient from ldclient.config import Config from typing_extensions import ParamSpec +from backend.api.auth.dependencies import get_optional_user_id from backend.util.cache import cached from backend.util.settings import Settings diff --git a/autogpt_platform/backend/backend/util/test.py b/autogpt_platform/backend/backend/util/test.py index 70bc20773f..605e7ab6ff 100644 --- a/autogpt_platform/backend/backend/util/test.py +++ b/autogpt_platform/backend/backend/util/test.py @@ -6,7 +6,6 @@ import uuid from typing import Sequence, cast from backend.api.auth import get_user_id - from backend.api.rest_api import AgentServer from backend.data import db from backend.data.block import Block, BlockSchema, initialize_blocks