1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.util;
17
18 import java.util.HashMap;
19 import java.util.LinkedHashMap;
20 import java.util.Map;
21 import java.util.regex.Pattern;
22
23 import org.codelibs.core.lang.StringUtil;
24 import org.codelibs.core.misc.Pair;
25 import org.codelibs.fess.es.config.exentity.CrawlingConfig.ConfigName;
26 import org.lastaflute.core.security.PrimaryCipher;
27
28 public class ParameterUtil {
29 private static final String CIPHER_PREFIX = "{cipher}";
30
31 protected static final String XPATH_PREFIX = "field.xpath.";
32
33 protected static final String META_PREFIX = "field.meta.";
34
35 protected static final String VALUE_PREFIX = "field.value.";
36
37 protected static final String SCRIPT_PREFIX = "field.script.";
38
39 protected static final String CLIENT_PREFIX = "client.";
40
41 protected static final String CONFIG_PREFIX = "config.";
42
43 protected static final String FIELD_PREFIX = "field.config.";
44
45 protected ParameterUtil() {
46
47 }
48
49 public static Map<String, String> parse(final String value) {
50 final Map<String, String> paramMap = new LinkedHashMap<>();
51 if (value != null) {
52 int unknownKey = 0;
53 final Pattern properyPattern = Pattern.compile(ComponentUtil.getFessConfig().getAppEncryptPropertyPattern());
54 final PrimaryCipher cipher = ComponentUtil.getPrimaryCipher();
55 final String[] lines = value.split("[\r\n]");
56 for (final String line : lines) {
57 if (StringUtil.isNotBlank(line)) {
58 final int pos = line.indexOf('=');
59 if (pos == 0) {
60 paramMap.put("unknown." + (unknownKey + 1), line.substring(pos + 1).trim());
61 unknownKey++;
62 } else if (pos > 0) {
63 final String key = line.substring(0, pos).trim();
64 if (pos < line.length()) {
65 String data = line.substring(pos + 1).trim();
66 if (properyPattern.matcher(key).matches() && data.startsWith(CIPHER_PREFIX)) {
67 data = cipher.decrypt(data.substring(CIPHER_PREFIX.length()));
68 }
69 paramMap.put(key, data);
70 } else {
71 paramMap.put(key, StringUtil.EMPTY);
72 }
73 } else {
74 paramMap.put(line.trim(), StringUtil.EMPTY);
75 }
76 }
77 }
78 }
79 return paramMap;
80 }
81
82 public static String encrypt(final String value) {
83 final StringBuilder buf = new StringBuilder();
84 final Pattern properyPattern = Pattern.compile(ComponentUtil.getFessConfig().getAppEncryptPropertyPattern());
85 final PrimaryCipher cipher = ComponentUtil.getPrimaryCipher();
86 ParameterUtil.parse(value).entrySet().stream().map(e -> {
87 final String k = e.getKey();
88 final String v = e.getValue();
89 if (properyPattern.matcher(k).matches() && !v.startsWith(CIPHER_PREFIX)) {
90 return new Pair<>(k, CIPHER_PREFIX + cipher.encrypt(v));
91 }
92 return new Pair<>(k, v);
93 }).forEach(e -> {
94 if (buf.length() > 0) {
95 buf.append('\n');
96 }
97 buf.append(e.getFirst());
98 buf.append('=');
99 buf.append(e.getSecond());
100 });
101 return buf.toString();
102 }
103
104 public static void loadConfigParams(final Map<String, Object> paramMap, final String configParam) {
105 final Map<String, String> map = ParameterUtil.parse(configParam);
106 if (!map.isEmpty()) {
107 paramMap.putAll(map);
108 }
109 }
110
111 public static Map<ConfigName, Map<String, String>> createConfigParameterMap(final String configParameters) {
112 final Map<ConfigName, Map<String, String>> map = new HashMap<>();
113 final Map<String, String> configConfigMap = new LinkedHashMap<>();
114 final Map<String, String> clientConfigMap = new LinkedHashMap<>();
115 final Map<String, String> xpathConfigMap = new LinkedHashMap<>();
116 final Map<String, String> metaConfigMap = new LinkedHashMap<>();
117 final Map<String, String> valueConfigMap = new LinkedHashMap<>();
118 final Map<String, String> scriptConfigMap = new LinkedHashMap<>();
119 final Map<String, String> fieldConfigMap = new LinkedHashMap<>();
120 map.put(ConfigName.CONFIG, configConfigMap);
121 map.put(ConfigName.CLIENT, clientConfigMap);
122 map.put(ConfigName.XPATH, xpathConfigMap);
123 map.put(ConfigName.META, metaConfigMap);
124 map.put(ConfigName.VALUE, valueConfigMap);
125 map.put(ConfigName.SCRIPT, scriptConfigMap);
126 map.put(ConfigName.FIELD, fieldConfigMap);
127 for (final Map.Entry<String, String> entry : ParameterUtil.parse(configParameters).entrySet()) {
128 final String key = entry.getKey();
129 if (key.startsWith(CONFIG_PREFIX)) {
130 configConfigMap.put(key.substring(CONFIG_PREFIX.length()), entry.getValue());
131 } else if (key.startsWith(CLIENT_PREFIX)) {
132 clientConfigMap.put(key.substring(CLIENT_PREFIX.length()), entry.getValue());
133 } else if (key.startsWith(XPATH_PREFIX)) {
134 xpathConfigMap.put(key.substring(XPATH_PREFIX.length()), entry.getValue());
135 } else if (key.startsWith(META_PREFIX)) {
136 metaConfigMap.put(key.substring(META_PREFIX.length()), entry.getValue());
137 } else if (key.startsWith(VALUE_PREFIX)) {
138 valueConfigMap.put(key.substring(VALUE_PREFIX.length()), entry.getValue());
139 } else if (key.startsWith(SCRIPT_PREFIX)) {
140 scriptConfigMap.put(key.substring(SCRIPT_PREFIX.length()), entry.getValue());
141 } else if (key.startsWith(FIELD_PREFIX)) {
142 fieldConfigMap.put(key.substring(FIELD_PREFIX.length()), entry.getValue());
143 }
144 }
145
146 return map;
147 }
148 }