示例#1
0
        public async Task <LoginResult> AuthenticateAsync(FacebookAccount account, RemoteUser user)
        {
            FacebookUserInfo facebookUser = GetFacebookUserInfo(account.Token);

            if (!Validate(facebookUser, account.FacebookUserId, account.Email))
            {
                return(new LoginResult
                {
                    Status = false,
                    Message = "Access is denied"
                });
            }

            LoginResult result = FacebookSignIn.SignIn(account.FacebookUserId, account.Email, account.OfficeId, facebookUser.Name, account.Token, user.Browser,
                                                       user.IpAddress, account.Culture);

            if (result.Status)
            {
                if (!Registration.HasAccount(account.Email))
                {
                    string       template     = "~/Catalogs/{catalog}/Areas/Frapid.Account/EmailTemplates/welcome-3rd-party.html";
                    WelcomeEmail welcomeEmail = new WelcomeEmail(facebookUser, template, ProviderName);
                    await welcomeEmail.SendAsync();
                }
            }
            return(result);
        }
        public Task <FacebookUserInfo> GetUserInfo()
        {
            var keys   = new object [] { "fields" };
            var values = new object [] { "id,first_name,last_name,email" };

            string version    = new GraphRequest("/me", null).Version;
            string httpMethod = new GraphRequest("/me", null).HTTPMethod;

            GraphRequest graphRequest = new GraphRequest("/me", NSDictionary.FromObjectsAndKeys(values, keys), AccessToken.CurrentAccessToken.TokenString, version, httpMethod);

            var tcs = new TaskCompletionSource <FacebookUserInfo>();

            graphRequest.Start((GraphRequestConnection connection, NSObject result, NSError error) =>
            {
                if (error == null)
                {
                    tcs.TrySetResult(FacebookUserInfo.CreateFrom(((NSDictionary)result).Select(v => new KeyValuePair <string, string>(v.Key.ToString(), v.Value.ToString())).ToDictionary(v => v.Key, v => v.Value)));
                }
                else
                {
                    tcs.SetException(new NSErrorException(error));
                }
            });

            return(tcs.Task);
        }
示例#3
0
    public void OnPlayerLoginFacebook(bool isSuccessful)
    {
        if (playerData == null)
        {
            playerData = new PlayerData();
        }

        if (isSuccessful)
        {
            playerFacebookInfo = FacebookHelper.Instance.UserInfo;

            playerData.FacebookID      = playerFacebookInfo.userID;
            playerData.FacebookName    = playerFacebookInfo.userName;
            playerData.FacebookFriends = playerFacebookInfo.userFriends;

            playerData.LogAllInfos();

            // Update player's facebook info (name, friends) to database
            UpdatePlayerFacebookInfoToDatabase();
        }
        else
        {
            playerData.FacebookID      = "";
            playerData.FacebookName    = "Anonymous Player";
            playerData.FacebookFriends = "";
        }
    }
示例#4
0
        public async Task <IActionResult> FacebookLogin([FromBody] FacebookUserInfo userInfo)
        {
            try
            {
                string newGender = _resourceForGender[userInfo.Gender].Value;
                userInfo.Gender = newGender;
                var user = await _authService.FacebookLoginAsync(userInfo);

                if (user == null)
                {
                    return(BadRequest());
                }
                await AddEntryMembershipDate(user.Id);

                var generatedToken = await _jwtService.GenerateJWTTokenAsync(user);

                return(Ok(new { token = generatedToken }));
            }
            catch (Exception exc)
            {
                _loggerService.LogError(exc.Message);
            }

            return(BadRequest());
        }
示例#5
0
        public string ShowFacebookUserRelationWindow(string userID)
        {
            try
            {
                //Process authorization
                if (!ProcessAuthorization(HttpContext.Current))
                {
                    AccessDenied(HttpContext.Current);
                    return(null);
                }

                FacebookApiInfo apiInfo = FacebookApiHelper.GetFacebookApiInfoForCurrentUser();

                if (apiInfo == null)
                {
                    throw new SocialMediaAccountNotFound(SocialMediaResource.SocialMediaAccountNotFoundFacebook);
                }

                FacebookDataProvider provider = new FacebookDataProvider(apiInfo);

                FacebookUserInfo user = provider.LoadUserInfo(userID);
                return(GetFacebookUserInfoPage(user));
            }
            catch (Exception ex)
            {
                throw ProcessError(ex, "ShowTwitterUserRelationWindow");
            }
        }
