Search in sources :

Example 6 with ApplicationConfiguration

use of com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration in project cia by Hack23.

the class EmailServiceImpl method sendEmail.

@Override
public void sendEmail(final String toEmail, final String subject, final String content) {
    final ApplicationConfiguration sendEmail = applicationConfigurationService.checkValueOrLoadDefault(EMAIL_CONFIGURATION_SEND_EMAILS, SEND_EMAIL, ConfigurationGroup.EXTERNAL_SERVICES, EmailServiceImpl.class.getSimpleName(), SEND_EMAIL, RESPONSIBLE_FOR_SENDING_EMAIL, APPLICATION_EMAIL_SEND_EMAIL, "false");
    final ApplicationConfiguration fromEmail = applicationConfigurationService.checkValueOrLoadDefault(EMAIL_CONFIGURATION_FROM_EMAIL, FROM_EMAIL, ConfigurationGroup.EXTERNAL_SERVICES, EmailServiceImpl.class.getSimpleName(), SEND_EMAIL, RESPONSIBLE_FOR_SENDING_EMAIL, APPLICATION_EMAIL_FROM_EMAIL, "admin@hack23.com");
    final JavaMailSender javaMailSender = getMailSender();
    final SimpleMailMessage emailMessage = new SimpleMailMessage();
    emailMessage.setFrom(fromEmail.getPropertyValue());
    emailMessage.setTo(toEmail);
    emailMessage.setText(content);
    emailMessage.setSubject(subject);
    if ("true".equalsIgnoreCase(sendEmail.getPropertyValue())) {
        LOGGER.info("Sending email:{}", emailMessage);
        javaMailSender.send(emailMessage);
    } else {
        LOGGER.info("Email sending disabled, do not send email:{}", emailMessage);
    }
}
Also used : SimpleMailMessage(org.springframework.mail.SimpleMailMessage) JavaMailSender(org.springframework.mail.javamail.JavaMailSender) ApplicationConfiguration(com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration)

Example 7 with ApplicationConfiguration

use of com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration in project cia by Hack23.

the class ApplicationConfigurationServiceITest method checkValueOrLoadDefaultNoPropertyExistTest.

/**
 * Check value or load default no property exist test.
 *
 * @throws Exception
 *             the exception
 */
@Test
public void checkValueOrLoadDefaultNoPropertyExistTest() throws Exception {
    final ApplicationConfiguration checkValueOrLoadDefault = applicationConfigurationService.checkValueOrLoadDefault("checkValueOrLoadDefaultNoPropertyExistTest property", "checkValueOrLoadDefaultNoPropertyExistTest should be set to true/false", ConfigurationGroup.AUTHORIZATION, ApplicationConfigurationServiceITest.class.getSimpleName(), "ApplicationConfigurationService ITest", "FunctionalIntegrationTest", "checkValueOrLoadDefaultNoPropertyExistTest", "true");
    assertEquals("Expect the config to be set to", "true", checkValueOrLoadDefault.getPropertyValue());
}
Also used : ApplicationConfiguration(com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration) Test(org.junit.Test)

Example 8 with ApplicationConfiguration

use of com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration in project cia by Hack23.

the class UpdateApplicationConfigurationService method processService.

