diff options
13 files changed, 97 insertions, 61 deletions
diff --git a/src/main/java/com/juick/config/ActivityPubConfig.java b/src/main/java/com/juick/config/ActivityPubConfig.java index fb204aaa..c93c035b 100644 --- a/src/main/java/com/juick/config/ActivityPubConfig.java +++ b/src/main/java/com/juick/config/ActivityPubConfig.java @@ -30,6 +30,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert import org.springframework.web.client.RestTemplate; import javax.inject.Inject; + import java.nio.charset.StandardCharsets; @Configuration @@ -38,26 +39,31 @@ public class ActivityPubConfig { ActivityPubClientErrorHandler activityPubClientErrorHandler; @Inject ObjectMapper jsonMapper; + @Bean - public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() { + MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(jsonMapper); return converter; } + @Bean - public ActivityPubManager activityPubManager() { + ActivityPubManager activityPubManager() { return new ActivityPubManager(); } + @Inject CloseableHttpClient httpClient; + @Bean - public HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() { + HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() { HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(); clientHttpRequestFactory.setHttpClient(httpClient); return clientHttpRequestFactory; } + @Bean - public RestTemplate apClient() { + RestTemplate apClient() { RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory()); restTemplate.getMessageConverters().add(0, mappingJacksonHttpMessageConverter()); restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8)); @@ -65,4 +71,4 @@ public class ActivityPubConfig { restTemplate.getInterceptors().add(new ActivityPubRequestInterceptor()); return restTemplate; } -}
\ No newline at end of file +} diff --git a/src/main/java/com/juick/config/HttpClientConfig.java b/src/main/java/com/juick/config/HttpClientConfig.java index 99351828..b59a8e1a 100644 --- a/src/main/java/com/juick/config/HttpClientConfig.java +++ b/src/main/java/com/juick/config/HttpClientConfig.java @@ -42,16 +42,16 @@ public class HttpClientConfig { private static final int MAX_TOTAL_CONNECTIONS = 50; private static final int DEFAULT_KEEP_ALIVE_TIME_MILLIS = 20 * 1000; private static final int CLOSE_IDLE_CONNECTION_WAIT_TIME_SECS = 30; - + @Bean - public PoolingHttpClientConnectionManager poolingConnectionManager() { + PoolingHttpClientConnectionManager poolingConnectionManager() { PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager(); poolingConnectionManager.setMaxTotal(MAX_TOTAL_CONNECTIONS); return poolingConnectionManager; } - + @Bean - public ConnectionKeepAliveStrategy connectionKeepAliveStrategy() { + ConnectionKeepAliveStrategy connectionKeepAliveStrategy() { return new ConnectionKeepAliveStrategy() { @Override public TimeValue getKeepAliveDuration(HttpResponse response, HttpContext context) { @@ -61,7 +61,7 @@ public class HttpClientConfig { HeaderElement he = it.next(); String param = he.getName(); String value = he.getValue(); - + if (value != null && param.equalsIgnoreCase("timeout")) { return TimeValue.of(Long.parseLong(value) * 1000, TimeUnit.MILLISECONDS); } @@ -70,24 +70,24 @@ public class HttpClientConfig { } }; } - + @Bean - public CloseableHttpClient httpClient() { + CloseableHttpClient httpClient() { RequestConfig requestConfig = RequestConfig.custom() .setCookieSpec(StandardCookieSpec.IGNORE) .setConnectionRequestTimeout(Timeout.of(REQUEST_TIMEOUT, TimeUnit.MILLISECONDS)) .setConnectTimeout(Timeout.of(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS)) .setResponseTimeout(Timeout.of(SOCKET_TIMEOUT, TimeUnit.MILLISECONDS)).build(); - + return HttpClients.custom() .setDefaultRequestConfig(requestConfig) .setConnectionManager(poolingConnectionManager()) .setKeepAliveStrategy(connectionKeepAliveStrategy()) .build(); } - + @Bean - public Runnable idleConnectionMonitor(final PoolingHttpClientConnectionManager connectionManager) { + Runnable idleConnectionMonitor(final PoolingHttpClientConnectionManager connectionManager) { return new Runnable() { @Override @Scheduled(fixedDelay = 10000) @@ -106,4 +106,4 @@ public class HttpClientConfig { } }; } -}
\ No newline at end of file +} diff --git a/src/main/java/com/juick/config/MailConfig.java b/src/main/java/com/juick/config/MailConfig.java index 209796be..24875f80 100644 --- a/src/main/java/com/juick/config/MailConfig.java +++ b/src/main/java/com/juick/config/MailConfig.java @@ -26,7 +26,7 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnProperty("service_email") public class MailConfig { @Bean - public EmailManager emailManager() { + EmailManager emailManager() { return new EmailManager(); } } diff --git a/src/main/java/com/juick/config/SapeConfig.java b/src/main/java/com/juick/config/SapeConfig.java index 9154de02..7960eed7 100644 --- a/src/main/java/com/juick/config/SapeConfig.java +++ b/src/main/java/com/juick/config/SapeConfig.java @@ -33,7 +33,7 @@ public class SapeConfig { private String token; @Bean - public Sape sape() { + Sape sape() { return new Sape(token, "juick.com", 2000, 3600); } } diff --git a/src/main/java/com/juick/config/SecurityConfig.java b/src/main/java/com/juick/config/SecurityConfig.java index b16dc755..ad24445b 100644 --- a/src/main/java/com/juick/config/SecurityConfig.java +++ b/src/main/java/com/juick/config/SecurityConfig.java @@ -62,7 +62,7 @@ public class SecurityConfig { private static final String COOKIE_NAME = "juick-remember-me"; @Bean - public UserDetailsService userDetailsService() { + UserDetailsService userDetailsService() { return new JuickUserDetailsService(userService); } @@ -85,12 +85,12 @@ public class SecurityConfig { private SignatureManager signatureManager; @Bean - public HashParamAuthenticationFilter apiAuthenticationFilter() { + HashParamAuthenticationFilter apiAuthenticationFilter() { return new HashParamAuthenticationFilter(userService, null); } @Bean - public AuthenticationEntryPoint juickAuthenticationEntryPoint() { + AuthenticationEntryPoint juickAuthenticationEntryPoint() { var entryPoint = new BasicAuthenticationEntryPoint(); entryPoint.setRealmName("Juick"); return entryPoint; @@ -102,12 +102,12 @@ public class SecurityConfig { private String webDomain; @Bean - public HashParamAuthenticationFilter wwwAuthenticationFilter() { + HashParamAuthenticationFilter wwwAuthenticationFilter() { return new HashParamAuthenticationFilter(userService, hashCookieServices()); } @Bean - public RememberMeServices hashCookieServices() { + RememberMeServices hashCookieServices() { TokenBasedRememberMeServices services = new TokenBasedRememberMeServices( rememberMeKey, userDetailsService()); @@ -121,7 +121,7 @@ public class SecurityConfig { @Bean @Order(1) - public SecurityFilterChain apiChain(HttpSecurity http) throws Exception { + SecurityFilterChain apiChain(HttpSecurity http) throws Exception { http.securityMatcher("/api/**") .addFilterBefore(apiAuthenticationFilter(), BasicAuthenticationFilter.class) .addFilterBefore(new HTTPSignatureAuthenticationFilter(signatureManager, userService), @@ -155,14 +155,14 @@ public class SecurityConfig { } @Bean - public AuthenticationSuccessHandler successHandler() { + AuthenticationSuccessHandler successHandler() { SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler(); handler.setUseReferer(true); return handler; } @Bean - public SecurityFilterChain wwwChain(HttpSecurity http) throws Exception { + SecurityFilterChain wwwChain(HttpSecurity http) throws Exception { http.addFilterBefore(wwwAuthenticationFilter(), BasicAuthenticationFilter.class) .authorizeHttpRequests(authorize -> authorize .requestMatchers("/settings", "/pm/**", "/**/bl", "/_twitter", "/post", diff --git a/src/main/java/com/juick/config/SignInWithAppleConfig.java b/src/main/java/com/juick/config/SignInWithAppleConfig.java index 618626d9..85e2bdd1 100644 --- a/src/main/java/com/juick/config/SignInWithAppleConfig.java +++ b/src/main/java/com/juick/config/SignInWithAppleConfig.java @@ -40,7 +40,7 @@ public class SignInWithAppleConfig { private Resource keyPath; @Bean - public AppleClientSecretGenerator clientSecretGenerator() throws IOException, InvalidKeySpecException, NoSuchAlgorithmException { + AppleClientSecretGenerator clientSecretGenerator() throws IOException, InvalidKeySpecException, NoSuchAlgorithmException { byte[] pemData = IOUtils.toByteArray(keyPath.getInputStream()); return new AppleClientSecretGenerator(appId, teamId, keyId, pemData); } diff --git a/src/main/java/com/juick/config/TelegramConfig.java b/src/main/java/com/juick/config/TelegramConfig.java index 85e00930..3d7fe621 100644 --- a/src/main/java/com/juick/config/TelegramConfig.java +++ b/src/main/java/com/juick/config/TelegramConfig.java @@ -26,7 +26,7 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnProperty(name = "telegram_token") public class TelegramConfig { @Bean - public TelegramBotManager telegramBotManager() { + TelegramBotManager telegramBotManager() { return new TelegramBotManager(); } } diff --git a/src/main/java/com/juick/config/TwitterConfig.java b/src/main/java/com/juick/config/TwitterConfig.java index 22540dc5..6b6ed421 100644 --- a/src/main/java/com/juick/config/TwitterConfig.java +++ b/src/main/java/com/juick/config/TwitterConfig.java @@ -26,7 +26,7 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnProperty("twitter_consumer_key") public class TwitterConfig { @Bean - public TwitterManager twitterManager() { + TwitterManager twitterManager() { return new TwitterManager(); } } diff --git a/src/main/java/com/juick/config/WebConfig.java b/src/main/java/com/juick/config/WebConfig.java index 0c816712..c15f4c18 100644 --- a/src/main/java/com/juick/config/WebConfig.java +++ b/src/main/java/com/juick/config/WebConfig.java @@ -39,6 +39,8 @@ import org.commonmark.node.Link; import org.commonmark.parser.Parser; import org.commonmark.renderer.html.HtmlRenderer; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.web.servlet.support.ErrorPageFilter; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -73,22 +75,24 @@ public class WebConfig implements WebMvcConfigurer { private String tmpDir; @Value("${storage_path:#{systemProperties['java.io.tmpdir']}}") private String baseDir; + @Bean - public StorageService storageService() { + StorageService storageService() { return new FileSystemStorageService(baseDir, tmpDir); } @Bean - public HelpService helpService() { + HelpService helpService() { return new HelpService("help"); } @Bean - public Parser cmParser() { + Parser cmParser() { return Parser.builder().extensions(Collections.singletonList(AutolinkExtension.create())).build(); } + @Bean - public HtmlRenderer helpRenderer() { + HtmlRenderer helpRenderer() { return HtmlRenderer.builder() .attributeProviderFactory(context -> (node, tagName, attributes) -> { if (node instanceof Link) { @@ -102,18 +106,19 @@ public class WebConfig implements WebMvcConfigurer { }) .build(); } + @Bean - public Loader<?> templateLoader() { + Loader<?> templateLoader() { return new ClasspathLoader(); } @Bean - public SpringExtension springExtension() { + SpringExtension springExtension() { return new SpringExtension(null); } @Bean - public PebbleEngine pebbleEngine() { + PebbleEngine pebbleEngine() { boolean devToolsArePresent = false; try { Class.forName("org.springframework.boot.devtools.livereload.Connection"); @@ -135,39 +140,46 @@ public class WebConfig implements WebMvcConfigurer { private Resource keystore; @Value("${keystore_password:secret}") private String keystorePassword; + @Bean - public ResourceUrlEncodingFilter resourceUrlEncodingFilter() { + ResourceUrlEncodingFilter resourceUrlEncodingFilter() { return new ResourceUrlEncodingFilter(); } + @Bean - public KeystoreManager keystoreManager() { + KeystoreManager keystoreManager() { return new KeystoreManager(keystore, keystorePassword); } + @Bean - public Remark remarkConverter() { + Remark remarkConverter() { Options options = new Options(); options.inlineLinks = true; return new Remark(options); } + @Bean - public CommandsManager commandsManager() { + CommandsManager commandsManager() { return new CommandsManager(); } + @Bean - public ServerManager serverManager() { + ServerManager serverManager() { return new ServerManager(); } + @Bean - public SignatureManager signatureManager() { + SignatureManager signatureManager() { return new SignatureManager(); } + @Bean - public TopManager topManager() { + TopManager topManager() { return new TopManager(); } @Bean - public ViewResolver viewResolver() { + ViewResolver viewResolver() { PebbleViewResolver viewResolver = new PebbleViewResolver(pebbleEngine()); viewResolver.setPrefix("templates"); viewResolver.setSuffix(".html"); @@ -197,15 +209,30 @@ public class WebConfig implements WebMvcConfigurer { private String archiveUsername; @Bean - public User serviceUser() { + User serviceUser() { return userService.getUserByName(serviceUsername); } + @Bean - public User archiveUser() { + User archiveUser() { return userService.getUserByName(archiveUsername); } + @Bean - public RequestRejectedHandler requestRejectedHandler() { + RequestRejectedHandler requestRejectedHandler() { return new HttpStatusRequestRejectedHandler(); } + + @Bean + ErrorPageFilter errorPageFilter() { + return new ErrorPageFilter(); + } + + @Bean + FilterRegistrationBean disableSpringBootErrorFilter(ErrorPageFilter filter) { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); + filterRegistrationBean.setFilter(filter); + filterRegistrationBean.setEnabled(false); + return filterRegistrationBean; + } } diff --git a/src/main/java/com/juick/config/XMPPConfig.java b/src/main/java/com/juick/config/XMPPConfig.java index 98623f29..cde4c0dc 100644 --- a/src/main/java/com/juick/config/XMPPConfig.java +++ b/src/main/java/com/juick/config/XMPPConfig.java @@ -29,13 +29,14 @@ import org.springframework.format.support.DefaultFormattingConversionService; @ConditionalOnProperty("xmppbot_jid") public class XMPPConfig { @Bean - public static ConversionService conversionService() { + static ConversionService conversionService() { DefaultFormattingConversionService cs = new DefaultFormattingConversionService(); cs.addConverter(new JidConverter()); return cs; } + @Bean - public XMPPManager xmppConnection() { + XMPPManager xmppConnection() { return new XMPPManager(); } } diff --git a/src/test/java/com/juick/config/DataSourceAutoConfiguration.java b/src/test/java/com/juick/config/DataSourceAutoConfiguration.java index b30de7fc..1b88d577 100644 --- a/src/test/java/com/juick/config/DataSourceAutoConfiguration.java +++ b/src/test/java/com/juick/config/DataSourceAutoConfiguration.java @@ -33,12 +33,13 @@ import javax.sql.DataSource; public class DataSourceAutoConfiguration { @Bean - public MariaDB4jSpringService mariaDB4j() { + MariaDB4jSpringService mariaDB4j() { return new MariaDB4jSpringService(); } + @Bean @DependsOn("mariaDB4j") - public DataSource dataSource(DataSourceProperties dataSourceProperties) { + DataSource dataSource(DataSourceProperties dataSourceProperties) { return DataSourceBuilder.create() .driverClassName(dataSourceProperties.getDriverClassName()) .url(dataSourceProperties.getUrl()) @@ -46,4 +47,4 @@ public class DataSourceAutoConfiguration { .password(dataSourceProperties.getPassword()) .build(); } -}
\ No newline at end of file +} diff --git a/src/test/java/com/juick/config/SwaggerConfiguration.java b/src/test/java/com/juick/config/SwaggerConfiguration.java index d3eb7185..6eab47cd 100644 --- a/src/test/java/com/juick/config/SwaggerConfiguration.java +++ b/src/test/java/com/juick/config/SwaggerConfiguration.java @@ -26,15 +26,15 @@ import org.springframework.context.annotation.Configuration; @Configuration public class SwaggerConfiguration { @Bean - public OpenAPI api() { + OpenAPI api() { return new OpenAPI() .info(new Info() - .title("Juick API") - .version("2.0") - .description("Juick Rest API Documentation") - .termsOfService("https://juick.com/help/tos") - .license(new License() - .name("AGPLv3") - .url("https://www.gnu.org/licenses/agpl-3.0.html"))); + .title("Juick API") + .version("2.0") + .description("Juick Rest API Documentation") + .termsOfService("https://juick.com/help/tos") + .license(new License() + .name("AGPLv3") + .url("https://www.gnu.org/licenses/agpl-3.0.html"))); } } diff --git a/src/test/java/com/juick/config/TestActivityConfiguration.java b/src/test/java/com/juick/config/TestActivityConfiguration.java index d77b2d52..3dc72e34 100644 --- a/src/test/java/com/juick/config/TestActivityConfiguration.java +++ b/src/test/java/com/juick/config/TestActivityConfiguration.java @@ -27,8 +27,9 @@ import org.springframework.core.io.Resource; public class TestActivityConfiguration { @Value("classpath:test.p12") Resource keystoreFile; + @Bean - public KeystoreManager testKeystoreManager() { + KeystoreManager testKeystoreManager() { return new KeystoreManager(keystoreFile, "secret"); } } |