public async Task <IActionResult> SendInviteViaMethod(HandshakeMethod method, int id) { var code = await _invitationService.GetAccessCodeAsync(id); var model = new SendInviteViaMethodViewModel() { MyProfile = await GetCurrentUserAsync(), }; switch (method) { case HandshakeMethod.Email: { var subject = string.Empty; var action = "join"; switch (code.Type) { case InvitationType.Register: subject = _settings.Site.HostDisplayName; break; case InvitationType.FollowMe: { UserProfileModel user; if (model.MyProfile.UserId == code.CreatedByUserId) { user = await _localProfiles.GetUser(model.MyProfile.UserId.Value, model.MyProfile.UserId); } else { user = await _localProfiles.GetUser(code.CreatedByUserId, model.MyProfile.UserId); } subject = $"{user.DisplayName} @{user.Handle}"; } break; case InvitationType.AddMeToGroup: subject = code.GroupName; break; } subject = Uri.EscapeDataString($"Invitation to {action} {subject}"); var body = Uri.EscapeDataString(code.GroupName); model.Link = $"mailto:[email protected]?body={body}&subject={subject}"; } break; case HandshakeMethod.Link: model.Link = $"/Account/AcceptInvite/{code.Code}"; break; case HandshakeMethod.ManualCodeMachine: model.RawString = code.Code; break; case HandshakeMethod.ManualCodeHuman: if (Guid.TryParse(code.Code, out var asGuid)) { model.RawString = string.Join(' ', _auth.ToBiometric(asGuid.ToByteArray())); } else { model.RawString = code.Code; } break; case HandshakeMethod.QRCode: { QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode("The text which should be encoded.", QRCodeGenerator.ECCLevel.Q); Base64QRCode qrCode = new Base64QRCode(qrCodeData); model.QRCodeImageAsBase64 = qrCode.GetGraphic(20); } break; default: throw new Exception($"Invalid method {method}"); } return(View(model)); }