@Override
@Secured({ "ROLE_ADMIN" })
public UpdateApplicationConfigurationResponse processService(final UpdateApplicationConfigurationRequest serviceRequest) {
    final CreateApplicationEventRequest eventRequest = createApplicationEventForService(serviceRequest);
    final UpdateApplicationConfigurationResponse inputValidation = inputValidation(serviceRequest);
    if (inputValidation != null) {
        return inputValidation;
    }
    final UserAccount userAccount = getUserAccountFromSecurityContext();
    if (userAccount != null) {
        eventRequest.setUserId(userAccount.getUserId());
    }
    UpdateApplicationConfigurationResponse response;
    final ApplicationConfiguration applicationConfiguration = applicationConfigurationDAO.load(serviceRequest.getApplicationConfigurationId());
    if (applicationConfiguration != null) {
        eventRequest.setElementId(serviceRequest.getApplicationConfigurationId().toString());
        applicationConfiguration.setConfigTitle(serviceRequest.getConfigTitle());
        applicationConfiguration.setConfigDescription(serviceRequest.getConfigDescription());
        applicationConfiguration.setComponentTitle(serviceRequest.getComponentTitle());
        applicationConfiguration.setComponentDescription(serviceRequest.getComponentDescription());
        applicationConfiguration.setPropertyValue(serviceRequest.getPropertyValue());
        applicationConfigurationDAO.persist(applicationConfiguration);
        response = new UpdateApplicationConfigurationResponse(ServiceResult.SUCCESS);
    } else {
        response = new UpdateApplicationConfigurationResponse(ServiceResult.FAILURE);
    }
    eventRequest.setApplicationMessage(response.getResult().toString());
    createApplicationEventService.processService(eventRequest);
    return response;
}
Also used : UpdateApplicationConfigurationResponse(com.hack23.cia.service.api.action.admin.UpdateApplicationConfigurationResponse) CreateApplicationEventRequest(com.hack23.cia.service.api.action.application.CreateApplicationEventRequest) UserAccount(com.hack23.cia.model.internal.application.user.impl.UserAccount) ApplicationConfiguration(com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration) Secured(org.springframework.security.access.annotation.Secured)

Example 9 with ApplicationConfiguration

use of com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration in project cia by Hack23.

the class RegisterUserService method processService.

@Override
@Secured({ "ROLE_ANONYMOUS" })
public RegisterUserResponse processService(final RegisterUserRequest serviceRequest) {
    final RegisterUserResponse inputValidation = inputValidation(serviceRequest);
    if (inputValidation != null) {
        return inputValidation;
    }
    final CreateApplicationEventRequest eventRequest = createApplicationEventForService(serviceRequest);
    RegisterUserResponse response;
    final ApplicationConfiguration registeredUsersGetAdminConfig = applicationConfigurationService.checkValueOrLoadDefault("Registered User All get Role Admin", "Registered User All get Role Admin", ConfigurationGroup.AUTHORIZATION, RegisterUserService.class.getSimpleName(), "Register User Service", "Responsible for create of useraccounts", "registered.users.get.admin", "true");
    final UserAccount userNameExist = userDAO.findFirstByProperty(UserAccount_.username, serviceRequest.getUsername());
    final UserAccount userEmailExist = userDAO.findFirstByProperty(UserAccount_.email, serviceRequest.getEmail());
    final RuleResult passwordRuleResults = passwordValidator.validate(new PasswordData(serviceRequest.getUserpassword()));
    if (userEmailExist == null && userNameExist == null && passwordRuleResults.isValid()) {
        final UserAccount userAccount = new UserAccount();
        userAccount.setCountry(serviceRequest.getCountry());
        userAccount.setEmail(serviceRequest.getEmail());
        userAccount.setUsername(serviceRequest.getUsername());
        userAccount.setUserId(UUID.randomUUID().toString());
        userAccount.setUserpassword(passwordEncoder.encode(userAccount.getUserId() + ".uuid" + serviceRequest.getUserpassword()));
        userAccount.setNumberOfVisits(1);
        if (serviceRequest.getUserType() == null) {
            userAccount.setUserType(UserType.PRIVATE);
        } else {
            userAccount.setUserType(serviceRequest.getUserType());
        }
        userAccount.setUserEmailStatus(UserEmailStatus.UNKNOWN);
        userAccount.setUserLockStatus(UserLockStatus.UNLOCKED);
        userAccount.setCreatedDate(new Date());
        userDAO.persist(userAccount);
        if ("true".equals(registeredUsersGetAdminConfig.getPropertyValue())) {
            userAccount.setUserRole(UserRole.ADMIN);
        } else {
            userAccount.setUserRole(UserRole.USER);
        }
        final Collection<SimpleGrantedAuthority> authorities = new ArrayList<>();
        if (UserRole.ADMIN == userAccount.getUserRole()) {
            authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
        } else if (UserRole.USER == userAccount.getUserRole()) {
            authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        }
        SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(userAccount, userAccount.getUserpassword(), authorities));
        eventRequest.setUserId(userAccount.getUserId());
        response = new RegisterUserResponse(ServiceResult.SUCCESS);
    } else {
        response = new RegisterUserResponse(ServiceResult.FAILURE);
        if (passwordRuleResults.isValid()) {
            response.setErrorMessage(RegisterUserResponse.ErrorMessage.USER_ALREADY_EXIST.toString());
            eventRequest.setErrorMessage(RegisterUserResponse.ErrorMessage.USER_ALREADY_EXIST.toString());
        } else {
            final String errorMessage = passwordValidator.getMessages(passwordRuleResults).toString();
            response.setErrorMessage(errorMessage);
            eventRequest.setErrorMessage(errorMessage);
        }
    }
    eventRequest.setApplicationMessage(response.getResult().toString());
    createApplicationEventService.processService(eventRequest);
    LOGGER.info("Event: {}", eventRequest);
    return response;
}
Also used : ArrayList(java.util.ArrayList) RuleResult(org.passay.RuleResult) UsernamePasswordAuthenticationToken(org.springframework.security.authentication.UsernamePasswordAuthenticationToken) Date(java.util.Date) SimpleGrantedAuthority(org.springframework.security.core.authority.SimpleGrantedAuthority) PasswordData(org.passay.PasswordData) RegisterUserResponse(com.hack23.cia.service.api.action.application.RegisterUserResponse) CreateApplicationEventRequest(com.hack23.cia.service.api.action.application.CreateApplicationEventRequest) ApplicationConfiguration(com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration) UserAccount(com.hack23.cia.model.internal.application.user.impl.UserAccount) Secured(org.springframework.security.access.annotation.Secured)

