diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ba177a1d2f..c0e6e07def 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,7 +21,7 @@ on: push: branches: [master] pull_request: - branches: [master] + branches: [master, 'feature/**'] jobs: build-test: @@ -32,7 +32,7 @@ jobs: strategy: fail-fast: false matrix: - java: [ '11', '17', '21', '23' ] + java: [ '17', '21', '25' ] steps: - name: Set up JDK ${{ matrix.java }} @@ -75,7 +75,7 @@ jobs: # only on integration and only once in this matrix - name: Upload Dev Build on Integration - if: ${{ (matrix.java == '11') && (github.event_name == 'push') }} + if: ${{ (matrix.java == '17') && (github.event_name == 'push') }} uses: actions/upload-artifact@v4 with: name: dev-build diff --git a/.gitignore b/.gitignore index 4419d5ba27..f1557451b0 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ docker/postgresql-data docker/roller-data assembly-release/release.sh it-selenium/overlays/ +logs/ diff --git a/Dockerfile b/Dockerfile index 872061a0c1..330b2cb381 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ # STAGE 1 - BUILD ------------------------------------------------ -FROM maven:3-openjdk-17-slim as builder +FROM maven:3-eclipse-temurin-17 AS builder COPY ./docker /project/docker @@ -38,7 +38,7 @@ mvn -Duser.home=/builder/home -DskipTests=true -B clean install # STAGE 2 - PACKAGE ------------------------------------------------ -FROM tomcat:9-jdk17-openjdk-slim +FROM tomcat:11.0-jdk17-temurin # Remove existing Tomcat webapps @@ -70,9 +70,11 @@ RUN mkdir -p data/mediafiles data/searchindex WORKDIR /usr/local/tomcat/lib RUN apt-get update && apt-get install -y wget -RUN wget -O postgresql.jar https://jdbc.postgresql.org/download/postgresql-42.3.1.jar -RUN wget https://repo1.maven.org/maven2/javax/mail/mail/1.4.7/mail-1.4.7.jar -#RUN wget https://repo1.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar +RUN wget -O postgresql.jar https://jdbc.postgresql.org/download/postgresql-42.7.4.jar +RUN wget https://repo1.maven.org/maven2/org/eclipse/angus/angus-mail/2.0.3/angus-mail-2.0.3.jar +RUN wget https://repo1.maven.org/maven2/jakarta/mail/jakarta.mail-api/2.1.3/jakarta.mail-api-2.1.3.jar +RUN wget https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar +RUN wget https://repo1.maven.org/maven2/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar # Add Roller entry-point and go! diff --git a/app/pom.xml b/app/pom.xml index e40aef0d15..357120e671 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -33,10 +33,9 @@ limitations under the License. war - 4.0.1 - 2.2 - 1.2.0 - 1.2 + 6.1.0 + 4.0.0 + 3.0.1 1.7.8 1.10.15 9.7.1 @@ -46,21 +45,20 @@ limitations under the License. 1.18.0 1.13.0 3.17.0 - 4.0.5 + 5.0.1 7.0.0 2.24.3 9.12.1 - 20100527 - 3.4.0 +3.4.0 3.5.2 1.0b3 1.19.0 2.0.16 - 5.3.39 - 5.8.14 - 2.5.29 + 7.0.8 + 7.0.6 + 7.1.1 + 6.1.0 2.4.1 - 1.6 1.0.2 3.1.3 @@ -70,55 +68,58 @@ limitations under the License. - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api ${servlet.version} provided - javax.servlet.jsp - jsp-api + jakarta.servlet.jsp + jakarta.servlet.jsp-api ${jsp-api.version} provided - javax.servlet - jstl + jakarta.servlet.jsp.jstl + jakarta.servlet.jsp.jstl-api + ${jstl.version} + + + org.glassfish.web + jakarta.servlet.jsp.jstl ${jstl.version} - javax.mail - mail - ${java-mail.version} + jakarta.mail + jakarta.mail-api + 2.1.3 + provided + + + org.eclipse.angus + angus-mail + 2.0.3 provided - - - javax.activation - activation - - - com.sun.activation - javax.activation - ${java-activation.version} + jakarta.activation + jakarta.activation-api + 2.1.3 - javax.xml.bind - jaxb-api - ${jaxb.version} - - - - javax.activation - javax.activation-api - - + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.2 + + + org.glassfish.jaxb + jaxb-runtime + 4.0.5 + - org.webjars - webjars-servlet-2.x - ${webjars.version} + com.jgeppert.struts2.bootstrap + struts2-bootstrap-plugin + ${struts-bootstrap.version} + org.webjars bootstrap @@ -309,6 +314,12 @@ limitations under the License. ${lucene.version} + + org.slf4j + slf4j-api + ${slf4j.version} + + @@ -328,7 +339,7 @@ limitations under the License. org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl ${log4j2.version} @@ -387,6 +398,12 @@ limitations under the License. ${xmlrpc-version} + org.apache.xmlrpc xmlrpc-server @@ -450,22 +467,6 @@ limitations under the License. ${spring.security.version} - - org.springframework.security - spring-security-openid - ${spring.security.version} - - - com.google.inject - guice - - - commons-logging - commons-logging - - - - org.springframework.security spring-security-taglibs @@ -503,12 +504,6 @@ limitations under the License. - - com.jgeppert.struts2.bootstrap - struts2-bootstrap-plugin - 4.0.0 - - com.rometools rome @@ -536,13 +531,6 @@ limitations under the License. - - net.oauth.core - oauth-provider - compile - ${oauth-core.version} - - org.bouncycastle bcpkix-jdk15on @@ -581,7 +569,7 @@ limitations under the License. org.mockito mockito-core - 5.15.2 + 5.23.0 test @@ -610,13 +598,15 @@ limitations under the License. - org.eclipse.jetty - jetty-maven-plugin + org.eclipse.jetty.ee11 + jetty-ee11-maven-plugin /roller - src/test/resources/jetty.xml + + src/test/resources/jetty.xml + ${project.build.directory}/test-classes/roller-jettyrun.properties @@ -630,9 +620,9 @@ limitations under the License. 6.1.5 - commons-dbcp - commons-dbcp - 1.4 + org.apache.commons + commons-dbcp2 + 2.13.0 org.apache.derby @@ -645,9 +635,9 @@ limitations under the License. ${derby.version} - javax.mail - mail - ${java-mail.version} + org.eclipse.angus + angus-mail + 2.0.3 @@ -732,6 +722,7 @@ limitations under the License. false + -Djavax.xml.accessExternalSchema=all diff --git a/app/src/main/java/org/apache/roller/planet/util/MailUtil.java b/app/src/main/java/org/apache/roller/planet/util/MailUtil.java index 970795610b..02befd6373 100644 --- a/app/src/main/java/org/apache/roller/planet/util/MailUtil.java +++ b/app/src/main/java/org/apache/roller/planet/util/MailUtil.java @@ -20,14 +20,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.SendFailedException; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.Address; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.SendFailedException; +import jakarta.mail.Session; +import jakarta.mail.Transport; +import jakarta.mail.Address; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMessage; import org.apache.commons.lang3.StringUtils; diff --git a/app/src/main/java/org/apache/roller/weblogger/business/MailProvider.java b/app/src/main/java/org/apache/roller/weblogger/business/MailProvider.java index 1a682c360e..898a59294f 100644 --- a/app/src/main/java/org/apache/roller/weblogger/business/MailProvider.java +++ b/app/src/main/java/org/apache/roller/weblogger/business/MailProvider.java @@ -19,9 +19,9 @@ package org.apache.roller.weblogger.business; import java.util.Properties; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.Transport; +import jakarta.mail.MessagingException; +import jakarta.mail.Session; +import jakarta.mail.Transport; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; diff --git a/app/src/main/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java b/app/src/main/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java index acb077ec5b..583e9b5066 100644 --- a/app/src/main/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java +++ b/app/src/main/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java @@ -455,21 +455,5 @@ public String getOpenSearchWeblogURL(String weblogHandle) { return WebloggerRuntimeConfig.getAbsoluteContextURL() + "/roller-services/opensearch/" + weblogHandle; } - @Override - public String getOAuthRequestTokenURL() { - return WebloggerRuntimeConfig.getAbsoluteContextURL() + "/roller-services/oauth/requestToken"; - } - - @Override - public String getOAuthAuthorizationURL() { - return WebloggerRuntimeConfig.getAbsoluteContextURL() + "/roller-services/oauth/authorize"; - } - @Override - public String getOAuthAccessTokenURL() { - return WebloggerRuntimeConfig.getAbsoluteContextURL() + "/roller-services/oauth/accessToken"; - } - } - - diff --git a/app/src/main/java/org/apache/roller/weblogger/business/OAuthManager.java b/app/src/main/java/org/apache/roller/weblogger/business/OAuthManager.java deleted file mode 100644 index 329b225b00..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/business/OAuthManager.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2007 AOL, LLC. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.roller.weblogger.business; - -import java.io.IOException; - -import net.oauth.OAuthAccessor; -import net.oauth.OAuthConsumer; -import net.oauth.OAuthException; -import net.oauth.OAuthMessage; -import net.oauth.OAuthProblemException; -import net.oauth.OAuthServiceProvider; -import net.oauth.OAuthValidator; -import org.apache.roller.weblogger.WebloggerException; - - -/** - * Management of and access to configured and persistent OAuth objects. - */ -public interface OAuthManager { - - /** - * Get validator to be used to OAuth validate messages. - */ - OAuthServiceProvider getServiceProvider(); - - /** - * Get validator to be used to OAuth validate messages. - */ - OAuthValidator getValidator(); - - /** - * Get the site-wide consumer. - */ - OAuthConsumer getConsumer() - throws WebloggerException; - - /** - * Get consumer corresponding to request. - */ - OAuthConsumer getConsumerByUsername(String username) - throws WebloggerException; - - /** - * Get consumer corresponding to request. - */ - OAuthConsumer getConsumer( - OAuthMessage requestMessage) - throws IOException, OAuthProblemException; - - /** - * Add a site-wide consumer provided a key, there can only be one. - */ - OAuthConsumer addConsumer(String consumerKey) - throws OAuthException, WebloggerException; - - /** - * Store a new consumer for specified user, each user can have only one. - */ - OAuthConsumer addConsumer(String username, String consumerKey) - throws OAuthException; - - /** - * Get the access token and token secret for the given request. - * If token is provided, it better be good; otherwise exception. - * If consumer key is provided and no accessor exists, will return null. - * - * @param requestMessage Request with token or consumer key - * @return Accessor or null if consumer key does not have a token yet - * @throws OAuthProblemException If provided token is bad - * @throws java.io.IOException on IO error - */ - OAuthAccessor getAccessor(OAuthMessage requestMessage) - throws IOException, OAuthProblemException; - - /** - * Set the access token - */ - void markAsAuthorized(OAuthAccessor accessor, String userId) - throws OAuthException; - - /** - * Generate a fresh request token and secret for a consumer. - * - * @throws OAuthException - */ - void generateRequestToken( - OAuthAccessor accessor) - throws OAuthException; - - /** - * Generate a fresh request token and secret for a consumer. - * - * @throws OAuthException - */ - void generateAccessToken(OAuthAccessor accessor) - throws OAuthException; -} diff --git a/app/src/main/java/org/apache/roller/weblogger/business/URLStrategy.java b/app/src/main/java/org/apache/roller/weblogger/business/URLStrategy.java index db87407aa1..053bbf48f6 100644 --- a/app/src/main/java/org/apache/roller/weblogger/business/URLStrategy.java +++ b/app/src/main/java/org/apache/roller/weblogger/business/URLStrategy.java @@ -235,14 +235,4 @@ String getWeblogResourceURL(Weblog weblog, * Get url to JSON tags service url, optionally for a given weblog. */ String getWeblogTagsJsonURL(Weblog weblog, boolean absolute, int pageNum); - - - /* Get URL for obtaining OAuth Request Token */ - String getOAuthRequestTokenURL(); - - /* Get URL authorizing an OAuth Request Token */ - String getOAuthAuthorizationURL(); - - /* Get URL for obtaining OAuth Access Token */ - String getOAuthAccessTokenURL(); } diff --git a/app/src/main/java/org/apache/roller/weblogger/business/Weblogger.java b/app/src/main/java/org/apache/roller/weblogger/business/Weblogger.java index 834efed2c9..62f498efbc 100644 --- a/app/src/main/java/org/apache/roller/weblogger/business/Weblogger.java +++ b/app/src/main/java/org/apache/roller/weblogger/business/Weblogger.java @@ -50,13 +50,6 @@ public interface Weblogger { BookmarkManager getBookmarkManager(); - /** - * - * Get OAuthManager associated with this Weblogger instance. - */ - OAuthManager getOAuthManager(); - - /** * * Get WeblogManager associated with this Weblogger instance. diff --git a/app/src/main/java/org/apache/roller/weblogger/business/WebloggerImpl.java b/app/src/main/java/org/apache/roller/weblogger/business/WebloggerImpl.java index 4dcb1b545b..4f6fb8d65a 100644 --- a/app/src/main/java/org/apache/roller/weblogger/business/WebloggerImpl.java +++ b/app/src/main/java/org/apache/roller/weblogger/business/WebloggerImpl.java @@ -68,7 +68,6 @@ public abstract class WebloggerImpl implements Weblogger { private final UserManager userManager; private final WeblogManager weblogManager; private final WeblogEntryManager weblogEntryManager; - private final OAuthManager oauthManager; private final FeedFetcher feedFetcher; private final PlanetManager planetManager; @@ -98,7 +97,6 @@ protected WebloggerImpl( UserManager userManager, WeblogManager weblogManager, WeblogEntryManager weblogEntryManager, - OAuthManager oauthManager, FeedFetcher feedFetcher, PlanetManager planetManager, org.apache.roller.planet.business.PlanetURLStrategy planetUrlStrategy, @@ -118,7 +116,6 @@ protected WebloggerImpl( this.userManager = userManager; this.weblogManager = weblogManager; this.weblogEntryManager = weblogEntryManager; - this.oauthManager = oauthManager; this.urlStrategy = urlStrategy; this.feedFetcher = feedFetcher; this.planetManager = planetManager; @@ -291,17 +288,6 @@ public PluginManager getPluginManager() { } - /** - * - * - * @see org.apache.roller.weblogger.business.Weblogger#getOAuthManager() - */ - @Override - public OAuthManager getOAuthManager() { - return oauthManager; - } - - /** * @inheritDoc */ diff --git a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerImpl.java b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerImpl.java deleted file mode 100644 index baebb320d1..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerImpl.java +++ /dev/null @@ -1,400 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ - -package org.apache.roller.weblogger.business.jpa; - -import java.io.IOException; -import java.sql.Timestamp; -import java.util.Date; -import java.util.UUID; -import jakarta.persistence.TypedQuery; -import net.oauth.OAuthAccessor; -import net.oauth.OAuthConsumer; -import net.oauth.OAuthException; -import net.oauth.OAuthMessage; -import net.oauth.OAuthProblemException; -import net.oauth.OAuthServiceProvider; -import net.oauth.OAuthValidator; -import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.roller.weblogger.WebloggerException; -import org.apache.roller.weblogger.business.OAuthManager; -import org.apache.roller.weblogger.business.Weblogger; -import org.apache.roller.weblogger.pojos.OAuthAccessorRecord; -import org.apache.roller.weblogger.pojos.OAuthConsumerRecord; - - -/** - * JPA based OAuth manager implementation. - */ -public class JPAOAuthManagerImpl implements OAuthManager { - private final Weblogger roller; - private final JPAPersistenceStrategy strategy; - private final OAuthValidator validator; - - /** - * The logger instance for this class. - */ - private static final Log log = LogFactory.getFactory().getInstance(JPAOAuthManagerImpl.class); - - - @com.google.inject.Inject - public JPAOAuthManagerImpl( - Weblogger roller, - JPAPersistenceStrategy strategy, - OAuthValidator validator) { - this.roller = roller; - this.strategy = strategy; - this.validator = validator; - } - - @Override - public OAuthServiceProvider getServiceProvider() { - return new OAuthServiceProvider( - roller.getUrlStrategy().getOAuthRequestTokenURL(), - roller.getUrlStrategy().getOAuthAuthorizationURL(), - roller.getUrlStrategy().getOAuthAccessTokenURL()); - } - - @Override - public OAuthValidator getValidator() { - return validator; - } - - @Override - public OAuthConsumer getConsumer( - OAuthMessage requestMessage) - throws IOException, OAuthProblemException { - - OAuthConsumer consumer; - // try to load from local cache if not throw exception - String consumer_key = requestMessage.getConsumerKey(); - - consumer = getConsumerByKey(consumer_key); - - if(consumer == null) { - throw new OAuthProblemException("token_rejected"); - } - - return consumer; - } - - /** - * Get the access token and token secret for the given oauth_token. - */ - @Override - public OAuthAccessor getAccessor(OAuthMessage requestMessage) - throws IOException, OAuthProblemException { - - String consumerToken = requestMessage.getToken(); - OAuthAccessor accessor = null; - if (StringUtils.isNotEmpty(consumerToken)) { - // caller provided a token, it better be good or else - accessor = getAccessorByToken(consumerToken); - if (accessor == null) { - throw new OAuthProblemException("token_expired"); - } - } - - String consumerKey = requestMessage.getConsumerKey(); - if (accessor == null && StringUtils.isNotEmpty(consumerKey)) { - // caller provided contumer key, do we have an accessor yet - accessor = getAccessorByKey(consumerKey); - } - return accessor; - } - - /** - * Set the access token - */ - @Override - public void markAsAuthorized(OAuthAccessor accessor, String userId) - throws OAuthException { - try { - OAuthAccessorRecord record = (OAuthAccessorRecord) strategy.load( - OAuthAccessorRecord.class, accessor.consumer.consumerKey); - record.setUserName(userId); - record.setAuthorized(Boolean.TRUE); - strategy.store(record); - - } catch (WebloggerException ex) { - throw new OAuthException("ERROR: setting authorization flag", ex); - } - } - - /** - * Generate a fresh request token and secret for a consumer. - * @throws OAuthException - */ - @Override - public void generateRequestToken( - OAuthAccessor accessor) - throws OAuthException { - - // generate oauth_token and oauth_secret - String consumer_key = accessor.consumer.consumerKey; - // generate token and secret based on consumer_key - - // for now use md5 of name + current time as token - String token_data = consumer_key + System.nanoTime(); - String token = DigestUtils.md5Hex(token_data); - // for now use md5 of name + current time + token as secret - String secret_data = consumer_key + System.nanoTime() + token; - String secret = DigestUtils.md5Hex(secret_data); - - accessor.requestToken = token; - accessor.tokenSecret = secret; - accessor.accessToken = null; - - // add to the local cache - addAccessor(accessor); - } - - /** - * Generate a fresh request token and secret for a consumer. - * @throws OAuthException - */ - @Override - public void generateAccessToken(OAuthAccessor accessor) - throws OAuthException { - - try { - // generate oauth_token and oauth_secret - // generate token and secret based on consumer_key - String consumer_key = accessor.consumer.consumerKey; - - OAuthAccessorRecord record = (OAuthAccessorRecord) strategy.load( - OAuthAccessorRecord.class, accessor.consumer.consumerKey); - - // for now use md5 of name + current time as token - String token_data = consumer_key + System.nanoTime(); - String token = DigestUtils.md5Hex(token_data); - - record.setRequestToken(null); - record.setAccessToken(token); - strategy.store(record); - - } catch (WebloggerException ex) { - throw new OAuthException("ERROR: generating access token", ex); - } - } - - @Override - public OAuthConsumer addConsumer(String username, String consumerKey) throws OAuthException { - - OAuthConsumerRecord record = new OAuthConsumerRecord(); - record.setConsumerKey(consumerKey); - record.setUserName(username); - record.setConsumerSecret(UUID.randomUUID().toString()); - - try { - strategy.store(record); - } catch (WebloggerException ex) { - throw new OAuthException("ERROR storing accessor", ex); - } - - return new OAuthConsumer(null, - record.getConsumerKey(), - record.getConsumerSecret(), - getServiceProvider()); - } - - @Override - public OAuthConsumer addConsumer(String consumerKey) - throws OAuthException, WebloggerException { - if (getConsumer() == null) { - return addConsumer(null, consumerKey); - } else { - throw new OAuthException("ERROR: cannot have more than one site-wide consumer"); - } - } - - @Override - public OAuthConsumer getConsumer() throws WebloggerException { - OAuthConsumerRecord record = null; - try { - TypedQuery q = strategy.getNamedQuery("OAuthConsumerRecord.getSiteWideConsumer", - OAuthConsumerRecord.class); - record = q.getSingleResult(); - - } catch (Exception ex) { - log.debug("ERROR fetching site-wide consumer", ex); - } - if (record != null) { - return new OAuthConsumer( - null, - record.getConsumerKey(), - record.getConsumerSecret(), - getServiceProvider()); - } - return null; - } - - @Override - public OAuthConsumer getConsumerByUsername(String username) throws WebloggerException { - OAuthConsumerRecord record = null; - try { - TypedQuery q = strategy.getNamedQuery("OAuthConsumerRecord.getByUsername", - OAuthConsumerRecord.class); - q.setParameter(1, username); - record = q.getSingleResult(); - - } catch (Exception ex) { - log.debug("ERROR fetching consumer", ex); - } - if (record != null) { - OAuthConsumer consumer = new OAuthConsumer( - null, - record.getConsumerKey(), - record.getConsumerSecret(), - getServiceProvider()); - consumer.setProperty("userName", record.getUserName()); - return consumer; - } - return null; - } - - - //--------------------------------------------- package protected internals - - OAuthConsumer consumerFromRecord(OAuthConsumerRecord record) { - OAuthConsumer consumer = null; - if (record != null) { - consumer = new OAuthConsumer( - null, - record.getConsumerKey(), - record.getConsumerSecret(), - getServiceProvider()); - if (record.getUserName() != null) { - consumer.setProperty("userId", record.getUserName()); - } - } - return consumer; - } - - OAuthAccessor accessorFromRecord(OAuthAccessorRecord record) { - OAuthAccessor accessor = null; - if (record != null) { - accessor = - new OAuthAccessor(getConsumerByKey(record.getConsumerKey())); - accessor.accessToken = record.getAccessToken(); - accessor.requestToken = record.getRequestToken(); - accessor.tokenSecret = record.getTokenSecret(); - if (record.getAuthorized() != null) { - accessor.setProperty("authorized", record.getAuthorized()); - } - if (record.getUserName() != null) { - accessor.setProperty("userId", record.getUserName()); - } - } - return accessor; - } - - OAuthConsumer getConsumerByKey(String consumerKey) { - OAuthConsumerRecord record = null; - try { - TypedQuery q = strategy.getNamedQuery("OAuthConsumerRecord.getByConsumerKey", - OAuthConsumerRecord.class); - q.setParameter(1, consumerKey); - record = q.getSingleResult(); - - } catch (Exception ex) { - log.debug("ERROR fetching consumer", ex); - } - return consumerFromRecord(record); - } - - void addAccessor(OAuthAccessor accessor) throws OAuthException { - - OAuthAccessorRecord record = new OAuthAccessorRecord(); - record.setConsumerKey(accessor.consumer.consumerKey); - record.setRequestToken(accessor.requestToken); - record.setAccessToken(accessor.accessToken); - record.setTokenSecret(accessor.tokenSecret); - if (accessor.getProperty("userId") != null) { - record.setUserName((String)accessor.getProperty("userId")); - } - - if (record.getCreated() != null) { - record.setCreated(record.getCreated()); - } else { - record.setCreated(new Timestamp(new Date().getTime())); - } - - if (record.getUpdated() != null) { - record.setUpdated(record.getUpdated()); - } else { - record.setUpdated(record.getCreated()); - } - - if (accessor.getProperty("authorized") != null) { - record.setAuthorized((Boolean)accessor.getProperty("authorized")); - } - try { - strategy.store(record); - } catch (WebloggerException ex) { - throw new OAuthException("ERROR storing accessor", ex); - } - } - - OAuthAccessor getAccessorByKey(String consumerKey) { - OAuthAccessorRecord record = null; - try { - TypedQuery q = strategy.getNamedQuery("OAuthAccessorRecord.getByKey", - OAuthAccessorRecord.class); - q.setParameter(1, consumerKey); - record = q.getSingleResult(); - - } catch (Exception ex) { - log.debug("ERROR fetching accessor", ex); - } - return accessorFromRecord(record); - } - - OAuthAccessor getAccessorByToken(String token) { - OAuthAccessorRecord record = null; - try { - TypedQuery q = strategy.getNamedQuery("OAuthAccessorRecord.getByToken", - OAuthAccessorRecord.class); - q.setParameter(1, token); - record = q.getSingleResult(); - - } catch (Exception ex) { - log.debug("ERROR fetching accessor", ex); - } - return accessorFromRecord(record); - } - - void removeConsumer(OAuthConsumer consumer) throws OAuthException { - try { - strategy.remove(OAuthConsumerRecord.class, consumer.consumerKey); - } catch (WebloggerException ex) { - throw new OAuthException("ERROR removing consumer", ex); - } - } - - void removeAccessor(OAuthAccessor accessor) throws OAuthException { - try { - strategy.remove(OAuthAccessorRecord.class, accessor.consumer.consumerKey); - } catch (WebloggerException ex) { - throw new OAuthException("ERROR removing accessor", ex); - } - } -} diff --git a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java index fe74ea0406..91597ca10e 100644 --- a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java +++ b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java @@ -61,7 +61,6 @@ protected JPAWebloggerImpl( UserManager userManager, WeblogManager weblogManager, WeblogEntryManager weblogEntryManager, - OAuthManager oauthManager, FeedFetcher feedFetcher, PlanetManager planetManager, PlanetURLStrategy planetUrlStrategy, @@ -82,7 +81,6 @@ protected JPAWebloggerImpl( userManager, weblogManager, weblogEntryManager, - oauthManager, feedFetcher, planetManager, planetUrlStrategy, diff --git a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerModule.java b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerModule.java index d9e189494f..f3e392862a 100644 --- a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerModule.java +++ b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerModule.java @@ -20,8 +20,6 @@ import com.google.inject.Binder; import com.google.inject.Module; -import net.oauth.OAuthValidator; -import net.oauth.SimpleOAuthValidator; import org.apache.roller.planet.business.MultiPlanetURLStrategy; import org.apache.roller.planet.business.Planet; import org.apache.roller.planet.business.PlanetManager; @@ -34,7 +32,6 @@ import org.apache.roller.weblogger.business.FileContentManagerImpl; import org.apache.roller.weblogger.business.MediaFileManager; import org.apache.roller.weblogger.business.MultiWeblogURLStrategy; -import org.apache.roller.weblogger.business.OAuthManager; import org.apache.roller.weblogger.business.PropertiesManager; import org.apache.roller.weblogger.business.URLStrategy; import org.apache.roller.weblogger.business.Weblogger; @@ -75,10 +72,6 @@ public void configure(Binder binder) { binder.bind(UserManager.class).to( JPAUserManagerImpl.class); binder.bind(WeblogManager.class).to( JPAWeblogManagerImpl.class); binder.bind(WeblogEntryManager.class).to( JPAWeblogEntryManagerImpl.class); - binder.bind(OAuthManager.class).to( JPAOAuthManagerImpl.class); - - binder.bind(OAuthValidator.class).to( SimpleOAuthValidator.class); - binder.bind(MediaFileManager.class).to( JPAMediaFileManagerImpl.class); binder.bind(FileContentManager.class).to( FileContentManagerImpl.class); binder.bind(IndexManager.class).to( LuceneIndexManager.class); diff --git a/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java b/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java index 13467171ce..744cc57153 100644 --- a/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java +++ b/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java @@ -30,8 +30,8 @@ import java.util.Map; import java.util.Set; -import javax.activation.FileTypeMap; -import javax.activation.MimetypesFileTypeMap; +import jakarta.activation.FileTypeMap; +import jakarta.activation.MimetypesFileTypeMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java index 8d24508f5e..f57c81d522 100644 --- a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java +++ b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java @@ -30,7 +30,7 @@ import org.apache.roller.weblogger.config.runtime.RuntimeConfigDefs; import org.apache.roller.weblogger.pojos.GlobalPermission; import org.apache.roller.weblogger.pojos.RuntimeConfigProperty; -import org.apache.struts2.interceptor.HttpParametersAware; +import org.apache.struts2.ActionContext; import org.apache.struts2.dispatcher.HttpParameters; import org.apache.struts2.dispatcher.Parameter; @@ -45,7 +45,7 @@ * Handles editing of planet global runtime properties. */ // TODO: make this work @AllowedMethods({"execute","save"}) -public class PlanetConfig extends PlanetUIAction implements HttpParametersAware { +public class PlanetConfig extends PlanetUIAction { private static final Log log = LogFactory.getLog(PlanetConfig.class); @@ -80,6 +80,9 @@ public boolean isWeblogRequired() { @Override public void myPrepare() { + // initialize request parameters from ActionContext + this.parameters = ActionContext.getContext().getParameters(); + try { // just grab our properties map PropertiesManager pMgr = WebloggerFactory.getWeblogger().getPropertiesManager(); @@ -180,11 +183,6 @@ public HttpParameters getParameters() { return parameters; } - @Override - public void setParameters(HttpParameters parameters) { - this.parameters = parameters; - } - public Map getProperties() { return properties; } diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroupSubs.java b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroupSubs.java index 7d6ed549e3..4fd89118b7 100644 --- a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroupSubs.java +++ b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroupSubs.java @@ -28,9 +28,10 @@ import org.apache.roller.planet.pojos.Subscription; import org.apache.roller.weblogger.business.WebloggerFactory; import org.apache.roller.weblogger.pojos.GlobalPermission; -import org.apache.struts2.interceptor.ServletRequestAware; +import org.apache.struts2.ActionContext; +import org.apache.struts2.Preparable; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.*; @@ -38,7 +39,7 @@ * Manage planet group subscriptions, default group is "all". */ // TODO: make this work @AllowedMethods({"execute","saveSubscription","saveGroup","deleteSubscription"}) -public class PlanetGroupSubs extends PlanetUIAction implements ServletRequestAware { +public class PlanetGroupSubs extends PlanetUIAction implements Preparable { private static final Log log = LogFactory.getLog(PlanetGroupSubs.class); @@ -67,8 +68,14 @@ public boolean isWeblogRequired() { } + /** + * Loads the group being edited. This runs before the params interceptor so + * that submitted values are bound onto the loaded group rather than being + * overwritten by it. + */ @Override - public void setServletRequest(HttpServletRequest request) { + public void prepare() { + HttpServletRequest request = ActionContext.getContext().getServletRequest(); if (request.getParameter("createNew") != null) { group = new PlanetGroup(); } else { diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java index cea9025766..4e6d0e964a 100644 --- a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java +++ b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java @@ -21,9 +21,9 @@ import org.apache.roller.planet.business.PlanetManager; import org.apache.roller.planet.pojos.PlanetGroup; import org.apache.roller.weblogger.business.WebloggerFactory; -import org.apache.struts2.interceptor.ServletRequestAware; +import org.apache.struts2.ActionContext; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; @@ -32,7 +32,7 @@ * Manage planet groups. */ // TODO: make this work @AllowedMethods({"execute","save","delete"}) -public class PlanetGroups extends PlanetUIAction implements ServletRequestAware { +public class PlanetGroups extends PlanetUIAction { private static Log log = LogFactory.getLog(PlanetGroups.class); @@ -51,7 +51,8 @@ public boolean isWeblogRequired() { } @Override - public void setServletRequest(HttpServletRequest request) { + public void myPrepare() { + HttpServletRequest request = ActionContext.getContext().getServletRequest(); group = PlanetGroupSubs.getGroupFromRequest(request, getPlanet()); } diff --git a/app/src/main/java/org/apache/roller/weblogger/pojos/OAuthAccessorRecord.java b/app/src/main/java/org/apache/roller/weblogger/pojos/OAuthAccessorRecord.java deleted file mode 100644 index e76e9b7ee6..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/pojos/OAuthAccessorRecord.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ - -package org.apache.roller.weblogger.pojos; - -import java.io.Serializable; -import java.sql.Timestamp; -import org.apache.commons.lang3.builder.EqualsBuilder; -import org.apache.commons.lang3.builder.HashCodeBuilder; - - -/** - * Stores data for an OAuth accessor - */ -public class OAuthAccessorRecord implements Serializable { - private String consumerKey; - private String requestToken; - private String accessToken; - private String tokenSecret; - private Timestamp created; - private Timestamp updated; - private Boolean authorized; - private String userName; - - public OAuthAccessorRecord() { - } - - /** - * @return the consumerKey - */ - public String getConsumerKey() { - return consumerKey; - } - - /** - * @param consumerKey the consumerKey to set - */ - public void setConsumerKey(String consumerKey) { - this.consumerKey = consumerKey; - } - - /** - * @return the requestToken - */ - public String getRequestToken() { - return requestToken; - } - - /** - * @param requestToken the requestToken to set - */ - public void setRequestToken(String requestToken) { - this.requestToken = requestToken; - } - - /** - * @return the accessToken - */ - public String getAccessToken() { - return accessToken; - } - - /** - * @param accessToken the accessToken to set - */ - public void setAccessToken(String accessToken) { - this.accessToken = accessToken; - } - - /** - * @return the tokenSecret - */ - public String getTokenSecret() { - return tokenSecret; - } - - /** - * @param tokenSecret the tokenSecret to set - */ - public void setTokenSecret(String tokenSecret) { - this.tokenSecret = tokenSecret; - } - - /** - * @return the created - */ - public Timestamp getCreated() { - return created; - } - - /** - * @param created the created to set - */ - public void setCreated(Timestamp created) { - this.created = created; - } - - /** - * @return the updated - */ - public Timestamp getUpdated() { - return updated; - } - - /** - * @param updated the updated to set - */ - public void setUpdated(Timestamp updated) { - this.updated = updated; - } - - //------------------------------------------------------- Good citizenship - - @Override - public String toString() { - StringBuilder buf = new StringBuilder(); - buf.append("{"); - buf.append(this.getConsumerKey()); - buf.append("}"); - return buf.toString(); - } - - @Override - public boolean equals(Object other) { - if (other == this) { - return true; - } - if (!(other instanceof OAuthAccessorRecord)) { - return false; - } - OAuthAccessorRecord o = (OAuthAccessorRecord)other; - return new EqualsBuilder() - .append(getConsumerKey(), o.getConsumerKey()) - .isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder().append(getConsumerKey()).toHashCode(); - } - - /** - * @return the authorized - */ - public Boolean getAuthorized() { - return authorized; - } - - /** - * @param authorized the authorized to set - */ - public void setAuthorized(Boolean authorized) { - this.authorized = authorized; - } - - /** - * @return the userName - */ - public String getUserName() { - return userName; - } - - /** - * @param userName the userName to set - */ - public void setUserName(String userName) { - this.userName = userName; - } - -} diff --git a/app/src/main/java/org/apache/roller/weblogger/pojos/OAuthConsumerRecord.java b/app/src/main/java/org/apache/roller/weblogger/pojos/OAuthConsumerRecord.java deleted file mode 100644 index 5ab75b0c9b..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/pojos/OAuthConsumerRecord.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ - -package org.apache.roller.weblogger.pojos; - -import java.io.Serializable; -import org.apache.commons.lang3.builder.EqualsBuilder; -import org.apache.commons.lang3.builder.HashCodeBuilder; - - -/** - * Stores data for an OAuth consumer key and secret. - * There can be up to one for the whole site and up to one per user. - */ -public class OAuthConsumerRecord implements Serializable { - private String consumerKey; - private String consumerSecret; - private String userName; - - public OAuthConsumerRecord() { - } - - /** - * @return the consumerKey - */ - public String getConsumerKey() { - return consumerKey; - } - - /** - * @param consumerKey the consumerKey to set - */ - public void setConsumerKey(String consumerKey) { - this.consumerKey = consumerKey; - } - - /** - * @return the consumerSecret - */ - public String getConsumerSecret() { - return consumerSecret; - } - - /** - * @param consumerSecret the consumerSecret to set - */ - public void setConsumerSecret(String consumerSecret) { - this.consumerSecret = consumerSecret; - } - - /** - * @return the username - */ - public String getUserName() { - return userName; - } - - /** - * @param username the username to set - */ - public void setUserName(String username) { - this.userName = username; - } - - //------------------------------------------------------- Good citizenship - - @Override - public String toString() { - StringBuilder buf = new StringBuilder(); - buf.append("{"); - buf.append(this.getConsumerKey()); - buf.append("}"); - return buf.toString(); - } - - @Override - public boolean equals(Object other) { - if (other == this) { - return true; - } - if (!(other instanceof OAuthConsumerRecord)) { - return false; - } - OAuthConsumerRecord o = (OAuthConsumerRecord)other; - return new EqualsBuilder() - .append(getConsumerKey(), o.getConsumerKey()) - .isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder().append(getConsumerKey()).toHashCode(); - } - -} diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java index 3e2d544987..29c1eb1b77 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.core; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; /** diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerContext.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerContext.java index a3dfb930b8..9413bc8caf 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerContext.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerContext.java @@ -23,9 +23,9 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.apache.roller.weblogger.business.Weblogger; import org.springframework.security.authentication.AuthenticationProvider; @@ -309,10 +309,10 @@ private DelegatingPasswordEncoder createPasswordEncoder() { // supported encoders encoders.put("bcrypt", new BCryptPasswordEncoder()); - encoders.put("pbkdf2", new Pbkdf2PasswordEncoder()); + encoders.put("pbkdf2", Pbkdf2PasswordEncoder.defaultsForSpringSecurity_v5_8()); // provided by bouncy castle dependency - encoders.put("scrypt", new SCryptPasswordEncoder()); - encoders.put("argon2", new Argon2PasswordEncoder()); + encoders.put("scrypt", SCryptPasswordEncoder.defaultsForSpringSecurity_v5_8()); + encoders.put("argon2", Argon2PasswordEncoder.defaultsForSpringSecurity_v5_8()); // just for testing encoders.put("noop", org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance()); diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerSession.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerSession.java index 5c0f029c25..959cc3e908 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerSession.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerSession.java @@ -21,11 +21,11 @@ import java.io.Serializable; import java.security.Principal; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpSessionActivationListener; -import javax.servlet.http.HttpSessionEvent; -import javax.servlet.http.HttpSessionListener; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSessionActivationListener; +import jakarta.servlet.http.HttpSessionEvent; +import jakarta.servlet.http.HttpSessionListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; @@ -89,16 +89,7 @@ public static RollerSession getRollerSession(HttpServletRequest request) { UserManager umgr = WebloggerFactory.getWeblogger().getUserManager(); User user = umgr.getUserByUserName(principal.getName()); - - // check for OpenID username (in the form of a URL) - if (user == null && principal.getName() != null && principal.getName().startsWith("http://")) { - String openidurl = principal.getName(); - if (openidurl.endsWith("/")) { - openidurl = openidurl.substring(0, openidurl.length() - 1); - } - user = umgr.getUserByOpenIdUrl(openidurl); - } - + // try one time to auto-provision, only happens if user==null // which means installation has LDAP enabled in security.xml if (user == null && WebloggerConfig.getBooleanProperty("users.ldap.autoProvision.enabled")) { diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java index 2ca3da9c46..cf4ef12264 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java @@ -19,16 +19,16 @@ package org.apache.roller.weblogger.ui.core.filters; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.business.WebloggerFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CharEncodingFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CharEncodingFilter.java index c8109a59c5..99f44624b3 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CharEncodingFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CharEncodingFilter.java @@ -20,12 +20,12 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CustomOpenIDAuthenticationProcessingFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CustomOpenIDAuthenticationProcessingFilter.java deleted file mode 100644 index 9076578d88..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CustomOpenIDAuthenticationProcessingFilter.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ - -package org.apache.roller.weblogger.ui.core.filters; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - -import javax.servlet.Filter; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.openid.OpenIDAuthenticationToken; -import org.springframework.security.openid.OpenIDAuthenticationFilter; -//import org.springframework.security.userdetails.openid.OpenIDUserAttribute; - - -/** - * Handle response from OpenID provider. - * @author Tatyana Tokareva - */ -public class CustomOpenIDAuthenticationProcessingFilter - extends OpenIDAuthenticationFilter implements Filter { - - private static Log log = LogFactory.getLog(CustomOpenIDAuthenticationProcessingFilter.class); - - /** - * @throws org.springframework.security.core.AuthenticationException - */ - @Override - public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse rsp) throws IOException { - OpenIDAuthenticationToken auth; - - // Processing standard OpenId user authentication - auth = (OpenIDAuthenticationToken) super.attemptAuthentication(req, rsp); - - // auth will be null on the first pass of super.attemptAuthentication() - if (auth != null) { - GrantedAuthority ga = (GrantedAuthority) auth.getAuthorities().toArray()[0]; - - if (ga.getAuthority().equals("rollerOpenidLogin")) { - - /* TODO: when Spring Security 2.1 is released, we can uncomment - * this code, which will allow us to pre-populate the new user - * registration form with information from the OpenID Provider. - * - Collection sREGAttributesList = auth.getAttributes(); - OpenIDUserAttribute openidName = new OpenIDUserAttribute( - OpenIDUserAttribute.Attributes.openidname.toString(), ""); - openidName.setValue(auth.getIdentityUrl()); - sREGAttributesList.add(openidName); - - // TODO: find a better place to stash attributes - UserManager mgr = WebloggerFactory.getWeblogger().getUserManager(); - mgr.userAttributes.put( - UserAttribute.Attributes.openidUrl.toString(), - sREGAttributesList); - */ - - } - } - return auth; - } - - /** - * {@inheritDoc} - */ - @Override - protected String lookupRealm(String returnToUrl) { - - String mapping = super.lookupRealm(returnToUrl); - - if (mapping == null) { - try { - URL url = new URL(returnToUrl); - int port = url.getPort(); - - StringBuilder realmBuffer = new StringBuilder(returnToUrl.length()) - .append(url.getProtocol()) - .append("://") - .append(url.getHost()); - if (port != -1) { - realmBuffer.append(":").append(port); - } - realmBuffer.append("/"); - mapping = realmBuffer.toString(); - } catch (MalformedURLException e) { - log.warn("returnToUrl was not a valid URL: [" + returnToUrl + "]", e); - } - } - - return mapping; - } -} diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/DebugFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/DebugFilter.java index 1bf1508c88..de994e489b 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/DebugFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/DebugFilter.java @@ -19,14 +19,14 @@ package org.apache.roller.weblogger.ui.core.filters; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/IPBanFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/IPBanFilter.java index eda17e24eb..2846d821e3 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/IPBanFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/IPBanFilter.java @@ -19,14 +19,14 @@ package org.apache.roller.weblogger.ui.core.filters; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.util.IPBanList; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/InitFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/InitFilter.java index 554ccc6beb..6d9da1abfb 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/InitFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/InitFilter.java @@ -20,13 +20,13 @@ import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilter.java index b2e63915d1..85e2c76d7d 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilter.java @@ -20,8 +20,8 @@ import java.io.IOException; import java.security.SecureRandom; -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.RandomStringUtils; import org.apache.roller.weblogger.ui.core.RollerSession; import org.apache.roller.weblogger.ui.rendering.util.cache.SaltCache; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java index a687552f7a..44127249d9 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java @@ -19,14 +19,14 @@ package org.apache.roller.weblogger.ui.core.filters; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.business.WebloggerFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/RoleAssignmentFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/RoleAssignmentFilter.java index bf4aaba709..37e9e03ef6 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/RoleAssignmentFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/RoleAssignmentFilter.java @@ -19,14 +19,14 @@ package org.apache.roller.weblogger.ui.core.filters; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/SpringFirewallExceptionFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/SpringFirewallExceptionFilter.java index 2ff028cea6..186e84ff91 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/SpringFirewallExceptionFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/SpringFirewallExceptionFilter.java @@ -19,14 +19,14 @@ package org.apache.roller.weblogger.ui.core.filters; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.security.web.firewall.RequestRejectedException; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilter.java index 586bff185b..5f9e54b34e 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilter.java @@ -23,13 +23,13 @@ import java.util.Objects; import java.util.Set; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/AutoProvision.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/AutoProvision.java index 0df869f3e1..aa52fd5348 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/AutoProvision.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/AutoProvision.java @@ -17,7 +17,7 @@ */ package org.apache.roller.weblogger.ui.core.security; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; public interface AutoProvision { diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/BasicUserAutoProvision.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/BasicUserAutoProvision.java index e486d02c9f..b2739de593 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/BasicUserAutoProvision.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/BasicUserAutoProvision.java @@ -17,7 +17,7 @@ */ package org.apache.roller.weblogger.ui.core.security; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/CustomUserRegistry.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/CustomUserRegistry.java index 14d184f870..01eb5fa845 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/CustomUserRegistry.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/CustomUserRegistry.java @@ -24,7 +24,7 @@ import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.roller.weblogger.config.AuthMethod; import org.springframework.security.core.Authentication; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/RollerUserDetailsService.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/RollerUserDetailsService.java index db41c19b1e..853cfb7429 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/RollerUserDetailsService.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/RollerUserDetailsService.java @@ -39,54 +39,17 @@ public UserDetails loadUserByUsername(String userName) { try { UserManager umgr = roller.getUserManager(); User userData; - // OpenID user? - if (userName.startsWith("http://") || userName.startsWith("https://")) { - if (userName.endsWith("/")) { - userName = userName.substring(0, userName.length() -1 ); - } - try { - userData = umgr.getUserByOpenIdUrl(userName); - if (userData == null) { - log.warn("No user found with OpenID URL: " + userName + - " (OpenID aliased by auth provider?) Confirm URL exists in roller_user table"); - } - } catch (WebloggerException ex) { - throw new DataRetrievalFailureException("ERROR in user lookup", ex); - } - String name; - String password; - List authorities; - - // We are not throwing UsernameNotFound exception in case of - // openid authentication in order to receive OpenID Simple Registration (SREG) - // attributes from the authentication filter and save them - if (userData == null) { - authorities = new ArrayList<>(1); - SimpleGrantedAuthority g = new SimpleGrantedAuthority("rollerOpenidLogin"); - authorities.add(g); - name = "openid"; - password = "openid"; - } else { - authorities = getAuthorities(userData, umgr); - name = userData.getUserName(); - password = userData.getPassword(); - } - return new org.springframework.security.core.userdetails.User(name, password, - true, true, true, true, authorities); - } else { - // standard username/password auth - try { - userData = umgr.getUserByUserName(userName); - } catch (WebloggerException ex) { - throw new DataRetrievalFailureException("ERROR in user lookup", ex); - } - if (userData == null) { - throw new UsernameNotFoundException("ERROR no user: " + userName); - } - List authorities = getAuthorities(userData, umgr); - return new org.springframework.security.core.userdetails.User(userData.getUserName(), userData.getPassword(), - true, true, true, true, authorities); - } + try { + userData = umgr.getUserByUserName(userName); + } catch (WebloggerException ex) { + throw new DataRetrievalFailureException("ERROR in user lookup", ex); + } + if (userData == null) { + throw new UsernameNotFoundException("ERROR no user: " + userName); + } + List authorities = getAuthorities(userData, umgr); + return new org.springframework.security.core.userdetails.User(userData.getUserName(), userData.getPassword(), + true, true, true, true, authorities); } catch (WebloggerException ex) { throw new DataAccessResourceFailureException("ERROR: fetching roles", ex); } diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java index 2993837bb5..afa3099911 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java @@ -32,9 +32,9 @@ import java.util.ResourceBundle; import java.util.StringTokenizer; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; -import javax.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.Tag; +import jakarta.servlet.jsp.tagext.TagSupport; /** diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/RequestMapper.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/RequestMapper.java index 4bac5118f8..00fb58068f 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/RequestMapper.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/RequestMapper.java @@ -2,9 +2,9 @@ package org.apache.roller.weblogger.ui.rendering; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java index 693be62ab1..e17c5295d2 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java @@ -23,10 +23,10 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Set; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/DeviceResolverRequestFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/DeviceResolverRequestFilter.java index 8add354065..732000d16b 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/DeviceResolverRequestFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/DeviceResolverRequestFilter.java @@ -23,10 +23,10 @@ import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.roller.weblogger.ui.rendering.util.mobile.Device; import org.apache.roller.weblogger.ui.rendering.util.mobile.DeviceResolver; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/RequestMappingFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/RequestMappingFilter.java index 4c56fb92be..c305131382 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/RequestMappingFilter.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/RequestMappingFilter.java @@ -22,14 +22,14 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.ui.rendering.RequestMapper; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/mobile/MobileDeviceRepository.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/mobile/MobileDeviceRepository.java index ddad1e2d1b..e57ce5c8cd 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/mobile/MobileDeviceRepository.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/mobile/MobileDeviceRepository.java @@ -18,8 +18,8 @@ package org.apache.roller.weblogger.ui.rendering.mobile; import java.util.regex.Pattern; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import static org.apache.roller.weblogger.ui.rendering.mobile.MobileDeviceRepository.DeviceType.*; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/CalendarModel.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/CalendarModel.java index dfb778ec02..a558887eac 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/CalendarModel.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/CalendarModel.java @@ -19,7 +19,7 @@ package org.apache.roller.weblogger.ui.rendering.model; import java.util.Map; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.jsp.PageContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.java index 68c707f176..1440f92690 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.rendering.plugins.comments; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticatorUtils.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticatorUtils.java index 12a78f600a..309e1232de 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticatorUtils.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticatorUtils.java @@ -24,7 +24,7 @@ import org.apache.roller.weblogger.business.WebloggerFactory; import org.apache.roller.weblogger.pojos.Weblog; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.Locale; class CommentAuthenticatorUtils { diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/DefaultCommentAuthenticator.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/DefaultCommentAuthenticator.java index 49b48fd7be..81b02a109e 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/DefaultCommentAuthenticator.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/DefaultCommentAuthenticator.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.rendering.plugins.comments; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/LdapCommentAuthenticator.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/LdapCommentAuthenticator.java index 27a5e1e479..8f4b9a6efa 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/LdapCommentAuthenticator.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/LdapCommentAuthenticator.java @@ -24,8 +24,8 @@ import javax.naming.NamingException; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/MathCommentAuthenticator.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/MathCommentAuthenticator.java index 74ab7bfa16..41a5684017 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/MathCommentAuthenticator.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/MathCommentAuthenticator.java @@ -21,8 +21,8 @@ import java.util.Locale; import java.util.Random; import java.security.SecureRandom; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.util.I18nMessages; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentAuthenticatorServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentAuthenticatorServlet.java index b808050ef9..781bcfafbe 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentAuthenticatorServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentAuthenticatorServlet.java @@ -20,11 +20,11 @@ import java.io.IOException; import java.io.PrintWriter; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.config.WebloggerConfig; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentServlet.java index 677a8f97aa..6b94822372 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentServlet.java @@ -22,12 +22,12 @@ import java.sql.Timestamp; import java.util.Iterator; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java index c05bdfd56d..8a8b3d9689 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java @@ -21,11 +21,11 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.util.RollerConstants; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java index 713e4c2d17..f2e864dc5d 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java @@ -22,11 +22,11 @@ import java.io.InputStream; import java.io.OutputStream; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java index baf5e0948a..39280f4945 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java @@ -53,13 +53,13 @@ import org.apache.roller.weblogger.util.I18nMessages; import org.apache.roller.weblogger.util.cache.CachedContent; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspFactory; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspFactory; +import jakarta.servlet.jsp.PageContext; import java.io.IOException; import java.util.Date; import java.util.HashMap; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PlanetFeedServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PlanetFeedServlet.java index 432a0c33a1..19008086ac 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PlanetFeedServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PlanetFeedServlet.java @@ -22,11 +22,11 @@ import java.util.Date; import java.util.HashMap; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewResourceServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewResourceServlet.java index 7103bea9f6..553971b2f5 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewResourceServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewResourceServlet.java @@ -20,12 +20,12 @@ import java.io.IOException; import java.io.InputStream; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewServlet.java index a2ed8ced82..fbf07ebe4d 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewServlet.java @@ -37,13 +37,13 @@ import org.apache.roller.weblogger.ui.rendering.util.WeblogPreviewRequest; import org.apache.roller.weblogger.util.cache.CachedContent; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspFactory; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspFactory; +import jakarta.servlet.jsp.PageContext; import java.io.IOException; import java.util.HashMap; import java.util.Map; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/RSDServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/RSDServlet.java index cd23152115..da5ba82af9 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/RSDServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/RSDServlet.java @@ -20,11 +20,11 @@ import java.io.IOException; import java.util.HashMap; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.util.RollerConstants; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/ResourceServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/ResourceServlet.java index 8dbd5dba1e..1c9e59bf68 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/ResourceServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/ResourceServlet.java @@ -21,12 +21,12 @@ import java.io.IOException; import java.io.InputStream; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java index 9b3c90c6e0..eaeafa7bfd 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java @@ -22,13 +22,13 @@ import java.util.HashMap; import java.util.Map; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspFactory; -import javax.servlet.jsp.PageContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspFactory; +import jakarta.servlet.jsp.PageContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java index 2b43a4e755..5046544e36 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java @@ -22,11 +22,11 @@ import java.io.PrintWriter; import java.sql.Timestamp; import java.util.Date; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.util.RollerConstants; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/ModDateHeaderUtil.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/ModDateHeaderUtil.java index d227de531a..67367bb6c1 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/ModDateHeaderUtil.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/ModDateHeaderUtil.java @@ -21,8 +21,8 @@ import java.text.SimpleDateFormat; import java.util.Date; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/ParsedRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/ParsedRequest.java index e14414bf47..1133da3370 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/ParsedRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/ParsedRequest.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.rendering.util; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/PlanetRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/PlanetRequest.java index 11f1fb7f86..09fb4c00fb 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/PlanetRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/PlanetRequest.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.rendering.util; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogCommentRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogCommentRequest.java index 95eea79896..6c0e087200 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogCommentRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogCommentRequest.java @@ -20,7 +20,7 @@ import java.net.URLDecoder; import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogFeedRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogFeedRequest.java index 2c0832f6d7..bd94b83cbd 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogFeedRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogFeedRequest.java @@ -20,7 +20,7 @@ import java.util.List; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java index ee94984aea..1d297c4efa 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.rendering.util; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPageRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPageRequest.java index 4e7dc7cb52..bdf766e09b 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPageRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPageRequest.java @@ -33,7 +33,7 @@ import org.apache.roller.weblogger.util.URLUtilities; import org.apache.roller.weblogger.util.Utilities; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewRequest.java index 5df599d4ea..2c87413235 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewRequest.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.rendering.util; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewResourceRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewResourceRequest.java index d689d2c8fa..686aa286fc 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewResourceRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewResourceRequest.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.rendering.util; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogRequest.java index 37fa6d8067..f42c5ac400 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogRequest.java @@ -19,7 +19,7 @@ package org.apache.roller.weblogger.ui.rendering.util; import java.util.Locale; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogResourceRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogResourceRequest.java index 19107c4c21..9e7fe6ca2c 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogResourceRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogResourceRequest.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.rendering.util; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.util.URLUtilities; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogSearchRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogSearchRequest.java index d1037ee5d6..b518fb14a7 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogSearchRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogSearchRequest.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.rendering.util; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogTrackbackRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogTrackbackRequest.java index 11807c6b5f..c51831c650 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogTrackbackRequest.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogTrackbackRequest.java @@ -20,7 +20,7 @@ import java.net.URLDecoder; import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/DeviceResolver.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/DeviceResolver.java index 60e6010aad..9e47cb2a73 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/DeviceResolver.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/DeviceResolver.java @@ -20,7 +20,7 @@ */ package org.apache.roller.weblogger.ui.rendering.util.mobile; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * Service interface for resolving Devices that originate web requests with the diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/DeviceUtils.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/DeviceUtils.java index dea2f82453..79bb814aa4 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/DeviceUtils.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/DeviceUtils.java @@ -20,7 +20,7 @@ */ package org.apache.roller.weblogger.ui.rendering.util.mobile; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.web.context.request.RequestAttributes; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/LiteDeviceResolver.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/LiteDeviceResolver.java index d02929b94b..f29e59e032 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/LiteDeviceResolver.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/LiteDeviceResolver.java @@ -24,7 +24,7 @@ import java.util.Arrays; import java.util.Enumeration; import java.util.List; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * A "lightweight" device resolver algorithm based on Wordpress's Mobile pack. diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/MobileDeviceRepository.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/MobileDeviceRepository.java index 7c8e2bd819..201755e996 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/MobileDeviceRepository.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/mobile/MobileDeviceRepository.java @@ -20,7 +20,7 @@ */ package org.apache.roller.weblogger.ui.rendering.util.mobile; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * The Class MobileDeviceRepository. diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/velocity/WebappResourceLoader.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/velocity/WebappResourceLoader.java index 0a53e17a22..35b18cfd66 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/velocity/WebappResourceLoader.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/velocity/WebappResourceLoader.java @@ -25,7 +25,7 @@ import java.util.HashMap; import java.util.Map; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java index ef1774f8c4..375d31cfb9 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java @@ -24,7 +24,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -41,15 +40,15 @@ import org.apache.roller.weblogger.util.cache.CacheManager; import org.apache.roller.weblogger.ui.struts2.util.UIAction; import org.apache.roller.weblogger.util.Utilities; +import org.apache.struts2.ActionContext; import org.apache.struts2.convention.annotation.AllowedMethods; -import org.apache.struts2.interceptor.ServletRequestAware; /** * Action for managing global set of comments. */ // TODO: make this work @AllowedMethods({"query","delete","update"}) -public class GlobalCommentManagement extends UIAction implements ServletRequestAware { +public class GlobalCommentManagement extends UIAction { private static Log log = LogFactory.getLog(GlobalCommentManagement.class); @@ -245,6 +244,7 @@ public String delete() { * Update a list of comments. */ public String update() { + httpMethod = ActionContext.getContext().getServletRequest().getMethod(); if (!"POST".equals(httpMethod)) { return ERROR; } @@ -378,9 +378,4 @@ public void setPager(CommentsPager pager) { this.pager = pager; } - @Override - public void setServletRequest(HttpServletRequest req) { - httpMethod = req.getMethod(); - } - } diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java index 194337886c..580a4af809 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java @@ -19,8 +19,6 @@ package org.apache.roller.weblogger.ui.struts2.admin; import java.util.*; -import javax.servlet.http.HttpServletRequest; - import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -39,17 +37,16 @@ import org.apache.roller.weblogger.pojos.Weblog; import org.apache.roller.weblogger.ui.struts2.util.UIAction; import org.apache.roller.weblogger.util.Utilities; +import org.apache.struts2.ActionContext; import org.apache.struts2.dispatcher.HttpParameters; import org.apache.struts2.dispatcher.Parameter; -import org.apache.struts2.interceptor.HttpParametersAware; -import org.apache.struts2.interceptor.ServletRequestAware; /** * Action which handles editing of global configuration. */ // TODO: make this work @AllowedMethods({"execute","save"}) -public class GlobalConfig extends UIAction implements HttpParametersAware, ServletRequestAware { +public class GlobalConfig extends UIAction { private static final Log log = LogFactory.getLog(GlobalConfig.class); @@ -101,6 +98,16 @@ public List requiredGlobalPermissionActions() { */ @Override public void myPrepare() { + // initialize request parameters from ActionContext + this.params = ActionContext.getContext().getParameters(); + + if (log.isDebugEnabled()) { + log.debug("Parameter map:"); + for (Map.Entry entry : params.entrySet()) { + log.debug(entry.getKey() + " = " + Utilities.stringArrayToString(entry.getValue().getMultipleValues(), ",")); + } + } + try { // just grab our properties map and make it available to the action PropertiesManager mgr = WebloggerFactory.getWeblogger().getPropertiesManager(); @@ -152,6 +159,7 @@ public String execute() { * Save global properties. */ public String save() { + httpMethod = ActionContext.getContext().getServletRequest().getMethod(); if (!"POST".equals(httpMethod)) { return ERROR; } @@ -252,19 +260,6 @@ public String save() { } - @Override - public void setParameters(HttpParameters parameters) { - this.params = parameters; - - if (log.isDebugEnabled()) { - log.debug("Parameter map:"); - - for (Map.Entry entry : parameters.entrySet()) { - log.debug(entry.getKey() + " = " + Utilities.stringArrayToString(entry.getValue().getMultipleValues(), ",")); - } - } - } - // convenience method for getting a single parameter as a String private String getParameter(String key) { return this.params.get(key).getValue(); @@ -306,11 +301,6 @@ public void setCommentPlugins(String[] commentPlugins) { this.commentPlugins = commentPlugins.clone(); } - @Override - public void setServletRequest(HttpServletRequest req) { - httpMethod = req.getMethod(); - } - public Collection getWeblogs() { return weblogs; } diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/CommentDataServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/CommentDataServlet.java index 59db62bd7f..2563e1a18a 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/CommentDataServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/CommentDataServlet.java @@ -19,10 +19,10 @@ package org.apache.roller.weblogger.ui.struts2.ajax; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.text.StringEscapeUtils; import org.apache.commons.text.WordUtils; import org.apache.roller.weblogger.business.Weblogger; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/ThemeDataServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/ThemeDataServlet.java index 694c736ddf..236b4d3bf1 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/ThemeDataServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/ThemeDataServlet.java @@ -27,10 +27,10 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * Return theme information (id, name, description, relative path to thumbnail) diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/UserDataServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/UserDataServlet.java index b3739ce408..2472bd1d4c 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/UserDataServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/UserDataServlet.java @@ -21,10 +21,10 @@ import java.io.IOException; import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.roller.weblogger.WebloggerException; import org.apache.roller.weblogger.business.Weblogger; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthAuthorize.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthAuthorize.java deleted file mode 100644 index 93a0359fd7..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthAuthorize.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ -package org.apache.roller.weblogger.ui.struts2.core; - -import javax.servlet.http.HttpServletRequest; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.roller.weblogger.pojos.User; -import org.apache.roller.weblogger.ui.struts2.util.UIAction; -import org.apache.struts2.convention.annotation.AllowedMethods; -import org.apache.struts2.interceptor.ServletRequestAware; -import org.apache.struts2.interceptor.validation.SkipValidation; - - -/** - * Allow user to authorized OAuth access to his/her account. - */ -// TODO: make this work @AllowedMethods({"execute"}) -public class OAuthAuthorize extends UIAction implements ServletRequestAware { - private static Log log = LogFactory.getLog(OAuthAuthorize.class); - private String appDesc = null; - private String token = null; - private String callback = null; - - - public OAuthAuthorize() { - this.pageTitle = "oauthAuthorize.title"; - } - - - // override default security, we do not require an action weblog - @Override - public boolean isWeblogRequired() { - return false; - } - - - @SkipValidation - @Override - public String execute() { - try { - User ud = getAuthenticatedUser(); - } catch (Exception ex) { - log.error("ERROR fetching user information", ex); - } - return SUCCESS; - } - - /** - * @return the appDesc - */ - public String getAppDesc() { - return appDesc; - } - - /** - * @return the token - */ - public String getToken() { - return token; - } - - /** - * @return the callback - */ - public String getCallback() { - return callback; - } - - /** - * @return the userName - */ - public String getUserName() { - return getAuthenticatedUser().getUserName(); - } - - @Override - public void setServletRequest(HttpServletRequest request) { - this.appDesc = (String)request.getAttribute("CONS_DESC"); - this.token = (String)request.getAttribute("TOKEN"); - this.callback = (String)request.getAttribute("CALLBACK"); - if (this.getCallback() == null) { - this.callback = ""; - } - } -} diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java deleted file mode 100644 index 52546b647b..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. The ASF licenses this file to You - * under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. For additional information regarding - * copyright in this work, please see the NOTICE file in the top level - * directory of this distribution. - */ -package org.apache.roller.weblogger.ui.struts2.core; - -import net.oauth.OAuthConsumer; -import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.roller.weblogger.business.OAuthManager; -import org.apache.roller.weblogger.business.WebloggerFactory; -import org.apache.roller.weblogger.config.WebloggerRuntimeConfig; -import org.apache.roller.weblogger.pojos.User; -import org.apache.roller.weblogger.ui.struts2.util.UIAction; -import org.apache.struts2.convention.annotation.AllowedMethods; -import org.apache.struts2.interceptor.validation.SkipValidation; - - -/** - * Allows user to view his/her OAuth consumer key and secret. - */ -// TODO: make this work @AllowedMethods({"execute"}) -public class OAuthKeys extends UIAction { - private static Log log = LogFactory.getLog(OAuthKeys.class); - private OAuthConsumer userConsumer; - private OAuthConsumer siteWideConsumer; - - public OAuthKeys() { - this.pageTitle = "oauthKeys.title"; - } - - - // override default security, we do not require an action weblog - @Override - public boolean isWeblogRequired() { - return false; - } - - - @SkipValidation - @Override - public String execute() { - boolean flush = false; - - try { - User ud = getAuthenticatedUser(); - OAuthManager omgr = WebloggerFactory.getWeblogger().getOAuthManager(); - userConsumer = omgr.getConsumerByUsername(ud.getUserName()); - if (userConsumer == null) { - String consumerKey = DigestUtils.md5Hex(ud.getUserName()); - userConsumer = omgr.addConsumer(ud.getUserName(), consumerKey); - flush = true; - } - - if (isUserIsAdmin()) { - siteWideConsumer = omgr.getConsumer(); - if (siteWideConsumer == null) { - String consumerKey = DigestUtils.md5Hex( - WebloggerRuntimeConfig.getAbsoluteContextURL()); - siteWideConsumer = omgr.addConsumer(consumerKey); - flush = true; - } - } - - if (flush) { - WebloggerFactory.getWeblogger().flush(); - } - - } catch (Exception ex) { - log.error("ERROR creating or retrieving your OAuth information", ex); - } - - return SUCCESS; - } - - /** - * @return the user's consumer - */ - public OAuthConsumer getUserConsumer() { - return userConsumer; - } - - /** - * @return the site's consumer - */ - public OAuthConsumer getSiteWideConsumer() { - return siteWideConsumer; - } - - public String getRequestTokenURL() { - return WebloggerFactory.getWeblogger().getUrlStrategy().getOAuthRequestTokenURL(); - } - - public String getAuthorizationURL() { - return WebloggerFactory.getWeblogger().getUrlStrategy().getOAuthAuthorizationURL(); - } - - public String getAccessTokenURL() { - return WebloggerFactory.getWeblogger().getUrlStrategy().getOAuthAccessTokenURL(); - } - - -} diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java index 1d8f6628ae..5ddf04337e 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java @@ -20,7 +20,7 @@ import java.util.TimeZone; import java.util.UUID; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.CharSetUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; @@ -37,8 +37,8 @@ import org.apache.roller.weblogger.ui.core.security.CustomUserRegistry; import org.apache.roller.weblogger.ui.struts2.util.UIAction; import org.apache.roller.weblogger.util.MailUtil; +import org.apache.struts2.ActionContext; import org.apache.struts2.convention.annotation.AllowedMethods; -import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.validation.SkipValidation; @@ -51,7 +51,7 @@ * @see org.apache.roller.weblogger.ui.struts2.core.Login */ // TODO: make this work @AllowedMethods({"execute","save","activate"}) -public class Register extends UIAction implements ServletRequestAware { +public class Register extends UIAction { private static Log log = LogFactory.getLog(Register.class); private static final String DISABLED_RETURN_CODE = "disabled"; @@ -434,13 +434,11 @@ private void checkOpenID() { public HttpServletRequest getServletRequest() { + if (servletRequest == null) { + servletRequest = ActionContext.getContext().getServletRequest(); + } return servletRequest; } - - @Override - public void setServletRequest(HttpServletRequest servletRequest) { - this.servletRequest = servletRequest; - } public ProfileBean getBean() { return bean; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java index 01aca355bc..9ae5900a5d 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java @@ -24,6 +24,7 @@ import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.util.RollerConstants; @@ -31,31 +32,27 @@ import org.apache.roller.weblogger.business.WebloggerFactory; import org.apache.roller.weblogger.ui.struts2.util.UIAction; import org.apache.roller.weblogger.util.cache.CacheManager; +import org.apache.struts2.action.UploadedFilesAware; import org.apache.struts2.convention.annotation.AllowedMethods; +import org.apache.struts2.dispatcher.multipart.UploadedFile; /** * Import opml file into bookmarks folder. */ // TODO: make this work @AllowedMethods({"execute","save"}) -public final class BookmarksImport extends UIAction { - +public final class BookmarksImport extends UIAction implements UploadedFilesAware { + private static Log log = LogFactory.getLog(BookmarksImport.class); - + // only write files out that are below this threshold private static final long WRITE_THRESHOLD_IN_MB = 4; private static final long WRITE_THRESHOLD = WRITE_THRESHOLD_IN_MB * 1024000; - // uploaded opml file - private File opmlFile = null; - - // content type of uploaded file - private String opmlFileContentType = null; - - // file name of uploaded file - private String opmlFileFileName = null; - - + // uploaded opml file, injected by the actionFileUpload interceptor + private UploadedFile opmlFile = null; + + public BookmarksImport() { this.actionName = "bookmarksImport"; this.desiredMenu = "editor"; @@ -70,20 +67,25 @@ public String execute() { return INPUT; } + @Override + public void withUploadedFiles(List uploadedFiles) { + this.opmlFile = uploadedFiles.isEmpty() ? null : uploadedFiles.get(0); + } + /** * Save imported bookmarks. */ public String save() { - + BookmarkManager bm = WebloggerFactory.getWeblogger().getBookmarkManager(); - + InputStream stream = null; - if(getOpmlFile() != null && getOpmlFile().exists()) { + if (opmlFile != null && opmlFile.getContent() instanceof File file && file.exists()) { try { //only write files out that are less than 4MB - if (getOpmlFile().length() < WRITE_THRESHOLD) { + if (file.length() < WRITE_THRESHOLD) { - stream = new FileInputStream(getOpmlFile()); + stream = new FileInputStream(file); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[RollerConstants.EIGHT_KB_IN_BYTES]; @@ -109,14 +111,14 @@ public String save() { addMessage("bookmarksImport.imported", folderName); // destroy the temporary file created - getOpmlFile().delete(); + opmlFile.delete(); return SUCCESS; } else { String data = "The file is greater than " + WRITE_THRESHOLD_IN_MB +" MB, and has not been written to stream." - +" File Size: " + getOpmlFile().length() + " bytes. " + +" File Size: " + file.length() + " bytes. " +" This is a limitation of this particular " +" web application"; addError("bookmarksImport.error", data); @@ -136,30 +138,5 @@ public String save() { } return INPUT; } - - - public File getOpmlFile() { - return opmlFile; - } - - public void setOpmlFile(File opmlFile) { - this.opmlFile = opmlFile; - } - - public String getOpmlFileContentType() { - return opmlFileContentType; - } - - public void setOpmlFileContentType(String opmlFileContentType) { - this.opmlFileContentType = opmlFileContentType; - } - - public String getOpmlFileFileName() { - return opmlFileFileName; - } - - public void setOpmlFileFileName(String opmlFileFileName) { - this.opmlFileFileName = opmlFileFileName; - } - + } diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java index 94de22d1fc..d06c2444ef 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java @@ -27,18 +27,18 @@ import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder; import org.apache.roller.weblogger.ui.struts2.util.UIAction; import org.apache.roller.weblogger.util.cache.CacheManager; -import org.apache.struts2.interceptor.ServletResponseAware; import org.apache.struts2.convention.annotation.AllowedMethods; import org.apache.struts2.interceptor.validation.SkipValidation; +import org.apache.struts2.ActionContext; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; /** * Edit a new or existing folder. */ // TODO: make this work @AllowedMethods({"execute","save"}) -public class FolderEdit extends UIAction implements ServletResponseAware { +public class FolderEdit extends UIAction { private static final Log log = LogFactory.getLog(FolderEdit.class); @@ -51,8 +51,6 @@ public class FolderEdit extends UIAction implements ServletResponseAware { // the folder we are adding or editing private WeblogBookmarkFolder folder = null; - private HttpServletResponse httpServletResponse; - public FolderEdit() { this.desiredMenu = "editor"; @@ -81,9 +79,8 @@ public void myPrepare() { } } - @Override - public void setServletResponse(HttpServletResponse httpServletResponse) { - this.httpServletResponse = httpServletResponse; + private HttpServletResponse getServletResponse() { + return ActionContext.getContext().getServletResponse(); } /** @@ -130,7 +127,7 @@ public String save() { // HTTP response splitting defense String sanetizedFolderID = folderId.replace("\n", "").replace("\r", ""); - httpServletResponse.addHeader("folderId", sanetizedFolderID); + getServletResponse().addHeader("folderId", sanetizedFolderID); return SUCCESS; diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java index 881dad7549..74cf7feba5 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java @@ -36,6 +36,8 @@ import org.apache.roller.weblogger.util.RollerMessages; import org.apache.roller.weblogger.util.RollerMessages.RollerMessage; import org.apache.roller.weblogger.util.Utilities; +import org.apache.struts2.action.UploadedFilesAware; +import org.apache.struts2.dispatcher.multipart.UploadedFile; import org.apache.struts2.interceptor.validation.SkipValidation; /** @@ -43,20 +45,16 @@ */ @SuppressWarnings("serial") // TODO: make this work @AllowedMethods({"execute","save"}) -public class MediaFileAdd extends MediaFileBase { +public class MediaFileAdd extends MediaFileBase implements UploadedFilesAware { private static final Log log = LogFactory.getLog(MediaFileAdd.class); private MediaFileBean bean = new MediaFileBean(); private MediaFileDirectory directory; - // an array of files uploaded by the user, if applicable - private File[] uploadedFiles = null; - - // an array of content types for upload files - private String[] uploadedFilesContentType = null; - - // an array of filenames for uploaded files - private String[] uploadedFilesFileName = null; + // files uploaded by the user, injected by the actionFileUpload interceptor; + // deliberately not exposed via a getter/setter pair so the params + // interceptor can't collide with the form field of the same name + private List uploadedFiles = null; private List newImages = new ArrayList<>(); @@ -112,7 +110,7 @@ public void myPrepare() { /** * Show form for adding a new media file. - * + * * @return String The result of the action. */ @SkipValidation @@ -121,6 +119,11 @@ public String execute() { return INPUT; } + @Override + public void withUploadedFiles(List uploadedFiles) { + this.uploadedFiles = uploadedFiles; + } + /** * Save a media file. * @@ -136,15 +139,16 @@ public String save() { RollerMessages errors = new RollerMessages(); List uploaded = new ArrayList<>(); - File[] uploads = getUploadedFiles(); - if (uploads != null && uploads.length > 0) { + if (uploadedFiles != null && !uploadedFiles.isEmpty()) { // loop over uploaded files and try saving them - for (int i = 0; i < uploads.length; i++) { + for (UploadedFile upload : uploadedFiles) { // skip null files - if (uploads[i] == null || !uploads[i].exists()) { + if (upload == null + || !(upload.getContent() instanceof File uploadFile) + || !uploadFile.exists()) { continue; } @@ -152,7 +156,7 @@ public String save() { MediaFile mediaFile = new MediaFile(); bean.copyTo(mediaFile); - String fileName = getUploadedFilesFileName()[i]; + String fileName = upload.getOriginalName(); int terminated = fileName.indexOf('\000'); if (terminated != -1) { // disallow sneaky null terminated strings @@ -170,18 +174,15 @@ public String save() { mediaFile.setName(fileName); mediaFile.setDirectory(getDirectory()); mediaFile.setWeblog(getActionWeblog()); - mediaFile.setLength(this.uploadedFiles[i].length()); - mediaFile.setInputStream(new FileInputStream( - this.uploadedFiles[i])); - mediaFile - .setContentType(this.uploadedFilesContentType[i]); + mediaFile.setLength(uploadFile.length()); + mediaFile.setInputStream(new FileInputStream(uploadFile)); // in some cases Struts2 is not able to guess the content // type correctly and assigns the default, which is // octet-stream. So in cases where we see octet-stream // we double check and see if we can guess the content // type via the Java MIME type facilities. - mediaFile.setContentType(this.uploadedFilesContentType[i]); + mediaFile.setContentType(upload.getContentType()); if (mediaFile.getContentType() == null || mediaFile.getContentType().endsWith("/octet-stream")) { @@ -262,30 +263,6 @@ public void setDirectory(MediaFileDirectory directory) { this.directory = directory; } - public File[] getUploadedFiles() { - return uploadedFiles; - } - - public void setUploadedFiles(File[] uploadedFiles) { - this.uploadedFiles = uploadedFiles; - } - - public String[] getUploadedFilesContentType() { - return uploadedFilesContentType; - } - - public void setUploadedFilesContentType(String[] uploadedFilesContentType) { - this.uploadedFilesContentType = uploadedFilesContentType; - } - - public String[] getUploadedFilesFileName() { - return uploadedFilesFileName; - } - - public void setUploadedFilesFileName(String[] uploadedFilesFileName) { - this.uploadedFilesFileName = uploadedFilesFileName; - } - /** * @return the newImages */ diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java index 76ff2dbb7c..37c876e7f0 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java @@ -29,28 +29,27 @@ import org.apache.roller.weblogger.business.WebloggerFactory; import org.apache.roller.weblogger.pojos.MediaFile; import org.apache.roller.weblogger.pojos.MediaFileDirectory; +import org.apache.struts2.action.UploadedFilesAware; import org.apache.struts2.convention.annotation.AllowedMethods; +import org.apache.struts2.dispatcher.multipart.UploadedFile; import org.apache.struts2.interceptor.validation.SkipValidation; +import java.util.List; + /** * Edits metadata for a media file. */ @SuppressWarnings("serial") // TODO: make this work @AllowedMethods({"execute","save"}) -public class MediaFileEdit extends MediaFileBase { +public class MediaFileEdit extends MediaFileBase implements UploadedFilesAware { private static Log log = LogFactory.getLog(MediaFileEdit.class); private MediaFileBean bean = new MediaFileBean(); private MediaFileDirectory directory; - // file uploaded by the user, if applicable - private File uploadedFile = null; - - // content types for upload file - private String uploadedFileContentType = null; - - // filename for uploaded file - private String uploadedFileName = null; + // replacement file uploaded by the user, if applicable, injected + // by the actionFileUpload interceptor + private UploadedFile uploadedFile = null; public MediaFileEdit() { this.actionName = "mediaFileEdit"; @@ -75,6 +74,11 @@ public void myPrepare() { } + @Override + public void withUploadedFiles(List uploadedFiles) { + this.uploadedFile = uploadedFiles.isEmpty() ? null : uploadedFiles.get(0); + } + /** * Validates media file metadata to be updated. */ @@ -122,11 +126,12 @@ public String save() { MediaFile mediaFile = manager.getMediaFile(getMediaFileId()); bean.copyTo(mediaFile); - if (uploadedFile != null) { - mediaFile.setLength(this.uploadedFile.length()); - mediaFile.setContentType(this.uploadedFileContentType); + if (uploadedFile != null + && uploadedFile.getContent() instanceof File uploadFile) { + mediaFile.setLength(uploadFile.length()); + mediaFile.setContentType(uploadedFile.getContentType()); manager.updateMediaFile(getActionWeblog(), mediaFile, - new FileInputStream(this.uploadedFile)); + new FileInputStream(uploadFile)); } else { manager.updateMediaFile(getActionWeblog(), mediaFile); } @@ -173,48 +178,4 @@ public void setDirectory(MediaFileDirectory directory) { this.directory = directory; } - /** - * @return the uploadedFile - */ - public File getUploadedFile() { - return uploadedFile; - } - - /** - * @param uploadedFile - * the uploadedFile to set - */ - public void setUploadedFile(File uploadedFile) { - this.uploadedFile = uploadedFile; - } - - /** - * @return the uploadedFileContentType - */ - public String getUploadedFileContentType() { - return uploadedFileContentType; - } - - /** - * @param uploadedFileContentType - * the uploadedFileContentType to set - */ - public void setUploadedFileContentType(String uploadedFileContentType) { - this.uploadedFileContentType = uploadedFileContentType; - } - - /** - * @return the uploadedFileName - */ - public String getUploadedFileName() { - return uploadedFileName; - } - - /** - * @param uploadedFileName - * the uploadedFileName to set - */ - public void setUploadedFileName(String uploadedFileName) { - this.uploadedFileName = uploadedFileName; - } } diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java index bda8961946..4fa3ea1ae0 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; @@ -30,9 +29,8 @@ import org.apache.roller.weblogger.pojos.WeblogPermission; import org.apache.roller.weblogger.ui.struts2.util.UIAction; import org.apache.roller.weblogger.util.Utilities; +import org.apache.struts2.ActionContext; import org.apache.struts2.dispatcher.HttpParameters; -import org.apache.struts2.dispatcher.Parameter; -import org.apache.struts2.interceptor.HttpParametersAware; /** @@ -42,7 +40,7 @@ * website.permissions collection when a permission is deleted. */ // TODO: make this work @AllowedMethods({"execute","save"}) -public class Members extends UIAction implements HttpParametersAware { +public class Members extends UIAction { private static final Log log = LogFactory.getLog(Members.class); @@ -52,12 +50,17 @@ public class Members extends UIAction implements HttpParametersAware { public Members() { log.debug("Instantiating members action"); - + this.actionName = "members"; this.desiredMenu = "editor"; this.pageTitle = "memberPermissions.title"; } - + + @Override + public void myPrepare() { + this.parameters = ActionContext.getContext().getParameters(); + } + @Override public String execute() { log.debug("Showing weblog members page"); @@ -159,14 +162,9 @@ public String getParameter(String key) { } - public Map getParameters() { + public HttpParameters getParameters() { return parameters; } - - @Override - public void setParameters(HttpParameters parameters) { - this.parameters = parameters; - } public List getWeblogPermissions() { try { diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java index b5be30dcba..09d3ed4961 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java @@ -18,7 +18,9 @@ package org.apache.roller.weblogger.ui.struts2.util; -import com.opensymphony.xwork2.ActionSupport; +import org.apache.struts2.ActionContext; +import org.apache.struts2.ActionSupport; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.text.StringEscapeUtils; import org.apache.roller.weblogger.business.UserManager; import org.apache.roller.weblogger.business.WebloggerFactory; @@ -30,8 +32,6 @@ import org.apache.roller.weblogger.pojos.WeblogPermission; import org.apache.roller.weblogger.ui.core.util.menu.Menu; import org.apache.roller.weblogger.ui.core.util.menu.MenuHelper; -import org.apache.struts2.interceptor.RequestAware; - import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -39,7 +39,6 @@ import java.util.Collections; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -53,7 +52,7 @@ * getText(key) on the param passed into setError() and setSuccess(). */ public abstract class UIAction extends ActionSupport - implements UIActionPreparable, UISecurityEnforced, RequestAware { + implements UIActionPreparable, UISecurityEnforced { // a result that sends the user to an access denied warning public static final String DENIED = "access-denied"; @@ -88,13 +87,14 @@ public abstract class UIAction extends ActionSupport public void myPrepare() { // no-op } - - @Override - public void setRequest(Map map) { - this.salt = (String) map.get("salt"); - } public String getSalt() { + if (salt == null) { + HttpServletRequest request = ActionContext.getContext().getServletRequest(); + if (request != null) { + salt = (String) request.getAttribute("salt"); + } + } return salt; } diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIActionInterceptor.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIActionInterceptor.java index 08b65f4bbc..d3d1442998 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIActionInterceptor.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIActionInterceptor.java @@ -18,7 +18,7 @@ package org.apache.roller.weblogger.ui.struts2.util; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -28,9 +28,9 @@ import org.apache.roller.weblogger.ui.core.RollerSession; import org.apache.struts2.StrutsStatics; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; +import org.apache.struts2.ActionContext; +import org.apache.struts2.ActionInvocation; +import org.apache.struts2.interceptor.MethodFilterInterceptor; /** * A struts2 interceptor for configuring specifics of the weblogger ui. diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIActionPrepareInterceptor.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIActionPrepareInterceptor.java index 7e558dd0a9..862f0a3e77 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIActionPrepareInterceptor.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIActionPrepareInterceptor.java @@ -20,8 +20,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; +import org.apache.struts2.ActionInvocation; +import org.apache.struts2.interceptor.MethodFilterInterceptor; /** * A struts2 interceptor for doing custom prepare logic. diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UISecurityInterceptor.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UISecurityInterceptor.java index 8e97899b82..64fbcb8804 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UISecurityInterceptor.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UISecurityInterceptor.java @@ -27,8 +27,8 @@ import org.apache.roller.weblogger.pojos.Weblog; import org.apache.roller.weblogger.pojos.WeblogPermission; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; +import org.apache.struts2.ActionInvocation; +import org.apache.struts2.interceptor.MethodFilterInterceptor; /** * A struts2 interceptor for configuring specifics of the weblogger ui. diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/tags/StringTagSupport.java b/app/src/main/java/org/apache/roller/weblogger/ui/tags/StringTagSupport.java index 0286801c7d..86297d4c80 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/tags/StringTagSupport.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/tags/StringTagSupport.java @@ -18,9 +18,9 @@ import java.io.IOException; import java.io.StringWriter; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.BodyTagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspWriter; +import jakarta.servlet.jsp.tagext.BodyTagSupport; /** * Abstract support class for the String Taglib. diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/tags/TruncateNicelyTag.java b/app/src/main/java/org/apache/roller/weblogger/ui/tags/TruncateNicelyTag.java index 33ab6d9d9a..e9381249d7 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/tags/TruncateNicelyTag.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/tags/TruncateNicelyTag.java @@ -15,7 +15,7 @@ */ package org.apache.roller.weblogger.ui.tags; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.apache.commons.lang3.math.NumberUtils; /** diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/tags/WordWrapTag.java b/app/src/main/java/org/apache/roller/weblogger/ui/tags/WordWrapTag.java index 293ce90da0..f7f81ebc96 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/tags/WordWrapTag.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/tags/WordWrapTag.java @@ -15,7 +15,7 @@ */ package org.apache.roller.weblogger.ui.tags; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; diff --git a/app/src/main/java/org/apache/roller/weblogger/util/I18nMessages.java b/app/src/main/java/org/apache/roller/weblogger/util/I18nMessages.java index c6de4c3538..d1582d1c4c 100644 --- a/app/src/main/java/org/apache/roller/weblogger/util/I18nMessages.java +++ b/app/src/main/java/org/apache/roller/weblogger/util/I18nMessages.java @@ -192,7 +192,7 @@ public static void reloadBundle(Locale key) { /** * Clear tomcat cache. * - * @see com.opensymphony.xwork2.util.LocalizedTextUtil + * @see org.apache.struts2.util.LocalizedTextUtil */ private static void clearTomcatCache() { diff --git a/app/src/main/java/org/apache/roller/weblogger/util/MailUtil.java b/app/src/main/java/org/apache/roller/weblogger/util/MailUtil.java index eeedc9e322..6c519bd46e 100644 --- a/app/src/main/java/org/apache/roller/weblogger/util/MailUtil.java +++ b/app/src/main/java/org/apache/roller/weblogger/util/MailUtil.java @@ -27,14 +27,14 @@ import java.util.ResourceBundle; import java.util.Set; import java.util.TreeSet; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.SendFailedException; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.Address; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.SendFailedException; +import jakarta.mail.Session; +import jakarta.mail.Transport; +import jakarta.mail.Address; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMessage; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/app/src/main/java/org/apache/roller/weblogger/util/Utilities.java b/app/src/main/java/org/apache/roller/weblogger/util/Utilities.java index e35efb030b..1a59ff824a 100644 --- a/app/src/main/java/org/apache/roller/weblogger/util/Utilities.java +++ b/app/src/main/java/org/apache/roller/weblogger/util/Utilities.java @@ -19,10 +19,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.activation.FileTypeMap; -import javax.activation.MimetypesFileTypeMap; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; +import jakarta.activation.FileTypeMap; +import jakarta.activation.MimetypesFileTypeMap; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; import org.apache.commons.codec.binary.Base64; import org.apache.commons.text.StringEscapeUtils; diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomHandler.java b/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomHandler.java index 55e1c576ef..7385a72a8e 100644 --- a/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomHandler.java +++ b/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomHandler.java @@ -19,7 +19,7 @@ import com.rometools.propono.atom.common.Categories; import com.rometools.propono.atom.server.AtomRequest; import java.util.StringTokenizer; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.codec.binary.Base64; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -38,13 +38,9 @@ import com.rometools.rome.feed.atom.Entry; import com.rometools.rome.feed.atom.Feed; import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletResponse; -import net.oauth.OAuthAccessor; -import net.oauth.OAuthMessage; -import net.oauth.server.OAuthServlet; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.roller.weblogger.WebloggerException; -import org.apache.roller.weblogger.business.OAuthManager; import org.apache.roller.weblogger.config.WebloggerConfig; import org.apache.roller.weblogger.config.WebloggerRuntimeConfig; import org.apache.roller.weblogger.pojos.WeblogPermission; @@ -118,15 +114,21 @@ public RollerAtomHandler(HttpServletRequest request, HttpServletResponse respons roller = WebloggerFactory.getWeblogger(); String userName; - if ("oauth".equals(WebloggerRuntimeConfig.getProperty("webservices.atomPubAuth"))) { - userName = authenticationOAUTH(request, response); - - } else if ("wsse".equals(WebloggerRuntimeConfig.getProperty("webservices.atomPubAuth"))) { + String authScheme = WebloggerRuntimeConfig.getProperty("webservices.atomPubAuth"); + if ("wsse".equals(authScheme)) { userName = authenticateWSSE(request); - } else { - // default to basic + } else if (authScheme == null || authScheme.isBlank() || "basic".equals(authScheme)) { userName = authenticateBASIC(request); + + } else { + // an upgraded site may still have "oauth" stored in the runtime + // config; refuse authentication instead of silently accepting a + // scheme the administrator did not choose + log.error("Unsupported webservices.atomPubAuth value '" + authScheme + + "' (OAuth 1.0a support was removed); set it to 'basic' or 'wsse'." + + " Refusing AtomPub authentication until it is corrected."); + userName = null; } if (userName != null) { @@ -478,7 +480,7 @@ public String authenticateBASIC(HttpServletRequest request) { User inUser = roller.getUserManager().getUserByUserName(userID); if (inUser.getEnabled()) { String password = userPass.substring(p+1); - valid = RollerContext.getPasswordEncoder().matches(password, user.getPassword()); + valid = RollerContext.getPasswordEncoder().matches(password, inUser.getPassword()); } } } @@ -494,29 +496,6 @@ public String authenticateBASIC(HttpServletRequest request) { } - private String authenticationOAUTH( - HttpServletRequest request, HttpServletResponse response) { - try { - OAuthManager omgr = WebloggerFactory.getWeblogger().getOAuthManager(); - OAuthMessage requestMessage = OAuthServlet.getMessage(request, null); - OAuthAccessor accessor = omgr.getAccessor(requestMessage); - omgr.getValidator().validateMessage(requestMessage, accessor); - return (String)accessor.consumer.getProperty("userId"); - - } catch (Exception ex) { - log.debug("ERROR authenticating user", ex); - String realm = (request.isSecure())?"https://":"http://"; - realm += request.getLocalName(); - try { - OAuthServlet.handleException(response, ex, realm, true); - } catch (Exception ioe) { - log.debug("ERROR writing error response", ioe); - } - } - return null; - } - - public static void oneSecondThrottle() { // Throttle one entry per second per weblog because time- // stamp in MySQL and other DBs has only 1 sec resolution diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomHandlerFactory.java b/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomHandlerFactory.java deleted file mode 100644 index 4b3e1f3611..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomHandlerFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. The ASF licenses this file to You -* under the Apache License, Version 2.0 (the "License"); you may not -* use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. For additional information regarding -* copyright in this work, please see the NOTICE file in the top level -* directory of this distribution. -*/ - -package org.apache.roller.weblogger.webservices.atomprotocol; - -import com.rometools.propono.atom.server.AtomHandlerFactory; -import com.rometools.propono.atom.server.AtomHandler; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Extends {@link com.rometools.propono.atom.server.AtomHandlerFactory} to create and return - * {@link com.rometools.propono.atom.server.impl.FileBasedAtomHandler}. - */ -public class RollerAtomHandlerFactory extends AtomHandlerFactory { - - /** - * Create new AtomHandler. - */ - @Override - public AtomHandler newAtomHandler( - HttpServletRequest req, HttpServletResponse res) { - return new RollerAtomHandler(req, res); - } -} - diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomRequestImpl.java b/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomRequestImpl.java new file mode 100644 index 0000000000..643e4ce624 --- /dev/null +++ b/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomRequestImpl.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. The ASF licenses this file to You + * under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + * Derived from com.rometools.propono.atom.server.AtomRequestImpl. + * Forked to use jakarta.servlet instead of javax.servlet. + */ +package org.apache.roller.weblogger.webservices.atomprotocol; + +import java.io.IOException; +import java.io.InputStream; +import java.security.Principal; +import java.util.Enumeration; +import java.util.Map; + +import jakarta.servlet.http.HttpServletRequest; + +import com.rometools.propono.atom.server.AtomRequest; + +public class RollerAtomRequestImpl implements AtomRequest { + + private final HttpServletRequest wrapped; + + public RollerAtomRequestImpl(HttpServletRequest request) { + this.wrapped = request; + } + + @Override + public String getPathInfo() { + // the handler splits this without a null check, and a request to the + // exact servlet mapping has no path info + return wrapped.getPathInfo() != null ? wrapped.getPathInfo() : ""; + } + + @Override + public String getQueryString() { + return wrapped.getQueryString(); + } + + @Override + public String getRemoteUser() { + return wrapped.getRemoteUser(); + } + + @Override + public boolean isUserInRole(String role) { + return wrapped.isUserInRole(role); + } + + @Override + public Principal getUserPrincipal() { + return wrapped.getUserPrincipal(); + } + + @Override + public String getRequestURI() { + return wrapped.getRequestURI(); + } + + @Override + public StringBuffer getRequestURL() { + return wrapped.getRequestURL(); + } + + @Override + public int getContentLength() { + return wrapped.getContentLength(); + } + + @Override + public String getContentType() { + return wrapped.getContentType(); + } + + @Override + public String getParameter(String name) { + return wrapped.getParameter(name); + } + + @Override + public Enumeration getParameterNames() { + return wrapped.getParameterNames(); + } + + @Override + public String[] getParameterValues(String name) { + return wrapped.getParameterValues(name); + } + + @Override + @SuppressWarnings("unchecked") + public Map getParameterMap() { + return (Map) wrapped.getParameterMap(); + } + + @Override + public InputStream getInputStream() throws IOException { + return wrapped.getInputStream(); + } + + @Override + public long getDateHeader(String name) { + return wrapped.getDateHeader(name); + } + + @Override + public String getHeader(String name) { + return wrapped.getHeader(name); + } + + @Override + public Enumeration getHeaders(String name) { + return wrapped.getHeaders(name); + } + + @Override + public Enumeration getHeaderNames() { + return wrapped.getHeaderNames(); + } + + @Override + public int getIntHeader(String name) { + return wrapped.getIntHeader(name); + } +} diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomServlet.java b/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomServlet.java new file mode 100644 index 0000000000..e30033ed24 --- /dev/null +++ b/app/src/main/java/org/apache/roller/weblogger/webservices/atomprotocol/RollerAtomServlet.java @@ -0,0 +1,368 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. The ASF licenses this file to You + * under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. For additional information regarding + * copyright in this work, please see the NOTICE file in the top level + * directory of this distribution. + */ +package org.apache.roller.weblogger.webservices.atomprotocol; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Writer; +import java.util.Collections; +import java.util.Locale; + +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import org.jdom2.Document; +import org.jdom2.output.Format; +import org.jdom2.output.XMLOutputter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.rometools.propono.atom.common.AtomService; +import com.rometools.propono.atom.common.Categories; +import com.rometools.propono.atom.server.AtomException; +import com.rometools.propono.atom.server.AtomHandler; +import com.rometools.propono.atom.server.AtomMediaResource; +import com.rometools.propono.atom.server.AtomRequest; +import com.rometools.rome.feed.atom.Content; +import com.rometools.rome.feed.atom.Entry; +import com.rometools.rome.feed.atom.Feed; +import com.rometools.rome.feed.atom.Link; +import com.rometools.rome.io.WireFeedOutput; +import com.rometools.rome.io.impl.Atom10Generator; +import com.rometools.rome.io.impl.Atom10Parser; +import org.apache.roller.weblogger.util.Utilities; + +/** + * Forked from rome-propono's AtomServlet to remove the dependency on propono's + * servlet class, which has no Jakarta-compatible release. This servlet directly + * creates a {@link RollerAtomHandler} instead of going through propono's + * AtomHandlerFactory/FactoryFinder lookup. + * + *

