public string GetSystemToken()
        {
            var claims = new List <Claim> {
                new(ClaimTypes.Role, "Admin")
            };
            var principal = new ClaimsPrincipal(new ClaimsIdentity(claims));

            return(_jsonWebTokenGenerationService.Generate(principal));
        }
        public async Task <IActionResult> ExternalLoginCallback()
        {
            var loginInfo = await _signInManager.GetExternalLoginInfoAsync();

            if (loginInfo == null)
            {
                return(BadRequest());
            }

            var user = await _userManager.FindByLoginAsync(loginInfo.LoginProvider, loginInfo.ProviderKey);

            var accessToken = string.Empty;

            if (user == null)
            {
                user = new User
                {
                    UserName = loginInfo.ProviderKey
                };

                var createResult = await _userManager.CreateAsync(user);

                if (!createResult.Succeeded)
                {
                    return(BadRequest(createResult.Errors));
                }

                await _userManager.AddLoginAsync(user, loginInfo);
            }

            var userToken = loginInfo.AuthenticationTokens.FirstOrDefault(d => d.Name == "access_token");

            if (userToken != null)
            {
                accessToken = userToken.Value;
                await _userStore.SetTokenAsync(user, loginInfo.LoginProvider, userToken.Name, userToken.Value,
                                               default);
            }

            var returnUrl = loginInfo.AuthenticationProperties.Items["returnUrl"];

            returnUrl = QueryHelpers.AddQueryString(returnUrl, "access_token",
                                                    _jsonWebTokenGenerationService.Generate(loginInfo.Principal));

            await _messageBroker.PublishAsync(new LoginEvent { Token = accessToken, UserId = user.Id });

            return(Redirect(returnUrl));
        }