1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.scm.provider.git.util;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.regex.Matcher;
24 import java.util.regex.Pattern;
25
26 import org.apache.commons.lang3.StringUtils;
27 import org.apache.maven.scm.providers.gitlib.settings.Settings;
28 import org.apache.maven.scm.providers.gitlib.settings.io.xpp3.GitXpp3Reader;
29 import org.codehaus.plexus.util.ReaderFactory;
30 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
31
32
33
34
35 public class GitUtil {
36 public static final String GIT_SETTINGS_FILENAME = "git-settings.xml";
37
38 public static final File DEFAULT_SETTINGS_DIRECTORY = new File(System.getProperty("user.home"), ".scm");
39
40
41
42
43
44
45 public static final String PASSWORD_PLACE_HOLDER_WITH_DELIMITERS = ":********@";
46
47 private static final Pattern PASSWORD_IN_URL_PATTERN = Pattern.compile("^.*(:[^/].*@).*$");
48
49 private static File settingsDirectory = DEFAULT_SETTINGS_DIRECTORY;
50
51 private static Settings settings;
52
53 private GitUtil() {
54
55 }
56
57 public static Settings getSettings() {
58 if (settings == null) {
59 settings = readSettings();
60 }
61 return settings;
62 }
63
64 public static Settings readSettings() {
65 File settingsFile = getSettingsFile();
66
67 if (settingsFile.exists()) {
68 GitXpp3Reader reader = new GitXpp3Reader();
69 try {
70 return reader.read(ReaderFactory.newXmlReader(settingsFile));
71 } catch (IOException e) {
72
73 } catch (XmlPullParserException e) {
74 String message = settingsFile.getAbsolutePath() + " isn't well formed. SKIPPED." + e.getMessage();
75
76 System.err.println(message);
77 }
78 }
79
80 return new Settings();
81 }
82
83 public static void setSettingsDirectory(File directory) {
84 settingsDirectory = directory;
85 settings = readSettings();
86 }
87
88 public static File getSettingsFile() {
89 return new File(settingsDirectory, GIT_SETTINGS_FILENAME);
90 }
91
92
93
94
95
96
97
98
99
100 public static String maskPasswordInUrl(String urlWithCredentials) {
101 String output = urlWithCredentials;
102 final Matcher passwordMatcher = PASSWORD_IN_URL_PATTERN.matcher(output);
103 if (passwordMatcher.find()) {
104
105 final String clearPasswordWithDelimiters = passwordMatcher.group(1);
106
107 output = StringUtils.replace(output, clearPasswordWithDelimiters, PASSWORD_PLACE_HOLDER_WITH_DELIMITERS);
108 }
109 return output;
110 }
111 }