DetailsClick(item.Id))">
-
+
|
- @Services.CatalogTypeService.List.GetTypeName(catalogTypes, item.CatalogTypeId) |
- @Services.CatalogBrandService.List.GetBrandName(catalogBrands, item.CatalogBrandId) |
+ @Services.CatalogTypeServices.List.GetTypeName(catalogTypes, item.CatalogTypeId) |
+ @Services.CatalogBrandServices.List.GetBrandName(catalogBrands, item.CatalogBrandId) |
@item.Id |
@item.Name |
@item.Description |
diff --git a/src/BlazorAdmin/Pages/CatalogItemPage/List.razor.cs b/src/BlazorAdmin/Pages/CatalogItemPage/List.razor.cs
index a37fa02..21cbe2d 100644
--- a/src/BlazorAdmin/Pages/CatalogItemPage/List.razor.cs
+++ b/src/BlazorAdmin/Pages/CatalogItemPage/List.razor.cs
@@ -1,7 +1,7 @@
using BlazorAdmin.Helpers;
-using BlazorAdmin.Services.CatalogBrandService;
-using BlazorAdmin.Services.CatalogItemService;
-using BlazorAdmin.Services.CatalogTypeService;
+using BlazorAdmin.Services.CatalogBrandServices;
+using BlazorAdmin.Services.CatalogItemServices;
+using BlazorAdmin.Services.CatalogTypeServices;
using System.Collections.Generic;
using System.Threading.Tasks;
@@ -22,9 +22,9 @@ namespace BlazorAdmin.Pages.CatalogItemPage
{
if (firstRender)
{
- catalogItems = await new BlazorAdmin.Services.CatalogItemService.ListPaged(Auth).HandleAsync(50);
- catalogTypes = await new BlazorAdmin.Services.CatalogTypeService.List(Auth).HandleAsync();
- catalogBrands = await new BlazorAdmin.Services.CatalogBrandService.List(Auth).HandleAsync();
+ catalogItems = await new BlazorAdmin.Services.CatalogItemServices.ListPaged(Auth).HandleAsync(50);
+ catalogTypes = await new BlazorAdmin.Services.CatalogTypeServices.List(Auth).HandleAsync();
+ catalogBrands = await new BlazorAdmin.Services.CatalogBrandServices.List(Auth).HandleAsync();
CallRequestRefresh();
}
@@ -54,7 +54,7 @@ namespace BlazorAdmin.Pages.CatalogItemPage
private async Task ReloadCatalogItems()
{
- catalogItems = await new BlazorAdmin.Services.CatalogItemService.ListPaged(Auth).HandleAsync(50);
+ catalogItems = await new BlazorAdmin.Services.CatalogItemServices.ListPaged(Auth).HandleAsync(50);
StateHasChanged();
}
}
diff --git a/src/BlazorAdmin/Services/AuthService.cs b/src/BlazorAdmin/Services/AuthService.cs
index 12bda0a..989a9a1 100644
--- a/src/BlazorAdmin/Services/AuthService.cs
+++ b/src/BlazorAdmin/Services/AuthService.cs
@@ -1,17 +1,13 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net.Http;
+using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json;
-using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using BlazorAdmin.JavaScript;
using Blazored.LocalStorage;
using Microsoft.JSInterop;
using Newtonsoft.Json;
-using Shared.Authorization;
+using BlazorShared.Authorization;
namespace BlazorAdmin.Services
{
@@ -20,6 +16,12 @@ namespace BlazorAdmin.Services
private readonly HttpClient _httpClient;
private readonly ILocalStorageService _localStorage;
private readonly IJSRuntime _jSRuntime;
+
+ public string ApiUrl => Constants.GetApiUrl(InDocker);
+ public string WebUrl => Constants.GetWebUrl(InDocker);
+
+ private static bool InDocker { get; set; }
+
public bool IsLoggedIn { get; set; }
public string UserName { get; set; }
@@ -30,51 +32,33 @@ namespace BlazorAdmin.Services
_jSRuntime = jSRuntime;
}
- public HttpClient GetHttpClient()
+ public async Task HttpGet(string uri)
{
- return _httpClient;
+ return await _httpClient.GetAsync($"{ApiUrl}{uri}");
}
- public async Task LoginWithoutSaveToLocalStorage(AuthRequest user)
+ public async Task HttpDelete(string uri, int id)
{
- var jsonContent = new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json");
- var response = await _httpClient.PostAsync($"{Constants.API_URL}authenticate", jsonContent);
- var authResponse = new AuthResponse();
-
- if (response.IsSuccessStatusCode)
- {
- authResponse = await DeserializeToAuthResponse(response);
-
- IsLoggedIn = true;
- }
-
- return authResponse;
+ return await _httpClient.DeleteAsync($"{ApiUrl}{uri}/{id}");
}
- public async Task Login(AuthRequest user)
+ public async Task HttpPost(string uri, object dataToSend)
{
- var jsonContent = new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json");
- var response = await _httpClient.PostAsync($"{Constants.API_URL}authenticate", jsonContent);
- var authResponse = new AuthResponse();
+ var content = ToJson(dataToSend);
- if (response.IsSuccessStatusCode)
- {
- authResponse = await DeserializeToAuthResponse(response);
- await SaveTokenInLocalStorage(authResponse);
- await SaveUsernameInLocalStorage(authResponse);
- await SetAuthorizationHeader();
+ return await _httpClient.PostAsync($"{ApiUrl}{uri}", content);
+ }
- UserName = await GetUsername();
- IsLoggedIn = true;
- }
+ public async Task HttpPut(string uri, object dataToSend)
+ {
+ var content = ToJson(dataToSend);
- return authResponse;
+ return await _httpClient.PutAsync($"{ApiUrl}{uri}", content);
}
public async Task Logout()
{
- await _localStorage.RemoveItemAsync("authToken");
- await _localStorage.RemoveItemAsync("username");
+ await DeleteLocalStorage();
await DeleteCookies();
RemoveAuthorizationHeader();
UserName = null;
@@ -95,67 +79,11 @@ namespace BlazorAdmin.Services
var username = await new Cookies(_jSRuntime).GetCookie("username");
await SaveUsernameInLocalStorage(username);
+ var inDocker = await new Cookies(_jSRuntime).GetCookie("inDocker");
+ await SaveInDockerInLocalStorage(inDocker);
+
await RefreshLoginInfo();
}
- private async Task LogoutIdentityManager()
- {
- await _httpClient.PostAsync("Identity/Account/Logout", null);
- }
-
- private async Task DeleteCookies()
- {
- await new Cookies(_jSRuntime).DeleteCookie("token");
- await new Cookies(_jSRuntime).DeleteCookie("username");
- }
-
- private async Task SetLoginData()
- {
- IsLoggedIn = !string.IsNullOrEmpty(await GetToken());
- UserName = await GetUsername();
- await SetAuthorizationHeader();
- }
-
- private async Task DeserializeToAuthResponse(HttpResponseMessage response)
- {
- var responseContent = await response.Content.ReadAsStringAsync();
- return JsonConvert.DeserializeObject(responseContent);
- }
-
- private async Task SaveTokenInLocalStorage(AuthResponse authResponse)
- {
- await _localStorage.SetItemAsync("authToken", SaveTokenInLocalStorage(authResponse.Token));
- }
-
- private async Task SaveTokenInLocalStorage(string token)
- {
- if (string.IsNullOrEmpty(token))
- {
- return;
- }
- await _localStorage.SetItemAsync("authToken", token);
- }
-
- private void RemoveAuthorizationHeader()
- {
- if (_httpClient.DefaultRequestHeaders.Contains("Authorization"))
- {
- _httpClient.DefaultRequestHeaders.Remove("Authorization");
- }
- }
-
- private async Task SaveUsernameInLocalStorage(AuthResponse authResponse)
- {
- await _localStorage.SetItemAsync("username", SaveUsernameInLocalStorage(authResponse.Username));
- }
-
- private async Task SaveUsernameInLocalStorage(string username)
- {
- if (string.IsNullOrEmpty(username))
- {
- return;
- }
- await _localStorage.SetItemAsync("username", username);
- }
public async Task GetToken()
{
@@ -175,58 +103,83 @@ namespace BlazorAdmin.Services
return username;
}
+ public async Task GetInDocker()
+ {
+ return (await _localStorage.GetItemAsync("inDocker")).ToLower() == "true";
+ }
+
+ private StringContent ToJson(object obj)
+ {
+ return new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json");
+ }
+
+ private async Task LogoutIdentityManager()
+ {
+ await _httpClient.PostAsync("Identity/Account/Logout", null);
+ }
+
+ private async Task DeleteLocalStorage()
+ {
+ await _localStorage.RemoveItemAsync("authToken");
+ await _localStorage.RemoveItemAsync("username");
+ await _localStorage.RemoveItemAsync("inDocker");
+ }
+
+ private async Task DeleteCookies()
+ {
+ await new Cookies(_jSRuntime).DeleteCookie("token");
+ await new Cookies(_jSRuntime).DeleteCookie("username");
+ await new Cookies(_jSRuntime).DeleteCookie("inDocker");
+ }
+
+ private async Task SetLoginData()
+ {
+ IsLoggedIn = !string.IsNullOrEmpty(await GetToken());
+ UserName = await GetUsername();
+ InDocker = await GetInDocker();
+ await SetAuthorizationHeader();
+ }
+
+ private void RemoveAuthorizationHeader()
+ {
+ if (_httpClient.DefaultRequestHeaders.Contains("Authorization"))
+ {
+ _httpClient.DefaultRequestHeaders.Remove("Authorization");
+ }
+ }
+
+ private async Task SaveTokenInLocalStorage(string token)
+ {
+ if (string.IsNullOrEmpty(token))
+ {
+ return;
+ }
+ await _localStorage.SetItemAsync("authToken", token);
+ }
+
+ private async Task SaveUsernameInLocalStorage(string username)
+ {
+ if (string.IsNullOrEmpty(username))
+ {
+ return;
+ }
+ await _localStorage.SetItemAsync("username", username);
+ }
+
+ private async Task SaveInDockerInLocalStorage(string inDocker)
+ {
+ if (string.IsNullOrEmpty(inDocker))
+ {
+ return;
+ }
+ await _localStorage.SetItemAsync("inDocker", inDocker);
+ }
+
private async Task SetAuthorizationHeader()
{
var token = await GetToken();
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
}
- public IEnumerable ParseClaimsFromJwt(string jwt)
- {
- var claims = new List();
- if (string.IsNullOrEmpty(jwt))
- {
- return claims;
- }
-
- var payload = jwt.Split('.')[1];
- var jsonBytes = ParseBase64WithoutPadding(payload);
- var keyValuePairs = JsonConvert.DeserializeObject>(Encoding.UTF8.GetString(jsonBytes));
-
- keyValuePairs.TryGetValue(ClaimTypes.Role, out object roles);
-
- if (roles != null)
- {
- if (roles.ToString().Trim().StartsWith("["))
- {
- var parsedRoles = JsonConvert.DeserializeObject(roles.ToString());
-
- foreach (var parsedRole in parsedRoles)
- {
- claims.Add(new Claim(ClaimTypes.Role, parsedRole));
- }
- }
- else
- {
- claims.Add(new Claim(ClaimTypes.Role, roles.ToString()));
- }
-
- keyValuePairs.Remove(ClaimTypes.Role);
- }
-
- claims.AddRange(keyValuePairs.Select(kvp => new Claim(kvp.Key, kvp.Value.ToString())));
-
- return claims;
- }
-
- private byte[] ParseBase64WithoutPadding(string base64)
- {
- switch (base64.Length % 4)
- {
- case 2: base64 += "=="; break;
- case 3: base64 += "="; break;
- }
- return Convert.FromBase64String(base64);
- }
}
}
diff --git a/src/BlazorAdmin/Services/CatalogBrandService/List.CatalogBrand.cs b/src/BlazorAdmin/Services/CatalogBrandServices/List.CatalogBrand.cs
similarity index 69%
rename from src/BlazorAdmin/Services/CatalogBrandService/List.CatalogBrand.cs
rename to src/BlazorAdmin/Services/CatalogBrandServices/List.CatalogBrand.cs
index b535633..b8d8a5b 100644
--- a/src/BlazorAdmin/Services/CatalogBrandService/List.CatalogBrand.cs
+++ b/src/BlazorAdmin/Services/CatalogBrandServices/List.CatalogBrand.cs
@@ -1,4 +1,4 @@
-namespace BlazorAdmin.Services.CatalogBrandService
+namespace BlazorAdmin.Services.CatalogBrandServices
{
public class CatalogBrand
{
diff --git a/src/BlazorAdmin/Services/CatalogBrandService/List.CatalogBrandResult.cs b/src/BlazorAdmin/Services/CatalogBrandServices/List.CatalogBrandResult.cs
similarity index 77%
rename from src/BlazorAdmin/Services/CatalogBrandService/List.CatalogBrandResult.cs
rename to src/BlazorAdmin/Services/CatalogBrandServices/List.CatalogBrandResult.cs
index 18f6219..88493ea 100644
--- a/src/BlazorAdmin/Services/CatalogBrandService/List.CatalogBrandResult.cs
+++ b/src/BlazorAdmin/Services/CatalogBrandServices/List.CatalogBrandResult.cs
@@ -1,6 +1,6 @@
using System.Collections.Generic;
-namespace BlazorAdmin.Services.CatalogBrandService
+namespace BlazorAdmin.Services.CatalogBrandServices
{
public class CatalogBrandResult
{
diff --git a/src/BlazorAdmin/Services/CatalogBrandService/List.cs b/src/BlazorAdmin/Services/CatalogBrandServices/List.cs
similarity index 88%
rename from src/BlazorAdmin/Services/CatalogBrandService/List.cs
rename to src/BlazorAdmin/Services/CatalogBrandServices/List.cs
index be4cd68..2cc2dec 100644
--- a/src/BlazorAdmin/Services/CatalogBrandService/List.cs
+++ b/src/BlazorAdmin/Services/CatalogBrandServices/List.cs
@@ -5,7 +5,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
using Newtonsoft.Json;
-namespace BlazorAdmin.Services.CatalogBrandService
+namespace BlazorAdmin.Services.CatalogBrandServices
{
public class List
{
@@ -26,7 +26,7 @@ namespace BlazorAdmin.Services.CatalogBrandService
try
{
- var result = (await _authService.GetHttpClient().GetAsync($"{Constants.API_URL}catalog-brands"));
+ var result = await _authService.HttpGet("catalog-brands");
if (result.StatusCode != HttpStatusCode.OK)
{
return brands;
diff --git a/src/BlazorAdmin/Services/CatalogItemService/CatalogItem.cs b/src/BlazorAdmin/Services/CatalogItemServices/CatalogItem.cs
similarity index 93%
rename from src/BlazorAdmin/Services/CatalogItemService/CatalogItem.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/CatalogItem.cs
index 5be1da1..d47c53e 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/CatalogItem.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/CatalogItem.cs
@@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations;
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class CatalogItem
{
diff --git a/src/BlazorAdmin/Services/CatalogItemService/Create.CreateCatalogItemRequest.cs b/src/BlazorAdmin/Services/CatalogItemServices/Create.CreateCatalogItemRequest.cs
similarity index 93%
rename from src/BlazorAdmin/Services/CatalogItemService/Create.CreateCatalogItemRequest.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/Create.CreateCatalogItemRequest.cs
index 377ded0..b9d09cb 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/Create.CreateCatalogItemRequest.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/Create.CreateCatalogItemRequest.cs
@@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations;
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class CreateCatalogItemRequest
{
diff --git a/src/BlazorAdmin/Services/CatalogItemService/Create.CreateCatalogItemResult.cs b/src/BlazorAdmin/Services/CatalogItemServices/Create.CreateCatalogItemResult.cs
similarity index 81%
rename from src/BlazorAdmin/Services/CatalogItemService/Create.CreateCatalogItemResult.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/Create.CreateCatalogItemResult.cs
index 71d68fe..f76fe3f 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/Create.CreateCatalogItemResult.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/Create.CreateCatalogItemResult.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class CreateCatalogItemResult
{
diff --git a/src/BlazorAdmin/Services/CatalogItemService/Create.cs b/src/BlazorAdmin/Services/CatalogItemServices/Create.cs
similarity index 69%
rename from src/BlazorAdmin/Services/CatalogItemService/Create.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/Create.cs
index ac37d82..67e4abe 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/Create.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/Create.cs
@@ -1,10 +1,8 @@
using System.Net;
-using System.Net.Http;
-using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class Create
{
@@ -19,9 +17,7 @@ namespace BlazorAdmin.Services.CatalogItemService
{
var catalogItemResult = new CatalogItem();
- var content = new StringContent(JsonConvert.SerializeObject(catalogItem), Encoding.UTF8, "application/json");
-
- var result = await _authService.GetHttpClient().PostAsync($"{Constants.API_URL}catalog-items", content);
+ var result = await _authService.HttpPost("catalog-items", catalogItem);
if (result.StatusCode != HttpStatusCode.OK)
{
return catalogItemResult;
diff --git a/src/BlazorAdmin/Services/CatalogItemService/Delete.DeleteCatalogItemResult.cs b/src/BlazorAdmin/Services/CatalogItemServices/Delete.DeleteCatalogItemResult.cs
similarity index 67%
rename from src/BlazorAdmin/Services/CatalogItemService/Delete.DeleteCatalogItemResult.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/Delete.DeleteCatalogItemResult.cs
index 4b66e4e..8436815 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/Delete.DeleteCatalogItemResult.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/Delete.DeleteCatalogItemResult.cs
@@ -1,4 +1,4 @@
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class DeleteCatalogItemResult
{
diff --git a/src/BlazorAdmin/Services/CatalogItemService/Delete.cs b/src/BlazorAdmin/Services/CatalogItemServices/Delete.cs
similarity index 80%
rename from src/BlazorAdmin/Services/CatalogItemService/Delete.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/Delete.cs
index ce74c67..eb20182 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/Delete.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/Delete.cs
@@ -2,7 +2,7 @@
using System.Threading.Tasks;
using Newtonsoft.Json;
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class Delete
{
@@ -17,7 +17,7 @@ namespace BlazorAdmin.Services.CatalogItemService
{
var catalogItemResult = string.Empty;
- var result = await _authService.GetHttpClient().DeleteAsync($"{Constants.API_URL}catalog-items/{catalogItemId}");
+ var result = await _authService.HttpDelete("catalog-items", catalogItemId);
if (result.StatusCode != HttpStatusCode.OK)
{
return catalogItemResult;
diff --git a/src/BlazorAdmin/Services/CatalogItemService/Edit.EditCatalogItemResult.cs b/src/BlazorAdmin/Services/CatalogItemServices/Edit.EditCatalogItemResult.cs
similarity index 70%
rename from src/BlazorAdmin/Services/CatalogItemService/Edit.EditCatalogItemResult.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/Edit.EditCatalogItemResult.cs
index fb17b93..9f303eb 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/Edit.EditCatalogItemResult.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/Edit.EditCatalogItemResult.cs
@@ -1,4 +1,4 @@
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class EditCatalogItemResult
{
diff --git a/src/BlazorAdmin/Services/CatalogItemService/Edit.cs b/src/BlazorAdmin/Services/CatalogItemServices/Edit.cs
similarity index 68%
rename from src/BlazorAdmin/Services/CatalogItemService/Edit.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/Edit.cs
index d80f19c..98484f2 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/Edit.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/Edit.cs
@@ -1,10 +1,8 @@
using System.Net;
-using System.Net.Http;
-using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class Edit
{
@@ -19,9 +17,7 @@ namespace BlazorAdmin.Services.CatalogItemService
{
var catalogItemResult = new CatalogItem();
- var content = new StringContent(JsonConvert.SerializeObject(catalogItem), Encoding.UTF8, "application/json");
-
- var result = await _authService.GetHttpClient().PutAsync($"{Constants.API_URL}catalog-items", content);
+ var result = await _authService.HttpPut("catalog-items", catalogItem);
if (result.StatusCode != HttpStatusCode.OK)
{
return catalogItemResult;
diff --git a/src/BlazorAdmin/Services/CatalogItemService/GetById.GetByIdCatalogItemResult.cs b/src/BlazorAdmin/Services/CatalogItemServices/GetById.GetByIdCatalogItemResult.cs
similarity index 70%
rename from src/BlazorAdmin/Services/CatalogItemService/GetById.GetByIdCatalogItemResult.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/GetById.GetByIdCatalogItemResult.cs
index 5c9b7a8..e7e9f1d 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/GetById.GetByIdCatalogItemResult.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/GetById.GetByIdCatalogItemResult.cs
@@ -1,4 +1,4 @@
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class GetByIdCatalogItemResult
{
diff --git a/src/BlazorAdmin/Services/CatalogItemService/GetById.cs b/src/BlazorAdmin/Services/CatalogItemServices/GetById.cs
similarity index 80%
rename from src/BlazorAdmin/Services/CatalogItemService/GetById.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/GetById.cs
index 9539fb7..ee1907a 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/GetById.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/GetById.cs
@@ -2,7 +2,7 @@
using System.Threading.Tasks;
using Newtonsoft.Json;
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class GetById
{
@@ -17,7 +17,7 @@ namespace BlazorAdmin.Services.CatalogItemService
{
var catalogItemResult = new CatalogItem();
- var result = await _authService.GetHttpClient().GetAsync($"{Constants.API_URL}catalog-items/{catalogItemId}");
+ var result = await _authService.HttpGet($"catalog-items/{catalogItemId}");
if (result.StatusCode != HttpStatusCode.OK)
{
return catalogItemResult;
diff --git a/src/BlazorAdmin/Services/CatalogItemService/ListPaged.PagedCatalogItemResult.cs b/src/BlazorAdmin/Services/CatalogItemServices/ListPaged.PagedCatalogItemResult.cs
similarity index 81%
rename from src/BlazorAdmin/Services/CatalogItemService/ListPaged.PagedCatalogItemResult.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/ListPaged.PagedCatalogItemResult.cs
index e1217c1..531e78a 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/ListPaged.PagedCatalogItemResult.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/ListPaged.PagedCatalogItemResult.cs
@@ -1,6 +1,6 @@
using System.Collections.Generic;
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class PagedCatalogItemResult
{
diff --git a/src/BlazorAdmin/Services/CatalogItemService/ListPaged.cs b/src/BlazorAdmin/Services/CatalogItemServices/ListPaged.cs
similarity index 80%
rename from src/BlazorAdmin/Services/CatalogItemService/ListPaged.cs
rename to src/BlazorAdmin/Services/CatalogItemServices/ListPaged.cs
index 25e63e0..3db843d 100644
--- a/src/BlazorAdmin/Services/CatalogItemService/ListPaged.cs
+++ b/src/BlazorAdmin/Services/CatalogItemServices/ListPaged.cs
@@ -3,7 +3,7 @@ using System.Net;
using System.Threading.Tasks;
using Newtonsoft.Json;
-namespace BlazorAdmin.Services.CatalogItemService
+namespace BlazorAdmin.Services.CatalogItemServices
{
public class ListPaged
{
@@ -18,7 +18,7 @@ namespace BlazorAdmin.Services.CatalogItemService
{
var catalogItems = new List();
- var result = (await _authService.GetHttpClient().GetAsync($"{Constants.API_URL}catalog-items?PageSize={pageSize}"));
+ var result = await _authService.HttpGet($"catalog-items?PageSize={pageSize}");
if (result.StatusCode != HttpStatusCode.OK)
{
return catalogItems;
diff --git a/src/BlazorAdmin/Services/CatalogTypeService/List.CatalogType.cs b/src/BlazorAdmin/Services/CatalogTypeServices/List.CatalogType.cs
similarity index 69%
rename from src/BlazorAdmin/Services/CatalogTypeService/List.CatalogType.cs
rename to src/BlazorAdmin/Services/CatalogTypeServices/List.CatalogType.cs
index 370e9c4..0a22de3 100644
--- a/src/BlazorAdmin/Services/CatalogTypeService/List.CatalogType.cs
+++ b/src/BlazorAdmin/Services/CatalogTypeServices/List.CatalogType.cs
@@ -1,4 +1,4 @@
-namespace BlazorAdmin.Services.CatalogTypeService
+namespace BlazorAdmin.Services.CatalogTypeServices
{
public class CatalogType
{
diff --git a/src/BlazorAdmin/Services/CatalogTypeService/List.CatalogTypeResult.cs b/src/BlazorAdmin/Services/CatalogTypeServices/List.CatalogTypeResult.cs
similarity index 77%
rename from src/BlazorAdmin/Services/CatalogTypeService/List.CatalogTypeResult.cs
rename to src/BlazorAdmin/Services/CatalogTypeServices/List.CatalogTypeResult.cs
index a5c8721..a897967 100644
--- a/src/BlazorAdmin/Services/CatalogTypeService/List.CatalogTypeResult.cs
+++ b/src/BlazorAdmin/Services/CatalogTypeServices/List.CatalogTypeResult.cs
@@ -1,6 +1,6 @@
using System.Collections.Generic;
-namespace BlazorAdmin.Services.CatalogTypeService
+namespace BlazorAdmin.Services.CatalogTypeServices
{
public class CatalogTypeResult
{
diff --git a/src/BlazorAdmin/Services/CatalogTypeService/List.cs b/src/BlazorAdmin/Services/CatalogTypeServices/List.cs
similarity index 88%
rename from src/BlazorAdmin/Services/CatalogTypeService/List.cs
rename to src/BlazorAdmin/Services/CatalogTypeServices/List.cs
index f23b101..7512a66 100644
--- a/src/BlazorAdmin/Services/CatalogTypeService/List.cs
+++ b/src/BlazorAdmin/Services/CatalogTypeServices/List.cs
@@ -5,7 +5,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
using Newtonsoft.Json;
-namespace BlazorAdmin.Services.CatalogTypeService
+namespace BlazorAdmin.Services.CatalogTypeServices
{
public class List
{
@@ -27,7 +27,7 @@ namespace BlazorAdmin.Services.CatalogTypeService
try
{
- var result = (await _authService.GetHttpClient().GetAsync($"{Constants.API_URL}catalog-types"));
+ var result = await _authService.HttpGet("catalog-types");
if (result.StatusCode != HttpStatusCode.OK)
{
return types;
diff --git a/src/BlazorAdmin/Shared/MainLayout.razor b/src/BlazorAdmin/Shared/MainLayout.razor
index aa39334..c9438fa 100644
--- a/src/BlazorAdmin/Shared/MainLayout.razor
+++ b/src/BlazorAdmin/Shared/MainLayout.razor
@@ -3,7 +3,7 @@
@inherits BlazorAdmin.Helpers.BlazorLayoutComponent
-
+
diff --git a/src/BlazorAdmin/Shared/NavMenu.razor b/src/BlazorAdmin/Shared/NavMenu.razor
index 0688581..129eb57 100644
--- a/src/BlazorAdmin/Shared/NavMenu.razor
+++ b/src/BlazorAdmin/Shared/NavMenu.razor
@@ -27,12 +27,6 @@
Logout
}
- else
- {
-
- Login
-
- }
diff --git a/src/BlazorAdmin/Shared/RedirectToLogin.razor b/src/BlazorAdmin/Shared/RedirectToLogin.razor
index 8a2ba84..810a66e 100644
--- a/src/BlazorAdmin/Shared/RedirectToLogin.razor
+++ b/src/BlazorAdmin/Shared/RedirectToLogin.razor
@@ -4,6 +4,6 @@
protected override void OnInitialized()
{
Navigation.NavigateTo($"Identity/Account/Login?returnUrl=" +
- Uri.EscapeDataString(Navigation.Uri));
+ $"/{Uri.EscapeDataString(Navigation.ToBaseRelativePath(Navigation.Uri))}");
}
}
\ No newline at end of file
diff --git a/src/BlazorAdmin/_Imports.razor b/src/BlazorAdmin/_Imports.razor
index b45b7ad..cd87be6 100644
--- a/src/BlazorAdmin/_Imports.razor
+++ b/src/BlazorAdmin/_Imports.razor
@@ -7,11 +7,12 @@
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
+@using Microsoft.Extensions.Logging
@using BlazorAdmin
@using BlazorAdmin.Shared
@using BlazorAdmin.Services
-@using BlazorAdmin.Services.CatalogBrandService
-@using BlazorAdmin.Services.CatalogItemService
-@using BlazorAdmin.Services.CatalogTypeService
-@using Microsoft.Extensions.Logging
+@using BlazorAdmin.Services.CatalogBrandServices
+@using BlazorAdmin.Services.CatalogItemServices
+@using BlazorAdmin.Services.CatalogTypeServices
@using BlazorAdmin.JavaScript
+@using BlazorShared.Authorization
diff --git a/src/BlazorAdmin/wwwroot/css/admin.css b/src/BlazorAdmin/wwwroot/css/admin.css
index dc8ed72..a76546c 100644
--- a/src/BlazorAdmin/wwwroot/css/admin.css
+++ b/src/BlazorAdmin/wwwroot/css/admin.css
@@ -145,6 +145,11 @@ admin {
height: auto;
}
+.esh-picture {
+ height: 100%;
+ width: 100%;
+}
+
@media (max-width: 767.98px) {
.main .top-row:not(.auth) {
display: none;
diff --git a/src/Shared/Authorization/ClaimValue.cs b/src/BlazorShared/Authorization/ClaimValue.cs
similarity index 88%
rename from src/Shared/Authorization/ClaimValue.cs
rename to src/BlazorShared/Authorization/ClaimValue.cs
index 249507d..963da22 100644
--- a/src/Shared/Authorization/ClaimValue.cs
+++ b/src/BlazorShared/Authorization/ClaimValue.cs
@@ -1,4 +1,4 @@
-namespace Shared.Authorization
+namespace BlazorShared.Authorization
{
public class ClaimValue
{
diff --git a/src/BlazorShared/Authorization/Constants.cs b/src/BlazorShared/Authorization/Constants.cs
new file mode 100644
index 0000000..b7120fd
--- /dev/null
+++ b/src/BlazorShared/Authorization/Constants.cs
@@ -0,0 +1,25 @@
+namespace BlazorShared.Authorization
+{
+ public static class Constants
+ {
+ public static class Roles
+ {
+ public const string ADMINISTRATORS = "Administrators";
+ }
+ public static string GetApiUrl(bool inDocker) =>
+ inDocker ? DOCKER_API_URL : API_URL;
+
+ public static string GetWebUrl(bool inDocker) =>
+ inDocker ? DOCKER_WEB_URL : WEB_URL;
+
+ public static string GetOriginWebUrl(bool inDocker) =>
+ GetWebUrl(inDocker).TrimEnd('/');
+
+ private const string API_URL = "https://localhost:5099/api/";
+ private const string DOCKER_API_URL = "http://localhost:5200/api/";
+
+ private const string WEB_URL = "https://localhost:44315/";
+ private const string DOCKER_WEB_URL = "http://localhost:5106/";
+
+ }
+}
diff --git a/src/Shared/Authorization/UserInfo.cs b/src/BlazorShared/Authorization/UserInfo.cs
similarity index 90%
rename from src/Shared/Authorization/UserInfo.cs
rename to src/BlazorShared/Authorization/UserInfo.cs
index bdf5c29..19cbd11 100644
--- a/src/Shared/Authorization/UserInfo.cs
+++ b/src/BlazorShared/Authorization/UserInfo.cs
@@ -1,6 +1,6 @@
using System.Collections.Generic;
-namespace Shared.Authorization
+namespace BlazorShared.Authorization
{
public class UserInfo
{
diff --git a/src/BlazorShared/BlazorShared.csproj b/src/BlazorShared/BlazorShared.csproj
new file mode 100644
index 0000000..07b614b
--- /dev/null
+++ b/src/BlazorShared/BlazorShared.csproj
@@ -0,0 +1,9 @@
+
+
+
+ netstandard2.0
+ BlazorShared
+ BlazorShared
+
+
+
diff --git a/src/Infrastructure/Identity/AppIdentityDbContextSeed.cs b/src/Infrastructure/Identity/AppIdentityDbContextSeed.cs
index 3664fe1..e30edcd 100644
--- a/src/Infrastructure/Identity/AppIdentityDbContextSeed.cs
+++ b/src/Infrastructure/Identity/AppIdentityDbContextSeed.cs
@@ -8,7 +8,7 @@ namespace Microsoft.eShopWeb.Infrastructure.Identity
{
public static async Task SeedAsync(UserManager userManager, RoleManager roleManager)
{
- await roleManager.CreateAsync(new IdentityRole(AuthorizationConstants.Roles.ADMINISTRATORS));
+ await roleManager.CreateAsync(new IdentityRole(BlazorShared.Authorization.Constants.Roles.ADMINISTRATORS));
var defaultUser = new ApplicationUser { UserName = "demouser@microsoft.com", Email = "demouser@microsoft.com" };
await userManager.CreateAsync(defaultUser, AuthorizationConstants.DEFAULT_PASSWORD);
@@ -17,7 +17,7 @@ namespace Microsoft.eShopWeb.Infrastructure.Identity
var adminUser = new ApplicationUser { UserName = adminUserName, Email = adminUserName };
await userManager.CreateAsync(adminUser, AuthorizationConstants.DEFAULT_PASSWORD);
adminUser = await userManager.FindByNameAsync(adminUserName);
- await userManager.AddToRoleAsync(adminUser, AuthorizationConstants.Roles.ADMINISTRATORS);
+ await userManager.AddToRoleAsync(adminUser, BlazorShared.Authorization.Constants.Roles.ADMINISTRATORS);
}
}
}
diff --git a/src/PublicApi/CatalogItemEndpoints/Create.cs b/src/PublicApi/CatalogItemEndpoints/Create.cs
index e3c31d8..c2e828b 100644
--- a/src/PublicApi/CatalogItemEndpoints/Create.cs
+++ b/src/PublicApi/CatalogItemEndpoints/Create.cs
@@ -11,7 +11,7 @@ using System.Threading.Tasks;
namespace Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints
{
- [Authorize(Roles = AuthorizationConstants.Roles.ADMINISTRATORS, AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
+ [Authorize(Roles = BlazorShared.Authorization.Constants.Roles.ADMINISTRATORS, AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class Create : BaseAsyncEndpoint
{
private readonly IAsyncRepository _itemRepository;
diff --git a/src/PublicApi/CatalogItemEndpoints/Delete.cs b/src/PublicApi/CatalogItemEndpoints/Delete.cs
index ed3c712..010e06a 100644
--- a/src/PublicApi/CatalogItemEndpoints/Delete.cs
+++ b/src/PublicApi/CatalogItemEndpoints/Delete.cs
@@ -10,7 +10,7 @@ using System.Threading.Tasks;
namespace Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints
{
- [Authorize(Roles = AuthorizationConstants.Roles.ADMINISTRATORS, AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
+ [Authorize(Roles = BlazorShared.Authorization.Constants.Roles.ADMINISTRATORS, AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class Delete : BaseAsyncEndpoint
{
private readonly IAsyncRepository _itemRepository;
diff --git a/src/PublicApi/CatalogItemEndpoints/Update.cs b/src/PublicApi/CatalogItemEndpoints/Update.cs
index fe8cd96..8c97e06 100644
--- a/src/PublicApi/CatalogItemEndpoints/Update.cs
+++ b/src/PublicApi/CatalogItemEndpoints/Update.cs
@@ -12,7 +12,7 @@ using System.Threading.Tasks;
namespace Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints
{
- [Authorize(Roles = AuthorizationConstants.Roles.ADMINISTRATORS, AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
+ [Authorize(Roles = BlazorShared.Authorization.Constants.Roles.ADMINISTRATORS, AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class Update : BaseAsyncEndpoint
{
private readonly IAsyncRepository _itemRepository;
diff --git a/src/PublicApi/Startup.cs b/src/PublicApi/Startup.cs
index 9d65a13..9f56333 100644
--- a/src/PublicApi/Startup.cs
+++ b/src/PublicApi/Startup.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Text;
using AutoMapper;
+using BlazorShared.Authorization;
using MediatR;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
@@ -25,6 +26,8 @@ namespace Microsoft.eShopWeb.PublicApi
public class Startup
{
private const string CORS_POLICY = "CorsPolicy";
+ public static bool InDocker => Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true";
+
public Startup(IConfiguration configuration)
{
Configuration = configuration;
@@ -114,8 +117,7 @@ namespace Microsoft.eShopWeb.PublicApi
{
builder.WithOrigins("http://localhost:44319",
"https://localhost:44319",
- "http://localhost:44315",
- "https://localhost:44315");
+ Constants.GetOriginWebUrl(InDocker));
builder.AllowAnyMethod();
builder.AllowAnyHeader();
});
diff --git a/src/Shared/Shared.csproj b/src/Shared/Shared.csproj
deleted file mode 100644
index 9f5c4f4..0000000
--- a/src/Shared/Shared.csproj
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- netstandard2.0
-
-
-
diff --git a/src/Web/Areas/Identity/Pages/Account/Login.cshtml.cs b/src/Web/Areas/Identity/Pages/Account/Login.cshtml.cs
index 4a357b0..4c775f6 100644
--- a/src/Web/Areas/Identity/Pages/Account/Login.cshtml.cs
+++ b/src/Web/Areas/Identity/Pages/Account/Login.cshtml.cs
@@ -89,7 +89,7 @@ namespace Microsoft.eShopWeb.Web.Areas.Identity.Pages.Account
if (result.Succeeded)
{
var token = await _tokenClaimsService.GetTokenAsync(Input.Email);
- CreateAuthCookie(Input.Email, token);
+ CreateAuthCookie(Input.Email, token, Startup.InDocker);
_logger.LogInformation("User logged in.");
await TransferAnonymousBasketToUserAsync(Input.Email);
return LocalRedirect(returnUrl);
@@ -114,12 +114,13 @@ namespace Microsoft.eShopWeb.Web.Areas.Identity.Pages.Account
return Page();
}
- private void CreateAuthCookie(string username, string token)
+ private void CreateAuthCookie(string username, string token, bool inDocker)
{
var cookieOptions = new CookieOptions();
cookieOptions.Expires = DateTime.Today.AddYears(10);
Response.Cookies.Append("token", token, cookieOptions);
Response.Cookies.Append("username", username, cookieOptions);
+ Response.Cookies.Append("inDocker", inDocker.ToString(), cookieOptions);
}
private async Task TransferAnonymousBasketToUserAsync(string userName)
diff --git a/src/Web/Configuration/ConfigureCookieSettings.cs b/src/Web/Configuration/ConfigureCookieSettings.cs
index d17f2c5..69515b4 100644
--- a/src/Web/Configuration/ConfigureCookieSettings.cs
+++ b/src/Web/Configuration/ConfigureCookieSettings.cs
@@ -7,14 +7,14 @@ namespace Microsoft.eShopWeb.Web.Configuration
{
public static class ConfigureCookieSettings
{
- public static void Configure(IServiceCollection services)
+ public static IServiceCollection AddCookieSettings(this IServiceCollection services)
{
services.Configure(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
//TODO need to check that.
//options.CheckConsentNeeded = context => true;
- options.MinimumSameSitePolicy = SameSiteMode.None;
+ options.MinimumSameSitePolicy = SameSiteMode.Strict;
});
services.ConfigureApplicationCookie(options =>
{
@@ -27,6 +27,8 @@ namespace Microsoft.eShopWeb.Web.Configuration
IsEssential = true // required for auth to work without explicit user consent; adjust to suit your privacy policy
};
});
+
+ return services;
}
}
}
diff --git a/src/Web/Configuration/ConfigureCoreServices.cs b/src/Web/Configuration/ConfigureCoreServices.cs
index 8284297..039e13a 100644
--- a/src/Web/Configuration/ConfigureCoreServices.cs
+++ b/src/Web/Configuration/ConfigureCoreServices.cs
@@ -10,7 +10,7 @@ namespace Microsoft.eShopWeb.Web.Configuration
{
public static class ConfigureCoreServices
{
- public static void Configure(IServiceCollection services, IConfiguration configuration)
+ public static IServiceCollection AddCoreServices(this IServiceCollection services, IConfiguration configuration)
{
services.AddScoped(typeof(IAsyncRepository<>), typeof(EfRepository<>));
services.AddScoped();
@@ -19,6 +19,8 @@ namespace Microsoft.eShopWeb.Web.Configuration
services.AddSingleton(new UriComposer(configuration.Get()));
services.AddScoped(typeof(IAppLogger<>), typeof(LoggerAdapter<>));
services.AddTransient();
+
+ return services;
}
}
}
diff --git a/src/Web/Configuration/ConfigureWebServices.cs b/src/Web/Configuration/ConfigureWebServices.cs
index 92da237..87030d5 100644
--- a/src/Web/Configuration/ConfigureWebServices.cs
+++ b/src/Web/Configuration/ConfigureWebServices.cs
@@ -8,7 +8,7 @@ namespace Microsoft.eShopWeb.Web.Configuration
{
public static class ConfigureWebServices
{
- public static void Configure(IServiceCollection services, IConfiguration configuration)
+ public static IServiceCollection AddWebServices(this IServiceCollection services, IConfiguration configuration)
{
services.AddMediatR(typeof(BasketViewModelService).Assembly);
services.AddScoped();
@@ -16,6 +16,8 @@ namespace Microsoft.eShopWeb.Web.Configuration
services.AddScoped();
services.Configure(configuration);
services.AddScoped();
+
+ return services;
}
}
}
diff --git a/src/Web/Controllers/UserController.cs b/src/Web/Controllers/UserController.cs
index 7c11ebc..eedce15 100644
--- a/src/Web/Controllers/UserController.cs
+++ b/src/Web/Controllers/UserController.cs
@@ -3,7 +3,7 @@ using System.Linq;
using System.Security.Claims;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
-using Shared.Authorization;
+using BlazorShared.Authorization;
namespace Microsoft.eShopWeb.Web.Controllers
{
diff --git a/src/Web/Pages/Admin/EditCatalogItem.cshtml.cs b/src/Web/Pages/Admin/EditCatalogItem.cshtml.cs
index 6e1a7fe..686114d 100644
--- a/src/Web/Pages/Admin/EditCatalogItem.cshtml.cs
+++ b/src/Web/Pages/Admin/EditCatalogItem.cshtml.cs
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace Microsoft.eShopWeb.Web.Pages.Admin
{
- [Authorize(Roles = AuthorizationConstants.Roles.ADMINISTRATORS)]
+ [Authorize(Roles = BlazorShared.Authorization.Constants.Roles.ADMINISTRATORS)]
public class EditCatalogItemModel : PageModel
{
private readonly ICatalogItemViewModelService _catalogItemViewModelService;
diff --git a/src/Web/Pages/Admin/Index.cshtml.cs b/src/Web/Pages/Admin/Index.cshtml.cs
index 4328bb8..52a9617 100644
--- a/src/Web/Pages/Admin/Index.cshtml.cs
+++ b/src/Web/Pages/Admin/Index.cshtml.cs
@@ -9,7 +9,7 @@ using System.Threading.Tasks;
namespace Microsoft.eShopWeb.Web.Pages.Admin
{
- [Authorize(Roles = AuthorizationConstants.Roles.ADMINISTRATORS)]
+ [Authorize(Roles = BlazorShared.Authorization.Constants.Roles.ADMINISTRATORS)]
public class IndexModel : PageModel
{
public IndexModel()
diff --git a/src/Web/Startup.cs b/src/Web/Startup.cs
index 83e9231..f543879 100644
--- a/src/Web/Startup.cs
+++ b/src/Web/Startup.cs
@@ -15,14 +15,14 @@ using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.Mime;
using BlazorAdmin.Services;
using Blazored.LocalStorage;
-using Microsoft.AspNetCore.Components;
-using Microsoft.CodeAnalysis.CSharp.Syntax;
-using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Authentication.Cookies;
+using Microsoft.AspNetCore.DataProtection;
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
namespace Microsoft.eShopWeb.Web
@@ -30,6 +30,8 @@ namespace Microsoft.eShopWeb.Web
public class Startup
{
private IServiceCollection _services;
+ public static bool InDocker => Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true";
+
public Startup(IConfiguration configuration)
{
Configuration = configuration;
@@ -83,7 +85,22 @@ namespace Microsoft.eShopWeb.Web
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
- ConfigureCookieSettings.Configure(services);
+ services.AddCookieSettings();
+
+ if (InDocker)
+ {
+ services.AddDataProtection()
+ .SetApplicationName("eshopwebmvc")
+ .PersistKeysToFileSystem(new DirectoryInfo(@"./"));
+ }
+
+ services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
+ .AddCookie(options =>
+ {
+ options.Cookie.HttpOnly = true;
+ options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
+ options.Cookie.SameSite = SameSiteMode.Lax;
+ });
services.AddIdentity()
.AddDefaultUI()
@@ -92,8 +109,8 @@ namespace Microsoft.eShopWeb.Web
services.AddScoped();
- ConfigureCoreServices.Configure(services, Configuration);
- ConfigureWebServices.Configure(services, Configuration);
+ services.AddCoreServices(Configuration);
+ services.AddWebServices(Configuration);
// Add memory cache services
services.AddMemoryCache();
@@ -124,15 +141,9 @@ namespace Microsoft.eShopWeb.Web
});
// Blazor Admin Required Services for Prerendering
- services.AddScoped(s =>
+ services.AddScoped(s => new HttpClient
{
- var navigationManager = s.GetRequiredService();
- return new HttpClient
- {
- //TODO need to do it well
- BaseAddress = new Uri("https://localhost:44315/")
- //BaseAddress = new Uri(navigationManager.BaseUri)
- };
+ BaseAddress = new Uri(BlazorShared.Authorization.Constants.GetWebUrl(InDocker))
});
services.AddBlazoredLocalStorage();
@@ -197,6 +208,7 @@ namespace Microsoft.eShopWeb.Web
endpoints.MapFallbackToFile("index.html");
});
}
+
}
}
\ No newline at end of file
diff --git a/src/Web/Web.csproj b/src/Web/Web.csproj
index 76547c3..74ea66b 100644
--- a/src/Web/Web.csproj
+++ b/src/Web/Web.csproj
@@ -51,8 +51,8 @@
+
-