Example 10 with ApplicationConfiguration

use of com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration in project cia by Hack23.

the class LoginBlockedAccessImpl method blockBySessionOrIpFailedLoginAttempts.

/**
 * Block by session or ip failed login attempts.
 *
 * @param sessionId
 *            the session id
 * @param loginBlockResultImpl
 *            the login block result impl
 */
private void blockBySessionOrIpFailedLoginAttempts(final String sessionId, final LoginBlockResultImpl loginBlockResultImpl) {
    final ApplicationSession applicationSession = applicationSessionDAO.findFirstByProperty(ApplicationSession_.sessionId, sessionId);
    if (applicationSession != null) {
        final ApplicationConfiguration maxLoginAttemptsBySession = applicationConfigurationService.checkValueOrLoadDefault(MAX_FAILED_LOGIN_ATTEMPTS_RECENT_HOUR_PER_SESSION, BLOCKS_ANY_LOGIN_ATTEMPTS_AFTER_THIS_NUMBER_IS_REACHED, ConfigurationGroup.AUTHENTICATION, LoginBlockedAccessImpl.class.getSimpleName(), LOGIN_BLOCKER, BLOCKS_LOGIN_ATTEMPTS, APPLICATION_AUTHENTICATION_ALLOW_MAX_RECENT_FAILED_LOGINS_BY_SESSION, DEFAULT_MAX_LOGIN_ATTEMPTS);
        final List<ApplicationActionEvent> failedLoginsByThisSession = applicationActionEventDAO.findListByProperty(new Object[] { sessionId, ApplicationOperationType.AUTHENTICATION, ServiceResult.FAILURE.toString() }, ApplicationActionEvent_.sessionId, ApplicationActionEvent_.applicationOperation, ApplicationActionEvent_.applicationMessage);
        if (failedLoginsByThisSession.size() > NumberUtils.toInt(maxLoginAttemptsBySession.getPropertyValue(), DEFAULT_MAX_LOGINS)) {
            loginBlockResultImpl.setBlocked(true);
            loginBlockResultImpl.addMessages(BLOCKED_BY_MORE_THAN_5_LOGIN_ATTEMPTS_BY_THIS_SESSION);
        }
        if (!("0:0:0:0:0:0:0:1".equals(applicationSession.getIpInformation()) || "127.0.0.1".equals(applicationSession.getIpInformation()))) {
            final List<ApplicationSession> applicationSessionsByIp = applicationSessionDAO.findListByProperty(ApplicationSession_.ipInformation, applicationSession.getIpInformation());
            final List<String> sessionIdsWithIp = applicationSessionsByIp.stream().map(ApplicationSession::getSessionId).collect(Collectors.toList());
            final List<ApplicationActionEvent> applicationEventsWithIp = applicationActionEventDAO.findListByPropertyInList(ApplicationActionEvent_.sessionId, sessionIdsWithIp.toArray(new Object[sessionIdsWithIp.size()]));
            final Date oneHourAgo = new Date(System.currentTimeMillis() - ONE_HOUR);
            final Map<Boolean, List<ApplicationActionEvent>> recentOldLoginAttemptsMap = applicationEventsWithIp.stream().filter((final ApplicationActionEvent x) -> x.getApplicationOperation() == ApplicationOperationType.AUTHENTICATION && x.getApplicationMessage().equals(ServiceResult.FAILURE.toString())).collect(Collectors.groupingBy((final ApplicationActionEvent x) -> x.getCreatedDate().after(oneHourAgo)));
            final List<ApplicationActionEvent> recentFailedLogins = recentOldLoginAttemptsMap.get(Boolean.TRUE);
            final ApplicationConfiguration maxLoginAttemptsByIp = applicationConfigurationService.checkValueOrLoadDefault(MAX_FAILED_LOGIN_ATTEMPTS_RECENT_HOUR_PER_IP, BLOCKS_ANY_LOGIN_ATTEMPTS_AFTER_THIS_NUMBER_IS_REACHED, ConfigurationGroup.AUTHENTICATION, LoginBlockedAccessImpl.class.getSimpleName(), LOGIN_BLOCKER, BLOCKS_LOGIN_ATTEMPTS, APPLICATION_AUTHENTICATION_ALLOW_MAX_RECENT_FAILED_LOGINS_BY_IP, DEFAULT_MAX_LOGIN_ATTEMPTS);
            if (recentFailedLogins != null && recentFailedLogins.size() > NumberUtils.toInt(maxLoginAttemptsByIp.getPropertyValue(), DEFAULT_MAX_LOGINS_BY_IP)) {
                loginBlockResultImpl.setBlocked(true);
                loginBlockResultImpl.addMessages(BLOCKED_BY_MORE_THAN_5_RECENT_LOGIN_ATTEMPTS_BY_THIS_IP);
            }
        }
    }
}
Also used : ApplicationSession(com.hack23.cia.model.internal.application.system.impl.ApplicationSession) Date(java.util.Date) ApplicationActionEvent(com.hack23.cia.model.internal.application.system.impl.ApplicationActionEvent) ArrayList(java.util.ArrayList) List(java.util.List) ApplicationConfiguration(com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration)

