Exemplo n.º 1
0
        public IHttpActionResult GetShoutUserBySocial(string socialId, AuthType authType)
        {
            ShoutUser shoutUser = null;

            if (!String.IsNullOrEmpty(socialId))
            {
                switch (authType)
                {
                case AuthType.Facebook:
                    shoutUser = db.ShoutUsers.FirstOrDefault(x => x.FacebookID == socialId);
                    break;
                }
            }

            if (shoutUser == null)
            {
                return(NotFound());
            }

            ShoutUserDto ret = new ShoutUserDto()
            {
                ID            = shoutUser.ID,
                Email         = shoutUser.Email,
                UserName      = shoutUser.UserName,
                AuthType      = AuthType.Facebook,
                ShoutSocialID = shoutUser.FacebookID,
                AvatarUrl     = shoutUser.AvatarUrl
            };

            return(Ok(ret));
        }
        async Task <bool> GetFacebook(Account account)
        {
            try
            {
                var request  = new OAuth2Request("GET", new Uri("https://graph.facebook.com/me?fields=email,first_name,last_name,gender,picture.type(large)"), null, account);
                var response = await request.GetResponseAsync();

                var fbUser = Newtonsoft.Json.Linq.JObject.Parse(response.GetResponseText());

                var name      = fbUser["first_name"].ToString().Replace("\"", "");
                var socialID  = fbUser["id"].ToString().Replace("\"", "");
                var email     = fbUser["email"].ToString().Replace("\"", "");
                var avatarUrl = "";
                try
                {
                    avatarUrl = fbUser["picture"]["data"]["url"].ToString();
                    Settings.Current.AvatarUrl = avatarUrl;
                    //Settings.Current.Avatar = await CurrentApp.Current.MainViewModel.ServiceApi.GetAvatar(Settings.Current.AvatarUrl);
                }
                catch (Exception)
                { }

                ShoutUserDto userDto = null;
                if (!String.IsNullOrEmpty(Settings.Current.SocialUserID))
                {
                    userDto = await CurrentApp.Current.MainViewModel.ServiceApi.GetShoutUserBySocial(Settings.Current.SocialUserID);

                    if (userDto != null)
                    {
                        Settings.Current.UserGuid = userDto.ID;
                    }
                }

                if (userDto == null ||
                    name != userDto.UserName ||
                    socialID != userDto.ShoutSocialID ||
                    email != userDto.Email ||
                    avatarUrl != userDto.AvatarUrl)
                {
                    Settings.Current.UserFirstName = name;
                    Settings.Current.SocialUserID  = socialID;
                    Settings.Current.UserEmail     = email;
                    Settings.Current.UserAuth      = Models.AuthType.Facebook;
                    //This is what not we have saved on the server
                    await GetOrCreate(false);
                }
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }
        public async Task GetOrCreate(bool checkSocial = true)
        {
            bool patch = false;

            ShoutUserDto userDto = null;

            if (checkSocial && !String.IsNullOrEmpty(Settings.Current.SocialUserID))
            {
                userDto = await CurrentApp.Current.MainViewModel.ServiceApi.GetShoutUserBySocial(Settings.Current.SocialUserID);
            }

            if (userDto == null)
            {
                if (!String.IsNullOrEmpty(Settings.Current.UserEmail))
                {
                    userDto = await CurrentApp.Current.MainViewModel.ServiceApi.GetShoutUserByEmail(Settings.Current.UserEmail);
                }

                if (userDto == null)
                {
                    // New user
                    ShoutUser u       = ShoutUserFromSettings(true);
                    bool      success = await CurrentApp.Current.MainViewModel.ServiceApi.NewShoutUser(u);

                    if (success)
                    {
                        Settings.Current.UserGuid = u.ID;
                    }
                }
                else
                {
                    // Likely created by someone else
                    patch = true;
                }
            }
            else
            {
                // Something to be updated
                patch = true;
            }

            if (patch)
            {
                ShoutUser u = ShoutUserFromSettings(false);
                //if user email is found, update that
                await CurrentApp.Current.MainViewModel.ServiceApi.PatchShoutUser(u);
            }
        }