Skip to content

Commit

Permalink
test(e2e): cypress all in one
Browse files Browse the repository at this point in the history
  • Loading branch information
douglasduteil committed Apr 11, 2024
1 parent 90795b5 commit 191d5ea
Show file tree
Hide file tree
Showing 94 changed files with 2,318 additions and 1,342 deletions.
42 changes: 42 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Docker Image

on:
push:

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to Github Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ github.token }}

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=sha,format=long,prefix=
type=ref,event=branch
type=ref,event=tag
flavor: |
latest=${{ github.ref == 'refs/heads/master' }}
- name: Build image
uses: docker/build-push-action@v3
with:
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64
cache-from: type=registry,ref=ghcr.io/${{ github.repository }}:buildcache
cache-to: type=registry,ref=ghcr.io/${{ github.repository }}:buildcache,mode=max
build-args: |
SOURCE_COMMIT=${{ github.sha }}
127 changes: 27 additions & 100 deletions .github/workflows/end-to-end.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,15 @@ name: End-to-end tests

on:
push:
branches:
- "**"
- "!master"
workflow_run:
workflows:
- Docker Image
types:
- completed

env:
ACCESS_LOG_PATH:
PGUSER: api-auth
PGPASSWORD: api-auth
PGDATABASE: api-auth-test
PGHOST: 127.0.0.1
PGPORT: 5432
DATABASE_URL: postgres://api-auth:api-auth@127.0.0.1:5432/api-auth-test
BREVO_API_KEY: ${{ secrets.BREVO_API_KEY }}
MONCOMPTEPRO_HOST: http://172.18.0.1:3000
CYPRESS_BASE_URL: http://172.18.0.1:3000
DO_NOT_SEND_MAIL: "False"
DO_NOT_CHECK_EMAIL_DELIVERABILITY: "True"
CONSIDER_ALL_EMAIL_DOMAINS_AS_NON_FREE: "True"
DO_NOT_RATE_LIMIT: "True"
DO_NOT_USE_ANNUAIRE_EMAILS: "True"
DO_NOT_AUTHENTICATE_BROWSER: "True"
SESSION_COOKIE_SECRET: secret
DEBOUNCE_API_KEY:
SENTRY_DSN:
INSEE_CONSUMER_KEY: ${{ secrets.INSEE_CONSUMER_KEY }}
INSEE_CONSUMER_SECRET: ${{ secrets.INSEE_CONSUMER_SECRET }}
CYPRESS_MAILSLURP_API_KEY: ${{ secrets.MAILSLURP_API_KEY }}
SECURE_COOKIES: "false"
ZAMMAD_URL: ${{ secrets.ZAMMAD_URL }}
ZAMMAD_TOKEN: ${{ secrets.ZAMMAD_TOKEN }}
MODERATION_TAG: "github-action-e2e-test"
JWKS: '{"keys":[{"crv":"P-256","x":"UtmbpHb1aHibmvEQJ2KlIzNro4tGfyMiBIVmO92YX7Q","y":"YsRG_NMtLOqvA6S9zq5r7M9Y-Cgo4YwKvH3xXyvFE2E","d":"taURynSwshCfxEWs6z2_Xz-ocheg-6ePaU87cjy572Y","kty":"EC","kid":"GCirOyeBc0rlWhcbMnwe9FUadPk6ToJlOq3yvxvkKlE","use":"enc"},{"crv":"P-256","x":"2SSoeci15SnMM6wwxvNwzp_xjVTwgEALOY1NvTBbdqs","y":"Gplus4XyX4dQ6Z0Pwb0UhsmJfx7S5_DCFxpK6yt396Q","d":"TLeCkidQUJG9s6hvHx8QSHNKfqyhcbIXCN7rJ67AjH4","kty":"EC","kid":"TeXJ6Hx4sG9A13LCFlU46-PYGopwwFOsmCTEJcwZvZ8","use":"sig"},{"crv":"Ed25519","x":"NQNM3isoJAeK6HWKEgHifRqFrC-R6ufusnv47BnlWn4","d":"WxFz4Ulx6rLBO5HHHhg86BMc_CtRoCmFn8Gwy-kbaL4","kty":"OKP","kid":"onHSTAw1rfQOz_qWnPTh2SZzrseoqbOOrD1tcxFOaIU","use":"sig"},{"e":"AQAB","n":"5yuakCQKnkzP4tNXYI6qRYX-0pyeuGKS8VKl7S1QNj7bAMjeV2o3xjDgg4qtrUrFrqxSFOfBX5kJR3NEBoYiQpUwl9zPmKNLR0zX0w6VpwDREDS8bpBL_naeiGRdLX_AYxR7jCsDETEXqFm0S1CmfLjgAoazLPDxzGvFaezLEo0rafcLR3MpKIa-INqwCoTiLWUAtXKv-ZcmO7QuzRcVJecFs7WaMQZNMrfSAdj-agdnVOkP2cXnd6xpT2Pcph7I6z2slRkEZ_Oz1BkG-FV_21IlY1U4tE3GigKdSNRSJmuyvdgI4wDb2noZdEStFr8nsOsG63kIYM_Gve-HWiTxmQ","d":"qClmBFjTiJgj2cMXmtvtLSnuVtMr-sFqVzZiEYiXAv7yXT3B0CEqdXf0unvVH2x3JTuhcies2Zf_0gQdhglpPro8YRx1v3l6N2HE1nmTj6reakWSlXNOdMthQ6KOzZxTHUA3J53aW1U0-nhW2TrQAYaTHgNSr-yOWMBFGWrxxomc8h_1OnnXS9wRxoicPshjx7S8huy3YLbWzQphBqzBx5vsPOClfbs0dtxhAY63vXbNDS_sAIVfn1U__f6ilFmzE9odgOydsSwBUtRm2Ir4wY5HhqYGRPOKAUNHLqEsDqwmp_o3RtBQwg937ymbOJvgoa6qkqg_uxtaVSP7RX4EKQ","p":"-X7pv_NpfJvqTTlQwQnaz6eiA_I7v7Jj0l1KtmBRBZz6q6R9qq1BVlP8XeOBO5TX9vQKIooY8fL3QsWf73ZqQmmy9W3C4dAhwbwalvBzZHZT2Wznrurp_bML_8Xx1XhNxTawAb263O3AUz7Rw3g5lI2cafTe4x1dSO8_CHL3eMs","q":"7TJj6aNzkVjyPeCZVHwBXGDWDIT2DxqWRjKrKgqlpWdzEftNce855Wg3Ve4JnNtFkg7Qow4imZVkbK69ChIStv9s1KDX_sGRCyfN17d0jlkyGUnFB2RSBB42t7SmcC4ZhHjxdAdopOG_o1r5vEwDo-0hKWikP9uyYmWyhfY3hqs","dp":"g0dYT3wQ4VRY8NFbwHci_2jBQzpOXgvLooEcMuJzP3TeITqoNQp8-qOuguiWs3caPAMk4g-wGH8zw5qhEStJtjBPzfw3MwKFAJ-tjgZvcUkhzaIUNmG9RZTUl3zcRurKYR7pdcETdfRT4nmHfkbgZV4uE0KZlP96ekoI7LUxqgk","dq":"1Gpl81t_KVDgTu2OIoySo2nNBpUjzc7feKnzgsjaItALyrSkXD4COSElPPzY-vGa0fwWd483CRcyQeoSPKyGuf7wNVJ9XBV4kObqfh46cSgLp33axo3erPVpxwYubxO5olq00FW6Lr5D4kSclTX1pJ29LtoZDV7v1xJ_11vxydU","qi":"4RyTKy-QINtOUezaLEymzNBIG3uZv_IKvGPhEYi4wRNP_XxIK9NwfgUFRAhxhpxSpEjco_eNuN3I6XBF7bXb4-Bnnye1mBm3sBTXx2_09r8zt9Uvg3cdh0pYem3hU1ANMRmr3rfjtain4DTskIJ2CxjvGIMyh3VXLyRyfzIGJig","kty":"RSA","kid":"kddKa_IDmU8a5RhJaIzwzpJcFe4qT-GtNFcG2AWclZ4","use":"enc"},{"e":"AQAB","n":"6btLS-c06m18O5BlLvJA4HJNVI7WauBg5JVoy1cHTdfjTJ-oSts5uetXKF_NlNcLuq-zIKZuu9wea5m2E3lJ-vtCSAtRaJgZY41KAOjIsrHQstVuc9di4zjgcA6zwEXhqwu48gklGKpWNk7wnfMCO6mNoRs_-8-CnK6lTFeJFzfoCDmS6dYbefmPeFW4qziEZzEv5DPGAcUsXXZhbOku_E8gILRVMkBwHpvY_G3jngE1EWXctiM9tYqhgvxyJC9QyPCVpgfAvDlslMpuQTxBviC9PsrcBaQ5PyAP_xNN3X8LB-STpz7jNpNquKL5Ls0Hv9R3fDCeHvcYoVsgDirwfQ","d":"L0a7DDdP9LsAjeu_C6fkh4GXMqtRo3yPHK077SVFTPGGAFGq8Lk3C-wWTQxTwO9eZ_xx9wCzFTyIyqrksTuvQxzfY0MmzEk3mXNSrKxpK_vbgtC47qV6UwuGGiRfJ1z7MGXGmu5OmpaZqZJ-CPTGVtsM0rF4V665dIe-15o9GHzLX80mhw8ySd0qqBIbdIWlK2zaSRPGL08mP02t_XnHdCCaWfRE_erO6zsEhR8ePvbmQqI7GRBull59seXefo1VDP30lEwHwH05Ju24_ZddhfuP2Y9jkZnNKqpSHF3EZzT6Vh3ggAaLjQzRWJvd1_0Zit7CD06o6L1aLV7nDnTYAQ","p":"_u6v29kLICnGvbF44-sF5cFisrIPyXcj8laaNx6uP5ax9ZOPD_THdxTFU3YWLUErzi4MQJQPLoJacphQJKnG78b0PX_733--r-vpqUqfbzAlIssS8N4CFj6_YEMFR8W70laXJYJdx7IsnGOAlxAUZur5ugaaR0zDzlMTQVuR30E","q":"6rXguomnHNGFslAeHWPxPDaHxihx3eRJ-8t1KyvvwT43YfdPn2xxdq5-TyO0MMKznvDIHk9HDMBMr8JH32Q9qx75Ec81NOLGkBWqO9x-8dBlKn95jr8-qkD3iXHmJiHHNWNurHJM4G4lo73IL_0jgo0CCpcZWP7iH5y-b_mXPj0","dp":"Cyf-4iwZZIrve5WsqKy8UVWpMBDCyBpCpHRNw2PAVGAP4aNXe2dG41sxV3mvdsOHWzqApsLT90EVHDa2KySS5CNcxOQ47Yr1mVVFoHb3izIcLe2dIpVUmgyc62WDcaShl47ahnWyDO8rLJzeH75AZlCaJR3s2nnth7Xy_cU4GQE","dq":"SvJe21HfQe2JsqGwrBPg0ShcfKMnkQI3uaaDOJDkEyHJz4eILlETfiFEBgNRo4xYjPU4Aa2w81poYms4RhYdNwpB4DT5OXT8kL_KRykmhBLWaxafezyIRxdNs97h7eU1Vk_05C3vbG7fqASO6vv7HdHnB_ityGRDUnLbwKfDasU","qi":"QomRmnqrW3k8cV8MIefgmKZMGDGHRC44bFk9B20YR15_XHcMimi7o9rjUE7BY-RO30RsPUiQqB_vkpKvQZILOuPmIQhElcgmguKqPNwprVMgx-krUQ1Khuh3tgzxhBgazXzPcKmx8JBbCopP_UwNiCpPcdm74VFcZ-OswmqQU08","kty":"RSA","kid":"lFWqEBQbScnjO5OzUbvkPp0rmjGy17bmzZOqUbWkQMo","use":"sig"}]}'

