mirror of
https://github.com/meysamhadeli/booking-microservices.git
synced 2026-04-11 02:20:20 +08:00
chore: Update docker-compose.yaml
This commit is contained in:
parent
13deb2869c
commit
a142a2e789
@ -22,6 +22,9 @@
|
|||||||
**/.tye/
|
**/.tye/
|
||||||
**/secrets.dev.yaml
|
**/secrets.dev.yaml
|
||||||
**/values.dev.yaml
|
**/values.dev.yaml
|
||||||
|
**/*.jwk
|
||||||
|
**/keys
|
||||||
LICENSE
|
LICENSE
|
||||||
README.md
|
README.md
|
||||||
CHANGELOG.md
|
CHANGELOG.md
|
||||||
|
|
||||||
|
|||||||
@ -43,11 +43,11 @@ runs:
|
|||||||
if: ${{ github.ref == 'refs/heads/main' && success() }}
|
if: ${{ github.ref == 'refs/heads/main' && success() }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
docker build -t ${{ inputs.registry-username }}/${{ inputs.image-name }}:v1.6.4 -f "${{ github.workspace }}/${{ inputs.dockerfile-path }}" .
|
docker build -t ${{ inputs.registry-username }}/${{ inputs.image-name }}:v1.6.5 -f "${{ github.workspace }}/${{ inputs.dockerfile-path }}" .
|
||||||
|
|
||||||
- name: Publish Docker Image
|
- name: Publish Docker Image
|
||||||
if: ${{ github.ref == 'refs/heads/main' && success() }}
|
if: ${{ github.ref == 'refs/heads/main' && success() }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
docker push ${{ inputs.registry-username }}/${{ inputs.image-name }}:v1.6.4
|
docker push ${{ inputs.registry-username }}/${{ inputs.image-name }}:v1.6.5
|
||||||
|
|
||||||
|
|||||||
40
.github/workflows/ci.yml
vendored
40
.github/workflows/ci.yml
vendored
@ -35,8 +35,8 @@ jobs:
|
|||||||
- name: Build
|
- name: Build
|
||||||
run: dotnet build -c Release --no-restore
|
run: dotnet build -c Release --no-restore
|
||||||
|
|
||||||
# - name: Test
|
- name: Test
|
||||||
# run: dotnet test -c Release --no-restore
|
run: dotnet test -c Release --no-restore
|
||||||
|
|
||||||
- name: Update Release Drafter
|
- name: Update Release Drafter
|
||||||
if: ${{ github.ref == 'refs/heads/main' && success() }}
|
if: ${{ github.ref == 'refs/heads/main' && success() }}
|
||||||
@ -69,22 +69,22 @@ jobs:
|
|||||||
dockerfile-path: 'src/Services/Flight/Dockerfile'
|
dockerfile-path: 'src/Services/Flight/Dockerfile'
|
||||||
image-name: 'booking-microservices-flight'
|
image-name: 'booking-microservices-flight'
|
||||||
|
|
||||||
# - name: Build and Publish Passenger to Docker
|
- name: Build and Publish Passenger to Docker
|
||||||
# if: ${{ github.ref == 'refs/heads/main' && success() }}
|
if: ${{ github.ref == 'refs/heads/main' && success() }}
|
||||||
# uses: ./.github/actions/docker-build-publish
|
uses: ./.github/actions/docker-build-publish
|
||||||
# with:
|
with:
|
||||||
# tag-name: ${{ steps.last_release.outputs.tag_name }}
|
tag-name: ${{ steps.last_release.outputs.tag_name }}
|
||||||
# registry-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
registry-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
# registry-password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
registry-password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||||
# dockerfile-path: 'src/Services/Passenger/Dockerfile'
|
dockerfile-path: 'src/Services/Passenger/Dockerfile'
|
||||||
# image-name: 'booking-microservices-passenger'
|
image-name: 'booking-microservices-passenger'
|
||||||
|
|
||||||
# - name: Build and Publish Booking to Docker
|
- name: Build and Publish Booking to Docker
|
||||||
# if: ${{ github.ref == 'refs/heads/main' && success() }}
|
if: ${{ github.ref == 'refs/heads/main' && success() }}
|
||||||
# uses: ./.github/actions/docker-build-publish
|
uses: ./.github/actions/docker-build-publish
|
||||||
# with:
|
with:
|
||||||
# tag-name: ${{ steps.last_release.outputs.tag_name }}
|
tag-name: ${{ steps.last_release.outputs.tag_name }}
|
||||||
# registry-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
registry-username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
# registry-password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
registry-password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||||
# dockerfile-path: 'src/Services/Booking/Dockerfile'
|
dockerfile-path: 'src/Services/Booking/Dockerfile'
|
||||||
# image-name: 'booking-microservices-booking'
|
image-name: 'booking-microservices-booking'
|
||||||
|
|||||||
4
.gitignore
vendored
4
.gitignore
vendored
@ -432,3 +432,7 @@ fabric.properties
|
|||||||
|
|
||||||
# Tye
|
# Tye
|
||||||
.tye/
|
.tye/
|
||||||
|
|
||||||
|
*.jwk
|
||||||
|
|
||||||
|
**/keys
|
||||||
@ -1,7 +1,7 @@
|
|||||||
version: "3.3"
|
version: "3.3"
|
||||||
services:
|
services:
|
||||||
|
|
||||||
######################################################
|
######################################################
|
||||||
# Postgres
|
# Postgres
|
||||||
######################################################
|
######################################################
|
||||||
postgres:
|
postgres:
|
||||||
@ -17,9 +17,9 @@ services:
|
|||||||
- booking
|
- booking
|
||||||
|
|
||||||
|
|
||||||
#######################################################
|
#######################################################
|
||||||
# Rabbitmq
|
# Rabbitmq
|
||||||
#######################################################
|
#######################################################
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
container_name: rabbitmq
|
container_name: rabbitmq
|
||||||
image: rabbitmq:3-management
|
image: rabbitmq:3-management
|
||||||
@ -119,41 +119,36 @@ services:
|
|||||||
depends_on:
|
depends_on:
|
||||||
- elasticsearch
|
- elasticsearch
|
||||||
environment:
|
environment:
|
||||||
- ELASTICSEARCH_URL=http://localhost:9200
|
- ELASTICSEARCH_URL=elasticsearch:9200
|
||||||
networks:
|
networks:
|
||||||
- booking
|
- booking
|
||||||
|
|
||||||
|
|
||||||
#######################################################
|
######################################################
|
||||||
# Gateway
|
# Gateway
|
||||||
#######################################################
|
######################################################
|
||||||
# gateway:
|
gateway:
|
||||||
# image: gateway
|
image: gateway
|
||||||
# build:
|
build:
|
||||||
# args:
|
args:
|
||||||
# Version: "1"
|
Version: "1"
|
||||||
# context: ../../
|
context: ../../
|
||||||
# dockerfile: src/ApiGateway/Dockerfile
|
dockerfile: src/ApiGateway/Dockerfile
|
||||||
# container_name: booking-gateway
|
container_name: gateway
|
||||||
# ports:
|
ports:
|
||||||
# - "5001:80"
|
- "5001:80"
|
||||||
# - "5000:443"
|
- "5000:443"
|
||||||
# depends_on:
|
volumes:
|
||||||
# - postgres
|
- ~/.aspnet/https:/https:ro
|
||||||
# - rabbitmq
|
environment:
|
||||||
# - jaeger
|
- ASPNETCORE_ENVIRONMENT=docker
|
||||||
# - elasticsearch
|
- ASPNETCORE_URLS=https://+;http://+
|
||||||
# - kibana
|
- ASPNETCORE_HTTPS_PORT=5000
|
||||||
# volumes:
|
- ASPNETCORE_HTTP_PORT=5001
|
||||||
# - ~/.aspnet/https:/https:ro
|
- ASPNETCORE_Kestrel__Certificates__Default__Password=password
|
||||||
# environment:
|
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
|
||||||
# - ASPNETCORE_ENVIRONMENT=docker
|
networks:
|
||||||
# - ASPNETCORE_URLS=https://+;http://+
|
- booking
|
||||||
# - ASPNETCORE_HTTPS_PORT=5001
|
|
||||||
# - ASPNETCORE_Kestrel__Certificates__Default__Password=password
|
|
||||||
# - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
|
|
||||||
# networks:
|
|
||||||
# - booking
|
|
||||||
|
|
||||||
|
|
||||||
#######################################################
|
#######################################################
|
||||||
@ -170,14 +165,6 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 5004:80
|
- 5004:80
|
||||||
- 5003:443
|
- 5003:443
|
||||||
depends_on:
|
|
||||||
- postgres
|
|
||||||
- rabbitmq
|
|
||||||
- jaeger
|
|
||||||
- elasticsearch
|
|
||||||
- kibana
|
|
||||||
- mongo
|
|
||||||
- identity
|
|
||||||
volumes:
|
volumes:
|
||||||
- ~/.aspnet/https:/https:ro
|
- ~/.aspnet/https:/https:ro
|
||||||
environment:
|
environment:
|
||||||
@ -185,10 +172,6 @@ services:
|
|||||||
- ASPNETCORE_URLS=https://+;http://+
|
- ASPNETCORE_URLS=https://+;http://+
|
||||||
- ASPNETCORE_HTTPS_PORT=5003
|
- ASPNETCORE_HTTPS_PORT=5003
|
||||||
- ASPNETCORE_HTTP_PORT=5004
|
- ASPNETCORE_HTTP_PORT=5004
|
||||||
- Jwt__Authority=http://host.docker.internal:6005
|
|
||||||
- Jwt__Audience=flight-api
|
|
||||||
- Jwt__RequireHttpsMetadata=false
|
|
||||||
- Jwt__MetadataAddress=http://host.docker.internal:6005/.well-known/openid-configuration
|
|
||||||
- ASPNETCORE_Kestrel__Certificates__Default__Password=password
|
- ASPNETCORE_Kestrel__Certificates__Default__Password=password
|
||||||
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
|
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
|
||||||
networks:
|
networks:
|
||||||
@ -208,12 +191,6 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 6005:80
|
- 6005:80
|
||||||
- 5005:443
|
- 5005:443
|
||||||
depends_on:
|
|
||||||
- postgres
|
|
||||||
- rabbitmq
|
|
||||||
- jaeger
|
|
||||||
- elasticsearch
|
|
||||||
- kibana
|
|
||||||
volumes:
|
volumes:
|
||||||
- ~/.aspnet/https:/https:ro
|
- ~/.aspnet/https:/https:ro
|
||||||
environment:
|
environment:
|
||||||
@ -230,68 +207,55 @@ services:
|
|||||||
#######################################################
|
#######################################################
|
||||||
# Passenger
|
# Passenger
|
||||||
#######################################################
|
#######################################################
|
||||||
# passenger:
|
passenger:
|
||||||
# image: passenger
|
image: passenger
|
||||||
# build:
|
build:
|
||||||
# args:
|
args:
|
||||||
# Version: "1"
|
Version: "1"
|
||||||
# context: ../../
|
context: ../../
|
||||||
# dockerfile: src/Services/Passenger/Dockerfile
|
dockerfile: src/Services/Passenger/Dockerfile
|
||||||
# container_name: passenger
|
container_name: passenger
|
||||||
# ports:
|
ports:
|
||||||
# - 6012:80
|
- 6012:80
|
||||||
# - 5012:443
|
- 5012:443
|
||||||
# depends_on:
|
volumes:
|
||||||
# - postgres
|
- ~/.aspnet/https:/https:ro
|
||||||
# - rabbitmq
|
environment:
|
||||||
# - jaeger
|
- ASPNETCORE_ENVIRONMENT=docker
|
||||||
# - elasticsearch
|
- ASPNETCORE_URLS=https://+;http://+
|
||||||
# - kibana
|
- ASPNETCORE_HTTPS_PORT=5012
|
||||||
# - mongo
|
- ASPNETCORE_HTTP_PORT=6012
|
||||||
# volumes:
|
- ASPNETCORE_Kestrel__Certificates__Default__Password=password
|
||||||
# - ~/.aspnet/https:/https:ro
|
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
|
||||||
# environment:
|
networks:
|
||||||
# - ASPNETCORE_ENVIRONMENT=docker
|
- booking
|
||||||
# - ASPNETCORE_URLS=https://+;http://+
|
|
||||||
# - ASPNETCORE_HTTPS_PORT=5012
|
|
||||||
# - ASPNETCORE_Kestrel__Certificates__Default__Password=password
|
|
||||||
# - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
|
|
||||||
# networks:
|
|
||||||
# - booking
|
|
||||||
|
|
||||||
|
|
||||||
#######################################################
|
#######################################################
|
||||||
# Booking
|
# Booking
|
||||||
#######################################################
|
#######################################################
|
||||||
# booking:
|
booking:
|
||||||
# image: booking
|
image: booking
|
||||||
# build:
|
build:
|
||||||
# args:
|
args:
|
||||||
# Version: "1"
|
Version: "1"
|
||||||
# context: ../../
|
context: ../../
|
||||||
# dockerfile: src/Services/Booking/Dockerfile
|
dockerfile: src/Services/Booking/Dockerfile
|
||||||
# container_name: booking
|
container_name: booking
|
||||||
# ports:
|
ports:
|
||||||
# - 6010:80
|
- 6010:80
|
||||||
# - 5010:443
|
- 5010:443
|
||||||
# depends_on:
|
volumes:
|
||||||
# - postgres
|
- ~/.aspnet/https:/https:ro
|
||||||
# - rabbitmq
|
environment:
|
||||||
# - jaeger
|
- ASPNETCORE_ENVIRONMENT=docker
|
||||||
# - eventstore
|
- ASPNETCORE_URLS=https://+;http://+
|
||||||
# - elasticsearch
|
- ASPNETCORE_HTTPS_PORT=5010
|
||||||
# - kibana
|
- ASPNETCORE_HTTP_PORT=6010
|
||||||
# - mongo
|
- ASPNETCORE_Kestrel__Certificates__Default__Password=password
|
||||||
# volumes:
|
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
|
||||||
# - ~/.aspnet/https:/https:ro
|
networks:
|
||||||
# environment:
|
- booking
|
||||||
# - ASPNETCORE_ENVIRONMENT=docker
|
|
||||||
# - ASPNETCORE_URLS=https://+;http://+
|
|
||||||
# - ASPNETCORE_HTTPS_PORT=5010
|
|
||||||
# - ASPNETCORE_Kestrel__Certificates__Default__Password=password
|
|
||||||
# - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
|
|
||||||
# networks:
|
|
||||||
# - booking
|
|
||||||
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
|
|||||||
@ -8,7 +8,8 @@ COPY ./src/ApiGateway/src/ApiGateway.csproj ./ApiGateway/src/
|
|||||||
|
|
||||||
|
|
||||||
# Restore nuget packages
|
# Restore nuget packages
|
||||||
RUN dotnet restore ./ApiGateway/src/ApiGateway.csproj
|
RUN --mount=type=cache,id=gateway_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet restore ./ApiGateway/src/ApiGateway.csproj
|
||||||
|
|
||||||
# Copy project files
|
# Copy project files
|
||||||
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
||||||
@ -18,20 +19,27 @@ COPY ./src/ApiGateway/src ./ApiGateway/src/
|
|||||||
# and no restore, as we did it already
|
# and no restore, as we did it already
|
||||||
|
|
||||||
RUN ls
|
RUN ls
|
||||||
RUN dotnet build -c Release --no-restore ./ApiGateway/src/ApiGateway.csproj
|
RUN --mount=type=cache,id=gateway_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet build -c Release --no-restore ./ApiGateway/src/ApiGateway.csproj
|
||||||
|
|
||||||
WORKDIR /src/ApiGateway/src
|
WORKDIR /src/ApiGateway/src
|
||||||
|
|
||||||
# Publish project to output folder
|
# Publish project to output folder
|
||||||
# and no build, as we did it already
|
# and no build, as we did it already
|
||||||
RUN dotnet publish -c Release --no-build -o out
|
RUN --mount=type=cache,id=gateway_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet publish -c Release --no-build -o out
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
||||||
|
|
||||||
# Setup working directory for the project
|
# Setup working directory for the project
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=builder /src/ApiGateway/src/out .
|
COPY --from=builder /src/ApiGateway/src/out .
|
||||||
|
|
||||||
|
ENV ASPNETCORE_URLS https://*:443, http://*:80
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT docker
|
||||||
|
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
EXPOSE 443
|
EXPOSE 443
|
||||||
|
|
||||||
ENTRYPOINT ["dotnet", "ApiGateway.dll"]
|
ENTRYPOINT ["dotnet", "ApiGateway.dll"]
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,8 @@ COPY ./src/Services/Booking/src/Booking.Api/Booking.Api.csproj ./Services/Bookin
|
|||||||
|
|
||||||
|
|
||||||
# Restore nuget packages
|
# Restore nuget packages
|
||||||
RUN dotnet restore ./Services/Booking/src/Booking.Api/Booking.Api.csproj
|
RUN --mount=type=cache,id=booking_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet restore ./Services/Booking/src/Booking.Api/Booking.Api.csproj
|
||||||
|
|
||||||
# Copy project files
|
# Copy project files
|
||||||
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
||||||
@ -19,13 +20,15 @@ COPY ./src/Services/Booking/src/Booking.Api/ ./Services/Booking/src/Booking.Api
|
|||||||
# and no restore, as we did it already
|
# and no restore, as we did it already
|
||||||
|
|
||||||
RUN ls
|
RUN ls
|
||||||
RUN dotnet build -c Release --no-restore ./Services/Booking/src/Booking.Api/Booking.Api.csproj
|
RUN --mount=type=cache,id=booking_nuget,target=/root/.nuget/packages\
|
||||||
|
dotnet build -c Release --no-restore ./Services/Booking/src/Booking.Api/Booking.Api.csproj
|
||||||
|
|
||||||
WORKDIR /Services/Booking/src/Booking.Api
|
WORKDIR /Services/Booking/src/Booking.Api
|
||||||
|
|
||||||
# Publish project to output folder
|
# Publish project to output folder
|
||||||
# and no build, as we did it already
|
# and no build, as we did it already
|
||||||
RUN dotnet publish -c Release --no-build -o out
|
RUN --mount=type=cache,id=booking_nuget,target=/root/.nuget/packages\
|
||||||
|
dotnet publish -c Release --no-build -o out
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
||||||
|
|
||||||
@ -33,8 +36,11 @@ FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
|||||||
WORKDIR /
|
WORKDIR /
|
||||||
COPY --from=builder /Services/Booking/src/Booking.Api/out .
|
COPY --from=builder /Services/Booking/src/Booking.Api/out .
|
||||||
|
|
||||||
ENV ASPNETCORE_URLS https://*:5010, http://*:6010
|
ENV ASPNETCORE_URLS https://*:443, http://*:80
|
||||||
ENV ASPNETCORE_ENVIRONMENT docker
|
ENV ASPNETCORE_ENVIRONMENT docker
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
ENTRYPOINT ["dotnet", "Booking.Api.dll"]
|
ENTRYPOINT ["dotnet", "Booking.Api.dll"]
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
"dotnetRunMessages": true,
|
"dotnetRunMessages": true,
|
||||||
"launchBrowser": true,
|
"launchBrowser": true,
|
||||||
"launchUrl": "swagger",
|
"launchUrl": "swagger",
|
||||||
"applicationUrl": "https://localhost:5010;http://localhost:6010",
|
"applicationUrl": "https://localhost:5010",
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,9 +26,10 @@
|
|||||||
"Port": 5672
|
"Port": 5672
|
||||||
},
|
},
|
||||||
"Jwt": {
|
"Jwt": {
|
||||||
"Authority": "http://myidentityserver.com",
|
"Authority": "http://host.docker.internal:6005",
|
||||||
"Audience": "booking-api",
|
"Audience": "booking-api",
|
||||||
"RequireHttpsMetadata": false
|
"RequireHttpsMetadata": false,
|
||||||
|
"MetadataAddress": "http://host.docker.internal:6005/.well-known/openid-configuration"
|
||||||
},
|
},
|
||||||
"Grpc": {
|
"Grpc": {
|
||||||
"FlightAddress": "flight:5003",
|
"FlightAddress": "flight:5003",
|
||||||
|
|||||||
@ -8,7 +8,8 @@ COPY ./src/Services/Flight/src/Flight.Api/Flight.Api.csproj ./Services/Flight/sr
|
|||||||
|
|
||||||
|
|
||||||
# Restore nuget packages
|
# Restore nuget packages
|
||||||
RUN dotnet restore ./Services/Flight/src/Flight.Api/Flight.Api.csproj
|
RUN --mount=type=cache,id=flight_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet restore ./Services/Flight/src/Flight.Api/Flight.Api.csproj
|
||||||
|
|
||||||
# Copy project files
|
# Copy project files
|
||||||
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
||||||
@ -19,13 +20,15 @@ COPY ./src/Services/Flight/src/Flight.Api/ ./Services/Flight/src/Flight.Api/
|
|||||||
# and no restore, as we did it already
|
# and no restore, as we did it already
|
||||||
|
|
||||||
RUN ls
|
RUN ls
|
||||||
RUN dotnet build -c Release --no-restore ./Services/Flight/src/Flight.Api/Flight.Api.csproj
|
RUN --mount=type=cache,id=flight_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet build -c Release --no-restore ./Services/Flight/src/Flight.Api/Flight.Api.csproj
|
||||||
|
|
||||||
WORKDIR /Services/Flight/src/Flight.Api
|
WORKDIR /Services/Flight/src/Flight.Api
|
||||||
|
|
||||||
# Publish project to output folder
|
# Publish project to output folder
|
||||||
# and no build, as we did it already
|
# and no build, as we did it already
|
||||||
RUN dotnet publish -c Release --no-build -o out
|
RUN --mount=type=cache,id=flight_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet publish -c Release --no-build -o out
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
||||||
|
|
||||||
@ -34,8 +37,11 @@ WORKDIR /
|
|||||||
COPY --from=builder /Services/Flight/src/Flight.Api/out .
|
COPY --from=builder /Services/Flight/src/Flight.Api/out .
|
||||||
|
|
||||||
|
|
||||||
ENV ASPNETCORE_URLS https://*:5003,http://*:5004
|
ENV ASPNETCORE_URLS https://*:443, http://*:80
|
||||||
ENV ASPNETCORE_ENVIRONMENT docker
|
ENV ASPNETCORE_ENVIRONMENT docker
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
ENTRYPOINT ["dotnet", "Flight.Api.dll"]
|
ENTRYPOINT ["dotnet", "Flight.Api.dll"]
|
||||||
|
|
||||||
|
|||||||
@ -23,9 +23,10 @@
|
|||||||
"ConnectionString": "Server=postgres;Port=5432;Database=flight;User Id=postgres;Password=postgres;Include Error Detail=true"
|
"ConnectionString": "Server=postgres;Port=5432;Database=flight;User Id=postgres;Password=postgres;Include Error Detail=true"
|
||||||
},
|
},
|
||||||
"Jwt": {
|
"Jwt": {
|
||||||
"Authority": "http://myidentityserver.com",
|
"Authority": "http://host.docker.internal:6005",
|
||||||
"Audience": "flight-api",
|
"Audience": "flight-api",
|
||||||
"RequireHttpsMetadata": false
|
"RequireHttpsMetadata": false,
|
||||||
|
"MetadataAddress": "http://host.docker.internal:6005/.well-known/openid-configuration"
|
||||||
},
|
},
|
||||||
"RabbitMqOptions": {
|
"RabbitMqOptions": {
|
||||||
"HostName": "rabbitmq",
|
"HostName": "rabbitmq",
|
||||||
|
|||||||
@ -29,10 +29,10 @@
|
|||||||
"DatabaseName": "flight-db"
|
"DatabaseName": "flight-db"
|
||||||
},
|
},
|
||||||
"Jwt": {
|
"Jwt": {
|
||||||
"Authority": "https://localhost:5005",
|
"Authority": "http://localhost:6005",
|
||||||
"Audience": "flight-api",
|
"Audience": "flight-api",
|
||||||
"RequireHttpsMetadata": true,
|
"RequireHttpsMetadata": false,
|
||||||
"MetadataAddress": "https://localhost:5005/.well-known/openid-configuration"
|
"MetadataAddress": "http://localhost:6005/.well-known/openid-configuration"
|
||||||
},
|
},
|
||||||
"RabbitMqOptions": {
|
"RabbitMqOptions": {
|
||||||
"HostName": "localhost",
|
"HostName": "localhost",
|
||||||
|
|||||||
@ -30,6 +30,8 @@ using Serilog;
|
|||||||
|
|
||||||
namespace Flight.Extensions.Infrastructure;
|
namespace Flight.Extensions.Infrastructure;
|
||||||
|
|
||||||
|
using Microsoft.AspNetCore.HttpOverrides;
|
||||||
|
|
||||||
public static class InfrastructureExtensions
|
public static class InfrastructureExtensions
|
||||||
{
|
{
|
||||||
public static WebApplicationBuilder AddInfrastructure(this WebApplicationBuilder builder)
|
public static WebApplicationBuilder AddInfrastructure(this WebApplicationBuilder builder)
|
||||||
|
|||||||
@ -7,7 +7,8 @@ COPY ./src/Services/Identity/src/Identity/Identity.csproj ./Services/Identity/sr
|
|||||||
COPY ./src/Services/Identity/src/Identity.Api/Identity.Api.csproj ./Services/Identity/src/Identity.Api/
|
COPY ./src/Services/Identity/src/Identity.Api/Identity.Api.csproj ./Services/Identity/src/Identity.Api/
|
||||||
|
|
||||||
# Restore nuget packages
|
# Restore nuget packages
|
||||||
RUN dotnet restore ./Services/Identity/src/Identity.Api/Identity.Api.csproj
|
RUN --mount=type=cache,id=identity_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet restore ./Services/Identity/src/Identity.Api/Identity.Api.csproj
|
||||||
|
|
||||||
# Copy project files
|
# Copy project files
|
||||||
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
||||||
@ -18,13 +19,15 @@ COPY ./src/Services/Identity/src/Identity.Api/ ./Services/Identity/src/Identity
|
|||||||
# and no restore, as we did it already
|
# and no restore, as we did it already
|
||||||
|
|
||||||
RUN ls
|
RUN ls
|
||||||
RUN dotnet build -c Release --no-restore ./Services/Identity/src/Identity.Api/Identity.Api.csproj
|
RUN --mount=type=cache,id=identity_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet build -c Release --no-restore ./Services/Identity/src/Identity.Api/Identity.Api.csproj
|
||||||
|
|
||||||
WORKDIR /Services/Identity/src/Identity.Api
|
WORKDIR /Services/Identity/src/Identity.Api
|
||||||
|
|
||||||
# Publish project to output folder
|
# Publish project to output folder
|
||||||
# and no build, as we did it already
|
# and no build, as we did it already
|
||||||
RUN dotnet publish -c Release --no-build -o out
|
RUN --mount=type=cache,id=identity_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet publish -c Release --no-build -o out
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
||||||
|
|
||||||
@ -32,8 +35,11 @@ FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
|||||||
WORKDIR /
|
WORKDIR /
|
||||||
COPY --from=builder /Services/Identity/src/Identity.Api/out .
|
COPY --from=builder /Services/Identity/src/Identity.Api/out .
|
||||||
|
|
||||||
ENV ASPNETCORE_URLS https://*:5005, http://*:6005
|
ENV ASPNETCORE_URLS https://*:443, http://*:80
|
||||||
ENV ASPNETCORE_ENVIRONMENT docker
|
ENV ASPNETCORE_ENVIRONMENT docker
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
ENTRYPOINT ["dotnet", "Identity.Api.dll"]
|
ENTRYPOINT ["dotnet", "Identity.Api.dll"]
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
using BuildingBlocks.Web;
|
using BuildingBlocks.Web;
|
||||||
using Identity;
|
using Identity.Configurations;
|
||||||
using Identity.Extensions.Infrastructure;
|
using Identity.Extensions.Infrastructure;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
"dotnetRunMessages": true,
|
"dotnetRunMessages": true,
|
||||||
"launchBrowser": true,
|
"launchBrowser": true,
|
||||||
"launchUrl": "swagger",
|
"launchUrl": "swagger",
|
||||||
"applicationUrl": "http://localhost:5009",
|
"applicationUrl": "http://localhost:6005",
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,9 @@
|
|||||||
"Enabled": true,
|
"Enabled": true,
|
||||||
"ConnectionString": "Server=postgres;Port=5432;Database=persist_message;User Id=postgres;Password=postgres;Include Error Detail=true"
|
"ConnectionString": "Server=postgres;Port=5432;Database=persist_message;User Id=postgres;Password=postgres;Include Error Detail=true"
|
||||||
},
|
},
|
||||||
|
"AuthOptions": {
|
||||||
|
"IssuerUri": "http://host.docker.internal:6005"
|
||||||
|
},
|
||||||
"RabbitMqOptions": {
|
"RabbitMqOptions": {
|
||||||
"HostName": "rabbitmq",
|
"HostName": "rabbitmq",
|
||||||
"ExchangeName": "identity",
|
"ExchangeName": "identity",
|
||||||
|
|||||||
@ -5,6 +5,9 @@
|
|||||||
"PostgresOptions": {
|
"PostgresOptions": {
|
||||||
"ConnectionString": "Server=localhost;Port=5432;Database=identity;User Id=postgres;Password=postgres;Include Error Detail=true"
|
"ConnectionString": "Server=localhost;Port=5432;Database=identity;User Id=postgres;Password=postgres;Include Error Detail=true"
|
||||||
},
|
},
|
||||||
|
"AuthOptions": {
|
||||||
|
"IssuerUri": "http://localhost:6005"
|
||||||
|
},
|
||||||
"RabbitMqOptions": {
|
"RabbitMqOptions": {
|
||||||
"HostName": "localhost",
|
"HostName": "localhost",
|
||||||
"ExchangeName": "identity",
|
"ExchangeName": "identity",
|
||||||
|
|||||||
@ -2,6 +2,9 @@
|
|||||||
"PostgresOptions": {
|
"PostgresOptions": {
|
||||||
"ConnectionString": "Server=localhost;Port=5432;Database=identity_test;User Id=postgres;Password=postgres;Include Error Detail=true"
|
"ConnectionString": "Server=localhost;Port=5432;Database=identity_test;User Id=postgres;Password=postgres;Include Error Detail=true"
|
||||||
},
|
},
|
||||||
|
"AuthOptions": {
|
||||||
|
"IssuerUri": "http://localhost:6005"
|
||||||
|
},
|
||||||
"RabbitMqOptions": {
|
"RabbitMqOptions": {
|
||||||
"HostName": "localhost",
|
"HostName": "localhost",
|
||||||
"ExchangeName": "identity",
|
"ExchangeName": "identity",
|
||||||
|
|||||||
@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"Version": 1,
|
|
||||||
"Id": "31079AE9DF4ED1F2D492E52BA5A644F5",
|
|
||||||
"Created": "2022-04-18T20:26:55.3256244Z",
|
|
||||||
"Algorithm": "RS256",
|
|
||||||
"IsX509Certificate": false,
|
|
||||||
"Data": "CfDJ8P3RLEnEd5JHjUIOTYyyJAzVTUgXKNFkjwfEWELe3r9iozJI4zF_jAjqORPS_C37DAQiHHtMYbgB7_j1Wwqck7qb_wv8CuDfNW8Hx0_UdWaO6vD0Sf_hIbBmN4RrwFwdMia8IUcNCUpwL9XJl95TLzD9FjpuyuWElQ8_5ZnF3SuErstPenQa4q9MYsj9XmPhNSk-BQan-cimxIAPYm1BgZNm5DMylT98sus9ScYTgOowV2n13MW0uA7kk9JOZIIjG07UuaSnuEQei03AU9zkejYD8yLwBi98ON5s0_jW2V3ebY-01VBQXhztu5Iev_SCynNyqQW-uqEzL9SSlzX8dEa79KKmOJEo2o325AVeDOBvco2XDCCra5RkRhUIPV3ZHvQr4EZJNqvi1zelWs3-FJ9vXE02-6XZkZKd6TzhPfiMDc1Z88-eVlx-uwhPjvJyfUSU9cAgbNDREDETxUcmIAMqqbXVAUCnaPkpbxy0VZ6YGSNsD9w77L6nIKiz-0KkVtxDZKCXh5BbDwAiWza8KWKclnVUnMLGhnjANEgKzzvmb1UJr1wZ0xRZ9KXyxr9oy0kP1Be-ysFSUd-YUTSgDvuQZV_DPjH2XP99tXqmfWJ8PJN9hswaRGhp5Jxo003l93u7Ivy-XR1BEhxVoYpvV9fCh8lo-N9ayHYpYlEsdArk1qvkuGRSlkBWNeEr_ZsvODbwM8Jp5q7pLK7cUy0bRHnYwkyHReS_fh6_tTdnfcQZPWb7fLN967XwebcVNOEENn5FX9oszCiy5BG9HQDIPffIx8bkKrZCMV77e5Qria9wNwkhIi3-7SOjRD-v5azkwiV0hTToAQTYsAT8DRTJklI90PF4JbsiMvObeoJtbwPy3E-K1_4DOxAjNwQFHf_zqWEbo9vmxGF-IerSwaJNSVfUUxnnYT8JWFYHYzWGyMvqtdymk1pmBaOJ64dgTVVcao7S0PwfV4DNUzxKQX-jNzqMihaXu4y8lyGIPJycJezm7nfGJiHhhhV4EWSQ1Y2ypBGv_s1iZ5pvTCeGkthY2Q4pe-GYKrFGTnBSLWwHqsVA2gwb1McjYjUGNgu_mnzyB45ZpKrqXQDDiozbQ4Ju7DJb5Vi_EoPmeHQDj5h5sFwAWtq0NGI_lRAog2K_QnZvSV3SFDVlaKDq9PjgIORc6wi5bzbAusWbjDd_sb211QsrNfW-0SWWgYwz9qRg14OiuntGESXSq9Cmx8WgPaK5H0FQGZUlzq3Bk8ov6GUhPeZSKP4gUyfRloSyj2DBZSe_0JOXO3e4Q6BFZLqhpStyAxoUZftEW_J3pKNjCrvKCOm-Taz0EVBEH9zqLTJwwXEoR86YYNTrtpARTOHo2qco_oMSX_2O4cpAfDZz0ZMHuqxunNnannVdFv5SdAHXngHLguLwAVuUTGlrg_xnUeW4Msi9-CKXpmmEQv6BCIW8Q4S5rn0vp394QgMCCo4473jOEeOX1G4_CUOhJZydGOCEbC5cMrM_54SKBu7hz8P9MCkDLj1ZsPwPDB1YyDwLFJlxb9oEZoRC4whvTJAfX2xNP4wv73ojxwrOII2ivNrnqNX6EM41bxmqMrF9tltSut-OR2XHO-DdJduoRnJjmKJl_WaZQypbZqfVepURuDNGChqyby--xsGMA-yQBBrVigXSKliuYG7dxWBp3TJFrvD4Aym1gAQOgjlObIHknv1cA83g_rHx6vq7JfwqMFYu6H6IZ6eeTUde1IixstE7EzU_4u5LzkQb8HKSMt3j9m3dlH4OigcPvcSJy8aJoN-UCFInfnE7IX0ul_S5HAgvgLM_BEVa3KTa0u8nxAY7xaIXrwWJZ23fhiZrOkNYJI1XAiN11sjtVgVS8viZCkTabUtpEtX2nPe767IbwVzPdOG-C6W_-8uNN_j1WjYeQfsSjmAjab2jZqx3BCDOjTbHkP_vKSzdABFA6bu2Fqt3io2UVTYq-a_Jf2b4JGmuiHomXjhsH3KZp_MDw1nZ8zf1mejyuH_NHFScVzb-vO_ieZ-RDQZn32VPaaDlylSMGa4kE9-54tHZUkFR4Jy1vpyKjXBa3uIEQBE5RFn7XCKbVA4Ea9BCou5ku7E6Zod0SfjMmmknB6jzLTVSBgMP2AkFb98m943O1XXsDQstMmTZdqmNJTOirLoL2Vu1AXqsdS7O-DrVcDImR7ekSGPhUSg2LQkObRPT26sSeiygKlNDi3PktIA1duuJ066NoIHCJupl2mugbFDrZ90SBaQ9n72Ya7fjKdrSdp3izCxqlldeZPANZMMZ5KwjX9WZnl-lPNsn3iCNaEhBCqSWne7YN6xxRS6gKoMobVav-HsZ841qr5iaYzDFD2kA4R35A-Dm5zJyfSCV4NPdUEGzIIbjg1-kYv8PFR_kImuXIwGXT86BxpgEY6PRaD8-ZFZMzerGvEhS8R39NpQ-hiZ_P_ZY3wamWHlwttaTvX3fqpflHlhKV_9AI9HZ",
|
|
||||||
"DataProtected": true
|
|
||||||
}
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"Version": 1,
|
|
||||||
"Id": "74ABBD16A9EF6567607D1F748BB91597",
|
|
||||||
"Created": "2022-03-29T20:44:37.9948898Z",
|
|
||||||
"Algorithm": "RS256",
|
|
||||||
"IsX509Certificate": false,
|
|
||||||
"Data": "CfDJ8P3RLEnEd5JHjUIOTYyyJAzeYir0LDVxp1O__t0rzDUFxCBt5XtK6FK6fLgopH3OcjrMTbORu_DJp3lf4bf015LKnOk0yjzfzZ5xRX3qwHwz1jvdXKqzt-Pf85kiRlrNv6qiTH7UXP5xGTY3Tn7TdkVJfPmvfHtQyw1FhIPJnx5KQ469H2DRnoxmpwpspHrGlrPA5cJn3Uc7xFnTNEe0laORnilL1rxTTsKFFhJCWCcoxMozgh_SQqEhy9B7Vb4rQHn-ULb8qO4IaKDvbuCJNuGD2nJxy5lBNkdFKJD724IlGIB1nV3w5LR3YVYcxxIc1bLrbK3byHbVHsl8i9uacpN4-JP2Z16Sku9jhsQ21d1tNssE7gmxe8u6qE4RQjL2URSci8_XdSsRa0DBYNaVOSLv60M4dtwg6pJeWB6GfvJ8_JFnTDFDs51rXc77RL4tANblHLzuQl2C3gMMbJPoviWSs8R0hg2mCp0-pQWwSzNvNmtWwsMNXPgHtfIrJTGDKTQEiYIkvkf34gsBaweyea3Q5H2prmt10qVHr47LpkjGqxpHvi9eboJQkG2y-1MBptNpdiYZ4gbViplu8Ru5M4YsCmb0zZF2Q1DZsKVM-T_PFZCgyy1LjLwSHczvcflQh__6YmSwhehI7Nka86m3lK80nwAr9u0qoUyqjavte-XjNiRbUd7MHaEy2bT_jj40oqdh6sGURIkmmJljxPQfu7Scqgcs6chQSY4JXEnfLBa0AK40mefPwpk76QOJBQRBJ3PvnSLc5RMhgs2c2Vc54j4VuQU0tjiHoDPcgerj5oRIQCDiA2_ylleNmxBEomENO0FRortejvV7FNb2qzTfey1r6bTwJvN81EFfMhGUCsj7X0KkBywJMESsQlU3pbs_JChQfX-6rMjofkMYEtnupYnCutUFVO-xZoXrJvw5AOxtJn4JoPHBYeEhC29zjHvtzfSnnnDzCQxiJkWO6pyuAFVIyJUK50Bx_yuaiDicscEjShfd-fQEN_l3eFsUzTGa5rX9gfsPckH8jkpkFkXJlUKFt-nt_9FDnqi5WM6Hf_d891jocGkgiSLM2YURz5Fkyq8S6o-hrBnVf4Pz4dtfsQBw-NnOAl4FPnaknsVdDLZ-qe9gaZdN3wbHQMwFq2eTmm36M6ky47A2xO8MksDSlh4ROcrqJZOBaCWE6fFowcot1sJXFAqNw5iuEKNmtFtJU6oPWxTGY5C0BdjExksQZzqmg2JkjbqZE0zRBFBs0oSJHZsQTnBZmTELIUzMjZVO5eXfVp0tBoOWoW0KgTdHEhlHhNXkvZDoNIdQKu7RVEmhF3AmWWUYzpAW1Y_oEPAsF1Jf-msAlCiMnchbg3yxDG7n6VKAPssQQs3RGPjPLCjOKtHtK4X_3ivVvHbX0xxZhUk44DBv8HDd72rQLEenrXKuIEr_L6VzZ93BpisnxMWxJV6pRcYe1LTtu4nQGZ20hiJs98zHRHomwWJFqxIlPZrSrqTrxUAN4jCl4WSLgf-c2zRfO3AHqvlVCt518s92IUx75372znyoM7-xB5h95T2yxg9x9dlY-_-wICdlyPiQ8arAQ824Cl_2QkSU_ba30gAvWlXGYRVFpg3PSmP0mIhq-ffA8HLB0ARZfYl1_vMspd9kbPyJVCRSaFObC_L-AwvKV8f7Oqqd6bwbUYvdA_6cw1gFUeiqH2wuggOjFI3WDp-5ttVdmZnDVDK--LR3y5b2cYHAf3EG2N-7qMBwZqpOb3ivnRFX_SUlB9V9BlvSe_sLU5zJphBoSWm2-_4j9rWQjCaswlBLbScRA3r1KC5BFxFgbFFv7p4hWk_xjdAx5q4RHM6wqFfGj1WkrjRtdnMC7z1ZM7Bdsno-5yt6PQBP-y4QIvpSpefXl8E4_gBJ6dzToQwLS_Tpk7CjzlIV3oUZ5XfMV0s14Flky6ErsvBdXMzNbHwvxwCAoxbYDrjZ9U-w9gibGOOVBYmKjhkeGLGs8ejqc8TxrzEEFL1li1ZfXxeNAcu4zyNwTHsWaaLVciWaw-UuPqA4uDFxMNmxI6kfXa49L0voFkQaeMo48J2lVjH00QV8f-nXnVaZFztiTU7fYYlpK-RxRSL1q0qQOFMEKOdltqqKxKbM7grNSoBQz-ZHqQq7ZR4v7NRl-yyTGmcGvOzTaDfLP9snbDfiU2QnqH-S2pgtobbYJ_UZvGfg8AZurvNBbl-KuBOrN3yarxe5STJY9mHY_8y2c8C_foQifRSNr_oDANvMbfsukrV8HJimtMk9WF15Qaz51BCiZ9NIxiCsgaJHZ48Oi8EUput8rtTInjNjAvb33N4whgDKQVLWXE59k13dlZX7xA1V-pFbY9TvFLFsWwWS6Jrj8okejPb5Fsb9zraapVTTCIEr3VYR9BB_V7tgkldqpNatO6_qqczD4owmZ-dL6IDyE4f2u_2FCgUV1FP30UMdkRmKHAbhZ9kGCK-ZI5XS33qh",
|
|
||||||
"DataProtected": true
|
|
||||||
}
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"Version": 1,
|
|
||||||
"Id": "9258A527F8A78F2F47D30E7F145FD59F",
|
|
||||||
"Created": "2022-02-15T09:58:48.5269984Z",
|
|
||||||
"Algorithm": "RS256",
|
|
||||||
"IsX509Certificate": false,
|
|
||||||
"Data": "CfDJ8HYLA_44KBlEtnKYw5Y6NgZcbR_xFrM2Jsvq7lBG7H9pe38jngLl4EUknvBtq5hxuuwWtTX5qnwK_90h5-sbgF98Tio47qnnv-wA50LawMrDvcEbWMjdBXeFD4hE4QCSCi43i3oRms09g1c6gHipjTOTGmZ0Tj6wGAJZHkdJz6uBuvnWkuypYjaZG1vap_baLugSmjP71PUzn7jgFR1dQDEOcZE91-dERlCPeU7RXdDOTrUJMjD4yvfXO3VdB53YiZErMIgCv7rx1qZhzBPmyg2Z3XK86kY877HD4I-DOerJKeqPYl9vfVmFQgRRLFdOhi5ZpmUwJaRKG0zjTDDfOuvFG16WNPCrr3-_AIU3ANaCvL4Lg44t2lamlRaKlEvT5aKxphO2cVZjSWsTPJMHgHXWYM01e09i3WDbL07g35vJWsnRrrhxhiMoVJJG68-WrZVtev47fT69of6Z5_lhFcc7donENuxlN3K2V8P90Nkxu4eYbHwp267IvadONcgCMO_wHdKwZZswFUs5HYVyYVOZKtmE2T4I7JJWrOeL2iM_VWSFwkwV0hCLQyKazQZwVIe8s2s3glYY8ektc36reTZoSg4ykhanq26OLX4VKw9UzvfyV_J-EozNh2WXlhtgGqoeomjVrNp6U612ywre3QLN-lvSDjd2MoQsZ-CG4S6kyTuXNT0KxsdXs-hXUlXRNbri8fshIjSkYjCVWUKvNFvn7IMJ5AxYakWekKdPL7r75Q7HNJMMYxt8jh7fv7N8QKWuOnWWy_kA8N6qXIsHsetBeBfGBHbq92mQkfcdArVKuysqTzSy2wm9t4mLNFbzO1QPAQ9VS6aYS3DcWh2NF_pc2xlRCRt9Mb1P9IYEUQk7P2iakeYUhKH1MMNh0GuMwkCIaed4XCTEVZfSB70YtPUCawgNFP9hn5ENUVNRWBf6717gT1ioybimXghodrCOHiYxxQDDpss3e8MIl_x-BaqW8C2zYFd6xE0pVFXV5-X7O6XP2sc3ClOd1EyVnLRT1-87Uof-1KYA2kzTyPfWrnC72maTbOJzeje2f6oT98BfsgkvakOAchAkEl_FJz_Dv_KdJ9ZwC9Xv0Wan4dvSS5aR35iifXptuZ0du0pc2t6_CoHGLZxOG6SvXm7AN24XYFcWnRPvGUS2M5NG4pHJn73vOPaon1SAIBUrLiDXSWeW_27G_5UG5P1lPXYecFMjVG2vdKPEDxygu3yj1e5CDyeVmvcnI3-Hl_4skomLB14as8U950O7fr-CuS_BAli6m0mplgAPCOrfeyq_o-xWdM9vNoaEHRGA5e2ZfEIknCinSY7CuoGCnMmR0O8eT2P3aQ34TKHRRspvCVs8GAyzCZaVT8_ZeOHCl4FU8Ac5NIe3OMRPuZs1uJaBfBIVlPP9MfhKgEA_S5t8vfa3RJhiU0jMy5h9OToqnBOQsiIkY0mjSMsn3VvsqeNutK5DKoTpATX822sSHCSYXAewk7F-agvqKnM_cPVhib9Z1r0UXLS2neLZwF5ob7uI1nYU8TNb6cawcWPGBz9FoMjtxXsMsAci5luEVg1ZfGTU9kShAa3sdfRYC5E4L37_Fy_4EZyNEKEMPxx8I20PCPfqEPR_JB0geDv0Up9ZfD2ZwgwovYDVbGv3qIbgbkEH2Z7zf2e4gH9sZClvei1XigDL9gjfJ0b9IdA3QpWw6b3uleR-WbNWag5S2Phz6kPB2irBgoN7oG_gUegXQTzCif0mgeQSwbea1vXOngXBLG1PiyRk_iPKPhZMmg1UoMeqXQlXqDL4VFRnMOsYdOKr-BWsgdCM9zE3CCyVueBX0zTuZU0kM0P8hUH9RsZYdqPOXS0d4Fy0YUmQZTHWwSMbCUG1XmJ4QN3y1FKUKBvRRHZmZboYHz5EKFMHhAbk9ZHZRCpLm4hIlH81IiSgRlYm3CacJqjlAiLp0Tc0zF6oFlZFipA-nM5znhgDJMSV-CSW1FSDvYFvHolOxR4U0hlw_XG6NeytrkiAR7-wvU3ufkslsWowtcyswCNHcT7eg-tpptSXyT0RJaQhWwAc9L9lYWZnCBwknUCak23u1V7jM8ZldOM5jiQrjRvEBv-sqMto4Qo6129AatIKri04PYD9VlHzLP76KY4F-UHUcu-9g3cJp9mnbnzhmD1LvNPQmH2giY0pc9hFWW6_Ablz7GmW2cngb9xwHAgi-WBSrZYoW6l2dAdkm72ECwWmMguwT6OZdaZZzjBYixHKM-mnb4uzVT6CU-pp4-G9dYtX5EPqhKcmsmwbV6qiziV61rGYypP37spT8H_SWTFmqD-sMPg6jJj1PncSFd2mlZFBkuFJDvF6Aorf35t9-rePPRc18k14Poa8J8j_mYVJo3lEIrtRDLF3d8EvZ9UEjmgBj25gSiYhOJBPriRop1qmlVVSUjoTBIJaXlTXefbcZTqc8vguzQ5Oy8rjzTaxeP1-OgsCDO0xw7ibWEeN",
|
|
||||||
"DataProtected": true
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"Version":1,"Id":"A7DD53B5F56AA3937910E9A73600964A","Created":"2022-10-13T20:19:56.3638146Z","Algorithm":"RS256","IsX509Certificate":false,"Data":"CfDJ8GjYME9sg_tHn5C8_j2EtO1vvYKDE1hzq5Kp8GHesS2tNpBMrM_9i8n6u2MDK4eczb8P8fRryy3dD8HS7GCrRB4dY-qvHq7eRrDdJz8C-HHEZTRt-H843A7O0aOLgXJoR6P0Yk3EbBBJcmFsEGHy9G9PfmVU6LyCpRcuv9be6YLfBI-ahU3XvkSLTLEV0YIs9HRY24Ue71_vWp7G_IawDuUMjQZgTT-ATwvu97iE1ubfIwh-HQWF34Rfk7xvuyWgWftqWxfzCDqP1VIE088c8zCvGTIDb6P7TCC-PFOtOlb6xNy7TlyHNSnvDLCu8WJvc9r5S0P_6Byl9zHVwxmXtGira_tu-7ZkqaVHHrLVwoV0-f4bTRnXn7nvXvvLdOHCTZcl9zh9pyNYVDlLy6arQcfLY09B6pqdaPxw8lt6hrs9D5vwVzknt9PANW7wod9-hN8RBX0oAf0qOyF2Kn6Bt4wWDTO9-JbNebHmGfq0rkaFHepugz4XS40-NfCYwo9Wn3H0uw5Wq0r4SWxhdU9Vbrgb0SCl4am46O_smKVsM5VVSA_3IqvYSWLq1OpqIasJthonDq8ZAxX9w6i3nXjea-T3kD-eoZxUnB5hSnMN62HoyvBSTIlYjUtw_bRHNmnb7oqneL2zCNGZBPIdOf9QByYOCifJvK27AFeSm6xMEZPMK1MRMr4K64_9Jj61wAZTtYp6tIMig8plHwnxpqjrMBYGvjH_L5YHcnDl784IujzwjYfuTqrD8BzlaTTcbCYl4Jxk5DKP6Jlhg7srv6MwO-Y4jvBfOq9PSLR8nN0KdNMHN-OV46b_aRIyefpAfkJIuAWKc2Qoh3jd6yPObVXwP9qYJ21DnaMuBigxt7c6m71z_3NKiSV1d-O9XNPwbwQ8mlkKwc236KnlSRmLli1HMQIJKJhiC5XI1gBXP6XbSi3bvVXgeEj9cVpBnXFkvkRxfXxZ3jZZG97VNuKuH0LSaeHatZIR8IcdeRYRieyAKFyQlXAhWqqTibaZKBx6SCs-9vSi7zojEkng4Aodgjpf79zH_FRQRWg9xufftZpJlAclE1T5119uCMcwDkOngL3xVbTY7S9Ak9lB7lDyuDKm2kIilbuhtrsLx3XJqLEsH0ub8PUuaBmnOZRz8fGikUoy2ZU9F0fIm3_Advymdohu8jjMQ6x4Cp3YWNusn-FblEC8HcdOgdQOw63ZRwJuij1xdLQlTgx3qsRf8xl2zOMnF3nUWodULk2ynTpkYjCp4lbQGGboZ1lxbrKeMeybvr2hmjANtYQz2ahRdMGoVDB2HSruEOrYHx7lFIk5EVaOBhqLigBkLFw5RtDMMo3x8SdLBkNzP2C3oYTy_iGaTwpSRktabgDTmCySLPXGXWiRy0AVTGwozvLhPl1xz-14vlidGvfxcW-n2ahfpN9kqM3MyB5GT85wq-aYxyYi6m3eF2Gek6xSmtVRhCwWnXlUysfawsCQDK_Bio9nEJiYF9WVHjKXvB7ZKq8dQy0IBWrXFz2p04JdBl6s9rzXUvTWtfJUePRh0gQqV24iFCRkg86_WpLXpgPMg91AXwurgrhgJjfUKhxeyl0Riej_hVndAF16H-lz0-N4mDhyy2liRTX56dlC4cWTv2DU4iPtLOarfCna_m7QTdzyeidkcNzTjdtCkTAciZaA_8HZifDbjyIJeCTHBHoIZqfO1VaRiXytx5gEdtt-DQSanj4EA5cvlRLF1xRD7VGI5FTYR-mua1xdw0xpPj28GQ9Tjh8fi2a1WbwRzmjKnOAPwJyG5YelMRHgYnpLqqmESNuLjgfvlAlFmXqPjaJ8FSiPKZEFpwoy2lH_cSx4lYprq2Z9evdY6yaP6lI0lDi2WF3ddCzEeWj2MMg1Rz7fqYzjxum4RINbugJNeck584dTJnESySSZCqQ67m_vd6QE4u6ujB6yzu7TpXc_sOG2AS3r39XtuiPn570r8Z6LWUfdv8WnyRHJ_P5Sf4YAZ8LrGRuz6UHyKesL3bQnHvj0tv9PlOUv9hxemQcfkDi0nrN_3E3HGXbFHQLJ-9RHuVgE0SvL2JIA0aOfpIl69eN8CkBRHVvFnmfKh6OzFDMToBXkhczBWAmCW9nwGVARd_7yjWpu9y8oeAL3yuPXUvJQTDvjLxFHvGntNISf8KM5g9SW_QIxzUFClw2qlqhRLo29TFiSsVQM-hxSu05Js_fGocSek4nkLAotNpCG1AAoWP8TeI1NpLZVRwwzngaBijL_AbIoeFyTY31XdUztEQsi0dvBpu0iLd68GBTKOdeFeZ2vo9AFa4OwTFZ7SATUYRMgixzLlcuWqn60JKdWSQgSPCTLBHHZfgkmfxXLLwT65GEHlwuI8pb20xBeorUhbs3cc9LqXGnuwno5K5v0LaeFailxaBMl4fcgoBDj8TpdKqFKrcsIPol6suVKZRW_drrkc18p5Nt_MR5Xnd6D9SrkXYOUlc8c7gRrnAxE","DataProtected":true}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"Version":1,"Id":"B33EF2DCF9AAEDDA74F42B239C122EC3","Created":"2022-12-21T12:54:30.8778452Z","Algorithm":"RS256","IsX509Certificate":false,"Data":"CfDJ8BYS1jC_Z-ZPsg3E7DQNOTPJbX5na2yKwYTMzyoQuiVxDh2roPqW5hjhMHjO5KyMi0Hg_JgQ6TmQ8hgf-4kff-Z3PtIlT2ydkdtv0ZIljsrCbma4CFulhcRah8UczQetDDhe8CITbqTPnmX0Erz_MuBTt8f2zlj1Ne_OsuqyKYUCu_yo8SEy5vYT-_Q1626X77NtbvyWg8NheVKZadglyxml9X6AFe6zh3kRBX7odVWW0d45N9aQodGDq-Bv2h4DiLC_h5mtmwWcUTvwCQ5G4ix_12BSl_NzyDpkqZHi4wpYyLUCUfWALp-yni2tb-RT4GAmKqKx5pksPvjgSrhCkysXeJVKlyKnrto5jkV-R-E2EDrZHZCPFxZbOmdhRCkJczqVPzEyRikvv66deH_3RnENmpJR6qxG5s6EZ3o8kPBkQ5Lf_WL48_eD3Bkc3gSDarefr-eRohlCIfpAj--TTmZOBAeqDLFinsnEIVynxYQQidGdzKRe8jBhPI797mEjxfOGQ2v713Mp6UfbiPS6pJfDujQlAqvySSMAzSekdWaSmcYOFBKJ5K4V9PjyQwf96m4KPJlI0uB694_ULHJ34zGCYgxAU2bl1y5Sv0_MABxe3nDGGsgCXy1nvmGvdCQqJUmeJR8-FnYl_7-jS2GlFU7NdgNfCoiM4t2ZERZ2N2sMguOYxkSjj2ELblXNPD55fP3mw_20CSrcS-ms7FdsDbC-BNw_lx-BGy7oYrUVJZ4ifoTVM-xxBU3eWuzSCuGyuED60Ms05w5CL3CyQRrrP6XK-55X7F5IH19CrVUjV99a3X0ybib5X3Fw5m4vSRmz0jWS-tKK2dVZHtpSL6ixrbT88sVytaDyH3VWbVjUIkjnCtUnDGIp_BPRAnN6lYINX77yPb6JmBDd_TNhH2veM8IpCrHeuNNGz126_CcxHTw0kOc_Q-QxyqMOGgq6DmNBnLRav4UIsa8WaSsePi-k50lCYn5dBUSlBUnA4Vm3jIYX0-DUH2jy2rwNPw7xG_FqrnUP7DQLXO4ksQCVAHH80CQFYwrSJl6bSHNwrSis4YYnkhnp0CDJoz8CMlaNL67xGfxdqb2ztuKh64hxtB-pKja486lPMJWtgCW8ZtUxYK8lWqb7RA0bWCw2tYfLUgdCaK4ydCDXAmwLUoZA_BEEAaelx8r94qSc0nc3Dw__iVM2jc-yxgU_1ltMqjyYl7Rg_sDlAMg0Rg0jkY-yf8iY4HWWEUCT7UZi08Az-XokyVUHaXcsq4zV5K3qLzoLW1ZapRAVBSw3PG7W5m_ZonmXvu9tKdC-shgTFSWz0B9dRM_n6hIb19rgpEvjS55Wfu5CywS9YGqobIOU8LuZaQqBtJdq5-S4ZZSBi37qkoys-y6-N5Ga_dFMUzMeML3t1PkTmFH-AFYwW0YzahMtWOFVeTr3HwOzOm5hPQTSrLSp4sA7pPhoYoLuApoN0UvjqLUY7qjR8HsbOTker0AJcdf8fYA58SuFyX3MqdMyFsDBgsygyEsjvcU8x0kKF-6MAcLbWs9NAKV9TH98nHAZem-31xkRVicRAbEykweFMIaR8I8c-_stEKneWmPx0_oZnGSM4oaP9WG0mX7PEdl-krOuoBWplDOxoEFOng09QjWo8PMMaj5qMjkuCmOIGTx4zYcpvgo2hCqRZ1JmAmmD4jjETQvS33eOjMvETC4tdwvXyM-uZ-qNPlPKOqHFXDfTpv4UhnIWl4ieV9m1KzziejkinfVysFWsQD7uIvUcNvPBvfkTGpmvSfHIFzDllYk2RptbigJyiA8mbX30fSOBcoCMaK9SWJMRCV0ffg-zgURhd9ctOYjmUStEIPiGSEl-7EKBlrOIfDgCyxH3o8xphDRd6aqBHCElf07z7RUIU_oGduH8pIo8GwjLeXKrHCF6g9CosEaCO09K9E32pL5e9ojA_1o3WJC25OkqWaWEJ9iz7JSSpYxnkSDCvo6_8vXIXWjPqPWZwC5MkAWYKfgynv-iPwfZmGl1NCDZDw4OMtsrh1kpATdRlgaefafnLLysPfpMMRirIje2f6cqweTU7AXyh8WBfaoNHVybZmRmjK4jJuSFw1yCSDcHIxBcXlThZg41dkntNicmEbSYVrajXpnurxTNMiuQfNhDUsetXKReWLCwdIkXa7seQ5f8Om5-RR0DpLlPGrUiDLr9q24dZ8zOVU3Fnv_qSn-sOHn0ALV17LSaNfYjU-T-svlN5ksM2gnnNqqc8qadsiyP7WqoZZ9YdKwcQIFPWx0vB-G0Ej-4aQRtR7gxyNKP4zhDnEh9QkYfQRRcGA9_Pzwq7iDkPm66GFQJPpYioGQfZJrnsrjV5BiDON1ZHIpeUfXHs9qcC-U0g-jG2dTg51Znc_AS6rX-RxW3_dQXeeUFwndStmJUuZPHk4micnpjHZLO2Xcj14PMG81OgqtIxhpXLZq8MbhKjHLeKr2DvjwLEVph2yR1UD7D","DataProtected":true}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"Version":1,"Id":"DCE5098F8B9D1301447CC90AB1307BB1","Created":"2023-02-21T14:52:03.5423989Z","Algorithm":"RS256","IsX509Certificate":false,"Data":"CfDJ8Pno3caweVxDrMdMtoqjLU-zkq97hfMbqd_a71uRzwCkfuVDrGVJuTHsecFn6xm9QskMBE5i1dNJ4l-EBrrflUZ0_ZiqESp5NGi4Uw7SaU-kijgI8566Ll_A6uy2dYsA6plpZ_1L2KFJuaCwGdMs68NXgZj8-8shIngrOBjTkvNeH0j1BUmvj7iHu1dheRQHBamrlh4L-pdPNAx9lR-yeOWoyJCUSNCviC9P-hLsd9nJzfn77gU4Kc4i8pfDyPf-pN3_IFSMU1T-PiVUwBobxXxEDj8oS5hSUDRVi49n4u5oluz68chky3NhxWjYNyfmjOS8CD0-GsL7VPxApDP8z33pOW8hSwSF-PWsQczitlvFqSf45kGpYBCs8JmwU1yqAgeKKho6tICk1CK4Zad1-0WMok6HMUHixqaB9MfEBWUqdeLjQcwLZo-iJ5LGLzAhL5o7JgtufV_c1RgYPXH1umXdIKD2IK_vWtDUv3Y7GHOiSyYBIJCaBxhVrk9ruztu-BWno4E_U-Jej_t18P7QBwAT9FQsO2lryGOEtG6f-zf_JwwHeJE9CtFxofXzkIKtc5fqliCYTp8JAfgzZ_8MKxLfs-ZD_iZPiLX8clAbFokJ86fqsL2s3EmTGTVxcc2nP7xmYm_5D9R_7QqBZPM5az0vIayvAbkjGFII6P6WyfB1j2nl1BwamMb8EdCuM7FOvD_bnstXETFpYC8oYhJYQNruRhWjY_tv7F1cVPCWD-pX5IARvRgsJEbE_WdgvicWcwLpz0MWu89GrI4qP7WSoLGorlFmss_Ubf5feu7KYbpPrdGVLJbaaipYFTQgxaZ0GB9CjjMe8LPmU_9P-5wbkZ69LDyzIVIEpCuTF1fZr7SWr-C8NIVEvIyCTQoJmaFbvfdejVTxm2eOyolJLTGedHOkuaDg90hBFDtyQ78DVgzihZX3uZ0BwkCkkkiBB1boY3B0IWKDR3OWsG2lDqIn61FcLaAHgAqQF7JdMSmjEIGOVKUAEcnDf7NyVbWjZtPhpMLhmwu3OmPPrIqu-8_2e2RjlRuvXClhNpLyo-H4HipVztSUkP7ujukuZsRwJFj4p-VV2O7lyB7ogocAHF-AEMvw7ywmMPysYY_-_EU3U2vtRYIisKOV_VrsaMujNhMbrZUCq-ZIIsA-8GdLA2dqargOfd4f7jodpAtrBm6a5O8vWyAehdKfGj9i29tgfAQd2VnRqtN0eArruLGuIopP9FcEK_lNmHPjrpDaHZzA7AnfYBJsnOVKRehZSAmZGQUdlXV0rDzmLxgMZSN4P68eTLFCil8RwJFHzdExHk7VWd6xMo1m-EG_BioFcpazqEJYPjwCt9Rx_9_NMuvu1IiTiP_U2GO65dvZh2-iDPMGyTfeFJBuiIHW9fGg2BH5dw6Q9swMNXBmO174dGhQSA9BWTXnDFW3PsKEhFj5avEbV2Tkp4QQAiTkLaRbDSVfFH7NiKImy4Py4l1W52ftVBt5yPUDJi2GHHk-zxhgqBmY2k-duV9eeiNvXklDHySo0dOZShzUTqYmg0tUgdrthytN8TMp6BSAZtO0YFZgELPkeFKoE9Rz_BwazdwK1OphzQ8dvECEVO5nJRil8_6iwvu04aQ_s_fFMmwa2xrft3DY1uGXswukhOcw_he_nnwAfY7ExA__BbLiEc0NNgG8ZDd6hKdiR_RZeY-4FHMl0J59TwSgc2KNnWEqsUHLXN4Y6VC1TA4eVf9zcku4CPNQCMZPFAE7hgYdttLzrRyEPnsfGTWBYt_wVN7EszCbidkGLIvHr3ZNd0Oz49W7KNRZzVydOMila9AytE1tRegU3e3HSoFFqF9Gqr1mKAQ_B4N5UBxYB39ta5cPwVXGHTsvrak3XggzuHOIqsGyLxEYZka2-ykx0gKMCIWqf_w63Mu_IYkSOQT4HQ3yheBchqeUZPqAAZASp00SvWIt_Cirj1O1XKxQyNVWiv-Im_i6xy4V5dl1RQSwmxQYe_7oiPS6dqewVR1WJZsmnptq521SsJLZQffHK-CDtxT69fE218ZIaNOzkDERp6c422B8wqZK5rf1zn6lO1I4MwTjkETMY_jFtFZw3_Yo9zYMLmC2kIzkupXjhrzT1vCWIaU6UYegi72Ikbx9fvmDHV6g9Kiy_KPBR8ECe89Skqz8DklPIhm3tqy5eaQ5iqcyW8Gxyq1K2DN1BMoCAqIya5d-RddpLvRv-W_cTf-DfJOxmGpKlYCcp4d6pel32a2ykGlNQSWJ9_8hk5jcypkosDWN8M8OROkBxLo9qtP0FWLnITuw1aXC-c03ypfeGJeE2HN9vwT3Rxk4i_rlGUXgIDgSk9XfyQghfKXBTpuOvrbf1VoEcsS_E6qaNJmpGpz9Ok7Ks4UDb3DtnadbABdyhZQLGg49QAywXqj4qFdgLBnDmVTHLm8eyIDDeVC0SiD061DhZ7qtzI9U7wYbWpp1oRNTuPZDlypBaZpE","DataProtected":true}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"AdditionalData":{},"Alg":"RS256","Crv":null,"D":"af7TFMQS67FxuYbUvAAiXHqqGF7HYby1Vy-8l7FjICcmb3829IWPDTm4gjv_pCqV97w46rFaZ7qBGfQII00rfDlCYdTgh94IJARpBdEax2U3o_7uvgVjpngH88li9hQI6IkcS4xGmljZ_5R6RF_fW4NMLu3n2hQ_3UyR-TVt1xigDLVnItYyC2eOuif2TgJAA_T-rgcSRFZCyjkUSkRF4Y_l9FMqFqiRZHLZAlX0DyQStptYTice2ezkLJPixCOI4k27_Bg3HcHfkfPPPNyhfJiHPMUl1NfgZ91_RV9kC2nZmdhz0tdq-tf878iFjp-Rdk7MwjAKCwggGtFPpFNiyQ","DP":"G4Ximfbf8LZG6YUSEPALnPiHFZldxEaP27KJGS-K3QDBnOc-QBswU2G43h6salJsj5dWEkBYrfOX73sE-JYgNwpCHjPXkVJPTKaGs95DPS8j0bzGwzHoJcFVFInygxFKziahcZzrGnvjPgOUBpgmrfJ-S78779WSJU3v7GlFvHk","DQ":"w6FR407kPQmLCrGN2iGKPdNnyOP7qK9w-332QVJQNPpT4Y8nW0cgYIFn1ObZ6-q5xv_jl12FFqbKrQUsXVde_oOYe4AHq3fYHm594T-GkaNQcmNTDwc2qNj3ZhEcYTGLLf6Udvu35MqEd4Nk-IYlItgt_hlLBFmm8XDZHwxQLm0","E":"AQAB","K":null,"KeyId":"D2252FAB0F2BA4E42E1EBDBC1E281E8F","KeyOps":[],"Kid":"D2252FAB0F2BA4E42E1EBDBC1E281E8F","Kty":"RSA","N":"kt6GLyuy4a5jJrlV_4dFW-YZU0J5kT1A6raNIg4nFiY_ct9w3uOgGxEPCSDSF5a_2ldGR95XGol1ygLY81_TtjMFe7yCGUH6cnHXVO75vCuvNXp_3q5xW8L7WueVOC_iXUHf4AEjLz-DFQDHUG4s2vtrXQfGzPt_GsA54UaFBS7KjMOQ6dr-ndBhGxNie33PRfq33SlyoAr72DFL1DNqdnMEXCXLjfX8AQuvhPsYE0sZch6Qbqy2Q6zpEV7N4r36STajjuIMgKK5WfB4UBNnRwCKE1AgyRKVjBVpcyUWFMCB8OQaCZ1UgnGM8K_uD74PMCbHwnwDnKiii_iUd52POQ","Oth":null,"P":"wCLaXWinvykcdpCDfZp3P0SAOLtD48Ioa2U-Yi9y-vjfUpfrQgelpYXzj6PKlIdw8rCjcDIJVYXHJX5SV1hDjKpoSeXC1yXduNLTPDxnR4JfWxgeilNsvS1X9z9Y0KfrCtZuZBYpbq8c9PODDw6mnYlxEC9Ugg8bPPm1BSi-Yls","Q":"w6_X4c6oE78rhUv34x1cb92DL4Ub6KF1BSlOptBMLKWsggQtNZxApC1Thi4eEOHVkr378vgx564rkuAtJbBivNPd5LKXuiqalSUY6332rIIDOe3YK41VoBThtudetvbJubjRdEpcGvxO_5XVBOV1y0WbuzpzOb66tDh2iDsDYPs","QI":"YuJogiqlbtI8CRpDcBDt3PoHYl8YTE3opFp_vAM5r1_g34KckzXFVY6-bIXQRhvyGGHhF5T9obdEogd1hzOFwLbKLXVVhb4CowkMF5-GRachee2L46xpGZtGe0gp_MgEzXFbBHIjv6hZtTMfZasnqUALdBh3vbUF1L0D1M0exnI","Use":null,"X":null,"X5c":[],"X5t":null,"X5tS256":null,"X5u":null,"Y":null,"KeySize":2048,"HasPrivateKey":true,"CryptoProviderFactory":{"CryptoProviderCache":{},"CustomCryptoProvider":null,"CacheSignatureProviders":true,"SignatureProviderObjectPoolCacheSize":16}}
|
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
namespace Identity.Configurations;
|
||||||
|
|
||||||
|
public class AuthOptions
|
||||||
|
{
|
||||||
|
public string IssuerUri { get; set; }
|
||||||
|
}
|
||||||
@ -1,9 +1,9 @@
|
|||||||
|
namespace Identity.Configurations;
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Duende.IdentityServer;
|
using Duende.IdentityServer;
|
||||||
using Duende.IdentityServer.Models;
|
using Duende.IdentityServer.Models;
|
||||||
using Identity.Identity.Constants;
|
using Identity.Constants;
|
||||||
|
|
||||||
namespace Identity;
|
|
||||||
|
|
||||||
public static class Config
|
public static class Config
|
||||||
{
|
{
|
||||||
@ -1,8 +1,8 @@
|
|||||||
|
namespace Identity.Configurations;
|
||||||
|
|
||||||
using BuildingBlocks.Core;
|
using BuildingBlocks.Core;
|
||||||
using BuildingBlocks.Core.Event;
|
using BuildingBlocks.Core.Event;
|
||||||
|
|
||||||
namespace Identity;
|
|
||||||
|
|
||||||
public sealed class EventMapper : IEventMapper
|
public sealed class EventMapper : IEventMapper
|
||||||
{
|
{
|
||||||
public IIntegrationEvent MapToIntegrationEvent(IDomainEvent @event)
|
public IIntegrationEvent MapToIntegrationEvent(IDomainEvent @event)
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
namespace Identity.Configurations;
|
||||||
|
|
||||||
|
public class IdentityRoot
|
||||||
|
{
|
||||||
|
}
|
||||||
@ -1,12 +1,12 @@
|
|||||||
|
namespace Identity.Configurations;
|
||||||
|
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Duende.IdentityServer.Models;
|
using Duende.IdentityServer.Models;
|
||||||
using Duende.IdentityServer.Validation;
|
using Duende.IdentityServer.Validation;
|
||||||
using Identity.Identity.Models;
|
using Identity.Models;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
|
||||||
namespace Identity;
|
|
||||||
|
|
||||||
public class UserValidator : IResourceOwnerPasswordValidator
|
public class UserValidator : IResourceOwnerPasswordValidator
|
||||||
{
|
{
|
||||||
private readonly SignInManager<User> _signInManager;
|
private readonly SignInManager<User> _signInManager;
|
||||||
@ -1,19 +1,22 @@
|
|||||||
using Identity.Data;
|
using Identity.Data;
|
||||||
using Identity.Identity.Models;
|
using Identity.Identity.Models;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using BuildingBlocks.Web;
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
|
||||||
namespace Identity.Extensions.Infrastructure;
|
namespace Identity.Extensions.Infrastructure;
|
||||||
|
|
||||||
using System.Net;
|
using Configurations;
|
||||||
using Microsoft.IdentityModel.Logging;
|
|
||||||
|
|
||||||
public static class IdentityServerExtensions
|
public static class IdentityServerExtensions
|
||||||
{
|
{
|
||||||
public static IServiceCollection AddCustomIdentityServer(this IServiceCollection services, IWebHostEnvironment env)
|
public static WebApplicationBuilder AddCustomIdentityServer(this WebApplicationBuilder builder)
|
||||||
{
|
{
|
||||||
services.AddIdentity<User, Role>(config =>
|
builder.Services.AddValidateOptions<AuthOptions>();
|
||||||
|
var authOptions = builder.Services.GetOptions<AuthOptions>(nameof(AuthOptions));
|
||||||
|
|
||||||
|
builder.Services.AddIdentity<User, Role>(config =>
|
||||||
{
|
{
|
||||||
config.Password.RequiredLength = 6;
|
config.Password.RequiredLength = 6;
|
||||||
config.Password.RequireDigit = false;
|
config.Password.RequireDigit = false;
|
||||||
@ -23,12 +26,13 @@ public static class IdentityServerExtensions
|
|||||||
.AddEntityFrameworkStores<IdentityContext>()
|
.AddEntityFrameworkStores<IdentityContext>()
|
||||||
.AddDefaultTokenProviders();
|
.AddDefaultTokenProviders();
|
||||||
|
|
||||||
var identityServerBuilder = services.AddIdentityServer(options =>
|
var identityServerBuilder = builder.Services.AddIdentityServer(options =>
|
||||||
{
|
{
|
||||||
options.Events.RaiseErrorEvents = true;
|
options.Events.RaiseErrorEvents = true;
|
||||||
options.Events.RaiseInformationEvents = true;
|
options.Events.RaiseInformationEvents = true;
|
||||||
options.Events.RaiseFailureEvents = true;
|
options.Events.RaiseFailureEvents = true;
|
||||||
options.Events.RaiseSuccessEvents = true;
|
options.Events.RaiseSuccessEvents = true;
|
||||||
|
options.IssuerUri = authOptions.IssuerUri;
|
||||||
})
|
})
|
||||||
.AddInMemoryIdentityResources(Config.IdentityResources)
|
.AddInMemoryIdentityResources(Config.IdentityResources)
|
||||||
.AddInMemoryApiResources(Config.ApiResources)
|
.AddInMemoryApiResources(Config.ApiResources)
|
||||||
@ -38,8 +42,8 @@ public static class IdentityServerExtensions
|
|||||||
.AddResourceOwnerValidator<UserValidator>();
|
.AddResourceOwnerValidator<UserValidator>();
|
||||||
|
|
||||||
//ref: https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html
|
//ref: https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html
|
||||||
// identityServerBuilder.AddDeveloperSigningCredential();
|
identityServerBuilder.AddDeveloperSigningCredential();
|
||||||
|
|
||||||
return services;
|
return builder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,6 +26,8 @@ using Serilog;
|
|||||||
|
|
||||||
namespace Identity.Extensions.Infrastructure;
|
namespace Identity.Extensions.Infrastructure;
|
||||||
|
|
||||||
|
using Configurations;
|
||||||
|
|
||||||
public static class InfrastructureExtensions
|
public static class InfrastructureExtensions
|
||||||
{
|
{
|
||||||
public static WebApplicationBuilder AddInfrastructure(this WebApplicationBuilder builder)
|
public static WebApplicationBuilder AddInfrastructure(this WebApplicationBuilder builder)
|
||||||
@ -74,15 +76,7 @@ public static class InfrastructureExtensions
|
|||||||
|
|
||||||
SnowFlakIdGenerator.Configure(4);
|
SnowFlakIdGenerator.Configure(4);
|
||||||
|
|
||||||
builder.Services.AddCustomIdentityServer(env);
|
builder.AddCustomIdentityServer();
|
||||||
|
|
||||||
//ref: https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-7.0&viewFallbackFrom=aspnetcore-2.2
|
|
||||||
//ref: https://medium.com/@christopherlenard/identity-server-and-nginx-ingress-controller-in-kubernetes-7146c22a2466
|
|
||||||
// builder.Services.Configure<ForwardedHeadersOptions>(options =>
|
|
||||||
// {
|
|
||||||
// options.ForwardedHeaders =
|
|
||||||
// ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
|
|
||||||
// });
|
|
||||||
|
|
||||||
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
|
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
|
||||||
|
|
||||||
@ -95,10 +89,6 @@ public static class InfrastructureExtensions
|
|||||||
var env = app.Environment;
|
var env = app.Environment;
|
||||||
var appOptions = app.GetOptions<AppOptions>(nameof(AppOptions));
|
var appOptions = app.GetOptions<AppOptions>(nameof(AppOptions));
|
||||||
|
|
||||||
//ref: https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-7.0&viewFallbackFrom=aspnetcore-2.2
|
|
||||||
//ref: https://medium.com/@christopherlenard/identity-server-and-nginx-ingress-controller-in-kubernetes-7146c22a2466
|
|
||||||
// app.UseForwardedHeaders();
|
|
||||||
|
|
||||||
app.UseProblemDetails();
|
app.UseProblemDetails();
|
||||||
app.UseSerilogRequestLogging(options =>
|
app.UseSerilogRequestLogging(options =>
|
||||||
{
|
{
|
||||||
@ -113,12 +103,6 @@ public static class InfrastructureExtensions
|
|||||||
app.MapMetrics();
|
app.MapMetrics();
|
||||||
|
|
||||||
app.MapGet("/", x => x.Response.WriteAsync(appOptions.Name));
|
app.MapGet("/", x => x.Response.WriteAsync(appOptions.Name));
|
||||||
//
|
|
||||||
// app.Use((httpContext, next) =>
|
|
||||||
// {
|
|
||||||
// httpContext.Request.Scheme = "https";
|
|
||||||
// return next();
|
|
||||||
// });
|
|
||||||
|
|
||||||
if (env.IsDevelopment())
|
if (env.IsDevelopment())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -5,6 +5,8 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
|
|
||||||
namespace Identity.Extensions.Infrastructure;
|
namespace Identity.Extensions.Infrastructure;
|
||||||
|
|
||||||
|
using Configurations;
|
||||||
|
|
||||||
public static class MediatRExtensions
|
public static class MediatRExtensions
|
||||||
{
|
{
|
||||||
public static IServiceCollection AddCustomMediatR(this IServiceCollection services)
|
public static IServiceCollection AddCustomMediatR(this IServiceCollection services)
|
||||||
|
|||||||
@ -1,5 +0,0 @@
|
|||||||
namespace Identity;
|
|
||||||
|
|
||||||
public class IdentityRoot
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@ -8,7 +8,8 @@ COPY ./src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj ./Services/
|
|||||||
|
|
||||||
|
|
||||||
# Restore nuget packages
|
# Restore nuget packages
|
||||||
RUN dotnet restore ./Services/Passenger/src/Passenger.Api/Passenger.Api.csproj
|
RUN --mount=type=cache,id=passenger_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet restore ./Services/Passenger/src/Passenger.Api/Passenger.Api.csproj
|
||||||
|
|
||||||
# Copy project files
|
# Copy project files
|
||||||
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
COPY ./src/BuildingBlocks ./BuildingBlocks/
|
||||||
@ -19,13 +20,15 @@ COPY ./src/Services/Passenger/src/Passenger.Api/ ./Services/Passenger/src/Passe
|
|||||||
# and no restore, as we did it already
|
# and no restore, as we did it already
|
||||||
|
|
||||||
RUN ls
|
RUN ls
|
||||||
RUN dotnet build -c Release --no-restore ./Services/Passenger/src/Passenger.Api/Passenger.Api.csproj
|
RUN --mount=type=cache,id=passenger_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet build -c Release --no-restore ./Services/Passenger/src/Passenger.Api/Passenger.Api.csproj
|
||||||
|
|
||||||
WORKDIR /Services/Passenger/src/Passenger.Api
|
WORKDIR /Services/Passenger/src/Passenger.Api
|
||||||
|
|
||||||
# Publish project to output folder
|
# Publish project to output folder
|
||||||
# and no build, as we did it already
|
# and no build, as we did it already
|
||||||
RUN dotnet publish -c Release --no-build -o out
|
RUN --mount=type=cache,id=passenger_nuget,target=/root/.nuget/packages \
|
||||||
|
dotnet publish -c Release --no-build -o out
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
||||||
|
|
||||||
@ -33,8 +36,11 @@ FROM mcr.microsoft.com/dotnet/aspnet:7.0
|
|||||||
WORKDIR /
|
WORKDIR /
|
||||||
COPY --from=builder /Services/Passenger/src/Passenger.Api/out .
|
COPY --from=builder /Services/Passenger/src/Passenger.Api/out .
|
||||||
|
|
||||||
ENV ASPNETCORE_URLS https://*:5012, http://*:6012
|
ENV ASPNETCORE_URLS https://*:443, http://*:80
|
||||||
ENV ASPNETCORE_ENVIRONMENT docker
|
ENV ASPNETCORE_ENVIRONMENT docker
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
ENTRYPOINT ["dotnet", "Passenger.Api.dll"]
|
ENTRYPOINT ["dotnet", "Passenger.Api.dll"]
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
"dotnetRunMessages": true,
|
"dotnetRunMessages": true,
|
||||||
"launchBrowser": true,
|
"launchBrowser": true,
|
||||||
"launchUrl": "swagger",
|
"launchUrl": "swagger",
|
||||||
"applicationUrl": "https://localhost:5012;http://localhost:6012",
|
"applicationUrl": "https://localhost:5012",
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,9 +9,10 @@
|
|||||||
"ConnectionString": "Server=postgres;Port=5432;Database=persist_message;User Id=postgres;Password=postgres;Include Error Detail=true"
|
"ConnectionString": "Server=postgres;Port=5432;Database=persist_message;User Id=postgres;Password=postgres;Include Error Detail=true"
|
||||||
},
|
},
|
||||||
"Jwt": {
|
"Jwt": {
|
||||||
"Authority": "http://myidentityserver.com",
|
"Authority": "http://host.docker.internal:6005",
|
||||||
"Audience": "passenger-api",
|
"Audience": "passenger-api",
|
||||||
"RequireHttpsMetadata": false
|
"RequireHttpsMetadata": false,
|
||||||
|
"MetadataAddress": "http://host.docker.internal:6005/.well-known/openid-configuration"
|
||||||
},
|
},
|
||||||
"MongoOptions": {
|
"MongoOptions": {
|
||||||
"ConnectionString": "mongodb://mongo:27017",
|
"ConnectionString": "mongodb://mongo:27017",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user