Aggregations

ApplicationConfiguration (com.hack23.cia.model.internal.application.system.impl.ApplicationConfiguration)14 Date (java.util.Date)4 UserAccount (com.hack23.cia.model.internal.application.user.impl.UserAccount)3 UpdateApplicationConfigurationRequest (com.hack23.cia.service.api.action.admin.UpdateApplicationConfigurationRequest)3 UpdateApplicationConfigurationResponse (com.hack23.cia.service.api.action.admin.UpdateApplicationConfigurationResponse)3 ArrayList (java.util.ArrayList)3 Test (org.junit.Test)3 Secured (org.springframework.security.access.annotation.Secured)3 ApplicationActionEvent (com.hack23.cia.model.internal.application.system.impl.ApplicationActionEvent)2 CreateApplicationEventRequest (com.hack23.cia.service.api.action.application.CreateApplicationEventRequest)2 EmailServiceImpl (com.hack23.cia.service.impl.email.EmailServiceImpl)2 List (java.util.List)2 SimpleSmtpServer (com.dumbster.smtp.SimpleSmtpServer)1 IndicatorElement (com.hack23.cia.model.external.worldbank.indicators.impl.IndicatorElement)1 ApplicationSession (com.hack23.cia.model.internal.application.system.impl.ApplicationSession)1 CreateApplicationSessionRequest (com.hack23.cia.service.api.action.application.CreateApplicationSessionRequest)1 RegisterUserResponse (com.hack23.cia.service.api.action.application.RegisterUserResponse)1 AbstractServiceFunctionalIntegrationTest (com.hack23.cia.service.impl.AbstractServiceFunctionalIntegrationTest)1 PageItemPropertyClickListener (com.hack23.cia.web.impl.ui.application.views.pageclicklistener.PageItemPropertyClickListener)1 UpdateApplicationConfigurationClickListener (com.hack23.cia.web.impl.ui.application.views.pageclicklistener.UpdateApplicationConfigurationClickListener)1