jobs:
test:
strategy:
Expand All @@ -55,94 +32,44 @@ jobs:
- redirect_after_session_expiration
- reset_password
- join_must_confirm
runs-on: ubuntu-20.04
services:
moncomptepro-standard-client:
image: ghcr.io/betagouv/moncomptepro-test-client
ports:
- 4000:3000
env:
SITE_TITLE: moncomptepro-standard-client
HOST: http://localhost:4000
MCP_CLIENT_ID: standard_client_id
MCP_CLIENT_SECRET: standard_client_secret
MCP_PROVIDER: ${{ env.MONCOMPTEPRO_HOST }}
MCP_SCOPES: openid email profile organization
STYLESHEET_URL: ""
moncomptepro-agentconnect-client:
image: ghcr.io/betagouv/moncomptepro-test-client
ports:
- 4001:3000
env:
SITE_TITLE: moncomptepro-agentconnect-client
HOST: http://localhost:4001
MCP_CLIENT_ID: agentconnect_client_id
MCP_CLIENT_SECRET: agentconnect_client_secret
MCP_PROVIDER: ${{ env.MONCOMPTEPRO_HOST }}
MCP_SCOPES: openid uid given_name usual_name email siren siret organizational_unit belonging_population phone chorusdt
MCP_ID_TOKEN_SIGNED_RESPONSE_ALG: ES256
MCP_USERINFO_SIGNED_RESPONSE_ALG: ES256
STYLESHEET_URL: ""
LOGIN_HINT: unused1@yopmail.com
moncomptepro-legacy-client:
image: ghcr.io/betagouv/moncomptepro-test-client
ports:
- 4002:3000
env:
SITE_TITLE: moncomptepro-legacy-client
HOST: http://localhost:4002
MCP_CLIENT_ID: legacy_client_id
MCP_CLIENT_SECRET: legacy_client_secret
MCP_PROVIDER: ${{ env.MONCOMPTEPRO_HOST }}
MCP_SCOPES: openid email profile phone organizations
STYLESHEET_URL: ""
redis:
image: redis:7.0
ports:
- 6379:6379
postgres:
image: postgres:14.1
env:
POSTGRES_USER: ${{ env.PGUSER }}
POSTGRES_PASSWORD: ${{ env.PGPASSWORD }}
POSTGRES_DB: ${{ env.PGDATABASE }}
ports:
- 5432:5432
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
cache: "npm"
node-version-file: package.json
- run: npm ci --include=dev
- run: npm run migrate up
- run: npm run fixtures:load-ci -- cypress/fixtures/${{ matrix.e2e_test }}.sql
- run: npm run update-organization-info -- 2000
- name: Dotenv Action
uses: falti/dotenv-action@v1.1.1
with:
path: cypress/env/${{ matrix.e2e_test }}.conf
export-variables: true
keys-case: bypass
- run: |
mv .env.sample .env
echo "BREVO_API_KEY=${{ secrets.BREVO_API_KEY }}" >> .env
echo "INSEE_CONSUMER_KEY=${{ secrets.INSEE_CONSUMER_KEY }}" >> .env
echo "INSEE_CONSUMER_SECRET=${{ secrets.INSEE_CONSUMER_SECRET }}" >> .env
echo "MODERATION_TAG=github-action-e2e-test" >> .env
echo "ZAMMAD_TOKEN=${{ secrets.ZAMMAD_TOKEN }}" >> .env
echo "ZAMMAD_URL=${{ secrets.ZAMMAD_URL }}" >> .env
# NOTE(douglasduteil): Prepare the end-to-end test environment
# The following docker compose lines ensure that the testing environment
# is already hot before running the tests
- run: docker compose --project-directory cypress/e2e/${{ matrix.e2e_test }} pull
- run: docker compose --project-directory cypress/e2e/${{ matrix.e2e_test }} build moncomptepro
- run: docker compose --project-directory cypress/e2e/${{ matrix.e2e_test }} up --build --detach