示例#6
0
        public async Task <UserDTO> FacebookLoginAsync(FacebookUserInfo facebookUser)
        {
            var user = await _userManager.FindByEmailAsync(facebookUser.Email);

            if (user == null)
            {
                user = new User
                {
                    SocialNetworking = true,
                    UserName         = facebookUser.Email ?? facebookUser.UserId,
                    FirstName        = facebookUser.Name.Split(' ')[0],
                    Email            = facebookUser.Email ?? "*****@*****.**",
                    LastName         = facebookUser.Name.Split(' ')[1],
                    ImagePath        = "default_user_image.png",
                    EmailConfirmed   = true,
                    RegistredOn      = DateTime.Now,
                    UserProfile      = new UserProfile()
                    {
                        Birthday = DateTime.Parse(facebookUser.Birthday, CultureInfo.InvariantCulture),
                        GenderID = _repoWrapper.Gender.FindByCondition(x => x.Name == facebookUser.Gender).FirstOrDefault()?.ID,
                    }
                };
                var createResult = await _userManager.CreateAsync(user);

                if (createResult.Succeeded && user.Email != "*****@*****.**")
                {
                    await _emailConfirmation.SendEmailAsync(user.Email, "Повідомлення про реєстрацію",
                                                            "Ви зареєструвались в системі EPlast використовуючи свій Facebook-акаунт. ", "Адміністрація сайту EPlast");
                }
                await _userManager.AddToRoleAsync(user, "Прихильник");
            }
            await _signInManager.SignInAsync(user, isPersistent : false);

            return(_mapper.Map <User, UserDTO>(user));
        }
示例#7
0
        private void OnRefreshScoreCallBack(IResult result)
        {
            IDictionary <string, object> data = result.ResultDictionary;

            if (!data.ContainsKey("data"))
            {
                return;
            }

            List <object> dataList = (List <object>)data["data"];

            m_RankDataTimeRecorder.RecordRefreshTime();

            for (int i = dataList.Count - 1; i >= 0; --i)
            {
                var entry = (Dictionary <string, object>)dataList[i];
                var user  = (Dictionary <string, object>)entry["user"];

                string userID = GetStringSafety(user, "id");
                if (string.IsNullOrEmpty(userID))
                {
                    continue;
                }

                FacebookUserInfo dataBase = m_Mgr.GetUserBase(userID, true);
                dataBase.gameSocre = Convert.ToInt32(entry["score"]);
                dataBase.userName  = GetStringSafety(user, "name");
            }
            m_Mgr.RebuildGamerUserInfoList();
        }
        public async Task FacebookLoginAsync_IsNull()
        {
            //Arrange
            var user         = new User();
            var userDto      = new UserDTO();
            var userId       = Guid.NewGuid().ToString();
            var facebookUser = new FacebookUserInfo()
            {
                Email    = "*****@*****.**",
                UserId   = userId,
                Name     = "John Gasiuk",
                Birthday = "11.08.2000",
                Gender   = "female"
            };

            _repoWrapper.SetupGet(x => x.Gender).Returns(_gender.Object);
            var genders = new Gender[]
            {
                new Gender()
                {
                    ID = 3
                }
            }.AsQueryable();

            _gender.Setup(x => x.FindByCondition(a => a.Name == facebookUser.Gender))
            .Returns(genders);
            user = new User
            {
                SocialNetworking = true,
                UserName         = facebookUser.Email ?? facebookUser.UserId,
                FirstName        = facebookUser.Name.Split(' ')[0],
                Email            = facebookUser.Email ?? "*****@*****.**",
                LastName         = facebookUser.Name.Split(' ')[1],
                ImagePath        = "default_user_image.png",
                EmailConfirmed   = true,
                RegistredOn      = DateTime.Now,
                UserProfile      = new UserProfile
                {
                    Birthday = DateTime.Parse(facebookUser.Birthday, CultureInfo.InvariantCulture),
                    GenderID = 3
                }
            };
            _userManager.Setup(x => x.FindByEmailAsync(facebookUser.Email))
            .ReturnsAsync((User)null);

            _userManager.Setup(x => x.CreateAsync(It.IsAny <User>()))
            .ReturnsAsync(IdentityResult.Failed(new IdentityError {
                Code = "500", Description = "456"
            }));

            _mapper.Setup(x => x.Map <User, UserDTO>(user)).Returns(userDto);
            //Act
            var result = await _authService.FacebookLoginAsync(facebookUser);

            //Assert
            Assert.IsNotNull(result);
        }
