public AppUser GetOAuthUser(OAuthUserLoginModel model)
        {
            var user =
                DbSet.Where(x => x.Provider == model.Provider && x.ProviderUserId == model.ProviderId).Include(x => x.Token).FirstOrDefault();

            return(user);
        }
        public IHttpActionResult ExternalLogin([FromBody] OAuthUserLoginModel userLoginModel)
        {
            Response.Message    = Messages.SucessMessage;
            Response.StatusCode = HttpStatusCode.OK;
            Response.Response   = UserService.OAuthLogin(userLoginModel);

            return(Ok(Response));
        }
Ejemplo n.º 3
0
        public AppUser OAuthLogin(OAuthUserLoginModel loginModel)
        {
            HashSet <string> providers = new HashSet <string>()
            {
                "google",
                "facebook",
            };

            if (!providers.Contains(loginModel.Provider))
            {
                throw new MovieUniverseException(ExceptionType.InvalidProvider);
            }

            var oAuthUser = Repository.GetOAuthUser(loginModel);

            if (oAuthUser != null)
            {
                if (oAuthUser.Token.ExpirationDate.CompareTo(DateTimeOffset.Now) > 0)
                {
                    return(oAuthUser);
                }

                var token = GenerateToken(oAuthUser);
                token.UserId    = oAuthUser.Id;
                oAuthUser.Token = InsertToken(token);
                return(oAuthUser);
            }
            var appUser = new AppUser()
            {
                Email              = loginModel.Email,
                EmailComfirmed     = true,
                Name               = loginModel.Name,
                Provider           = loginModel.Provider,
                ProviderUserId     = loginModel.ProviderId,
                PhotoUrl           = loginModel.ProviderProfilePhotoUrl,
                ProviderProfileUrl = loginModel.ProviderProfileUrl,
                IsPublicUser       = true,
            };

            appUser.Token = GenerateToken(appUser);
            var user = Repository.Insert(appUser);

            Repository.Save();
            return(user);
        }