Beispiel #1
0
        public async Task <IActionResult> Connect()
        {
            var result = await HttpContext.AuthenticateAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);

            if (result?.Succeeded != true)
            {
                throw new Exception("External authentication error");
            }
            var(user, provider, providerUserId, claims) = FindUserFromExternalProvider(result);
            RegisterExternalInputModel model = new RegisterExternalInputModel {
                Provider       = provider,
                ProviderUserId = providerUserId,
                Claims         = claims,
                UserName       = (claims.Where(c => c.Type == ClaimTypes.Email).FirstOrDefault() != null ? claims.Where(c => c.Type == ClaimTypes.Email).FirstOrDefault().Value : null),
                FirstName      = (claims.Where(c => c.Type == ClaimTypes.GivenName).FirstOrDefault() != null ? claims.Where(c => c.Type == ClaimTypes.GivenName).FirstOrDefault().Value : null),
                LastName       = (claims.Where(c => c.Type == ClaimTypes.Surname).FirstOrDefault() != null ? claims.Where(c => c.Type == ClaimTypes.Surname).FirstOrDefault().Value : ""),
                Email          = (claims.Where(c => c.Type == ClaimTypes.Email).FirstOrDefault() != null ? claims.Where(c => c.Type == ClaimTypes.Email).FirstOrDefault().Value : ""),
                Gender         = (claims.Where(c => c.Type == ClaimTypes.Gender).FirstOrDefault() != null ? claims.Where(c => c.Type == ClaimTypes.Gender).FirstOrDefault().Value : "")
            };

            return(View(model));
        }
Beispiel #2
0
        public async Task <IActionResult> Connect(RegisterExternalInputModel model)
        {
            if (ModelState.IsValid)
            {
                if ((model.UserName == null) || (model.UserName == string.Empty))
                {
                    return(RedirectToAction("Create"));
                }
                else
                {
                    var user = await _userManager.FindByNameAsync(model.UserName);

                    if (user != null)
                    {
                        var externalResult = await HttpContext.AuthenticateAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);

                        var(localUser, provider, providerUserId, claims) = FindUserFromExternalProvider(externalResult);
                        var result = await _userManager.AddLoginAsync(user, new UserLoginInfo(provider, providerUserId, user.UserName));

                        if (result.Succeeded)
                        {
                            string mailMessage = $"K vašemu úètu " + user.UserName + " byl pøidán úèet služby " + provider + ": " + providerUserId;

                            string htmlBody = await _razorRenderer.RenderViewToStringAsync("/Emails/Pages/ExternalConnection.cshtml", new ExternalConnectionViewModel
                            {
                                User           = user,
                                Provider       = provider,
                                ExternalUserId = providerUserId
                            });

                            _emailSender.HtmlMessage = htmlBody;

                            await _emailSender.SendEmailAsync(user.Email, "Externí poskytovatel pøidán", mailMessage);

                            return(RedirectToAction("Callback"));
                        }
                        return(View("Connect", model));
                    }
                    else
                    {
                        var firstname = model.FirstName;
                        var lastname  = model.LastName;
                        var username  = model.UserName;
                        var email     = model.Email;
                        var gender    = model.Gender;
                        return(RedirectToAction("Create", new {
                            Provider = model.Provider,
                            ProviderUserId = model.ProviderUserId,
                            Claims = model.Claims,
                            FirstName = firstname != null ? firstname : null,
                            LastName = lastname != null ? lastname : null,
                            Email = email != null ? email : null,
                            UserName = username != null ? username : null,
                            Gender = gender != null ? gender : null,
                        }));
                    }
                }
            }
            else
            {
                return(View("Connect", model));
            }
        }