- name: Cypress run
uses: cypress-io/github-action@v6.6.1
with:
wait-on: ${{ env.MONCOMPTEPRO_HOST }}/users/start-sign-in
build: npm run build
start: npm start
install: false
spec: cypress/e2e/${{ matrix.e2e_test }}.cy.js
env:
NODE_ENV: production
- run: npm run delete-database
spec: cypress/e2e/${{ matrix.e2e_test }}/${{ matrix.e2e_test }}.cy.js

# Store tests runs in case of failure
- uses: actions/upload-artifact@v4
if: failure()
with:
name: cypress-screenshots
name: cypress-${{ matrix.e2e_test }}-screenshots
path: cypress/screenshots
- uses: actions/upload-artifact@v4
if: failure()
with:
name: cypress-videos
name: cypress-${{ matrix.e2e_test }}-videos
path: cypress/videos
2 changes: 1 addition & 1 deletion .github/workflows/fixtures.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ env:

jobs:
test:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
services:
postgres:
image: postgres:12.12
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:

jobs:
test:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ moncomptepro.conf
.idea
.vscode

cypress/downloads
cypress/screenshots
cypress/videos

Expand Down
30 changes: 30 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
FROM node:lts-slim AS base
RUN corepack enable npm
WORKDIR /app

FROM base AS prod-deps
RUN --mount=type=bind,source=package.json,target=package.json \
--mount=type=bind,source=package-lock.json,target=package-lock.json \
--mount=type=cache,target=/root/.npm \
npm ci --omit=dev