示例#9
0
        public FacebookUserInfo GetUserBase(string userID)
        {
            FacebookUserInfo data = null;

            if (m_UserInfoDic.TryGetValue(userID, out data))
            {
                return(data);
            }

            return(null);
        }
示例#10
0
    void Awake()
    {
        if (userInfo == null)
        {
            userInfo = new FacebookUserInfo();
        }

        if (!FB.IsInitialized)
        {
            FB.Init(SetInit, OnHideUnity);
        }
    }
示例#11
0
    private void UserDataCallBack(FBResult result)
    {
        if (result.Error != null)
        {
            Debug.LogWarning(result.Error);
            dispatch(FacebookEvents.USER_DATA_FAILED_TO_LOAD, result);

            return;
        }

        _userInfo = new FacebookUserInfo(result.Text);
        dispatch(FacebookEvents.USER_DATA_LOADED, result);
    }
示例#12
0
    private void OnUserInfoDownloadedEvent()
    {
        _currentUser = _fbManager.CurrentUserFacebookUserInfo;

        if (_currentUser.ProfilePicture == null)
        {
            _currentUser.OnImageLoaded += OnImageLoaded;
        }
        else
        {
            _characterImageComponent.sprite = _currentUser.ProfilePicture;
        }
    }
示例#13
0
    protected void getfrient_Click(object sender, EventArgs e)
    {
        FacebookUserInfo fbUserInfo = new FacebookUserInfo();
        string accessToken = Request.Cookies["FacebookUserInfo"].Values["accessToken"];

        JavaScriptSerializer js = new JavaScriptSerializer();
        var jsSerialize = js.Deserialize<FacebookGetFrientList.firients>(fbUserInfo.getUserFrientList(accessToken));

        foreach (var item in jsSerialize.data)
        {
            Response.Write(item.id + " " + item.name + " " + item.link + " " + item.picture + "<br/>");
        }
    }
示例#14
0
        public async Task <FacebookUserInfo> FacebookLogin(string accessToken)
        {
            // Verify token is valid.
            HttpResponseMessage verifyToken = await httpClient.GetAsync($"debug_token?input_token={accessToken}&access_token={config.Value.AppId}|{config.Value.AppSecret}");

            if (!verifyToken.IsSuccessStatusCode)
            {
                return(null);
            }

            FacebookUserInfo result = await GetAsync <FacebookUserInfo>(accessToken, "me", "fields=name,email,picture.width(100).height(100)");

            return(result);
        }
示例#15
0
    private void UserDataCallBack(FBResult result)
    {
        if (result.Error != null)
        {
            Debug.LogWarning(result.Error);
        }
        else
        {
            _userInfo = new FacebookUserInfo(result.Text);
        }


        OnUserDataRequestCompleteAction(result);
    }
示例#16
0
        private string GetFacebookUserInfoPage(FacebookUserInfo user)
        {
            Page     page = new Page();
            HtmlForm form = new HtmlForm();

            form.EnableViewState = false;

            FacebookUserInfoView ctrl = (FacebookUserInfoView)page.LoadControl(PathProvider.GetFileStaticRelativePath("SocialMedia/FacebookUserInfoView.ascx"));

            ctrl.UserInfo = user;
            form.Controls.Add(ctrl);
            page.Controls.Add(form);
            return(RenderPage(page));
        }
