public Task CreateAsync(Submitter invitee, Submission submission, UnconfirmedSubmissionOwner invitation) { using (var db = new WebGalleryDbContext()) { // remove invitation db.UnconfirmedSubmissionOwners.RemoveRange(from u in db.UnconfirmedSubmissionOwners where u.RequestID == invitation.RequestID select u); // if the invitee has no ownership for this app, add one var alreadyHasOwnership = db.SubmissionOwners.Any(o => o.SubmissionID == submission.SubmissionID && o.SubmitterID == invitee.SubmitterID); if (!alreadyHasOwnership) { db.SubmissionOwners.Add(new SubmissionOwner { SubmissionID = submission.SubmissionID, SubmitterID = invitee.SubmitterID }); } db.SaveChanges(); return(Task.FromResult(0)); } }
public Task SendOwnershipInvitation(string emailAddressOfInvitee, UnconfirmedSubmissionOwner unconfirmedSubmissionOwner, string urlAuthority, Func <string, string> htmlEncode) { using (var db = new WebGalleryDbContext()) { var submission = (from s in db.Submissions where s.SubmissionID == unconfirmedSubmissionOwner.SubmissionID select s).FirstOrDefault(); if (submission == null) { return(Task.FromResult(0)); } // html encode some strings submission.Nickname = htmlEncode(submission.Nickname); submission.Version = htmlEncode(submission.Version); unconfirmedSubmissionOwner.FirstName = htmlEncode(unconfirmedSubmissionOwner.FirstName); unconfirmedSubmissionOwner.LastName = htmlEncode(unconfirmedSubmissionOwner.LastName); var invitationGuid = htmlEncode(unconfirmedSubmissionOwner.RequestID.ToString()); // build the body of the email var bodyBuilder = new StringBuilder(); bodyBuilder.Append($"<p>{unconfirmedSubmissionOwner.FirstName} {unconfirmedSubmissionOwner.LastName}:</p>"); bodyBuilder.Append($"<p>You have been invited to take co-ownership of an application intended for inclusion in Microsoft's <a href='https://{urlAuthority}' title='Web App Gallery'>Web App Gallery</a>.</p>"); bodyBuilder.Append("<p>"); bodyBuilder.Append($"The ID of the application is {submission.Nickname}.<br />"); bodyBuilder.Append($"The version is {submission.Version}."); bodyBuilder.Append("</p>"); bodyBuilder.Append("<p>"); bodyBuilder.Append($"To accept this invitation please visit <a href='https://{urlAuthority}/ownership/invitations/{invitationGuid}' title='go here to accept this invitation'>this Web page</a> and follow these steps:"); bodyBuilder.Append("</p>"); bodyBuilder.Append("<ol>"); bodyBuilder.Append("<li>Log into Live ID. If you do not yet have a Live ID account you will be able to create one from the log-in page.</li>"); bodyBuilder.Append("<li>Provide us with your contact information (unless you have done so in the past).</li>"); bodyBuilder.Append("<li>Click the appropriate button to accept or decline this invitation.</li>"); bodyBuilder.Append("</ol>"); bodyBuilder.Append("<p>"); bodyBuilder.Append("Best regards,<br />"); bodyBuilder.Append("Web Application Gallery Team"); bodyBuilder.Append("</p>"); var subject = "You are invited to be a co-owner of an Web App Gallery application"; var from = GetFromMailAddress(); SendGridEmailHelper.SendAsync(subject, bodyBuilder.ToString(), from.Address, from.DisplayName, emailAddressOfInvitee); return(Task.FromResult(0)); } }
public Task <UnconfirmedSubmissionOwner> CreateInvitationAsync(string firstName, string lastName, Submission submission) { using (var db = new WebGalleryDbContext()) { var unconfirmedSubmissionOwner = new UnconfirmedSubmissionOwner { SubmissionID = submission.SubmissionID, RequestID = Guid.NewGuid(), RequestDate = DateTime.Now, FirstName = firstName, LastName = lastName, IsSuperSubmitterRequest = false }; db.UnconfirmedSubmissionOwners.Add(unconfirmedSubmissionOwner); db.SaveChanges(); return(Task.FromResult(unconfirmedSubmissionOwner)); } }