Exemplo n.º 1
0
        public async Task <IActionResult> Authorize(AuthorizeAddressModel model)
        {
            var app = (await _apiService.AppInfoAsync(model.AppId)).App;

            if (!ModelState.IsValid)
            {
                return(View("AuthError"));
            }
            var url  = new Uri(model.RedirectUri);
            var user = await GetCurrentUserAsync();

            // Wrong domain
            if (url.Host != app.AppDomain && app.DebugMode == false)
            {
                ModelState.AddModelError(string.Empty, "Redirect uri did not work in the valid domain!");
                _logger.LogInformation($"A request with appId {model.AppId} is access wrong domian.");
                return(View("AuthError"));
            }
            // Signed in. App is not in force input password mode. User did not specify force input.
            else if (user != null && app.ForceInputPassword != true && model.ForceConfirm != true)
            {
                await _authLogger.LogAuthRecord(user.Id, HttpContext.Connection.RemoteIpAddress.ToString(), true, app.AppId);

                return(await _authManager.FinishAuth(user, model, app.ForceConfirmation));
            }
            // Not signed in but we don't want his info
            else if (model.TryAutho == true)
            {
                return(Redirect($"{url.Scheme}://{url.Host}:{url.Port}/?{Values.DirectShowString.Key}={Values.DirectShowString.Value}"));
            }
            var viewModel = new AuthorizeViewModel(model.RedirectUri, model.State, model.AppId, app.AppName, app.IconPath);

            return(View(viewModel));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> SignIn(SignInAddressModel model)
        {
            var provider = _authProviders.SingleOrDefault(t => t.GetName().ToLower() == model.ProviderName.ToLower());

            if (provider == null)
            {
                return(NotFound());
            }
            var         oauthModel = model.BuildOAuthInfo();
            IUserDetail info;

            try
            {
                info = await provider.GetUserDetail(model.Code);
            }
            catch (AiurAPIModelException)
            {
                var refreshLink = provider.GetSignInRedirectLink(new AiurUrl("", new FinishAuthInfo
                {
                    AppId       = oauthModel.AppId,
                    RedirectUri = oauthModel.RedirectUri,
                    State       = oauthModel.State,
                }));
                return(Redirect(refreshLink));
            }
            var account = await _dbContext
                          .ThirdPartyAccounts
                          .Include(t => t.Owner)
                          .ThenInclude(t => t.Emails)
                          .Where(t => t.Owner != null)
                          .Where(t => t.OpenId != null)
                          .FirstOrDefaultAsync(t => t.OpenId == info.Id);

            var app = (await _apiService.AppInfoAsync(oauthModel.AppId)).App;

            if (account != null)
            {
                await _authLogger.LogAuthRecord(account.OwnerId, HttpContext, true, app.AppId);

                await _signInManager.SignInAsync(account.Owner, true);

                return(await _authManager.FinishAuth(account.Owner, oauthModel, app.ForceConfirmation, app.TrustedApp));
            }
            var viewModel = new SignInViewModel
            {
                RedirectUri  = oauthModel.RedirectUri,
                State        = oauthModel.State,
                AppId        = oauthModel.AppId,
                UserDetail   = info,
                ProviderName = model.ProviderName,
                AppImageUrl  = app.IconPath,
                CanFindAnAccountWithEmail = await _dbContext.UserEmails.AnyAsync(t => t.EmailAddress.ToLower() == info.Email.ToLower()),
                Provider = provider
            };

            return(View(viewModel));
        }