merge
This commit is contained in:
commit
ac62ed0bd5
|
|
@ -1,4 +1,6 @@
|
||||||
using TIAMWebApp.Shared.Application.Interfaces;
|
using TIAMWebApp.Shared.Application.Interfaces;
|
||||||
|
using TIAMWebApp.Shared.Application.Services;
|
||||||
|
|
||||||
namespace TIAMMobileApp.Services
|
namespace TIAMMobileApp.Services
|
||||||
{
|
{
|
||||||
public class ComponentUpdateServiceMobile : ComponentUpdateServiceBase
|
public class ComponentUpdateServiceMobile : ComponentUpdateServiceBase
|
||||||
|
|
|
||||||
|
|
@ -2,44 +2,24 @@
|
||||||
using TIAM.Core.Consts;
|
using TIAM.Core.Consts;
|
||||||
using TIAM.Entities.Products;
|
using TIAM.Entities.Products;
|
||||||
using TIAM.Entities.Users;
|
using TIAM.Entities.Users;
|
||||||
|
using TIAM.Models;
|
||||||
using TIAMWebApp.Shared.Application.Interfaces;
|
using TIAMWebApp.Shared.Application.Interfaces;
|
||||||
using TIAMWebApp.Shared.Application.Models;
|
using TIAMWebApp.Shared.Application.Models;
|
||||||
|
using TIAMWebApp.Shared.Application.Services;
|
||||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||||
|
|
||||||
namespace TIAMMobileApp.Services
|
namespace TIAMMobileApp.Services
|
||||||
{
|
{
|
||||||
public class SessionServiceMobile : ISessionService
|
public class SessionServiceMobile : SessionServiceClientBase
|
||||||
{
|
{
|
||||||
public string? SessionId { get; set; }
|
public override List<Product> GetHotels()
|
||||||
public UserSessionModel? User { get; set; }
|
|
||||||
public IPAddress? IPAddress { get; set; }
|
|
||||||
public bool IsAuthenticated { get; set; } = false;
|
|
||||||
public bool HasCompany { get; set; } = false;
|
|
||||||
public bool IsDriver { get; set; } = false;
|
|
||||||
public bool IsDevAdmin { get; set; } = false;
|
|
||||||
public bool IsSysAdmin { get; set; } = false;
|
|
||||||
public List<Product> GetHotels()
|
|
||||||
{
|
{
|
||||||
if (User.UserModelDto.Products.Count > 0)
|
return base.GetHotels();
|
||||||
{
|
|
||||||
return User.UserModelDto.Products.Where(x => x.ProductType == TIAM.Core.Enums.ProductType.Hotel).ToList();
|
|
||||||
}
|
|
||||||
else return new List<Product>();
|
|
||||||
}
|
|
||||||
public Guid DriverPersmissionId { get; set; } = Guid.Empty;
|
|
||||||
|
|
||||||
public async Task ClearAll()
|
|
||||||
{
|
|
||||||
SessionId = "";
|
|
||||||
User = null;
|
|
||||||
IPAddress = null;
|
|
||||||
IsAuthenticated = false;
|
|
||||||
HasCompany = false;
|
|
||||||
IsDriver = false;
|
|
||||||
IsDevAdmin = false;
|
|
||||||
IsSysAdmin = false;
|
|
||||||
DriverPersmissionId = Guid.Empty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void ClearAll()
|
||||||
|
{
|
||||||
|
base.ClearAll();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,393 +17,7 @@ using TIAMWebApp.Shared.Application.Utility;
|
||||||
|
|
||||||
namespace TIAMMobileApp.Services
|
namespace TIAMMobileApp.Services
|
||||||
{
|
{
|
||||||
public class UserDataServiceMobile : IUserDataService
|
public class UserDataServiceMobile(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable<IAcLogWriterClientBase> logWriters)
|
||||||
{
|
: UserDataServiceClientBase(http, sessionService, secureStorageHandler, serviceProviderDataService, logWriters);
|
||||||
private readonly HttpClient _http;
|
|
||||||
private readonly SiteViewModel _siteViewModel;
|
|
||||||
private readonly ISecureStorageHandler _secureStorageHandler;
|
|
||||||
private readonly IServiceProviderDataService _serviceProviderDataService;
|
|
||||||
private readonly LoggerClient<UserDataServiceMobile> _logger;
|
|
||||||
|
|
||||||
|
|
||||||
public UserDataServiceMobile(HttpClient http, SiteViewModel siteViewModel, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable<IAcLogWriterClientBase> logWriters)
|
|
||||||
{
|
|
||||||
_http = http;
|
|
||||||
_secureStorageHandler = secureStorageHandler;
|
|
||||||
_siteViewModel = siteViewModel;
|
|
||||||
|
|
||||||
//this._browserConsoleLogWriter = new BrowserConsoleLogWriter(jsRuntime);
|
|
||||||
_serviceProviderDataService = serviceProviderDataService;
|
|
||||||
_logger = new LoggerClient<UserDataServiceMobile>(logWriters.ToArray());
|
|
||||||
//_logger = new TIAM.Core.Loggers.Logger<UserDataServiceWeb>(AppType.Web, LogLevel.Info, logWriters.ToArray());
|
|
||||||
//_logger = new TIAM.Core.Loggers.Logger<UserDataServiceWeb>(AppType.Web, LogLevel.Info, logWriter);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<UserSessionModel> IsLoggedInAsync(Guid id)
|
|
||||||
{
|
|
||||||
//api call to get user
|
|
||||||
var userModelDto = await GetUserDetailByIdAsync(id);
|
|
||||||
|
|
||||||
if (userModelDto != null)
|
|
||||||
{
|
|
||||||
Dictionary<Guid, string> userProperties = new Dictionary<Guid, string>();
|
|
||||||
//get user's properties
|
|
||||||
bool hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : userModelDto.ServiceProviders.Count == 0 ? false : false;
|
|
||||||
if (hasProperties)
|
|
||||||
{
|
|
||||||
|
|
||||||
//var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id);
|
|
||||||
var Properties = userModelDto.ServiceProviders;
|
|
||||||
|
|
||||||
_logger.Info($"{Properties.Count} properties found");
|
|
||||||
foreach ( var property in Properties )
|
|
||||||
{
|
|
||||||
userProperties.Add(property.Id, property.Name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//create user session model
|
|
||||||
var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, userProperties, 1);
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<string> TestUserApi(int Param)
|
|
||||||
{
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.UserTest}";
|
|
||||||
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, Param);
|
|
||||||
var result = await response.Content.ReadAsStringAsync();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<string> AuthenticateUser(LoginModel loginModel)
|
|
||||||
{
|
|
||||||
string result = string.Empty;
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}";
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, loginModel);
|
|
||||||
|
|
||||||
//try
|
|
||||||
//{
|
|
||||||
// Logger.Detail("Login started: " + "Email: " + loginModel.Email + ", Password: " + loginModel.Password);
|
|
||||||
//}
|
|
||||||
//catch (Exception ex)
|
|
||||||
//{
|
|
||||||
// _logger.Error(ex.Message, ex);
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
//result = await response.Content.ReadAsStringAsync();
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel)
|
|
||||||
{
|
|
||||||
|
|
||||||
bool isSuccess = true;
|
|
||||||
string result = string.Empty;
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}";
|
|
||||||
_logger.Info("CreateUser url: " + url);
|
|
||||||
var response = await _http.PostAsJsonAsync(url, regModel);
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
/*if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
isSuccess = true;
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isSuccess = false;
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
return (isSuccess, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel)
|
|
||||||
{
|
|
||||||
|
|
||||||
bool isSuccess = false;
|
|
||||||
string result = string.Empty;
|
|
||||||
UserModelDto? user = new UserModelDto();
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}";
|
|
||||||
_logger.Info("CreateGuestUser url: " + url);
|
|
||||||
var response = await _http.PostAsJsonAsync(url, regModel);
|
|
||||||
|
|
||||||
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
isSuccess = true;
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
_logger.Info("CreateGuestUser result: " + result);
|
|
||||||
user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isSuccess = false;
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
user = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return (isSuccess, user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<List<UserModelDto>?> GetUsersAsync()
|
|
||||||
{
|
|
||||||
return await _http.GetFromJsonAsync<List<UserModelDto>>(APIUrls.GetUsers);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<List<UserModelDtoDetail>?> GetUsersWithDetailsAsync()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUsersWithDetails}";
|
|
||||||
_logger.Info("GetUserByEmailAsync url: " + url + "!");
|
|
||||||
var response = await _http.GetFromJsonAsync<List<UserModelDtoDetail>>(APIUrls.GetUsersWithDetails);
|
|
||||||
//var result = await response.Content.ReadAsStringAsync();
|
|
||||||
//var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
|
||||||
return response;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<UserModelDto?> GetUserByEmailAsync(string email)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}/{email}";
|
|
||||||
_logger.Info("GetUserByEmailAsync url: " + url + ", " + email);
|
|
||||||
var response = await _http.GetAsync(url);
|
|
||||||
|
|
||||||
response.EnsureSuccessStatusCode();
|
|
||||||
if (response.Content != null)
|
|
||||||
{
|
|
||||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
|
||||||
var user = System.Text.Json.JsonSerializer.Deserialize<UserModelDto>(jsonResponse, new JsonSerializerOptions
|
|
||||||
{
|
|
||||||
PropertyNameCaseInsensitive = true
|
|
||||||
});
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (HttpRequestException httpRequestException)
|
|
||||||
{
|
|
||||||
// Handle specific HTTP request exceptions
|
|
||||||
_logger.DebugConditional($"Request error: {httpRequestException.Message}");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
// Handle other possible exceptions
|
|
||||||
_logger.DebugConditional($"An error occurred: {ex.Message}");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<UserModelDto?> GetUserByIdAsync(Guid id)
|
|
||||||
{
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}";
|
|
||||||
_logger.Info("GetUserByIdAsync url: " + url + ", " + id.ToString());
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, id);
|
|
||||||
var result = await response.Content.ReadAsStringAsync();
|
|
||||||
var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
|
||||||
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<UserModelDtoDetail?> GetUserDetailByIdAsync(Guid id)
|
|
||||||
{
|
|
||||||
_logger.Info("GetUserDetailByIdAsync", "GLOBAL_LOGGER");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}";
|
|
||||||
_logger.Info("GetUserDetailByIdAsync url: " + url + ", " + id.ToString());
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, id);
|
|
||||||
var result = await response.Content.ReadAsStringAsync();
|
|
||||||
var user = JsonConvert.DeserializeObject<UserModelDtoDetail>(result);
|
|
||||||
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> RefreshToken()
|
|
||||||
{
|
|
||||||
_logger.Info("RefreshToken() called");
|
|
||||||
bool isTokenRefreshed = false;
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.RefreshToken}";
|
|
||||||
//var url = APIUrls.RefreshToken;
|
|
||||||
|
|
||||||
var serializedStr = JsonConvert.SerializeObject(new AuthenticateRequestAndResponse
|
|
||||||
{
|
|
||||||
RefreshToken = Setting.UserBasicDetails.RefreshToken,
|
|
||||||
AccessToken = Setting.UserBasicDetails.AccessToken
|
|
||||||
});
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_logger.Info("Refreshtoken url: " + url);
|
|
||||||
var response = await _http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json"));
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
string contentStr = await response.Content.ReadAsStringAsync();
|
|
||||||
var mainResponse = JsonConvert.DeserializeObject<MainResponse>(contentStr);
|
|
||||||
if (mainResponse.IsSuccess)
|
|
||||||
{
|
|
||||||
var tokenDetails = JsonConvert.DeserializeObject<AuthenticateRequestAndResponse>(mainResponse.Content.ToString());
|
|
||||||
Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken;
|
|
||||||
Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken;
|
|
||||||
|
|
||||||
string userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails);
|
|
||||||
await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr);
|
|
||||||
isTokenRefreshed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
string msg = ex.Message;
|
|
||||||
_logger.Error("Refreshtoken exception: " + ex.Message, ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return isTokenRefreshed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> Logout(string refreshToken)
|
|
||||||
{
|
|
||||||
_logger.Info("Logout() called");
|
|
||||||
|
|
||||||
_siteViewModel.ClearAll();
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}";
|
|
||||||
bool result = false;
|
|
||||||
var response = await _http.PostAsJsonAsync(url, RefreshToken);
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
string resultMessage = await response.Content.ReadAsStringAsync();
|
|
||||||
_logger.Detail($"Logout response: {resultMessage}");
|
|
||||||
if (resultMessage == "OK")
|
|
||||||
{
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_logger.Detail($"Logout: {result}");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> SendForgottenPasswordMail(string emailAddress)
|
|
||||||
{
|
|
||||||
_logger.Info("SendForgottenPasswordMail() called");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendForgottenPasswordMail}";
|
|
||||||
var response = await _http.PostAsJsonAsync(url, emailAddress);
|
|
||||||
var success = await response.Content.ReadFromJsonAsync<bool>();
|
|
||||||
|
|
||||||
_logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}");
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<string> ValidateForgotPasswordToken(Guid userId, string token)
|
|
||||||
{
|
|
||||||
string? result = "";
|
|
||||||
_logger.Info("ValidateForgotPasswordToken() called");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}";
|
|
||||||
var parameters = new[] { userId.ToString(), token };
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, parameters);
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
|
|
||||||
_logger.Detail($"ValidateForgotPasswordToken(): {result}");
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> SetEmailConfirmed(Guid userId)
|
|
||||||
{
|
|
||||||
bool result = false;
|
|
||||||
_logger.Info("SetEmailConfirmed() called");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}";
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, userId);
|
|
||||||
result = await response.Content.ReadFromJsonAsync<bool>();
|
|
||||||
|
|
||||||
_logger.Detail($"ValidateForgotPasswordToken(): {result.ToString()}");
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> SendWelcomeMail(string emailAddress)
|
|
||||||
{
|
|
||||||
_logger.Info("SendWelcomeMail() called");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendWelcomeMail}";
|
|
||||||
var response = await _http.PostAsJsonAsync(url, emailAddress);
|
|
||||||
var success = await response.Content.ReadFromJsonAsync<bool>();
|
|
||||||
|
|
||||||
_logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}");
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
//public Task<Dictionary<int, string>> GetUserRolesAsync(UserModel userModel)
|
|
||||||
//{
|
|
||||||
// //TODO Finish this
|
|
||||||
// //get the userModel's roles
|
|
||||||
// var role = userModel.UserRoles;
|
|
||||||
|
|
||||||
// foreach (var roleType in roleTypes)
|
|
||||||
// {
|
|
||||||
// if ((role & roleType.Id) == roleType.Id)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// //add the role to the dictionary
|
|
||||||
// userRoleTypes.Add(roleType.Id, roleType.RoleName);
|
|
||||||
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return Task.FromResult(userRoleTypes);
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@
|
||||||
@inject IComponentUpdateService ComponentUpdateService
|
@inject IComponentUpdateService ComponentUpdateService
|
||||||
@inject AuthenticationStateProvider AuthStateProvider
|
@inject AuthenticationStateProvider AuthStateProvider
|
||||||
@inject AdminSignalRClient _adminSignalRClient;
|
@inject AdminSignalRClient _adminSignalRClient;
|
||||||
@inject SiteViewModel _siteViewModel;
|
|
||||||
|
|
||||||
@{
|
@{
|
||||||
if (string.IsNullOrWhiteSpace(TrackingId))
|
if (string.IsNullOrWhiteSpace(TrackingId))
|
||||||
|
|
@ -130,8 +129,8 @@
|
||||||
|
|
||||||
_adminSignalRClient.GetByIdAsync<SiteViewModel>(SignalRTags.GetSiteViewModelByUserId, signalResponseMessage =>
|
_adminSignalRClient.GetByIdAsync<SiteViewModel>(SignalRTags.GetSiteViewModelByUserId, signalResponseMessage =>
|
||||||
{
|
{
|
||||||
_siteViewModel.Initialize(signalResponseMessage.ResponseData!);
|
sessionService.SiteViewModel.Initialize(signalResponseMessage.ResponseData!);
|
||||||
_logger.Debug($"UnreadMessages: {_siteViewModel.UnreadMessagesCount}");
|
_logger.Debug($"UnreadMessages: {sessionService.SiteViewModel.UnreadMessagesCount}");
|
||||||
|
|
||||||
ComponentUpdateService.CallRequestRefresh<Navbar>();
|
ComponentUpdateService.CallRequestRefresh<Navbar>();
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
@ -215,10 +214,10 @@
|
||||||
{
|
{
|
||||||
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
|
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
|
||||||
|
|
||||||
UserDataService.Logout(userBasicDetail.RefreshToken);
|
UserDataService.Logout(userBasicDetail?.RefreshToken);
|
||||||
AuthStateProvider.GetAuthenticationStateAsync();
|
AuthStateProvider.GetAuthenticationStateAsync();
|
||||||
SecureStorageHandler.ClearAllSecureStorageAsync();
|
SecureStorageHandler.ClearAllSecureStorageAsync();
|
||||||
sessionService.ClearAll().Forget();
|
sessionService.ClearAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
CultureInfo Culture
|
CultureInfo Culture
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,7 @@ namespace TIAMSharedUI.Pages
|
||||||
public partial class Login : BasePageComponent
|
public partial class Login : BasePageComponent
|
||||||
{
|
{
|
||||||
[Inject] private AdminSignalRClient _adminSignalRClient { get; set; }
|
[Inject] private AdminSignalRClient _adminSignalRClient { get; set; }
|
||||||
[Inject] private SiteViewModel _siteViewModel { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
public NavigationManager navManager { get; set; }
|
public NavigationManager navManager { get; set; }
|
||||||
[Inject]
|
[Inject]
|
||||||
|
|
@ -39,6 +38,7 @@ namespace TIAMSharedUI.Pages
|
||||||
[Inject]
|
[Inject]
|
||||||
public AuthenticationStateProvider AuthStateProvider { get; set; }
|
public AuthenticationStateProvider AuthStateProvider { get; set; }
|
||||||
[Inject] public IComponentUpdateService componentUpdateService { get; set; }
|
[Inject] public IComponentUpdateService componentUpdateService { get; set; }
|
||||||
|
[Inject] public ISessionService sessionService { get; set; }
|
||||||
//fill loginmodel with fake but valid data
|
//fill loginmodel with fake but valid data
|
||||||
|
|
||||||
//LoginModel loginModel = new();
|
//LoginModel loginModel = new();
|
||||||
|
|
@ -125,8 +125,8 @@ namespace TIAMSharedUI.Pages
|
||||||
|
|
||||||
_adminSignalRClient.GetByIdAsync<SiteViewModel>(SignalRTags.GetSiteViewModelByUserId, signalResponseMessage =>
|
_adminSignalRClient.GetByIdAsync<SiteViewModel>(SignalRTags.GetSiteViewModelByUserId, signalResponseMessage =>
|
||||||
{
|
{
|
||||||
_siteViewModel.Initialize(signalResponseMessage.ResponseData!);
|
sessionService.SiteViewModel.Initialize(signalResponseMessage.ResponseData!);
|
||||||
BrowserConsoleLogWriter.Debug($"UnreadMessages: {_siteViewModel.UnreadMessages.Count}");
|
BrowserConsoleLogWriter.Debug($"UnreadMessages: {sessionService.SiteViewModel.UnreadMessages.Count}");
|
||||||
|
|
||||||
componentUpdateService.CallRequestRefreshAll();
|
componentUpdateService.CallRequestRefreshAll();
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,8 @@
|
||||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||||
@inject IStringLocalizer<TIAMResources> localizer
|
@inject IStringLocalizer<TIAMResources> localizer
|
||||||
@inject IWizardProcessor wizardProcessor
|
@inject IWizardProcessor wizardProcessor
|
||||||
@inject ITransferDataService transferDataService
|
@inject ITransferDataService transferDataService;
|
||||||
@inject ISessionService sessionService
|
@inject ISessionService sessionService;
|
||||||
@inject SiteViewModel SiteViewModel;
|
|
||||||
@inject AdminSignalRClient AdminSignalRClient;
|
@inject AdminSignalRClient AdminSignalRClient;
|
||||||
<PageTitle>Transfers</PageTitle>
|
<PageTitle>Transfers</PageTitle>
|
||||||
|
|
||||||
|
|
@ -406,7 +405,7 @@
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
_logger = new LoggerClient<DriverManageTransfers>(LogWriters.ToArray());
|
_logger = new LoggerClient<DriverManageTransfers>(LogWriters.ToArray());
|
||||||
_pageModel = SiteViewModel.DriverManageTransfersPageModel;
|
_pageModel = sessionService.SiteViewModel.DriverManageTransfersPageModel;
|
||||||
|
|
||||||
InitializePageAsync(DriverId).Forget();
|
InitializePageAsync(DriverId).Forget();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
@inherits UserBasePageComponent
|
@inherits UserBasePageComponent
|
||||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||||
@inject AdminSignalRClient AdminSignalRClient;
|
@inject AdminSignalRClient AdminSignalRClient;
|
||||||
@inject SiteViewModel SiteViewModel;
|
@inject ISessionService sessionService
|
||||||
@inject IComponentUpdateService ComponentUpdateService
|
@inject IComponentUpdateService ComponentUpdateService
|
||||||
|
|
||||||
<MessageDetailGrid CssClass="my-grid" @ref="_messageGrid"
|
<MessageDetailGrid CssClass="my-grid" @ref="_messageGrid"
|
||||||
|
|
@ -141,7 +141,7 @@
|
||||||
|
|
||||||
_messageGrid.UpdateDataItemAsync(emailMessage).Forget();
|
_messageGrid.UpdateDataItemAsync(emailMessage).Forget();
|
||||||
|
|
||||||
SiteViewModel.UnreadMessages.RemoveAll(x => x.Id == emailMessage.Id);
|
sessionService.SiteViewModel.UnreadMessages.RemoveAll(x => x.Id == emailMessage.Id);
|
||||||
ComponentUpdateService.CallRequestRefreshAll();
|
ComponentUpdateService.CallRequestRefreshAll();
|
||||||
//InvokeAsync(StateHasChanged).ContinueWith(x => _messageGrid.UpdateDataItemAsync(emailMessage).Forget());
|
//InvokeAsync(StateHasChanged).ContinueWith(x => _messageGrid.UpdateDataItemAsync(emailMessage).Forget());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@
|
||||||
@{
|
@{
|
||||||
string url3 = $"user/messages/{userId}";
|
string url3 = $"user/messages/{userId}";
|
||||||
<NavLink class="nav-link" href="@url3">
|
<NavLink class="nav-link" href="@url3">
|
||||||
<i class="fa-solid fa-envelope"><sup>@(" (" + SiteViewModel.UnreadMessagesCount + ")")</sup></i>
|
<i class="fa-solid fa-envelope">@(" (" + sessionService.SiteViewModel.UnreadMessagesCount + ")")</i>
|
||||||
</NavLink>
|
</NavLink>
|
||||||
}
|
}
|
||||||
</li>
|
</li>
|
||||||
|
|
|
||||||
|
|
@ -28,31 +28,22 @@ namespace TIAMSharedUI.Shared.Components
|
||||||
{
|
{
|
||||||
public partial class Navbar : ComponentBase
|
public partial class Navbar : ComponentBase
|
||||||
{
|
{
|
||||||
[Inject]
|
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
||||||
public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject] public ISecureStorageHandler SecureStorageHandler { get; set; }
|
||||||
public ISecureStorageHandler SecureStorageHandler { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject] public ISessionService sessionService { get; set; }
|
||||||
public ISessionService sessionService { get; set; }
|
[Inject] public IStringLocalizer<TIAMResources> localizer { get; set; }
|
||||||
[Inject]
|
|
||||||
public IStringLocalizer<TIAMResources> localizer { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject] public NavigationManager navigationManager { get; set; }
|
||||||
public NavigationManager navigationManager { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject] public IComponentUpdateService componentUpdateService { get; set; }
|
||||||
public IComponentUpdateService componentUpdateService { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject] private IUserDataService UserDataService { get; set; }
|
||||||
private IUserDataService UserDataService { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject] private IJSRuntime JsRuntime { get; set; }
|
||||||
private IJSRuntime JsRuntime { get; set; }
|
|
||||||
|
|
||||||
[Inject] AuthenticationStateProvider AuthStateProvider { get; set; }
|
[Inject] AuthenticationStateProvider AuthStateProvider { get; set; }
|
||||||
[Inject] SiteViewModel SiteViewModel { get; set; }
|
|
||||||
|
|
||||||
private bool enableLogin = true;
|
private bool enableLogin = true;
|
||||||
private bool enableEvents = false;
|
private bool enableEvents = false;
|
||||||
|
|
@ -102,15 +93,17 @@ namespace TIAMSharedUI.Shared.Components
|
||||||
|
|
||||||
bool serverResult;
|
bool serverResult;
|
||||||
string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails));
|
string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(userDetailsStr))
|
if (!string.IsNullOrEmpty(userDetailsStr))
|
||||||
{
|
{
|
||||||
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
|
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
|
||||||
serverResult = await UserDataService.Logout(userBasicDetail.RefreshToken);
|
serverResult = await UserDataService.Logout(userBasicDetail?.RefreshToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
await SecureStorageHandler.ClearAllSecureStorageAsync();
|
await SecureStorageHandler.ClearAllSecureStorageAsync();
|
||||||
var result = await AuthStateProvider.GetAuthenticationStateAsync();
|
var result = await AuthStateProvider.GetAuthenticationStateAsync();
|
||||||
|
|
||||||
await sessionService.ClearAll();
|
sessionService.ClearAll();
|
||||||
navigationManager.NavigateTo("/");
|
navigationManager.NavigateTo("/");
|
||||||
myUser = false;
|
myUser = false;
|
||||||
}
|
}
|
||||||
|
|
@ -118,12 +111,12 @@ namespace TIAMSharedUI.Shared.Components
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
|
|
||||||
base.OnInitialized();
|
base.OnInitialized();
|
||||||
navigationManager.LocationChanged += OnLocationChanged;
|
navigationManager.LocationChanged += OnLocationChanged;
|
||||||
_logger = new LoggerClient<Navbar>(LogWriters.ToArray());
|
_logger = new LoggerClient<Navbar>(LogWriters.ToArray());
|
||||||
|
|
||||||
|
|
||||||
_logger.Debug($"Navbar OnInit {DateTime.Now} ");
|
_logger.Debug($"Navbar OnInit {DateTime.Now} ");
|
||||||
|
|
||||||
InitUser();
|
InitUser();
|
||||||
|
|
@ -132,7 +125,7 @@ namespace TIAMSharedUI.Shared.Components
|
||||||
private void OnLocationChanged(object sender, LocationChangedEventArgs e)
|
private void OnLocationChanged(object sender, LocationChangedEventArgs e)
|
||||||
{
|
{
|
||||||
// Collapse the navbar on navigation
|
// Collapse the navbar on navigation
|
||||||
collapseNavMenu=true;
|
collapseNavMenu = true;
|
||||||
_logger.Debug($"{NavMenuCssClass}");
|
_logger.Debug($"{NavMenuCssClass}");
|
||||||
//JsRuntime.InvokeVoidAsync("toggleBootstrapNavMenu", false);
|
//JsRuntime.InvokeVoidAsync("toggleBootstrapNavMenu", false);
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
|
|
@ -179,7 +172,7 @@ namespace TIAMSharedUI.Shared.Components
|
||||||
if (properties == null)
|
if (properties == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
hasProperty = properties.Count > 0;
|
hasProperty = properties.Count > 0;
|
||||||
isSysAdmin = sessionService.IsSysAdmin;
|
isSysAdmin = sessionService.IsSysAdmin;
|
||||||
isDevAdmin = sessionService.IsDevAdmin;
|
isDevAdmin = sessionService.IsDevAdmin;
|
||||||
|
|
|
||||||
|
|
@ -205,6 +205,7 @@
|
||||||
{
|
{
|
||||||
userHasHotels = true;
|
userHasHotels = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SessionService.User != null)
|
if (SessionService.User != null)
|
||||||
{
|
{
|
||||||
userId = SessionService.User.UserId;
|
userId = SessionService.User.UserId;
|
||||||
|
|
@ -215,6 +216,7 @@
|
||||||
userFullName = SessionService.User.UserModelDto.ProfileDto.FullName;
|
userFullName = SessionService.User.UserModelDto.ProfileDto.FullName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await base.OnInitializedAsync();
|
await base.OnInitializedAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -232,17 +234,17 @@
|
||||||
{
|
{
|
||||||
bool serverResult;
|
bool serverResult;
|
||||||
string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails));
|
string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(userDetailsStr))
|
if (!string.IsNullOrEmpty(userDetailsStr))
|
||||||
{
|
{
|
||||||
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
|
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
|
||||||
serverResult = await UserDataService.Logout(userBasicDetail.RefreshToken);
|
serverResult = await UserDataService.Logout(userBasicDetail?.RefreshToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
await SecureStorageHandler.ClearAllSecureStorageAsync();
|
await SecureStorageHandler.ClearAllSecureStorageAsync();
|
||||||
var result = await AuthStateProvider.GetAuthenticationStateAsync();
|
var result = await AuthStateProvider.GetAuthenticationStateAsync();
|
||||||
|
|
||||||
await SessionService.ClearAll();
|
SessionService.ClearAll();
|
||||||
NavigationManager.NavigateTo("/");
|
NavigationManager.NavigateTo("/");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ builder.Services.AddScoped<ISecureStorageHandler, SecureStorageHandler>();
|
||||||
builder.Services.AddBlazoredLocalStorage();
|
builder.Services.AddBlazoredLocalStorage();
|
||||||
builder.Services.AddSingleton<ISessionService, SessionServiceWeb>();
|
builder.Services.AddSingleton<ISessionService, SessionServiceWeb>();
|
||||||
|
|
||||||
builder.Services.AddSingleton<SiteViewModel>();
|
|
||||||
builder.Services.AddSingleton<IComponentUpdateService, ComponentUpdateServiceWeb>();
|
builder.Services.AddSingleton<IComponentUpdateService, ComponentUpdateServiceWeb>();
|
||||||
|
|
||||||
builder.Services.AddScoped<IServiceProviderDataService, ServiceProviderDataService>();
|
builder.Services.AddScoped<IServiceProviderDataService, ServiceProviderDataService>();
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
using TIAMWebApp.Shared.Application.Interfaces;
|
using TIAMWebApp.Shared.Application.Interfaces;
|
||||||
|
using TIAMWebApp.Shared.Application.Services;
|
||||||
|
|
||||||
namespace TIAMWebApp.Client.Services
|
namespace TIAMWebApp.Client.Services
|
||||||
{
|
{
|
||||||
public class ComponentUpdateServiceWeb : ComponentUpdateServiceBase
|
public class ComponentUpdateServiceWeb : ComponentUpdateServiceBase
|
||||||
|
|
|
||||||
|
|
@ -1,47 +1,22 @@
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using TIAM.Entities.Products;
|
using TIAM.Entities.Products;
|
||||||
|
using TIAM.Models;
|
||||||
using TIAMWebApp.Shared.Application.Interfaces;
|
using TIAMWebApp.Shared.Application.Interfaces;
|
||||||
using TIAMWebApp.Shared.Application.Models;
|
using TIAMWebApp.Shared.Application.Models;
|
||||||
|
using TIAMWebApp.Shared.Application.Services;
|
||||||
|
|
||||||
namespace TIAMWebApp.Client.Services
|
namespace TIAMWebApp.Client.Services
|
||||||
{
|
{
|
||||||
public class SessionServiceWeb : ISessionService
|
public class SessionServiceWeb : SessionServiceClientBase
|
||||||
{
|
{
|
||||||
public string? SessionId { get; set; }
|
public override List<Product> GetHotels()
|
||||||
public UserSessionModel? User { get; set; }
|
{
|
||||||
public IPAddress? IPAddress { get; set; }
|
return base.GetHotels();
|
||||||
public bool IsAuthenticated { get; set; } = false;
|
|
||||||
public bool HasCompany { get; set; } = false;
|
|
||||||
public bool IsDriver { get; set; } = false;
|
|
||||||
public bool IsDevAdmin { get; set; } = false;
|
|
||||||
public bool IsSysAdmin { get; set; } = false;
|
|
||||||
|
|
||||||
public List<Product> GetHotels()
|
|
||||||
{
|
|
||||||
if(User != null)
|
|
||||||
{
|
|
||||||
if(User.UserModelDto.Products.Count > 0)
|
|
||||||
{
|
|
||||||
return User.UserModelDto.Products.Where(x => x.ProductType == TIAM.Core.Enums.ProductType.Hotel).ToList();
|
|
||||||
}
|
|
||||||
else return new List<Product>();
|
|
||||||
}
|
|
||||||
else return new List<Product>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Guid DriverPersmissionId { get; set; } = Guid.Empty;
|
public override void ClearAll()
|
||||||
|
|
||||||
public async Task ClearAll()
|
|
||||||
{
|
{
|
||||||
SessionId = "";
|
base.ClearAll();
|
||||||
User = null;
|
|
||||||
IPAddress = null;
|
|
||||||
IsAuthenticated = false;
|
|
||||||
HasCompany = false;
|
|
||||||
IsDriver = false;
|
|
||||||
IsDevAdmin = false;
|
|
||||||
IsSysAdmin = false;
|
|
||||||
DriverPersmissionId = Guid.Empty;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,403 +13,13 @@ using System.Net.Http;
|
||||||
using AyCode.Core.Extensions;
|
using AyCode.Core.Extensions;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using TIAM.Models;
|
using TIAM.Models;
|
||||||
|
using AyCode.Blazor.Components.Services;
|
||||||
|
using TIAMWebApp.Shared.Application.Services;
|
||||||
|
|
||||||
|
|
||||||
namespace TIAMWebApp.Client.Services
|
namespace TIAMWebApp.Client.Services
|
||||||
{
|
{
|
||||||
public class UserDataServiceWeb : IUserDataService
|
public class UserDataServiceWeb(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable<IAcLogWriterClientBase> logWriters)
|
||||||
{
|
: UserDataServiceClientBase(http, sessionService, secureStorageHandler, serviceProviderDataService, logWriters);
|
||||||
private readonly HttpClient _http;
|
|
||||||
private readonly SiteViewModel _siteViewModel;
|
|
||||||
private readonly ISecureStorageHandler _secureStorageHandler;
|
|
||||||
//private readonly BrowserConsoleLogWriter _browserConsoleLogWriter;
|
|
||||||
private readonly IServiceProviderDataService _serviceProviderDataService;
|
|
||||||
private readonly LoggerClient<UserDataServiceWeb> _logger;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public UserDataServiceWeb(HttpClient http, SiteViewModel siteViewModel, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable<IAcLogWriterClientBase> logWriters)
|
|
||||||
//public UserDataServiceWeb(HttpClient http, ISecureStorageHandler secureStorageHandler, IJSRuntime jSRuntime, IServiceProviderDataService serviceProviderDataService, HttpClientLogItemWriter logWriter)
|
|
||||||
{
|
|
||||||
_http = http;
|
|
||||||
_siteViewModel = siteViewModel;
|
|
||||||
_secureStorageHandler = secureStorageHandler;
|
|
||||||
|
|
||||||
//this._browserConsoleLogWriter = new BrowserConsoleLogWriter(jsRuntime);
|
|
||||||
_serviceProviderDataService = serviceProviderDataService;
|
|
||||||
_logger = new LoggerClient<UserDataServiceWeb>(logWriters.ToArray());
|
|
||||||
//_logger = new TIAM.Core.Loggers.Logger<UserDataServiceWeb>(AppType.Web, LogLevel.Info, logWriters.ToArray());
|
|
||||||
//_logger = new TIAM.Core.Loggers.Logger<UserDataServiceWeb>(AppType.Web, LogLevel.Info, logWriter);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public async Task<UserSessionModel> IsLoggedInAsync(Guid id)
|
|
||||||
{
|
|
||||||
//api call to get user
|
|
||||||
var userModelDto = await GetUserDetailByIdAsync(id);
|
|
||||||
|
|
||||||
if (userModelDto != null)
|
|
||||||
{
|
|
||||||
var userProperties = new Dictionary<Guid, string>();
|
|
||||||
//get user's properties
|
|
||||||
var hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : (userModelDto.ServiceProviders.Count == 0 ? false : false);
|
|
||||||
if (hasProperties)
|
|
||||||
{
|
|
||||||
|
|
||||||
//var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id);
|
|
||||||
var properties = userModelDto.ServiceProviders;
|
|
||||||
|
|
||||||
_logger.Info($"{properties.Count} properties found");
|
|
||||||
foreach ( var property in properties )
|
|
||||||
{
|
|
||||||
userProperties.Add(property.Id, property.Name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//create user session model
|
|
||||||
var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, userProperties, 1);
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<string> TestUserApi(int Param)
|
|
||||||
{
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.UserTest}";
|
|
||||||
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, Param);
|
|
||||||
var result = await response.Content.ReadAsStringAsync();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<string> AuthenticateUser(LoginModel loginModel)
|
|
||||||
{
|
|
||||||
string result = string.Empty;
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}";
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, loginModel);
|
|
||||||
|
|
||||||
//try
|
|
||||||
//{
|
|
||||||
// Logger.Detail("Login started: " + "Email: " + loginModel.Email + ", Password: " + loginModel.Password);
|
|
||||||
//}
|
|
||||||
//catch (Exception ex)
|
|
||||||
//{
|
|
||||||
// _logger.Error(ex.Message, ex);
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
//result = await response.Content.ReadAsStringAsync();
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel)
|
|
||||||
{
|
|
||||||
|
|
||||||
bool isSuccess = true;
|
|
||||||
string result = string.Empty;
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}";
|
|
||||||
_logger.Info("CreateUser url: " + url);
|
|
||||||
var response = await _http.PostAsJsonAsync(url, regModel);
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
/*if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
isSuccess = true;
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isSuccess = false;
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
return (isSuccess, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel)
|
|
||||||
{
|
|
||||||
|
|
||||||
bool isSuccess = false;
|
|
||||||
string result = string.Empty;
|
|
||||||
UserModelDto? user = new UserModelDto();
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}";
|
|
||||||
_logger.Info("CreateGuestUser url: " + url);
|
|
||||||
var response = await _http.PostAsJsonAsync(url, regModel);
|
|
||||||
|
|
||||||
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
isSuccess = true;
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
_logger.Info("CreateGuestUser result: " + result);
|
|
||||||
user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isSuccess = false;
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
user = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return (isSuccess, user);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public async Task<List<UserModelDto>?> GetUsersAsync()
|
|
||||||
{
|
|
||||||
return await _http.GetFromJsonAsync<List<UserModelDto>>(APIUrls.GetUsers);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<List<UserModelDtoDetail>> GetUsersWithDetailsAsync()
|
|
||||||
{
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUsersWithDetails}";
|
|
||||||
|
|
||||||
_logger.Info("GetUserByEmailAsync url: " + url + "!");
|
|
||||||
var response = await _http.GetFromJsonAsync<List<UserModelDtoDetail>>(APIUrls.GetUsersWithDetails);
|
|
||||||
//var result = await response.Content.ReadAsStringAsync();
|
|
||||||
//var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
|
||||||
return response ?? [];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<UserModelDto?> GetUserByEmailAsync(string email)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}/{email}";
|
|
||||||
_logger.Info("GetUserByEmailAsync url: " + url + ", " + email);
|
|
||||||
var response = await _http.GetAsync(url);
|
|
||||||
|
|
||||||
response.EnsureSuccessStatusCode();
|
|
||||||
if (response.Content != null)
|
|
||||||
{
|
|
||||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
|
||||||
var user = System.Text.Json.JsonSerializer.Deserialize<UserModelDto>(jsonResponse, new JsonSerializerOptions
|
|
||||||
{
|
|
||||||
PropertyNameCaseInsensitive = true
|
|
||||||
});
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (HttpRequestException httpRequestException)
|
|
||||||
{
|
|
||||||
// Handle specific HTTP request exceptions
|
|
||||||
_logger.DebugConditional($"Request error: {httpRequestException.Message}");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
// Handle other possible exceptions
|
|
||||||
_logger.DebugConditional($"An error occurred: {ex.Message}");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<UserModelDto?> GetUserByIdAsync(Guid id)
|
|
||||||
{
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}";
|
|
||||||
_logger.Info("GetUserByIdAsync url: " + url + ", " + id.ToString());
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, id);
|
|
||||||
var result = await response.Content.ReadAsStringAsync();
|
|
||||||
var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
|
||||||
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<UserModelDtoDetail?> GetUserDetailByIdAsync(Guid id)
|
|
||||||
{
|
|
||||||
_logger.Info("GetUserDetailByIdAsync", "GLOBAL_LOGGER");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}";
|
|
||||||
_logger.Info("GetUserDetailByIdAsync url: " + url + ", " + id.ToString());
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, id);
|
|
||||||
//var result = await response.Content.ReadAsStringAsync();
|
|
||||||
var result = await response.Content.ReadFromJsonAsync<UserModelDtoDetail>();
|
|
||||||
//var user = JsonConvert.DeserializeObject<UserModelDtoDetail>(result);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> RefreshToken()
|
|
||||||
{
|
|
||||||
_logger.Info("RefreshToken() called");
|
|
||||||
bool isTokenRefreshed = false;
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.RefreshToken}";
|
|
||||||
//var url = APIUrls.RefreshToken;
|
|
||||||
|
|
||||||
var serializedStr = JsonConvert.SerializeObject(new AuthenticateRequestAndResponse
|
|
||||||
{
|
|
||||||
RefreshToken = Setting.UserBasicDetails.RefreshToken,
|
|
||||||
AccessToken = Setting.UserBasicDetails.AccessToken
|
|
||||||
});
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_logger.Info("Refreshtoken url: " + url);
|
|
||||||
var response = await _http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json"));
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
string contentStr = await response.Content.ReadAsStringAsync();
|
|
||||||
var mainResponse = JsonConvert.DeserializeObject<MainResponse>(contentStr);
|
|
||||||
if (mainResponse.IsSuccess)
|
|
||||||
{
|
|
||||||
var tokenDetails = JsonConvert.DeserializeObject<AuthenticateRequestAndResponse>(mainResponse.Content.ToString());
|
|
||||||
Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken;
|
|
||||||
Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken;
|
|
||||||
|
|
||||||
string userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails);
|
|
||||||
await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr);
|
|
||||||
isTokenRefreshed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
string msg = ex.Message;
|
|
||||||
_logger.Error("Refreshtoken exception: " + ex.Message, ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return isTokenRefreshed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> Logout(string refreshToken)
|
|
||||||
{
|
|
||||||
_logger.Info("Logout() called");
|
|
||||||
|
|
||||||
_siteViewModel.ClearAll();
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}";
|
|
||||||
bool result = false;
|
|
||||||
var response = await _http.PostAsJsonAsync(url, refreshToken);
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
string resultMessage = await response.Content.ReadAsStringAsync();
|
|
||||||
_logger.Detail($"Logout response: {resultMessage}");
|
|
||||||
if(resultMessage == "OK")
|
|
||||||
{
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_logger.Detail($"Logout: {result}");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> SendForgottenPasswordMail(string emailAddress)
|
|
||||||
{
|
|
||||||
_logger.Info("SendForgottenPasswordMail() called");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendForgottenPasswordMail}";
|
|
||||||
var response = await _http.PostAsJsonAsync(url, emailAddress);
|
|
||||||
var success = await response.Content.ReadFromJsonAsync<bool>();
|
|
||||||
|
|
||||||
_logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}");
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<string> ValidateForgotPasswordToken(Guid userId, string token)
|
|
||||||
{
|
|
||||||
string? result = "";
|
|
||||||
_logger.Info("ValidateForgotPasswordToken() called");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}";
|
|
||||||
var parameters = new[] { userId.ToString(), token };
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, parameters);
|
|
||||||
result = await response.Content.ReadAsStringAsync();
|
|
||||||
|
|
||||||
_logger.Detail($"ValidateForgotPasswordToken(): {result}");
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> SetEmailConfirmed(Guid userId)
|
|
||||||
{
|
|
||||||
bool result = false;
|
|
||||||
_logger.Info("SetEmailConfirmed() called");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}";
|
|
||||||
|
|
||||||
var response = await _http.PostAsJsonAsync(url, userId);
|
|
||||||
result = await response.Content.ReadFromJsonAsync<bool>();
|
|
||||||
|
|
||||||
_logger.Detail($"ValidateForgotPasswordToken(): {result.ToString()}");
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> SendWelcomeMail(string emailAddress)
|
|
||||||
{
|
|
||||||
_logger.Info("SendWelcomeMail() called");
|
|
||||||
|
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendWelcomeMail}";
|
|
||||||
var response = await _http.PostAsJsonAsync(url, emailAddress);
|
|
||||||
var success = await response.Content.ReadFromJsonAsync<bool>();
|
|
||||||
|
|
||||||
_logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}");
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*public Task<Dictionary<int, string>> GetUserRolesAsync(UserModel userModel)
|
|
||||||
{
|
|
||||||
//TODO: finish this
|
|
||||||
//get the userModel's roles
|
|
||||||
int role = userModel.UserRoles;
|
|
||||||
|
|
||||||
foreach (var roleType in roleTypes)
|
|
||||||
{
|
|
||||||
if ((role & roleType.Id) == roleType.Id)
|
|
||||||
{
|
|
||||||
|
|
||||||
//add the role to the dictionary
|
|
||||||
userRoleTypes.Add(roleType.Id, roleType.RoleName);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Task.FromResult(userRoleTypes);
|
|
||||||
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,37 +2,6 @@
|
||||||
|
|
||||||
namespace TIAMWebApp.Shared.Application.Interfaces
|
namespace TIAMWebApp.Shared.Application.Interfaces
|
||||||
{
|
{
|
||||||
public abstract class ComponentUpdateServiceBase : IComponentUpdateService
|
|
||||||
{
|
|
||||||
protected Dictionary<Type, IComponentUpdateItem> ComponentsByType = [];
|
|
||||||
|
|
||||||
public virtual void CallRequestRefreshAll()
|
|
||||||
{
|
|
||||||
foreach (var component in ComponentsByType.Values)
|
|
||||||
component.CallRequestRefresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CallRequestRefresh<T>() where T : class, IComponent
|
|
||||||
{
|
|
||||||
if (ComponentsByType.TryGetValue(typeof(T), out var componentUpdateItem))
|
|
||||||
componentUpdateItem.CallRequestRefresh();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public IComponentUpdateItem GetOrAddComponent<T>() where T : class, IComponent
|
|
||||||
{
|
|
||||||
var componentType = typeof(T);
|
|
||||||
|
|
||||||
if (ComponentsByType.TryGetValue(componentType, out var componentUpdateItem))
|
|
||||||
return componentUpdateItem;
|
|
||||||
|
|
||||||
componentUpdateItem = new ComponentUpdateItem();
|
|
||||||
ComponentsByType.Add(componentType, componentUpdateItem);
|
|
||||||
|
|
||||||
return componentUpdateItem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ComponentUpdateItem : IComponentUpdateItem
|
public class ComponentUpdateItem : IComponentUpdateItem
|
||||||
{
|
{
|
||||||
public event Action? RefreshRequested;
|
public event Action? RefreshRequested;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using TIAM.Entities.Products;
|
using TIAM.Entities.Products;
|
||||||
|
using TIAM.Models;
|
||||||
using TIAMWebApp.Shared.Application.Models;
|
using TIAMWebApp.Shared.Application.Models;
|
||||||
|
|
||||||
namespace TIAMWebApp.Shared.Application.Interfaces
|
namespace TIAMWebApp.Shared.Application.Interfaces
|
||||||
|
|
@ -7,6 +8,9 @@ namespace TIAMWebApp.Shared.Application.Interfaces
|
||||||
public interface ISessionService
|
public interface ISessionService
|
||||||
{
|
{
|
||||||
public string? SessionId { get; set; }
|
public string? SessionId { get; set; }
|
||||||
|
|
||||||
|
public SiteViewModel SiteViewModel { get; }
|
||||||
|
|
||||||
public UserSessionModel? User { get; set; }
|
public UserSessionModel? User { get; set; }
|
||||||
public IPAddress? IPAddress { get; set; }
|
public IPAddress? IPAddress { get; set; }
|
||||||
public bool IsAuthenticated { get; set; }
|
public bool IsAuthenticated { get; set; }
|
||||||
|
|
@ -16,6 +20,6 @@ namespace TIAMWebApp.Shared.Application.Interfaces
|
||||||
public bool IsSysAdmin { get; set; }
|
public bool IsSysAdmin { get; set; }
|
||||||
public List<Product> GetHotels();
|
public List<Product> GetHotels();
|
||||||
public Guid DriverPersmissionId { get; set; }
|
public Guid DriverPersmissionId { get; set; }
|
||||||
public Task ClearAll();
|
public void ClearAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ namespace TIAMWebApp.Shared.Application.Interfaces
|
||||||
{
|
{
|
||||||
public interface IUserDataService
|
public interface IUserDataService
|
||||||
{
|
{
|
||||||
|
|
||||||
public Task<UserSessionModel> IsLoggedInAsync(Guid id);
|
public Task<UserSessionModel> IsLoggedInAsync(Guid id);
|
||||||
|
|
||||||
public Task<string> AuthenticateUser(LoginModel loginModel);
|
public Task<string> AuthenticateUser(LoginModel loginModel);
|
||||||
|
|
@ -25,7 +24,7 @@ namespace TIAMWebApp.Shared.Application.Interfaces
|
||||||
public Task<UserModelDto?> GetUserByEmailAsync(string email);
|
public Task<UserModelDto?> GetUserByEmailAsync(string email);
|
||||||
Task<bool> RefreshToken();
|
Task<bool> RefreshToken();
|
||||||
|
|
||||||
public Task<bool> Logout(string refreshToken);
|
public Task<bool> Logout(string? refreshToken);
|
||||||
|
|
||||||
public Task<bool> SendForgottenPasswordMail(string emailAddress);
|
public Task<bool> SendForgottenPasswordMail(string emailAddress);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using TIAMWebApp.Shared.Application.Interfaces;
|
||||||
|
|
||||||
|
namespace TIAMWebApp.Shared.Application.Services;
|
||||||
|
|
||||||
|
public abstract class ComponentUpdateServiceBase : IComponentUpdateService
|
||||||
|
{
|
||||||
|
protected Dictionary<Type, IComponentUpdateItem> ComponentsByType = [];
|
||||||
|
|
||||||
|
public virtual void CallRequestRefreshAll()
|
||||||
|
{
|
||||||
|
foreach (var component in ComponentsByType.Values)
|
||||||
|
component.CallRequestRefresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CallRequestRefresh<T>() where T : class, IComponent
|
||||||
|
{
|
||||||
|
if (ComponentsByType.TryGetValue(typeof(T), out var componentUpdateItem))
|
||||||
|
componentUpdateItem.CallRequestRefresh();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public IComponentUpdateItem GetOrAddComponent<T>() where T : class, IComponent
|
||||||
|
{
|
||||||
|
var componentType = typeof(T);
|
||||||
|
|
||||||
|
if (ComponentsByType.TryGetValue(componentType, out var componentUpdateItem))
|
||||||
|
return componentUpdateItem;
|
||||||
|
|
||||||
|
componentUpdateItem = new ComponentUpdateItem();
|
||||||
|
ComponentsByType.Add(componentType, componentUpdateItem);
|
||||||
|
|
||||||
|
return componentUpdateItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
using System.Net;
|
||||||
|
using TIAM.Entities.Products;
|
||||||
|
using TIAM.Models;
|
||||||
|
using TIAMWebApp.Shared.Application.Interfaces;
|
||||||
|
using TIAMWebApp.Shared.Application.Models;
|
||||||
|
|
||||||
|
namespace TIAMWebApp.Shared.Application.Services;
|
||||||
|
|
||||||
|
public abstract class SessionServiceClientBase : ISessionService
|
||||||
|
{
|
||||||
|
public string? SessionId { get; set; }
|
||||||
|
public SiteViewModel SiteViewModel { get; } = new();
|
||||||
|
|
||||||
|
public UserSessionModel? User { get; set; }
|
||||||
|
public IPAddress? IPAddress { get; set; }
|
||||||
|
public bool IsAuthenticated { get; set; } = false;
|
||||||
|
public bool HasCompany { get; set; } = false;
|
||||||
|
public bool IsDriver { get; set; } = false;
|
||||||
|
public bool IsDevAdmin { get; set; } = false;
|
||||||
|
public bool IsSysAdmin { get; set; } = false;
|
||||||
|
|
||||||
|
public Guid DriverPersmissionId { get; set; } = Guid.Empty;
|
||||||
|
|
||||||
|
public virtual List<Product> GetHotels()
|
||||||
|
{
|
||||||
|
if (User != null)
|
||||||
|
{
|
||||||
|
return User.UserModelDto.Products.Count > 0 ? User.UserModelDto.Products.Where(x => x.ProductType == TIAM.Core.Enums.ProductType.Hotel).ToList() : [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void ClearAll()
|
||||||
|
{
|
||||||
|
SessionId = string.Empty;
|
||||||
|
User = null;
|
||||||
|
IPAddress = null;
|
||||||
|
IsAuthenticated = false;
|
||||||
|
HasCompany = false;
|
||||||
|
IsDriver = false;
|
||||||
|
IsDevAdmin = false;
|
||||||
|
IsSysAdmin = false;
|
||||||
|
DriverPersmissionId = Guid.Empty;
|
||||||
|
|
||||||
|
SiteViewModel.ClearAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,401 @@
|
||||||
|
using System.Net.Http.Json;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.Json;
|
||||||
|
using AyCode.Interfaces.StorageHandlers;
|
||||||
|
using AyCode.Services.Loggers;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using TIAM.Models.Dtos.Users;
|
||||||
|
using TIAMWebApp.Shared.Application.Interfaces;
|
||||||
|
using TIAMWebApp.Shared.Application.Models;
|
||||||
|
using TIAMWebApp.Shared.Application.Models.ClientSide;
|
||||||
|
using TIAMWebApp.Shared.Application.Models.PageModels;
|
||||||
|
using TIAMWebApp.Shared.Application.Utility;
|
||||||
|
|
||||||
|
namespace TIAMWebApp.Shared.Application.Services;
|
||||||
|
|
||||||
|
public abstract class UserDataServiceClientBase : IUserDataService
|
||||||
|
{
|
||||||
|
protected readonly HttpClient Http;
|
||||||
|
protected readonly LoggerClient Logger;
|
||||||
|
|
||||||
|
protected readonly ISessionService SessionService;
|
||||||
|
protected readonly ISecureStorageHandler SecureStorageHandler;
|
||||||
|
protected readonly IServiceProviderDataService ServiceProviderDataService;
|
||||||
|
|
||||||
|
|
||||||
|
protected UserDataServiceClientBase(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable<IAcLogWriterClientBase> logWriters)
|
||||||
|
{
|
||||||
|
Http = http;
|
||||||
|
SessionService = sessionService;
|
||||||
|
SecureStorageHandler = secureStorageHandler;
|
||||||
|
|
||||||
|
ServiceProviderDataService = serviceProviderDataService;
|
||||||
|
Logger = new LoggerClient(this.GetType().Name, logWriters.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<UserSessionModel> IsLoggedInAsync(Guid id)
|
||||||
|
{
|
||||||
|
//api call to get user
|
||||||
|
var userModelDto = await GetUserDetailByIdAsync(id);
|
||||||
|
|
||||||
|
if (userModelDto != null)
|
||||||
|
{
|
||||||
|
var userProperties = new Dictionary<Guid, string>();
|
||||||
|
//get user's properties
|
||||||
|
var hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : (userModelDto.ServiceProviders.Count == 0 ? false : false);
|
||||||
|
if (hasProperties)
|
||||||
|
{
|
||||||
|
|
||||||
|
//var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id);
|
||||||
|
var properties = userModelDto.ServiceProviders;
|
||||||
|
|
||||||
|
Logger.Info($"{properties.Count} properties found");
|
||||||
|
foreach (var property in properties)
|
||||||
|
{
|
||||||
|
userProperties.Add(property.Id, property.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//create user session model
|
||||||
|
var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, userProperties, 1);
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string> TestUserApi(int Param)
|
||||||
|
{
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.UserTest}";
|
||||||
|
|
||||||
|
|
||||||
|
var response = await Http.PostAsJsonAsync(url, Param);
|
||||||
|
var result = await response.Content.ReadAsStringAsync();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string> AuthenticateUser(LoginModel loginModel)
|
||||||
|
{
|
||||||
|
var result = string.Empty;
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}";
|
||||||
|
|
||||||
|
var response = await Http.PostAsJsonAsync(url, loginModel);
|
||||||
|
|
||||||
|
//try
|
||||||
|
//{
|
||||||
|
// Logger.Detail("Login started: " + "Email: " + loginModel.Email + ", Password: " + loginModel.Password);
|
||||||
|
//}
|
||||||
|
//catch (Exception ex)
|
||||||
|
//{
|
||||||
|
// _logger.Error(ex.Message, ex);
|
||||||
|
//}
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
result = await response.Content.ReadAsStringAsync();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = await response.Content.ReadAsStringAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
//result = await response.Content.ReadAsStringAsync();
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel)
|
||||||
|
{
|
||||||
|
|
||||||
|
var isSuccess = true;
|
||||||
|
var result = string.Empty;
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}";
|
||||||
|
Logger.Info("CreateUser url: " + url);
|
||||||
|
var response = await Http.PostAsJsonAsync(url, regModel);
|
||||||
|
result = await response.Content.ReadAsStringAsync();
|
||||||
|
/*if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
isSuccess = true;
|
||||||
|
result = await response.Content.ReadAsStringAsync();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isSuccess = false;
|
||||||
|
result = await response.Content.ReadAsStringAsync();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
return (isSuccess, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel)
|
||||||
|
{
|
||||||
|
var isSuccess = false;
|
||||||
|
var result = string.Empty;
|
||||||
|
var user = new UserModelDto();
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}";
|
||||||
|
Logger.Info("CreateGuestUser url: " + url);
|
||||||
|
var response = await Http.PostAsJsonAsync(url, regModel);
|
||||||
|
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
isSuccess = true;
|
||||||
|
result = await response.Content.ReadAsStringAsync();
|
||||||
|
Logger.Info("CreateGuestUser result: " + result);
|
||||||
|
user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isSuccess = false;
|
||||||
|
result = await response.Content.ReadAsStringAsync();
|
||||||
|
user = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return (isSuccess, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<List<UserModelDto>?> GetUsersAsync()
|
||||||
|
{
|
||||||
|
return await Http.GetFromJsonAsync<List<UserModelDto>>(APIUrls.GetUsers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<UserModelDtoDetail>> GetUsersWithDetailsAsync()
|
||||||
|
{
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUsersWithDetails}";
|
||||||
|
|
||||||
|
Logger.Info("GetUserByEmailAsync url: " + url + "!");
|
||||||
|
var response = await Http.GetFromJsonAsync<List<UserModelDtoDetail>>(APIUrls.GetUsersWithDetails);
|
||||||
|
//var result = await response.Content.ReadAsStringAsync();
|
||||||
|
//var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
||||||
|
return response ?? [];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<UserModelDto?> GetUserByEmailAsync(string email)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}/{email}";
|
||||||
|
Logger.Info("GetUserByEmailAsync url: " + url + ", " + email);
|
||||||
|
var response = await Http.GetAsync(url);
|
||||||
|
|
||||||
|
response.EnsureSuccessStatusCode();
|
||||||
|
if (response.Content != null)
|
||||||
|
{
|
||||||
|
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
|
var user = System.Text.Json.JsonSerializer.Deserialize<UserModelDto>(jsonResponse, new JsonSerializerOptions
|
||||||
|
{
|
||||||
|
PropertyNameCaseInsensitive = true
|
||||||
|
});
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (HttpRequestException httpRequestException)
|
||||||
|
{
|
||||||
|
// Handle specific HTTP request exceptions
|
||||||
|
Logger.DebugConditional($"Request error: {httpRequestException.Message}");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Handle other possible exceptions
|
||||||
|
Logger.DebugConditional($"An error occurred: {ex.Message}");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<UserModelDto?> GetUserByIdAsync(Guid id)
|
||||||
|
{
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}";
|
||||||
|
Logger.Info("GetUserByIdAsync url: " + url + ", " + id.ToString());
|
||||||
|
|
||||||
|
var response = await Http.PostAsJsonAsync(url, id);
|
||||||
|
var result = await response.Content.ReadAsStringAsync();
|
||||||
|
var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
||||||
|
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<UserModelDtoDetail?> GetUserDetailByIdAsync(Guid id)
|
||||||
|
{
|
||||||
|
Logger.Info("GetUserDetailByIdAsync", "GLOBAL_LOGGER");
|
||||||
|
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}";
|
||||||
|
Logger.Info("GetUserDetailByIdAsync url: " + url + ", " + id.ToString());
|
||||||
|
|
||||||
|
var response = await Http.PostAsJsonAsync(url, id);
|
||||||
|
//var result = await response.Content.ReadAsStringAsync();
|
||||||
|
var result = await response.Content.ReadFromJsonAsync<UserModelDtoDetail>();
|
||||||
|
//var user = JsonConvert.DeserializeObject<UserModelDtoDetail>(result);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> RefreshToken()
|
||||||
|
{
|
||||||
|
Logger.Info("RefreshToken() called");
|
||||||
|
var isTokenRefreshed = false;
|
||||||
|
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.RefreshToken}";
|
||||||
|
//var url = APIUrls.RefreshToken;
|
||||||
|
|
||||||
|
var serializedStr = JsonConvert.SerializeObject(new AuthenticateRequestAndResponse
|
||||||
|
{
|
||||||
|
RefreshToken = Setting.UserBasicDetails.RefreshToken,
|
||||||
|
AccessToken = Setting.UserBasicDetails.AccessToken
|
||||||
|
});
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Logger.Info("Refreshtoken url: " + url);
|
||||||
|
var response = await Http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json"));
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var contentStr = await response.Content.ReadAsStringAsync();
|
||||||
|
var mainResponse = JsonConvert.DeserializeObject<MainResponse>(contentStr);
|
||||||
|
if (mainResponse.IsSuccess)
|
||||||
|
{
|
||||||
|
var tokenDetails = JsonConvert.DeserializeObject<AuthenticateRequestAndResponse>(mainResponse.Content.ToString());
|
||||||
|
Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken;
|
||||||
|
Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken;
|
||||||
|
|
||||||
|
var userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails);
|
||||||
|
await SecureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr);
|
||||||
|
isTokenRefreshed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
var msg = ex.Message;
|
||||||
|
Logger.Error("Refreshtoken exception: " + ex.Message, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return isTokenRefreshed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> Logout(string? refreshToken)
|
||||||
|
{
|
||||||
|
Logger.Info($"Logout called; refreshToken: {refreshToken}");
|
||||||
|
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}";
|
||||||
|
var result = false;
|
||||||
|
var response = await Http.PostAsJsonAsync(url, refreshToken);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var resultMessage = await response.Content.ReadAsStringAsync();
|
||||||
|
Logger.Detail($"Logout response: {resultMessage}");
|
||||||
|
if (resultMessage == "OK")
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.Detail($"Logout: {result}");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SendForgottenPasswordMail(string emailAddress)
|
||||||
|
{
|
||||||
|
Logger.Info("SendForgottenPasswordMail() called");
|
||||||
|
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendForgottenPasswordMail}";
|
||||||
|
var response = await Http.PostAsJsonAsync(url, emailAddress);
|
||||||
|
var success = await response.Content.ReadFromJsonAsync<bool>();
|
||||||
|
|
||||||
|
Logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}");
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string> ValidateForgotPasswordToken(Guid userId, string token)
|
||||||
|
{
|
||||||
|
var result = "";
|
||||||
|
Logger.Info("ValidateForgotPasswordToken() called");
|
||||||
|
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}";
|
||||||
|
var parameters = new[] { userId.ToString(), token };
|
||||||
|
|
||||||
|
var response = await Http.PostAsJsonAsync(url, parameters);
|
||||||
|
result = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
Logger.Detail($"ValidateForgotPasswordToken(): {result}");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SetEmailConfirmed(Guid userId)
|
||||||
|
{
|
||||||
|
var result = false;
|
||||||
|
Logger.Info("SetEmailConfirmed() called");
|
||||||
|
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}";
|
||||||
|
|
||||||
|
var response = await Http.PostAsJsonAsync(url, userId);
|
||||||
|
result = await response.Content.ReadFromJsonAsync<bool>();
|
||||||
|
|
||||||
|
Logger.Detail($"ValidateForgotPasswordToken(): {result.ToString()}");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SendWelcomeMail(string emailAddress)
|
||||||
|
{
|
||||||
|
Logger.Info("SendWelcomeMail() called");
|
||||||
|
|
||||||
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendWelcomeMail}";
|
||||||
|
var response = await Http.PostAsJsonAsync(url, emailAddress);
|
||||||
|
var success = await response.Content.ReadFromJsonAsync<bool>();
|
||||||
|
|
||||||
|
Logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}");
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public Task<Dictionary<int, string>> GetUserRolesAsync(UserModel userModel)
|
||||||
|
{
|
||||||
|
//TODO: finish this
|
||||||
|
//get the userModel's roles
|
||||||
|
int role = userModel.UserRoles;
|
||||||
|
|
||||||
|
foreach (var roleType in roleTypes)
|
||||||
|
{
|
||||||
|
if ((role & roleType.Id) == roleType.Id)
|
||||||
|
{
|
||||||
|
|
||||||
|
//add the role to the dictionary
|
||||||
|
userRoleTypes.Add(roleType.Id, roleType.RoleName);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Task.FromResult(userRoleTypes);
|
||||||
|
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
@ -30,7 +30,7 @@ namespace TIAMWebApp.Shared.Application.Utility
|
||||||
await _hubConnection.StartAsync();
|
await _hubConnection.StartAsync();
|
||||||
|
|
||||||
if (_hubConnection.State != HubConnectionState.Connected)
|
if (_hubConnection.State != HubConnectionState.Connected)
|
||||||
await TaskHelper.WaitToAsync(() => _hubConnection.State == HubConnectionState.Connected, 3000, 100);
|
await TaskHelper.WaitToAsync(() => _hubConnection.State == HubConnectionState.Connected, 10000, 10, 25);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task StopConnection()
|
public async Task StopConnection()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue