Search in sources :

Example 16 with Email

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;
    });
}
Also used : Email(com.sanctionco.thunder.models.Email) Body(software.amazon.awssdk.services.ses.model.Body) MetricRegistry(com.codahale.metrics.MetricRegistry) Logger(org.slf4j.Logger) MessageOptions(com.sanctionco.thunder.email.MessageOptions) LoggerFactory(org.slf4j.LoggerFactory) CompletableFuture(java.util.concurrent.CompletableFuture) Message(software.amazon.awssdk.services.ses.model.Message) EmailService(com.sanctionco.thunder.email.EmailService) Content(software.amazon.awssdk.services.ses.model.Content) Objects(java.util.Objects) Inject(javax.inject.Inject) SendEmailRequest(software.amazon.awssdk.services.ses.model.SendEmailRequest) Destination(software.amazon.awssdk.services.ses.model.Destination) SesAsyncClient(software.amazon.awssdk.services.ses.SesAsyncClient) Destination(software.amazon.awssdk.services.ses.model.Destination) Message(software.amazon.awssdk.services.ses.model.Message) Content(software.amazon.awssdk.services.ses.model.Content) Body(software.amazon.awssdk.services.ses.model.Body) SendEmailRequest(software.amazon.awssdk.services.ses.model.SendEmailRequest)

Example 17 with Email

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));
}
Also used : Email(com.sanctionco.thunder.models.Email) User(com.sanctionco.thunder.models.User) RequestValidator(com.sanctionco.thunder.validation.RequestValidator) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 18 with Email

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));
}
Also used : Email(com.sanctionco.thunder.models.Email) User(com.sanctionco.thunder.models.User) RequestValidator(com.sanctionco.thunder.validation.RequestValidator) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 19 with Email

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));
}
Also used : User(com.sanctionco.thunder.models.User) Email(com.sanctionco.thunder.models.Email) Test(org.junit.jupiter.api.Test)

Example 20 with Email

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));
}
Also used : Email(com.sanctionco.thunder.models.Email) User(com.sanctionco.thunder.models.User) Test(org.junit.jupiter.api.Test)

Aggregations

Email (com.sanctionco.thunder.models.Email)27 User (com.sanctionco.thunder.models.User)26 Test (org.junit.jupiter.api.Test)20 RequestValidator (com.sanctionco.thunder.validation.RequestValidator)9 MetricRegistry (com.codahale.metrics.MetricRegistry)5 Metered (com.codahale.metrics.annotation.Metered)5 RequestValidationException (com.sanctionco.thunder.validation.RequestValidationException)5 Objects (java.util.Objects)5 Inject (javax.inject.Inject)5 POST (javax.ws.rs.POST)5 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)5 Logger (org.slf4j.Logger)5 LoggerFactory (org.slf4j.LoggerFactory)5 Counter (com.codahale.metrics.Counter)4 ThunderException (com.sanctionco.thunder.ThunderException)4 UsersDao (com.sanctionco.thunder.dao.UsersDao)4 EmailService (com.sanctionco.thunder.email.EmailService)4 SwaggerAnnotations (com.sanctionco.thunder.openapi.SwaggerAnnotations)4 MetricNameUtil (com.sanctionco.thunder.util.MetricNameUtil)4 Auth (io.dropwizard.auth.Auth)4