From de9f1334c13fb13a6c515f1ed57bff5d0583899d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 09:22:07 +0000 Subject: [PATCH 1/9] Build(deps): bump requests from 2.28.2 to 2.31.0 in /backend Bumps [requests](https://github.com/psf/requests) from 2.28.2 to 2.31.0. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.28.2...v2.31.0) --- updated-dependencies: - dependency-name: requests dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index 0c5f2ac72..ee4fa5ea7 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -39,7 +39,7 @@ pyOpenSSL==23.0.0 python-dateutil==2.8.2 python3-openid==3.2.0 pytz==2022.7.1 -requests==2.28.2 +requests==2.31.0 requests-oauthlib==1.3.1 service-identity==21.1.0 six==1.16.0 From 68df7de6e6d1e9a758aae0083de6c42a47bd43d9 Mon Sep 17 00:00:00 2001 From: Nimish <85357445+nimish-ks@users.noreply.github.com> Date: Sat, 8 Jul 2023 19:16:24 +0530 Subject: [PATCH 2/9] fix: CSP env vars (#22) * fix: CSP env vars * fix: replacement variable script * fixed: replace-variable.sh path * made changed to the start script * testing: hard coded sso providers * added phase.dev host in connect-src in CSP * added gitlab endpoints in CSP * chore: add new line to eof --------- Co-authored-by: rohan-chaturvedi --- frontend/apollo/client.ts | 4 ++-- frontend/next.config.js | 4 ++-- frontend/scripts/replace-variable.sh | 13 ++++++++++++- frontend/scripts/start.sh | 6 ++---- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/frontend/apollo/client.ts b/frontend/apollo/client.ts index bf2f29546..2bbfac83d 100644 --- a/frontend/apollo/client.ts +++ b/frontend/apollo/client.ts @@ -33,10 +33,10 @@ const errorLink = onError(({ graphQLErrors, networkError, operation, forward }) } } - // To retry on network errors, we recommend the RetryLink - // instead of the onError link. This just logs the error. + // Log network error if (networkError) { console.log(`[Network error]: ${networkError}`) + // Client-side logout when recieving a 403 from the backend if (networkError.message.includes('403')) handleSignout() } }) diff --git a/frontend/next.config.js b/frontend/next.config.js index 45bd709e9..dcb748564 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -5,10 +5,10 @@ const ContentSecurityPolicy = ` style-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self'; - connect-src 'self' data: ${process.env.NEXT_PUBLIC_BACKEND_API_BASE}; + connect-src 'self' data: https://*.phase.dev; font-src 'self'; frame-src 'self'; - img-src 'self' https://lh3.googleusercontent.com https://avatars.githubusercontent.com https://secure.gravatar.com; + img-src 'self' https://lh3.googleusercontent.com https://avatars.githubusercontent.com https://secure.gravatar.com https://gitlab.com; manifest-src 'self'; media-src 'self'; worker-src 'none'; diff --git a/frontend/scripts/replace-variable.sh b/frontend/scripts/replace-variable.sh index c5ff2f444..f0ba087e8 100644 --- a/frontend/scripts/replace-variable.sh +++ b/frontend/scripts/replace-variable.sh @@ -1,4 +1,15 @@ -#!/bin/sh +#!/bin/bash + +# Ensure NEXT_PUBLIC_BACKEND_API_BASE and NEXT_PUBLIC_NEXTAUTH_PROVIDERS are set +if [ -z "$NEXT_PUBLIC_BACKEND_API_BASE" ]; then + echo "NEXT_PUBLIC_BACKEND_API_BASE is not set. Please set it and rerun the script." + exit 1 +fi + +if [ -z "$NEXT_PUBLIC_NEXTAUTH_PROVIDERS" ]; then + echo "NEXT_PUBLIC_NEXTAUTH_PROVIDERS is not set. Please set it and rerun the script." + exit 1 +fi find /app/public /app/.next -type f -name "*.js" | while read file; do diff --git a/frontend/scripts/start.sh b/frontend/scripts/start.sh index 2bc903e40..1bede6ce1 100644 --- a/frontend/scripts/start.sh +++ b/frontend/scripts/start.sh @@ -1,7 +1,5 @@ #!/bin/sh -# Set up runtime env vars -scripts/replace-variable.sh - -# Start your Next.js app +# Set up runtime env vars and start next server +sh scripts/replace-variable.sh && yarn start From e12c020718c91c114e03e146f8554f97c7d33cfe Mon Sep 17 00:00:00 2001 From: Rohan Chaturvedi Date: Sat, 8 Jul 2023 20:24:35 +0530 Subject: [PATCH 3/9] chore: minor fixes to readme (#37) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0e0247655..f7c828a2b 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ [Phase Console](https://phase.dev) is an open source, end-to-end encrypted key management solution for developers to seamlessly encrypt production data in their apps. -We're on a mission to make strong encryption accessible to all developers not just security teams. That means redesigning the entire developer experience from the ground up. +We're on a mission to make strong encryption accessible to all developers, not just security teams. That means redesigning the entire developer experience from the ground up. ## Features @@ -95,7 +95,7 @@ const ciphertext = await phase.encrypt('hello world') // Decrypt const plaintext = await phase.decrypt(ciphertext) -console.log(ciphertext) +console.log(plaintext) $ hello world ``` @@ -103,7 +103,7 @@ $ hello world ## Community vs Enterprise edition -Phase operates on a [open-core](https://en.wikipedia.org/wiki/Open-core_model) model, similar to that of [GitLab](https://gitlab.com), [Infisical](https://infisical.com), [PostHog](https://posthog.com) etc. +Phase operates on an [open-core](https://en.wikipedia.org/wiki/Open-core_model) model, similar to that of [GitLab](https://gitlab.com), [Infisical](https://infisical.com), [PostHog](https://posthog.com) etc. This repo available under the [MIT expat license](/LICENSE), with the exception of the `ee` directory which will contain premium Pro or Enterprise features requiring a Phase license in the future. @@ -111,7 +111,7 @@ This repo available under the [MIT expat license](/LICENSE), with the exception ## Security -For more information of how Phase encryption works, please see the [Security Docs](https://docs.phase.dev/security) +For more information on how Phase encryption works, please see the [Security Docs](https://docs.phase.dev/security) Please do not file GitHub issues or post on our public forum for security vulnerabilities, as they are public! From 66f9d327138880d6470ccdfdc5f853d0a1b533dd Mon Sep 17 00:00:00 2001 From: Rohan Chaturvedi Date: Fri, 14 Jul 2023 13:05:20 +0530 Subject: [PATCH 4/9] feat: add docs and status links to navbar (#38) * feat: add status indicator component * feat: add docs link, status indicator to navbar * fix: update user menu styling for consistency * feat: update env to make APP_HOST available client-side * fix: gitignore node_modules in frontend subdir * fix: remove app host from docker compose config * fix: env var name for cloud hosted mode * feat: add app host to client side env var * fix: use client-side env var for app host * fix: remove console.log * test: log env var to console * fix: read env var in client component * fix: infer hosting mode in navbar * fix: use public env var for replacement * fix: useState for loading * fix: replace axios with fetch * fix: add statuspage to csp whitelist * fix: infer host mode correctly on client and server * fix: use APP_HOST to rewrite client side env var --- .gitignore | 2 +- frontend/Dockerfile | 1 + frontend/components/UserMenu.tsx | 13 +-- frontend/components/apps/NewAppDialog.tsx | 2 +- .../components/common/StatusIndicator.tsx | 82 +++++++++++++++++++ frontend/components/layout/Navbar.tsx | 10 ++- frontend/next.config.js | 2 +- frontend/scripts/replace-variable.sh | 1 + 8 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 frontend/components/common/StatusIndicator.tsx diff --git a/.gitignore b/.gitignore index 659fd303c..8295aa45e 100644 --- a/.gitignore +++ b/.gitignore @@ -131,7 +131,7 @@ dmypy.json # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules +/frontend/node_modules /.pnp .pnp.js diff --git a/frontend/Dockerfile b/frontend/Dockerfile index e88139863..cda5b7dfc 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -21,6 +21,7 @@ COPY . . # Set environment variables ARG NEXT_PUBLIC_BACKEND_API_BASE=BAKED_NEXT_PUBLIC_BACKEND_API_BASE ARG NEXT_PUBLIC_NEXTAUTH_PROVIDERS=BAKED_NEXT_PUBLIC_NEXTAUTH_PROVIDERS +ARG NEXT_PUBLIC_APP_HOST=BAKED_NEXT_PUBLIC_APP_HOST RUN yarn build # ---- Release ---- diff --git a/frontend/components/UserMenu.tsx b/frontend/components/UserMenu.tsx index ce74f2842..85093bda7 100644 --- a/frontend/components/UserMenu.tsx +++ b/frontend/components/UserMenu.tsx @@ -6,6 +6,7 @@ import { ChevronDownIcon } from '@heroicons/react/20/solid' import { useSession, signIn, signOut } from 'next-auth/react' import { MdLogout } from 'react-icons/md' import { handleSignout } from '@/apollo/client' +import { Button } from './common/Button' export default function UserMenu() { const { data: session } = useSession() @@ -15,15 +16,15 @@ export default function UserMenu() { return (
-
- -
+
+ +
{ + + const [status, setStatus] = useState(null) + const [isLoading, setLoading] = useState(false) + + useEffect(() => { + const getStatus = async () => { + + setLoading(true) + try { + await fetch(`${STATUS_PAGE_BASE_URL}/api/v2/status.json`).then(res => { + setLoading(false) + if (!res.ok) throw ('Fetch error') + else { + res.json().then(json => { + setStatus(json.status) + }) + } + }) + } catch (e) { + console.log(`Error getting system status: ${e}`) + setLoading(false) + setStatus({ + indicator: 'error', + description: 'Error fetching status' + }) + } + } + + getStatus() + }, []) + + const statusColor = () => { + let color = 'bg-neutral-500' + switch (status?.indicator) { + case 'none': + color = 'bg-emerald-500' + break + case 'minor': + color = 'bg-yellow-500' + break + case 'major': + color = 'bg-orange-500' + break + case 'critical': + color = 'bg-red-500' + break + default: + color = 'bg-neutral-500' + } + return color + } + + return ( + + + + ) +} diff --git a/frontend/components/layout/Navbar.tsx b/frontend/components/layout/Navbar.tsx index 9d9d27a1b..461889f06 100644 --- a/frontend/components/layout/Navbar.tsx +++ b/frontend/components/layout/Navbar.tsx @@ -7,11 +7,15 @@ import { usePathname } from 'next/navigation' import { useEffect } from 'react' import { AppType } from '@/apollo/graphql' import Link from 'next/link' +import { Button } from '../common/Button' +import { StatusIndicator } from '../common/StatusIndicator' export const NavBar = (props: { team: string }) => { const { data: orgsData } = useQuery(GetOrganisations) const [getApps, { data: appsData }] = useLazyQuery(GetApps) + const IS_CLOUD_HOSTED = process.env.APP_HOST || process.env.NEXT_PUBLIC_APP_HOST + useEffect(() => { if (orgsData?.organisations) { const fetchData = async () => { @@ -48,7 +52,11 @@ export const NavBar = (props: { team: string }) => { {activeApp && /} {activeApp && {activeApp.name}}
- +
+ {IS_CLOUD_HOSTED && } + + +
) } diff --git a/frontend/next.config.js b/frontend/next.config.js index dcb748564..9d0435d3f 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -5,7 +5,7 @@ const ContentSecurityPolicy = ` style-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self'; - connect-src 'self' data: https://*.phase.dev; + connect-src 'self' data: https://*.phase.dev https://phase.statuspage.io/api/v2/status.json; font-src 'self'; frame-src 'self'; img-src 'self' https://lh3.googleusercontent.com https://avatars.githubusercontent.com https://secure.gravatar.com https://gitlab.com; diff --git a/frontend/scripts/replace-variable.sh b/frontend/scripts/replace-variable.sh index f0ba087e8..32fd7dcb0 100644 --- a/frontend/scripts/replace-variable.sh +++ b/frontend/scripts/replace-variable.sh @@ -15,4 +15,5 @@ find /app/public /app/.next -type f -name "*.js" | while read file; do sed -i "s|BAKED_NEXT_PUBLIC_BACKEND_API_BASE|$NEXT_PUBLIC_BACKEND_API_BASE|g" "$file" sed -i "s|BAKED_NEXT_PUBLIC_NEXTAUTH_PROVIDERS|$NEXT_PUBLIC_NEXTAUTH_PROVIDERS|g" "$file" + sed -i "s|BAKED_NEXT_PUBLIC_APP_HOST|$APP_HOST|g" "$file" done \ No newline at end of file From f8d077bc3b1fc7c0ff61b43b00acd2747814abac Mon Sep 17 00:00:00 2001 From: Rohan Chaturvedi Date: Fri, 14 Jul 2023 16:20:16 +0530 Subject: [PATCH 5/9] chore: add staging env (#40) * feat: add docker compose config for staging env * chore: update contributing guide with instructions for staging env --- CONTRIBUTING.md | 17 +++++++-- staging-docker-compose.yml | 76 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 staging-docker-compose.yml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1a11dd9c0..80595263b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,7 +26,7 @@ If you're ever in doubt about whether or not a proposed feature aligns with Phas ## Writing and submitting code -Anyone can contribute code to Phase. To get started, check out the local development guide, make your changes, and submit a pull request to the main repository. +Anyone can contribute code to Phase. To get started, check out the local development guide, make your changes, and submit a pull request to the main repository. When committing code, please try and use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/). ## Licensing @@ -36,6 +36,15 @@ Any third party components incorporated into our code are licensed under the ori ## Setup local development environment -1. Create a `.env.dev` file with `cp .env.dev.example .env.dev` and add atleast one OAuth provider -2. `docker-compose -f dev-docker-compose.yml up` -3. The Console is now running at `https://localhost` with HMR +### Dev server with hot reload + +1. Create a `.env.dev` file with `cp .env.dev.example .env.dev` and add atleast one OAuth provider. +2. `docker-compose -f dev-docker-compose.yml up`. +3. The Console is now running at `https://localhost` with HMR. + +### Staging env to test production builds + +1. Set up a `.env` file with `cp .env.example` and add atleast one OAuth provider. View the [docs](https://docs.phase.dev/self-hosting/configuration/envars) for more info. +2. Build the image locally with `docker-compose -f staging-docker-compose.yml build` +3. Bring docker compose up with `docker-compose -f staging-docker-compose.yml up` +4. The Console is now running at `https://localhost`. diff --git a/staging-docker-compose.yml b/staging-docker-compose.yml new file mode 100644 index 000000000..14e21e1df --- /dev/null +++ b/staging-docker-compose.yml @@ -0,0 +1,76 @@ +version: "3" + +services: + nginx: + container_name: phase-nginx-dev + build: + context: . + dockerfile: ./nginx/Dockerfile + restart: always + ports: + - 80:80 + - 443:443 + volumes: + - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro + depends_on: + - frontend + - backend + networks: + - phase-net-dev + + frontend: + container_name: phase-frontend-staging + restart: unless-stopped + depends_on: + - backend + build: + context: ./frontend + dockerfile: Dockerfile + env_file: .env + environment: + NEXTAUTH_URL: "${HTTP_PROTOCOL}${HOST}" + OAUTH_REDIRECT_URI: "${HTTP_PROTOCOL}${HOST}" + BACKEND_API_BASE: "http://backend:8000" + NEXT_PUBLIC_BACKEND_API_BASE: "${HTTP_PROTOCOL}${HOST}/ph-backend" + NEXT_PUBLIC_NEXTAUTH_PROVIDERS: "${SSO_PROVIDERS}" + networks: + - phase-net-dev + + backend: + container_name: phase-backend-staging + restart: unless-stopped + depends_on: + - postgres + build: + context: ./backend + dockerfile: Dockerfile + env_file: .env + environment: + ALLOWED_HOSTS: "${HOST},backend" + ALLOWED_ORIGINS: "${HTTP_PROTOCOL}${HOST}" + SESSION_COOKIE_DOMAIN: "${HOST}" + networks: + - phase-net-dev + + postgres: + container_name: phase-postgres + image: postgres + restart: always + env_file: + - .env + environment: + POSTGRES_DB: ${DATABASE_NAME} + POSTGRES_USER: ${DATABASE_USER} + POSTGRES_PASSWORD: ${DATABASE_PASSWORD} + POSTGRES_HOST_AUTH_METHOD: "trust" + volumes: + - phase-postgres-data-dev:/var/lib/postgresql/data + networks: + - phase-net-dev + +volumes: + phase-postgres-data-dev: + driver: local + +networks: + phase-net-dev: From 17b5521b4b099cbcd9bd2ed94b885201d9c2a686 Mon Sep 17 00:00:00 2001 From: Rohan Chaturvedi Date: Fri, 14 Jul 2023 18:58:57 +0530 Subject: [PATCH 6/9] fix: move user menu to top right of login screen (#41) --- frontend/app/[team]/newdevice/page.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/app/[team]/newdevice/page.tsx b/frontend/app/[team]/newdevice/page.tsx index d92637d70..0a3778bbe 100644 --- a/frontend/app/[team]/newdevice/page.tsx +++ b/frontend/app/[team]/newdevice/page.tsx @@ -110,6 +110,9 @@ export default function NewDevice({ params }: { params: { team: string } }) { return ( <>
+
+ +

@@ -153,9 +156,6 @@ export default function NewDevice({ params }: { params: { team: string } }) {

-
- -
) From c652ffd40143794f367ba40a335eda5cd769d729 Mon Sep 17 00:00:00 2001 From: Nimish Date: Fri, 14 Jul 2023 19:13:02 +0530 Subject: [PATCH 7/9] feat: added a non root user --- frontend/Dockerfile | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/frontend/Dockerfile b/frontend/Dockerfile index cda5b7dfc..0c00ec39f 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -2,23 +2,28 @@ FROM node:alpine AS base # set working directory WORKDIR /app + +# Add a new user "app" and switch to this non-root user +RUN addgroup app && adduser -S -G app app +USER app + # copy project file COPY package.json yarn.lock ./ # ---- Dependencies ---- FROM base AS dependencies -# install node packages +# Install node packages RUN yarn install --frozen-lockfile --no-cache && yarn cache clean -# copy production node_modules aside (this is a neat trick to get only production modules) +# Copy production node_modules aside (this is a neat trick to get only production modules) RUN cp -R node_modules /tmp/node_modules -# install ALL node_modules, including 'devDependencies' +# Install ALL node_modules, including 'devDependencies' RUN yarn install --frozen-lockfile # ---- Build ---- FROM dependencies AS build COPY . . -# Set environment variables +# Set baked environment variables. These will be replaced once the container starts. ARG NEXT_PUBLIC_BACKEND_API_BASE=BAKED_NEXT_PUBLIC_BACKEND_API_BASE ARG NEXT_PUBLIC_NEXTAUTH_PROVIDERS=BAKED_NEXT_PUBLIC_NEXTAUTH_PROVIDERS ARG NEXT_PUBLIC_APP_HOST=BAKED_NEXT_PUBLIC_APP_HOST @@ -35,7 +40,11 @@ COPY --from=build /app/public ./public COPY scripts ./scripts # copy next config COPY next.config.js ./ -# expose port and define CMD + +# Temporarily switch back to root to run chmod and then back to app user +USER root RUN chmod 555 ./scripts/* +USER app + EXPOSE 3000 CMD ["/app/scripts/start.sh"] From b983373004603886ba69730d816a9a0ed6156ada Mon Sep 17 00:00:00 2001 From: Nimish Date: Fri, 14 Jul 2023 19:24:02 +0530 Subject: [PATCH 8/9] fix: permissions errors --- frontend/Dockerfile | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 0c00ec39f..6b9e7cad5 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -3,27 +3,29 @@ FROM node:alpine AS base # set working directory WORKDIR /app -# Add a new user "app" and switch to this non-root user -RUN addgroup app && adduser -S -G app app +# Add a new user "app" and change ownership of the /app directory +RUN addgroup app && adduser -S -G app app && chown -R app:app /app + +# Switch to the new user "app" USER app # copy project file -COPY package.json yarn.lock ./ +COPY --chown=app:app package.json yarn.lock ./ # ---- Dependencies ---- FROM base AS dependencies -# Install node packages +# install node packages RUN yarn install --frozen-lockfile --no-cache && yarn cache clean -# Copy production node_modules aside (this is a neat trick to get only production modules) +# copy production node_modules aside (this is a neat trick to get only production modules) RUN cp -R node_modules /tmp/node_modules -# Install ALL node_modules, including 'devDependencies' +# install ALL node_modules, including 'devDependencies' RUN yarn install --frozen-lockfile # ---- Build ---- FROM dependencies AS build -COPY . . +COPY --chown=app:app . . -# Set baked environment variables. These will be replaced once the container starts. +# Set environment variables ARG NEXT_PUBLIC_BACKEND_API_BASE=BAKED_NEXT_PUBLIC_BACKEND_API_BASE ARG NEXT_PUBLIC_NEXTAUTH_PROVIDERS=BAKED_NEXT_PUBLIC_NEXTAUTH_PROVIDERS ARG NEXT_PUBLIC_APP_HOST=BAKED_NEXT_PUBLIC_APP_HOST @@ -37,14 +39,15 @@ COPY --from=dependencies /tmp/node_modules ./node_modules COPY --from=build /app/.next ./.next COPY --from=build /app/public ./public # copy scripts directory -COPY scripts ./scripts +COPY --chown=app:app scripts ./scripts # copy next config -COPY next.config.js ./ +COPY --chown=app:app next.config.js ./ -# Temporarily switch back to root to run chmod and then back to app user +# Switch back to root to change permissions and then back to app user USER root RUN chmod 555 ./scripts/* USER app +# expose port and define CMD EXPOSE 3000 CMD ["/app/scripts/start.sh"] From 9f862f255f56ea8224e0837c3226d0cf05f200d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 Jul 2023 01:24:57 +0000 Subject: [PATCH 9/9] Build(deps): bump cryptography from 41.0.0 to 41.0.2 in /backend Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.0 to 41.0.2. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/41.0.0...41.0.2) --- updated-dependencies: - dependency-name: cryptography dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index cab65e832..984b96b06 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -9,7 +9,7 @@ certifi==2022.12.7 cffi==1.15.1 charset-normalizer==3.0.1 constantly==15.1.0 -cryptography==41.0.0 +cryptography==41.0.2 defusedxml==0.7.1 dj-rest-auth==3.0.0 Django==4.2.1