using System; using System.Collections.Generic; using System.Linq; using EVLab.Web.Data; using EVLav.Web.BusinessLogic.Interfaces; using EVLab.Web.Common; namespace EVLav.Web.BusinessLogic { public class UsersService : IUsersService { private readonly IRepository _repository; public UsersService(IRepository repository) { _repository = repository; } public List GetUsers() { return _repository.SetNoTracking().Include(x => x.Company).ToList(); } public AspNetUser GetUser(string email) { return _repository.SetNoTracking().FirstOrDefault(x => x.Email == email); } public void ManageUserAccess(string id, bool isBlocked) { var user = _repository.Set().FirstOrDefault(x => x.Id == id); user.IsActive = !isBlocked; _repository.Update(user); } public RegisterInvitation GetRegisterInvitation(string email) { return _repository.SetNoTracking().Where(x => x.Email == email).OrderByDescending(x => x.CreatedOn).FirstOrDefault(); } public void Invite(string userId, string email, int companyId) { var invitation = new RegisterInvitation() { Email = email, CompanyId = companyId, RegistrationKey = Guid.NewGuid().ToString().Replace("-", string.Empty), CreatedOn = DateTime.UtcNow, Expired = false, UserRole = companyId == EvConstants.SystemCompanyId ? UserRolesEnum.ADMINISTRATOR : UserRolesEnum.USER, InvitedByUserId = userId }; ValidateInvitation(invitation); _repository.Add(invitation); SendInvitation(invitation); } void ValidateInvitation(RegisterInvitation invitation) { if(string.IsNullOrWhiteSpace(invitation.Email)) { throw new Exception("Invitation email cannot be empty."); } if(_repository.SetNoTracking().Any(x => x.Email.ToLower() == invitation.Email.ToLower())) { throw new Exception($"{ invitation.Email } is an existing user already."); } } void SendInvitation(RegisterInvitation invitation) { var mailManager = new MailManager(); try { var registerUrl = string.Format("{2}/account/register?email={0}&key={1}", invitation.Email, invitation.RegistrationKey, EvConstants.SiteUrl); var message = string.Format(@" Dear User,

You are invited to register to EvLab Web. Please follow this link to complete your registration: Register

Many Thanks!

Your EvLab Team", registerUrl); mailManager.SendEmail(invitation.Email, message, "EvLab Web Registration"); } catch (Exception ex) { mailManager.SendEmail("hello@evlab.io", "Register invitation send failed. Message: " + ex.Message); } } public void UpdateRegisterInvitation(RegisterInvitation invitation) { _repository.Update(invitation); } } }