示例#17
0
        public async Task <IActionResult> LoginFacebookWithAccessToken([FromBody] GoogleAccessToken body)
        {
            FacebookUserInfo userInfo = null;

            if (MockOn && body.AccessToken == MockToken)             // get value from config file
            {
                userInfo = new FacebookUserInfo(isMockuser: true);
            }
            else
            {
                HttpClient client = new HttpClient();

                // 1.generate an app access token
                (string, string)[] appAccessTokenRequestParameters =
示例#18
0
    public void ParceFirendsData(string data)
    {
        _firends = new Dictionary <string, FacebookUserInfo>();
        IDictionary JSON  = ANMiniJSON.Json.Deserialize(data) as IDictionary;
        IDictionary f     = JSON["friends"] as IDictionary;
        IList       flist = f["data"] as IList;


        for (int i = 0; i < flist.Count; i++)
        {
            FacebookUserInfo user = new FacebookUserInfo(flist[i] as IDictionary);
            _firends.Add(user.id, user);
        }
    }
示例#19
0
        public FacebookUserInfo GetUserBase(string userID, bool createForce)
        {
            FacebookUserInfo data = GetUserBase(userID);

            if (createForce && data == null)
            {
                data = new FacebookUserInfo();
                m_UserInfoDic.Add(userID, data);
                m_AllUserInfoList.Add(data);

                data.userID = userID;
            }

            return(data);
        }
示例#20
0
    private void UserDataCallBack(FBResult result)
    {
        if (result.Error != null)
        {
            Debug.LogWarning(result.Error);
            dispatch(FacebookEvents.USER_DATA_FAILED_TO_LOAD, result);
        }
        else
        {
            _userInfo = new FacebookUserInfo(result.Text);
            dispatch(FacebookEvents.USER_DATA_LOADED, result);
        }


        OnUserDataRequestCompleteAction(result);
    }
示例#21
0
 public void SetData(FacebookUserInfo data, int index)
 {
     m_SelfBackGround.color = index % 2 == 0 ? m_FirstColor : m_ScenedColor;
     if (index < 3)
     {
         m_RankIcon.sprite = m_CrownImage[index].sprite;
         m_NameLabel.gameObject.SetActive(false);
         m_RankIcon.gameObject.SetActive(true);
     }
     else
     {
         m_RankIcon.gameObject.SetActive(false);
         m_NameLabel.gameObject.SetActive(true);
     }
     m_RankNum.text   = "No." + (index + 1).ToString();
     m_NameLabel.text = data.userName;
     m_Icon.userBase  = data;
     m_MaxScore.text  = data.gameSocre.ToString();
 }
示例#22
0
    public void SetItem(object userInfo, UIListType listItemType)
    {
        _userInfo = userInfo as FacebookUserInfo;
        if (userInfo != null)
        {
            _userNameText.text = _userInfo.firstName;

            if (_userInfo.ProfilePicture != null)
            {
                _userIcon.sprite = _userInfo.ProfilePicture;
            }
            else
            {
                _userInfo.OnImageLoaded += () =>
                {
                    _userIcon.sprite = _userInfo.ProfilePicture;
                };
            }
        }
    }
示例#23
0
            public void OnCompleted(GraphResponse response)
            {
                if (response.Error == null)
                {
                    Org.Json.JSONArray userInfoKeys = response.JSONObject.Names();

                    Dictionary <string, string> userInfo = new Dictionary <string, string>();

                    for (int i = 0; i < userInfoKeys.Length(); i++)
                    {
                        userInfo.Add(userInfoKeys.Get(i).ToString(), response.JSONObject.GetString(userInfoKeys.Get(i).ToString()));
                    }

                    _taskCompletionSource.TrySetResult(FacebookUserInfo.CreateFrom(userInfo));
                }
                else
                {
                    _taskCompletionSource.TrySetException(response.Error.Exception);
                }
            }
示例#24
0
    public void ParceFriendsData(string data)
    {
        Debug.Log("ParceFriendsData");
        Debug.Log(data);

        try {
            _friends = new Dictionary <string, FacebookUserInfo>();
            IDictionary JSON  = ANMiniJSON.Json.Deserialize(data) as IDictionary;
            IDictionary f     = JSON["friends"] as IDictionary;
            IList       flist = f["data"] as IList;


            for (int i = 0; i < flist.Count; i++)
            {
                FacebookUserInfo user = new FacebookUserInfo(flist[i] as IDictionary);
                _friends.Add(user.id, user);
            }
        } catch (System.Exception ex) {
            Debug.LogWarning("Parceing Friends Data failed");
            Debug.LogWarning(ex.Message);
        }
    }
示例#25
0
        public async Task <UserDTO> FacebookLoginAsync(FacebookUserInfo facebookUser)
        {
            var user = await _userManager.FindByEmailAsync(facebookUser.Email);

            if (user == null)
            {
                user = new User
                {
                    SocialNetworking = true,
                    UserName         = facebookUser.Email ?? facebookUser.UserId,
                    FirstName        = facebookUser.Name.Split(' ')[0],
                    Email            = facebookUser.Email ?? "*****@*****.**",
                    LastName         = facebookUser.Name.Split(' ')[1],
                    ImagePath        = "default_user_image.png",
                    EmailConfirmed   = true,
                    RegistredOn      = DateTime.Now,
                    UserProfile      = new UserProfile
                    {
                        Birthday = DateTime.Parse(facebookUser.Birthday, CultureInfo.InvariantCulture),
                        GenderID = _repoWrapper
                                   .Gender
                                   .FindByCondition(x => x.Name == facebookUser.Gender)
                                   .FirstOrDefault()?.ID,
                    }
                };
                var createResult = await _userManager.CreateAsync(user);

                if (createResult.Succeeded && user.Email != "*****@*****.**")
                {
                    var emailContent = _emailContentService.GetAuthFacebookRegisterEmail();
                    await _emailSendingService.SendEmailAsync(user.Email, emailContent.Subject, emailContent.Message, emailContent.Title);
                }
                await _userManager.AddToRoleAsync(user, Roles.RegisteredUser);
            }
            await _signInManager.SignInAsync(user, false, null);

            return(_mapper.Map <User, UserDTO>(user));
        }
        public async Task FacebookLoginAsync_IsNotNull()
        {
            //Arrange
            var user         = new User();
            var userDto      = new UserDTO();
            var userId       = Guid.NewGuid().ToString();
            var facebookUser = new FacebookUserInfo()
            {
                Email    = "*****@*****.**",
                UserId   = userId,
                Name     = "John",
                Birthday = "11.08.2000"
            };

            _userManager.Setup(x => x.FindByEmailAsync(facebookUser.Email))
            .ReturnsAsync(user);
            _mapper.Setup(x => x.Map <User, UserDTO>(user)).Returns(userDto);
            //Act
            var result = await _authService.FacebookLoginAsync(facebookUser);

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(result, userDto);
        }
示例#27
0
 private int SortComparor(FacebookUserInfo a, FacebookUserInfo b)
 {
     return(b.gameSocre - a.gameSocre);
 }
    public void OnPlayerLoginFacebook(bool isSuccessful)
    {
        if (playerData == null) {
            playerData = new PlayerData();
        }

        if (isSuccessful) {
            playerFacebookInfo = FacebookHelper.Instance.UserInfo;

            playerData.FacebookID = playerFacebookInfo.userID;
            playerData.FacebookName = playerFacebookInfo.userName;
            playerData.FacebookFriends = playerFacebookInfo.userFriends;

            playerData.LogAllInfos ();

            // Update player's facebook info (name, friends) to database
            UpdatePlayerFacebookInfoToDatabase();
        } else {
            playerData.FacebookID = "";
            playerData.FacebookName = "Anonymous Player";
            playerData.FacebookFriends = "";
        }
    }
示例#29
0
 private bool Validate(FacebookUserInfo user, string id, string email)
 {
     return(user.Id == id && user.Email == email);
 }
    void Awake()
    {
        if (userInfo == null) {
            userInfo = new FacebookUserInfo ();
        }

        if (!FB.IsInitialized) {
            FB.Init (SetInit, OnHideUnity);
        }
    }
示例#31
0
        /// <summary>
        /// Validate provided username and password when the grant_type is set to "password".
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            if (context.OwinContext.Request.Headers["Provider"] != null)
            {
                if (context.OwinContext.Request.Headers["Provider"].ToLower() == "facebook" && context.OwinContext.Request.Headers["access_token"] != null)
                {
                    var accessToken = context.OwinContext.Request.Headers["access_token"];
                    var client      = new RestClient("https://graph.facebook.com/");
                    var request     = new RestRequest("me", Method.GET);
                    request.AddQueryParameter("fields", "id,name,email,picture.width(2000).height(2000)");
                    request.AddQueryParameter("access_token", accessToken);
                    var response = client.Execute(request);
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        var content  = JObject.Parse(response.Content);
                        var userInfo = new FacebookUserInfo()
                        {
                            id = content["id"].ToString()
                        };
                        if (content["name"] != null)
                        {
                            userInfo.name = content["name"].ToString();
                        }
                        if (content["email"] != null)
                        {
                            userInfo.email = content["email"].ToString();
                        }
                        if (content["picture"]["data"]["url"] != null)
                        {
                            userInfo.avatar = content["picture"]["data"]["url"].ToString();
                        }
                        PregnancyEntity connect = new PregnancyEntity();
                        preg_user       user    = connect.preg_user.Where(c => c.uid == userInfo.id && c.social_type_id == (int)SysConst.SocialTypes.facebook).FirstOrDefault();
                        if (user != null)
                        {
                            //user.email = userInfo.email;
                            //user.first_name = userInfo.name;
                            user.time_last_login = DateTime.Now;
                            connect.SaveChanges();
                        }
                        else
                        {
                            user                = new preg_user();
                            user.uid            = userInfo.id;
                            user.email          = userInfo.email;
                            user.first_name     = userInfo.name;
                            user.avatar         = userInfo.avatar;
                            user.social_type_id = (int)SysConst.SocialTypes.facebook;
                            user.time_created   = DateTime.Now;
                            connect.preg_user.Add(user);
                            SysMethod.createAccountNop(user);
                            connect.SaveChanges();
                            user = connect.preg_user.Where(c => c.uid == userInfo.id && c.social_type_id == (int)SysConst.SocialTypes.facebook).FirstOrDefault();
                        }
                        preg_auth auth = connect.preg_auth.Where(c => c.user_id == user.id).FirstOrDefault();
                        if (auth == null)
                        {
                            auth = new preg_auth()
                            {
                                user_id = user.id
                            };
                            connect.preg_auth.Add(auth);
                        }
                        auth.token = context.OwinContext.Request.Headers["access_token"];
                        connect.SaveChanges();

                        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
                        identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.social.ToString()));
                        identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.user.ToString()));
                        identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.dev.ToString()));
                        identity.AddClaim(new Claim("id", user.id.ToString()));
                        context.Validated(identity);
                    }
                    else
                    {
                        context.SetError("Invalid grant", SysConst.LOGIN_SOCIAL_FAILED);
                        return;
                    }
                }
                else if (context.OwinContext.Request.Headers["Provider"].ToLower() == "google" && context.OwinContext.Request.Headers["access_token"] != null)
                {
                    var accessToken = context.OwinContext.Request.Headers["access_token"];
                    var client      = new RestClient("https://www.googleapis.com/oauth2/v3/");
                    var request     = new RestRequest("tokeninfo", Method.GET);
                    request.AddQueryParameter("id_token", accessToken);
                    var response = client.Execute(request);
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        var content  = JObject.Parse(response.Content);
                        var userInfo = new GoogleUserInfo()
                        {
                            sub = content["sub"].ToString()
                        };
                        if (content["name"] != null)
                        {
                            userInfo.name = content["name"].ToString();
                        }
                        if (content["email"] != null)
                        {
                            userInfo.email = content["email"].ToString();
                        }
                        if (content["picture"] != null)
                        {
                            userInfo.picture = content["picture"].ToString();
                        }
                        if (content["given_name"] != null)
                        {
                            userInfo.given_name = content["given_name"].ToString();
                        }
                        if (content["family_name"] != null)
                        {
                            userInfo.family_name = content["family_name"].ToString();
                        }
                        PregnancyEntity connect = new PregnancyEntity();
                        preg_user       user    = connect.preg_user.Where(c => c.uid == userInfo.sub && c.social_type_id == (int)SysConst.SocialTypes.google).FirstOrDefault();
                        if (user != null)
                        {
                            //user.email = userInfo.email;
                            //user.first_name = userInfo.name;
                            //user.avatar = userInfo.picture;
                            user.time_last_login = DateTime.Now;
                            connect.SaveChanges();
                        }
                        else
                        {
                            user                = new preg_user();
                            user.uid            = userInfo.sub;
                            user.email          = userInfo.email;
                            user.first_name     = userInfo.name;
                            user.avatar         = userInfo.picture;
                            user.social_type_id = (int)SysConst.SocialTypes.google;
                            user.time_created   = DateTime.Now;
                            connect.preg_user.Add(user);
                            SysMethod.createAccountNop(user);
                            connect.SaveChanges();
                            user = connect.preg_user.Where(c => c.uid == userInfo.sub && c.social_type_id == (int)SysConst.SocialTypes.google).FirstOrDefault();
                        }
                        preg_auth auth = connect.preg_auth.Where(c => c.user_id == user.id).FirstOrDefault();
                        if (auth == null)
                        {
                            auth = new preg_auth()
                            {
                                user_id = user.id
                            };
                            connect.preg_auth.Add(auth);
                        }
                        auth.token = context.OwinContext.Request.Headers["access_token"];
                        connect.SaveChanges();

                        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
                        identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.social.ToString()));
                        identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.user.ToString()));
                        identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.dev.ToString()));
                        identity.AddClaim(new Claim("id", user.id.ToString()));
                        context.Validated(identity);
                    }
                    else
                    {
                        var client2  = new RestClient("https://www.googleapis.com/oauth2/v1/");
                        var request2 = new RestRequest("userinfo", Method.GET);
                        request2.AddQueryParameter("alt", "json");
                        request2.AddQueryParameter("access_token", accessToken);
                        var response2 = client.Execute(request2);
                        if (response2.StatusCode == HttpStatusCode.OK)
                        {
                            var content  = JObject.Parse(response2.Content);
                            var userInfo = new GoogleUserInfo()
                            {
                                sub = content["sub"].ToString()
                            };
                            if (content["name"] != null)
                            {
                                userInfo.name = content["name"].ToString();
                            }
                            if (content["email"] != null)
                            {
                                userInfo.email = content["email"].ToString();
                            }
                            if (content["picture"] != null)
                            {
                                userInfo.picture = content["picture"].ToString();
                            }
                            if (content["given_name"] != null)
                            {
                                userInfo.given_name = content["given_name"].ToString();
                            }
                            if (content["family_name"] != null)
                            {
                                userInfo.family_name = content["family_name"].ToString();
                            }
                            PregnancyEntity connect = new PregnancyEntity();
                            preg_user       user    = connect.preg_user.Where(c => c.uid == userInfo.sub && c.social_type_id == (int)SysConst.SocialTypes.google).FirstOrDefault();
                            if (user != null)
                            {
                                //user.email = userInfo.email;
                                //user.first_name = userInfo.name;
                                //user.avatar = userInfo.picture;
                                user.time_last_login = DateTime.Now;
                                connect.SaveChanges();
                            }
                            else
                            {
                                user                = new preg_user();
                                user.uid            = userInfo.sub;
                                user.email          = userInfo.email;
                                user.first_name     = userInfo.name;
                                user.avatar         = userInfo.picture;
                                user.social_type_id = (int)SysConst.SocialTypes.google;
                                user.time_created   = DateTime.Now;
                                connect.preg_user.Add(user);
                                SysMethod.createAccountNop(user);
                                connect.SaveChanges();
                                user = connect.preg_user.Where(c => c.uid == userInfo.sub && c.social_type_id == (int)SysConst.SocialTypes.google).FirstOrDefault();
                            }
                            preg_auth auth = connect.preg_auth.Where(c => c.user_id == user.id).FirstOrDefault();
                            if (auth == null)
                            {
                                auth = new preg_auth()
                                {
                                    user_id = user.id
                                };
                                connect.preg_auth.Add(auth);
                            }
                            auth.token = context.OwinContext.Request.Headers["access_token"];
                            connect.SaveChanges();

                            var identity = new ClaimsIdentity(context.Options.AuthenticationType);
                            identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.social.ToString()));
                            identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.user.ToString()));
                            identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.dev.ToString()));
                            identity.AddClaim(new Claim("id", user.id.ToString()));
                            context.Validated(identity);
                        }
                        else
                        {
                            context.SetError("Invalid grant", SysConst.LOGIN_SOCIAL_FAILED);
                            return;
                        }
                    }
                }
            }
            else if (context.UserName != null && context.Password != null)
            {
                var             identity = new ClaimsIdentity(context.Options.AuthenticationType);
                PregnancyEntity connect  = new PregnancyEntity();
                UserDao         dao      = new UserDao();
                //Check username & password
                string    phone    = context.UserName;
                string    password = SysMethod.MD5Hash(context.Password);
                preg_user user     = connect.preg_user.Where(c => c.phone == phone && c.password == password).FirstOrDefault();

                if (user != null)
                {
                    user.time_last_login = DateTime.Now;
                    connect.SaveChanges();
                    identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.dev.ToString()));
                    identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.user.ToString()));
                    identity.AddClaim(new Claim("id", user.id.ToString()));
                    context.Validated(identity);
                }
                else if (context.UserName == "WSPadmin" && context.Password == "WSPadmin")
                {
                    identity.AddClaim(new Claim(ClaimTypes.Role, SysConst.UserType.admin.ToString()));
                    identity.AddClaim(new Claim("id", "0"));
                    context.Validated(identity);
                }
                else
                {
                    context.SetError("Invalid grant", SysConst.LOGIN_FAILED);
                    return;
                }
            }
        }
