summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/FromAddressGeneratorProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/mail/send/FromAddressGeneratorProvider.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/mail/send/FromAddressGeneratorProvider.java239
1 files changed, 0 insertions, 239 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/FromAddressGeneratorProvider.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/FromAddressGeneratorProvider.java
deleted file mode 100644
index c2c6834692..0000000000
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/FromAddressGeneratorProvider.java
+++ /dev/null
@@ -1,239 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// 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 com.google.gerrit.server.mail.send;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import com.google.gerrit.common.data.ParameterizedString;
-import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.server.GerritPersonIdent;
-import com.google.gerrit.server.account.AccountCache;
-import com.google.gerrit.server.config.AnonymousCowardName;
-import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.mail.Address;
-import com.google.gerrit.server.mail.MailUtil;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.Singleton;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.regex.Pattern;
-import org.apache.commons.codec.binary.Base64;
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.lib.PersonIdent;
-
-/** Creates a {@link FromAddressGenerator} from the {@link GerritServerConfig} */
-@Singleton
-public class FromAddressGeneratorProvider implements Provider<FromAddressGenerator> {
- private final FromAddressGenerator generator;
-
- @Inject
- FromAddressGeneratorProvider(
- @GerritServerConfig Config cfg,
- @AnonymousCowardName String anonymousCowardName,
- @GerritPersonIdent PersonIdent myIdent,
- AccountCache accountCache) {
- final String from = cfg.getString("sendemail", null, "from");
- final Address srvAddr = toAddress(myIdent);
-
- if (from == null || "MIXED".equalsIgnoreCase(from)) {
- ParameterizedString name = new ParameterizedString("${user} (Code Review)");
- generator =
- new PatternGen(srvAddr, accountCache, anonymousCowardName, name, srvAddr.getEmail());
- } else if ("USER".equalsIgnoreCase(from)) {
- String[] domains = cfg.getStringList("sendemail", null, "allowedDomain");
- Pattern domainPattern = MailUtil.glob(domains);
- ParameterizedString namePattern = new ParameterizedString("${user} (Code Review)");
- generator =
- new UserGen(accountCache, domainPattern, anonymousCowardName, namePattern, srvAddr);
- } else if ("SERVER".equalsIgnoreCase(from)) {
- generator = new ServerGen(srvAddr);
- } else {
- final Address a = Address.parse(from);
- final ParameterizedString name =
- a.getName() != null ? new ParameterizedString(a.getName()) : null;
- if (name == null || name.getParameterNames().isEmpty()) {
- generator = new ServerGen(a);
- } else {
- generator = new PatternGen(srvAddr, accountCache, anonymousCowardName, name, a.getEmail());
- }
- }
- }
-
- private static Address toAddress(PersonIdent myIdent) {
- return new Address(myIdent.getName(), myIdent.getEmailAddress());
- }
-
- @Override
- public FromAddressGenerator get() {
- return generator;
- }
-
- static final class UserGen implements FromAddressGenerator {
- private final AccountCache accountCache;
- private final Pattern domainPattern;
- private final String anonymousCowardName;
- private final ParameterizedString nameRewriteTmpl;
- private final Address serverAddress;
-
- /**
- * From address generator for USER mode
- *
- * @param accountCache get user account from id
- * @param domainPattern allowed user domain pattern that Gerrit can send as the user
- * @param anonymousCowardName name used when user's full name is missing
- * @param nameRewriteTmpl name template used for rewriting the sender's name when Gerrit can not
- * send as the user
- * @param serverAddress serverAddress.name is used when fromId is null and serverAddress.email
- * is used when Gerrit can not send as the user
- */
- UserGen(
- AccountCache accountCache,
- Pattern domainPattern,
- String anonymousCowardName,
- ParameterizedString nameRewriteTmpl,
- Address serverAddress) {
- this.accountCache = accountCache;
- this.domainPattern = domainPattern;
- this.anonymousCowardName = anonymousCowardName;
- this.nameRewriteTmpl = nameRewriteTmpl;
- this.serverAddress = serverAddress;
- }
-
- @Override
- public boolean isGenericAddress(Account.Id fromId) {
- return false;
- }
-
- @Override
- public Address from(Account.Id fromId) {
- String senderName;
- if (fromId != null) {
- Account a = accountCache.get(fromId).getAccount();
- String fullName = a.getFullName();
- String userEmail = a.getPreferredEmail();
- if (canRelay(userEmail)) {
- return new Address(fullName, userEmail);
- }
-
- if (fullName == null || "".equals(fullName.trim())) {
- fullName = anonymousCowardName;
- }
- senderName = nameRewriteTmpl.replace("user", fullName).toString();
- } else {
- senderName = serverAddress.getName();
- }
-
- String senderEmail;
- ParameterizedString senderEmailPattern = new ParameterizedString(serverAddress.getEmail());
- if (senderEmailPattern.getParameterNames().isEmpty()) {
- senderEmail = senderEmailPattern.getRawPattern();
- } else {
- senderEmail = senderEmailPattern.replace("userHash", hashOf(senderName)).toString();
- }
- return new Address(senderName, senderEmail);
- }
-
- /** check if Gerrit is allowed to send from {@code userEmail}. */
- private boolean canRelay(String userEmail) {
- if (userEmail != null) {
- int index = userEmail.indexOf('@');
- if (index > 0 && index < userEmail.length() - 1) {
- return domainPattern.matcher(userEmail.substring(index + 1)).matches();
- }
- }
- return false;
- }
- }
-
- static final class ServerGen implements FromAddressGenerator {
- private final Address srvAddr;
-
- ServerGen(Address srvAddr) {
- this.srvAddr = srvAddr;
- }
-
- @Override
- public boolean isGenericAddress(Account.Id fromId) {
- return true;
- }
-
- @Override
- public Address from(Account.Id fromId) {
- return srvAddr;
- }
- }
-
- static final class PatternGen implements FromAddressGenerator {
- private final ParameterizedString senderEmailPattern;
- private final Address serverAddress;
- private final AccountCache accountCache;
- private final String anonymousCowardName;
- private final ParameterizedString namePattern;
-
- PatternGen(
- final Address serverAddress,
- final AccountCache accountCache,
- final String anonymousCowardName,
- final ParameterizedString namePattern,
- final String senderEmail) {
- this.senderEmailPattern = new ParameterizedString(senderEmail);
- this.serverAddress = serverAddress;
- this.accountCache = accountCache;
- this.anonymousCowardName = anonymousCowardName;
- this.namePattern = namePattern;
- }
-
- @Override
- public boolean isGenericAddress(Account.Id fromId) {
- return false;
- }
-
- @Override
- public Address from(Account.Id fromId) {
- final String senderName;
-
- if (fromId != null) {
- final Account account = accountCache.get(fromId).getAccount();
- String fullName = account.getFullName();
- if (fullName == null || "".equals(fullName)) {
- fullName = anonymousCowardName;
- }
- senderName = namePattern.replace("user", fullName).toString();
-
- } else {
- senderName = serverAddress.getName();
- }
-
- String senderEmail;
- if (senderEmailPattern.getParameterNames().isEmpty()) {
- senderEmail = senderEmailPattern.getRawPattern();
- } else {
- senderEmail = senderEmailPattern.replace("userHash", hashOf(senderName)).toString();
- }
- return new Address(senderName, senderEmail);
- }
- }
-
- private static String hashOf(String data) {
- try {
- MessageDigest hash = MessageDigest.getInstance("MD5");
- byte[] bytes = hash.digest(data.getBytes(UTF_8));
- return Base64.encodeBase64URLSafeString(bytes);
- } catch (NoSuchAlgorithmException e) {
- throw new RuntimeException("No MD5 available", e);
- }
- }
-}