You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/09/26 02:10:00 UTC
[james-project] 06/38: JAMES-2703 Remove JDBCRecipientRewriteTable
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit b687054c34d66e3ad6509dda4325529559aa6761
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Sep 10 10:05:53 2019 +0700
JAMES-2703 Remove JDBCRecipientRewriteTable
---
.../mailets/JDBCRecipientRewriteTable.java | 206 ---------------------
1 file changed, 206 deletions(-)
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/JDBCRecipientRewriteTable.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/JDBCRecipientRewriteTable.java
deleted file mode 100644
index 806be12..0000000
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/JDBCRecipientRewriteTable.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/****************************************************************
- * 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. *
- ****************************************************************/
-
-package org.apache.james.transport.mailets;
-
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Collection;
-import java.util.Map;
-
-import javax.inject.Inject;
-import javax.mail.MessagingException;
-import javax.sql.DataSource;
-
-import org.apache.james.core.MailAddress;
-import org.apache.james.util.sql.JDBCUtil;
-import org.apache.mailet.Experimental;
-import org.apache.mailet.MailetException;
-
-/**
- * <p>
- * Implements a Virtual User Table for JAMES. Derived from the JDBCAlias mailet,
- * but whereas that mailet uses a simple map from a source address to a
- * destination address, this handles simple wildcard selection, verifies that a
- * catchall address is for a domain in the Virtual User Table, and handles
- * forwarding.
- * </p>
- * <p>
- * JDBCRecipientRewriteTable does not provide any administation tools. You'll have to
- * create the RecipientRewriteTable yourself. The standard configuration is as
- * follows:
- * </p>
- * <p>
- *
- * <pre>
- * CREATE TABLE RecipientRewriteTable
- * (
- * user varchar(64) NOT NULL default '',
- * domain varchar(255) NOT NULL default '',
- * target_address varchar(255) NOT NULL default '',
- * PRIMARY KEY (user,domain)
- * );
- * </pre>
- *
- * </p>
- * <p>
- * The user column specifies the username of the virtual recipient, the domain
- * column the domain of the virtual recipient, and the target_address column the
- * email address of the real recipient. The target_address column can contain
- * just the username in the case of a local user, and multiple recipients can be
- * specified in a list separated by commas, semi-colons or colons.
- * </p>
- * <p>
- * The standard query used with RecipientRewriteTable is:
- *
- * <pre>
- * select RecipientRewriteTable.target_address from RecipientRewriteTable, RecipientRewriteTable as VUTDomains
- * where (RecipientRewriteTable.user like ? or RecipientRewriteTable.user like "\%")
- * and (RecipientRewriteTable.domain like ?
- * or (RecipientRewriteTable.domain like "\%" and VUTDomains.domain like ?))
- * order by concat(RecipientRewriteTable.user,'@',RecipientRewriteTable.domain) desc limit 1
- * </pre>
- *
- * </p>
- * <p>
- * For a given [user, domain, domain] used with the query, this will match as
- * follows (in precedence order):
- * <ol>
- * <li>user@domain - explicit mapping for user@domain</li>
- * <li>user@% - catchall mapping for user anywhere</li>
- * <li>%@domain - catchall mapping for anyone at domain</li>
- * <li>null - no valid mapping</li>
- * </ol>
- * </p>
- * <p>
- * You need to set the connection. At the moment, there is a limit to what you
- * can change regarding the SQL Query, because there isn't a means to specify
- * where in the query to replace parameters. [TODO]
- *
- * <pre>
- * <mailet match="All" class="JDBCRecipientRewriteTable">
- * <table>db://maildb/RecipientRewriteTable</table>
- * <sqlquery>sqlquery</sqlquery>
- * </mailet>
- * </pre>
- *
- * </p>
- *
- * @deprecated use the definitions in virtualusertable-store.xml instead
- *
- * JAMES-2703 This class is deprecated and will be removed straight after upcoming James 3.4.0 release
- */
-@Experimental
-@Deprecated
-public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable {
-
- // @deprecated QUERY is deprecated - SQL queries are now located in
- // sqlResources.xml
- private static final String QUERY = "select RecipientRewriteTable.target_address from RecipientRewriteTable, RecipientRewriteTable as VUTDomains where (RecipientRewriteTable.user like ? or RecipientRewriteTable.user like '\\%') and (RecipientRewriteTable.domain like ? or (RecipientRewriteTable.domain like '%*%' and VUTDomains.domain like ?)) order by concat(RecipientRewriteTable.user,'@',RecipientRewriteTable.domain) desc limit 1";
-
- protected DataSource datasource;
-
- /**
- * The query used by the mailet to get the alias mapping
- */
- protected String query = null;
-
- /**
- * The JDBCUtil helper class
- */
- private final JDBCUtil theJDBCUtil = new JDBCUtil();
-
- @Inject
- public void setDataSourceSelector(DataSource datasource) {
- this.datasource = datasource;
- }
-
- @Override
- public void init() throws MessagingException {
- if (getInitParameter("table") == null) {
- throw new MailetException("Table location not specified for JDBCRecipientRewriteTable");
- }
-
- String tableURL = getInitParameter("table");
-
- String datasourceName = tableURL.substring(5);
- int pos = datasourceName.indexOf("/");
- String tableName = datasourceName.substring(pos + 1);
- datasourceName = datasourceName.substring(0, pos);
-
- try (Connection conn = datasource.getConnection()) {
-
- // Check if the required table exists. If not, complain.
- DatabaseMetaData dbMetaData = conn.getMetaData();
- // Need to ask in the case that identifiers are stored, ask the
- // DatabaseMetaInfo.
- // Try UPPER, lower, and MixedCase, to see if the table is there.
- if (!(theJDBCUtil.tableExists(dbMetaData, tableName))) {
- String exceptionBuffer = "Could not find table '" + tableName + "' in datasource '" + datasourceName + "'";
- throw new MailetException(exceptionBuffer);
- }
-
- // Build the query
- query = getInitParameter("sqlquery", QUERY);
- } catch (MailetException me) {
- throw me;
- } catch (Exception e) {
- throw new MessagingException("Error initializing JDBCRecipientRewriteTable", e);
- }
- }
-
- /**
- * Map any virtual recipients to real recipients using the configured JDBC
- * connection, table and query.
- *
- * @param recipientsMap
- * the mapping of virtual to real recipients
- */
- @Override
- protected void mapRecipients(Map<MailAddress, String> recipientsMap) throws MessagingException {
-
- Collection<MailAddress> recipients = recipientsMap.keySet();
-
- try (Connection conn = datasource.getConnection()) {
- try (PreparedStatement mappingStmt = conn.prepareStatement(query)) {
- for (MailAddress recipient : recipients) {
- mappingStmt.setString(1, recipient.getLocalPart());
- mappingStmt.setString(2, recipient.getDomain().asString());
- mappingStmt.setString(3, recipient.getDomain().asString());
- try (ResultSet mappingRS = mappingStmt.executeQuery()) {
- if (mappingRS.next()) {
- String targetString = mappingRS.getString(1);
- recipientsMap.put(recipient, targetString);
- }
- }
- }
- }
- } catch (SQLException sqle) {
- throw new MessagingException("Error accessing database", sqle);
- }
- }
-
- @Override
- public String getMailetInfo() {
- return "JDBC Virtual User Table mailet";
- }
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org