예제 #1
0
        /// <summary>
        /// Adds a user entity to the users database through the identity service.
        /// </summary>
        /// <param name="appToken"></param>
        /// <param name="user"></param>
        private async Task AddUserToUsersDb(string appToken, FacebookUserDto facebookUser, string userId)
        {
            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    UserModel user = GetUserFromFacebookData(facebookUser, userId);
                    user.RegistrationKey = facebookUser.id;
                    user.SetRegistrationType(RegistrationTypeEnum.Facebook);
                    var data = new JObject();
                    data.Add("user", JToken.FromObject(user));
                    data.Add("token", JToken.FromObject(appToken));
                    var response = await httpClient.PostAsJsonAsync(_identityUrl, data);

                    if (!response.IsSuccessStatusCode)
                    {
                        throw new Exception("Identity server could not add the user");
                    }
                }
            }
            catch (Exception e)
            {
                //TODO: log
                throw new AddUserToDbException(e.Message);
            }
        }
예제 #2
0
        /// <summary>
        /// Addes user to graph database.
        /// </summary>
        /// <param name="appToken"></param>
        /// <param name="facebookUserDto"></param>
        /// <returns></returns>
        private async Task AddUserToGraphDb(string appToken, FacebookUserDto facebookUserDto)
        {
            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    var dataToSend = new JObject();
                    dataToSend.Add("token", JToken.FromObject(appToken));
                    dataToSend.Add("email", JToken.FromObject(facebookUserDto.email));
                    dataToSend.Add("name", JToken.FromObject(facebookUserDto.name));
                    var response = await httpClient.PostAsJsonAsync(_socialUrl + "Users/AddUser", dataToSend);

                    if (!response.IsSuccessStatusCode)
                    {
                        throw new Exception("Couldn't connect to social server");
                    }
                }
            }
            catch (HttpRequestException e)
            {
                throw new AddUserToGraphException(e.Message);
            }
            catch (Exception e)
            {
                throw new AddUserToGraphException(e.Message);
            }
        }
예제 #3
0
        public async Task <int> InsertAsync(FacebookUserDto facebookUserDto)
        {
            var user = _mapper.Map <User>(facebookUserDto);

            user.CreatedAt = DateTime.UtcNow;
            await _db.User.AddAsync(user);

            return(await _db.SaveChangesAsync());
        }
예제 #4
0
 /// <summary>
 /// Gets UserModel instance from the recieved facebook data.
 /// </summary>
 /// <param name="facebookUser"></param>
 /// <param name="userId"></param>
 /// <returns></returns>
 private static UserModel GetUserFromFacebookData(FacebookUserDto facebookUser, string userId)
 {
     return(new UserModel()
     {
         Id = userId,
         FirstName = facebookUser.first_name,
         LastName = facebookUser.last_name,
         Email = facebookUser.email
     });
 }
예제 #5
0
        public async Task <UserClaimsDto> Login(FacebookUserDto userDto)
        {
            var user = await _userRepository.GetUser(userDto.Email);

            if (user != null)
            {
                return(_mapper.Map <UserClaimsDto>(user));
            }

            await _userRepository.Add(new AddUserDto
            {
                Email    = userDto.Email,
                Username = userDto.FirstName + " " + userDto.LastName
            });

            var userClaims = _userRepository.GetUser(userDto.Email);


            return(_mapper.Map <UserClaimsDto>(userClaims));
        }
예제 #6
0
        /// <summary>
        /// Addes the user to the Users table and the email to the Auth table.
        /// </summary>
        /// <param name="facebookUserDto"></param>
        /// <param name="userEmail"></param>
        /// <param name="appToken"></param>
        private async Task AddUserToDatabases(FacebookUserDto facebookUserDto, string userId, string appToken)
        {
            try
            {
                Task addUserTask               = AddUserToUsersDb(appToken, facebookUserDto, userId);
                Task addAuthTask               = AddUserToFacebookAuthDb(facebookUserDto.id, userId);
                Task addUserToGraphTask        = AddUserToGraphDb(appToken, facebookUserDto);
                Task addUserToNotificationTask = AddUserToNotificationsDb(appToken);

                await Task.WhenAll(addUserTask, addAuthTask, addUserToGraphTask, addUserToNotificationTask);
            }
            catch (AggregateException ae)
            {
                Task removeUserTaskawait          = RemoveIdentity(appToken);
                Task removeAuthTaskawait          = RemoveFBAuth(facebookUserDto.id);
                Task removeUserToGraphTask        = RemoveGraphNode(appToken);
                Task removeUserToNotificationTask = RemoveNotificationsAuth(appToken);

                await Task.WhenAll(removeUserTaskawait, removeAuthTaskawait, removeUserToGraphTask, removeUserToNotificationTask);

                throw new Exception("Internal server error");
            }
        }