using Microsoft.EntityFrameworkCore.Infrastructure; using Newtonsoft.Json; using System.Net.Http.Json; using System.Text; using TIAM.Entities.TransferDestinations; using TIAM.Entities.Users; using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models.ClientSide; using TIAMWebApp.Shared.Application.Models.PageModels; namespace TIAMWebApp.Client.Services { public class UserDataService : IUserDataService { private readonly HttpClient http; private readonly ISecureStorageHandler secureStorageHandler; public UserModel? User { get; set; } = new UserModel("", "", ""); public Dictionary userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public UserDataService(HttpClient http, ISecureStorageHandler secureStorageHandler) { this.http = http; this.secureStorageHandler = secureStorageHandler; } public List roleTypes = new List { new RoleType { Id = 1, RoleName = "Login" }, new RoleType { Id = 2, RoleName = "Member" }, new RoleType { Id = 4, RoleName = "Vip" }, new RoleType { Id = 8, RoleName = "Uvip" }, new RoleType { Id = 16, RoleName = "Volunteer" }, new RoleType { Id = 32, RoleName = "Guide" }, new RoleType { Id = 64, RoleName = "Protector" }, new RoleType { Id = 128, RoleName = "Admin" }, new RoleType { Id = 256, RoleName = "SuperAdmin" }, new RoleType { Id = 512, RoleName = "God" } }; public async Task IsLoggedInAsync() { if (User == null) { User = new UserModel("", "", ""); User.IsLoggedIn = false; User.UserType = UserType.User; return User; } else { return User; } } //Mock method for now public async Task AuthorizeUserAsync(int userType) { if (User == null) { User = new UserModel("", "", ""); } //simply return true for now User.IsLoggedIn = true; User.UserType = (UserType)userType; return User; } public async Task TestUserApi(int Param) { var url = APIUrls.UserTest; var response = await http.PostAsJsonAsync(url, Param); var result = await response.Content.ReadAsStringAsync(); return result; } public async Task AuthenticateUser(LoginModel loginModel) { string result = string.Empty; var url = APIUrls.AuthenticateUser; var response = await http.PostAsJsonAsync(url, loginModel); 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 = APIUrls.CreateUser; 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?> GetUsersAsync() { return await http.GetFromJsonAsync>(APIUrls.GetUsers); } public async Task GetUserByEmailAsync(string email) { return await http.GetFromJsonAsync(APIUrls.GetUserByEmail); } public async Task RefreshToken() { bool isTokenRefreshed = false; using (var client = new HttpClient()) { var url = APIUrls.RefreshToken; var serializedStr = JsonConvert.SerializeObject(new AuthenticateRequestAndResponse { RefreshToken = Setting.UserBasicDetails.RefreshToken, AccessToken = Setting.UserBasicDetails.AccessToken }); try { var response = await client.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); if (response.IsSuccessStatusCode) { string contentStr = await response.Content.ReadAsStringAsync(); var mainResponse = JsonConvert.DeserializeObject(contentStr); if (mainResponse.IsSuccess) { var tokenDetails = JsonConvert.DeserializeObject(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; } } return isTokenRefreshed; } public Task> GetUserRolesAsync(UserModel userModel) { //get the userModel's roles int role = User.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); } } }