Handles Atom Publishing Protocol requests by parsing incoming XML into + * ROME Atom {@link Entry} objects, passing those to the handler, and + * serializing entries and feeds returned by the handler to the response.

+ */ +public class RollerAtomServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + /** Feed type supported by this servlet */ + public static final String FEED_TYPE = "atom_1.0"; + + private static String contextDirPath = null; + + private static final Logger LOG = LoggerFactory.getLogger(RollerAtomServlet.class); + + static { + Atom10Parser.setResolveURIs(true); + } + + /** + * Create an Atom request handler directly, bypassing propono's factory lookup. + */ + private AtomHandler createAtomRequestHandler(final HttpServletRequest request, final HttpServletResponse response) { + return new RollerAtomHandler(request, response); + } + + /** + * Handles an Atom GET by calling handler and writing results to response. + */ + @Override + protected void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { + LOG.debug("Entering"); + final AtomHandler handler = createAtomRequestHandler(req, res); + final String userName = handler.getAuthenticatedUsername(); + if (userName != null) { + final AtomRequest areq = new RollerAtomRequestImpl(req); + try { + if (handler.isAtomServiceURI(areq)) { + // return an Atom Service document + final AtomService service = handler.getAtomService(areq); + final Document doc = service.serviceToDocument(); + res.setContentType("application/atomsvc+xml; charset=utf-8"); + final Writer writer = res.getWriter(); + final XMLOutputter outputter = new XMLOutputter(); + outputter.setFormat(Format.getPrettyFormat()); + outputter.output(doc, writer); + writer.close(); + res.setStatus(HttpServletResponse.SC_OK); + } else if (handler.isCategoriesURI(areq)) { + final Categories cats = handler.getCategories(areq); + res.setContentType("application/xml"); + final Writer writer = res.getWriter(); + final Document catsDoc = new Document(); + catsDoc.setRootElement(cats.categoriesToElement()); + final XMLOutputter outputter = new XMLOutputter(); + outputter.output(catsDoc, writer); + writer.close(); + res.setStatus(HttpServletResponse.SC_OK); + } else if (handler.isCollectionURI(areq)) { + // return a collection + final Feed col = handler.getCollection(areq); + col.setFeedType(FEED_TYPE); + final WireFeedOutput wireFeedOutput = new WireFeedOutput(); + final Document feedDoc = wireFeedOutput.outputJDom(col); + res.setContentType("application/atom+xml; charset=utf-8"); + final Writer writer = res.getWriter(); + final XMLOutputter outputter = new XMLOutputter(); + outputter.setFormat(Format.getPrettyFormat()); + outputter.output(feedDoc, writer); + writer.close(); + res.setStatus(HttpServletResponse.SC_OK); + } else if (handler.isEntryURI(areq)) { + // return an entry + final Entry entry = handler.getEntry(areq); + if (entry != null) { + res.setContentType("application/atom+xml; type=entry; charset=utf-8"); + final Writer writer = res.getWriter(); + Atom10Generator.serializeEntry(entry, writer); + writer.close(); + } else { + res.setStatus(HttpServletResponse.SC_NOT_FOUND); + } + } else if (handler.isMediaEditURI(areq)) { + final AtomMediaResource entry = handler.getMediaResource(areq); + res.setContentType(entry.getContentType()); + res.setContentLength((int) entry.getContentLength()); + Utilities.copyInputToOutput(entry.getInputStream(), res.getOutputStream()); + res.getOutputStream().flush(); + res.getOutputStream().close(); + } else { + res.setStatus(HttpServletResponse.SC_NOT_FOUND); + } + } catch (final AtomException ae) { + res.sendError(ae.getStatus(), ae.getMessage()); + LOG.debug("An error occurred while processing GET", ae); + } catch (final Exception e) { + res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); + LOG.debug("An error occurred while processing GET", e); + } + } else { + res.setHeader("WWW-Authenticate", "BASIC realm=\"AtomPub\""); + res.sendError(HttpServletResponse.SC_UNAUTHORIZED); + } + LOG.debug("Exiting"); + } + + /** + * Handles an Atom POST by calling handler to identify URI, reading/parsing + * data, calling handler and writing results to response. + */ + @Override + protected void doPost(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { + LOG.debug("Entering"); + final AtomHandler handler = createAtomRequestHandler(req, res); + final String userName = handler.getAuthenticatedUsername(); + if (userName != null) { + final AtomRequest areq = new RollerAtomRequestImpl(req); + try { + if (handler.isCollectionURI(areq)) { + + final String contentType = req.getContentType(); + if (contentType != null && contentType.startsWith("application/atom+xml")) { + + // parse incoming entry + final Entry entry = Atom10Parser.parseEntry( + new BufferedReader(new InputStreamReader(req.getInputStream(), "UTF-8")), + null, Locale.US); + + // call handler to post it + final Entry newEntry = handler.postEntry(areq, entry); + + // set Location and Content-Location headers + for (final Object element : newEntry.getOtherLinks()) { + final Link link = (Link) element; + if ("edit".equals(link.getRel())) { + res.addHeader("Location", link.getHrefResolved()); + break; + } + } + for (final Object element : newEntry.getAlternateLinks()) { + final Link link = (Link) element; + if ("alternate".equals(link.getRel())) { + res.addHeader("Content-Location", link.getHrefResolved()); + break; + } + } + + // write entry back out to response + res.setStatus(HttpServletResponse.SC_CREATED); + res.setContentType("application/atom+xml; type=entry; charset=utf-8"); + + final Writer writer = res.getWriter(); + Atom10Generator.serializeEntry(newEntry, writer); + writer.close(); + + } else if (contentType != null) { + + // get incoming title and slug from HTTP header + final String title = areq.getHeader("Title"); + + // create new entry for resource, set title and type + final Entry resource = new Entry(); + resource.setTitle(title); + final Content content = new Content(); + content.setType(areq.getContentType()); + resource.setContents(Collections.singletonList(content)); + + // hand input stream off to handler to post file + final Entry newEntry = handler.postMedia(areq, resource); + + // set Location and Content-Location headers + for (final Object element : newEntry.getOtherLinks()) { + final Link link = (Link) element; + if ("edit".equals(link.getRel())) { + res.addHeader("Location", link.getHrefResolved()); + break; + } + } + for (final Object element : newEntry.getAlternateLinks()) { + final Link link = (Link) element; + if ("alternate".equals(link.getRel())) { + res.addHeader("Content-Location", link.getHrefResolved()); + break; + } + } + + res.setStatus(HttpServletResponse.SC_CREATED); + res.setContentType("application/atom+xml; type=entry; charset=utf-8"); + + final Writer writer = res.getWriter(); + Atom10Generator.serializeEntry(newEntry, writer); + writer.close(); + + } else { + res.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, "No content-type specified in request"); + } + + } else { + res.sendError(HttpServletResponse.SC_NOT_FOUND, "Invalid collection specified in request"); + } + } catch (final AtomException ae) { + res.sendError(ae.getStatus(), ae.getMessage()); + LOG.debug("An error occurred while processing POST", ae); + } catch (final Exception e) { + res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); + LOG.debug("An error occurred while processing POST", e); + } + } else { + res.setHeader("WWW-Authenticate", "BASIC realm=\"AtomPub\""); + res.sendError(HttpServletResponse.SC_UNAUTHORIZED); + } + LOG.debug("Exiting"); + } + + /** + * Handles an Atom PUT by calling handler to identify URI, reading/parsing + * data, calling handler and writing results to response. + */ + @Override + protected void doPut(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { + LOG.debug("Entering"); + final AtomHandler handler = createAtomRequestHandler(req, res); + final String userName = handler.getAuthenticatedUsername(); + if (userName != null) { + final AtomRequest areq = new RollerAtomRequestImpl(req); + try { + if (handler.isEntryURI(areq)) { + + // parse incoming entry + final Entry unsavedEntry = Atom10Parser.parseEntry( + new BufferedReader(new InputStreamReader(req.getInputStream(), "UTF-8")), + null, Locale.US); + + // call handler to put entry + handler.putEntry(areq, unsavedEntry); + + res.setStatus(HttpServletResponse.SC_OK); + + } else if (handler.isMediaEditURI(areq)) { + + // hand input stream to handler + handler.putMedia(areq); + + res.setStatus(HttpServletResponse.SC_OK); + + } else { + res.setStatus(HttpServletResponse.SC_NOT_FOUND); + } + } catch (final AtomException ae) { + res.sendError(ae.getStatus(), ae.getMessage()); + LOG.debug("An error occurred while processing PUT", ae); + } catch (final Exception e) { + res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); + LOG.debug("An error occurred while processing PUT", e); + } + } else { + res.setHeader("WWW-Authenticate", "BASIC realm=\"AtomPub\""); + res.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + } + LOG.debug("Exiting"); + } + + /** + * Handle Atom DELETE by calling appropriate handler. + */ + @Override + protected void doDelete(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { + LOG.debug("Entering"); + final AtomHandler handler = createAtomRequestHandler(req, res); + final String userName = handler.getAuthenticatedUsername(); + if (userName != null) { + final AtomRequest areq = new RollerAtomRequestImpl(req); + try { + if (handler.isEntryURI(areq)) { + handler.deleteEntry(areq); + res.setStatus(HttpServletResponse.SC_OK); + } else { + res.setStatus(HttpServletResponse.SC_NOT_FOUND); + } + } catch (final AtomException ae) { + res.sendError(ae.getStatus(), ae.getMessage()); + LOG.debug("An error occurred while processing DELETE", ae); + } catch (final Exception e) { + res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); + LOG.debug("An error occurred while processing DELETE", e); + } + } else { + res.setHeader("WWW-Authenticate", "BASIC realm=\"AtomPub\""); + res.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + } + LOG.debug("Exiting"); + } + + /** + * Initialize servlet. + */ + @Override + public void init(final ServletConfig config) throws ServletException { + super.init(config); + contextDirPath = getServletContext().getRealPath("/"); + } + + /** + * Get absolute path to Servlet context directory. + */ + public static String getContextDirPath() { + return contextDirPath; + } +} diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/oauth/AccessTokenServlet.java b/app/src/main/java/org/apache/roller/weblogger/webservices/oauth/AccessTokenServlet.java deleted file mode 100644 index 344fac29d2..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/webservices/oauth/AccessTokenServlet.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2007 AOL, LLC. - * Portions Copyright 2009 Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.roller.weblogger.webservices.oauth; - -import java.io.IOException; -import java.io.OutputStream; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import net.oauth.OAuth; -import net.oauth.OAuthAccessor; -import net.oauth.OAuthMessage; -import net.oauth.OAuthProblemException; -import net.oauth.server.OAuthServlet; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.roller.weblogger.business.OAuthManager; -import org.apache.roller.weblogger.business.WebloggerFactory; - -/** - * Access Token request handler - * - * @author Praveen Alavilli - * @author Dave Johnson (adapted for Roller) - */ -public class AccessTokenServlet extends HttpServlet { - protected static final Log log = LogFactory.getFactory().getInstance(AccessTokenServlet.class); - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - processRequest(request, response); - } - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - processRequest(request, response); - } - - public void processRequest(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - try{ - OAuthMessage requestMessage = OAuthServlet.getMessage(request, null); - - OAuthManager omgr = WebloggerFactory.getWeblogger().getOAuthManager(); - OAuthAccessor accessor = omgr.getAccessor(requestMessage); - omgr.getValidator().validateMessage(requestMessage, accessor); - - // make sure token is authorized - if (!Boolean.TRUE.equals(accessor.getProperty("authorized"))) { - OAuthProblemException problem = new OAuthProblemException("permission_denied"); - throw problem; - } - // generate access token and secret - if (accessor.accessToken == null) { - omgr.generateAccessToken(accessor); - WebloggerFactory.getWeblogger().flush(); - } - - response.setContentType("text/plain"); - try (OutputStream out = response.getOutputStream()) { - OAuth.formEncode(OAuth.newList( - "oauth_token", accessor.accessToken, - "oauth_token_secret", accessor.tokenSecret), out); - } - - } catch (Exception e){ - handleException(e, request, response, true); - } - } - - public void handleException(Exception e, HttpServletRequest request, - HttpServletResponse response, boolean sendBody) - throws IOException, ServletException { - log.debug("ERROR authorizing token", e); - String realm = (request.isSecure())?"https://":"http://"; - realm += request.getLocalName(); - OAuthServlet.handleException(response, e, realm, sendBody); - } - -} diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/oauth/AuthorizationServlet.java b/app/src/main/java/org/apache/roller/weblogger/webservices/oauth/AuthorizationServlet.java deleted file mode 100644 index 7f4787642b..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/webservices/oauth/AuthorizationServlet.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright 2007 AOL, LLC. - * Portions Copyright 2009 Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.roller.weblogger.webservices.oauth; - -import java.io.IOException; -import java.io.PrintWriter; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import net.oauth.OAuth; -import net.oauth.OAuthAccessor; -import net.oauth.OAuthMessage; -import net.oauth.server.OAuthServlet; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.roller.weblogger.business.OAuthManager; -import org.apache.roller.weblogger.business.WebloggerFactory; - -/** - * Authorization request handler. - * - * @author Praveen Alavilli - * @author Dave Johnson (adapted for Roller) - */ -public class AuthorizationServlet extends HttpServlet { - protected static final Log log = LogFactory.getFactory().getInstance(AuthorizationServlet.class); - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - try{ - OAuthMessage requestMessage = OAuthServlet.getMessage(request, null); - - OAuthManager omgr = WebloggerFactory.getWeblogger().getOAuthManager(); - OAuthAccessor accessor = omgr.getAccessor(requestMessage); - - if (Boolean.TRUE.equals(accessor.getProperty("authorized"))) { - // already authorized send the user back - returnToConsumer(request, response, accessor); - } else { - sendToAuthorizePage(request, response, accessor); - } - - } catch (Exception e){ - handleException(e, request, response, true); - } - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - try{ - OAuthMessage requestMessage = OAuthServlet.getMessage(request, null); - - OAuthManager omgr = WebloggerFactory.getWeblogger().getOAuthManager(); - OAuthAccessor accessor = omgr.getAccessor(requestMessage); - - String userId = request.getParameter("userId"); - if (userId == null) { - userId = request.getParameter("xoauth_requestor_id"); - } - - if (userId == null) { - // no user associted with the key, must be site-wide key, - // so get user to login and do the authorization process - sendToAuthorizePage(request, response, accessor); - - } else { - - // if consumer key is for specific user, check username match - String consumerUserId = (String)accessor.consumer.getProperty("userId"); - if (consumerUserId != null && !userId.equals(consumerUserId)) { - throw new ServletException("ERROR: invalid or unspecified userId"); - } - - // set userId in accessor and mark it as authorized - omgr.markAsAuthorized(accessor, userId); - WebloggerFactory.getWeblogger().flush(); - } - - returnToConsumer(request, response, accessor); - - } catch (Exception e){ - handleException(e, request, response, true); - } - } - - private void sendToAuthorizePage(HttpServletRequest request, - HttpServletResponse response, OAuthAccessor accessor) - throws IOException, ServletException{ - String callback = request.getParameter("oauth_callback"); - if(callback == null || callback.length() <=0) { - callback = "none"; - } - String consumer_description = (String)accessor.consumer.getProperty("description"); - request.setAttribute("CONS_DESC", consumer_description); - request.setAttribute("CALLBACK", callback); - request.setAttribute("TOKEN", accessor.requestToken); - request.getRequestDispatcher("/roller-ui/oauthAuthorize.rol").forward(request, response); - } - - private void returnToConsumer(HttpServletRequest request, - HttpServletResponse response, OAuthAccessor accessor) - throws IOException, ServletException { - - // send the user back to site's callBackUrl - String callback = request.getParameter("oauth_callback"); - if ("none".equals(callback) - && accessor.consumer.callbackURL != null - && accessor.consumer.callbackURL.length() > 0){ - // first check if we have something in our properties file - callback = accessor.consumer.callbackURL; - } - - if ( "none".equals(callback) ) { - // no call back it must be a client - response.setContentType("text/plain"); - try (PrintWriter out = response.getWriter()) { - out.println("You have successfully authorized for consumer key '" - + accessor.consumer.consumerKey - + "'. Please close this browser window and click continue" - + " in the client."); - } - } else { - // if callback is not passed in, use the callback from config - if(callback == null || callback.length() <=0 ) { - callback = accessor.consumer.callbackURL; - } - String token = accessor.requestToken; - if (token != null && callback != null) { - callback = OAuth.addParameters(callback, "oauth_token", token); - } - - response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); - response.setHeader("Location", callback); - } - } - - public void handleException(Exception e, HttpServletRequest request, - HttpServletResponse response, boolean sendBody) - throws IOException, ServletException { - log.debug("ERROR authorizing token", e); - String realm = (request.isSecure())?"https://":"http://"; - realm += request.getLocalName(); - OAuthServlet.handleException(response, e, realm, sendBody); - } -} diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/oauth/RequestTokenServlet.java b/app/src/main/java/org/apache/roller/weblogger/webservices/oauth/RequestTokenServlet.java deleted file mode 100644 index 797252f8bb..0000000000 --- a/app/src/main/java/org/apache/roller/weblogger/webservices/oauth/RequestTokenServlet.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2007 AOL, LLC. - * Portions Copyright 2009 Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.roller.weblogger.webservices.oauth; - -import java.io.IOException; -import java.io.OutputStream; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import net.oauth.OAuth; -import net.oauth.OAuthAccessor; -import net.oauth.OAuthConsumer; -import net.oauth.OAuthMessage; -import net.oauth.server.OAuthServlet; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.roller.weblogger.business.OAuthManager; -import org.apache.roller.weblogger.business.WebloggerFactory; - - -/** - * Request token request handler - * - * @author Praveen Alavilli - * @author Dave Johnson (adapted for Roller) - */ -public class RequestTokenServlet extends HttpServlet { - protected static final Log log = LogFactory.getFactory().getInstance(RequestTokenServlet.class); - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - processRequest(request, response); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - processRequest(request, response); - } - - public void processRequest(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - try { - OAuthMessage requestMessage = OAuthServlet.getMessage(request, null); - OAuthManager omgr = WebloggerFactory.getWeblogger().getOAuthManager(); - OAuthAccessor accessor = omgr.getAccessor(requestMessage); - - if (accessor == null) { - - OAuthConsumer consumer = omgr.getConsumer(requestMessage); - accessor = new OAuthAccessor(consumer); - omgr.getValidator().validateMessage(requestMessage, accessor); - - { - // Support the 'Variable Accessor Secret' extension - // described in http://oauth.pbwiki.com/AccessorSecret - String secret = requestMessage.getParameter("oauth_accessor_secret"); - if (secret != null) { - accessor.setProperty(OAuthConsumer.ACCESSOR_SECRET, secret); - } - } - - // generate request_token and secret - omgr.generateRequestToken(accessor); - WebloggerFactory.getWeblogger().flush(); - } - - response.setContentType("text/plain"); - try (OutputStream out = response.getOutputStream()) { - String token = accessor.requestToken != null ? accessor.requestToken: accessor.accessToken; - OAuth.formEncode(OAuth.newList( - "oauth_token", token, - "oauth_token_secret", accessor.tokenSecret), out); - } - - } catch (Exception e){ - handleException(e, request, response, true); - } - - } - - public void handleException(Exception e, HttpServletRequest request, - HttpServletResponse response, boolean sendBody) - throws IOException, ServletException { - log.debug("ERROR authorizing token", e); - String realm = (request.isSecure())?"https://":"http://"; - realm += request.getLocalName(); - OAuthServlet.handleException(response, e, realm, sendBody); - } -} diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java b/app/src/main/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java index fe8e7b57a9..511866b28d 100644 --- a/app/src/main/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java @@ -19,10 +19,10 @@ import java.io.IOException; import java.io.PrintWriter; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.roller.weblogger.WebloggerException; import org.apache.roller.weblogger.business.URLStrategy; diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/tagdata/TagDataServlet.java b/app/src/main/java/org/apache/roller/weblogger/webservices/tagdata/TagDataServlet.java index e239839ebb..7712e156ec 100644 --- a/app/src/main/java/org/apache/roller/weblogger/webservices/tagdata/TagDataServlet.java +++ b/app/src/main/java/org/apache/roller/weblogger/webservices/tagdata/TagDataServlet.java @@ -22,10 +22,10 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.StringEscapeUtils; import org.apache.roller.weblogger.WebloggerException; diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/xmlrpc/RollerXmlRpcServlet.java b/app/src/main/java/org/apache/roller/weblogger/webservices/xmlrpc/RollerXmlRpcServlet.java new file mode 100644 index 0000000000..62db6b427e --- /dev/null +++ b/app/src/main/java/org/apache/roller/weblogger/webservices/xmlrpc/RollerXmlRpcServlet.java @@ -0,0 +1,213 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/* + * Derived from org.apache.xmlrpc.webserver.XmlRpcServlet + * in Apache XML-RPC 3.1.3. Forked into the Roller codebase because + * xmlrpc-server has no Jakarta Servlet compatible release. + */ +package org.apache.roller.weblogger.webservices.xmlrpc; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.net.URL; +import java.util.Enumeration; + +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.xmlrpc.XmlRpcConfig; +import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.common.TypeConverterFactory; +import org.apache.xmlrpc.server.AbstractReflectiveHandlerMapping; +import org.apache.xmlrpc.server.PropertyHandlerMapping; +import org.apache.xmlrpc.server.RequestProcessorFactoryFactory; +import org.apache.xmlrpc.server.XmlRpcHandlerMapping; +import org.apache.xmlrpc.server.XmlRpcServer; +import org.apache.xmlrpc.util.ReflectionUtil; + + +/** + * A servlet for processing XML-RPC requests, derived from the Apache XML-RPC + * library's {@code XmlRpcServlet}. The typical use is to configure it in + * {@code web.xml} with an {@code XmlRpcServlet.properties} resource on the + * classpath that maps handler names to implementation classes. + * + *

The servlet accepts the following init parameters:

+ * + * + * + *
NameDescription
enabledForExtensionsSets the value of + * {@link XmlRpcConfig#isEnabledForExtensions()} to true.
+ */ +public class RollerXmlRpcServlet extends HttpServlet { + private static final long serialVersionUID = 2348768267234L; + private static final Log log = LogFactory.getLog(RollerXmlRpcServlet.class); + + /** + * Classpath location of the handler mapping properties file. + * Roller ships this at {@code org/apache/xmlrpc/webserver/XmlRpcServlet.properties}. + */ + private static final String HANDLER_MAPPING_RESOURCE = + "org/apache/xmlrpc/webserver/XmlRpcServlet.properties"; + + private RollerXmlRpcServletServer server; + private AbstractReflectiveHandlerMapping.AuthenticationHandler authenticationHandler; + private RequestProcessorFactoryFactory requestProcessorFactoryFactory; + private TypeConverterFactory typeConverterFactory; + + /** + * Returns the servlet's instance of {@link RollerXmlRpcServletServer}. + * @return The configurable server instance. + */ + public RollerXmlRpcServletServer getXmlRpcServletServer() { + return server; + } + + private void handleInitParameters(ServletConfig pConfig) throws ServletException { + for (Enumeration en = pConfig.getInitParameterNames(); en.hasMoreElements(); ) { + String name = (String) en.nextElement(); + String value = pConfig.getInitParameter(name); + try { + if (!ReflectionUtil.setProperty(this, name, value) + && !ReflectionUtil.setProperty(server, name, value) + && !ReflectionUtil.setProperty(server.getConfig(), name, value)) { + throw new ServletException("Unknown init parameter " + name); + } + } catch (IllegalAccessException e) { + throw new ServletException("Illegal access to instance of " + server.getClass().getName() + + " while setting property " + name + ": " + e.getMessage(), e); + } catch (InvocationTargetException e) { + Throwable t = e.getTargetException(); + throw new ServletException("Failed to invoke setter for property " + name + + " on instance of " + server.getClass().getName() + + ": " + t.getMessage(), t); + } + } + } + + public void init(ServletConfig pConfig) throws ServletException { + super.init(pConfig); + try { + server = newXmlRpcServer(pConfig); + handleInitParameters(pConfig); + server.setHandlerMapping(newXmlRpcHandlerMapping()); + } catch (XmlRpcException e) { + try { + log("Failed to create XmlRpcServer: " + e.getMessage(), e); + } catch (Throwable ignore) { + } + throw new ServletException(e); + } + } + + /** Sets the servlet's {@link AbstractReflectiveHandlerMapping.AuthenticationHandler}. */ + public void setAuthenticationHandler(AbstractReflectiveHandlerMapping.AuthenticationHandler pHandler) { + authenticationHandler = pHandler; + } + + /** Returns the servlet's {@link AbstractReflectiveHandlerMapping.AuthenticationHandler}. */ + public AbstractReflectiveHandlerMapping.AuthenticationHandler getAuthenticationHandler() { + return authenticationHandler; + } + + /** Sets the servlet's {@link RequestProcessorFactoryFactory}. */ + public void setRequestProcessorFactoryFactory(RequestProcessorFactoryFactory pFactory) { + requestProcessorFactoryFactory = pFactory; + } + + /** Returns the servlet's {@link RequestProcessorFactoryFactory}. */ + public RequestProcessorFactoryFactory getRequestProcessorFactoryFactory() { + return requestProcessorFactoryFactory; + } + + /** Sets the servlet's {@link TypeConverterFactory}. */ + public void setTypeConverterFactory(TypeConverterFactory pFactory) { + typeConverterFactory = pFactory; + } + + /** Returns the servlet's {@link TypeConverterFactory}. */ + public TypeConverterFactory getTypeConverterFactory() { + return typeConverterFactory; + } + + /** + * Creates a new instance of {@link RollerXmlRpcServletServer} to process requests. + * @param pConfig The servlet's configuration. + * @throws XmlRpcException Creating the server failed. + */ + protected RollerXmlRpcServletServer newXmlRpcServer(ServletConfig pConfig) + throws XmlRpcException { + return new RollerXmlRpcServletServer(); + } + + /** + * Creates a new handler mapping. Loads the property file from the classpath + * resource {@value #HANDLER_MAPPING_RESOURCE}. + */ + protected XmlRpcHandlerMapping newXmlRpcHandlerMapping() throws XmlRpcException { + URL url = Thread.currentThread().getContextClassLoader() + .getResource(HANDLER_MAPPING_RESOURCE); + if (url == null) { + throw new XmlRpcException("Failed to locate resource " + HANDLER_MAPPING_RESOURCE); + } + try { + return newPropertyHandlerMapping(url); + } catch (IOException e) { + throw new XmlRpcException("Failed to load resource " + url + ": " + e.getMessage(), e); + } + } + + /** + * Creates a new instance of {@link PropertyHandlerMapping} by loading + * the property file from the given URL. + */ + protected PropertyHandlerMapping newPropertyHandlerMapping(URL url) throws IOException, XmlRpcException { + PropertyHandlerMapping mapping = new PropertyHandlerMapping(); + mapping.setAuthenticationHandler(authenticationHandler); + if (requestProcessorFactoryFactory != null) { + mapping.setRequestProcessorFactoryFactory(requestProcessorFactoryFactory); + } + if (typeConverterFactory != null) { + mapping.setTypeConverterFactory(typeConverterFactory); + } else { + mapping.setTypeConverterFactory(server.getTypeConverterFactory()); + } + mapping.setVoidMethodEnabled(server.getConfig().isEnabledForExtensions()); + mapping.load(Thread.currentThread().getContextClassLoader(), url); + return mapping; + } + + /** Handles an XML-RPC POST request. */ + public void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException, ServletException { + server.execute(pRequest, pResponse); + } + + public void log(String pMessage, Throwable pThrowable) { + server.getErrorLogger().log(pMessage, pThrowable); + } + + public void log(String pMessage) { + log.info(pMessage); + } +} diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/xmlrpc/RollerXmlRpcServletServer.java b/app/src/main/java/org/apache/roller/weblogger/webservices/xmlrpc/RollerXmlRpcServletServer.java new file mode 100644 index 0000000000..3bed68a639 --- /dev/null +++ b/app/src/main/java/org/apache/roller/weblogger/webservices/xmlrpc/RollerXmlRpcServletServer.java @@ -0,0 +1,150 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/* + * Derived from org.apache.xmlrpc.webserver.XmlRpcServletServer + * in Apache XML-RPC 3.1.3. Forked into the Roller codebase because + * xmlrpc-server has no Jakarta Servlet compatible release. + */ +package org.apache.roller.weblogger.webservices.xmlrpc; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.common.ServerStreamConnection; +import org.apache.xmlrpc.common.XmlRpcHttpRequestConfig; +import org.apache.xmlrpc.common.XmlRpcHttpRequestConfigImpl; +import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig; +import org.apache.xmlrpc.server.XmlRpcHttpServer; +import org.apache.xmlrpc.server.XmlRpcHttpServerConfig; +import org.apache.xmlrpc.util.HttpUtil; + + +/** + * An extension of {@link org.apache.xmlrpc.server.XmlRpcServer} + * suitable for processing servlet requests. + */ +public class RollerXmlRpcServletServer extends XmlRpcHttpServer { + + protected static class ServletStreamConnection implements ServerStreamConnection { + private final HttpServletRequest request; + private final HttpServletResponse response; + + protected ServletStreamConnection(HttpServletRequest pRequest, + HttpServletResponse pResponse) { + request = pRequest; + response = pResponse; + } + + /** Returns the servlet request. */ + public HttpServletRequest getRequest() { return request; } + + /** Returns the servlet response. */ + public HttpServletResponse getResponse() { return response; } + + public InputStream newInputStream() throws IOException { + return request.getInputStream(); + } + + public OutputStream newOutputStream() throws IOException { + response.setContentType("text/xml"); + return response.getOutputStream(); + } + + public void close() throws IOException { + response.getOutputStream().close(); + } + } + + /** + * @param pRequest The request object. + */ + protected XmlRpcHttpRequestConfigImpl newConfig(HttpServletRequest pRequest) { + return new XmlRpcHttpRequestConfigImpl(); + } + + protected XmlRpcHttpRequestConfigImpl getConfig(HttpServletRequest pRequest) { + XmlRpcHttpRequestConfigImpl result = newConfig(pRequest); + XmlRpcHttpServerConfig serverConfig = (XmlRpcHttpServerConfig) getConfig(); + result.setBasicEncoding(serverConfig.getBasicEncoding()); + result.setContentLengthOptional(serverConfig.isContentLengthOptional() + && (pRequest.getHeader("Content-Length") == null)); + result.setEnabledForExtensions(serverConfig.isEnabledForExtensions()); + result.setGzipCompressing(HttpUtil.isUsingGzipEncoding(pRequest.getHeader("Content-Encoding"))); + result.setGzipRequesting(HttpUtil.isUsingGzipEncoding(pRequest.getHeaders("Accept-Encoding"))); + result.setEncoding(pRequest.getCharacterEncoding()); + result.setEnabledForExceptions(serverConfig.isEnabledForExceptions()); + HttpUtil.parseAuthorization(result, pRequest.getHeader("Authorization")); + return result; + } + + protected ServletStreamConnection newStreamConnection(HttpServletRequest pRequest, + HttpServletResponse pResponse) { + return new ServletStreamConnection(pRequest, pResponse); + } + + /** + * Processes the servlet request. + * @param pRequest The servlet request being read. + * @param pResponse The servlet response being created. + * @throws IOException Reading the request or writing the response failed. + * @throws ServletException Processing the request failed. + */ + public void execute(HttpServletRequest pRequest, HttpServletResponse pResponse) + throws ServletException, IOException { + XmlRpcHttpRequestConfigImpl config = getConfig(pRequest); + ServletStreamConnection ssc = newStreamConnection(pRequest, pResponse); + try { + super.execute(config, ssc); + } catch (XmlRpcException e) { + throw new ServletException(e); + } + } + + /** Returns whether the request's content length is required. */ + protected boolean isContentLengthRequired(XmlRpcStreamRequestConfig pConfig) { + if (!pConfig.isEnabledForExtensions()) { + // The spec requires a content-length. + return true; + } + boolean isRequired = !((XmlRpcHttpServerConfig) getConfig()).isContentLengthOptional(); + if (pConfig instanceof XmlRpcHttpRequestConfig) { + isRequired |= !((XmlRpcHttpRequestConfig) pConfig).isContentLengthOptional(); + } + return isRequired; + } + + protected OutputStream getOutputStream(XmlRpcStreamRequestConfig pConfig, + ServerStreamConnection pConnection, + int pSize) throws IOException { + if (pSize != -1) { + ((ServletStreamConnection) pConnection).getResponse().setContentLength(pSize); + } + return super.getOutputStream(pConfig, pConnection, pSize); + } + + protected void setResponseHeader(ServerStreamConnection pConnection, String pHeader, String pValue) { + ((ServletStreamConnection) pConnection).getResponse().setHeader(pHeader, pValue); + } +} diff --git a/app/src/main/resources/ApplicationResources.properties b/app/src/main/resources/ApplicationResources.properties index 66072c23f0..6a0abebdce 100644 --- a/app/src/main/resources/ApplicationResources.properties +++ b/app/src/main/resources/ApplicationResources.properties @@ -338,7 +338,7 @@ configForm.editorPages=Editor Pages configForm.webServicesSettings=Web Services Settings configForm.enableAtomPub=Enable Atom Publishing Protocol -configForm.AtomPubAuth=AtomPub authentication (basic, oauth, or wsse) +configForm.AtomPubAuth=AtomPub authentication (basic or wsse) configForm.enableXmlRpc=Enable Blogger / MetaWeblog API configForm.weblogSettings=Weblog Rendering Settings @@ -943,37 +943,6 @@ navigationBar.logout=Logout navigationBar.login=Login navigationBar.register=Register -# ----------------------------------------------------------------- OAuth pages - -oauthKeys.title=OAuth Keys -oauthKeys.description=OAuth key and secret for your account {0} -oauthKeys.tip=You can authorize other sites and weblog client programs \ -to access your account to create and edit weblog posts, but only if those \ -sites and programs support OAuth. -oauthKeys.consumerKey=Consumer Key -oauthKeys.consumerSecret=Consumer Secret -oauthKeys.userKeys=User Specific Secret and Key -oauthKeys.userKeysTip=These keys are tied to your user account, use them to \ -authorize weblog clients that need access your account. -oauthKeys.siteWideKeys=Site Wide Secret and Key -oauthKeys.siteWideKeysTip=Since you are a site admin, you have access to the \ -site wide key and secret. You can provide them to other sites that need to \ -access accounts on this site. Users will still have to authenticate access \ -by logging in to Roller. -oauthKeys.urls=OAuth URLs -oauthKeys.urlsTip=These are the URLs that your weblog client will need to \ -perform OAuth authorization against Roller. -oauthKeys.requestTokenURL=Request Token URL -oauthKeys.authorizationURL=Authorization URL -oauthKeys.accessTokenURL=Access Token URL - - -oauthAuthorize.title=OAuth Authorization -oauthAuthorize.description=Authorize OAuth access to user account {0}? -oauthAuthorize.tip=A web site is asking to have access your account. Press \ -the button below to allow access or simply close this window to deny it. - - # -------------------------------------------------------------- Page management pagesForm.title=Templates @@ -1845,10 +1814,6 @@ Feel like you''ve got more to say? Maybe another weblog is what you need. yourWebsites.editProfile=Your Profile yourWebsites.editProfile.desc=Change user info, password, timezone -yourWebsites.oauthKeys=OAuth Credentials -yourWebsites.oauthKeys.desc=Enable other sites and programs to access your \ -account remotely. - yourWebsites.globalAdmin=Server administration yourWebsites.globalAdmin.desc=Make site-wide administration changes. diff --git a/app/src/main/resources/ApplicationResources_ja.properties b/app/src/main/resources/ApplicationResources_ja.properties index 8802be030d..7c3c5508fe 100644 --- a/app/src/main/resources/ApplicationResources_ja.properties +++ b/app/src/main/resources/ApplicationResources_ja.properties @@ -1073,7 +1073,6 @@ mediaFileAdd.includeGallery=\u30AE\u30E3\u30E9\u30EA\u30FC\u306B\u542B\u3081\u30 mediaFileView.create=\u4F5C\u6210 themeEditor.customThemeDescription=\u81EA\u5206\u3067\u30D6\u30ED\u30B0\u3092\u30C7\u30B6\u30A4\u30F3\u3057\u305F\u3044\u30AF\u30EA\u30A8\u30A4\u30C6\u30A3\u30D6\u306A\u30D6\u30ED\u30AC\u30FC\u306E\u305F\u3081\u306E\u9078\u629E\u80A2\u3067\u3059\u3002\u305F\u3060\u3057\u30D6\u30ED\u30B0\u306E\u30C7\u30B6\u30A4\u30F3\u3092\u81EA\u5206\u3067\u7BA1\u7406\u3059\u308B\u306B\u306F\u591A\u5C11\u306E\u624B\u9593\u304C\u304B\u304B\u308A\u307E\u3059\u3002 pagesForm.deleteselected=\u9078\u629E\u3055\u308C\u305F\u9805\u76EE\u3092\u524A\u9664 -yourWebsites.oauthKeys.desc=\u30EA\u30E2\u30FC\u30C8\u306E\u4ED6\u306E\u30B5\u30A4\u30C8\u304A\u3088\u3073\u30D7\u30ED\u30B0\u30E9\u30E0\u304B\u3089\u3001\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u53EF\u80FD\u306B\u3057\u307E\u3059\u3002 configForm.enableAtomPub=Atom \u30D1\u30D6\u30EA\u30C3\u30B7\u30F3\u30B0\u30FB\u30D7\u30ED\u30C8\u30B3\u30EB\u3092\u6709\u52B9\u306B\u3059\u308B Register.disabled=\u3053\u306E\u30B5\u30A4\u30C8\u306E\u7BA1\u7406\u8005\u306F\u3001\u73FE\u5728\u3001\u65B0\u898F\u30E6\u30FC\u30B6\u767B\u9332\u3092\u7121\u52B9\u306B\u3057\u3066\u3044\u307E\u3059\u3002\u554F\u984C\u304C\u3042\u308B\u5834\u5408\u306F\u3001\u7BA1\u7406\u8005\u306B\u9023\u7D61\u3057\u3066\u304F\u3060\u3055\u3044\u3002 weblogEdit.searchDescription=\u691C\u7D22\u30A8\u30F3\u30B8\u30F3\u7528\u306E\u6982\u8981 @@ -1101,7 +1100,6 @@ mediaFile.error.view.dirNameInvalid=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540D\u mediaFileAdd.tags=\u30BF\u30B0\uFF08\u30B9\u30DA\u30FC\u30B9\u3067\u5206\u5272\uFF09 themeEditor.yourThemeStyleSheet=\u5171\u6709\u30C6\u30FC\u30DE\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u3092\u4F7F\u7528\u3057\u3066\u3044\u307E\u3059\u3002 pageForm.useManualContentType=\u72EC\u81EA\u306EContent-Type\u3092\u4F7F\u7528\u3059\u308B -oauthKeys.siteWideKeys=\u30B5\u30A4\u30C8\u5168\u4F53\u306E\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u304A\u3088\u3073\u30AD\u30FC installer.errorUpgradingTablesExplanation=\u30C6\u30FC\u30D6\u30EB\u306E\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u30B9\u30AF\u30EA\u30D7\u30C8\u306B\u554F\u984C\u304C\u3042\u308B\u304B\u3001\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u306A\u3044\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u4F7F\u7528\u3055\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u3042\u306A\u305F\u306F\u3001\u3053\u306E\u554F\u984C\u3092\u89E3\u6C7A\u3057\u3066Roller\u3092\u518D\u8D77\u52D5\u307E\u305F\u306F\u518D\u30C7\u30D7\u30ED\u30A4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u51E6\u7406\u4E2D\u306E\u6210\u529F/\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u4EE5\u4E0B\u3067\u3059\: userRegister.heading.authentication=\u3069\u306E\u3088\u3046\u306B\u8A8D\u8A3C\u3057\u307E\u3059\u304B? mediaFileView.title=\u30E1\u30C7\u30A3\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB @@ -1124,7 +1122,6 @@ mediaFileView.bytes=\u30D0\u30A4\u30C8 mediaFile.delete.confirm=\u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u3066\u3088\u308D\u3057\u3044\u3067\u3059\u304B? commentManagement.saveError=\u30B3\u30E1\u30F3\u30C8\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F comments.ldapAuthenticatorUserName=\u3042\u306A\u305F\u306EActive Directory\u30E6\u30FC\u30B6\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 -oauthKeys.urlsTip=\u3053\u308C\u3089\u306F\u3001\u3042\u306A\u305F\u306E\u30D6\u30ED\u30B0\u30FB\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u304CRoller\u306B\u5BFE\u3057\u3066OAuth\u8A8D\u8A3C\u3092\u5B9F\u884C\u3059\u308B\u305F\u3081\u306B\u5FC5\u8981\u3068\u306A\u308BURL\u3067\u3059\u3002 inviteMember.title=\u65B0\u3057\u3044\u30E1\u30F3\u30D0\u30FC\u306E\u62DB\u5F85 mediaFileSuccess.pageTip=\u30D5\u30A1\u30A4\u30EB\u304C\u6B63\u5E38\u306B\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3055\u308C\u307E\u3057\u305F\u3002\u65B0\u3057\u304F\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u542B\u3080\u65B0\u3057\u3044\u30A8\u30F3\u30C8\u30EA\u3092\u4F5C\u6210\u3057\u305F\u3044\u5834\u5408\u306F\u3001\u4EE5\u4E0B\u306E\u30D5\u30A9\u30FC\u30E0\u3092\u4F7F\u3063\u3066\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30BF\u30A4\u30D7\u304C\u753B\u50CF\u306E\u5834\u5408\u306F\u30B5\u30E0\u30CD\u30A4\u30EB\u3068\u3057\u3066\u8FFD\u52A0\u3055\u308C\u307E\u3059\u3002\u30BF\u30A4\u30D7\u304C\u753B\u50CF\u4EE5\u5916\u306E\u5834\u5408\u306F\u3001\u30A8\u30F3\u30AF\u30ED\u30FC\u30B8\u30E3\uFF08\u4F8B\uFF1APodcast\uFF09\u3068\u3057\u3066\u542B\u3081\u308B\u304B\u3069\u3046\u304B\u9078\u629E\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002 websiteRemove.error=\u30D6\u30ED\u30B0 [{0}] \u306E\u524A\u9664\u30A8\u30E9\u30FC @@ -1161,7 +1158,6 @@ planetGroupSubs.prompt.add=\u65B0\u3057\u3044\u30B5\u30D6\u30B9\u30AF\u30EA\u30D MediaFile.error.view=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u8868\u793A\u3059\u308B\u969B\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 mediaFileAdd.multipleNames=(\u8907\u6570\u306E\u540D\u524D) macro.bookmark.urlFeed=\u30B5\u30A4\u30C8\u306ERSS\u30D5\u30A3\u30FC\u30C9\u306EURL -oauthKeys.title=OAuth\u30AD\u30FC commonPingTargets.error.enabling=Ping\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u6709\u52B9\u5316\u306B\u5931\u6557\u3057\u307E\u3057\u305F inviteMember.notificationContent=\u3042\u306A\u305F\u306F\u3001\u30D6\u30ED\u30B0 "{0}" ({1}) \u3078\u306E\u53C2\u52A0\u3092\u62DB\u5F85\u3055\u308C\u307E\u3057\u305F\u3002\u4EE5\u4E0B\u306E\u30EA\u30F3\u30AF\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30E6\u30FC\u30B6 [{2}] \u3068\u3057\u3066\u30ED\u30B0\u30A4\u30F3\u3057\u3001\u3053\u306E\u62DB\u5F85 <{3}> \u3092\u627F\u8AFE\u3059\u308B\u304B\u62D2\u5426\u3057\u3066\u304F\u3060\u3055\u3044\u3002 mediaFileView.addDirectory=\u65B0\u3057\u3044\u30D5\u30A9\u30EB\u30C0\u3092\u8FFD\u52A0 @@ -1170,7 +1166,6 @@ pingTargetEdit.subtitle=Ping\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u7DE8\u96C6 installer.errorUpgradingTables=\u30C6\u30FC\u30D6\u30EB\u306E\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u306B\u5931\u6557 folderForm.updated=\u30D5\u30A9\u30EB\u30C0\u540D\u304C\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F frontpageConfig.frontpageAggregated=\u30B5\u30A4\u30C8\u5168\u4F53\u304C\u96C6\u7D04\u3055\u308C\u305F\u30D5\u30ED\u30F3\u30C8\u30FB\u30DA\u30FC\u30B8\u3092\u6709\u52B9\u306B\u3059\u308B -oauthAuthorize.title=OAuth\u306E\u8A8D\u53EF mediaFileView.rootPageTip=\u3053\u306E\u30DA\u30FC\u30B8\u306B\u306F\u3001\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u3068\u30C6\u30FC\u30DE\u306E\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u3092\u9078\u629E\u3057\u305F\u969B\u306B\u30B3\u30D4\u30FC\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u8868\u793A\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30D5\u30A9\u30EB\u30C0\u3092\u4F7F\u3063\u3066\u30D5\u30A1\u30A4\u30EB\u3092\u7BA1\u7406\u3067\u304D\u307E\u3059\u3002\u306A\u304A\u3001\u30D5\u30A1\u30A4\u30EB\u3092\u79FB\u52D5\u3057\u305F\u308A\u540D\u524D\u3092\u5909\u66F4\u3057\u3066\u3082URL\u306F\u5909\u308F\u3089\u306A\u3044\u305F\u3081\u30EA\u30F3\u30AF\u5207\u308C\u306E\u5FC3\u914D\u306F\u3042\u308A\u307E\u305B\u3093\u3002 mediaFileSuccess.type=\u30BF\u30A4\u30D7\: mediaFileAddSuccess.title=\u30E1\u30C7\u30A3\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u5B8C\u4E86 @@ -1198,7 +1193,6 @@ mediaFile.update.success=\u30E1\u30C7\u30A3\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\ userRegister.tip.localeAndTimeZone=\u3042\u306A\u305F\u306B\u3068\u3063\u3066\u671B\u307E\u3057\u3044\u3068\u601D\u308F\u308C\u308B\u8A00\u8A9E\u3068\u30BF\u30A4\u30E0\u30BE\u30FC\u30F3\u306F\u4EE5\u4E0B\u306E\u901A\u308A\u3067\u3059\u3002\u3053\u308C\u306F\u3001\u3042\u306A\u305F\u304C\u4ECA\u5F8C\u4F5C\u6210\u3059\u308B\u30A8\u30F3\u30C8\u30EA\u30FC\u306B\u9069\u7528\u3055\u308C\u307E\u3059\u306E\u3067\u3001\u6B63\u3057\u304F\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002 macro.weblog.on=\u6295\u7A3F\u65E5\u6642\: planetConfig.prompt=\u30A2\u30B0\u30EA\u30B2\u30FC\u30BF\u304C\u751F\u6210\u3059\u308B\u30CB\u30E5\u30FC\u30B9\u30D5\u30A3\u30FC\u30C9\u306B\u542B\u307E\u308C\u308B\u30BF\u30A4\u30C8\u30EB\u3001\u8AAC\u660E\u3001\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3001\u30B5\u30A4\u30C8URL\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u5FC5\u8981\u3067\u3042\u308C\u3070\u30D7\u30ED\u30AD\u30B7\u3092\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u3082\u3067\u304D\u307E\u3059\u3002 -oauthKeys.description=\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8 {0} \u306EOAuth\u30AD\u30FC\u3068\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8 generic.changes.saved=\u5909\u66F4\u304C\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F error.commentPostFailedEmailAddress=\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u304C\u4E0D\u6B63\u3067\u3059\u3002 ConfigForm.title=Planet \u30BF\u30A4\u30C8\u30EB\t @@ -1208,12 +1202,10 @@ mediaFile.move.confirm=\u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u3 pingTarget.updated=Ping\u30BF\u30FC\u30B2\u30C3\u30C8 "{0}" \u304C\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F generic.name=\u540D\u524D pingTarget.malformedUrl=URL\u304C\u4E0D\u6B63\u306A\u5F62\u5F0F\u3067\u3059\u3002 -oauthKeys.tip=OAuth\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B\u30B5\u30A4\u30C8\u3084\u30D6\u30ED\u30B0\u30FB\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u30FB\u30D7\u30ED\u30B0\u30E9\u30E0\u306B\u5BFE\u3057\u3066\u3001\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3078\u30A2\u30AF\u30BB\u30B9\u3057\u3066\u30A8\u30F3\u30C8\u30EA\u30FC\u3092\u6295\u7A3F\u30FB\u7DE8\u96C6\u3059\u308B\u3053\u3068\u3092\u8A8D\u53EF\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002 mediaFileView.filesTagged=\u30BF\u30B0\u304C {0} \u306E\u30D5\u30A1\u30A4\u30EB weblogEdit.hasComments=\u30B3\u30E1\u30F3\u30C8 [{1}] categoryDeleteOK.title=\u30AB\u30C6\u30B4\u30EA\u306E\u524A\u9664 bookmarksForm.url=URL -oauthKeys.accessTokenURL=\u30A2\u30AF\u30BB\u30B9\u30FB\u30C8\u30FC\u30AF\u30F3URL mediaFile.move.success=\u30E1\u30C7\u30A3\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u6B63\u5E38\u306B\u79FB\u52D5\u3055\u308C\u307E\u3057\u305F\u3002 mediaFileView.noResults=\u6761\u4EF6\u306B\u5408\u81F4\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u306F\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4ED6\u306E\u6761\u4EF6\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044\u3002 planetGroups.error.title=\u30BF\u30A4\u30C8\u30EB\u306F\u5FC5\u9808\u9805\u76EE\u3067\u3059 @@ -1273,7 +1265,6 @@ installer.yesCreateTables=\u306F\u3044 - \u4ECA\u3059\u3050\u30C6\u30FC\u30D6\u3 tabbedmenu.bookmarks.allFolders=Blogroll pageForm.tip.required=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u7DE8\u96C6\u3057\u3066\u3001\u751F\u6210\u3055\u308C\u308B\u30DA\u30FC\u30B8\u3092\u5909\u66F4\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3067\u4F7F\u7528\u3059\u308B\u3053\u3068\u306E\u3067\u304D\u308B\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304A\u3088\u3073\u30B3\u30FC\u30C9\u306B\u3064\u3044\u3066\u306F\u3001Roller\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30FB\u30AC\u30A4\u30C9\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u3053\u308C\u306F\u4E0A\u7D1A\u30E6\u30FC\u30B6\u30FC\u306E\u305F\u3081\u306E\u3082\u306E\u3067\u3042\u308A\u3001\u3082\u3057\u3042\u306A\u305F\u304CHTML\u306B\u8A73\u3057\u304F\u306A\u3044\u5834\u5408\u3001\u7DE8\u96C6\u3057\u306A\u3044\u65B9\u304C\u826F\u3044\u3067\u3057\u3087\u3046\u3002\u30E1\u30E2\: \u3053\u308C\u306F\u5FC5\u9808\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3067\u3059\u3002\u3042\u306A\u305F\u306F\u3001\u540D\u524D\u3001\u30EA\u30F3\u30AF\u304A\u3088\u3073\u8A73\u7D30\u3092\u5909\u66F4\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002 mediaFileView.lt=< -oauthAuthorize.tip=\u30A6\u30A7\u30D6\u30B5\u30A4\u30C8\u304C\u3001\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u8981\u6C42\u3057\u3066\u3044\u307E\u3059\u3002\u4EE5\u4E0B\u306E\u30DC\u30BF\u30F3\u3092\u62BC\u3057\u3066\u30A2\u30AF\u30BB\u30B9\u3092\u8A8D\u53EF\u3059\u308B\u304B\u3001\u3053\u306E\u30A6\u30A4\u30F3\u30C9\u30A6\u3092\u9589\u3058\u3066\u62D2\u5426\u3057\u3066\u304F\u3060\u3055\u3044\u3002 planetSubscription.error.deleting=\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u524A\u9664\u30A8\u30E9\u30FC error.add.user.openIdInUse=Open ID\u306F\u4ED6\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3067\u65E2\u306B\u4F7F\u308F\u308C\u3066\u3044\u307E\u3059\u3002 themeEditor.importAndOverwriteTemplates=\u30C6\u30FC\u30DE\u3092\u65E2\u5B58\u306E\u30AB\u30B9\u30BF\u30E0\u30FB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306B\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u3001\u540C\u540D\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306F\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002 @@ -1324,12 +1315,10 @@ mediaFile.includeInGallery.success=\u30E1\u30C7\u30A3\u30A2\u30FB\u30D5\u30A1\u3 mediaFileEdit.directory=\u30D5\u30A9\u30EB\u30C0 bookmarksForm.feedurl=\u30CB\u30E5\u30FC\u30B9\u30D5\u30A3\u30FC\u30C9URL planetSubscription.success.deleted=\u30B5\u30D6\u30B9\u30AF\u30EA\u30D7\u30B7\u30E7\u30F3\u304C\u6B63\u5E38\u306B\u524A\u9664\u3055\u308C\u307E\u3057\u305F -oauthKeys.userKeys=\u5404\u30E6\u30FC\u30B6\u30FC\u306E\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u304A\u3088\u3073\u30AD\u30FC mediaFileView.type=\u30BF\u30A4\u30D7 mediaFileEdit.includeGallery=\u30AE\u30E3\u30E9\u30EA\u30FC\u306B\u542B\u3081\u307E\u3059\u304B? statCount.weblogCommentCountType=\u30D6\u30ED\u30B0\u306E\u30B3\u30E1\u30F3\u30C8\u6570 mediaFileSuccess.subtitle=\u65B0\u3057\u3044\u30A8\u30F3\u30C8\u30EA\u3092\u4F5C\u6210\u3057\u307E\u3059\u304B? -oauthKeys.userKeysTip=\u3053\u308C\u3089\u306F\u3001\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u7D10\u3065\u3051\u3089\u308C\u305F\u30AD\u30FC\u3067\u3059\u3002\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u304C\u5FC5\u8981\u306A\u30D6\u30ED\u30B0\u30FB\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u3092\u8A8D\u53EF\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002 categoriesForm.noresults=\u73FE\u5728\u3001\u30AB\u30C6\u30B4\u30EA\u306F\u3042\u308A\u307E\u305B\u3093 installer.errorCreatingTablesExplanation=\u30C6\u30FC\u30D6\u30EB\u306E\u4F5C\u6210\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4F5C\u6210\u30B9\u30AF\u30EA\u30D7\u30C8\u306B\u554F\u984C\u304C\u3042\u308B\u304B\u3001\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u306A\u3044\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u4F7F\u7528\u3055\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u3042\u306A\u305F\u306F\u3001\u3053\u306E\u554F\u984C\u3092\u89E3\u6C7A\u3057\u3066Roller\u3092\u518D\u8D77\u52D5\u307E\u305F\u306F\u518D\u30C7\u30D7\u30ED\u30A4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u4F5C\u6210\u51E6\u7406\u4E2D\u306E\u6210\u529F/\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u4EE5\u4E0B\u3067\u3059\: commonPingTargets.error.loading=\u5171\u901APing\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F @@ -1353,7 +1342,6 @@ mediaFileView.gt=> pageForm.action=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u7DE8\u96C6 mediaFileSuccess.size=\u30B5\u30A4\u30BA\: configForm.allowUserWeblogCreation=\u30E6\u30FC\u30B6\u306B\u65B0\u3057\u3044\u30D6\u30ED\u30B0\u306E\u4F5C\u6210\u3092\u8A31\u53EF\u3057\u307E\u3059\u304B? -oauthKeys.consumerKey=\u30B3\u30F3\u30B7\u30E5\u30FC\u30DE\u30FC\u30FB\u30AD\u30FC categoryForm.requiredFields={0} \u306F\u5FC5\u9808\u9805\u76EE\u3067\u3059 mediaFileEdit.updateFileContents=\u30D5\u30A1\u30A4\u30EB\u306E\u5185\u5BB9\u3092\u66F4\u65B0\u3059\u308B websiteSettings.error.processingBannedwordslist=\u30D6\u30E9\u30C3\u30AF\u30EA\u30B9\u30C8\u306E\u51E6\u7406\u30A8\u30E9\u30FC\: {0} @@ -1383,7 +1371,7 @@ pingTargetAdd.subtitle=Ping\u30BF\u30FC\u30B2\u30C3\u30C8\u306E\u8FFD\u52A0 planetSubscription.feedUrl=\u30CB\u30E5\u30FC\u30B9\u30D5\u30A3\u30FC\u30C9URL mediaFileSuccess.noEnclosure=\u30A8\u30F3\u30AF\u30ED\u30FC\u30B8\u30E3\u306A\u3057 userRegister.tip.ready=\u3088\u308D\u3057\u3051\u308C\u3070\u3001\u4EE5\u4E0B\u306E\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002 -configForm.AtomPubAuth=AtomPub\u8A8D\u8A3C (basic, oauth, \u307E\u305F\u306F wsse) +configForm.AtomPubAuth=AtomPub\u8A8D\u8A3C (basic \u307E\u305F\u306F wsse) ConfigForm.proxyPort=Feed fetcher\u304C\u4F7F\u7528\u3059\u308B\u30D7\u30ED\u30AD\u30B7\u306E\u30DD\u30FC\u30C8 mediaFileView.searchTitle=\u691C\u7D22\u7D50\u679C weblogEdit.enclosureLength=\u9577\u3055 @@ -1395,7 +1383,6 @@ pageRemoves.youSure=\u3053\u306E\u30DA\u30FC\u30B8\u3092\u524A\u9664\u3057\u307E mediaFileAdd.fileLocation=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E mediaFileView.eq=\= userAdmin.error.userNotFound=\u6307\u5B9A\u3055\u308C\u305F\u30E6\u30FC\u30B6\u306F\u5B58\u5728\u3057\u307E\u305B\u3093 -oauthKeys.siteWideKeysTip=\u3042\u306A\u305F\u306F\u30B5\u30A4\u30C8\u306E\u7BA1\u7406\u8005\u3067\u3042\u308B\u305F\u3081\u3001\u30B5\u30A4\u30C8\u5168\u4F53\u306E\u30AD\u30FC\u3068\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u6A29\u3092\u6301\u3063\u3066\u3044\u307E\u3059\u3002\u3042\u306A\u305F\u306F\u3053\u308C\u3092\u3001\u3053\u306E\u30B5\u30A4\u30C8\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u304C\u5FC5\u8981\u306A\u4ED6\u306E\u30B5\u30A4\u30C8\u306B\u5BFE\u3057\u3066\u63D0\u4F9B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305F\u3060\u3057\u3001\u30E6\u30FC\u30B6\u306F\u30A2\u30AF\u30BB\u30B9\u3092\u8A8D\u53EF\u3059\u308B\u305F\u3081\u306BRoller\u3078\u30ED\u30B0\u30A4\u30F3\u3057\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\u3002 editPages.remove.notFound=\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8ID {0} \u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3067\u3057\u305F planetGroups.prompt.add=\u30B0\u30EB\u30FC\u30D7\u3092\u4F5C\u6210\u3059\u308B\u306B\u306F\u3001\u30CB\u30E5\u30FC\u30B9\u30D5\u30A3\u30FC\u30C9URL\u3067\u4F7F\u7528\u3055\u308C\u308B\u8868\u793A\u540D\u304A\u3088\u3073\u30E6\u30CB\u30FC\u30AF\u30FB\u30CF\u30F3\u30C9\u30EB\u3092\u5165\u529B\u3057\u3066\u4FDD\u5B58\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002 mediaFileView.matchingResults=\u6761\u4EF6\u306B\u5408\u81F4\u3059\u308B {0} \u4EF6\u306E\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u3002 @@ -1408,9 +1395,7 @@ mediaFileView.filesNamed=\u540D\u524D\u304C {0} \u3067\u59CB\u307E\u308B\ editPages.remove.requiredTemplate=\u5FC5\u9808\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306F\u524A\u9664\u3067\u304D\u307E\u305B\u3093 user.account.activation.mail.subject=Roller\: \u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30B7\u30E7\u30F3\u30FB\u30B3\u30FC\u30C9 generic.error.check.logs=Roller\u30B7\u30B9\u30C6\u30E0\u30FB\u30A8\u30E9\u30FC - \u7BA1\u7406\u8005\u306BRoller\u306E\u30ED\u30B0\u306E\u78BA\u8A8D\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002 -oauthKeys.authorizationURL=\u8A8D\u53EFURL weblogEdit.scheduledEntry=\u30A8\u30F3\u30C8\u30EA\u30FC\u306E\u516C\u958B\u304C {0} \u306B\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u3055\u308C\u307E\u3057\u305F -yourWebsites.oauthKeys=OAuth\u8A8D\u8A3C\u60C5\u5831 weblogEdit.mediaCastLacksContentTypeOrLength=\u30A8\u30F3\u30AF\u30ED\u30FC\u30B8\u30E3URL\u3092\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u30B5\u30FC\u30D0\u306FContent-Type\u307E\u305F\u306FLength\u3092\u8FD4\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002 frontpageConfig.weblogs.error=\u30D6\u30ED\u30B0\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u4E2D\u306B\u4E88\u671F\u305B\u306C\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F pingTarget.created=Ping\u30BF\u30FC\u30B2\u30C3\u30C8 "{0}" \u304C\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F @@ -1423,12 +1408,10 @@ mediaFileEdit.tags=\u30BF\u30B0\uFF08\u30B9\u30DA\u30FC\u30B9\u3067\u5206\u5272\ macro.weblog.noEntriesForCategory=\u6307\u5B9A\u3055\u308C\u305F\u30AB\u30C6\u30B4\u30EA\u306B\u306F\u30A8\u30F3\u30C8\u30EA\u30FC\u304C\u3042\u308A\u307E\u305B\u3093 userAdmin.noPasswordForOpenID=OpenID\u3092\u6307\u5B9A\u3059\u308B\u5834\u5408\u306F\u3001\u30D1\u30B9\u30EF\u30FC\u30C9\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u7A7A\u767D\u306E\u307E\u307E\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 mediaFileAdd.errorUploading=\u30D5\u30A1\u30A4\u30EB {0} \u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F -oauthKeys.requestTokenURL=\u30EA\u30AF\u30A8\u30B9\u30C8\u30FB\u30C8\u30FC\u30AF\u30F3URL Register.error.timeZoneNull=\u30BF\u30A4\u30E0\u30BE\u30FC\u30F3\u306F\u5FC5\u9808\u9805\u76EE\u3067\u3059 mediaFileSuccess.selectEnclosure=RSS/Atom\u30A8\u30F3\u30AF\u30ED\u30FC\u30B8\u30E3\uFF08\u4F8B\uFF1APodcast\uFF09\u3068\u3057\u3066\u30A8\u30F3\u30C8\u30EA\u306B\u542B\u3081\u308B\u30D5\u30A1\u30A4\u30EB\u30921\u3064\uFF08\u307E\u305F\u306F\u3001\u306A\u3057\uFF09\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\: mediaFileSuccess.bytes=\u30D0\u30A4\u30C8 mediaFileView.moveSelected=\u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u30D5\u30A9\u30EB\u30C0\u306B\u79FB\u52D5\: -oauthKeys.urls=OAuth\u306EURL tabbedmenu.admin.planetGroupSubs=\u30B5\u30D6\u30B9\u30AF\u30EA\u30D7\u30B7\u30E7\u30F3 weblogEdit.submittedForReview=\u30A8\u30F3\u30C8\u30EA\u30FC\u304C\u30EC\u30D3\u30E5\u30FC\u3092\u53D7\u3051\u308B\u305F\u3081\u306B\u9001\u4FE1\u3055\u308C\u307E\u3057\u305F installer.upgradeTables=\u30C6\u30FC\u30D6\u30EB\u3092\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u3057\u307E\u3059\u304B? @@ -1437,7 +1420,6 @@ mediaFileSuccess.selectImages=\u65B0\u3057\u3044\u30A8\u30F3\u30C8\u30EA\u306B\u bookmarkForm.created=\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF "{0}" \u304C\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F installer.bannerTitleLeft=Apache Roller Weblogger stylesheetEdit.confirmRevert=\u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u3092\u30C6\u30FC\u30DE\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u306B\u623B\u3057\u3066\u3088\u308D\u3057\u3044\u3067\u3059\u304B? -oauthKeys.consumerSecret=\u30B3\u30F3\u30B7\u30E5\u30FC\u30DE\u30FC\u30FB\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8 categoryForm.removed=\u30AB\u30C6\u30B4\u30EA "{0}" \u304C\u524A\u9664\u3055\u308C\u307E\u3057\u305F maintenance.message.indexed.failure=\u691C\u7D22\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u518D\u69CB\u7BC9\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F - \u30B7\u30B9\u30C6\u30E0\u30FB\u30ED\u30B0\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044 bookmarksForm.selectAllLabel=\u3059\u3079\u3066\u306E\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u3092\u9078\u629E @@ -1450,6 +1432,5 @@ userSettings.tip.username=\u30E6\u30FC\u30B6\u540D\u306F\u5909\u66F4\u3067\u304D installer.heresTheStackTrace=\u30C7\u30D0\u30C3\u30B0\u306E\u52A9\u3051\u3068\u306A\u308B\u3001\u4F8B\u5916\u306E\u30B9\u30BF\u30C3\u30AF\u30C8\u30EC\u30FC\u30B9\u306F\u3053\u3061\u3089\: weblogEntry.pendingEntrySubject=Roller\: \u30D6\u30ED\u30B0 "{0}" \u306E\u65B0\u3057\u3044\u30EC\u30D3\u30E5\u30FC\u5F85\u3061\u306E\u6295\u7A3F ({1}) frontpageConfig.frontpageBlogName=\u30D5\u30ED\u30F3\u30C8\u30FB\u30DA\u30FC\u30B8\u30FB\u30D6\u30ED\u30B0\u306E\u540D\u524D -oauthAuthorize.description=\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8 {0} \u306BOAuth\u30A2\u30AF\u30BB\u30B9\u3092\u8A8D\u53EF\u3057\u307E\u3059\u304B? weblogEntryQuery.date.toStringFormat={0,date,yy/MM/dd HH:mm} commentManagement.date.toStringFormat={0,date,yy/MM/dd HH:mm} diff --git a/app/src/main/resources/ApplicationResources_zh_CN.properties b/app/src/main/resources/ApplicationResources_zh_CN.properties index 93ac844968..49a4edb32d 100644 --- a/app/src/main/resources/ApplicationResources_zh_CN.properties +++ b/app/src/main/resources/ApplicationResources_zh_CN.properties @@ -337,7 +337,7 @@ configForm.editorPages=\u7F16\u8F91\u5668\u9875\u9762 configForm.webServicesSettings=Web\u670D\u52A1\u8BBE\u7F6E configForm.enableAtomPub=\u542F\u7528 Atom \u53D1\u5E03\u534F\u8BAE -configForm.AtomPubAuth=AtomPub \u8BA4\u8BC1\u65B9\u5F0F (basic / oauth / wsse) +configForm.AtomPubAuth=AtomPub \u8BA4\u8BC1\u65B9\u5F0F (basic / wsse) configForm.enableXmlRpc=\u542F\u7528 Blogger / MetaWeblog API configForm.weblogSettings=\u535A\u5BA2\u663E\u793A\u8BBE\u7F6E @@ -940,37 +940,6 @@ navigationBar.logout=\u6CE8\u9500 navigationBar.login=\u767B\u5F55 navigationBar.register=\u6CE8\u518C -# ----------------------------------------------------------------- OAuth pages - -oauthKeys.title=OAuth\u5BC6\u94A5 -oauthKeys.description=\u4F60\u7684\u8D26\u6237{0}\u4F7F\u7528\u7684OAuth\u5BC6\u94A5 -oauthKeys.tip=\u4F60\u53EF\u4EE5\u6388\u6743\u5176\u4ED6\u652F\u6301OAuth\u7684\u7AD9\u70B9\u548C\u5BA2\u6237\u7AEF\u7A0B\u5E8F\u767B\u5F55\u4F60\u7684\u8D26\u53F7\u53D1\u5E03\u548C\u7F16\u8F91\u6587\u7AE0\u3002 - - -oauthKeys.consumerKey=\u5BA2\u6237\u79C1\u94A5 -oauthKeys.consumerSecret=\u5BA2\u6237\u5BC6\u94A5 -oauthKeys.userKeys=\u7528\u6237\u6307\u5B9A\u7684\u5BC6\u94A5 -oauthKeys.userKeysTip=\u8FD9\u4E9B\u5BC6\u94A5\u4E0E\u4F60\u7684\u8D26\u6237\u76F8\u5173\u8054\uFF0C\u53EF\u4EE5\u7528\u6765\u6388\u6743\u5BA2\u6237\u7AEF\u7A0B\u5E8F\u767B\u5F55\u4F60\u7684\u8D26\u53F7\u3002 - -oauthKeys.siteWideKeys=\u5168\u7AD9\u8303\u56F4\u5BC6\u94A5 -oauthKeys.siteWideKeysTip=\u7531\u4E8E\u4F60\u662F\u8D85\u7EA7\u7BA1\u7406\u5458\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528\u5168\u7AD9\u8303\u56F4\u5BC6\u94A5\u3002\u4F60\u53EF\u4EE5\u5C06\u5176\u7ED9\u4E88\u5176\u4ED6\u9700\u8981\u767B\u5F55\u672C\u7AD9\u8D26\u53F7\u7684\u7AD9\u70B9\u3002 - - - -oauthKeys.urls=OAuth\u8BA4\u8BC1URL -oauthKeys.urlsTip=\u8FD9\u662F\u4F60\u7684\u5BA2\u6237\u7AEF\u7A0B\u5E8F\u767B\u5F55\u535A\u5BA2\u8D26\u6237\u65F6\u9700\u8981\u4F7F\u7528\u7684OAuth\u8BA4\u8BC1URL\u3002 - -oauthKeys.requestTokenURL=\u8BF7\u6C42\u6807\u8BC6URL -oauthKeys.authorizationURL=\u8BA4\u8BC1URL -oauthKeys.accessTokenURL=\u8BBF\u95EE\u6807\u8BC6URL - - -oauthAuthorize.title=OAuth\u8BA4\u8BC1 -oauthAuthorize.description=\u786E\u5B9A\u8981\u5141\u8BB8OAuth\u8BA4\u8BC1\u5BA2\u6237\u7AEF\u8BBF\u95EE{0}\u8D26\u53F7\u5417\uFF1F -oauthAuthorize.tip=\u6709\u67D0\u4E2A\u7AD9\u70B9\u8BF7\u6C42\u8BBF\u95EE\u4F60\u7684\u8D26\u53F7\u3002\u8BF7\u70B9\u51FB\u4EE5\u4E0B\u6309\u94AE\u4EE5\u5141\u8BB8\u8BBF\u95EE\u6216\u5173\u95ED\u7A97\u53E3\u4EE5\u62D2\u7EDD\u8BBF\u95EE\u3002 - - - # -------------------------------------------------------------- Page management pagesForm.title=\u9875\u9762\u6A21\u677F @@ -1841,10 +1810,6 @@ yourWebsites.createWeblog.desc=\u4F60\u8FD8\u6709\u66F4\u591A\u60F3\u8981\u8868\ yourWebsites.editProfile=\u7F16\u8F91\u7528\u6237\u4FE1\u606F yourWebsites.editProfile.desc=\u4FEE\u6539\u5BC6\u7801\u3001\u8054\u7CFB\u4FE1\u606F\u6216\u754C\u9762\u8BED\u8A00\u3002 -yourWebsites.oauthKeys=OAuth\u51ED\u8BC1 -yourWebsites.oauthKeys.desc=\u5141\u8BB8\u5176\u4ED6\u7AD9\u70B9\u548C\u7A0B\u5E8F\u8FDC\u7A0B\u8BBF\u95EE\u4F60\u7684\u8D26\u53F7\u3002 - - yourWebsites.globalAdmin=\u670D\u52A1\u5668\u7BA1\u7406 yourWebsites.globalAdmin.desc=\u8FDB\u884C\u5168\u7AD9\u8303\u56F4\u7684\u7BA1\u7406\u64CD\u4F5C\u3002 diff --git a/app/src/main/resources/META-INF/persistence.xml b/app/src/main/resources/META-INF/persistence.xml index 199c87280b..e27c7b43ff 100644 --- a/app/src/main/resources/META-INF/persistence.xml +++ b/app/src/main/resources/META-INF/persistence.xml @@ -1,5 +1,8 @@ - + + "-//Apache Software Foundation//DTD Struts Configuration 6.5//EN" + "https://struts.apache.org/dtds/struts-6.5.dtd"> + + + + + + + + + @@ -47,14 +63,16 @@ - + + - + @@ -137,18 +155,6 @@ execute,save - - .OAuthKeys - execute - - - - .OAuthAuthorize - execute - - .CreateWeblog diff --git a/app/src/main/webapp/WEB-INF/jsps/core/MainMenuSidebar.jsp b/app/src/main/webapp/WEB-INF/jsps/core/MainMenuSidebar.jsp index 29cbb23d1b..b70cc1eeb0 100644 --- a/app/src/main/webapp/WEB-INF/jsps/core/MainMenuSidebar.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/core/MainMenuSidebar.jsp @@ -34,14 +34,6 @@ ">

- <%-- Edit profile --%> - - -

- ">

-

-
- <%-- Create weblog --%> diff --git a/app/src/main/webapp/WEB-INF/jsps/core/OAuthAuthorize.jsp b/app/src/main/webapp/WEB-INF/jsps/core/OAuthAuthorize.jsp deleted file mode 100644 index bc63ca2a42..0000000000 --- a/app/src/main/webapp/WEB-INF/jsps/core/OAuthAuthorize.jsp +++ /dev/null @@ -1,40 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. The ASF licenses this file to You - under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. For additional information regarding - copyright in this work, please see the NOTICE file in the top level - directory of this distribution. ---%> -<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> - -

- - - -

- -

- - - -

- -
- " size="20" />
- - - -
- - - diff --git a/app/src/main/webapp/WEB-INF/jsps/core/OAuthKeys.jsp b/app/src/main/webapp/WEB-INF/jsps/core/OAuthKeys.jsp deleted file mode 100644 index 778c73d039..0000000000 --- a/app/src/main/webapp/WEB-INF/jsps/core/OAuthKeys.jsp +++ /dev/null @@ -1,72 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. The ASF licenses this file to You - under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. For additional information regarding - copyright in this work, please see the NOTICE file in the top level - directory of this distribution. ---%> -<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> - -

- - - -

- -

- -

- - -

- -

- -

: -

- -

: -

- - - - -

- -

- -

: -

- -

: -

- -
- - -

- -

- -

: -

- -

: -

- -

: -

- -
- -" onclick="window.location=''" /> diff --git a/app/src/main/webapp/WEB-INF/jsps/taglibs-struts2.jsp b/app/src/main/webapp/WEB-INF/jsps/taglibs-struts2.jsp index 97d46374e3..d3a0a956f7 100644 --- a/app/src/main/webapp/WEB-INF/jsps/taglibs-struts2.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/taglibs-struts2.jsp @@ -26,7 +26,6 @@ <%@ taglib uri="http://jakarta.apache.org/taglibs/string-1.1" prefix="str" %> <%@ taglib uri="/struts-tags" prefix="s" %> -<%@ taglib uri="/struts-bootstrap-tags" prefix="sboo" %> <%@ taglib tagdir="/WEB-INF/tags" prefix="tags" %> diff --git a/app/src/main/webapp/WEB-INF/security.xml b/app/src/main/webapp/WEB-INF/security.xml index 18ed9206a2..68a6644b23 100644 --- a/app/src/main/webapp/WEB-INF/security.xml +++ b/app/src/main/webapp/WEB-INF/security.xml @@ -28,14 +28,17 @@ - - - - - - - - + + + + + + + + + + - - @@ -57,25 +58,15 @@ - - - - - - - - - - + @@ -91,18 +82,6 @@ class="org.apache.roller.weblogger.ui.core.security.RollerRememberMeAuthenticationProvider"> - - - - - - - - - - - diff --git a/app/src/main/webapp/WEB-INF/tiles.xml b/app/src/main/webapp/WEB-INF/tiles.xml index f25bb52e10..c63b076559 100644 --- a/app/src/main/webapp/WEB-INF/tiles.xml +++ b/app/src/main/webapp/WEB-INF/tiles.xml @@ -16,9 +16,9 @@ copyright in this work, please see the NOTICE file in the top level directory of this distribution. --> - + @@ -115,14 +115,6 @@ - - - - - - - - diff --git a/app/src/main/webapp/WEB-INF/web.xml b/app/src/main/webapp/WEB-INF/web.xml index 0418832da1..275cb27229 100644 --- a/app/src/main/webapp/WEB-INF/web.xml +++ b/app/src/main/webapp/WEB-INF/web.xml @@ -1,8 +1,8 @@ - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" + version="6.0"> Roller Weblogger @@ -12,7 +12,7 @@ - javax.servlet.jsp.jstl.fmt.localizationContext + jakarta.servlet.jsp.jstl.fmt.localizationContext ApplicationResources @@ -267,7 +267,7 @@ AtomServlet - com.rometools.propono.atom.server.AtomServlet + org.apache.roller.weblogger.webservices.atomprotocol.RollerAtomServlet @@ -292,7 +292,7 @@ XmlRpcServlet - org.apache.xmlrpc.webserver.XmlRpcServlet + org.apache.roller.weblogger.webservices.xmlrpc.RollerXmlRpcServlet Sets whether the servlet supports vendor extensions for XML-RPC. @@ -302,46 +302,6 @@ - - WebjarsServlet - org.webjars.servlet.WebjarsServlet - 2 - - - - - - RequestTokenServlet - org.apache.roller.weblogger.webservices.oauth.RequestTokenServlet - - - - AuthorizationServlet - org.apache.roller.weblogger.webservices.oauth.AuthorizationServlet - - - - AccessTokenServlet - org.apache.roller.weblogger.webservices.oauth.AccessTokenServlet - - - - RequestTokenServlet - /roller-services/oauth/requestToken - - - - AuthorizationServlet - /roller-services/oauth/authorize - - - - AccessTokenServlet - /roller-services/oauth/accessToken - - - - PageServlet @@ -442,11 +402,6 @@ /roller-services/opensearch/* - - WebjarsServlet - /webjars/* - - 30 @@ -496,7 +451,7 @@ mail/Session - javax.mail.Session + jakarta.mail.Session Container Session diff --git a/app/src/main/webapp/roller-ui/errors/403.jsp b/app/src/main/webapp/roller-ui/errors/403.jsp index 06c8194f7a..a476f40895 100644 --- a/app/src/main/webapp/roller-ui/errors/403.jsp +++ b/app/src/main/webapp/roller-ui/errors/403.jsp @@ -29,9 +29,9 @@

- - - + + + diff --git a/app/src/main/webapp/roller-ui/errors/404.jsp b/app/src/main/webapp/roller-ui/errors/404.jsp index 33b01730fe..5ee7ba1ded 100644 --- a/app/src/main/webapp/roller-ui/errors/404.jsp +++ b/app/src/main/webapp/roller-ui/errors/404.jsp @@ -31,9 +31,9 @@

- - - + + +
diff --git a/app/src/main/webapp/roller-ui/errors/error.jsp b/app/src/main/webapp/roller-ui/errors/error.jsp index ea17811662..aba8881ebe 100644 --- a/app/src/main/webapp/roller-ui/errors/error.jsp +++ b/app/src/main/webapp/roller-ui/errors/error.jsp @@ -31,10 +31,10 @@

- - - - + + + +
diff --git a/app/src/main/webapp/roller-ui/logout-redirect.jsp b/app/src/main/webapp/roller-ui/logout-redirect.jsp index 45211b9eb6..e7023f4b48 100644 --- a/app/src/main/webapp/roller-ui/logout-redirect.jsp +++ b/app/src/main/webapp/roller-ui/logout-redirect.jsp @@ -17,7 +17,7 @@ --%> <%@ page language="java" contentType="text/html; charset=UTF-8" %> <%@ page import="org.apache.roller.weblogger.ui.core.RollerSession" %> -<%@ page import="javax.servlet.http.Cookie" %> +<%@ page import="jakarta.servlet.http.Cookie" %> <%@ page import="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices" %> <% diff --git a/app/src/test/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerTest.java b/app/src/test/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerTest.java deleted file mode 100644 index 0b2ab39bfc..0000000000 --- a/app/src/test/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. The ASF licenses this file to You -* under the Apache License, Version 2.0 (the "License"); you may not -* use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. For additional information regarding -* copyright in this work, please see the NOTICE file in the top level -* directory of this distribution. -*/ - -package org.apache.roller.weblogger.business.jpa; - -import net.oauth.OAuthAccessor; -import net.oauth.OAuthConsumer; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.roller.weblogger.TestUtils; -import org.apache.roller.weblogger.business.WebloggerFactory; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -/** - * Test Weblogger Bookmark Management. - */ -public class JPAOAuthManagerTest { - public static Log log = LogFactory.getLog(JPAOAuthManagerTest.class); - - @BeforeEach - public void setUp() throws Exception { - - // setup weblogger - TestUtils.setupWeblogger(); - - try { - TestUtils.endSession(true); - } catch (Exception ex) { - log.error(ex); - throw new Exception("Test setup failed", ex); - } - } - - @AfterEach - public void tearDown() throws Exception { - - try { - TestUtils.endSession(true); - } catch (Exception ex) { - log.error("ERROR in tearDown", ex); - throw new Exception("Test teardown failed", ex); - } - } - - @Test - public void testCRUD() throws Exception { - JPAOAuthManagerImpl omgr = (JPAOAuthManagerImpl) - WebloggerFactory.getWeblogger().getOAuthManager(); - - String consumerKey = "1111"; - OAuthConsumer consumer = omgr.addConsumer("dummyusername", consumerKey); - TestUtils.endSession(true); - - consumer = omgr.getConsumerByKey(consumer.consumerKey); - assertNotNull(consumer); - assertEquals(consumerKey, consumer.consumerKey); - - OAuthAccessor accessor = new OAuthAccessor(consumer); - accessor.setProperty("userId", "dummyusername"); - omgr.addAccessor(accessor); - TestUtils.endSession(true); - - accessor = omgr.getAccessorByKey(consumerKey); - assertNotNull(accessor); - - omgr.removeAccessor(accessor); - TestUtils.endSession(true); - assertNull(omgr.getAccessorByKey(consumerKey)); - - omgr.removeConsumer(consumer); - TestUtils.endSession(true); - assertNull(omgr.getConsumerByKey(consumerKey)); - } -} diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/core/RollerSessionTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/core/RollerSessionTest.java index ea8522f933..5fde0cc060 100644 --- a/app/src/test/java/org/apache/roller/weblogger/ui/core/RollerSessionTest.java +++ b/app/src/test/java/org/apache/roller/weblogger/ui/core/RollerSessionTest.java @@ -10,8 +10,8 @@ import org.mockito.MockedStatic; import org.mockito.MockitoAnnotations; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import java.security.Principal; import static org.junit.jupiter.api.Assertions.*; diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilterTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilterTest.java index 5ace927a27..47f2f21715 100644 --- a/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilterTest.java +++ b/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilterTest.java @@ -9,9 +9,9 @@ import org.mockito.MockedStatic; import org.mockito.MockitoAnnotations; -import javax.servlet.FilterChain; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import static org.mockito.Mockito.*; diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilterTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilterTest.java index ab866d080a..0058e2a98a 100644 --- a/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilterTest.java +++ b/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilterTest.java @@ -10,11 +10,11 @@ import org.mockito.MockedStatic; import org.mockito.MockitoAnnotations; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.*; diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModelTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModelTest.java index 1ca19b1161..07da2b7b9b 100644 --- a/app/src/test/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModelTest.java +++ b/app/src/test/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModelTest.java @@ -23,7 +23,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.TestUtils; diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModelTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModelTest.java index 9c38e3bda7..c0886fd834 100644 --- a/app/src/test/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModelTest.java +++ b/app/src/test/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModelTest.java @@ -25,7 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.TestUtils; diff --git a/app/src/test/resources/jetty.xml b/app/src/test/resources/jetty.xml index a31ca4c6d5..42894d4c18 100644 --- a/app/src/test/resources/jetty.xml +++ b/app/src/test/resources/jetty.xml @@ -1,4 +1,5 @@ + - - + - + jdbc/rollerdb - + org.apache.derby.jdbc.ClientDriver jdbc:derby://localhost:4224/memory:rollerdb;create=true app @@ -36,17 +36,17 @@ - + mail/Session - - + + + mail - true - - + + diff --git a/app/src/test/resources/roller-jettyrun.properties b/app/src/test/resources/roller-jettyrun.properties index b4a15f6020..4a480a97f2 100644 --- a/app/src/test/resources/roller-jettyrun.properties +++ b/app/src/test/resources/roller-jettyrun.properties @@ -1,6 +1,7 @@ # used during mvn jetty:run, not Roller testing (mvn test) -installation.type=auto +# creates the schema during startup so jetty:run comes up ready to use +installation.type=ittest planet.aggregator.enabled=true database.configurationType=jdbc @@ -49,3 +50,13 @@ cache.sitewide.enabled=false cache.weblogpage.enabled=false cache.weblogfeed.enabled=false cache.planet.enabled=false + +# Authentication defaults to Roller's own user database, which needs no extra +# services. To develop against OIDC instead, start Keycloak with +# "docker compose up -d keycloak", add "127.0.0.1 keycloak" to your hosts file +# so the issuer resolves the same here and in the browser, then uncomment: +#authentication.method=oidc +#oidc.keycloak.client-id=web_app +#oidc.keycloak.client-secret=web_app +#oidc.keycloak.issuer-uri=http://keycloak:9080/realms/roller +#oidc.keycloak.client-name=Keycloak diff --git a/docker-compose.yml b/docker-compose.yml index ba5c7b8d4b..db6aec6cf2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,17 +19,18 @@ # Example Docker Compose setup for running Roller and PostgreSQL locally -version: '3.7' - services: postgresql: - image: "postgres:10.0" + image: "postgres:16" ports: - "5432:5432" volumes: - type: bind - source: ./docker/postgresql-data + # PostgreSQL 16 cannot start on a data directory initialized by the + # PostgreSQL 10 image this file used before; a new directory avoids + # clobbering old data (pg_dump from the old container to migrate it) + source: ./docker/postgresql-16-data target: /var/lib/postgresql/data environment: - POSTGRES_DB=rollerdb diff --git a/it-selenium/logs/roller-2026-08-11-165858.log.gz b/it-selenium/logs/roller-2026-08-11-165858.log.gz new file mode 100644 index 0000000000..e2821388dc Binary files /dev/null and b/it-selenium/logs/roller-2026-08-11-165858.log.gz differ diff --git a/it-selenium/logs/roller-2026-08-11-165926.log.gz b/it-selenium/logs/roller-2026-08-11-165926.log.gz new file mode 100644 index 0000000000..e1bcf851e9 Binary files /dev/null and b/it-selenium/logs/roller-2026-08-11-165926.log.gz differ diff --git a/it-selenium/logs/roller-2026-08-11-170101.log.gz b/it-selenium/logs/roller-2026-08-11-170101.log.gz new file mode 100644 index 0000000000..91e92b1574 Binary files /dev/null and b/it-selenium/logs/roller-2026-08-11-170101.log.gz differ diff --git a/it-selenium/logs/roller-2026-08-11-170125.log.gz b/it-selenium/logs/roller-2026-08-11-170125.log.gz new file mode 100644 index 0000000000..327e1cd272 Binary files /dev/null and b/it-selenium/logs/roller-2026-08-11-170125.log.gz differ diff --git a/it-selenium/logs/roller-2026-08-11-170214.log.gz b/it-selenium/logs/roller-2026-08-11-170214.log.gz new file mode 100644 index 0000000000..f178c876b7 Binary files /dev/null and b/it-selenium/logs/roller-2026-08-11-170214.log.gz differ diff --git a/it-selenium/logs/roller-2026-08-11-170353.log.gz b/it-selenium/logs/roller-2026-08-11-170353.log.gz new file mode 100644 index 0000000000..0fb7908c95 Binary files /dev/null and b/it-selenium/logs/roller-2026-08-11-170353.log.gz differ diff --git a/it-selenium/logs/roller-2026-08-11-170505.log.gz b/it-selenium/logs/roller-2026-08-11-170505.log.gz new file mode 100644 index 0000000000..26375c9a62 Binary files /dev/null and b/it-selenium/logs/roller-2026-08-11-170505.log.gz differ diff --git a/it-selenium/logs/roller-2026-08-11-170652.log.gz b/it-selenium/logs/roller-2026-08-11-170652.log.gz new file mode 100644 index 0000000000..7b39b59503 Binary files /dev/null and b/it-selenium/logs/roller-2026-08-11-170652.log.gz differ diff --git a/it-selenium/logs/roller.log b/it-selenium/logs/roller.log new file mode 100644 index 0000000000..e76ced3553 --- /dev/null +++ b/it-selenium/logs/roller.log @@ -0,0 +1,199 @@ +INFO 2026-08-11 17:08:26 [main] ContextLoader - Root WebApplicationContext: initialization started +INFO 2026-08-11 17:08:27 [main] SpringSecurityCoreVersion - You are running with Spring Security Core 7.0.6 +INFO 2026-08-11 17:08:27 [main] HttpSecurityBeanDefinitionParser - Checking sorted filter chain: [Root bean: class=org.springframework.security.web.session.DisableEncodeUrlFilter; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null, order = 100, Root bean: class=org.springframework.security.web.context.SecurityContextHolderFilter; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null, order = 500, Root bean: class=org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null, order = 700, Root bean: class=org.springframework.security.web.header.HeaderWriterFilter; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null, order = 800, , order = 2200, Root bean: class=org.springframework.security.web.savedrequest.RequestCacheAwareFilter; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null, order = 2900, Root bean: class=null; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=org.springframework.security.config.http.HttpConfigurationBuilder$SecurityContextHolderAwareRequestFilterBeanFactory#0; factoryMethodName=getBean; initMethodNames=null; destroyMethodNames=null, order = 3000, Root bean: class=org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null, order = 3200, Root bean: class=org.springframework.security.web.authentication.AnonymousAuthenticationFilter; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null, order = 3300, Root bean: class=org.springframework.security.web.access.ExceptionTranslationFilter; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null, order = 3700, , order = 3800] +INFO 2026-08-11 17:08:27 [main] DefaultFilterChainValidator - Checking whether login URL '/roller-ui/login.rol' is accessible with your configuration +INFO 2026-08-11 17:08:27 [main] ContextLoader - Root WebApplicationContext initialized in 215 ms +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - SUCCESS: Got parameters. Using configuration type JDBC_PROPERTIES +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - -- Using JDBC driver class: org.apache.derby.jdbc.ClientDriver +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - -- Using JDBC connection URL: jdbc:derby://localhost:4224/memory:rollerdb;create=true +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - -- Using JDBC username: app +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - -- Using JDBC password: [hidden] +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - SUCCESS: loaded JDBC driver class [org.apache.derby.jdbc.ClientDriver] +WARN 2026-08-11 17:08:27 [main] WebloggerStartup - Failed to setup mail provider, continuing anyways. +Reason: ERROR connecting to mail server +INFO 2026-08-11 17:08:27 [main] WebloggerStartup - The cause of setting up mail provider error was: +org.apache.roller.weblogger.business.startup.StartupException: ERROR connecting to mail server + at org.apache.roller.weblogger.business.MailProvider.(MailProvider.java:99) ~[classes/:?] + at org.apache.roller.weblogger.business.startup.WebloggerStartup.prepare(WebloggerStartup.java:177) ~[classes/:?] + at org.apache.roller.weblogger.ui.core.RollerContext.contextInitialized(RollerContext.java:154) ~[classes/:?] + at org.eclipse.jetty.ee10.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:1591) ~[jetty-ee10-servlet-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.servlet.ServletContextHandler.contextInitialized(ServletContextHandler.java:500) ~[jetty-ee10-servlet-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.servlet.ServletHandler.initialize(ServletHandler.java:676) ~[jetty-ee10-servlet-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.servlet.ServletContextHandler.startContext(ServletContextHandler.java:1325) ~[jetty-ee10-servlet-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.webapp.WebAppContext.startWebapp(WebAppContext.java:1350) ~[jetty-ee10-webapp-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.webapp.WebAppContext.startContext(WebAppContext.java:1308) ~[jetty-ee10-webapp-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.servlet.ServletContextHandler.lambda$doStart$0(ServletContextHandler.java:1051) ~[jetty-ee10-servlet-12.0.21.jar:12.0.21] + at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1463) [jetty-server-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.servlet.ServletContextHandler.doStart(ServletContextHandler.java:1048) [jetty-ee10-servlet-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.webapp.WebAppContext.doStart(WebAppContext.java:504) [jetty-ee10-webapp-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.maven.plugin.MavenWebAppContext.doStart(MavenWebAppContext.java:312) [jetty-ee10-maven-plugin-12.0.21.jar:12.0.21] + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93) [jetty-util-12.0.21.jar:12.0.21] + at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) [jetty-util-12.0.21.jar:12.0.21] + at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:120) [jetty-util-12.0.21.jar:12.0.21] + at org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:491) [jetty-server-12.0.21.jar:12.0.21] + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93) [jetty-util-12.0.21.jar:12.0.21] + at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) [jetty-util-12.0.21.jar:12.0.21] + at org.eclipse.jetty.server.Server.start(Server.java:643) [jetty-server-12.0.21.jar:12.0.21] + at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:120) [jetty-util-12.0.21.jar:12.0.21] + at org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:491) [jetty-server-12.0.21.jar:12.0.21] + at org.eclipse.jetty.server.Server.doStart(Server.java:584) [jetty-server-12.0.21.jar:12.0.21] + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93) [jetty-util-12.0.21.jar:12.0.21] + at org.eclipse.jetty.maven.AbstractJettyEmbedder.doStart(AbstractJettyEmbedder.java:206) [jetty-maven-12.0.21.jar:12.0.21] + at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93) [jetty-util-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.maven.plugin.JettyStartMojo.startJettyEmbedded(JettyStartMojo.java:53) [jetty-ee10-maven-plugin-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.maven.plugin.AbstractWebAppMojo.startJetty(AbstractWebAppMojo.java:451) [jetty-ee10-maven-plugin-12.0.21.jar:12.0.21] + at org.eclipse.jetty.ee10.maven.plugin.AbstractWebAppMojo.execute(AbstractWebAppMojo.java:429) [jetty-ee10-maven-plugin-12.0.21.jar:12.0.21] + at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:328) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:316) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:174) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:75) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:162) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:159) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:73) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:53) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:118) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:261) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101) [maven-core-3.9.8.jar:3.9.8] + at org.apache.maven.cli.MavenCli.execute(MavenCli.java:903) [maven-embedder-3.9.8.jar:3.9.8] + at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:280) [maven-embedder-3.9.8.jar:3.9.8] + at org.apache.maven.cli.MavenCli.main(MavenCli.java:203) [maven-embedder-3.9.8.jar:3.9.8] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] + at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:255) [plexus-classworlds-2.8.0.jar:?] + at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:201) [plexus-classworlds-2.8.0.jar:?] + at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:361) [plexus-classworlds-2.8.0.jar:?] + at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:314) [plexus-classworlds-2.8.0.jar:?] +INFO 2026-08-11 17:08:27 [main] DatabaseInstaller - Creating Roller Weblogger database tables. +INFO 2026-08-11 17:08:27 [main] WebloggerFactory - Bootstrapping Roller Weblogger business tier +INFO 2026-08-11 17:08:27 [main] WebloggerFactory - Weblogger Provider = org.apache.roller.weblogger.business.GuiceWebloggerProvider +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - SUCCESS: Got parameters. Using configuration type JDBC_PROPERTIES +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - -- Using JDBC driver class: org.apache.derby.jdbc.ClientDriver +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - -- Using JDBC connection URL: jdbc:derby://localhost:4224/memory:rollerdb;create=true +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - -- Using JDBC username: app +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - -- Using JDBC password: [hidden] +INFO 2026-08-11 17:08:27 [main] DatabaseProvider - SUCCESS: loaded JDBC driver class [org.apache.derby.jdbc.ClientDriver] +INFO 2026-08-11 17:08:27 [main] JPAPersistenceStrategy - hibernate.transaction.factory_class: org.hibernate.transaction.JDBCTransactionFactory +INFO 2026-08-11 17:08:27 [main] JPAPersistenceStrategy - eclipselink.logging.logger: org.eclipse.persistence.logging.slf4j.SLF4JLogger +INFO 2026-08-11 17:08:27 [main] JPAPersistenceStrategy - hibernate.dialect: org.hibernate.dialect.DerbyDialect +INFO 2026-08-11 17:08:27 [main] JPAPersistenceStrategy - eclipselink.persistence-context.flush-mode: auto +INFO 2026-08-11 17:08:27 [main] JPAPersistenceStrategy - hibernate.transaction.manager_lookup_class: org.hibernate.transaction.JBossTransactionManagerLookup +INFO 2026-08-11 17:08:28 [main] LuceneIndexManager - search enabled: true +INFO 2026-08-11 17:08:28 [main] LuceneIndexManager - index dir: target/work/search-index +INFO 2026-08-11 17:08:28 [main] PluginManagerImpl - Configured comment plugins +INFO 2026-08-11 17:08:28 [main] PluginManagerImpl - [class org.apache.roller.weblogger.business.plugins.comment.LinkMarkupPlugin,class org.apache.roller.weblogger.business.plugins.comment.AutoformatPlugin,class org.apache.roller.weblogger.business.plugins.comment.HTMLSubsetPlugin] +INFO 2026-08-11 17:08:28 [main] ThreadManagerImpl - Instantiating Thread Manager +INFO 2026-08-11 17:08:28 [main] WebloggerFactory - Roller Weblogger business tier successfully bootstrapped +INFO 2026-08-11 17:08:28 [main] WebloggerFactory - Version: 6.1.5 +INFO 2026-08-11 17:08:28 [main] WebloggerFactory - Revision: r191ff819fc60942eca485f3de3c356dce54f6441 +INFO 2026-08-11 17:08:28 [main] WebloggerImpl - Initializing Roller Weblogger business tier +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.name not yet in roller_properties database table, will store with default value of [Roller Site`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.shortName not yet in roller_properties database table, will store with default value of [Front Page`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.description not yet in roller_properties database table, will store with default value of [A default install of the Roller Weblogger open source blog server`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.frontpage.weblog.handle not yet in roller_properties database table, will store with default value of [`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.frontpage.weblog.aggregated not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.adminemail not yet in roller_properties database table, will store with default value of [`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.absoluteurl not yet in roller_properties database table, will store with default value of [`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property pings.suspendPingProcessing not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.registration.enabled not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property user.account.email.activation not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.registration.url not yet in roller_properties database table, will store with default value of [`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.allowUserWeblogCreation not yet in roller_properties database table, will store with default value of [true`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.editor.pages not yet in roller_properties database table, will store with default value of [editor-text.jsp,editor-summernote.jsp`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property webservices.enableXmlRpc not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property webservices.enableAtomPub not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property webservices.atomPubAuth not yet in roller_properties database table, will store with default value of [basic`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.pages.maxEntries not yet in roller_properties database table, will store with default value of [30`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.newsfeeds.defaultEntries not yet in roller_properties database table, will store with default value of [30`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.newsfeeds.styledFeeds not yet in roller_properties database table, will store with default value of [true`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.comments.enabled not yet in roller_properties database table, will store with default value of [true`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property comments.ignoreSpam.enabled not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.trackbacks.enabled not yet in roller_properties database table, will store with default value of [true`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property trackbacks.ignoreSpam.enabled not yet in roller_properties database table, will store with default value of [true`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.comments.htmlenabled not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.comments.plugins not yet in roller_properties database table, will store with default value of [HTMLSubset`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.comments.emailnotify not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.moderation.required not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property site.trackbackVerification.enabled not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property uploads.enabled not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property uploads.types.allowed not yet in roller_properties database table, will store with default value of [`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property uploads.types.forbid not yet in roller_properties database table, will store with default value of [exe`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property uploads.file.maxsize not yet in roller_properties database table, will store with default value of [2.00`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property uploads.dir.maxsize not yet in roller_properties database table, will store with default value of [20.00`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property users.themes.path not yet in roller_properties database table, will store with default value of [/themes`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property themes.customtheme.allowed not yet in roller_properties database table, will store with default value of [false`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property spam.bannedwordslist not yet in roller_properties database table, will store with default value of [`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property analytics.default.tracking.code not yet in roller_properties database table, will store with default value of [`] +INFO 2026-08-11 17:08:28 [main] JPAPropertiesManagerImpl - Property analytics.code.override.allowed not yet in roller_properties database table, will store with default value of [true`] +INFO 2026-08-11 17:08:28 [main] ThemeManagerImpl - Loading themes from /Users/mraible/dev/roller-jakarta-check/it-selenium/target/war/work/org.apache.roller/roller-webapp/themes... +INFO 2026-08-11 17:08:28 [main] ThemeManagerImpl - Loaded theme 'basic' +INFO 2026-08-11 17:08:28 [main] ThemeManagerImpl - Loaded theme 'basicmobile' +INFO 2026-08-11 17:08:28 [main] ThemeManagerImpl - Loaded theme 'gaurav' +INFO 2026-08-11 17:08:28 [main] ThemeManagerImpl - Loaded theme 'fauxcoly' +INFO 2026-08-11 17:08:28 [main] ThemeManagerImpl - Loaded theme 'frontpage' +INFO 2026-08-11 17:08:28 [main] ThemeManagerImpl - Successfully loaded 5 themes from disk. +INFO 2026-08-11 17:08:28 [main] ThreadManagerImpl - Initializing task: ScheduledEntriesTask +INFO 2026-08-11 17:08:28 [main] ThreadManagerImpl - Initializing task: ResetHitCountsTask +INFO 2026-08-11 17:08:28 [main] ThreadManagerImpl - Initializing task: PingQueueTask +INFO 2026-08-11 17:08:28 [main] ThreadManagerImpl - Initializing task: TestTask +INFO 2026-08-11 17:08:28 [main] LuceneIndexManager - Index initialized and ready for use. +INFO 2026-08-11 17:08:28 [main] PingConfig - Creating common ping target 'Technorati' from configuration properties. +INFO 2026-08-11 17:08:28 [main] PingConfig - Creating common ping target 'Weblogs.com' from configuration properties. +INFO 2026-08-11 17:08:28 [main] PingConfig - Creating common ping target 'blo.gs' from configuration properties. +INFO 2026-08-11 17:08:28 [main] PingConfig - Creating common ping target 'IceRocket' from configuration properties. +INFO 2026-08-11 17:08:28 [main] WebloggerImpl - Roller Weblogger business tier successfully initialized +INFO 2026-08-11 17:08:28 [main] RollerContext - Remember Me enabled: false +WARN 2026-08-11 17:08:28 [main] RollerContext - New passwords are stored in plain text! +INFO 2026-08-11 17:08:28 [main] RollerContext - Password Encryption Algorithm set to 'noop' +INFO 2026-08-11 17:08:28 [main] RollerContext - Initializing Velocity +INFO 2026-08-11 17:08:28 [main] StrutsTilesListener - Starting Struts Tiles 3 integration ... +INFO 2026-08-11 17:08:28 [main] TilesAccess - Publishing TilesContext for context: org.apache.struts2.tiles.StrutsWildcardServletApplicationContext +INFO 2026-08-11 17:08:28 [main] StrutsSpringObjectFactory - Initializing Struts-Spring integration... +INFO 2026-08-11 17:08:28 [main] SpringObjectFactory - Setting autowire strategy to name +INFO 2026-08-11 17:08:28 [main] StrutsSpringObjectFactory - ... initialized Struts-Spring integration successfully +WARN 2026-08-11 17:08:28 [main] ParametersInterceptor - @StrutsParameter annotation requirement is disabled! We strongly recommend keeping it enabled to protect against critical vulnerabilities. Set the configuration `struts.parameters.requireAnnotations=true` to enable it. Please refer to the Struts 7.0 migration guide and security documentation for further information. +WARN 2026-08-11 17:08:28 [main] DefaultExcludedPatternsChecker - Replacing excluded patterns [[actionErrors|actionMessages|fieldErrors, .*(^|\.|\[|\'|"|get)class(\(\.|\[|\'|").*, (^|\%\{)(#?top\.)[^\s]*, (^|\%\{)((#?)(\[\d\]\.)?)(dojo|struts|session|request|response|application|servlet(Request|Response|Context)|parameters|context|_memberAccess)(\.|\[).*]] with [[^method:.*, ^action:.*]], be aware that this affects all instances and safety of your application! +WARN 2026-08-11 17:08:28 [main] PackageBasedActionConfigBuilder - The includeJars pattern [false] did not match any jars in the classpath +INFO 2026-08-11 17:08:28 [main] RequestMappingFilter - Request mapping filter initialized, 1 mappers configured. +INFO 2026-08-11 17:08:28 [main] RequestMappingFilter - [class org.apache.roller.weblogger.ui.rendering.WeblogRequestMapper] +INFO 2026-08-11 17:08:28 [main] IPBanFilter - INIT IPBanFilter +INFO 2026-08-11 17:08:28 [main] FeedServlet - Initializing FeedServlet +INFO 2026-08-11 17:08:28 [main] WeblogFeedCache - {size=200, id=cache.weblogfeed, enabled=false, timeout=3600} +WARN 2026-08-11 17:08:28 [main] WeblogFeedCache - Caching has been DISABLED +INFO 2026-08-11 17:08:28 [main] SiteWideCache - {size=50, id=cache.sitewide, enabled=false, timeout=1800} +WARN 2026-08-11 17:08:28 [main] SiteWideCache - Caching has been DISABLED +INFO 2026-08-11 17:08:28 [main] MediaResourceServlet - Initializing ResourceServlet +INFO 2026-08-11 17:08:28 [main] PageServlet - Initializing PageServlet +INFO 2026-08-11 17:08:28 [main] WeblogPageCache - {size=400, id=cache.weblogpage, enabled=false, timeout=3600} +WARN 2026-08-11 17:08:28 [main] WeblogPageCache - Caching has been DISABLED +INFO 2026-08-11 17:08:28 [main] PageServlet - Referrer spam check enabled = false +INFO 2026-08-11 17:08:28 [main] ResourceServlet - Initializing ResourceServlet +INFO 2026-08-11 17:08:28 [main] SearchServlet - Initializing SearchServlet +INFO 2026-08-11 17:08:28 [main] CommentServlet - Initializing CommentServlet +INFO 2026-08-11 17:08:28 [main] CommentValidationManager - Configured 3 CommentValidators +INFO 2026-08-11 17:08:28 [main] CommentValidationManager - [class org.apache.roller.weblogger.ui.rendering.plugins.comments.BannedwordslistCommentValidator,class org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessLinksCommentValidator,class org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessSizeCommentValidator] +INFO 2026-08-11 17:08:28 [main] CommentServlet - Comment Throttling DISABLED +INFO 2026-08-11 17:08:28 [main] PlanetFeedServlet - Initializing PlanetRssServlet +INFO 2026-08-11 17:08:28 [main] PlanetCache - Planet cache = {size=10, id=cache.planet, enabled=false, timeout=1800} +WARN 2026-08-11 17:08:28 [main] PlanetCache - Caching has been DISABLED +INFO 2026-08-11 17:08:28 [main] RSDServlet - Initializing RSDServlet +INFO 2026-08-11 17:08:28 [main] CommentValidationManager - Configured 3 CommentValidators +INFO 2026-08-11 17:08:28 [main] CommentValidationManager - [class org.apache.roller.weblogger.ui.rendering.plugins.comments.BannedwordslistCommentValidator,class org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessLinksCommentValidator,class org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessSizeCommentValidator] +INFO 2026-08-11 17:08:28 [main] PreviewResourceServlet - Initializing PreviewResourceServlet +INFO 2026-08-11 17:08:28 [main] PreviewServlet - Initializing PreviewServlet +INFO 2026-08-11 17:08:31 [qtp501254005-77] SaltCache - {size=5000, id=cache.salt, timeout=3600, enabled=true} +INFO 2026-08-11 17:08:31 [qtp501254005-77] CacheManager - Cache Manager Initialized. +INFO 2026-08-11 17:08:31 [qtp501254005-77] CacheManager - Cache Factory = org.apache.roller.weblogger.util.cache.ExpiringLRUCacheFactoryImpl +INFO 2026-08-11 17:08:33 [HitCountQueueProcessor] ContinuousWorkerThread - HitCountQueueProcessor Started. +INFO 2026-08-11 17:08:33 [qtp501254005-123] RendererManager - Renderer Manager Initialized, 1 factories configured. +INFO 2026-08-11 17:08:33 [qtp501254005-123] RendererManager - [class org.apache.roller.weblogger.ui.rendering.velocity.VelocityRendererFactory] +INFO 2026-08-11 17:08:33 [qtp501254005-123] RollerVelocity - Initializing Velocity Rendering Engine +WARN 2026-08-11 17:08:33 [qtp501254005-123] UIPluginManagerImpl - Default editor was not properly configured, picking one at random instead. +INFO 2026-08-11 17:08:35 [ShutdownMonitor] TilesAccess - Removing TilesContext for context: org.apache.struts2.tiles.StrutsWildcardServletApplicationContext +INFO 2026-08-11 17:08:35 [ShutdownMonitor] HitCountQueue - stopping worker HitCountQueueProcessor +INFO 2026-08-11 17:08:35 [HitCountQueueProcessor] ContinuousWorkerThread - HitCountQueueProcessor INTERRUPT: sleep interrupted +INFO 2026-08-11 17:08:35 [HitCountQueueProcessor] ContinuousWorkerThread - HitCountQueueProcessor Done. diff --git a/it-selenium/pom.xml b/it-selenium/pom.xml index f9f980e94f..a1880ce44f 100644 --- a/it-selenium/pom.xml +++ b/it-selenium/pom.xml @@ -58,8 +58,8 @@ 4.28.0 - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api xerces @@ -74,16 +74,9 @@ - javax.xml.bind - jaxb-api - ${jaxb.version} - - - - javax.activation - javax.activation-api - - + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.2 test @@ -137,19 +130,12 @@ - - - javax.xml.bind - jaxb-api - 2.3.1 - - - org.eclipse.jetty - jetty-maven-plugin + org.eclipse.jetty.ee11 + jetty-ee11-maven-plugin selenium 9999 @@ -157,7 +143,9 @@ /roller target/roller-selenium-tests-${project.version} - ${project.parent.basedir}/app/src/test/resources/jetty.xml + + ${project.parent.basedir}/app/src/test/resources/jetty.xml + src/test/resources/roller-jettyrun.properties @@ -191,9 +179,9 @@ 6.1.5 - commons-dbcp - commons-dbcp - 1.4 + org.apache.commons + commons-dbcp2 + 2.13.0 org.apache.derby @@ -206,9 +194,14 @@ ${derby.version} - javax.mail - mail - ${java-mail.version} + jakarta.mail + jakarta.mail-api + 2.1.3 + + + org.eclipse.angus + angus-mail + 2.0.3 diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/editor/AbstractEntryPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/editor/AbstractEntryPage.java index f043c9f47c..9f87782d25 100644 --- a/it-selenium/src/test/java/org/apache/roller/selenium/editor/AbstractEntryPage.java +++ b/it-selenium/src/test/java/org/apache/roller/selenium/editor/AbstractEntryPage.java @@ -18,6 +18,7 @@ package org.apache.roller.selenium.editor; import org.apache.roller.selenium.AbstractRollerPage; +import org.openqa.selenium.By; /** * Base class for the new/edit entry pages @@ -37,7 +38,9 @@ public void setSummary(String value) { } public EntryEditPage postBlogEntry() { - clickById("entry_%{#mainAction}!publish"); + // the publish button is the only success-styled submit on the page; + // its generated id changed between form-theme versions + driver.findElement(By.cssSelector("input.btn-success[type='submit']")).click(); return new EntryEditPage(driver); } } diff --git a/pom.xml b/pom.xml index 56f6a110fe..5f3e9e918e 100644 --- a/pom.xml +++ b/pom.xml @@ -40,10 +40,8 @@ limitations under the License. - 10.11.1.1 - 1.4.7 - 2.3.1 - 10.0.24 + 10.16.1.1 + 12.1.12 UTF-8 UTF-8 6.1.5 @@ -64,7 +62,7 @@ limitations under the License. maven-compiler-plugin 3.13.0 - 11 + 17 true -Xlint:all @@ -86,8 +84,8 @@ limitations under the License. - org.eclipse.jetty - jetty-maven-plugin + org.eclipse.jetty.ee11 + jetty-ee11-maven-plugin ${jetty.plugin.version} diff --git a/testing/junit-cleartables-mysql.sql b/testing/junit-cleartables-mysql.sql index 34a8b72aac..d3d7a1754d 100644 --- a/testing/junit-cleartables-mysql.sql +++ b/testing/junit-cleartables-mysql.sql @@ -39,7 +39,5 @@ delete from userrole WHERE username like 'junit_%'; delete from roller_permission WHERE username like 'junit_%'; delete from roller_user WHERE username like 'junit_%'; delete from roller_userattribute WHERE username like 'junit_%'; -delete from roller_oauthconsumer WHERE username like 'junit_%'; -delete from roller_oauthaccessor WHERE username like 'junit_%'; delete from roller_tasklock WHERE name = 'TestTask';