예제 #1
0
        public async Task <IHttpActionResult> FacebookUpdate(AccountFacebookConnect model)
        {
            var client = new FacebookClient(model.AccessToken);

            client.AppId     = AppConfig.Settings.FacebookId;
            client.AppSecret = AppConfig.Settings.FacebookSecret;

            dynamic fbresult = client.Get("me?fields=id,email,first_name,last_name,gender,locale,link,timezone,location,picture");

            var social = await AppDatabase.UserFacebookClaims.FindAsync(fbresult.id);

            var user = await AppDatabase.Users.FindAsync(UserId);

            if (social == null)
            {
                social             = new UserFacebookClaim();
                social.Id          = fbresult.id;
                social.User        = user;
                social.UserId      = UserId;
                social.AccessToken = model.AccessToken;
                social.Provider    = APIConstants.FACEBOOK;
                AppDatabase.UserFacebookClaims.Add(social);
            }

            FacebookUpdateInternal(social, fbresult);

            await AppDatabase.SaveChangesAsync();

            Session.UpdateFrom(user);
            return(Ok(GetAccountDetails()));
        }
예제 #2
0
        public async Task <IHttpActionResult> FacebookConnect(AccountFacebookConnect model)
        {
            if (!Authorization.IsAuthenticated)
            {
                return(await FacebookCreate(model));
            }

            return(await FacebookUpdate(model));
        }
예제 #3
0
        public async Task <IHttpActionResult> FacebookCreate(AccountFacebookConnect model)
        {
            var client = new FacebookClient(model.AccessToken);

            client.AppId     = AppConfig.Settings.FacebookId;
            client.AppSecret = AppConfig.Settings.FacebookSecret;

            dynamic fbresult = client.Get("me?fields=id,email,first_name,last_name,gender,locale,link,timezone,location,picture");
            string  email    = fbresult.email;

            var social = await AppDatabase.UserFacebookClaims.FindAsync(fbresult.id);

            if (social != null)
            {
                // old profile
                FacebookUpdateInternal(social, fbresult);
                await AppDatabase.SaveChangesAsync();

                var oldUser = social.User;
                Session.UpdateFrom(oldUser);
                return(Ok(GetAccountDetails()));
            }

            //email in use ?
            var user3 = await AppDatabase.Users.FirstOrDefaultAsync(o => o.Email == email);

            if (user3 != null)
            {
                return(BadRequest("Email is in use. Try account recovery."));
            }

            // new user
            var password = new string(Guid.NewGuid().ToString().Take(7).ToArray());
            var user     = new UserAccount
            {
                CreatedOn     = DateTime.UtcNow,
                ModifiedOn    = DateTime.UtcNow,
                Email         = email,
                Id            = Guid.NewGuid().ToString(),
                EmailPassword = UserPassword.Create(password),
            };

            AppDatabase.Users.Add(user);

            social = new UserFacebookClaim
            {
                Id          = fbresult.id,
                UserId      = user.Id,
                User        = user,
                AccessToken = model.AccessToken
            };

            FacebookUpdateInternal(social, fbresult);

            AppDatabase.UserFacebookClaims.Add(social);

            await SendWelcomeMail(new UserEmailViewModel
            {
                UserId    = user.Id,
                UserEmail = user.Email
            });

            await AppDatabase.SaveChangesAsync();

            Session.UpdateFrom(user);
            return(Ok(GetAccountDetails()));
        }