コード例 #1
0
        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));
        }