Merge pull request #4 from sicsbd/enhancements/netcore2.1/asp.netcore2.1/GDPR
Enhancements/netcore2.1/asp.netcore2.1/gdpr
This commit is contained in:
commit
9f9b715bd9
BIN
Certificates/DotNet Foundation CA.pfx
Normal file
BIN
Certificates/DotNet Foundation CA.pfx
Normal file
Binary file not shown.
BIN
Certificates/eShopOnContainers.pfx
Normal file
BIN
Certificates/eShopOnContainers.pfx
Normal file
Binary file not shown.
@ -1,317 +0,0 @@
|
|||||||
version: '3.4'
|
|
||||||
|
|
||||||
# The default docker-compose.override file can use the "localhost" as the external name for testing web apps within the same dev machine.
|
|
||||||
# The ESHOP_EXTERNAL_DNS_NAME_OR_IP environment variable is taken, by default, from the ".env" file defined like:
|
|
||||||
# ESHOP_EXTERNAL_DNS_NAME_OR_IP=localhost
|
|
||||||
# but values present in the environment vars at runtime will always override those defined inside the .env file
|
|
||||||
# An external IP or DNS name has to be used (instead localhost and the 10.0.75.1 IP) when testing the Web apps and the Xamarin apps from remote machines/devices using the same WiFi, for instance.
|
|
||||||
|
|
||||||
services:
|
|
||||||
sql.data:
|
|
||||||
environment:
|
|
||||||
- SA_PASSWORD=Pass@word
|
|
||||||
- ACCEPT_EULA=Y
|
|
||||||
ports:
|
|
||||||
- "5433:1433" # Important: In a production environment your should remove the external port
|
|
||||||
|
|
||||||
nosql.data:
|
|
||||||
ports:
|
|
||||||
- "27017:27017" # Important: In a production environment your should remove the external port
|
|
||||||
|
|
||||||
basket.data:
|
|
||||||
ports:
|
|
||||||
- "6379:6379" # Important: In a production environment your should remove the external port
|
|
||||||
|
|
||||||
rabbitmq:
|
|
||||||
ports:
|
|
||||||
- "15672:15672" # Important: In a production environment your should remove the external port
|
|
||||||
- "5672:5672" # Important: In a production environment your should remove the external port
|
|
||||||
|
|
||||||
identity.api:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- SpaClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5104
|
|
||||||
- XamarinCallback=http://${ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP}:5105/xamarincallback #localhost do not work for UWP login, so we have to use "external" IP always
|
|
||||||
- ConnectionString=${ESHOP_AZURE_IDENTITY_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Service.IdentityDb;User Id=sa;Password=Pass@word}
|
|
||||||
- MvcClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5100 #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
- LocationApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5109
|
|
||||||
- MarketingApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5110
|
|
||||||
- BasketApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5103
|
|
||||||
- OrderingApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5102
|
|
||||||
- MobileShoppingAggClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5120
|
|
||||||
- WebShoppingAggClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5121
|
|
||||||
- UseCustomizationData=True
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
ports:
|
|
||||||
- "5105:80"
|
|
||||||
|
|
||||||
basket.api:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- ConnectionString=${ESHOP_AZURE_REDIS_BASKET_DB:-basket.data}
|
|
||||||
- identityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
- IdentityUrlExternal=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5105
|
|
||||||
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
|
|
||||||
- EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME}
|
|
||||||
- EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD}
|
|
||||||
- AzureServiceBusEnabled=False
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
- UseLoadTest=${USE_LOADTEST:-False}
|
|
||||||
|
|
||||||
ports:
|
|
||||||
- "5103:80" # Important: In a production environment your should remove the external port (5103) kept here for microservice debugging purposes.
|
|
||||||
# The API Gateway redirects and access through the internal port (80).
|
|
||||||
|
|
||||||
catalog.api:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- ConnectionString=${ESHOP_AZURE_CATALOG_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.CatalogDb;User Id=sa;Password=Pass@word}
|
|
||||||
- PicBaseUrl=${ESHOP_AZURE_STORAGE_CATALOG_URL:-http://localhost:5202/api/v1/c/catalog/items/[0]/pic/} #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
|
|
||||||
- EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME}
|
|
||||||
- EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD}
|
|
||||||
- AzureStorageAccountName=${ESHOP_AZURE_STORAGE_CATALOG_NAME}
|
|
||||||
- AzureStorageAccountKey=${ESHOP_AZURE_STORAGE_CATALOG_KEY}
|
|
||||||
- UseCustomizationData=True
|
|
||||||
- AzureServiceBusEnabled=False
|
|
||||||
- AzureStorageEnabled=False
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
ports:
|
|
||||||
- "5101:80" # Important: In a production environment your should remove the external port (5101) kept here for microservice debugging purposes.
|
|
||||||
# The API Gateway redirects and access through the internal port (80).
|
|
||||||
|
|
||||||
ordering.api:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word}
|
|
||||||
- identityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
- IdentityUrlExternal=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5105
|
|
||||||
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
|
|
||||||
- EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME}
|
|
||||||
- EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD}
|
|
||||||
- UseCustomizationData=True
|
|
||||||
- AzureServiceBusEnabled=False
|
|
||||||
- CheckUpdateTime=30000
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
- UseLoadTest=${USE_LOADTEST:-False}
|
|
||||||
ports:
|
|
||||||
- "5102:80" # Important: In a production environment your should remove the external port (5102) kept here for microservice debugging purposes.
|
|
||||||
# The API Gateway redirects and access through the internal port (80).
|
|
||||||
|
|
||||||
|
|
||||||
ordering.backgroundtasks:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word}
|
|
||||||
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
|
|
||||||
- EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME}
|
|
||||||
- EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD}
|
|
||||||
- UseCustomizationData=True
|
|
||||||
- AzureServiceBusEnabled=False
|
|
||||||
- CheckUpdateTime=30000
|
|
||||||
- GracePeriodTime=1
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
- UseLoadTest=${USE_LOADTEST:-False}
|
|
||||||
ports:
|
|
||||||
- "5111:80"
|
|
||||||
|
|
||||||
marketing.api:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- ConnectionString=${ESHOP_AZURE_MARKETING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.MarketingDb;User Id=sa;Password=Pass@word}
|
|
||||||
- MongoConnectionString=${ESHOP_AZURE_COSMOSDB:-mongodb://nosql.data}
|
|
||||||
- MongoDatabase=MarketingDb
|
|
||||||
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
|
|
||||||
- EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME}
|
|
||||||
- EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD}
|
|
||||||
- identityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
- IdentityUrlExternal=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5105
|
|
||||||
- CampaignDetailFunctionUri=${ESHOP_AZUREFUNC_CAMPAIGN_DETAILS_URI}
|
|
||||||
- PicBaseUrl=${ESHOP_AZURE_STORAGE_MARKETING_URL:-http://localhost:5110/api/v1/campaigns/[0]/pic/}
|
|
||||||
- AzureStorageAccountName=${ESHOP_AZURE_STORAGE_MARKETING_NAME}
|
|
||||||
- AzureStorageAccountKey=${ESHOP_AZURE_STORAGE_MARKETING_KEY}
|
|
||||||
- AzureServiceBusEnabled=False
|
|
||||||
- AzureStorageEnabled=False
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
- UseLoadTest=${USE_LOADTEST:-False}
|
|
||||||
ports:
|
|
||||||
- "5110:80" # Important: In a production environment your should remove the external port (5110) kept here for microservice debugging purposes.
|
|
||||||
# The API Gateway redirects and access through the internal port (80).
|
|
||||||
|
|
||||||
payment.api:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
|
|
||||||
- EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME}
|
|
||||||
- EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD}
|
|
||||||
- AzureServiceBusEnabled=False
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
ports:
|
|
||||||
- "5108:80" # Important: In a production environment your should remove the external port (5108) kept here for microservice debugging purposes.
|
|
||||||
# The API Gateway redirects and access through the internal port (80).
|
|
||||||
|
|
||||||
locations.api:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- ConnectionString=${ESHOP_AZURE_COSMOSDB:-mongodb://nosql.data}
|
|
||||||
- Database=LocationsDb
|
|
||||||
- identityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
- IdentityUrlExternal=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5105
|
|
||||||
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
|
|
||||||
- EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME}
|
|
||||||
- EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD}
|
|
||||||
- AzureServiceBusEnabled=False
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
- UseLoadTest=${USE_LOADTEST:-False}
|
|
||||||
ports:
|
|
||||||
- "5109:80" # Important: In a production environment your should remove the external port (5109) kept here for microservice debugging purposes.
|
|
||||||
# The API Gateway redirects and access through the internal port (80).
|
|
||||||
|
|
||||||
mobileshoppingapigw:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- IdentityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
ports:
|
|
||||||
- "5200:80"
|
|
||||||
volumes:
|
|
||||||
- ./src/ApiGateways/Mobile.Bff.Shopping/apigw:${ESHOP_OCELOT_VOLUME_SPEC:-/app/configuration}
|
|
||||||
|
|
||||||
mobilemarketingapigw:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- IdentityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
ports:
|
|
||||||
- "5201:80"
|
|
||||||
volumes:
|
|
||||||
- ./src/ApiGateways/Mobile.Bff.Marketing/apigw:${ESHOP_OCELOT_VOLUME_SPEC:-/app/configuration}
|
|
||||||
|
|
||||||
webshoppingapigw:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- IdentityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
ports:
|
|
||||||
- "5202:80"
|
|
||||||
volumes:
|
|
||||||
- ./src/ApiGateways/Web.Bff.Shopping/apigw:${ESHOP_OCELOT_VOLUME_SPEC:-/app/configuration}
|
|
||||||
|
|
||||||
webmarketingapigw:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- IdentityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
ports:
|
|
||||||
- "5203:80"
|
|
||||||
volumes:
|
|
||||||
- ./src/ApiGateways/Web.Bff.Marketing/apigw:${ESHOP_OCELOT_VOLUME_SPEC:-/app/configuration}
|
|
||||||
|
|
||||||
mobileshoppingagg:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- urls__basket=http://basket.api
|
|
||||||
- urls__catalog=http://catalog.api
|
|
||||||
- urls__orders=http://ordering.api
|
|
||||||
- urls__identity=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
ports:
|
|
||||||
- "5120:80" # Important: In a production environment your should remove the external port (5120) kept here for microservice debugging purposes.
|
|
||||||
# The API Gateway redirects and access through the internal port (80).
|
|
||||||
|
|
||||||
webshoppingagg:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- urls__basket=http://basket.api
|
|
||||||
- urls__catalog=http://catalog.api
|
|
||||||
- urls__orders=http://ordering.api
|
|
||||||
- urls__identity=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
ports:
|
|
||||||
- "5121:80" # Important: In a production environment your should remove the external port (5121) kept here for microservice debugging purposes.
|
|
||||||
# The API Gateway redirects and access through the internal port (80).
|
|
||||||
|
|
||||||
ordering.signalrhub:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
|
|
||||||
- EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME}
|
|
||||||
- EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD}
|
|
||||||
- AzureServiceBusEnabled=False
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
- identityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110.
|
|
||||||
ports:
|
|
||||||
- "5112:80"
|
|
||||||
|
|
||||||
webstatus:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- CatalogUrl=http://catalog.api/hc
|
|
||||||
- OrderingUrl=http://ordering.api/hc
|
|
||||||
- OrderingBackgroundTasksUrl=http://ordering.backgroundtasks/hc
|
|
||||||
- BasketUrl=http://basket.api/hc
|
|
||||||
- IdentityUrl=http://identity.api/hc
|
|
||||||
- LocationsUrl=http://locations.api/hc
|
|
||||||
- MarketingUrl=http://marketing.api/hc
|
|
||||||
- PaymentUrl=http://payment.api/hc
|
|
||||||
- mvc=http://webmvc/hc
|
|
||||||
- spa=http://webspa/hc
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
ports:
|
|
||||||
- "5107:80"
|
|
||||||
|
|
||||||
webspa:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- IdentityUrl=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5105 #Local: You need to open your local dev-machine firewall at range 5100-5105. at range 5100-5105.
|
|
||||||
- PurchaseUrl=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5202
|
|
||||||
- MarketingUrl=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5203
|
|
||||||
- CatalogUrlHC=http://catalog.api/hc
|
|
||||||
- OrderingUrlHC=http://ordering.api/hc
|
|
||||||
- IdentityUrlHC=http://identity.api/hc #Local: Use ${ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP}, if using external IP or DNS name from browser.
|
|
||||||
- BasketUrlHC=http://basket.api/hc
|
|
||||||
- MarketingUrlHC=http://marketing.api/hc
|
|
||||||
- PaymentUrlHC=http://payment.api/hc
|
|
||||||
- UseCustomizationData=True
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
- SignalrHubUrl=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5202
|
|
||||||
ports:
|
|
||||||
- "5104:80"
|
|
||||||
|
|
||||||
webmvc:
|
|
||||||
environment:
|
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://0.0.0.0:80
|
|
||||||
- PurchaseUrl=http://webshoppingapigw
|
|
||||||
- IdentityUrl=http://10.0.75.1:5105 # Local Mac: Use http://docker.for.mac.localhost:5105 || Local Windows: Use 10.0.75.1 in a "Docker for Windows" environment, if using "localhost" from browser. || #Remote access: Use ${ESHOP_EXTERNAL_DNS_NAME_OR_IP} if using external IP or DNS name from browser.
|
|
||||||
- MarketingUrl=http://webmarketingapigw
|
|
||||||
- CatalogUrlHC=http://catalog.api/hc
|
|
||||||
- OrderingUrlHC=http://ordering.api/hc
|
|
||||||
- IdentityUrlHC=http://identity.api/hc #Local: Use ${ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP}, if using external IP or DNS name from browser.
|
|
||||||
- BasketUrlHC=http://basket.api/hc
|
|
||||||
- MarketingUrlHC=http://marketing.api/hc
|
|
||||||
- PaymentUrlHC=http://payment.api/hc
|
|
||||||
- SignalrHubUrl=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5202
|
|
||||||
- UseCustomizationData=True
|
|
||||||
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
|
|
||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
|
||||||
- UseLoadTest=${USE_LOADTEST:-False}
|
|
||||||
ports:
|
|
||||||
- "5100:80"
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"urls": {
|
|
||||||
"basket": "http://localhost:55105",
|
|
||||||
"catalog": "http://localhost:55101",
|
|
||||||
"orders": "http://localhost:55102",
|
|
||||||
"identity": "http://localhost:55105"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"urls": {
|
|
||||||
"basket": "http://localhost:55105",
|
|
||||||
"catalog": "http://localhost:55101",
|
|
||||||
"orders": "http://localhost:55102",
|
|
||||||
"identity": "http://localhost:55105"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"Logging": {
|
|
||||||
"IncludeScopes": false,
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Debug",
|
|
||||||
"System": "Information",
|
|
||||||
"Microsoft": "Information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"IdentityUrl": "http://localhost:5105",
|
|
||||||
"ConnectionString": "127.0.0.1",
|
|
||||||
"AzureServiceBusEnabled": false,
|
|
||||||
"SubscriptionClientName": "Basket",
|
|
||||||
"ApplicationInsights": {
|
|
||||||
"InstrumentationKey": ""
|
|
||||||
},
|
|
||||||
"EventBusRetryCount": 5,
|
|
||||||
"UseVault": false,
|
|
||||||
"Vault": {
|
|
||||||
"Name": "eshop",
|
|
||||||
"ClientId": "your-clien-id",
|
|
||||||
"ClientSecret": "your-client-secret"
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
Binary file not shown.
@ -1,30 +0,0 @@
|
|||||||
ARG NODE_IMAGE=node:8.11
|
|
||||||
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
|
|
||||||
WORKDIR /app
|
|
||||||
EXPOSE 80
|
|
||||||
|
|
||||||
FROM microsoft/dotnet:2.1-sdk as dotnet-build
|
|
||||||
WORKDIR /src
|
|
||||||
|
|
||||||
FROM ${NODE_IMAGE} as node-build
|
|
||||||
WORKDIR /web
|
|
||||||
COPY src/Services/Identity/Identity.API .
|
|
||||||
RUN npm install -g bower@1.8.4
|
|
||||||
RUN bower install --allow-root
|
|
||||||
|
|
||||||
FROM dotnet-build as build
|
|
||||||
WORKDIR /src/src/Services/Identity/Identity.API/wwwroot
|
|
||||||
COPY --from=node-build /web/wwwroot .
|
|
||||||
WORKDIR /src
|
|
||||||
COPY . .
|
|
||||||
WORKDIR /src/src/Services/Identity/Identity.API
|
|
||||||
RUN dotnet restore -nowarn:msb3202,nu1503
|
|
||||||
RUN dotnet build --no-restore -c Release -o /app
|
|
||||||
|
|
||||||
FROM build AS publish
|
|
||||||
RUN dotnet publish --no-restore -c Release -o /app
|
|
||||||
|
|
||||||
FROM base AS final
|
|
||||||
WORKDIR /app
|
|
||||||
COPY --from=publish /app .
|
|
||||||
ENTRYPOINT ["dotnet", "Identity.API.dll"]
|
|
@ -1,184 +0,0 @@
|
|||||||
using Autofac;
|
|
||||||
using Autofac.Extensions.DependencyInjection;
|
|
||||||
using IdentityServer4.Services;
|
|
||||||
using Microsoft.ApplicationInsights.Extensibility;
|
|
||||||
using Microsoft.ApplicationInsights.ServiceFabric;
|
|
||||||
using Microsoft.AspNetCore.Builder;
|
|
||||||
using Microsoft.AspNetCore.DataProtection;
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
|
||||||
using Microsoft.AspNetCore.Identity;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.eShopOnContainers.Services.Identity.API.Certificates;
|
|
||||||
using Microsoft.eShopOnContainers.Services.Identity.API.Data;
|
|
||||||
using Microsoft.eShopOnContainers.Services.Identity.API.Models;
|
|
||||||
using Microsoft.eShopOnContainers.Services.Identity.API.Services;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using Microsoft.Extensions.HealthChecks;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using StackExchange.Redis;
|
|
||||||
using System;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace Microsoft.eShopOnContainers.Services.Identity.API
|
|
||||||
{
|
|
||||||
public class Startup
|
|
||||||
{
|
|
||||||
public Startup(IConfiguration configuration)
|
|
||||||
{
|
|
||||||
Configuration = configuration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IConfiguration Configuration { get; }
|
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
|
||||||
public IServiceProvider ConfigureServices(IServiceCollection services)
|
|
||||||
{
|
|
||||||
RegisterAppInsights(services);
|
|
||||||
|
|
||||||
// Add framework services.
|
|
||||||
services.AddDbContext<ApplicationDbContext>(options =>
|
|
||||||
options.UseSqlServer(Configuration["ConnectionString"],
|
|
||||||
sqlServerOptionsAction: sqlOptions =>
|
|
||||||
{
|
|
||||||
sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name);
|
|
||||||
//Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency
|
|
||||||
sqlOptions.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null);
|
|
||||||
}));
|
|
||||||
|
|
||||||
services.AddIdentity<ApplicationUser, IdentityRole>()
|
|
||||||
.AddEntityFrameworkStores<ApplicationDbContext>()
|
|
||||||
.AddDefaultTokenProviders();
|
|
||||||
|
|
||||||
services.Configure<AppSettings>(Configuration);
|
|
||||||
|
|
||||||
services.AddMvc();
|
|
||||||
|
|
||||||
if (Configuration.GetValue<string>("IsClusterEnv") == bool.TrueString)
|
|
||||||
{
|
|
||||||
services.AddDataProtection(opts =>
|
|
||||||
{
|
|
||||||
opts.ApplicationDiscriminator = "eshop.identity";
|
|
||||||
})
|
|
||||||
.PersistKeysToRedis(ConnectionMultiplexer.Connect(Configuration["DPConnectionString"]), "DataProtection-Keys");
|
|
||||||
}
|
|
||||||
|
|
||||||
services.AddHealthChecks(checks =>
|
|
||||||
{
|
|
||||||
var minutes = 1;
|
|
||||||
if (int.TryParse(Configuration["HealthCheck:Timeout"], out var minutesParsed))
|
|
||||||
{
|
|
||||||
minutes = minutesParsed;
|
|
||||||
}
|
|
||||||
checks.AddSqlCheck("Identity_Db", Configuration["ConnectionString"], TimeSpan.FromMinutes(minutes));
|
|
||||||
});
|
|
||||||
|
|
||||||
services.AddTransient<ILoginService<ApplicationUser>, EFLoginService>();
|
|
||||||
services.AddTransient<IRedirectService, RedirectService>();
|
|
||||||
|
|
||||||
var connectionString = Configuration["ConnectionString"];
|
|
||||||
var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;
|
|
||||||
|
|
||||||
// Adds IdentityServer
|
|
||||||
services.AddIdentityServer(x => x.IssuerUri = "null")
|
|
||||||
.AddSigningCredential(Certificate.Get())
|
|
||||||
.AddAspNetIdentity<ApplicationUser>()
|
|
||||||
.AddConfigurationStore(options =>
|
|
||||||
{
|
|
||||||
options.ConfigureDbContext = builder => builder.UseSqlServer(connectionString,
|
|
||||||
sqlServerOptionsAction: sqlOptions =>
|
|
||||||
{
|
|
||||||
sqlOptions.MigrationsAssembly(migrationsAssembly);
|
|
||||||
//Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency
|
|
||||||
sqlOptions.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.AddOperationalStore(options =>
|
|
||||||
{
|
|
||||||
options.ConfigureDbContext = builder => builder.UseSqlServer(connectionString,
|
|
||||||
sqlServerOptionsAction: sqlOptions =>
|
|
||||||
{
|
|
||||||
sqlOptions.MigrationsAssembly(migrationsAssembly);
|
|
||||||
//Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency
|
|
||||||
sqlOptions.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.Services.AddTransient<IProfileService, ProfileService>();
|
|
||||||
|
|
||||||
var container = new ContainerBuilder();
|
|
||||||
container.Populate(services);
|
|
||||||
|
|
||||||
return new AutofacServiceProvider(container.Build());
|
|
||||||
}
|
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
|
||||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
|
|
||||||
{
|
|
||||||
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
|
|
||||||
loggerFactory.AddDebug();
|
|
||||||
loggerFactory.AddAzureWebAppDiagnostics();
|
|
||||||
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace);
|
|
||||||
|
|
||||||
if (env.IsDevelopment())
|
|
||||||
{
|
|
||||||
app.UseDeveloperExceptionPage();
|
|
||||||
app.UseDatabaseErrorPage();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
app.UseExceptionHandler("/Home/Error");
|
|
||||||
}
|
|
||||||
|
|
||||||
var pathBase = Configuration["PATH_BASE"];
|
|
||||||
if (!string.IsNullOrEmpty(pathBase))
|
|
||||||
{
|
|
||||||
loggerFactory.CreateLogger("init").LogDebug($"Using PATH BASE '{pathBase}'");
|
|
||||||
app.UsePathBase(pathBase);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
||||||
app.Map("/liveness", lapp => lapp.Run(async ctx => ctx.Response.StatusCode = 200));
|
|
||||||
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
||||||
|
|
||||||
app.UseStaticFiles();
|
|
||||||
|
|
||||||
|
|
||||||
// Make work identity server redirections in Edge and lastest versions of browers. WARN: Not valid in a production environment.
|
|
||||||
app.Use(async (context, next) =>
|
|
||||||
{
|
|
||||||
context.Response.Headers.Add("Content-Security-Policy", "script-src 'unsafe-inline'");
|
|
||||||
await next();
|
|
||||||
});
|
|
||||||
|
|
||||||
app.UseForwardedHeaders();
|
|
||||||
// Adds IdentityServer
|
|
||||||
app.UseIdentityServer();
|
|
||||||
|
|
||||||
app.UseMvc(routes =>
|
|
||||||
{
|
|
||||||
routes.MapRoute(
|
|
||||||
name: "default",
|
|
||||||
template: "{controller=Home}/{action=Index}/{id?}");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RegisterAppInsights(IServiceCollection services)
|
|
||||||
{
|
|
||||||
services.AddApplicationInsightsTelemetry(Configuration);
|
|
||||||
var orchestratorType = Configuration.GetValue<string>("OrchestratorType");
|
|
||||||
|
|
||||||
if (orchestratorType?.ToUpper() == "K8S")
|
|
||||||
{
|
|
||||||
// Enable K8s telemetry initializer
|
|
||||||
services.EnableKubernetes();
|
|
||||||
}
|
|
||||||
if (orchestratorType?.ToUpper() == "SF")
|
|
||||||
{
|
|
||||||
// Enable SF telemetry initializer
|
|
||||||
services.AddSingleton<ITelemetryInitializer>((serviceProvider) =>
|
|
||||||
new FabricTelemetryInitializer());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"ConnectionString": "Server=tcp:127.0.0.1,5433;Database=Microsoft.eShopOnContainers.Services.IdentityDb;User Id=sa;Password=Pass@word;",
|
|
||||||
"IsClusterEnv": "False",
|
|
||||||
"MvcClient": "http://localhost:5100",
|
|
||||||
"SpaClient": "http://localhost:5104",
|
|
||||||
"XamarinCallback": "http://localhost:5105/xamarincallback",
|
|
||||||
"UseCustomizationData": false,
|
|
||||||
"Logging": {
|
|
||||||
"IncludeScopes": false,
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Trace",
|
|
||||||
"System": "Information",
|
|
||||||
"Microsoft": "Information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ApplicationInsights": {
|
|
||||||
"InstrumentationKey": ""
|
|
||||||
},
|
|
||||||
"UseVault": false,
|
|
||||||
"Vault": {
|
|
||||||
"Name": "eshop",
|
|
||||||
"ClientId": "your-clien-id",
|
|
||||||
"ClientSecret": "your-client-secret"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"ConnectionString": "mongodb://nosql.data",
|
|
||||||
"Database": "LocationsDb",
|
|
||||||
"IdentityUrl": "http://localhost:5105",
|
|
||||||
"Logging": {
|
|
||||||
"IncludeScopes": false,
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Trace",
|
|
||||||
"System": "Information",
|
|
||||||
"Microsoft": "Information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"AzureServiceBusEnabled": false,
|
|
||||||
"SubscriptionClientName": "Locations",
|
|
||||||
"ApplicationInsights": {
|
|
||||||
"InstrumentationKey": ""
|
|
||||||
},
|
|
||||||
"EventBusRetryCount": 5,
|
|
||||||
"UseVault": false,
|
|
||||||
"Vault": {
|
|
||||||
"Name": "eshop",
|
|
||||||
"ClientId": "your-clien-id",
|
|
||||||
"ClientSecret": "your-client-secret"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"Logging": {
|
|
||||||
"IncludeScopes": false,
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Trace"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ConnectionString": "Server=tcp:127.0.0.1,5433;Initial Catalog=Microsoft.eShopOnContainers.Services.MarketingDb;User Id=sa;Password=Pass@word",
|
|
||||||
"MongoConnectionString": "mongodb://nosql.data",
|
|
||||||
"MongoDatabase": "MarketingDb",
|
|
||||||
"IdentityUrl": "http://localhost:5105",
|
|
||||||
"PicBaseUrl": "http://localhost:5110/api/v1/campaigns/[0]/pic/",
|
|
||||||
"AzureServiceBusEnabled": false,
|
|
||||||
"SubscriptionClientName": "Marketing",
|
|
||||||
"AzureStorageEnabled": false,
|
|
||||||
"ApplicationInsights": {
|
|
||||||
"InstrumentationKey": ""
|
|
||||||
},
|
|
||||||
"EventBusRetryCount": 5,
|
|
||||||
"UseVault": false,
|
|
||||||
"Vault": {
|
|
||||||
"Name": "eshop",
|
|
||||||
"ClientId": "your-clien-id",
|
|
||||||
"ClientSecret": "your-client-secret"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"ConnectionString": "Server=tcp:127.0.0.1,5433;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word;",
|
|
||||||
"IdentityUrl": "http://localhost:5105",
|
|
||||||
"UseCustomizationData": false,
|
|
||||||
"Logging": {
|
|
||||||
"IncludeScopes": false,
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Trace",
|
|
||||||
"System": "Information",
|
|
||||||
"Microsoft": "Information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"AzureServiceBusEnabled": false,
|
|
||||||
"SubscriptionClientName": "Ordering",
|
|
||||||
"CheckUpdateTime": "30000",
|
|
||||||
"ApplicationInsights": {
|
|
||||||
"InstrumentationKey": ""
|
|
||||||
},
|
|
||||||
"EventBusRetryCount": 5,
|
|
||||||
"EventBusConnection": "localhost",
|
|
||||||
"UseVault": false,
|
|
||||||
"Vault": {
|
|
||||||
"Name": "eshop",
|
|
||||||
"ClientId": "your-clien-id",
|
|
||||||
"ClientSecret": "your-client-secret"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"IdentityUrl": "http://localhost:5105",
|
|
||||||
"Logging": {
|
|
||||||
"IncludeScopes": false,
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Trace",
|
|
||||||
"System": "Information",
|
|
||||||
"Microsoft": "Information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"AzureServiceBusEnabled": false,
|
|
||||||
"SubscriptionClientName": "Ordering.signalrhub",
|
|
||||||
"EventBusRetryCount": 5,
|
|
||||||
"EventBusConnection": "localhost"
|
|
||||||
}
|
|
BIN
src/Web/WebMVC/Certificates/DotNet Foundation CA.pfx
Normal file
BIN
src/Web/WebMVC/Certificates/DotNet Foundation CA.pfx
Normal file
Binary file not shown.
BIN
src/Web/WebMVC/Certificates/eShopOnContainers.pfx
Normal file
BIN
src/Web/WebMVC/Certificates/eShopOnContainers.pfx
Normal file
Binary file not shown.
16
src/Web/WebMVC/Controllers/HomeController.cs
Normal file
16
src/Web/WebMVC/Controllers/HomeController.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace WebMVC.Controllers
|
||||||
|
{
|
||||||
|
public class HomeController : Controller
|
||||||
|
{
|
||||||
|
public IActionResult Privacy()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,29 +0,0 @@
|
|||||||
ARG NODE_IMAGE=node:8.11
|
|
||||||
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
|
|
||||||
WORKDIR /app
|
|
||||||
EXPOSE 80
|
|
||||||
|
|
||||||
FROM microsoft/dotnet:2.1-sdk as dotnet-build
|
|
||||||
WORKDIR /src
|
|
||||||
|
|
||||||
FROM ${NODE_IMAGE} as node-build
|
|
||||||
WORKDIR /web
|
|
||||||
COPY src/Web/WebMVC .
|
|
||||||
RUN npm install -g bower@1.8.4
|
|
||||||
RUN bower install --allow-root
|
|
||||||
|
|
||||||
FROM dotnet-build as build
|
|
||||||
WORKDIR /src/src/Web/WebMVC/wwwroot
|
|
||||||
COPY --from=node-build /web/wwwroot .
|
|
||||||
WORKDIR /src
|
|
||||||
COPY . .
|
|
||||||
WORKDIR /src/src/Web/WebMVC
|
|
||||||
RUN dotnet restore -nowarn:msb3202,nu1503
|
|
||||||
|
|
||||||
FROM build AS publish
|
|
||||||
RUN dotnet publish --no-restore -c Release -o /app
|
|
||||||
|
|
||||||
FROM base AS final
|
|
||||||
WORKDIR /app
|
|
||||||
COPY --from=publish /app .
|
|
||||||
ENTRYPOINT ["dotnet", "WebMVC.dll"]
|
|
@ -36,6 +36,15 @@ namespace Microsoft.eShopOnContainers.WebMVC
|
|||||||
// This method gets called by the runtime. Use this method to add services to the IoC container.
|
// This method gets called by the runtime. Use this method to add services to the IoC container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
|
services.Configure<CookiePolicyOptions>(opts =>
|
||||||
|
{
|
||||||
|
opts.CheckConsentNeeded = context => true;
|
||||||
|
opts.MinimumSameSitePolicy = SameSiteMode.None;
|
||||||
|
});
|
||||||
|
services.AddHttpsRedirection(opts=>
|
||||||
|
{
|
||||||
|
opts.HttpsPort = 4100;
|
||||||
|
});
|
||||||
services.AddAppInsight(Configuration)
|
services.AddAppInsight(Configuration)
|
||||||
.AddHealthChecks(Configuration)
|
.AddHealthChecks(Configuration)
|
||||||
.AddCustomMvc(Configuration)
|
.AddCustomMvc(Configuration)
|
||||||
@ -59,6 +68,7 @@ namespace Microsoft.eShopOnContainers.WebMVC
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
app.UseExceptionHandler("/Error");
|
app.UseExceptionHandler("/Error");
|
||||||
|
app.UseHsts();
|
||||||
}
|
}
|
||||||
|
|
||||||
var pathBase = Configuration["PATH_BASE"];
|
var pathBase = Configuration["PATH_BASE"];
|
||||||
@ -68,6 +78,8 @@ namespace Microsoft.eShopOnContainers.WebMVC
|
|||||||
app.UsePathBase(pathBase);
|
app.UsePathBase(pathBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app.UseHttpsRedirection();
|
||||||
|
app.UseCookiePolicy();
|
||||||
|
|
||||||
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||||
app.Map("/liveness", lapp => lapp.Run(async ctx => ctx.Response.StatusCode = 200));
|
app.Map("/liveness", lapp => lapp.Run(async ctx => ctx.Response.StatusCode = 200));
|
||||||
@ -83,7 +95,7 @@ namespace Microsoft.eShopOnContainers.WebMVC
|
|||||||
|
|
||||||
app.UseAuthentication();
|
app.UseAuthentication();
|
||||||
|
|
||||||
var log = loggerFactory.CreateLogger("identity");
|
ILogger log = loggerFactory.CreateLogger("identity");
|
||||||
|
|
||||||
WebContextSeed.Seed(app, env, loggerFactory);
|
WebContextSeed.Seed(app, env, loggerFactory);
|
||||||
|
|
||||||
@ -106,7 +118,7 @@ namespace Microsoft.eShopOnContainers.WebMVC
|
|||||||
public static IServiceCollection AddAppInsight(this IServiceCollection services, IConfiguration configuration)
|
public static IServiceCollection AddAppInsight(this IServiceCollection services, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
services.AddApplicationInsightsTelemetry(configuration);
|
services.AddApplicationInsightsTelemetry(configuration);
|
||||||
var orchestratorType = configuration.GetValue<string>("OrchestratorType");
|
string orchestratorType = configuration.GetValue<string>("OrchestratorType");
|
||||||
|
|
||||||
if (orchestratorType?.ToUpper() == "K8S")
|
if (orchestratorType?.ToUpper() == "K8S")
|
||||||
{
|
{
|
||||||
@ -128,8 +140,8 @@ namespace Microsoft.eShopOnContainers.WebMVC
|
|||||||
{
|
{
|
||||||
services.AddHealthChecks(checks =>
|
services.AddHealthChecks(checks =>
|
||||||
{
|
{
|
||||||
var minutes = 1;
|
int minutes = 1;
|
||||||
if (int.TryParse(configuration["HealthCheck:Timeout"], out var minutesParsed))
|
if (int.TryParse(configuration["HealthCheck:Timeout"], out int minutesParsed))
|
||||||
{
|
{
|
||||||
minutes = minutesParsed;
|
minutes = minutesParsed;
|
||||||
}
|
}
|
||||||
@ -149,7 +161,11 @@ namespace Microsoft.eShopOnContainers.WebMVC
|
|||||||
services.AddOptions();
|
services.AddOptions();
|
||||||
services.Configure<AppSettings>(configuration);
|
services.Configure<AppSettings>(configuration);
|
||||||
|
|
||||||
services.AddMvc();
|
services.AddMvc(opts=>
|
||||||
|
{
|
||||||
|
opts.SslPort = 4100;
|
||||||
|
opts.RequireHttpsPermanent = true;
|
||||||
|
});
|
||||||
|
|
||||||
services.AddSession();
|
services.AddSession();
|
||||||
|
|
||||||
@ -227,9 +243,9 @@ namespace Microsoft.eShopOnContainers.WebMVC
|
|||||||
|
|
||||||
public static IServiceCollection AddCustomAuthentication(this IServiceCollection services, IConfiguration configuration)
|
public static IServiceCollection AddCustomAuthentication(this IServiceCollection services, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
var useLoadTest = configuration.GetValue<bool>("UseLoadTest");
|
bool useLoadTest = configuration.GetValue<bool>("UseLoadTest");
|
||||||
var identityUrl = configuration.GetValue<string>("IdentityUrl");
|
string identityUrl = configuration.GetValue<string>("IdentityUrl");
|
||||||
var callBackUrl = configuration.GetValue<string>("CallBackUrl");
|
string callBackUrl = configuration.GetValue<string>("CallBackUrl");
|
||||||
|
|
||||||
// Add Authentication services
|
// Add Authentication services
|
||||||
|
|
||||||
|
6
src/Web/WebMVC/Views/Home/Privacy.cshtml
Normal file
6
src/Web/WebMVC/Views/Home/Privacy.cshtml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
@{
|
||||||
|
ViewData["Title"] = "Privacy Policy";
|
||||||
|
}
|
||||||
|
<h2>@ViewData["Title"]</h2>
|
||||||
|
|
||||||
|
<p>Use this page to detail your site's privacy policy.</p>
|
41
src/Web/WebMVC/Views/Shared/_CookieConsentPartial.cshtml
Normal file
41
src/Web/WebMVC/Views/Shared/_CookieConsentPartial.cshtml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
@using Microsoft.AspNetCore.Http.Features
|
||||||
|
|
||||||
|
@{
|
||||||
|
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
|
||||||
|
var showBanner = !consentFeature?.CanTrack ?? false;
|
||||||
|
var cookieString = consentFeature?.CreateConsentCookie();
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (showBanner)
|
||||||
|
{
|
||||||
|
<nav id="cookieConsent" class="navbar navbar-default navbar-fixed-top" role="alert">
|
||||||
|
<div class="container">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#cookieConsent .navbar-collapse">
|
||||||
|
<span class="sr-only">Toggle cookie consent banner</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<span class="navbar-brand"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>
|
||||||
|
</div>
|
||||||
|
<div class="collapse navbar-collapse">
|
||||||
|
<p class="navbar-text">
|
||||||
|
Use this space to summarize your privacy and cookie use policy.
|
||||||
|
</p>
|
||||||
|
<div class="navbar-right">
|
||||||
|
<a asp-controller="Home" asp-action="Privacy" class="btn btn-info navbar-btn">Learn More</a>
|
||||||
|
<button type="button" class="btn btn-default navbar-btn" data-cookie-string="@cookieString">Accept</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
document.querySelector("#cookieConsent button[data-cookie-string]").addEventListener("click", function (el) {
|
||||||
|
document.cookie = el.target.dataset.cookieString;
|
||||||
|
document.querySelector("#cookieConsent").classList.add("hidden");
|
||||||
|
}, false);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
}
|
@ -49,8 +49,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
@RenderBody()
|
<partial name="_CookieConsentPartial" />
|
||||||
|
|
||||||
|
@RenderBody()
|
||||||
|
|
||||||
<footer class="esh-app-footer">
|
<footer class="esh-app-footer">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@ -87,7 +88,6 @@
|
|||||||
|
|
||||||
@RenderSection("scripts", required: false)
|
@RenderSection("scripts", required: false)
|
||||||
|
|
||||||
|
|
||||||
@using Microsoft.AspNetCore.Authentication;
|
@using Microsoft.AspNetCore.Authentication;
|
||||||
@using Microsoft.Extensions.Options
|
@using Microsoft.Extensions.Options
|
||||||
@inject IOptions<AppSettings> settings
|
@inject IOptions<AppSettings> settings
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"CatalogUrl": "http://localhost:5101",
|
|
||||||
"OrderingUrl": "http://localhost:5102",
|
|
||||||
"BasketUrl": "http://localhost:5103",
|
|
||||||
"MarketingUrl": "http://localhost:5110",
|
|
||||||
"IdentityUrl": "http://localhost:5105",
|
|
||||||
"CallBackUrl": "http://localhost:5100/",
|
|
||||||
"LocationsUrl": "http://localhost:5109/",
|
|
||||||
"IsClusterEnv": "False",
|
|
||||||
"UseResilientHttp": "True",
|
|
||||||
"UseLoadTest": false,
|
|
||||||
"ActivateCampaignDetailFunction": "False",
|
|
||||||
"UseCustomizationData": false,
|
|
||||||
"Logging": {
|
|
||||||
"IncludeScopes": false,
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Trace",
|
|
||||||
"System": "Information",
|
|
||||||
"Microsoft": "Information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ApplicationInsights": {
|
|
||||||
"InstrumentationKey": ""
|
|
||||||
},
|
|
||||||
"HttpClientRetryCount": 8,
|
|
||||||
"HttpClientExceptionsAllowedBeforeBreaking": 7
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
ARG NODE_IMAGE=node:8.11
|
|
||||||
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
|
|
||||||
WORKDIR /app
|
|
||||||
EXPOSE 80
|
|
||||||
|
|
||||||
FROM microsoft/dotnet:2.1-sdk as dotnet-build
|
|
||||||
WORKDIR /src
|
|
||||||
|
|
||||||
FROM ${NODE_IMAGE} as node-build
|
|
||||||
WORKDIR /web
|
|
||||||
COPY src/Web/WebSPA .
|
|
||||||
RUN npm install
|
|
||||||
RUN npm run build:prod
|
|
||||||
|
|
||||||
FROM dotnet-build as publish
|
|
||||||
WORKDIR /src/src/Web/WebSPA/wwwroot
|
|
||||||
COPY --from=node-build /web/wwwroot .
|
|
||||||
WORKDIR /src
|
|
||||||
COPY . .
|
|
||||||
WORKDIR /src/src/Web/WebSPA
|
|
||||||
RUN dotnet publish -c Release -o /app
|
|
||||||
|
|
||||||
FROM base AS final
|
|
||||||
WORKDIR /app
|
|
||||||
COPY --from=publish /app .
|
|
||||||
ENTRYPOINT ["dotnet", "WebSPA.dll"]
|
|
@ -1,158 +0,0 @@
|
|||||||
using eShopOnContainers.WebSPA;
|
|
||||||
using Microsoft.ApplicationInsights.Extensibility;
|
|
||||||
using Microsoft.ApplicationInsights.ServiceFabric;
|
|
||||||
using Microsoft.AspNetCore.Antiforgery;
|
|
||||||
using Microsoft.AspNetCore.Builder;
|
|
||||||
using Microsoft.AspNetCore.DataProtection;
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using Microsoft.Extensions.HealthChecks;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using Newtonsoft.Json.Serialization;
|
|
||||||
using StackExchange.Redis;
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using WebSPA.Infrastructure;
|
|
||||||
|
|
||||||
namespace eShopConContainers.WebSPA
|
|
||||||
{
|
|
||||||
public class Startup
|
|
||||||
{
|
|
||||||
public Startup(IConfiguration configuration)
|
|
||||||
{
|
|
||||||
Configuration = configuration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IConfiguration Configuration { get; }
|
|
||||||
|
|
||||||
private IHostingEnvironment _hostingEnv;
|
|
||||||
public Startup(IHostingEnvironment env)
|
|
||||||
{
|
|
||||||
_hostingEnv = env;
|
|
||||||
|
|
||||||
var localPath = new Uri(Configuration["ASPNETCORE_URLS"])?.LocalPath ?? "/";
|
|
||||||
Configuration["BaseUrl"] = localPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
|
||||||
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
|
|
||||||
public void ConfigureServices(IServiceCollection services)
|
|
||||||
{
|
|
||||||
RegisterAppInsights(services);
|
|
||||||
|
|
||||||
services.AddHealthChecks(checks =>
|
|
||||||
{
|
|
||||||
var minutes = 1;
|
|
||||||
if (int.TryParse(Configuration["HealthCheck:Timeout"], out var minutesParsed))
|
|
||||||
{
|
|
||||||
minutes = minutesParsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
checks.AddUrlCheck(Configuration["CatalogUrlHC"], TimeSpan.FromMinutes(minutes));
|
|
||||||
checks.AddUrlCheck(Configuration["OrderingUrlHC"], TimeSpan.FromMinutes(minutes));
|
|
||||||
checks.AddUrlCheck(Configuration["BasketUrlHC"], TimeSpan.Zero); //No cache for this HealthCheck, better just for demos
|
|
||||||
checks.AddUrlCheck(Configuration["IdentityUrlHC"], TimeSpan.FromMinutes(minutes));
|
|
||||||
checks.AddUrlCheck(Configuration["MarketingUrlHC"], TimeSpan.FromMinutes(minutes));
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
services.Configure<AppSettings>(Configuration);
|
|
||||||
|
|
||||||
if (Configuration.GetValue<string>("IsClusterEnv") == bool.TrueString)
|
|
||||||
{
|
|
||||||
services.AddDataProtection(opts =>
|
|
||||||
{
|
|
||||||
opts.ApplicationDiscriminator = "eshop.webspa";
|
|
||||||
})
|
|
||||||
.PersistKeysToRedis(ConnectionMultiplexer.Connect(Configuration["DPConnectionString"]), "DataProtection-Keys");
|
|
||||||
}
|
|
||||||
|
|
||||||
services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");
|
|
||||||
|
|
||||||
services.AddMvc()
|
|
||||||
.AddJsonOptions(options =>
|
|
||||||
{
|
|
||||||
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
|
||||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IAntiforgery antiforgery)
|
|
||||||
{
|
|
||||||
|
|
||||||
loggerFactory.AddAzureWebAppDiagnostics();
|
|
||||||
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace);
|
|
||||||
|
|
||||||
if (env.IsDevelopment())
|
|
||||||
{
|
|
||||||
app.UseDeveloperExceptionPage();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure XSRF middleware, This pattern is for SPA style applications where XSRF token is added on Index page
|
|
||||||
// load and passed back token on every subsequent async request
|
|
||||||
// app.Use(async (context, next) =>
|
|
||||||
// {
|
|
||||||
// if (string.Equals(context.Request.Path.Value, "/", StringComparison.OrdinalIgnoreCase))
|
|
||||||
// {
|
|
||||||
// var tokens = antiforgery.GetAndStoreTokens(context);
|
|
||||||
// context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() { HttpOnly = false });
|
|
||||||
// }
|
|
||||||
// await next.Invoke();
|
|
||||||
// });
|
|
||||||
|
|
||||||
//Seed Data
|
|
||||||
WebContextSeed.Seed(app, env, loggerFactory);
|
|
||||||
|
|
||||||
var pathBase = Configuration["PATH_BASE"];
|
|
||||||
if (!string.IsNullOrEmpty(pathBase))
|
|
||||||
{
|
|
||||||
loggerFactory.CreateLogger("init").LogDebug($"Using PATH BASE '{pathBase}'");
|
|
||||||
app.UsePathBase(pathBase);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
||||||
app.Map("/liveness", lapp => lapp.Run(async ctx => ctx.Response.StatusCode = 200));
|
|
||||||
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
||||||
|
|
||||||
app.Use(async (context, next) =>
|
|
||||||
{
|
|
||||||
await next();
|
|
||||||
|
|
||||||
// If there's no available file and the request doesn't contain an extension, we're probably trying to access a page.
|
|
||||||
// Rewrite request to use app root
|
|
||||||
if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value) && !context.Request.Path.Value.StartsWith("/api"))
|
|
||||||
{
|
|
||||||
context.Request.Path = "/index.html";
|
|
||||||
context.Response.StatusCode = 200; // Make sure we update the status code, otherwise it returns 404
|
|
||||||
await next();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
app.UseDefaultFiles();
|
|
||||||
app.UseStaticFiles();
|
|
||||||
|
|
||||||
app.UseMvcWithDefaultRoute();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RegisterAppInsights(IServiceCollection services)
|
|
||||||
{
|
|
||||||
services.AddApplicationInsightsTelemetry(Configuration);
|
|
||||||
var orchestratorType = Configuration.GetValue<string>("OrchestratorType");
|
|
||||||
|
|
||||||
if (orchestratorType?.ToUpper() == "K8S")
|
|
||||||
{
|
|
||||||
// Enable K8s telemetry initializer
|
|
||||||
services.EnableKubernetes();
|
|
||||||
}
|
|
||||||
if (orchestratorType?.ToUpper() == "SF")
|
|
||||||
{
|
|
||||||
// Enable SF telemetry initializer
|
|
||||||
services.AddSingleton<ITelemetryInitializer>((serviceProvider) =>
|
|
||||||
new FabricTelemetryInitializer());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"IdentityUrl": "http://localhost:5105",
|
|
||||||
"MarketingUrl": "http://localhost:5110",
|
|
||||||
"CallBackUrl": "http://localhost:5104/",
|
|
||||||
"PurchaseUrl": "http://localhost:5200",
|
|
||||||
"UseCustomizationData": true,
|
|
||||||
"IsClusterEnv": "False",
|
|
||||||
"ActivateCampaignDetailFunction": true,
|
|
||||||
"Logging": {
|
|
||||||
"IncludeScopes": false,
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Debug",
|
|
||||||
"System": "Information",
|
|
||||||
"Microsoft": "Information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ApplicationInsights": {
|
|
||||||
"InstrumentationKey": ""
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"Logging": {
|
|
||||||
"IncludeScopes": false,
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Debug",
|
|
||||||
"System": "Information",
|
|
||||||
"Microsoft": "Information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"OrderingUrl": "http://localhost:5102/hc",
|
|
||||||
"OrderingBackgroundTasksUrl": "http://localhost:5111/hc",
|
|
||||||
"BasketUrl": "http://localhost:5103/hc",
|
|
||||||
"CatalogUrl": "http://localhost:5101/hc",
|
|
||||||
"IdentityUrl": "http://localhost:5105/hc",
|
|
||||||
"MarketingUrl": "http://localhost:5110/hc",
|
|
||||||
"LocationsUrl": "http://localhost:5109/hc",
|
|
||||||
"PaymentUrl": "http://localhost:5108/hc",
|
|
||||||
"ApplicationInsights": {
|
|
||||||
"InstrumentationKey": ""
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user