1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.admin.systeminfo;
17
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
22
23 import org.codelibs.core.lang.StringUtil;
24 import org.codelibs.core.misc.DynamicProperties;
25 import org.codelibs.fess.Constants;
26 import org.codelibs.fess.annotation.Secured;
27 import org.codelibs.fess.app.web.base.FessAdminAction;
28 import org.codelibs.fess.mylasta.direction.FessConfig;
29 import org.codelibs.fess.util.ComponentUtil;
30 import org.codelibs.fess.util.RenderDataUtil;
31 import org.lastaflute.core.direction.ObjectiveConfig;
32 import org.lastaflute.web.Execute;
33 import org.lastaflute.web.response.HtmlResponse;
34 import org.lastaflute.web.response.render.RenderData;
35 import org.lastaflute.web.ruts.process.ActionRuntime;
36
37 import jakarta.annotation.Resource;
38
39
40
41
42
43 public class AdminSysteminfoAction extends FessAdminAction {
44
45
46
47
48 public AdminSysteminfoAction() {
49 super();
50 }
51
52
53 public static final String ROLE = "admin-systeminfo";
54
55 private static final String MASKED_VALUE = "XXXXXXXX";
56
57
58
59
60
61 @Resource
62 protected DynamicProperties systemProperties;
63
64 private static final String[] bugReportLabels =
65 { "file.separator", "file.encoding", "java.runtime.version", "java.vm.info", "java.vm.name", "java.vm.vendor",
66 "java.vm.version", "os.arch", "os.name", "os.version", "user.country", "user.language", "user.timezone" };
67
68
69
70
71 @Override
72 protected void setupHtmlData(final ActionRuntime runtime) {
73 super.setupHtmlData(runtime);
74 runtime.registerData("helpLink", systemHelper.getHelpLink(fessConfig.getOnlineHelpNameSysteminfo()));
75 }
76
77 @Override
78 protected String getActionRole() {
79 return ROLE;
80 }
81
82
83
84
85
86
87
88
89
90 @Execute
91 @Secured({ ROLE, ROLE + VIEW })
92 public HtmlResponse index() {
93 return asHtml(path_AdminSysteminfo_AdminSysteminfoJsp).renderWith(data -> {
94 registerEnvItems(data);
95 registerPropItems(data);
96 registerFessPropItems(data);
97 registerBugReportItems(data);
98 });
99 }
100
101
102
103
104
105
106
107
108
109
110 protected void registerEnvItems(final RenderData data) {
111 RenderDataUtil.register(data, "envItems", getEnvItems());
112 }
113
114
115
116
117
118
119 protected void registerPropItems(final RenderData data) {
120 RenderDataUtil.register(data, "propItems", getPropItems());
121 }
122
123
124
125
126
127
128 protected void registerFessPropItems(final RenderData data) {
129 RenderDataUtil.register(data, "fessPropItems", getFessPropItems(fessConfig));
130 }
131
132
133
134
135
136
137 protected void registerBugReportItems(final RenderData data) {
138 RenderDataUtil.register(data, "bugReportItems", getBugReportItems());
139 }
140
141
142
143
144
145
146 public static List<Map<String, String>> getEnvItems() {
147 final List<Map<String, String>> itemList = new ArrayList<>();
148 for (final Map.Entry<String, String> entry : System.getenv().entrySet()) {
149 itemList.add(createItem(entry.getKey(), entry.getValue()));
150 }
151 return itemList;
152 }
153
154
155
156
157
158
159 public static List<Map<String, String>> getPropItems() {
160 final List<Map<String, String>> itemList = new ArrayList<>();
161 for (final Map.Entry<Object, Object> entry : System.getProperties().entrySet()) {
162 itemList.add(createItem(entry.getKey(), entry.getValue()));
163 }
164 return itemList;
165 }
166
167
168
169
170
171
172
173 public static List<Map<String, String>> getFessPropItems(final FessConfig fessConfig) {
174 final List<Map<String, String>> itemList = new ArrayList<>();
175 ComponentUtil.getSystemProperties().entrySet().stream().forEach(e -> {
176 final String k = e.getKey().toString();
177 final String value;
178 if (isMaskedValue(k)) {
179 value = MASKED_VALUE;
180 } else {
181 value = e.getValue().toString();
182 }
183 itemList.add(createItem(k, value));
184 });
185 if (fessConfig instanceof final ObjectiveConfig config) {
186 config.keySet().stream().forEach(k -> {
187 final String value;
188 if (isMaskedValue(k)) {
189 value = MASKED_VALUE;
190 } else {
191 value = config.get(k);
192 }
193 itemList.add(createItem(k, value));
194 });
195 }
196 return itemList;
197 }
198
199
200
201
202
203
204
205 protected static boolean isMaskedValue(final String key) {
206 return "http.proxy.password".equals(key)
207 || "ldap.admin.security.credentials".equals(key)
208 || "spnego.preauth.password".equals(key)
209 || "app.cipher.key".equals(key)
210 || "oic.client.id".equals(key)
211 || "oic.client.secret".equals(key);
212 }
213
214
215
216
217
218
219 public static List<Map<String, String>> getBugReportItems() {
220 final List<Map<String, String>> itemList = new ArrayList<>();
221 for (final String label : bugReportLabels) {
222 itemList.add(createPropItem(label));
223 }
224
225 final DynamicProperties systemProperties = ComponentUtil.getSystemProperties();
226 for (final Map.Entry<Object, Object> entry : systemProperties.entrySet()) {
227 if (isBugReportTarget(entry.getKey())) {
228 itemList.add(createItem(entry.getKey(), entry.getValue()));
229 }
230 }
231
232 return itemList;
233 }
234
235
236
237
238
239
240
241 private static boolean isBugReportTarget(final Object key) {
242 if ("snapshot.path".equals(key) || "label.value".equals(key)) {
243 return false;
244 }
245 return true;
246 }
247
248
249
250
251
252
253
254 protected static Map<String, String> createPropItem(final String key) {
255 return createItem(key, System.getProperty(key));
256 }
257
258
259
260
261
262
263
264
265 protected static Map<String, String> createItem(final Object label, final Object value) {
266 final Map<String, String> map = new HashMap<>(2);
267 map.put(Constants.ITEM_LABEL, label != null ? label.toString() : StringUtil.EMPTY);
268 map.put(Constants.ITEM_VALUE, value != null ? value.toString() : StringUtil.EMPTY);
269 return map;
270 }
271
272 }