public IActionResult RequestInvite(InviteRequestModel requestModel) { //if already logged in, redirect to home if (!CurrentUser.IsVisitor()) { return(R.Fail.Result); } //check if the email being requested is already a regsitered user var user = _userService.GetByUserInfo(requestModel.Email); if (user != null) { return(R.Fail.With("error", T("A user with this email is already registered")).Result); } //do we already have a request with this email var inviteRequest = _inviteRequestService.FirstOrDefault(x => x.Email == requestModel.Email); if (inviteRequest == null) { inviteRequest = new InviteRequest() { Email = requestModel.Email, CreatedOn = DateTime.UtcNow }; _inviteRequestService.Insert(inviteRequest); RaiseEvent(NamedEvent.InvitationRequested, requestModel.Email); } return(R.Success.Result); }
public async Task <IHttpActionResult> InviteToRegisterInCompany(Invite inviteDetail) { CervittApiResult result = new CervittApiResult(); if (inviteDetail == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } if (string.IsNullOrEmpty(inviteDetail.EmailAddress)) { throw new HttpResponseException(HttpStatusCode.BadRequest); } User user = await db.Users.SingleOrDefaultAsync(c => c.UserName == User.Identity.Name); if (user == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } if (!User.Identity.IsAuthenticated) { throw new HttpResponseException(HttpStatusCode.Unauthorized); } if (user.Company == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } string postEmailAddress = inviteDetail.EmailAddress.Replace(Environment.NewLine, ","); postEmailAddress = postEmailAddress.Replace('\r', ','); postEmailAddress = postEmailAddress.Replace('\n', ','); string[] emailListToInvite = postEmailAddress.Split(','); bool hasInvalidEmailAddressInList = false; if (emailListToInvite.Length == 0) { result.Success = false; result.ErrorMessage = "No any email address to invite."; } else { hasInvalidEmailAddressInList = EmailService.CheckAnyEmailIsNotValid(emailListToInvite); if (hasInvalidEmailAddressInList) { result.Success = false; result.ErrorMessage = "Invalid email address found or email format is not correct."; return(Ok(result)); } for (int i = 0; i <= emailListToInvite.Length - 1; i++) { if (string.IsNullOrEmpty(emailListToInvite[i])) { continue; } string emailToInvite = emailListToInvite[i].Trim(); Guid inviteCode = Guid.NewGuid(); bool userExistInSystem = await db.Users.AnyAsync(u => u.Email == emailToInvite); if (!userExistInSystem) { InviteRequest existingRequest = await db.InviteRequests.SingleOrDefaultAsync(c => c.InviteType == 1 && c.InviteToEmailAddress == emailToInvite && c.InviteFromUserId == user.Id && c.Processed == false); if (existingRequest == null) { string webSiteUrl = System.Configuration.ConfigurationManager.AppSettings["WebSiteUrl"]; string emailContent = " You have been invited by {0} to join." + "<br><br>" + "Please click below link to register and join."; emailContent = string.Format(emailContent, user.FirstName + " (" + user.Email + ")"); emailContent = emailContent + "<br><br>" + string.Format("Click here to <a href='{0}/{1}'><strong>Join</strong></a>", string.Concat(webSiteUrl, "/", "registration"), inviteCode.ToString()); string apiKey = SENDGRID_API_KEY; SendGridClient sendGridClient = new SendGridClient(apiKey, "https://api.sendgrid.com"); EmailAddress emailSender = new EmailAddress("*****@*****.**", "Cervitt"); String subject = "Invitation from Cervitt User to join."; EmailAddress emailRecipient = new EmailAddress(emailToInvite); Content content = new Content("text/html", emailContent); SendGridMessage mail = MailHelper.CreateSingleEmail(emailSender, emailRecipient, subject, "", emailContent); dynamic response = sendGridClient.SendEmailAsync(mail); InviteRequest inviteRequest = new InviteRequest(); inviteRequest.InviteType = 1; inviteRequest.Processed = false; inviteRequest.InviteDate = DateTime.Now; inviteRequest.InviteCode = inviteCode; inviteRequest.InviteFromCompanyId = user.Company.ID; inviteRequest.InviteFromUserId = user.Id; inviteRequest.InviteToEmailAddress = emailToInvite; inviteRequestService.Insert(inviteRequest); result.Success = true; result.SuccessMessage += emailToInvite + ","; } } } } if (result.Success) { if (result.SuccessMessage.EndsWith(",")) { result.SuccessMessage = result.SuccessMessage.TrimEnd(','); } result.SuccessMessage = "Invite request has been sent to " + result.SuccessMessage; } else { result.ErrorMessage = "Invite request not sent. (Possible reason: Either email is invalid, email already exist or request already sent.)"; } return(Ok(result)); }