//using BCryptNet = BCrypt.Net.BCrypt; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Options; using CarParkValidationAPI.Authorization; using CarParkValidationAPI.Entities; using CarParkValidationAPI.Helpers; using CarParkValidationAPI.Models.Users; using CarParkValidationAPI.Models; using CarParkValidationAPI.Datas; using CarParkValidationAPI.Interface; using Microsoft.EntityFrameworkCore; using CommonAD.Models; using CommonAD; namespace CarParkValidationAPI.Repository { public class UserServiceFakeRepository : IUserService { private DataContext _context; private IJwtUtils _jwtUtils; private readonly AppSettings _appSettings; public UserServiceFakeRepository( DataContext context, IJwtUtils jwtUtils, IOptions appSettings) { _context = context; _jwtUtils = jwtUtils; _appSettings = appSettings.Value; } public AuthenticateResponse Authenticate(AuthenticateRequest model) { int statuscode = -1; User myUser = new User(); //now check the adminuser table var user = _context.AdminUsers. SingleOrDefault(x => x.StafflinkNo == model.Username && x.Active == true); if (user != null) { myUser.Role = (int) user.RoleType; myUser.Id = user.Id; myUser.ValidationPointId = user.ValidationPointId??0; statuscode = 1; } else //not allow { statuscode = 0; myUser.Role = (int) AdminRole.Normal; } // authentication successful so generate jwt token var jwtToken = _jwtUtils.GenerateJwtToken(myUser); return new AuthenticateResponse(myUser, jwtToken); } public async Task> LoginApiAD(AuthenticateRequest model) { User user = new User(); int statusCode = 1; if (model.Username.ToLower() == "admin") { user.FirstName = model.Username; user.LastName = "LS Test"; user.Role = (int)AdminRole.Admin; user.Username = model.Username; user.Email = "admin@mail.com"; user.ValidationPointId = 1; } else { var userdb = _context.AdminUsers.SingleOrDefault(x => x.StafflinkNo == model.Username); if (userdb != null) { user.Username = model.Username; user.FirstName = userdb.FirstName; user.LastName = " LS Normal"; user.Email = userdb.Email; user.Role = userdb.RoleType; user.ValidationPointId = userdb.ValidationPointId ?? 1; } } // authentication successful so generate jwt token var jwtToken = _jwtUtils.GenerateJwtToken(user); var retval = await Task.Run(() => new AuthenticateResponse(user, jwtToken)); return new ResultModel() { Data = retval, StatusCode = statusCode }; } public async Task> NLoginApiAD(AuthenticateRequest model) { User myUser = null; AuthenticateResponse retval = null; int statuscode = 0; string webAPIUrl = _appSettings.LoginWebAPI; var loginInfo = await CommonAD.WebAPIUtil.GetLoginADAsync(webAPIUrl, "CheckADCredentials", model.Username, model.Password); if (loginInfo != null && loginInfo.result) { myUser = new User(); myUser.Email = loginInfo.email; myUser.FirstName = loginInfo.firstName; myUser.LastName = loginInfo.lastName; myUser.Username = loginInfo.stafflinkNo; //now check the adminuser table var user = _context.AdminUsers.SingleOrDefault(x => x.StafflinkNo == model.Username); if (user != null) { myUser.Role = user.RoleType; myUser.Id = user.Id; } else myUser.Role = (int) AdminRole.Normal; // validate // if (user == null || !BCryptNet.Verify(model.Password, user.PasswordHash)) // authentication successful so generate jwt token var jwtToken = _jwtUtils.GenerateJwtToken(myUser); statuscode = 1; retval = new AuthenticateResponse(myUser, jwtToken); } return new ResultModel() { Data = retval, StatusCode = statuscode }; } public async Task> LoginAD(AuthenticateRequest model) { User myUser = null; AuthenticateResponse retval = null; int statuscode = 0; ADConfig adConfig = new ADConfig() { LDAPPassword = _appSettings.LDAPPassword, LDAPPath = _appSettings.LDAPPath, LDAPUser = _appSettings.LDAPUser, ADTimeOutStr = _appSettings.ADTimeOut }; myUser = await Task.Run(() => LoginADStaff(adConfig,model.Username, model.Password)); if (!string.IsNullOrEmpty(myUser.Username)) { statuscode = 1; // authentication successful so generate jwt token var jwtToken = _jwtUtils.GenerateJwtToken(myUser); retval = new AuthenticateResponse(myUser, jwtToken); } return new ResultModel() { Data = retval, StatusCode = statuscode }; } public async Task> SearchApiStaff(string staffLinkNo) { User myUser = null; int statuscode = 0; myUser = new User(); myUser.Email = "Facky"; myUser.FirstName = ""; myUser.LastName = ""; myUser.Username = staffLinkNo; statuscode = 0; /* string webAPIUrl = _appSettings.LoginWebAPI; var loginInfo = await CommonAD.WebAPIUtil.SearchStaffAsync(webAPIUrl, "SearchStaff", staffLinkNo); if (loginInfo != null && loginInfo.result) { myUser = new User(); myUser.Email = loginInfo.email; myUser.FirstName = loginInfo.firstName; myUser.LastName = loginInfo.lastName; myUser.Username = loginInfo.stafflinkNo; statuscode = 1; }*/ return new ResultModel() { Data = myUser, StatusCode = statuscode }; // return myUser; } public async Task> SearchADStaff(string staffLinkNo) { int statuscode = 0; ADConfig adConfig = new ADConfig() { LDAPPassword = _appSettings.LDAPPassword, LDAPPath = _appSettings.LDAPPath, LDAPUser = _appSettings.LDAPUser, ADTimeOutStr = _appSettings.ADTimeOut }; User myUser = await Task.Run(() => SearchADStaff(adConfig, staffLinkNo)); if (!string.IsNullOrEmpty(myUser.Username)) statuscode = 1; return new ResultModel() { Data = myUser, StatusCode = statuscode }; } private User SearchADStaff(ADConfig adConfig, string username) { MyADObject myADObj = new() ; User user = new() { Username = myADObj.stafflinkNo, Email = myADObj.email, FirstName = myADObj.firstName, LastName = myADObj.lastName }; // myADObj.JobTitle; return user; // return null; } private User LoginADStaff(ADConfig adConfig, string username, string password) { MyADObject myADObj = new(); User user = new() { Username = username, Email = "email", FirstName = username, LastName = "Fake" }; // myADObj.JobTitle; return user; // return null; } } }