package kr.wisestone.owl.config; import com.amazonaws.ClientConfiguration; import com.amazonaws.Protocol; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import kr.wisestone.owl.util.PageUtil; import kr.wisestone.owl.util.WebAppUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.context.support.MessageSourceAccessor; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.springframework.core.io.ClassPathResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.session.FindByIndexNameSessionRepository; import org.springframework.session.security.SpringSessionBackedSessionRegistry; import java.util.Properties; /** * Created by jeong on 2017-08-14. */ @Configuration public class CommonConfiguration { private static final String FILE_ENCODING = "UTF-8"; private static final String MAIL_DEBUG = "mail.debug"; private static final String MAIL_SMTP_STARTTLS_ENABLE = "mail.smtp.starttls.enable"; private static final String MAIL_SMTP_AUTH = "mail.smtp.auth"; private static final String MAIL_SMTP_SSL_TRUST = "mail.smtp.ssl.trust"; @Value("${aws.access.key}") private String accessKey; @Value("${aws.access.password}") private String accessPassword; @Autowired private FindByIndexNameSessionRepository findByIndexNameSessionRepository; @Value("${email.host}") private String emailHost; @Value("${email.port}") private String emailPort; @Value("${email.userName}") private String emailUserName; @Value("${email.password}") private String emailPassword; @Value("${email.transport.protocol}") private String emailTransportProtocol; @Value("${email.smtp.auth}") private String emailSmtpAuth; @Value("${email.smtp.starttle.enable}") private String emailSmtpStarttleEnable; @Value("${email.debug}") private String emailDebug; @Value("${email.sendUrl}") private String emailSendUrl; @Bean public WebAppUtil webAppUtil() { return new WebAppUtil(); } @Bean public PageUtil pageUtil() { return new PageUtil(); } @Profile("prod") @Bean public static PropertySourcesPlaceholderConfigurer prodProperties() { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); configurer.setLocations(new ClassPathResource("system_prod.properties")); configurer.setFileEncoding(FILE_ENCODING); return configurer; } @Profile("dev") @Bean public static PropertySourcesPlaceholderConfigurer devProperties() { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); configurer.setLocations(new ClassPathResource("system_dev.properties")); configurer.setFileEncoding(FILE_ENCODING); return configurer; } @Profile("test") @Bean public static PropertySourcesPlaceholderConfigurer testProperties() { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); configurer.setLocations(new ClassPathResource("system_test.properties")); configurer.setFileEncoding(FILE_ENCODING); return configurer; } @Profile("design") @Bean public static PropertySourcesPlaceholderConfigurer designProperties() { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); configurer.setLocations(new ClassPathResource("system_design.properties")); configurer.setFileEncoding(FILE_ENCODING); return configurer; } @Bean public String getEmailSendUrl() { return this.emailSendUrl; } @Bean public MessageSourceAccessor messageSourceAccessor(ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource) { return new MessageSourceAccessor(reloadableResourceBundleMessageSource); } @Bean public ReloadableResourceBundleMessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setCacheSeconds(10); messageSource.setDefaultEncoding(FILE_ENCODING); messageSource.setBasenames("/WEB-INF/i18n/messages", "/WEB-INF/i18n/mail", "/WEB-INF/i18n/code"); messageSource.setUseCodeAsDefaultMessage(true); return messageSource; } @Bean public JavaMailSender javaMailSender() { JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); javaMailSender.setHost(this.emailHost); javaMailSender.setPort(Integer.valueOf(this.emailPort)); javaMailSender.setUsername(this.emailUserName); javaMailSender.setPassword(this.emailPassword); Properties javaMailProperties = new Properties(); javaMailProperties.setProperty(MAIL_SMTP_SSL_TRUST, this.emailHost); javaMailProperties.setProperty(MAIL_SMTP_AUTH, this.emailSmtpAuth); javaMailProperties.setProperty(MAIL_SMTP_STARTTLS_ENABLE, this.emailSmtpStarttleEnable); javaMailProperties.setProperty(MAIL_DEBUG, this.emailDebug); javaMailSender.setJavaMailProperties(javaMailProperties); return javaMailSender; } @Bean public AmazonS3 amazonS3() { BasicAWSCredentials credentials = new BasicAWSCredentials(this.accessKey, this.accessPassword); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setProtocol(Protocol.HTTP); return AmazonS3ClientBuilder .standard() .withRegion(Regions.AP_NORTHEAST_2) .withCredentials(new AWSStaticCredentialsProvider(credentials)) .withClientConfiguration(clientConfiguration).build(); } @Bean @SuppressWarnings("unchecked") public SpringSessionBackedSessionRegistry sessionRegistry() { return new SpringSessionBackedSessionRegistry(this.findByIndexNameSessionRepository); } }