示例#32
0
    private IEnumerator GetFacebookUserInfo(string graphURL = null, object data = null, UserType userType = UserType.Current)
    {
        bool finishedGettingInfo = false;

        FacebookUserInfo userInfo = new FacebookUserInfo();

        if (!string.IsNullOrEmpty(graphURL))
        {
            FB.API(graphURL, HttpMethod.GET, userInfoResult => {
                if (userInfoResult.Error != null)
                {
                    Debug.LogError("Error getting FB user info: " + userInfoResult.Error);
                }
                else
                {
                    Dictionary <string, object> userInfoObjects = Facebook.MiniJSON.Json.Deserialize(userInfoResult.RawResult) as Dictionary <string, object>;
                    userInfo.id         = userInfoObjects["id"].ToString();
                    var userFullName    = userInfoObjects["name"].ToString();
                    var s               = userFullName.Split(new char[] { ' ' });
                    userInfo.firstName  = s[0];
                    userInfo.lastName   = s[1];
                    var pictureData     = userInfoObjects["picture"] as Dictionary <string, object>;
                    var p               = pictureData["data"] as Dictionary <string, object>;
                    userInfo.pictureUrl = p["url"].ToString();
                }
                finishedGettingInfo = true;
            });
        }

        if (data != null)
        {
            var dictionaryDataObject = data as Dictionary <string, object>;
            userInfo.id = dictionaryDataObject["id"].ToString();
            var userFullName = dictionaryDataObject["name"].ToString();
            var s            = userFullName.Split(new char[] { ' ' });
            userInfo.firstName = s[0];
            userInfo.lastName  = s[1];

            var pictureData = dictionaryDataObject["picture"] as Dictionary <string, object>;
            var p           = pictureData["data"] as Dictionary <string, object>;
            userInfo.pictureUrl = p["url"].ToString();

            finishedGettingInfo = true;
        }

        while (!finishedGettingInfo)
        {
            yield return(null);
        }

        if (userInfo.pictureUrl != null)
        {
            yield return(StartCoroutine(CheckAndLoadImage(userInfo.id, userInfo.pictureUrl, !userType.Equals(UserType.Invitable), (texture) =>
            {
                userInfo.ProfilePicture = Sprite.Create(texture, new Rect(0, 0, 64, 64), new Vector2(0.5f, 0.5f));
            })));
        }

        if (userType.Equals(UserType.Current))
        {
            CurrentUserFacebookUserInfo = userInfo;
            if (OnUserInfoDownloadedEvent != null)
            {
                OnUserInfoDownloadedEvent.Invoke();
            }

            UpdateFriendsList();
            UpdateInventableFriendsList();
        }
        else if (userType.Equals(UserType.Friend))
        {
            FriendUserFacebookInfos.Add(userInfo);
        }
        else
        {
            InventableFriendsList.Add(userInfo);
        }
    }