/// <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); } }
/// <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); } }
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()); }
/// <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 }); }
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)); }
/// <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"); } }