use of com.sanctionco.thunder.models.Email in project thunder by RohanNagar.
the class SesEmailService method sendEmail.
@Override
public CompletableFuture<Boolean> sendEmail(Email to, String subjectString, String htmlBodyString, String bodyString) {
Destination destination = Destination.builder().toAddresses(to.getAddress()).build();
Content subjectText = Content.builder().charset("UTF-8").data(subjectString).build();
Content htmlBodyText = Content.builder().charset("UTF-8").data(htmlBodyString).build();
Content bodyText = Content.builder().charset("UTF-8").data(bodyString).build();
Body body = Body.builder().html(htmlBodyText).text(bodyText).build();
Message message = Message.builder().subject(subjectText).body(body).build();
SendEmailRequest request = SendEmailRequest.builder().source(fromAddress).destination(destination).message(message).build();
return sesClient.sendEmail(request).thenApply(response -> true).exceptionally(throwable -> {
LOG.error("There was an error sending email to {}", to.getAddress(), throwable);
return false;
});
}
use of com.sanctionco.thunder.models.Email in project thunder by RohanNagar.
the class UserResourceTest method testUpdateUserServerSideHashNoPasswordChange.
@Test
void testUpdateUserServerSideHashNoPasswordChange() {
var hashService = HashAlgorithm.SHA256.newHashService(true, false);
var validator = new RequestValidator(EMAIL_VALIDATOR, propertyValidator, hashService, true);
var resource = new UserResource(usersDao, OPTIONS, validator, hashService, METRICS);
// Set up the user that should already exist in the database
var existingEmail = new Email("existing@test.com", true, "token");
var existingUser = new User(existingEmail, "saltysaltysalt226cb4d24e21a9955515d52d6dc86449202f55f5b1463a800d2803cdda90298530", Collections.emptyMap());
// Define the updated user with the same password
var updatedUser = new User(new Email(existingEmail.getAddress(), true, "token"), // hashes to the above
"password", Collections.singletonMap("ID", 80));
// Expect that the password stays the same
var expectedResponse = new User(new Email(updatedUser.getEmail().getAddress(), true, "token"), "saltysaltysalt226cb4d24e21a9955515d52d6dc86449202f55f5b1463a800d2803cdda90298530", updatedUser.getProperties());
var userCaptor = ArgumentCaptor.forClass(User.class);
var asyncResponse = mock(AsyncResponse.class);
when(usersDao.findByEmail(existingEmail.getAddress())).thenReturn(CompletableFuture.completedFuture(existingUser));
when(usersDao.update(eq(null), userCaptor.capture())).thenReturn(CompletableFuture.completedFuture(expectedResponse));
resource.updateUser(asyncResponse, key, "password", null, updatedUser);
var responseCaptor = ArgumentCaptor.forClass(Response.class);
verify(asyncResponse, timeout(100).times(1)).resume(responseCaptor.capture());
var result = (User) responseCaptor.getValue().getEntity();
assertAll("Assert successful user update", () -> assertEquals(Response.Status.OK, responseCaptor.getValue().getStatusInfo()), () -> assertNotEquals("password", result.getPassword()), () -> assertEquals(expectedResponse, userCaptor.getValue()), () -> assertEquals(expectedResponse, result));
}
use of com.sanctionco.thunder.models.Email in project thunder by RohanNagar.
the class UserResourceTest method put_whenPasswordHeaderCheckIsDisabledThenMissingPasswordSucceeds.
@Test
void put_whenPasswordHeaderCheckIsDisabledThenMissingPasswordSucceeds() {
var validator = new RequestValidator(EMAIL_VALIDATOR, propertyValidator, HASH_SERVICE, false);
var resource = new UserResource(usersDao, OPTIONS, validator, HASH_SERVICE, METRICS);
// Set up the user that should already exist in the database
var existingEmail = new Email("existing@test.com", true, "token");
var existingUser = new User(existingEmail, "password", Collections.emptyMap());
// Define the updated user with changed verification info
var updatedUser = new User(new Email(existingEmail.getAddress(), false, "changedToken"), "password", Collections.singletonMap("Key", "Value"));
// Expect that the existing verification information stays the same even though
// the updated user had different information
var expectedResponse = new User(new Email(updatedUser.getEmail().getAddress(), true, "token"), updatedUser.getPassword(), updatedUser.getProperties());
var userCaptor = ArgumentCaptor.forClass(User.class);
var asyncResponse = mock(AsyncResponse.class);
when(usersDao.findByEmail(existingEmail.getAddress())).thenReturn(CompletableFuture.completedFuture(existingUser));
when(usersDao.update(eq(null), userCaptor.capture())).thenReturn(CompletableFuture.completedFuture(expectedResponse));
// Update with a missing password header
resource.updateUser(asyncResponse, key, null, null, updatedUser);
var responseCaptor = ArgumentCaptor.forClass(Response.class);
verify(asyncResponse, timeout(100).times(1)).resume(responseCaptor.capture());
var result = (User) responseCaptor.getValue().getEntity();
assertAll("Assert successful user update", () -> assertEquals(Response.Status.OK, responseCaptor.getValue().getStatusInfo()), () -> assertEquals(expectedResponse, userCaptor.getValue()), () -> assertEquals(expectedResponse, result));
}
use of com.sanctionco.thunder.models.Email in project thunder by RohanNagar.
the class VerificationResourceTest method email_isSuccessful.
@Test
void email_isSuccessful() {
when(usersDao.findByEmail(anyString())).thenReturn(CompletableFuture.completedFuture(unverifiedMockUser));
when(usersDao.update(anyString(), any(User.class))).thenReturn(CompletableFuture.completedFuture(unverifiedMockUser));
when(emailService.sendVerificationEmail(any(Email.class), anyString())).thenReturn(CompletableFuture.completedFuture(true));
var asyncResponse = mock(AsyncResponse.class);
var captor = ArgumentCaptor.forClass(Response.class);
resource.sendEmail(uriInfo, asyncResponse, key, "test@test.com", "password");
verify(asyncResponse, timeout(100).times(1)).resume(captor.capture());
User result = (User) captor.getValue().getEntity();
assertAll("Assert successful send email", () -> assertEquals(captor.getValue().getStatusInfo(), Response.Status.OK), () -> assertEquals(unverifiedMockUser, result));
}
use of com.sanctionco.thunder.models.Email in project thunder by RohanNagar.
the class VerificationResourceTest method reset_isSuccessful.
@Test
void reset_isSuccessful() {
// Set up the user that should already exist in the database
Email existingEmail = new Email("existing@test.com", true, "token");
User existingUser = new User(existingEmail, "password", Collections.emptyMap());
// Set up expected user object
Email updatedEmail = new Email("existing@test.com", false, null);
User updatedUser = new User(updatedEmail, "password", Collections.emptyMap());
var userCaptor = ArgumentCaptor.forClass(User.class);
when(usersDao.findByEmail(existingEmail.getAddress())).thenReturn(CompletableFuture.completedFuture(existingUser));
when(usersDao.update(eq(null), userCaptor.capture())).thenReturn(CompletableFuture.completedFuture(updatedUser));
var asyncResponse = mock(AsyncResponse.class);
var responseCaptor = ArgumentCaptor.forClass(Response.class);
resource.resetVerified(asyncResponse, key, existingEmail.getAddress(), existingUser.getPassword());
verify(asyncResponse, timeout(100).times(1)).resume(responseCaptor.capture());
User result = (User) responseCaptor.getValue().getEntity();
assertAll("Assert successful verification status reset", () -> assertEquals(responseCaptor.getValue().getStatusInfo(), Response.Status.OK), () -> assertEquals(updatedUser, userCaptor.getValue()), () -> assertEquals(updatedUser, result));
}
Aggregations