using AyCode.Interfaces.StorageHandlers; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.JSInterop; using Newtonsoft.Json; using System.Net.Http.Json; using System.Text; 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; using TIAMWebApp.Shared.Application.Utility; namespace TIAMMobilApp.Services { public class UserDataServiceMobile : IUserDataService { private readonly HttpClient http; private readonly ISecureStorageHandler secureStorageHandler; public Dictionary userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public UserDataServiceMobile(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(Guid id) { UserSessionModel User = null; var dbUser = await GetUserByIdAsync(id); if (dbUser != null) { User = new UserSessionModel(dbUser.Id, UserType.User, dbUser.EmailAddress, 1); return User; } else { return null; } } 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 GetUserByIdAsync(Guid Id) { return await http.GetFromJsonAsync(APIUrls.GetUserById); } 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) { //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); } } }