310 lines
11 KiB
C#
310 lines
11 KiB
C#
using System.Net.Http.Json;
|
|
using System.Text;
|
|
using AyCode.Interfaces.StorageHandlers;
|
|
using AyCode.Services.Loggers;
|
|
using Newtonsoft.Json;
|
|
using TIAM.Core.Loggers;
|
|
using TIAM.Entities.Users;
|
|
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.Services;
|
|
using TIAMWebApp.Shared.Application.Utility;
|
|
|
|
namespace TIAMMobileApp.Services
|
|
{
|
|
public class UserDataServiceMobile : IUserDataService
|
|
{
|
|
private readonly HttpClient http;
|
|
private readonly ISecureStorageHandler secureStorageHandler;
|
|
private readonly IServiceProviderDataService serviceProviderDataService;
|
|
private readonly ILogger _logger;
|
|
|
|
public Dictionary<int, string> userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
|
|
|
public UserDataServiceMobile(HttpClient http, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable<IAcLogWriterClientBase> logWriters)
|
|
{
|
|
this.http = http;
|
|
this.secureStorageHandler = secureStorageHandler;
|
|
|
|
//this._browserConsoleLogWriter = new BrowserConsoleLogWriter(jsRuntime);
|
|
this.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)
|
|
{
|
|
//get user's properties
|
|
var hasProperties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id);
|
|
|
|
if (hasProperties != null)
|
|
_logger.Info($"{hasProperties.Count} properties found");
|
|
|
|
//create user session model
|
|
var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, hasProperties, 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)
|
|
{
|
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}";
|
|
|
|
_logger.Info("GetUserByEmailAsync url: " + url + ", " + email);
|
|
//GlobalLogger.Info("GetUserByEmailAsync url: " + url + ", " + email, "GLOBAL_LOGGER");
|
|
|
|
|
|
var response = await http.PostAsJsonAsync(url, email);
|
|
var result = await response.Content.ReadAsStringAsync();
|
|
var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
|
return user;
|
|
}
|
|
|
|
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");
|
|
|
|
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 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);
|
|
|
|
//}
|
|
|
|
}
|
|
}
|
|
|