FROM base AS build
ENV CYPRESS_INSTALL_BINARY=0
RUN --mount=type=bind,source=package.json,target=package.json \
--mount=type=bind,source=package-lock.json,target=package-lock.json \
--mount=type=cache,target=/root/.npm \
npm ci
COPY tsconfig.json vite.config.mjs ./
COPY assets/ ./assets/
COPY public/ ./public/
COPY src/ ./src/
COPY package*.json ./
RUN npx run-s build:*

FROM base
COPY package.json ./
COPY --from=prod-deps /app/node_modules /app/node_modules
COPY --from=build /app/dist /app/dist
COPY --from=build /app/build /app/build

CMD [ "npm", "start" ]
4 changes: 3 additions & 1 deletion cypress.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module.exports = {
defaultCommandTimeout: 60000,
pageLoadTimeout: 60000,
e2e: {
baseUrl: "http://localhost:3000",
// baseUrl: "http://app.moncomptepro.localhost",
// We've imported your old cypress plugins here.
// You may want to clean this up later by importing these.
setupNodeEvents(on, config) {
Expand All @@ -14,7 +14,9 @@ module.exports = {
return null;
},
});
config.baseUrl = "http://app.moncomptepro.localhost";
return require("./cypress/plugins/index.js")(on, config);
},
},
video: true,
};
12 changes: 12 additions & 0 deletions cypress/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CONSIDER_ALL_EMAIL_DOMAINS_AS_NON_FREE="True"
DATABASE_URL=postgres://username:password@db:5432/dbname
DO_NOT_AUTHENTICATE_BROWSER="True"
DO_NOT_CHECK_EMAIL_DELIVERABILITY="True"
DO_NOT_RATE_LIMIT="True"
DO_NOT_SEND_MAIL="False"
DO_NOT_USE_ANNUAIRE_EMAILS="True"
JWKS='{"keys":[{"crv":"P-256","x":"UtmbpHb1aHibmvEQJ2KlIzNro4tGfyMiBIVmO92YX7Q","y":"YsRG_NMtLOqvA6S9zq5r7M9Y-Cgo4YwKvH3xXyvFE2E","d":"taURynSwshCfxEWs6z2_Xz-ocheg-6ePaU87cjy572Y","kty":"EC","kid":"GCirOyeBc0rlWhcbMnwe9FUadPk6ToJlOq3yvxvkKlE","use":"enc"},{"crv":"P-256","x":"2SSoeci15SnMM6wwxvNwzp_xjVTwgEALOY1NvTBbdqs","y":"Gplus4XyX4dQ6Z0Pwb0UhsmJfx7S5_DCFxpK6yt396Q","d":"TLeCkidQUJG9s6hvHx8QSHNKfqyhcbIXCN7rJ67AjH4","kty":"EC","kid":"TeXJ6Hx4sG9A13LCFlU46-PYGopwwFOsmCTEJcwZvZ8","use":"sig"},{"crv":"Ed25519","x":"NQNM3isoJAeK6HWKEgHifRqFrC-R6ufusnv47BnlWn4","d":"WxFz4Ulx6rLBO5HHHhg86BMc_CtRoCmFn8Gwy-kbaL4","kty":"OKP","kid":"onHSTAw1rfQOz_qWnPTh2SZzrseoqbOOrD1tcxFOaIU","use":"sig"},{"e":"AQAB","n":"5yuakCQKnkzP4tNXYI6qRYX-0pyeuGKS8VKl7S1QNj7bAMjeV2o3xjDgg4qtrUrFrqxSFOfBX5kJR3NEBoYiQpUwl9zPmKNLR0zX0w6VpwDREDS8bpBL_naeiGRdLX_AYxR7jCsDETEXqFm0S1CmfLjgAoazLPDxzGvFaezLEo0rafcLR3MpKIa-INqwCoTiLWUAtXKv-ZcmO7QuzRcVJecFs7WaMQZNMrfSAdj-agdnVOkP2cXnd6xpT2Pcph7I6z2slRkEZ_Oz1BkG-FV_21IlY1U4tE3GigKdSNRSJmuyvdgI4wDb2noZdEStFr8nsOsG63kIYM_Gve-HWiTxmQ","d":"qClmBFjTiJgj2cMXmtvtLSnuVtMr-sFqVzZiEYiXAv7yXT3B0CEqdXf0unvVH2x3JTuhcies2Zf_0gQdhglpPro8YRx1v3l6N2HE1nmTj6reakWSlXNOdMthQ6KOzZxTHUA3J53aW1U0-nhW2TrQAYaTHgNSr-yOWMBFGWrxxomc8h_1OnnXS9wRxoicPshjx7S8huy3YLbWzQphBqzBx5vsPOClfbs0dtxhAY63vXbNDS_sAIVfn1U__f6ilFmzE9odgOydsSwBUtRm2Ir4wY5HhqYGRPOKAUNHLqEsDqwmp_o3RtBQwg937ymbOJvgoa6qkqg_uxtaVSP7RX4EKQ","p":"-X7pv_NpfJvqTTlQwQnaz6eiA_I7v7Jj0l1KtmBRBZz6q6R9qq1BVlP8XeOBO5TX9vQKIooY8fL3QsWf73ZqQmmy9W3C4dAhwbwalvBzZHZT2Wznrurp_bML_8Xx1XhNxTawAb263O3AUz7Rw3g5lI2cafTe4x1dSO8_CHL3eMs","q":"7TJj6aNzkVjyPeCZVHwBXGDWDIT2DxqWRjKrKgqlpWdzEftNce855Wg3Ve4JnNtFkg7Qow4imZVkbK69ChIStv9s1KDX_sGRCyfN17d0jlkyGUnFB2RSBB42t7SmcC4ZhHjxdAdopOG_o1r5vEwDo-0hKWikP9uyYmWyhfY3hqs","dp":"g0dYT3wQ4VRY8NFbwHci_2jBQzpOXgvLooEcMuJzP3TeITqoNQp8-qOuguiWs3caPAMk4g-wGH8zw5qhEStJtjBPzfw3MwKFAJ-tjgZvcUkhzaIUNmG9RZTUl3zcRurKYR7pdcETdfRT4nmHfkbgZV4uE0KZlP96ekoI7LUxqgk","dq":"1Gpl81t_KVDgTu2OIoySo2nNBpUjzc7feKnzgsjaItALyrSkXD4COSElPPzY-vGa0fwWd483CRcyQeoSPKyGuf7wNVJ9XBV4kObqfh46cSgLp33axo3erPVpxwYubxO5olq00FW6Lr5D4kSclTX1pJ29LtoZDV7v1xJ_11vxydU","qi":"4RyTKy-QINtOUezaLEymzNBIG3uZv_IKvGPhEYi4wRNP_XxIK9NwfgUFRAhxhpxSpEjco_eNuN3I6XBF7bXb4-Bnnye1mBm3sBTXx2_09r8zt9Uvg3cdh0pYem3hU1ANMRmr3rfjtain4DTskIJ2CxjvGIMyh3VXLyRyfzIGJig","kty":"RSA","kid":"kddKa_IDmU8a5RhJaIzwzpJcFe4qT-GtNFcG2AWclZ4","use":"enc"},{"e":"AQAB","n":"6btLS-c06m18O5BlLvJA4HJNVI7WauBg5JVoy1cHTdfjTJ-oSts5uetXKF_NlNcLuq-zIKZuu9wea5m2E3lJ-vtCSAtRaJgZY41KAOjIsrHQstVuc9di4zjgcA6zwEXhqwu48gklGKpWNk7wnfMCO6mNoRs_-8-CnK6lTFeJFzfoCDmS6dYbefmPeFW4qziEZzEv5DPGAcUsXXZhbOku_E8gILRVMkBwHpvY_G3jngE1EWXctiM9tYqhgvxyJC9QyPCVpgfAvDlslMpuQTxBviC9PsrcBaQ5PyAP_xNN3X8LB-STpz7jNpNquKL5Ls0Hv9R3fDCeHvcYoVsgDirwfQ","d":"L0a7DDdP9LsAjeu_C6fkh4GXMqtRo3yPHK077SVFTPGGAFGq8Lk3C-wWTQxTwO9eZ_xx9wCzFTyIyqrksTuvQxzfY0MmzEk3mXNSrKxpK_vbgtC47qV6UwuGGiRfJ1z7MGXGmu5OmpaZqZJ-CPTGVtsM0rF4V665dIe-15o9GHzLX80mhw8ySd0qqBIbdIWlK2zaSRPGL08mP02t_XnHdCCaWfRE_erO6zsEhR8ePvbmQqI7GRBull59seXefo1VDP30lEwHwH05Ju24_ZddhfuP2Y9jkZnNKqpSHF3EZzT6Vh3ggAaLjQzRWJvd1_0Zit7CD06o6L1aLV7nDnTYAQ","p":"_u6v29kLICnGvbF44-sF5cFisrIPyXcj8laaNx6uP5ax9ZOPD_THdxTFU3YWLUErzi4MQJQPLoJacphQJKnG78b0PX_733--r-vpqUqfbzAlIssS8N4CFj6_YEMFR8W70laXJYJdx7IsnGOAlxAUZur5ugaaR0zDzlMTQVuR30E","q":"6rXguomnHNGFslAeHWPxPDaHxihx3eRJ-8t1KyvvwT43YfdPn2xxdq5-TyO0MMKznvDIHk9HDMBMr8JH32Q9qx75Ec81NOLGkBWqO9x-8dBlKn95jr8-qkD3iXHmJiHHNWNurHJM4G4lo73IL_0jgo0CCpcZWP7iH5y-b_mXPj0","dp":"Cyf-4iwZZIrve5WsqKy8UVWpMBDCyBpCpHRNw2PAVGAP4aNXe2dG41sxV3mvdsOHWzqApsLT90EVHDa2KySS5CNcxOQ47Yr1mVVFoHb3izIcLe2dIpVUmgyc62WDcaShl47ahnWyDO8rLJzeH75AZlCaJR3s2nnth7Xy_cU4GQE","dq":"SvJe21HfQe2JsqGwrBPg0ShcfKMnkQI3uaaDOJDkEyHJz4eILlETfiFEBgNRo4xYjPU4Aa2w81poYms4RhYdNwpB4DT5OXT8kL_KRykmhBLWaxafezyIRxdNs97h7eU1Vk_05C3vbG7fqASO6vv7HdHnB_ityGRDUnLbwKfDasU","qi":"QomRmnqrW3k8cV8MIefgmKZMGDGHRC44bFk9B20YR15_XHcMimi7o9rjUE7BY-RO30RsPUiQqB_vkpKvQZILOuPmIQhElcgmguKqPNwprVMgx-krUQ1Khuh3tgzxhBgazXzPcKmx8JBbCopP_UwNiCpPcdm74VFcZ-OswmqQU08","kty":"RSA","kid":"lFWqEBQbScnjO5OzUbvkPp0rmjGy17bmzZOqUbWkQMo","use":"sig"}]}'
NODE_ENV=production
REDIS_URL=redis://:@redis:6379
SECURE_COOKIES="false"
SESSION_COOKIE_SECRET=secret
Loading

0 comments on commit 191d5ea

Please sign in to comment.