diff --git a/Documentation/Doku.pptx b/Documentation/Doku.pptx index 62eeca3bcf048e830c1a2674912a0829eb95020b..0395c9f9e1e8ff2483d03fa2ac264c24a43b8da7 100644 Binary files a/Documentation/Doku.pptx and b/Documentation/Doku.pptx differ diff --git a/Play.Catalog/src/Play.Catalog.Contracts/Play.Catalog.Contracts.csproj b/Play.Catalog/src/Play.Catalog.Contracts/Play.Catalog.Contracts.csproj index 63991500f96f9b45a9b5173583a01b838411c2f8..f427ff0cbcdcc723d4dcc91204f66c95dfb0797d 100644 --- a/Play.Catalog/src/Play.Catalog.Contracts/Play.Catalog.Contracts.csproj +++ b/Play.Catalog/src/Play.Catalog.Contracts/Play.Catalog.Contracts.csproj @@ -3,7 +3,7 @@ <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <PackageDescription>Contracts supported by the Catalog microservice.</PackageDescription> - <Authors>Julio Casal</Authors> + <Authors>Thomas Staub</Authors> <Company>.NET Microservices</Company> </PropertyGroup> diff --git a/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/FileContentIndex/403973d2-6365-4395-b014-67b618407274.vsidx b/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/FileContentIndex/403973d2-6365-4395-b014-67b618407274.vsidx deleted file mode 100644 index c01f76a59509a4daaa9b8065ee9846f9ac32e83f..0000000000000000000000000000000000000000 Binary files a/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/FileContentIndex/403973d2-6365-4395-b014-67b618407274.vsidx and /dev/null differ diff --git a/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/FileContentIndex/8b123d74-4851-498d-be35-af2b7c09290f.vsidx b/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/FileContentIndex/8b123d74-4851-498d-be35-af2b7c09290f.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..b11ffeaaef22ce45116e9a39348ba42d205cf597 Binary files /dev/null and b/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/FileContentIndex/8b123d74-4851-498d-be35-af2b7c09290f.vsidx differ diff --git a/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/FileContentIndex/read.lock b/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/FileContentIndex/read.lock deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/v17/.futdcache.v2 b/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/v17/.futdcache.v2 index 6edc0ee0a676f891ecc9d31ad9017ab1ff5d3719..4ea848f2a54a07212e55279c7639b223bc72f60e 100644 Binary files a/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/v17/.futdcache.v2 and b/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/v17/.futdcache.v2 differ diff --git a/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/v17/.suo b/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/v17/.suo index 59de00bf4136fc8198d015d1ceecf2778d39cd9b..45a1b227fdb40bc23b68a8f003da6778c121b82e 100644 Binary files a/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/v17/.suo and b/Play.Catalog/src/Play.Catalog.Service/.vs/Play.Catalog.Service/v17/.suo differ diff --git a/Play.Catalog/src/Play.Catalog.Service/Controllers/ItemsController.cs b/Play.Catalog/src/Play.Catalog.Service/Controllers/ItemsController.cs index dd157abb1608ff54edf9e50bd262ca4603181637..421644a2753f760c6f8320c105d7ef9c700b6a0b 100644 --- a/Play.Catalog/src/Play.Catalog.Service/Controllers/ItemsController.cs +++ b/Play.Catalog/src/Play.Catalog.Service/Controllers/ItemsController.cs @@ -12,16 +12,16 @@ using Play.Common; namespace Play.Catalog.Service.Controllers { - [ApiController] - [Route("items")] - public class ItemsController : ControllerBase + [ApiController] //The ApiController attribute enables a series of features that improve your REST api developer experience like having model validation errors automatically return a 400 Bad Request error or how to bind incoming requests into our method parameters. + [Route("items")] //The Route attribute specifies the URL pattern that this controller will map to. For instance, if we use “items†here, it means that this controller will handle routes that start with /items, like https://localhost:5001/items + public class ItemsController : ControllerBase //ControllerBase provides many properties and methods useful when handling HTTP requests, like the BadRequest, NotFound and CreatedAtAction methods { private const string AdminRole = "Admin"; - private readonly IRepository<Item> itemsRepository; - private readonly IPublishEndpoint publishEndpoint; + private readonly IRepository<Item> itemsRepository; //We are using the IRepository<T> interface to access the database see Play.Common/src/Play.Common/IRepository.cs + private readonly IPublishEndpoint publishEndpoint; //We are using the IPublishEndpoint interface to publish messages to the message broker see Play.Common/src/Play.Common/MassTransit/IMassTransitPublisher.cs - public ItemsController(IRepository<Item> itemsRepository, IPublishEndpoint publishEndpoint) + public ItemsController(IRepository<Item> itemsRepository, IPublishEndpoint publishEndpoint) //We are using dependency injection to get the repository and the publish endpoint { this.itemsRepository = itemsRepository; this.publishEndpoint = publishEndpoint; @@ -29,35 +29,35 @@ namespace Play.Catalog.Service.Controllers [HttpGet] [Authorize(Policies.Read)] - public async Task<ActionResult<IEnumerable<ItemDto>>> GetAsync() + public async Task<ActionResult<IEnumerable<ItemDto>>> GetAsync() //The ActionResult<T> type is a wrapper around the HTTP response that allows us to return a 200 OK with the items as the response body { var items = (await itemsRepository.GetAllAsync()) - .Select(item => item.AsDto()); + .Select(item => item.AsDto()); //We are using the AsDto extension method to convert the Item entity into an ItemDto - return Ok(items); + return Ok(items); // Ok is a method from ControllerBase that returns a 200 OK with the items as the response body } // GET /items/{id} [HttpGet("{id}")] [Authorize(Policies.Read)] - public async Task<ActionResult<ItemDto>> GetByIdAsync(Guid id) + public async Task<ActionResult<ItemDto>> GetByIdAsync(Guid id) //Because we are using the ApiController attribute, we can use the ActionResult<T> type, which will automatically return a 404 Not Found if the item is not found { var item = await itemsRepository.GetAsync(id); - if (item == null) + if (item == null) //If we don’t use the ApiController attribute, we would have to manually check if the item is null and return a 404 Not Found { - return NotFound(); + return NotFound(); // NotFound is a method from ControllerBase that returns a 404 Not Found } - return item.AsDto(); + return item.AsDto(); //We are using the AsDto extension method to convert the Item entity into an ItemDto } // POST /items [HttpPost] - [Authorize(Policies.Write)] + [Authorize(Policies.Write)] //We are using the Authorize attribute to specify that only users with the Admin role can access this endpoint public async Task<ActionResult<ItemDto>> PostAsync(CreateItemDto createItemDto) { - var item = new Item + var item = new Item //We are creating a new Item entity from the CreateItemDto { Name = createItemDto.Name, Description = createItemDto.Description, @@ -65,15 +65,15 @@ namespace Play.Catalog.Service.Controllers CreatedDate = DateTimeOffset.UtcNow }; - await itemsRepository.CreateAsync(item); + await itemsRepository.CreateAsync(item); //We are using the repository to create the item await publishEndpoint.Publish(new CatalogItemCreated( item.Id, item.Name, item.Description, - item.Price)); + item.Price)); //We are publishing the CatalogItemCreated event - return CreatedAtAction(nameof(GetByIdAsync), new { id = item.Id }, item); + return CreatedAtAction(nameof(GetByIdAsync), new { id = item.Id }, item); //We are returning a 201 Created with the item as the response body } // PUT /items/{id} @@ -81,7 +81,7 @@ namespace Play.Catalog.Service.Controllers [Authorize(Policies.Write)] public async Task<IActionResult> PutAsync(Guid id, UpdateItemDto updateItemDto) { - var existingItem = await itemsRepository.GetAsync(id); + var existingItem = await itemsRepository.GetAsync(id); //We are using the repository to get the item by id if (existingItem == null) { @@ -92,7 +92,7 @@ namespace Play.Catalog.Service.Controllers existingItem.Description = updateItemDto.Description; existingItem.Price = updateItemDto.Price; - await itemsRepository.UpdateAsync(existingItem); + await itemsRepository.UpdateAsync(existingItem); // await publishEndpoint.Publish(new CatalogItemUpdated( existingItem.Id, @@ -100,7 +100,7 @@ namespace Play.Catalog.Service.Controllers existingItem.Description, existingItem.Price)); - return NoContent(); + return NoContent(); //We are returning a 204 No Content } // DELETE /items/{id} diff --git a/Play.Catalog/src/Play.Catalog.Service/Program.cs b/Play.Catalog/src/Play.Catalog.Service/Program.cs index 9eeda958a28db2526bc8ba7ef726371455412c90..0717fb2eb0c39771d581254ebe7852256be72caa 100644 --- a/Play.Catalog/src/Play.Catalog.Service/Program.cs +++ b/Play.Catalog/src/Play.Catalog.Service/Program.cs @@ -18,112 +18,107 @@ using System.Collections.Generic; using Microsoft.AspNetCore.Http; - - namespace Play.Catalog.Service { public class Program { public static void Main(string[] args) { - CreateHostBuilder(args).Build().Run(); + CreateHostBuilder(args).Build().Run(); //We are using the CreateHostBuilder method to create the host and run the app } - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - - .ConfigureWebHostDefaults(webBuilder => + public static IHostBuilder CreateHostBuilder(string[] args) => //We are using the CreateHostBuilder method to create the host and run the app + Host.CreateDefaultBuilder(args) // + .ConfigureWebHostDefaults(webBuilder => //We are using the ConfigureWebHostDefaults method to configure the web host { - webBuilder.UseStartup<Program>(); + webBuilder.UseStartup<Program>(); //We are using the UseStartup method to specify the startup class }); - private ServiceSettings serviceSettings; + private ServiceSettings serviceSettings; //We are using the ServiceSettings class to store the service settings see Play.Common/src/Play.Common/Settings/ServiceSettings.cs - public Program(IConfiguration configuration) + // Configuration of the services defined in the ConfigureServices method, allowing us to pass values as parameters + public Program(IConfiguration configuration) //We are using dependency injection to get the configuration see Play.Common/src/Play.Common/Settings/ServiceSettings.cs { - Configuration = configuration; + Configuration = configuration; //We are using the Configuration property to store the configuration } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) + public void ConfigureServices(IServiceCollection services) { //Remove for real Production IdentityModelEventSource.ShowPII = true; - - - - serviceSettings = Configuration.GetSection(nameof(ServiceSettings)).Get<ServiceSettings>(); - - services.AddMongo() - .AddMongoRepository<Item>("items") - .AddMassTransitWithMessageBroker(Configuration) - .AddJwtBearerAuthentication(); - - services.AddAuthorization(options => + //retrieves the values from appsettings.json + serviceSettings = Configuration.GetSection(nameof(ServiceSettings)).Get<ServiceSettings>(); //We are using dependency injection to get the ServiceSettings see Play.Common/src/Play.Common/Settings/ServiceSettings.cs + + services.AddMongo() //Brings the MongoDB into the app + .AddMongoRepository<Item>("items") //Brings the MongoDB Repository into the app see Play.Common/src/Play.Common/MongoDB/Extensions.cs + .AddMassTransitWithMessageBroker(Configuration) //Brings the MassTransit into the app see Play.Common/src/Play.Common/MassTransit/Extensions.cs + .AddJwtBearerAuthentication(); //Brings the JwtBearerAuthentication into the app see Play.Common/src/Play.Common/Identity/Extensions.cs + + services.AddAuthorization(options => //Brings the Authorization into the app see Play.Common/src/Play.Common/Identity/Extensions.cs { - options.AddPolicy(Policies.Read, policy => + options.AddPolicy(Policies.Read, policy => //We are using the AddPolicy method to add the Read policy { - policy.RequireRole("Admin"); - policy.RequireClaim("scope", "catalog.readaccess", "catalog.fullaccess"); + policy.RequireRole("Admin"); //We are using the RequireRole method to specify that only users with the Admin role can access this policy + policy.RequireClaim("scope", "catalog.readaccess", "catalog.fullaccess"); //We are using the RequireClaim method to specify that the user must have the catalog.readaccess or catalog.fullaccess scope }); - options.AddPolicy(Policies.Write, policy => + options.AddPolicy(Policies.Write, policy => //We are using the AddPolicy method to add the Write policy { - policy.RequireRole("Admin"); - policy.RequireClaim("scope", "catalog.writeaccess", "catalog.fullaccess"); + policy.RequireRole("Admin"); //We are using the RequireRole method to specify that only users with the Admin role can access this policy + policy.RequireClaim("scope", "catalog.writeaccess", "catalog.fullaccess"); //We are using the RequireClaim method to specify that the user must have the catalog.writeaccess or catalog.fullaccess scope }); - + }); - services.AddControllers(options => + services.AddControllers(options => //Brings the Controllers into the app { - options.SuppressAsyncSuffixInActionNames = false; + options.SuppressAsyncSuffixInActionNames = false; //We are using the SuppressAsyncSuffixInActionNames property to disable the async suffix in the controller actions }); - + //Swagger for the API services.AddSwaggerGen(options => { - var scheme = new OpenApiSecurityScheme + var scheme = new OpenApiSecurityScheme //We are using the OpenApiSecurityScheme to configure the OAuth2 authentication { - In = ParameterLocation.Header, - Name = "Authorization", - Flows = new OpenApiOAuthFlows + In = ParameterLocation.Header, //We are using the In property to specify that the token will be passed in the header + Name = "Authorization", //We are using the Name property to specify that the header name will be Authorization + Flows = new OpenApiOAuthFlows //We are using the Flows property to specify the OAuth2 flows { - AuthorizationCode = new OpenApiOAuthFlow + AuthorizationCode = new OpenApiOAuthFlow //We are using the AuthorizationCode property to specify the Authorization Code flow { - AuthorizationUrl = new Uri(Configuration.GetSection("Auth:Swagger:AuthorizationUrl").Get<string>()), - TokenUrl = new Uri(Configuration.GetSection("Auth:Swagger:TokenUrl").Get<string>()) + AuthorizationUrl = new Uri(Configuration.GetSection("Auth:Swagger:AuthorizationUrl").Get<string>()), //We are using the AuthorizationUrl property to specify the authorization URL + TokenUrl = new Uri(Configuration.GetSection("Auth:Swagger:TokenUrl").Get<string>()) //We are using the TokenUrl property to specify the token URL } }, - Type = SecuritySchemeType.OAuth2 + Type = SecuritySchemeType.OAuth2 //We are using the Type property to specify that the type of the security scheme is OAuth2 }; - options.AddSecurityDefinition("OAuth", scheme); + options.AddSecurityDefinition("OAuth", scheme); //We are using the AddSecurityDefinition method to add the OAuth2 security scheme - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.AddSecurityRequirement(new OpenApiSecurityRequirement //We are using the AddSecurityRequirement method to add the security requirements { { new OpenApiSecurityScheme { - Reference = new OpenApiReference { Id = "OAuth", Type = ReferenceType.SecurityScheme } + Reference = new OpenApiReference { Id = "OAuth", Type = ReferenceType.SecurityScheme } //We are using the Reference property to specify the reference to the OAuth2 security scheme }, - new List<string> { } + new List<string> { } //We are using the List<string> to specify the scopes } }); }); - - - - + + //Brings the HealthChecks into the app services.AddHealthChecks() .AddMongoDb(); - + //Brings the Metric into the app + //Brings the OpenTelemetry into the app services.AddSeqLogging(Configuration) .AddTracing(Configuration) .AddMetrics(Configuration); @@ -132,52 +127,53 @@ namespace Play.Catalog.Service // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { - //Remove || env.IsProduction() for real Production. Made vor Docker + //Remove || env.IsProduction() for real Production. Made vor Docker otherwise troubleshooting in Docker for Learning is difficult if (env.IsDevelopment() || env.IsProduction()) { - app.UseDeveloperExceptionPage(); - app.UseSwagger() - .UseSwaggerUI(options => + + app.UseDeveloperExceptionPage(); //We are using the UseDeveloperExceptionPage method to show the developer exception page that contains the exception details + app.UseSwagger() //We are using the UseSwagger method to enable the Swagger middleware to show the Swagger UI + .UseSwaggerUI(options => { - options.OAuthClientId("api-swagger"); + options.OAuthClientId("api-swagger"); //We are using the OAuthClientId method to specify the client ID options.OAuthScopes("profile", "openid", "catalog.fullaccess", "catalog.readaccess", "catalog.writeaccess", "inventory.fullaccess", "trading.fullaccess", "IdentityServerApi", - "roles"); - options.OAuthUsePkce(); - options.OAuth2RedirectUrl("http://host.docker.internal:5002/swagger/oauth2-redirect.html"); + "roles"); //We are using the OAuthScopes method to specify the scopes + options.OAuthUsePkce(); //We are using the OAuthUsePkce method to enable the PKCE flow that is required by IdentityServer because we are using the Authorization Code flow + options.OAuth2RedirectUrl("http://host.docker.internal:5002/swagger/oauth2-redirect.html"); //We are using the OAuth2RedirectUrl method to specify the redirect URL that will be used by the Swagger UI options.EnablePersistAuthorization(); //options.InjectStylesheet("/content/swagger-extras.css"); }); - + // allows access to the API from other domains app.UseCors(builder => { var allowedOrigins = Configuration.GetSection("AllowedOrigins").Get<string[]>(); - builder.WithOrigins(allowedOrigins) - .AllowAnyHeader() - .AllowAnyMethod(); + builder.WithOrigins(allowedOrigins) //allows access to the API from other domains + .AllowAnyHeader() + .AllowAnyMethod(); // }); } - //app.UseHttpsRedirection(); + //app.UseHttpsRedirection(); // Removed because in microservices we are in a private network and we don't need https redirection it makes the app slower app.UseOpenTelemetryPrometheusScrapingEndpoint(); - app.UseRouting(); + app.UseRouting(); //Routing is used to route the request to the correct controller - app.UseAuthentication(); - app.UseAuthorization(); + app.UseAuthentication(); //Authentication is used to authenticate the user + app.UseAuthorization(); //Authorization is used to authorize the user app.UseEndpoints(endpoints => { - endpoints.MapControllers(); - endpoints.MapPlayEconomyHealthChecks(); + endpoints.MapControllers(); //MapControllers is used to map the controllers + endpoints.MapPlayEconomyHealthChecks(); //MapPlayEconomyHealthChecks is used to map the health checks }); } diff --git a/Play.Catalog/src/Play.Catalog.Service/appsettings.json b/Play.Catalog/src/Play.Catalog.Service/appsettings.json index 800cbdfa38dcc6c7cff29442b4b069b19c3ff24d..283e9bf7f8a7ef945a343d27f9043aa979705f26 100644 --- a/Play.Catalog/src/Play.Catalog.Service/appsettings.json +++ b/Play.Catalog/src/Play.Catalog.Service/appsettings.json @@ -1,7 +1,7 @@ { "Logging": { "LogLevel": { - "Default": "Information", + "Default": "Debug", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } @@ -34,6 +34,6 @@ } }, "AllowedHosts": "*", - "AllowedOrigins": ["http://host.docker.internal:3000","http://host.docker.internal:5000","http://host.docker.internal:5008"] + "AllowedOrigins": ["http://host.docker.internal:3000","http://host.docker.internal:5000","http://host.docker.internal:5008","localhost"] } \ No newline at end of file diff --git a/Play.Catalog/src/Play.Catalog.Service/nuget.config b/Play.Catalog/src/Play.Catalog.Service/nuget.config index 317aade93721aa3c838096b0f3658df0a4a30de8..2af2dbb4b224431d3d68d727dd06ac4a9c1a9a79 100644 --- a/Play.Catalog/src/Play.Catalog.Service/nuget.config +++ b/Play.Catalog/src/Play.Catalog.Service/nuget.config @@ -2,12 +2,9 @@ <configuration> <packageSources> <clear /> -<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> - +<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> <add key="Play.Common" value="https://git.gibb.ch/api/v4/projects/5940/packages/nuget/index.json" /> </packageSources> - - </configuration> \ No newline at end of file diff --git a/Play.Common/src/Play.Common/MongoDB/Extensions.cs b/Play.Common/src/Play.Common/MongoDB/Extensions.cs index aa52bf50c2f4fd4f5b7a5182e3df15e8b3c506a5..14a3e363e5c4e11c9cc687517d5e706003c1ddd4 100644 --- a/Play.Common/src/Play.Common/MongoDB/Extensions.cs +++ b/Play.Common/src/Play.Common/MongoDB/Extensions.cs @@ -10,10 +10,10 @@ namespace Play.Common.MongoDB { public static class Extensions { - public static IServiceCollection AddMongo(this IServiceCollection services) + public static IServiceCollection AddMongo(this IServiceCollection services) //We are using dependency injection to get the database and the collection name { - BsonSerializer.RegisterSerializer(new GuidSerializer(BsonType.String)); - BsonSerializer.RegisterSerializer(new DateTimeOffsetSerializer(BsonType.String)); + BsonSerializer.RegisterSerializer(new GuidSerializer(BsonType.String)); //We are registering the GuidSerializer to serialize the Guid as a string instead of an object + BsonSerializer.RegisterSerializer(new DateTimeOffsetSerializer(BsonType.String)); //We are registering the DateTimeOffsetSerializer to serialize the DateTimeOffset as a string instead of an object services.AddSingleton(serviceProvider => { diff --git a/Play.Common/src/Play.Common/MongoDB/MongoRepository.cs b/Play.Common/src/Play.Common/MongoDB/MongoRepository.cs index 6e91c2cfde09fe96cb223a491eae81aa816ab530..10821176377a527615b0fdc27c6878e4ad793558 100644 --- a/Play.Common/src/Play.Common/MongoDB/MongoRepository.cs +++ b/Play.Common/src/Play.Common/MongoDB/MongoRepository.cs @@ -7,12 +7,12 @@ using MongoDB.Driver; namespace Play.Common.MongoDB { - public class MongoRepository<T> : IRepository<T> where T : IEntity + public class MongoRepository<T> : IRepository<T> where T : IEntity //We are using the IRepository<T> interface to access the database see Play.Common/src/Play.Common/IRepository.cs { - private readonly IMongoCollection<T> dbCollection; + private readonly IMongoCollection<T> dbCollection; //We are using the IMongoCollection<T> interface to access the database private readonly FilterDefinitionBuilder<T> filterBuilder = Builders<T>.Filter; - public MongoRepository(IMongoDatabase database, string collectionName) + public MongoRepository(IMongoDatabase database, string collectionName) //We are using dependency injection to get the database and the collection name see Play.Common/src/Play.Common/MongoDB/Extensions.cs { dbCollection = database.GetCollection<T>(collectionName); } diff --git a/Play.Common/src/Play.Common/Play.Common.csproj b/Play.Common/src/Play.Common/Play.Common.csproj index d4f819d01a311f86689d644a892f9993e8152fc5..2cb8e850f3e7a7fbd322a4188ef5e1a55481afa3 100644 --- a/Play.Common/src/Play.Common/Play.Common.csproj +++ b/Play.Common/src/Play.Common/Play.Common.csproj @@ -3,7 +3,7 @@ <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <PackageDescription>Common libraries used by Play Economy services.</PackageDescription> - <Authors>Julio Casal</Authors> + <Authors>Thomas Staub</Authors> <Company>.NET Microservices</Company> </PropertyGroup> diff --git a/Play.Identity/src/Play.Identity.Service/appsettings.json b/Play.Identity/src/Play.Identity.Service/appsettings.json index 76623c07fc97d6aef781a0df483d6b2024a4aea8..8ca6e65601050b8c7a34bfbdf094c7c229c807c6 100644 --- a/Play.Identity/src/Play.Identity.Service/appsettings.json +++ b/Play.Identity/src/Play.Identity.Service/appsettings.json @@ -149,7 +149,7 @@ "PostLogoutRedirectUris":[ "http://host.docker.internal:5008/" ], - "AllowedCorsOrigins" : ["http://host.docker.internal:5009","http://host.docker.internal:5008" ] + "AllowedCorsOrigins" : ["http://host.docker.internal:5009","http://host.docker.internal:5008"] }, { @@ -175,7 +175,7 @@ "roles" ], - "AllowedCorsOrigins" : ["http://host.docker.internal:5009","http://host.docker.internal:5008","http://host.docker.internal:5002","http://host.docker.internal:5004","http://host.docker.internal:5006" ], + "AllowedCorsOrigins" : ["http://host.docker.internal:5009","http://host.docker.internal:5008","http://host.docker.internal:5002","http://host.docker.internal:5004","http://host.docker.internal:5006","http://host.docker.internal:5000" ], "AlwaysIncludeUserClaimsInIdToken" : true },