View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.internal.secdispatcher;
20  
21  import javax.inject.Inject;
22  import javax.inject.Named;
23  import javax.inject.Provider;
24  import javax.inject.Singleton;
25  
26  import java.util.Map;
27  
28  import org.sonatype.plexus.components.cipher.PlexusCipher;
29  import org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher;
30  import org.sonatype.plexus.components.sec.dispatcher.PasswordDecryptor;
31  import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
32  
33  /**
34   * Provides a security dispatcher named "maven". Maven uses this security dispatcher instead of the default.
35   * The default security dispatcher is unaware of Maven specific configuration file locations and should not be used
36   * (injected or referenced in any way) at all in any Maven related codebase.
37   * <p>
38   * Note: This whole stuff is really deprecated and replaced with proper security in Maven 4, while this one is
39   * just "security through obscurity".
40   *
41   * @since 3.9.13
42   */
43  @Singleton
44  @Named("maven")
45  public class SecDispatcherProvider implements Provider<SecDispatcher> {
46      private final SecDispatcher instance;
47  
48      @Inject
49      public SecDispatcherProvider(
50              PlexusCipher plexusCipher,
51              Map<String, PasswordDecryptor> decryptors,
52              @Named("${maven.settings.security.configurationFile:-~/.m2/settings-security.xml}")
53                      String configurationFile) {
54          instance = new DefaultSecDispatcher(plexusCipher, decryptors, configurationFile);
55      }
56  
57      @Override
58      public SecDispatcher get() {
59          return instance;
60      }
61  }