public async Task SendAlertSMSAsync()
        {
            var helper = new MessageDeliveryHelper();
            var user   = new IdentityUser();

            user.PhoneNumber          = "6122341115";
            user.PhoneNumberConfirmed = true;
            user.UserName             = "******";
            var alert = new Alert();

            alert.SMS = true;
            var status = new Status();

            status.Text = "This is a pretend tweet";
            status.User = new User()
            {
                ScreenNameResponse = "Bob"
            };
            status.OEmbedUrl = "https://twitter.com/im_uname/status/1347999892392747011";


            var result = await helper.SendAlertsAsync(user, alert, status);

            Assert.IsTrue(result.SMSSuccess);
        }
예제 #2
0
        public TweetController(ILogger <TweetController> logger, ApplicationDbContext dbCtx)
        {
            _dbCtx  = dbCtx;
            _logger = logger;
            var auth = new MvcAuthorizer();

            _twtCtx        = new TwitterContext(auth);
            _messageHelper = new MessageDeliveryHelper(_logger);
        }
예제 #3
0
        public async Task <IActionResult> OnPostConfirmationAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            // Get the information about the user from the external login provider
            var info = await _signInManager.GetExternalLoginInfoAsync();

            if (info == null)
            {
                ErrorMessage = "Error loading external login information during confirmation.";
                return(RedirectToPage("./Login", new { ReturnUrl = returnUrl }));
            }

            if (ModelState.IsValid)
            {
                var user = new IdentityUser {
                    UserName = Input.Email, Email = Input.Email, PhoneNumber = Input.PhoneNumber
                };

                var result = await _userManager.CreateAsync(user);

                if (result.Succeeded)
                {
                    result = await _userManager.AddLoginAsync(user, info);

                    if (result.Succeeded)
                    {
                        _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);

                        var userId = await _userManager.GetUserIdAsync(user);

                        var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                        code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                        var callbackUrl = Url.Page(
                            "/Account/ConfirmEmail",
                            pageHandler: null,
                            values: new { area = "Identity", userId = userId, code = code },
                            protocol: Request.Scheme);

                        await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                                                          $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                        var helper = new MessageDeliveryHelper(_logger);
                        await helper.ConfirmSMS(user);

                        // If account confirmation is required, we need to show the link if we don't have a real email sender
                        if (_userManager.Options.SignIn.RequireConfirmedAccount)
                        {
                            return(RedirectToPage("./RegisterConfirmation", new { Email = Input.Email }));
                        }

                        //we want to store these credentials.
                        var props = new AuthenticationProperties();
                        props.StoreTokens(info.AuthenticationTokens);
                        props.IsPersistent = true;

                        UserDetail userDetails;

                        if (_dbctx.UserDetails.Any(c => c.UserId == user.Id))
                        {
                            userDetails = _dbctx.UserDetails.First(c => c.UserId == user.Id);
                            userDetails.TwitterOAuthToken  = props.GetTokenValue("access_token");
                            userDetails.TwitterOAuthSecret = props.GetTokenValue("access_token_secret");
                            _dbctx.UserDetails.Update(userDetails);
                        }
                        else
                        {
                            userDetails = new UserDetail(user, props);
                            _dbctx.UserDetails.Add(userDetails);
                        }



                        var saveTask = await _dbctx.SaveChangesAsync();

                        await _signInManager.SignInAsync(user, props);

                        return(LocalRedirect(returnUrl));
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            ProviderDisplayName = info.ProviderDisplayName;
            ReturnUrl           = returnUrl;
            return(Page());
        }