1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.openr66.protocol.http.adminssl;
21
22 import com.fasterxml.jackson.databind.node.ArrayNode;
23 import com.fasterxml.jackson.databind.node.ObjectNode;
24 import io.netty.buffer.ByteBuf;
25 import io.netty.channel.ChannelHandlerContext;
26 import io.netty.handler.codec.http.FullHttpRequest;
27 import io.netty.handler.codec.http.HttpMethod;
28 import io.netty.handler.codec.http.HttpResponseStatus;
29 import io.netty.handler.codec.http.QueryStringDecoder;
30 import io.netty.handler.codec.http.cookie.DefaultCookie;
31 import org.joda.time.DateTime;
32 import org.joda.time.format.DateTimeFormat;
33 import org.joda.time.format.DateTimeFormatter;
34 import org.waarp.common.command.exception.Reply421Exception;
35 import org.waarp.common.command.exception.Reply530Exception;
36 import org.waarp.common.database.DbPreparedStatement;
37 import org.waarp.common.database.data.AbstractDbData.UpdatedInfo;
38 import org.waarp.common.database.exception.WaarpDatabaseException;
39 import org.waarp.common.database.exception.WaarpDatabaseNoConnectionException;
40 import org.waarp.common.database.exception.WaarpDatabaseSqlException;
41 import org.waarp.common.digest.FilesystemBasedDigest;
42 import org.waarp.common.exception.InvalidArgumentException;
43 import org.waarp.common.file.DirInterface;
44 import org.waarp.common.json.JsonHandler;
45 import org.waarp.common.logging.WaarpLogLevel;
46 import org.waarp.common.logging.WaarpLogger;
47 import org.waarp.common.logging.WaarpLoggerFactory;
48 import org.waarp.common.role.RoleDefault.ROLE;
49 import org.waarp.common.utility.ParametersChecker;
50 import org.waarp.common.utility.Version;
51 import org.waarp.common.utility.WaarpShutdownHook;
52 import org.waarp.common.utility.WaarpStringUtils;
53 import org.waarp.gateway.kernel.http.HttpWriteCacheEnable;
54 import org.waarp.openr66.client.Message;
55 import org.waarp.openr66.client.SubmitTransfer;
56 import org.waarp.openr66.client.utils.OutputFormat;
57 import org.waarp.openr66.context.ErrorCode;
58 import org.waarp.openr66.context.R66FiniteDualStates;
59 import org.waarp.openr66.context.R66Result;
60 import org.waarp.openr66.context.task.SpooledInformTask;
61 import org.waarp.openr66.database.DbConstantR66;
62 import org.waarp.openr66.database.data.DbHostAuth;
63 import org.waarp.openr66.database.data.DbHostConfiguration;
64 import org.waarp.openr66.database.data.DbRule;
65 import org.waarp.openr66.database.data.DbTaskRunner;
66 import org.waarp.openr66.database.data.DbTaskRunner.Columns;
67 import org.waarp.openr66.protocol.configuration.Configuration;
68 import org.waarp.openr66.protocol.configuration.Messages;
69 import org.waarp.openr66.protocol.exception.OpenR66ProtocolBusinessException;
70 import org.waarp.openr66.protocol.localhandler.LocalChannelReference;
71 import org.waarp.openr66.protocol.localhandler.LocalServerHandler;
72 import org.waarp.openr66.protocol.localhandler.LocalTransaction;
73 import org.waarp.openr66.protocol.localhandler.ServerActions;
74 import org.waarp.openr66.protocol.localhandler.packet.ErrorPacket;
75 import org.waarp.openr66.protocol.localhandler.packet.RequestPacket;
76 import org.waarp.openr66.protocol.localhandler.packet.RequestPacket.TRANSFERMODE;
77 import org.waarp.openr66.protocol.localhandler.packet.TestPacket;
78 import org.waarp.openr66.protocol.networkhandler.NetworkTransaction;
79 import org.waarp.openr66.protocol.utils.NbAndSpecialId;
80 import org.waarp.openr66.protocol.utils.R66Future;
81 import org.waarp.openr66.protocol.utils.TransferUtils;
82
83 import java.sql.Timestamp;
84 import java.util.ArrayList;
85 import java.util.Arrays;
86 import java.util.HashMap;
87 import java.util.List;
88 import java.util.Locale;
89 import java.util.Map;
90 import java.util.Map.Entry;
91 import java.util.Set;
92
93 import static org.waarp.openr66.client.TransferArgs.*;
94
95
96
97
98 public class HttpResponsiveSslHandler extends HttpSslHandler {
99 private static final String B_CENTER_P2 = "</b></center></p>";
100
101 private static final String FILTER2 = "Filter";
102
103 private static final String ACTION2 = "ACTION";
104
105 private static final String OPEN_R66_WEB_ERROR2 = "OpenR66 Web Error {}";
106
107
108
109
110 private static final WaarpLogger logger =
111 WaarpLoggerFactory.getLogger(HttpResponsiveSslHandler.class);
112
113 public static final String LISTING_PAGE = "Listing.html";
114
115 private enum REQUEST {
116 Logon("Logon.html"), Logout("Logon.html"), index("index.html"),
117 error("Error.html"), unallowed("NotAllowed.html"), Listing(LISTING_PAGE),
118 ListingReload(LISTING_PAGE), CancelRestart("CancelRestart.html"),
119 Export("Export.html"), Hosts("Hosts.html"), Rules("Rules.html"),
120 System("System.html"), SystemLimited("SystemLimited.html"),
121 Spooled("Spooled.html"), SpooledDetailed("Spooled.html"),
122 CreateTransfer("CreateTransfer.html");
123
124 private final String header;
125
126
127
128
129
130
131 REQUEST(final String uniquefile) {
132 header = uniquefile;
133 }
134
135
136
137
138
139
140
141
142 REQUEST(final String header, final String headerBody, final String body,
143 final String endBody, final String end) {
144 this.header = header;
145 }
146
147
148
149
150
151
152 public String read(final HttpResponsiveSslHandler handler) {
153 return handler.readFile(
154 Configuration.configuration.getHttpBasePath() + header);
155 }
156 }
157
158
159 public static final String LIMITROW1 = "LIMITROW";
160 public static final String REFRESH = "REFRESH";
161 private static final String XXXRESULTXXX = "XXXRESULTXXX";
162 private static final String XXXDATAJSONXXX = "XXXDATAJSONXXX";
163 private static final String XXXHOSTSIDSXXX = "XXXHOSTSIDSXXX";
164 private static final String XXXRULEIDSXXX = "XXXRULEIDSXXX";
165 private static final String XXXBLOCKSIZEXXX = "XXXBLOCKSIZEXXX";
166
167 private String indexResponsive() {
168 final String index = REQUEST.index.read(this);
169 final StringBuilder builder = new StringBuilder(index);
170 WaarpStringUtils.replaceAll(builder, REPLACEMENT.XXXHOSTIDXXX.toString(),
171 Configuration.configuration.getHostId());
172 WaarpStringUtils.replaceAll(builder, REPLACEMENT.XXXADMINXXX.toString(),
173 Messages.getString(
174 "HttpSslHandler.2"));
175 WaarpStringUtils.replace(builder, REPLACEMENT.XXXVERSIONXXX.toString(),
176 Version.fullIdentifier());
177 return builder.toString();
178 }
179
180 @Override
181 protected final String error(final String mesg) {
182 final String index = REQUEST.error.read(this);
183 return index.replaceAll(REPLACEMENT.XXXERRORMESGXXX.toString(), mesg);
184 }
185
186 private String unallowedResponsive(final String mesg) {
187 final String index = REQUEST.unallowed.read(this);
188 if (ParametersChecker.isEmpty(index)) {
189 return error(mesg);
190 }
191 return index.replaceAll(REPLACEMENT.XXXERRORMESGXXX.toString(), mesg);
192 }
193
194 @Override
195 protected final String logon() {
196 return REQUEST.Logon.read(this);
197 }
198
199 private String setDbTaskRunnerJsonData(final String head, String errorText,
200 final String startid,
201 final String stopid,
202 final Timestamp tstart,
203 final Timestamp tstop,
204 final String rule, final String req,
205 final boolean pending,
206 final boolean transfer,
207 final boolean error,
208 final boolean done,
209 final boolean all) {
210 final String seeAll = checkAuthorizedToSeeAll();
211 DbPreparedStatement preparedStatement = null;
212 try {
213 preparedStatement =
214 DbTaskRunner.getFilterPrepareStatement(dbSession, getLimitRow(),
215 false, startid, stopid, tstart,
216 tstop, rule, req, pending,
217 transfer, error, done, all,
218 seeAll);
219 final String json =
220 DbTaskRunner.getJson(preparedStatement, getLimitRow());
221 return head.replace(XXXDATAJSONXXX, json);
222 } catch (final WaarpDatabaseException e) {
223 if (preparedStatement != null) {
224 preparedStatement.realClose();
225 }
226 logger.warn(OPEN_R66_WEB_ERROR2, e.getMessage());
227 errorText +=
228 Messages.getString("ErrorCode.17") + ": " + e.getMessage() + "<BR/>";
229 }
230 return head.replace(XXXRESULTXXX, errorText);
231 }
232
233 private String listingReload() {
234 final String errorText = "";
235 if (params == null) {
236 return getHeadNoParam(REQUEST.Listing, errorText);
237 }
238 final List<String> parms = params.get(ACTION2);
239 String head = REQUEST.Listing.read(this);
240 if (parms != null) {
241 final String parm = parms.get(0);
242 final boolean isNotReload = !"Reload".equalsIgnoreCase(parm);
243 if (FILTER2.equalsIgnoreCase(parm) || !isNotReload) {
244 head = getFilter(errorText, head, isNotReload);
245 }
246 }
247 head =
248 resetOptionTransfer(head, "", "", "", "", "", "", false, false, false,
249 false, true);
250 head = setDbTaskRunnerJsonData(head, errorText, "", "", null, null, "", "",
251 false, false, false, false, true);
252 return head.replace(XXXRESULTXXX, errorText).replace(XXXDATAJSONXXX, "[]");
253 }
254
255 private String getFilter(final String errorText, String head,
256 final boolean isNotReload) {
257 String startid = getTrimValue("startid");
258 String stopid = getTrimValue("stopid");
259 if (isNotReload && startid != null && stopid == null) {
260 stopid = Long.MAX_VALUE + "";
261 }
262 if (isNotReload && stopid != null && startid == null) {
263 startid = (DbConstantR66.ILLEGALVALUE + 1) + "";
264 }
265 String start = getValue("start");
266 String stop = getValue("stop");
267 final String rule = getTrimValue("rule");
268 final String req = getTrimValue("req");
269 final boolean pending;
270 final boolean transfer;
271 final boolean error;
272 final boolean done;
273 boolean all;
274 pending = params.containsKey("pending");
275 transfer = params.containsKey("transfer");
276 error = params.containsKey("error");
277 done = params.containsKey("done");
278 all = params.containsKey("all");
279 if (pending && transfer && error && done) {
280 all = true;
281 } else if (!(pending || transfer || error || done)) {
282 all = true;
283 }
284 final Timestamp tstart = WaarpStringUtils.fixDate(start);
285 if (tstart != null) {
286 start = tstart.toString();
287 }
288 final Timestamp tstop = WaarpStringUtils.fixDate(stop, tstart);
289 if (tstop != null) {
290 stop = tstop.toString();
291 }
292 head =
293 setDbTaskRunnerJsonData(head, errorText, startid, stopid, tstart, tstop,
294 rule, req, pending, transfer, error, done, all);
295 head = resetOptionTransfer(head, startid == null? "" : startid,
296 stopid == null? "" : stopid, start, stop,
297 rule == null? "" : rule, req == null? "" : req,
298 pending, transfer, error, done, all);
299 return head;
300 }
301
302 private String listing() {
303 getParamsResponsive();
304 return listingReload();
305 }
306
307 private String cancelRestart() {
308 getParamsResponsive();
309 if (params == null) {
310 return getHeadNoParam(REQUEST.CancelRestart, "");
311 }
312 String head = REQUEST.CancelRestart.read(this);
313 String errorText = "";
314 final List<String> parms = params.get(ACTION2);
315 final String seeAll = checkAuthorizedToSeeAll();
316 if (parms != null) {
317 final String parm = parms.get(0);
318 final boolean isNotReload = !"Reload".equalsIgnoreCase(parm);
319 if ("Search".equalsIgnoreCase(parm)) {
320 head = getHeadSearchCancelRestart(head, errorText);
321 } else if (FILTER2.equalsIgnoreCase(parm) || !isNotReload) {
322 head = getFilter(errorText, head, isNotReload);
323 } else if ("RestartAll".equalsIgnoreCase(parm) ||
324 "StopAll".equalsIgnoreCase(parm) ||
325 "StopCleanAll".equalsIgnoreCase(parm)) {
326 final RestartOrStopAll restartOrStopAll =
327 new RestartOrStopAll(head, errorText, seeAll, parm).invoke();
328 head = restartOrStopAll.getHead();
329 errorText = restartOrStopAll.getErrorText();
330 } else if ("Cancel".equalsIgnoreCase(parm) ||
331 "CancelClean".equalsIgnoreCase(parm) ||
332 "Stop".equalsIgnoreCase(parm)) {
333
334 final boolean stop = "Stop".equalsIgnoreCase(parm);
335 final String specid = getValue("specid");
336 final String reqd = getValue("reqd");
337 final String reqr = getValue("reqr");
338 final LocalChannelReference lcr =
339 Configuration.configuration.getLocalTransaction().getFromRequest(
340 reqd + ' ' + reqr + ' ' + specid);
341
342 ErrorCode result;
343 final long lspecid;
344 try {
345 lspecid = Long.parseLong(specid);
346 } catch (final NumberFormatException e) {
347 errorText += "<br><b>" + parm +
348 Messages.getString("HttpSslHandler.3");
349 return head.replace(XXXRESULTXXX, errorText)
350 .replace(XXXDATAJSONXXX, "[]");
351 }
352 DbTaskRunner taskRunner = null;
353 try {
354 taskRunner = new DbTaskRunner(authentHttp, null, lspecid, reqr, reqd);
355 } catch (final WaarpDatabaseException ignored) {
356
357 }
358 if (taskRunner == null) {
359 errorText += "<br><b>" + parm +
360 Messages.getString("HttpSslHandler.3");
361 return head.replace(XXXRESULTXXX, errorText)
362 .replace(XXXDATAJSONXXX, "[]");
363 }
364 final ErrorCode code =
365 stop? ErrorCode.StoppedTransfer : ErrorCode.CanceledTransfer;
366 if (lcr != null) {
367 final int rank = taskRunner.getRank();
368 lcr.sessionNewState(R66FiniteDualStates.ERROR);
369 final ErrorPacket error =
370 new ErrorPacket("Transfer " + parm + ' ' + rank, code.getCode(),
371 ErrorPacket.FORWARDCLOSECODE);
372 try {
373
374 LocalServerHandler.channelRead0(lcr, error);
375 } catch (final Exception ignored) {
376
377 }
378 result = ErrorCode.CompleteOk;
379 } else {
380
381
382 result = ErrorCode.TransferOk;
383 if (taskRunner != null && taskRunner.stopOrCancelRunner(code)) {
384 result = ErrorCode.CompleteOk;
385 }
386 }
387 if (taskRunner != null) {
388 if ("CancelClean".equalsIgnoreCase(parm)) {
389 TransferUtils.cleanOneTransfer(taskRunner, null, authentHttp, null);
390 }
391 final String tstart = taskRunner.getStart().toString();
392 final String tstop = taskRunner.getStop().toString();
393 head = resetOptionTransfer(head, String.valueOf(
394 taskRunner.getSpecialId() - 1), String.valueOf(
395 taskRunner.getSpecialId() + 1), tstart, tstop,
396 taskRunner.getRuleId(),
397 taskRunner.getRequested(), false, false,
398 false, false, true);
399 }
400 final String json = taskRunner.getJsonAsString();
401 head = head.replace(XXXDATAJSONXXX, '[' + json + ']');
402 errorText += "<br><b>" + (result == ErrorCode.CompleteOk?
403 parm + Messages.getString("HttpSslHandler.5") :
404
405 parm + Messages.getString("HttpSslHandler.4")) +
406 "</b>";
407 } else if ("Restart".equalsIgnoreCase(parm)) {
408
409 final String specid = getValue("specid");
410 final String reqd = getValue("reqd");
411 final String reqr = getValue("reqr");
412 final long lspecid;
413 if (specid == null || reqd == null || reqr == null) {
414 errorText += "<br><b>" + parm +
415 Messages.getString("HttpSslHandler.3");
416 return head.replace(XXXRESULTXXX, errorText)
417 .replace(XXXDATAJSONXXX, "[]");
418 }
419 try {
420 lspecid = Long.parseLong(specid);
421 } catch (final NumberFormatException e) {
422 errorText += "<br><b>" + parm +
423 Messages.getString("HttpSslHandler.3");
424 return head.replace(XXXRESULTXXX, errorText)
425 .replace(XXXDATAJSONXXX, "[]");
426 }
427 final DbTaskRunner taskRunner;
428 String comment = "";
429 try {
430 taskRunner = new DbTaskRunner(authentHttp, null, lspecid, reqr, reqd);
431 final LocalChannelReference lcr =
432 Configuration.configuration.getLocalTransaction()
433 .getFromRequest(taskRunner.getKey());
434 final R66Result finalResult =
435 TransferUtils.restartTransfer(taskRunner, lcr);
436 comment = (String) finalResult.getOther();
437 final String tstart = taskRunner.getStart().toString();
438 final String tstop = taskRunner.getStop().toString();
439 head = resetOptionTransfer(head, String.valueOf(
440 taskRunner.getSpecialId() - 1), String.valueOf(
441 taskRunner.getSpecialId() + 1), tstart, tstop,
442 taskRunner.getRuleId(),
443 taskRunner.getRequested(), false, false,
444 false, false, true);
445 final String json = taskRunner.getJsonAsString();
446 head = head.replace(XXXDATAJSONXXX, '[' + json + ']');
447 } catch (final WaarpDatabaseException e) {
448 errorText +=
449 Messages.getString("ErrorCode.17") + ": " + e.getMessage() +
450 "<BR/>";
451 }
452 errorText += "<br><b>" + comment + "</b>";
453 }
454 }
455 head =
456 resetOptionTransfer(head, "", "", "", "", "", "", false, false, false,
457 false, true);
458 head = setDbTaskRunnerJsonData(head, errorText, "", "", null, null, "", "",
459 false, false, false, false, true);
460 return head.replace(XXXRESULTXXX, errorText).replace(XXXDATAJSONXXX, "[]");
461 }
462
463 private String getHeadSearchCancelRestart(String head, String errorText) {
464 final String followId = getTrimValue("followId");
465 if (followId != null) {
466 try {
467 final int limit = getLimitRow();
468 final DbTaskRunner[] dbTaskRunners =
469 DbTaskRunner.getSelectSameFollowId(followId, true, limit,
470 "*".equals(
471 checkAuthorizedToSeeAll()));
472 final ArrayNode arrayNode = JsonHandler.createArrayNode();
473 final LocalTransaction localTransaction =
474 Configuration.configuration.getLocalTransaction();
475 int nb = 0;
476 for (final DbTaskRunner runner : dbTaskRunners) {
477 final ObjectNode node = runner.getJson();
478 node.put(Columns.SPECIALID.name(),
479 Long.toString(runner.getSpecialId()));
480 if (localTransaction == null) {
481 node.put("Running", false);
482 } else {
483 node.put("Running", localTransaction.contained(runner.getKey()));
484 }
485 arrayNode.add(node);
486 nb++;
487 if (nb >= limit) {
488 break;
489 }
490 }
491 final String json = WaarpStringUtils.cleanJsonForHtml(
492 JsonHandler.writeAsString(arrayNode)
493 .replaceAll("(\\\"\\{)([^}]+)(\\}\\\")", "\"{$2}\"")
494 .replaceAll("([^\\\\])(\\\\\")([a-zA-Z_0-9]+)(\\\\\")",
495 "$1\\\\\"$3\\\\\""));
496 head = head.replace(XXXDATAJSONXXX, json);
497 } catch (final WaarpDatabaseNoConnectionException e) {
498 logger.warn(OPEN_R66_WEB_ERROR2, e.getMessage());
499 errorText +=
500 Messages.getString("ErrorCode.17") + ": " + e.getMessage() +
501 "<BR/>";
502 head = head.replace(XXXRESULTXXX, errorText);
503 }
504 head =
505 resetOptionTransfer(head, "", "", "", "", "", "", false, false, false,
506 false, true);
507 } else {
508 final String startid = getTrimValue("startid");
509 final String stopid =
510 startid == null? null : Long.toString(Long.parseLong(startid) + 1);
511 head =
512 setDbTaskRunnerJsonData(head, errorText, startid, stopid, null, null,
513 null, null, false, false, false, false, true);
514 head =
515 resetOptionTransfer(head, startid == null? "" : startid, stopid, "",
516 "", "", "", false, false, false, false, true);
517 }
518 return head;
519 }
520
521 private String getHeadNoParam(final REQUEST request, final String s) {
522 String head = request.read(this);
523 head =
524 resetOptionTransfer(head, "", "", "", "", "", "", false, false, false,
525 false, true);
526 head = setDbTaskRunnerJsonData(head, s, "", "", null, null, "", "", false,
527 false, false, false, true);
528 return head.replace(XXXRESULTXXX, "").replace(XXXDATAJSONXXX, "[]");
529 }
530
531 private String export() {
532 getParamsResponsive();
533 String body = REQUEST.Export.read(this);
534 if (params == null) {
535 body =
536 resetOptionTransfer(body, "", "", "", "", "", "", false, false, false,
537 true, false);
538 return body.replace(XXXRESULTXXX, "");
539 }
540 String start = getValue("start");
541 String stop = getValue("stop");
542 final String rule = getTrimValue("rule");
543 final String req = getTrimValue("req");
544 final boolean pending;
545 boolean transfer;
546 final boolean error;
547 final boolean done;
548 boolean all;
549 pending = params.containsKey("pending");
550 transfer = params.containsKey("transfer");
551 error = params.containsKey("error");
552 done = params.containsKey("done");
553 all = params.containsKey("all");
554 boolean toPurge = params.containsKey("purge");
555 if (toPurge) {
556 transfer = false;
557 }
558 if (pending && transfer && error && done) {
559 all = true;
560 } else if (!(pending || transfer || error || done)) {
561 all = true;
562 }
563 final Timestamp tstart = WaarpStringUtils.fixDate(start);
564 if (tstart != null) {
565 start = tstart.toString();
566 }
567 final Timestamp tstop = WaarpStringUtils.fixDate(stop, tstart);
568 if (tstop != null) {
569 stop = tstop.toString();
570 }
571 body =
572 resetOptionTransfer(body, "", "", start, stop, rule == null? "" : rule,
573 req == null? "" : req, pending, transfer, error,
574 done, all);
575 boolean isexported = true;
576
577 try {
578 DbTaskRunner.changeFinishedToDone();
579 } catch (final WaarpDatabaseNoConnectionException e2) {
580
581 }
582
583 DbPreparedStatement getValid = null;
584 NbAndSpecialId nbAndSpecialId = null;
585 final String basename =
586 Configuration.configuration.getArchivePath() + DirInterface.SEPARATOR +
587 Configuration.configuration.getHostId() + '_' +
588 System.currentTimeMillis() + "_runners.xml";
589 final String filename =
590 Configuration.configuration.getBaseDirectory() + basename;
591 String errorMsg = "";
592 final String seeAll = checkAuthorizedToSeeAll();
593 try {
594 getValid = DbTaskRunner.getFilterPrepareStatement(dbSession, 0,
595
596 true, null, null,
597 tstart, tstop, rule,
598 req, pending, transfer,
599 error, done, all,
600 seeAll);
601 nbAndSpecialId = DbTaskRunner.writeXMLWriter(getValid, filename);
602 } catch (final WaarpDatabaseNoConnectionException e1) {
603 isexported = false;
604 toPurge = false;
605 logger.warn("Export error: {}", e1.getMessage());
606 errorMsg = e1.getMessage();
607 } catch (final WaarpDatabaseSqlException e1) {
608 isexported = false;
609 toPurge = false;
610 logger.warn("Export error: {}", e1.getMessage());
611 errorMsg = e1.getMessage();
612 } catch (final OpenR66ProtocolBusinessException e) {
613 isexported = false;
614 toPurge = false;
615 logger.warn("Export error: {}", e.getMessage());
616 errorMsg = e.getMessage();
617 } finally {
618 if (getValid != null) {
619 getValid.realClose();
620 }
621 }
622 int purge = 0;
623 if (isexported && nbAndSpecialId != null) {
624 if (nbAndSpecialId.nb <= 0) {
625 return body.replace(XXXRESULTXXX, Messages.getString(
626 "HttpSslHandler.7"));
627 }
628
629 if (isexported && toPurge) {
630
631
632
633 final String stopId = Long.toString(nbAndSpecialId.higherSpecialId);
634 try {
635 purge = DbTaskRunner.purgeLogPrepareStatement(dbSession, null, stopId,
636 tstart, tstop, rule,
637 req, pending, transfer,
638 error, done, all);
639 } catch (final WaarpDatabaseNoConnectionException ignored) {
640
641 } catch (final WaarpDatabaseSqlException e) {
642 logger.warn("Purge error: {}", e.getMessage());
643 }
644 }
645 }
646 return body.replace(XXXRESULTXXX, "Export " + (isexported?
647 "<B>" + Messages.getString("HttpSslHandler.8") +
648 "<A href='" + basename + "' target='_blank'>" + basename + "</A>" +
649 Messages.getString("HttpSslHandler.9")
650 + (nbAndSpecialId != null? nbAndSpecialId.nb : 0) +
651 Messages.getString("HttpSslHandler.10") + purge
652
653 + Messages.getString("HttpSslHandler.11") + "</B>" :
654
655 "<B>" + Messages.getString("HttpSslHandler.12"))) + "</B>" +
656 errorMsg;
657 }
658
659 private String setCreateTransferJsonData(final String head,
660 String errorText) {
661 String result = head;
662 try {
663 final DbHostAuth[] dbHostAuths = DbHostAuth.getAllHosts();
664 ArrayNode arrayNode = JsonHandler.createArrayNode();
665 for (final DbHostAuth dbHostAuth : dbHostAuths) {
666 arrayNode.add(dbHostAuth.getHostid());
667 }
668 result =
669 result.replace(XXXHOSTSIDSXXX, JsonHandler.writeAsString(arrayNode));
670 final DbRule[] dbRules = DbRule.getAllRules();
671 arrayNode = JsonHandler.createArrayNode();
672 for (final DbRule dbRule : dbRules) {
673 arrayNode.add(dbRule.getIdRule());
674 }
675 result =
676 result.replace(XXXRULEIDSXXX, JsonHandler.writeAsString(arrayNode));
677 result = result.replace(XXXBLOCKSIZEXXX,
678 "" + Configuration.configuration.getBlockSize());
679
680 return setDbTaskRunnerJsonData(result, errorText, "", "", null, null, "",
681 "", true, false, false, false, false);
682 } catch (final WaarpDatabaseException e) {
683 logger.warn(OPEN_R66_WEB_ERROR2, e.getMessage());
684 errorText +=
685 Messages.getString("ErrorCode.17") + ": " + e.getMessage() + "<BR/>";
686 return head.replace(XXXRESULTXXX, errorText);
687 }
688 }
689
690 private String createTransfer() {
691 getParamsResponsive();
692 String head = REQUEST.CreateTransfer.read(this);
693 String errorText = "";
694 if (params == null) {
695 head = setCreateTransferJsonData(head, errorText);
696 return head.replace(XXXRESULTXXX, errorText)
697 .replace(XXXDATAJSONXXX, "[]");
698 }
699 final List<String> parms = params.get(ACTION2);
700 if (parms != null) {
701 final String parm = parms.get(0);
702 final String rule = getTrimValue("rule");
703 final String host = getTrimValue("host");
704 final String filename = getTrimValue("filename");
705 String transferinfo = getTrimValue("transferinfo");
706 final String startdate = getTrimValue("startdate");
707 final String blocksize = getTrimValue("blocksize");
708 final String followid = getTrimValue("followid");
709 if (transferinfo == null) {
710 transferinfo = "";
711 }
712 String actionError = "";
713 int iaction = 0;
714 if ("Create".equalsIgnoreCase(parm)) {
715 iaction = 1;
716 actionError = Messages.getString(
717 "HttpSslHandler.CannotCreateTransfer");
718 } else if ("Update".equalsIgnoreCase(parm)) {
719 iaction = 2;
720 actionError = Messages.getString(
721 "HttpSslHandler.CannotUpdateTransfer");
722 }
723 if (iaction > 0) {
724 int iblocksize = Configuration.configuration.getBlockSize();
725 if (blocksize != null) {
726 try {
727 iblocksize = Integer.parseInt(blocksize);
728 if (iblocksize > Configuration.configuration.getBlockSize()) {
729 iblocksize = Configuration.configuration.getBlockSize();
730 }
731 } catch (final NumberFormatException e1) {
732 errorText =
733 actionError + e1.getMessage() + B_CENTER_P2;
734 head = setCreateTransferJsonData(head, errorText);
735 return head.replace(XXXRESULTXXX, errorText)
736 .replace(XXXDATAJSONXXX, "[]");
737 }
738 }
739 long lfollowId = Long.MIN_VALUE;
740 if (followid != null) {
741 try {
742 lfollowId = Long.parseLong(followid);
743 } catch (final NumberFormatException e1) {
744 errorText =
745 actionError + e1.getMessage() + B_CENTER_P2;
746 head = setCreateTransferJsonData(head, errorText);
747 return head.replace(XXXRESULTXXX, errorText)
748 .replace(XXXDATAJSONXXX, "[]");
749 }
750 }
751 DateTime dateTime = null;
752 if (startdate != null) {
753 final DateTimeFormatter formatter =
754 DateTimeFormat.forPattern("yyyy/MM/dd HH:mm");
755 try {
756 dateTime = formatter.parseDateTime(startdate);
757 } catch (final Exception e) {
758 errorText =
759 actionError + e.getMessage() + B_CENTER_P2;
760 head = setCreateTransferJsonData(head, errorText);
761 return head.replace(XXXRESULTXXX, errorText)
762 .replace(XXXDATAJSONXXX, "[]");
763 }
764 }
765 if (iaction == 1) {
766 if (logger.isDebugEnabled()) {
767 final Set<Entry<String, List<String>>> entries = params.entrySet();
768 for (final Entry<String, List<String>> entry : entries) {
769 String vals = "";
770 for (final String val : entry.getValue()) {
771 vals += val + ";";
772 }
773 logger.debug("CREATE {} = {}", entry.getKey(), vals);
774 }
775 }
776
777 if (ParametersChecker.isEmpty(host, rule, filename)) {
778 errorText = actionError;
779 head = setCreateTransferJsonData(head, errorText);
780 return head.replace(XXXRESULTXXX, errorText)
781 .replace(XXXDATAJSONXXX, "[]");
782 }
783 try {
784 if (followid != null) {
785 final Map<String, Object> map = new HashMap<String, Object>();
786 map.put(FOLLOW_JSON_KEY, lfollowId);
787 transferinfo += " " + JsonHandler.writeAsStringEscaped(map);
788 }
789 final R66Future future = new R66Future(true);
790 final SubmitTransfer submitTransfer =
791 new SubmitTransfer(future, host, filename, rule, transferinfo,
792 true, iblocksize, DbConstantR66.ILLEGALVALUE,
793 dateTime != null?
794 new Timestamp(dateTime.getMillis()) :
795 null);
796 submitTransfer.setNormalInfoAsWarn(false);
797 submitTransfer.run();
798 future.awaitOrInterruptible();
799 final OutputFormat outputFormat =
800 new OutputFormat(SubmitTransfer.class.getSimpleName(), null);
801 final DbTaskRunner runner = future.getResult().getRunner();
802 if (future.isSuccess()) {
803 SubmitTransfer.prepareSubmitOkOutputFormat(runner, outputFormat);
804 } else {
805 SubmitTransfer.prepareSubmitKoOutputFormat(future, runner,
806 outputFormat);
807 }
808 errorText = outputFormat.loggerOut();
809 head = setCreateTransferJsonData(head, errorText);
810 return head.replace(XXXRESULTXXX, errorText)
811 .replace(XXXDATAJSONXXX, "[]");
812 } catch (final Exception e) {
813 logger.error("Create TaskRunner in error: {}", e.getMessage());
814 errorText = actionError + e.getMessage()
815
816 + B_CENTER_P2;
817 head = setCreateTransferJsonData(head, errorText);
818 return head.replace(XXXRESULTXXX, errorText)
819 .replace(XXXDATAJSONXXX, "[]");
820 }
821 } else if (iaction == 2) {
822 if (logger.isDebugEnabled()) {
823 final Set<Entry<String, List<String>>> entries = params.entrySet();
824 for (final Entry<String, List<String>> entry : entries) {
825 String vals = "";
826 for (final String val : entry.getValue()) {
827 vals += val + ";";
828 }
829 logger.debug("UPDATE {} = {}", entry.getKey(), vals);
830 }
831 }
832 final String owner = getTrimValue("OWNERREQ");
833 final String requester = getTrimValue("REQUESTER");
834 final String requested = getTrimValue("REQUESTED");
835 final String specialId = getTrimValue("SPECIALID");
836 if (ParametersChecker.isEmpty(rule, filename, owner, requested,
837 requester, specialId)) {
838 logger.debug("Some Fields are null: {} {} {} {} {} {}", rule,
839 filename, owner, requested, requester, specialId);
840 errorText = actionError + " some arguments are empty";
841 head = setCreateTransferJsonData(head, errorText);
842 return head.replace(XXXRESULTXXX, errorText)
843 .replace(XXXDATAJSONXXX, "[]");
844 }
845
846 try {
847 final long lspecialId = Long.parseLong(specialId);
848 logger.debug("Search for: {} {} {} {}", lspecialId, owner,
849 requester, requested);
850 final DbTaskRunner runner =
851 new DbTaskRunner(lspecialId, requester, requested, owner);
852 if (ParametersChecker.isNotEmpty(host) && !requested.equals(host)) {
853 errorText = actionError + " Requested Host cannot be changed"
854
855 + B_CENTER_P2;
856 head = setCreateTransferJsonData(head, errorText);
857 return head.replace(XXXRESULTXXX, errorText)
858 .replace(XXXDATAJSONXXX, "[]");
859 }
860 if (ParametersChecker.isNotEmpty(rule) &&
861 !runner.getRuleId().equals(rule)) {
862 runner.setRuleId(rule);
863 }
864 if (ParametersChecker.isNotEmpty(filename) &&
865 !runner.getFilename().equals(filename)) {
866 runner.setFilename(filename);
867 runner.setOriginalFilename(filename);
868 }
869 if (dateTime != null &&
870 !dateTime.isEqual(runner.getStart().getTime())) {
871 runner.setStart(new Timestamp(dateTime.getMillis()));
872 }
873 if (runner.getBlocksize() != iblocksize) {
874 runner.setBlocksize(iblocksize);
875 }
876 if (followid != null &&
877 !followid.trim().equals(runner.getFollowId())) {
878 final Map<String, Object> map =
879 DbTaskRunner.getMapFromString(transferinfo);
880 String outOfMap =
881 DbTaskRunner.getOutOfMapFromString(transferinfo);
882 map.put(FOLLOW_JSON_KEY, lfollowId);
883 outOfMap += " " + JsonHandler.writeAsStringEscaped(map);
884 transferinfo = outOfMap;
885 runner.setFileInformation(transferinfo);
886 runner.setFollowId(lfollowId);
887 } else {
888 runner.setFileInformation(transferinfo);
889 }
890 runner.changeUpdatedInfo(UpdatedInfo.TOSUBMIT);
891 runner.update();
892 final OutputFormat outputFormat =
893 new OutputFormat(SubmitTransfer.class.getSimpleName(), null);
894 SubmitTransfer.prepareSubmitOkOutputFormat(runner, outputFormat);
895 errorText = outputFormat.loggerOut();
896 head = setCreateTransferJsonData(head, errorText);
897 return head.replace(XXXRESULTXXX, errorText)
898 .replace(XXXDATAJSONXXX, "[]");
899 } catch (final Exception e) {
900 errorText = actionError + e.getMessage()
901
902 + B_CENTER_P2;
903 logger.error("Update TaskRunner in error: {}", e.getMessage());
904 head = setCreateTransferJsonData(head, errorText);
905 return head.replace(XXXRESULTXXX, errorText)
906 .replace(XXXDATAJSONXXX, "[]");
907 }
908 }
909 }
910 }
911 head = setCreateTransferJsonData(head, errorText);
912 return head.replace(XXXRESULTXXX, errorText).replace(XXXDATAJSONXXX, "[]");
913 }
914
915 private String setDbHostAuthJsonData(final String head, String errorText,
916 final String host, final String addr,
917 final boolean ssl,
918 final boolean isactive) {
919 DbPreparedStatement preparedStatement = null;
920 try {
921 preparedStatement =
922 DbHostAuth.getFilterPrepareStament(dbSession, host, addr, ssl,
923 isactive);
924 final String json = DbHostAuth.getJson(preparedStatement, getLimitRow());
925 return head.replace(XXXDATAJSONXXX, json);
926 } catch (final WaarpDatabaseException e) {
927 if (preparedStatement != null) {
928 preparedStatement.realClose();
929 }
930 logger.warn(OPEN_R66_WEB_ERROR2, e.getMessage());
931 errorText +=
932 Messages.getString("ErrorCode.17") + ": " + e.getMessage() + "<BR/>";
933 }
934 return head.replace(XXXRESULTXXX, errorText);
935 }
936
937 private String hosts() {
938 getParamsResponsive();
939 String head = REQUEST.Hosts.read(this);
940 String errorText = "";
941 if (params == null) {
942 head = resetOptionHosts(head, "", "", false, true);
943 head = setDbHostAuthJsonData(head, errorText, null, null, false, true);
944 return head.replace(XXXRESULTXXX, errorText)
945 .replace(XXXDATAJSONXXX, "[]");
946 }
947 final List<String> parms = params.get(ACTION2);
948 if (parms != null) {
949 final String parm = parms.get(0);
950 if ("Create".equalsIgnoreCase(parm)) {
951 final String host = getTrimValue("host");
952 String addr = getTrimValue("address");
953 String port = getTrimValue("port");
954 final String key = getTrimValue("hostkey");
955 final boolean ssl;
956 final boolean admin;
957 boolean isclient;
958 final boolean isactive;
959 final boolean isproxified;
960 ssl = params.containsKey("ssl");
961 admin = params.containsKey("admin");
962 isclient = params.containsKey("isclient");
963 isactive = params.containsKey("isactive");
964 isproxified = params.containsKey("isproxified");
965 if (port == null) {
966 port = "-1";
967 }
968 if ("-1".equals(port)) {
969 isclient = true;
970 }
971 if (isclient && addr == null) {
972 addr = "0.0.0.0";
973 }
974 if (host == null || addr == null || key == null) {
975 errorText = Messages.getString("HttpSslHandler.13");
976 head = resetOptionHosts(head, "", "", ssl, isactive);
977 head = setDbHostAuthJsonData(head, errorText, null, null, ssl, true);
978 return head.replace(XXXRESULTXXX, errorText)
979 .replace(XXXDATAJSONXXX, "[]");
980 }
981 int iport = -1;
982 try {
983 iport = Integer.parseInt(port);
984 } catch (final NumberFormatException e1) {
985 errorText =
986 Messages.getString("HttpSslHandler.14") + e1.getMessage() +
987 B_CENTER_P2;
988 head = resetOptionHosts(head, "", "", ssl, isactive);
989 head = setDbHostAuthJsonData(head, errorText, null, null, ssl, true);
990 return head.replace(XXXRESULTXXX, errorText)
991 .replace(XXXDATAJSONXXX, "[]");
992 }
993 final DbHostAuth dbhost;
994 try {
995 dbhost = new DbHostAuth(host, addr, iport, ssl,
996 key.getBytes(WaarpStringUtils.UTF8), admin,
997 isclient);
998 dbhost.setActive(isactive);
999 dbhost.setProxified(isproxified);
1000 dbhost.insert();
1001 } catch (final WaarpDatabaseException e) {
1002 errorText = Messages.getString("HttpSslHandler.14") + e.getMessage()
1003
1004 + B_CENTER_P2;
1005 head = resetOptionHosts(head, "", "", ssl, isactive);
1006 head = setDbHostAuthJsonData(head, errorText, null, null, ssl, true);
1007 return head.replace(XXXRESULTXXX, errorText)
1008 .replace(XXXDATAJSONXXX, "[]");
1009 }
1010 head = resetOptionHosts(head, host, addr, ssl, isactive);
1011 final String json = dbhost.getJsonAsString();
1012 head = head.replace(XXXDATAJSONXXX, '[' + json + ']');
1013 } else if (FILTER2.equalsIgnoreCase(parm)) {
1014 final String host = getTrimValue("host");
1015 final String addr = getTrimValue("address");
1016 final boolean ssl = params.containsKey("ssl");
1017 final boolean isactive = params.containsKey("active");
1018 head = resetOptionHosts(head, host == null? "" : host,
1019 addr == null? "" : addr, ssl, isactive);
1020 head =
1021 setDbHostAuthJsonData(head, errorText, host, addr, ssl, isactive);
1022 } else if ("Update".equalsIgnoreCase(parm)) {
1023 final String host = getTrimValue("host");
1024 final String addr = getTrimValue("address");
1025 final String port = getTrimValue("port");
1026 final String key = getTrimValue("hostkey");
1027 final boolean ssl;
1028 final boolean admin;
1029 final boolean isclient;
1030 final boolean isactive;
1031 final boolean isproxified;
1032 ssl = params.containsKey("ssl");
1033 admin = params.containsKey("admin");
1034 isclient = params.containsKey("isclient");
1035 isactive = params.containsKey("isactive");
1036 isproxified = params.containsKey("isproxified");
1037 if (host == null || addr == null || port == null || key == null) {
1038 errorText = Messages.getString("HttpSslHandler.15");
1039 head = resetOptionHosts(head, "", "", ssl, isactive);
1040 head =
1041 setDbHostAuthJsonData(head, errorText, host, addr, ssl, isactive);
1042 return head.replace(XXXRESULTXXX, errorText)
1043 .replace(XXXDATAJSONXXX, "[]");
1044 }
1045 final int iport;
1046 try {
1047 iport = Integer.parseInt(port);
1048 } catch (final NumberFormatException e1) {
1049 errorText =
1050 Messages.getString("HttpSslHandler.16") + e1.getMessage() +
1051 B_CENTER_P2;
1052 head = resetOptionHosts(head, "", "", ssl, isactive);
1053 head =
1054 setDbHostAuthJsonData(head, errorText, host, addr, ssl, isactive);
1055 return head.replace(XXXRESULTXXX, errorText)
1056 .replace(XXXDATAJSONXXX, "[]");
1057 }
1058 final DbHostAuth dbhost;
1059 try {
1060 dbhost = new DbHostAuth(host, addr, iport, ssl,
1061 key.getBytes(WaarpStringUtils.UTF8), admin,
1062 isclient);
1063 dbhost.setActive(isactive);
1064 dbhost.setProxified(isproxified);
1065 if (dbhost.exist()) {
1066 dbhost.update();
1067 } else {
1068 dbhost.insert();
1069 }
1070 } catch (final WaarpDatabaseException e) {
1071 errorText = Messages.getString("HttpSslHandler.16") + e.getMessage() +
1072 B_CENTER_P2;
1073 head = resetOptionHosts(head, "", "", ssl, isactive);
1074 head =
1075 setDbHostAuthJsonData(head, errorText, host, addr, ssl, isactive);
1076 return head.replace(XXXRESULTXXX, errorText)
1077 .replace(XXXDATAJSONXXX, "[]");
1078 }
1079 head = resetOptionHosts(head, host, addr, ssl, isactive);
1080 final String json = dbhost.getJsonAsString();
1081 head = head.replace(XXXDATAJSONXXX, '[' + json + ']');
1082 } else if ("TestConn".equalsIgnoreCase(parm)) {
1083 final String host = getTrimValue("host");
1084 if (ParametersChecker.isEmpty(host)) {
1085 errorText = Messages.getString("HttpSslHandler.17") + B_CENTER_P2;
1086 head = resetOptionHosts(head, "", "", false, true);
1087 head =
1088 setDbHostAuthJsonData(head, errorText, host, null, false, true);
1089 return head.replace(XXXRESULTXXX, errorText)
1090 .replace(XXXDATAJSONXXX, "[]");
1091 }
1092 final DbHostAuth dbhost;
1093 try {
1094 dbhost = new DbHostAuth(host);
1095 } catch (final WaarpDatabaseException e) {
1096 errorText = Messages.getString("HttpSslHandler.17") + e.getMessage() +
1097 B_CENTER_P2;
1098 head = resetOptionHosts(head, "", "", false, true);
1099 head =
1100 setDbHostAuthJsonData(head, errorText, host, null, false, true);
1101 return head.replace(XXXRESULTXXX, errorText)
1102 .replace(XXXDATAJSONXXX, "[]");
1103 }
1104 final R66Future result = new R66Future(true);
1105 final TestPacket packet = new TestPacket("MSG", "CheckConnection", 100);
1106 final Message transaction = new Message(
1107 Configuration.configuration.getInternalRunner()
1108 .getNetworkTransaction(), result, dbhost,
1109 packet);
1110 transaction.run();
1111 result.awaitOrInterruptible();
1112 head =
1113 resetOptionHosts(head, "", "", dbhost.isSsl(), dbhost.isActive());
1114 final String json = dbhost.getJsonAsString();
1115 head = head.replace(XXXDATAJSONXXX, '[' + json + ']');
1116 if (result.isSuccess()) {
1117 errorText = Messages.getString("HttpSslHandler.18");
1118 } else {
1119 errorText = Messages.getString("HttpSslHandler.19")
1120
1121 + result.getResult().getCode().getMesg() + B_CENTER_P2;
1122 }
1123 } else if ("CloseConn".equalsIgnoreCase(parm)) {
1124 final String host = getTrimValue("host");
1125 if (ParametersChecker.isEmpty(host)) {
1126 errorText = Messages.getString("HttpSslHandler.17") + B_CENTER_P2;
1127 head = resetOptionHosts(head, "", "", false, true);
1128 head =
1129 setDbHostAuthJsonData(head, errorText, host, null, false, true);
1130 return head.replace(XXXRESULTXXX, errorText)
1131 .replace(XXXDATAJSONXXX, "[]");
1132 }
1133 final DbHostAuth dbhost;
1134 try {
1135 dbhost = new DbHostAuth(host);
1136 } catch (final WaarpDatabaseException e) {
1137 errorText = Messages.getString("HttpSslHandler.17") + e.getMessage() +
1138 B_CENTER_P2;
1139 head = resetOptionHosts(head, "", "", false, true);
1140 head =
1141 setDbHostAuthJsonData(head, errorText, host, null, false, true);
1142 return head.replace(XXXRESULTXXX, errorText)
1143 .replace(XXXDATAJSONXXX, "[]");
1144 }
1145 final boolean resultShutDown =
1146 NetworkTransaction.shuttingdownNetworkChannelsPerHostID(
1147 dbhost.getHostid());
1148 head =
1149 resetOptionHosts(head, "", "", dbhost.isSsl(), dbhost.isActive());
1150 final String json = dbhost.getJsonAsString();
1151 head = head.replace(XXXDATAJSONXXX, '[' + json + ']');
1152 if (resultShutDown) {
1153 errorText = Messages.getString("HttpSslHandler.21");
1154 } else {
1155 errorText = Messages.getString("HttpSslHandler.22");
1156 }
1157 } else if ("Delete".equalsIgnoreCase(parm)) {
1158 final String host = getTrimValue("host");
1159 if (ParametersChecker.isEmpty(host)) {
1160 errorText = Messages.getString("HttpSslHandler.23") + B_CENTER_P2;
1161 head = resetOptionHosts(head, "", "", false, true);
1162 head =
1163 setDbHostAuthJsonData(head, errorText, host, null, false, true);
1164 return head.replace(XXXRESULTXXX, errorText)
1165 .replace(XXXDATAJSONXXX, "[]");
1166 }
1167 final DbHostAuth dbhost;
1168 try {
1169 dbhost = new DbHostAuth(host);
1170 } catch (final WaarpDatabaseException e) {
1171 errorText = Messages.getString("HttpSslHandler.24") + e.getMessage() +
1172 B_CENTER_P2;
1173 head = resetOptionHosts(head, "", "", false, true);
1174 head =
1175 setDbHostAuthJsonData(head, errorText, host, null, false, true);
1176 return head.replace(XXXRESULTXXX, errorText)
1177 .replace(XXXDATAJSONXXX, "[]");
1178 }
1179 try {
1180 dbhost.delete();
1181 } catch (final WaarpDatabaseException e) {
1182 errorText = Messages.getString("HttpSslHandler.24") + e.getMessage() +
1183 B_CENTER_P2;
1184 head = resetOptionHosts(head, "", "", false, true);
1185 head =
1186 setDbHostAuthJsonData(head, errorText, host, null, dbhost.isSsl(),
1187 dbhost.isActive());
1188 return head.replace(XXXRESULTXXX, errorText)
1189 .replace(XXXDATAJSONXXX, "[]");
1190 }
1191 final String json = dbhost.getJsonAsString();
1192 head = head.replace(XXXDATAJSONXXX, '[' + json + ']');
1193 errorText = Messages.getString("HttpSslHandler.25") + host +
1194 B_CENTER_P2;
1195 head = resetOptionHosts(head, "", "", false, dbhost.isActive());
1196 return head.replace(XXXRESULTXXX, errorText)
1197 .replace(XXXDATAJSONXXX, "[]");
1198 }
1199 }
1200 head = resetOptionHosts(head, "", "", false, true);
1201 head = setDbHostAuthJsonData(head, errorText, null, null, false, true);
1202 return head.replace(XXXRESULTXXX, errorText).replace(XXXDATAJSONXXX, "[]");
1203 }
1204
1205 private void createExport(final HashMap<String, String> rules,
1206 final String rule, final int mode,
1207 final int limit) {
1208 DbPreparedStatement preparedStatement = null;
1209 try {
1210 preparedStatement = DbRule.getFilterPrepareStament(dbSession, rule, mode);
1211 preparedStatement.executeQuery();
1212 int i = 0;
1213 while (preparedStatement.getNext()) {
1214 final DbRule dbrule = DbRule.getFromStatement(preparedStatement);
1215 rules.put(dbrule.getIdRule(), dbrule.getJsonAsString());
1216 i++;
1217 if (i > limit) {
1218 break;
1219 }
1220 }
1221 preparedStatement.realClose();
1222 } catch (final WaarpDatabaseException e) {
1223 if (preparedStatement != null) {
1224 preparedStatement.realClose();
1225 }
1226 logger.warn(OPEN_R66_WEB_ERROR2, e.getMessage());
1227 }
1228 }
1229
1230 private String createExport(final String head, String errorText,
1231 final String rule) {
1232 DbPreparedStatement preparedStatement = null;
1233 try {
1234 preparedStatement = DbRule.getFilterPrepareStament(dbSession, rule, -1);
1235 final String json = DbRule.getJson(preparedStatement, getLimitRow());
1236 preparedStatement.realClose();
1237 return head.replace(XXXDATAJSONXXX, json);
1238 } catch (final WaarpDatabaseException e) {
1239 if (preparedStatement != null) {
1240 preparedStatement.realClose();
1241 }
1242 logger.warn(OPEN_R66_WEB_ERROR2, e.getMessage());
1243 errorText +=
1244 Messages.getString("ErrorCode.17") + ": " + e.getMessage() + "<BR/>";
1245 }
1246 return head.replace(XXXRESULTXXX, errorText).replace(XXXDATAJSONXXX, "[]");
1247 }
1248
1249 private String rules() {
1250 getParamsResponsive();
1251 String head = REQUEST.Rules.read(this);
1252 final StringBuilder builderHead = new StringBuilder(head);
1253 fillHostIds(builderHead);
1254 head = builderHead.toString();
1255 String errorText = "";
1256 if (params == null) {
1257 head = resetOptionRules(head, "", null, -3);
1258 head = createExport(head, errorText, null);
1259 return head.replace(XXXRESULTXXX, errorText)
1260 .replace(XXXDATAJSONXXX, "[]");
1261 }
1262 final List<String> parms = params.get(ACTION2);
1263 if (parms != null) {
1264 final String parm = parms.get(0);
1265 if ("Create".equalsIgnoreCase(parm) || "Update".equalsIgnoreCase(parm)) {
1266 final String rule = getTrimValue("rule");
1267 final String hostids = getTrimValue("hostids");
1268 final String recvp = getTrimValue("recvp");
1269 final String sendp = getTrimValue("sendp");
1270 final String archp = getTrimValue("archp");
1271 final String workp = getTrimValue("workp");
1272 final String rpre = getTrimValue("rpre");
1273 final String rpost = getTrimValue("rpost");
1274 final String rerr = getTrimValue("rerr");
1275 final String spre = getTrimValue("spre");
1276 final String spost = getTrimValue("spost");
1277 final String serr = getTrimValue("serr");
1278 final String mode = getTrimValue("mode");
1279 if (rule == null || mode == null) {
1280 errorText = Messages.getString("HttpSslHandler.26") + parm +
1281 Messages.getString(
1282 "HttpSslHandler.27");
1283 head = resetOptionRules(head, "", null, -3);
1284 head = createExport(head, errorText, null);
1285 return head.replace(XXXRESULTXXX, errorText)
1286 .replace(XXXDATAJSONXXX, "[]");
1287 }
1288 int gmode = 0;
1289
1290 TRANSFERMODE tmode = null;
1291 if ("send".equals(mode)) {
1292 tmode = RequestPacket.TRANSFERMODE.SENDMODE;
1293 gmode = -2;
1294 } else if ("recv".equals(mode)) {
1295 tmode = RequestPacket.TRANSFERMODE.RECVMODE;
1296 gmode = -1;
1297 } else if ("sendmd5".equals(mode)) {
1298 tmode = RequestPacket.TRANSFERMODE.SENDMD5MODE;
1299 gmode = -2;
1300 } else if ("recvmd5".equals(mode)) {
1301 tmode = RequestPacket.TRANSFERMODE.RECVMD5MODE;
1302 gmode = -1;
1303 } else if ("sendth".equals(mode)) {
1304 tmode = RequestPacket.TRANSFERMODE.SENDTHROUGHMODE;
1305 gmode = -2;
1306 } else if ("recvth".equals(mode)) {
1307 tmode = RequestPacket.TRANSFERMODE.RECVTHROUGHMODE;
1308 gmode = -1;
1309 } else if ("sendthmd5".equals(mode)) {
1310 tmode = RequestPacket.TRANSFERMODE.SENDMD5THROUGHMODE;
1311 gmode = -2;
1312 } else if ("recvthmd5".equals(mode)) {
1313 tmode = RequestPacket.TRANSFERMODE.RECVMD5THROUGHMODE;
1314 gmode = -1;
1315 }
1316 head = resetOptionRules(head, rule, tmode, gmode);
1317 if (logger.isDebugEnabled()) {
1318 logger.debug("Recv UpdOrInsert: " + rule + ':' + hostids + ':' +
1319 (tmode != null? tmode.ordinal() : 0) + ':' + recvp +
1320 ':' + sendp + ':' + archp + ':' + workp + ':' + rpre +
1321 ':' + rpost + ':' + rerr + ':' + spre + ':' + spost +
1322 ':' + serr);
1323 }
1324 final DbRule dbrule;
1325 try {
1326 dbrule =
1327 new DbRule(rule, hostids, (tmode != null? tmode.ordinal() : 0),
1328 recvp, sendp, archp, workp, rpre, rpost, rerr, spre,
1329 spost, serr);
1330 if ("Create".equalsIgnoreCase(parm)) {
1331 dbrule.insert();
1332 } else {
1333 if (dbrule.exist()) {
1334 dbrule.update();
1335 } else {
1336 dbrule.insert();
1337 }
1338 }
1339 } catch (final WaarpDatabaseException e) {
1340 errorText = Messages.getString("HttpSslHandler.28") + e.getMessage()
1341
1342 + B_CENTER_P2;
1343 head = resetOptionRules(head, "", null, -3);
1344 head = createExport(head, errorText, null);
1345 return head.replace(XXXRESULTXXX, errorText)
1346 .replace(XXXDATAJSONXXX, "[]");
1347 }
1348 final String json = dbrule.getJsonAsString();
1349 head = head.replace(XXXDATAJSONXXX, '[' + json + ']');
1350 } else if (FILTER2.equalsIgnoreCase(parm)) {
1351 final String rule = getTrimValue("rule");
1352 final String mode = getTrimValue("mode");
1353 TRANSFERMODE tmode;
1354 int gmode = 0;
1355 if (mode != null) {
1356 if ("all".equals(mode)) {
1357 gmode = -3;
1358 } else if ("send".equals(mode)) {
1359 gmode = -2;
1360 } else if ("recv".equals(mode)) {
1361 gmode = -1;
1362 }
1363 }
1364 head = resetOptionRules(head, rule == null? "" : rule, null, gmode);
1365 final HashMap<String, String> rules = new HashMap<String, String>();
1366 boolean specific = false;
1367 if (params.containsKey("send")) {
1368 tmode = RequestPacket.TRANSFERMODE.SENDMODE;
1369 head = resetOptionRules(head, rule == null? "" : rule, tmode, gmode);
1370 specific = true;
1371 createExport(rules, rule,
1372 RequestPacket.TRANSFERMODE.SENDMODE.ordinal(),
1373 getLimitRow() / 2);
1374 }
1375 if (params.containsKey("recv")) {
1376 tmode = RequestPacket.TRANSFERMODE.RECVMODE;
1377 head = resetOptionRules(head, rule == null? "" : rule, tmode, gmode);
1378 specific = true;
1379 createExport(rules, rule,
1380 RequestPacket.TRANSFERMODE.RECVMODE.ordinal(),
1381 getLimitRow() / 2);
1382 }
1383 if (params.containsKey("sendmd5")) {
1384 tmode = RequestPacket.TRANSFERMODE.SENDMD5MODE;
1385 head = resetOptionRules(head, rule == null? "" : rule, tmode, gmode);
1386 specific = true;
1387 createExport(rules, rule,
1388 RequestPacket.TRANSFERMODE.SENDMD5MODE.ordinal(),
1389 getLimitRow() / 2);
1390 }
1391 if (params.containsKey("recvmd5")) {
1392 tmode = RequestPacket.TRANSFERMODE.RECVMD5MODE;
1393 head = resetOptionRules(head, rule == null? "" : rule, tmode, gmode);
1394 specific = true;
1395 createExport(rules, rule,
1396 RequestPacket.TRANSFERMODE.RECVMD5MODE.ordinal(),
1397 getLimitRow() / 2);
1398 }
1399 if (params.containsKey("sendth")) {
1400 tmode = RequestPacket.TRANSFERMODE.SENDTHROUGHMODE;
1401 head = resetOptionRules(head, rule == null? "" : rule, tmode, gmode);
1402 specific = true;
1403 createExport(rules, rule,
1404 RequestPacket.TRANSFERMODE.SENDTHROUGHMODE.ordinal(),
1405 getLimitRow() / 2);
1406 }
1407 if (params.containsKey("recvth")) {
1408 tmode = RequestPacket.TRANSFERMODE.RECVTHROUGHMODE;
1409 head = resetOptionRules(head, rule == null? "" : rule, tmode, gmode);
1410 specific = true;
1411 createExport(rules, rule,
1412 RequestPacket.TRANSFERMODE.RECVTHROUGHMODE.ordinal(),
1413 getLimitRow() / 2);
1414 }
1415 if (params.containsKey("sendthmd5")) {
1416 tmode = RequestPacket.TRANSFERMODE.SENDMD5THROUGHMODE;
1417 head = resetOptionRules(head, rule == null? "" : rule, tmode, gmode);
1418 specific = true;
1419 createExport(rules, rule,
1420 RequestPacket.TRANSFERMODE.SENDMD5THROUGHMODE.ordinal(),
1421 getLimitRow() / 2);
1422 }
1423 if (params.containsKey("recvthmd5")) {
1424 tmode = RequestPacket.TRANSFERMODE.RECVMD5THROUGHMODE;
1425 head = resetOptionRules(head, rule == null? "" : rule, tmode, gmode);
1426 specific = true;
1427 createExport(rules, rule,
1428 RequestPacket.TRANSFERMODE.RECVMD5THROUGHMODE.ordinal(),
1429 getLimitRow() / 2);
1430 }
1431 if (!specific) {
1432 if (gmode == -1) {
1433
1434 createExport(rules, rule,
1435 RequestPacket.TRANSFERMODE.RECVMODE.ordinal(),
1436 getLimitRow() / 2);
1437 createExport(rules, rule,
1438 RequestPacket.TRANSFERMODE.RECVMD5MODE.ordinal(),
1439 getLimitRow() / 2);
1440 createExport(rules, rule,
1441 RequestPacket.TRANSFERMODE.RECVTHROUGHMODE.ordinal(),
1442 getLimitRow() / 2);
1443 createExport(rules, rule,
1444 RequestPacket.TRANSFERMODE.RECVMD5THROUGHMODE.ordinal(),
1445 getLimitRow() / 2);
1446 } else if (gmode == -2) {
1447
1448 createExport(rules, rule,
1449 RequestPacket.TRANSFERMODE.SENDMODE.ordinal(),
1450 getLimitRow() / 2);
1451 createExport(rules, rule,
1452 RequestPacket.TRANSFERMODE.SENDMD5MODE.ordinal(),
1453 getLimitRow() / 2);
1454 createExport(rules, rule,
1455 RequestPacket.TRANSFERMODE.SENDTHROUGHMODE.ordinal(),
1456 getLimitRow() / 2);
1457 createExport(rules, rule,
1458 RequestPacket.TRANSFERMODE.SENDMD5THROUGHMODE.ordinal(),
1459 getLimitRow() / 2);
1460 } else {
1461
1462 createExport(rules, rule, -1, getLimitRow());
1463 }
1464 }
1465 final StringBuilder builder = new StringBuilder("[");
1466 if (!rules.isEmpty()) {
1467 for (final String string : rules.values()) {
1468 builder.append(string).append(',');
1469 }
1470 rules.clear();
1471 builder.setLength(builder.length() - 1);
1472 }
1473 builder.append(']');
1474 head = head.replace(XXXDATAJSONXXX, builder.toString());
1475 } else if ("Delete".equalsIgnoreCase(parm)) {
1476 final String rule = getTrimValue("rule");
1477 if (ParametersChecker.isEmpty(rule)) {
1478 errorText = Messages.getString("HttpSslHandler.29");
1479 head = resetOptionRules(head, "", null, -3);
1480 head = createExport(head, errorText, null);
1481 return head.replace(XXXRESULTXXX, errorText)
1482 .replace(XXXDATAJSONXXX, "[]");
1483 }
1484 final DbRule dbrule;
1485 try {
1486 dbrule = new DbRule(rule);
1487 } catch (final WaarpDatabaseException e) {
1488 errorText = Messages.getString("HttpSslHandler.30") + e.getMessage()
1489
1490 + B_CENTER_P2;
1491 head = resetOptionRules(head, "", null, -3);
1492 head = createExport(head, errorText, null);
1493 return head.replace(XXXRESULTXXX, errorText)
1494 .replace(XXXDATAJSONXXX, "[]");
1495 }
1496 try {
1497 dbrule.delete();
1498 } catch (final WaarpDatabaseException e) {
1499 errorText = Messages.getString("HttpSslHandler.30") + e.getMessage()
1500
1501 + B_CENTER_P2;
1502 head = resetOptionRules(head, "", null, -3);
1503 head = createExport(head, errorText, null);
1504 return head.replace(XXXRESULTXXX, errorText)
1505 .replace(XXXDATAJSONXXX, "[]");
1506 }
1507 errorText += Messages.getString("HttpSslHandler.31") + rule +
1508 B_CENTER_P2;
1509 head = resetOptionRules(head, "", null, -3);
1510 head =
1511 head.replace(XXXDATAJSONXXX, '[' + dbrule.getJsonAsString() + ']');
1512 return head.replace(XXXRESULTXXX, errorText)
1513 .replace(XXXDATAJSONXXX, "[]");
1514 }
1515 }
1516 head = resetOptionRules(head, "", null, -3);
1517 head = createExport(head, errorText, null);
1518 return head.replace(XXXRESULTXXX, errorText).replace(XXXDATAJSONXXX, "[]");
1519 }
1520
1521 private String spooled(final boolean detailed) {
1522
1523 if (request.method() == HttpMethod.POST) {
1524 getParamsResponsive();
1525 }
1526 final String spooled = REQUEST.Spooled.read(this);
1527 String uri;
1528 if (detailed) {
1529 uri = "SpooledDetailed.html";
1530 } else {
1531 uri = "Spooled.html";
1532 }
1533 final QueryStringDecoder queryStringDecoder =
1534 new QueryStringDecoder(request.uri());
1535 if (params == null) {
1536 params = new HashMap<String, List<String>>();
1537 }
1538 params.putAll(queryStringDecoder.parameters());
1539 String name = null;
1540 if (params.containsKey("name")) {
1541 name = getTrimValue("name");
1542 }
1543 int istatus = 0;
1544 if (params.containsKey("status")) {
1545 final String status = getTrimValue("status");
1546 try {
1547 istatus = Integer.parseInt(status);
1548 } catch (final NumberFormatException e1) {
1549 istatus = 0;
1550 }
1551 }
1552 if (spooled.contains("XXXSPOOLEDXXX")) {
1553 if (ParametersChecker.isNotEmpty(name)) {
1554
1555 uri = request.uri();
1556 if (istatus != 0) {
1557 uri += "&status=" + istatus;
1558 }
1559 final StringBuilder builder =
1560 SpooledInformTask.buildSpooledUniqueTable(uri, name);
1561 return spooled.replace("XXXSPOOLEDXXX", builder.toString());
1562 } else {
1563 if (istatus != 0) {
1564 uri += "&status=" + istatus;
1565 }
1566 final StringBuilder builder =
1567 SpooledInformTask.buildSpooledTable(detailed, istatus, uri);
1568 return spooled.replace("XXXSPOOLEDXXX", builder.toString());
1569 }
1570 }
1571 if (ParametersChecker.isNotEmpty(name)) {
1572
1573 uri = request.uri();
1574 if (istatus != 0) {
1575 uri += "&status=" + istatus;
1576 }
1577 final String builder =
1578 SpooledInformTask.buildSpooledUniqueJson(uri, name);
1579 return spooled.replace(XXXDATAJSONXXX, builder);
1580 } else {
1581 if (istatus != 0) {
1582 uri += "&status=" + istatus;
1583 }
1584 final String builder =
1585 SpooledInformTask.buildSpooledJson(detailed, istatus, uri);
1586 return spooled.replace(XXXDATAJSONXXX, builder);
1587 }
1588 }
1589
1590
1591
1592
1593
1594
1595 @Override
1596 protected final void langHandle(final StringBuilder builder) {
1597
1598 WaarpStringUtils.replace(builder, REPLACEMENT.XXXCURLANGENXXX.name(),
1599 "en".equalsIgnoreCase(lang)? "checked" : "");
1600 WaarpStringUtils.replace(builder, REPLACEMENT.XXXCURLANGFRXXX.name(),
1601 "fr".equalsIgnoreCase(lang)? "checked" : "");
1602 WaarpStringUtils.replace(builder, REPLACEMENT.XXXCURSYSLANGENXXX.name(),
1603 "en".equalsIgnoreCase(Messages.getSlocale())?
1604 "checked" : "");
1605 WaarpStringUtils.replace(builder, REPLACEMENT.XXXCURSYSLANGFRXXX.name(),
1606 "fr".equalsIgnoreCase(Messages.getSlocale())?
1607 "checked" : "");
1608 }
1609
1610 private void fillHostIds(final StringBuilder builder) {
1611 final ArrayList<String> hostsList = new ArrayList<String>();
1612 try {
1613 final DbHostAuth[] hosts = DbHostAuth.getAllHosts();
1614 for (final DbHostAuth dbHostAuth : hosts) {
1615 hostsList.add(dbHostAuth.getHostid());
1616 }
1617 } catch (final WaarpDatabaseNoConnectionException ignored) {
1618
1619 }
1620 final StringBuilder hostsBuilder = new StringBuilder();
1621 for (final String string : hostsList) {
1622 if (hostsBuilder.length() != 0) {
1623 hostsBuilder.append(',');
1624 }
1625 hostsBuilder.append('\'').append(string).append('\'');
1626 }
1627 final String hosts = "[" + hostsBuilder + ']';
1628 WaarpStringUtils.replace(builder, XXXHOSTSIDSXXX, hosts);
1629 }
1630
1631 private String system() {
1632 getParamsResponsive();
1633 DbHostConfiguration config = null;
1634 try {
1635 config = new DbHostConfiguration(Configuration.configuration.getHostId());
1636 } catch (final WaarpDatabaseException e2) {
1637 try {
1638 config =
1639 new DbHostConfiguration(Configuration.configuration.getHostId(), "",
1640 "", "", "");
1641 config.insert();
1642 } catch (final WaarpDatabaseException ignored) {
1643
1644 }
1645 }
1646 if (params == null) {
1647 final String system = REQUEST.System.read(this);
1648 final StringBuilder builder = new StringBuilder(system);
1649 replaceStringSystem(config, builder);
1650 langHandle(builder);
1651 fillHostIds(builder);
1652 return builder.toString();
1653 }
1654 String extraInformation = null;
1655 if (params.containsKey(ACTION2)) {
1656 final List<String> action = params.get(ACTION2);
1657 for (final String act : action) {
1658 if ("Language".equalsIgnoreCase(act)) {
1659 lang = getTrimValue("change");
1660 final String sys = getTrimValue("changesys");
1661 Messages.init(new Locale(sys));
1662 extraInformation =
1663 Messages.getString("HttpSslHandler.LangIs") + "Web: " + lang +
1664 " OpenR66: "
1665 + Messages.getSlocale();
1666 } else if ("Level".equalsIgnoreCase(act)) {
1667 final String loglevel = getTrimValue("loglevel");
1668 WaarpLogLevel level = WaarpLogLevel.WARN;
1669 if ("debug".equalsIgnoreCase(loglevel)) {
1670 level = WaarpLogLevel.DEBUG;
1671 } else if ("info".equalsIgnoreCase(loglevel)) {
1672 level = WaarpLogLevel.INFO;
1673 } else if ("warn".equalsIgnoreCase(loglevel)) {
1674 level = WaarpLogLevel.WARN;
1675 } else if ("error".equalsIgnoreCase(loglevel)) {
1676 level = WaarpLogLevel.ERROR;
1677 }
1678 WaarpLoggerFactory.setLogLevel(level);
1679 extraInformation = Messages.getString("HttpSslHandler.LangIs") +
1680 level.name();
1681 } else if ("ExportConfig".equalsIgnoreCase(act)) {
1682 String base = Configuration.configuration.getBaseDirectory() +
1683 DirInterface.SEPARATOR;
1684 final String directory =
1685 base + Configuration.configuration.getArchivePath();
1686 extraInformation = Messages.getString("HttpSslHandler.ExportDir")
1687
1688 + Configuration.configuration.getArchivePath() +
1689 "<br>";
1690 final String[] filenames =
1691 ServerActions.staticConfigExport(directory, true, true, true,
1692 true, true);
1693
1694 base = base.replace('\\', '/');
1695 if (filenames[0] != null) {
1696 filenames[0] = filenames[0].replace('\\', '/').replace(base, "");
1697 extraInformation +=
1698 "<A href='" + filenames[0] + "' target='_blank'>" +
1699 filenames[0] + "</A> " +
1700 Messages.getString("HttpSslHandler.33");
1701 }
1702 if (filenames[1] != null) {
1703 filenames[1] = filenames[1].replace('\\', '/').replace(base, "");
1704 extraInformation +=
1705 "<A href='" + filenames[1] + "' target='_blank'>" +
1706 filenames[1] + "</A> " +
1707 Messages.getString("HttpSslHandler.32");
1708 }
1709 if (filenames[2] != null) {
1710 filenames[2] = filenames[2].replace('\\', '/').replace(base, "");
1711 extraInformation +=
1712 "<A href='" + filenames[2] + "' target='_blank'>" +
1713 filenames[2] + "</A> " +
1714 Messages.getString("HttpSslHandler.44");
1715 }
1716 if (filenames[3] != null) {
1717 filenames[3] = filenames[3].replace('\\', '/').replace(base, "");
1718 extraInformation +=
1719 "<A href='" + filenames[3] + "' target='_blank'>" +
1720 filenames[3] + "</A> " +
1721 Messages.getString("HttpSslHandler.45");
1722 }
1723 if (filenames[4] != null) {
1724 filenames[4] = filenames[4].replace('\\', '/').replace(base, "");
1725 extraInformation +=
1726 "<A href='" + filenames[4] + "' target='_blank'>" +
1727 filenames[4] + "</A> " +
1728 Messages.getString("HttpSslHandler.46");
1729 }
1730 } else if ("Disconnect".equalsIgnoreCase(act)) {
1731 return logout();
1732 } else if ("Block".equalsIgnoreCase(act)) {
1733 final boolean block = params.containsKey("blocking");
1734 if (block) {
1735 extraInformation =
1736 Messages.getString("HttpSslHandler.34");
1737 } else {
1738 extraInformation =
1739 Messages.getString("HttpSslHandler.35");
1740 }
1741 Configuration.configuration.setShutdown(block);
1742 } else if ("Shutdown".equalsIgnoreCase(act)) {
1743 final String error;
1744 if (Configuration.configuration.getShutdownConfiguration().serviceFuture !=
1745 null) {
1746 error =
1747 error(Messages.getString("HttpSslHandler.38"));
1748 } else {
1749 error =
1750 error(Messages.getString("HttpSslHandler.37"));
1751 }
1752 WaarpShutdownHook.setRestart(false);
1753 newSession = true;
1754 clearSession();
1755 forceClose = true;
1756 shutdown = true;
1757 return error;
1758 } else if ("Restart".equalsIgnoreCase(act)) {
1759 String error;
1760 if (Configuration.configuration.getShutdownConfiguration().serviceFuture !=
1761 null) {
1762 error =
1763 error(Messages.getString("HttpSslHandler.38"));
1764 } else {
1765 error = error(Messages.getString("HttpSslHandler.39")
1766
1767 + Configuration.configuration.getTimeoutCon() * 2 /
1768 1000 + Messages.getString(
1769 "HttpSslHandler.40"));
1770 }
1771 error = error.replace("XXXRELOADHTTPXXX",
1772 "HTTP-EQUIV=\"refresh\" CONTENT=\"" +
1773 Configuration.configuration.getTimeoutCon() *
1774 2 / 1000 + '"');
1775 WaarpShutdownHook.setRestart(true);
1776 newSession = true;
1777 clearSession();
1778 forceClose = true;
1779 shutdown = true;
1780 return error;
1781 } else if ("Validate".equalsIgnoreCase(act)) {
1782 final String bsessionr = getTrimValue("BSESSR");
1783 long lsessionr =
1784 Configuration.configuration.getServerChannelReadLimit();
1785 long lglobalr;
1786 long lsessionw;
1787 long lglobalw;
1788 long delay;
1789 try {
1790 if (bsessionr != null) {
1791 lsessionr = (Long.parseLong(bsessionr) / 10) * 10;
1792 }
1793 final String bglobalr = getTrimValue("BGLOBR");
1794 lglobalr = Configuration.configuration.getServerGlobalReadLimit();
1795 if (bglobalr != null) {
1796 lglobalr = (Long.parseLong(bglobalr) / 10) * 10;
1797 }
1798 final String bsessionw = getTrimValue("BSESSW");
1799 lsessionw =
1800 Configuration.configuration.getServerChannelWriteLimit();
1801 if (bsessionw != null) {
1802 lsessionw = (Long.parseLong(bsessionw) / 10) * 10;
1803 }
1804 final String bglobalw = getTrimValue("BGLOBW");
1805 lglobalw = Configuration.configuration.getServerGlobalWriteLimit();
1806 if (bglobalw != null) {
1807 lglobalw = (Long.parseLong(bglobalw) / 10) * 10;
1808 }
1809 final String dtra = getTrimValue("DTRA");
1810 delay = Configuration.configuration.getDelayLimit();
1811 if (dtra != null) {
1812 delay = (Long.parseLong(dtra) / 10) * 10;
1813 if (delay < 100) {
1814 delay = 100;
1815 }
1816 }
1817 Configuration.configuration.changeNetworkLimit(lglobalw, lglobalr,
1818 lsessionw, lsessionr,
1819 delay);
1820 final String dcomm = getTrimValue("DCOM");
1821 if (dcomm != null) {
1822 Configuration.configuration.setDelayCommander(
1823 Long.parseLong(dcomm));
1824 if (Configuration.configuration.getDelayCommander() <= 100) {
1825 Configuration.configuration.setDelayCommander(100);
1826 }
1827 Configuration.configuration.reloadCommanderDelay();
1828 }
1829 final String dret = getTrimValue("DRET");
1830 if (dret != null) {
1831 Configuration.configuration.setDelayRetry(Long.parseLong(dret));
1832 if (Configuration.configuration.getDelayRetry() <= 1000) {
1833 Configuration.configuration.setDelayRetry(1000);
1834 }
1835 }
1836 extraInformation =
1837 Messages.getString("HttpSslHandler.41");
1838 } catch (final NumberFormatException e) {
1839 extraInformation =
1840 Messages.getString("HttpSslHandler.42");
1841 }
1842 } else if ("HostConfig".equalsIgnoreCase(act)) {
1843 logger.debug("DbHC update");
1844 config.setBusiness(getTrimValue("BUSINESS"));
1845 config.setRoles(getTrimValue("ROLES"));
1846 config.setAliases(getTrimValue("ALIASES"));
1847 config.setOthers(getTrimValue("OTHER"));
1848 logger.debug("DbHC update {}", config.toJson());
1849 try {
1850 config.update();
1851 extraInformation =
1852 Messages.getString("HttpSslHandler.41");
1853 } catch (final WaarpDatabaseException e) {
1854 extraInformation =
1855 Messages.getString("HttpSslHandler.43");
1856 }
1857 }
1858 }
1859 }
1860 final String system = REQUEST.System.read(this);
1861 final StringBuilder builder = new StringBuilder(system);
1862 replaceStringSystem(config, builder);
1863 langHandle(builder);
1864 fillHostIds(builder);
1865 if (extraInformation != null) {
1866 builder.append(extraInformation);
1867 }
1868 return builder.toString();
1869 }
1870
1871 private void getParamsResponsive() {
1872 if (request.method() == HttpMethod.GET) {
1873 params = null;
1874 } else if (request.method() == HttpMethod.POST) {
1875 final Map<String, List<String>> paramsOld = params;
1876 final ByteBuf content = request.content();
1877 if (content.isReadable()) {
1878 final String param = content.toString(WaarpStringUtils.UTF8);
1879 final QueryStringDecoder queryStringDecoder2 =
1880 new QueryStringDecoder("/?" + param);
1881 params = queryStringDecoder2.parameters();
1882 boolean invalidEntry = false;
1883 for (final Entry<String, List<String>> paramCheck : params.entrySet()) {
1884 try {
1885 ParametersChecker.checkSanityString(paramCheck.getValue().toArray(
1886 ParametersChecker.ZERO_ARRAY_STRING));
1887 } catch (final InvalidArgumentException e) {
1888 logger.error(
1889 "Arguments incompatible with Security: " + paramCheck.getKey() +
1890 ": {}", e.getMessage());
1891 invalidEntry = true;
1892 }
1893 }
1894 if (invalidEntry) {
1895 for (final Entry<String, List<String>> paramCheck : params.entrySet()) {
1896 paramCheck.getValue().clear();
1897 }
1898 params.clear();
1899 params = null;
1900 logger.error("No parameter validated since security issue found");
1901 return;
1902 }
1903 if (params.containsKey(REFRESH)) {
1904 final List<String> parms = params.get(ACTION2);
1905 if (parms != null) {
1906 final String parm = parms.get(0);
1907 if ("Disabling".equalsIgnoreCase(parm)) {
1908 setRefresh(0);
1909 } else {
1910 final String snb = getTrimValue(REFRESH);
1911 if (snb != null) {
1912 try {
1913 final int old = getRefresh();
1914 setRefresh(Integer.parseInt(snb) * 1000);
1915 if (getRefresh() < 0) {
1916 setRefresh(old);
1917 }
1918 } catch (final Exception ignored) {
1919
1920 }
1921 }
1922 }
1923 }
1924 params = paramsOld;
1925 return;
1926 }
1927 if (params.containsKey(LIMITROW1)) {
1928 final String snb = getTrimValue(LIMITROW1);
1929 if (snb != null) {
1930 try {
1931 final int old = getLimitRow();
1932 setLimitRow(Integer.parseInt(snb));
1933 if (getLimitRow() < 5) {
1934 setLimitRow(old);
1935 }
1936 } catch (final Exception ignored) {
1937
1938 }
1939 }
1940 }
1941 } else {
1942 params = null;
1943 }
1944 }
1945 }
1946
1947 private void checkAuthentResponsive(final ChannelHandlerContext ctx) {
1948 newSession = true;
1949 if (request.method() == HttpMethod.GET) {
1950 String logon = logon();
1951 logon = logon.replaceAll(REPLACEMENT.XXXERRORMESGXXX.toString(), "");
1952 responseContent.append(logon);
1953 clearSession();
1954 writeResponse(ctx);
1955 return;
1956 } else if (request.method() == HttpMethod.POST) {
1957 getParamsResponsive();
1958 if (params == null) {
1959 String logon = logon();
1960 logon = logon.replaceAll(REPLACEMENT.XXXERRORMESGXXX.toString(),
1961 Messages.getString(
1962 "HttpSslHandler.EmptyLogin"));
1963 responseContent.append(logon);
1964 clearSession();
1965 writeResponse(ctx);
1966 return;
1967 }
1968 } else {
1969 sendError(ctx, HttpResponseStatus.METHOD_NOT_ALLOWED);
1970 return;
1971 }
1972 boolean getMenu = false;
1973 if (params != null && params.containsKey("Logon")) {
1974 String name = null;
1975 String password = null;
1976 List<String> values;
1977 if (!params.isEmpty()) {
1978
1979 if (params.containsKey("name")) {
1980 values = params.get("name");
1981 if (values != null) {
1982 name = values.get(0);
1983 if (ParametersChecker.isEmpty(name)) {
1984 getMenu = true;
1985 }
1986 }
1987 } else {
1988 getMenu = true;
1989 }
1990
1991 if (!getMenu && params.containsKey("passwd")) {
1992 values = params.get("passwd");
1993 if (values != null) {
1994 password = values.get(0);
1995 getMenu = ParametersChecker.isEmpty(password);
1996 } else {
1997 getMenu = true;
1998 }
1999 } else {
2000 getMenu = true;
2001 }
2002 } else {
2003 getMenu = true;
2004 }
2005 if (!getMenu && name != null) {
2006 logger.debug("Name? {} Passwd? {}",
2007 name.equals(Configuration.configuration.getAdminName()),
2008 Arrays.equals(password.getBytes(WaarpStringUtils.UTF8),
2009 Configuration.configuration.getServerAdminKey()));
2010 if (name.equals(Configuration.configuration.getAdminName()) &&
2011 Arrays.equals(password.getBytes(WaarpStringUtils.UTF8),
2012 Configuration.configuration.getServerAdminKey())) {
2013 authentHttp.getAuth().specialNoSessionAuth(true,
2014 Configuration.configuration.getHostId());
2015 authentHttp.setStatus(70);
2016 } else {
2017 try {
2018 authentHttp.getAuth().connectionHttps(name,
2019 FilesystemBasedDigest.passwdCrypt(
2020 password.getBytes(
2021 WaarpStringUtils.UTF8)));
2022 } catch (final Reply530Exception e1) {
2023 getMenu = true;
2024 } catch (final Reply421Exception e1) {
2025 getMenu = true;
2026 }
2027 }
2028 if (!authentHttp.isAuthenticated()) {
2029 authentHttp.setStatus(71);
2030 logger.info("Still not authenticated: {}", authentHttp);
2031 getMenu = true;
2032 }
2033 logger.debug("Identified: {}:{}", authentHttp.getAuth().isIdentified(),
2034 authentHttp.isAuthenticated());
2035 }
2036 } else {
2037 getMenu = true;
2038 }
2039 if (getMenu) {
2040 String logon = logon();
2041 logon = logon.replaceAll(REPLACEMENT.XXXERRORMESGXXX.toString(),
2042 Messages.getString("HttpSslHandler.BadLogin"));
2043 responseContent.append(logon);
2044 clearSession();
2045 } else {
2046 final String index = indexResponsive();
2047 responseContent.append(index);
2048 clearSession();
2049 admin = new DefaultCookie(
2050 R66SESSION + Configuration.configuration.getHostId(),
2051 Configuration.configuration.getHostId() +
2052 Long.toHexString(RANDOM.nextLong()));
2053 sessions.put(admin.value(), authentHttp);
2054 authentHttp.setStatus(72);
2055 logger.debug("CreateSession: {}:{}", uriRequest, admin);
2056 }
2057 writeResponse(ctx);
2058 }
2059
2060 @Override
2061 protected void channelRead0(final ChannelHandlerContext ctx,
2062 final FullHttpRequest msg) {
2063 final FullHttpRequest request = this.request = msg;
2064 final QueryStringDecoder queryStringDecoder =
2065 new QueryStringDecoder(request.uri());
2066 uriRequest = queryStringDecoder.path();
2067 logger.debug("Msg: {}", uriRequest);
2068 if (uriRequest.contains("gre/") || uriRequest.contains("img/") ||
2069 uriRequest.contains("app/") || uriRequest.contains("css/") ||
2070 uriRequest.contains("js/") || uriRequest.contains("datatable/") ||
2071 uriRequest.contains("res/") || uriRequest.contains("favicon.ico")) {
2072 HttpWriteCacheEnable.writeFile(request, ctx,
2073 Configuration.configuration.getHttpBasePath() +
2074 uriRequest, R66SESSION +
2075 Configuration.configuration.getHostId());
2076 return;
2077 }
2078 if (uriRequest.contains(Configuration.configuration.getArchivePath())) {
2079 HttpWriteCacheEnable.writeFile(request, ctx,
2080 Configuration.configuration.getBaseDirectory() +
2081 uriRequest, R66SESSION +
2082 Configuration.configuration.getHostId());
2083 return;
2084 }
2085 checkSession(ctx.channel());
2086 try {
2087 if (!authentHttp.isAuthenticated()) {
2088 logger.debug("Not Authent: {}:{}", uriRequest, authentHttp);
2089 checkAuthentResponsive(ctx);
2090 return;
2091 }
2092 String find = uriRequest;
2093 if (uriRequest.charAt(0) == '/') {
2094 find = uriRequest.substring(1);
2095 }
2096 REQUEST req = REQUEST.index;
2097 if (find.length() != 0) {
2098 find = find.substring(0, find.indexOf('.'));
2099 try {
2100 req = REQUEST.valueOf(find);
2101 } catch (final IllegalArgumentException e1) {
2102 req = REQUEST.index;
2103 logger.info("NotFound: {}:{}", find, uriRequest);
2104 }
2105 }
2106 switch (req) {
2107 case CancelRestart:
2108 if (authentHttp.getAuth().isValidRole(ROLE.TRANSFER)) {
2109 responseContent.append(cancelRestart());
2110 } else {
2111 responseContent.append(unallowedResponsive(
2112 Messages.getString("HttpSslHandler.CancelRestartUnallowed")));
2113 }
2114 break;
2115 case Export:
2116 if (authentHttp.getAuth().isValidRole(ROLE.SYSTEM)) {
2117 responseContent.append(export());
2118 } else {
2119 responseContent.append(unallowedResponsive(
2120 Messages.getString("HttpSslHandler.ExportUnallowed")));
2121 }
2122 break;
2123 case Hosts:
2124 if (authentHttp.getAuth().isValidRole(ROLE.HOST)) {
2125 responseContent.append(hosts());
2126 } else {
2127 responseContent.append(unallowedResponsive(
2128 Messages.getString("HttpSslHandler.HostUnallowed")));
2129 }
2130 break;
2131 case ListingReload:
2132 responseContent.append(listingReload());
2133 break;
2134 case Listing:
2135 responseContent.append(listing());
2136 break;
2137 case Logout:
2138 responseContent.append(logout());
2139 break;
2140 case Rules:
2141 if (authentHttp.getAuth().isValidRole(ROLE.RULE)) {
2142 responseContent.append(rules());
2143 } else {
2144 responseContent.append(unallowedResponsive(
2145 Messages.getString("HttpSslHandler.RulesUnallowed")));
2146 }
2147 break;
2148 case System:
2149 if (authentHttp.getAuth().isValidRole(ROLE.SYSTEM)) {
2150 responseContent.append(system());
2151 } else {
2152 responseContent.append(systemLimited());
2153 }
2154 break;
2155 case Spooled:
2156 responseContent.append(spooled(false));
2157 break;
2158 case SpooledDetailed:
2159 responseContent.append(spooled(true));
2160 break;
2161 case CreateTransfer:
2162 if (authentHttp.getAuth().isValidRole(ROLE.TRANSFER)) {
2163 responseContent.append(createTransfer());
2164 } else {
2165 responseContent.append(unallowedResponsive(
2166 Messages.getString("HttpSslHandler.CreateTransferNotAllowed")));
2167 }
2168 break;
2169 default:
2170 responseContent.append(indexResponsive());
2171 break;
2172 }
2173 writeResponse(ctx);
2174 } finally {
2175 closeConnection();
2176 }
2177 }
2178
2179 private class RestartOrStopAll {
2180 private final String seeAll;
2181 private final String parm;
2182 private String head;
2183 private String errorText;
2184
2185 public RestartOrStopAll(final String head, final String errorText,
2186 final String seeAll, final String parm) {
2187 this.head = head;
2188 this.errorText = errorText;
2189 this.seeAll = seeAll;
2190 this.parm = parm;
2191 }
2192
2193 public String getHead() {
2194 return head;
2195 }
2196
2197 public String getErrorText() {
2198 return errorText;
2199 }
2200
2201 public RestartOrStopAll invoke() {
2202 final boolean stopcommand = "StopAll".equalsIgnoreCase(parm) ||
2203 "StopCleanAll".equalsIgnoreCase(parm);
2204 final String startid = getTrimValue("startid");
2205 final String stopid = getTrimValue("stopid");
2206 String start = getValue("start");
2207 String stop = getValue("stop");
2208 final String rule = getTrimValue("rule");
2209 final String req = getTrimValue("req");
2210 boolean pending;
2211 boolean transfer;
2212 boolean error;
2213 boolean all;
2214 pending = params.containsKey("pending");
2215 transfer = params.containsKey("transfer");
2216 error = params.containsKey("error");
2217 all = false;
2218 if (!(pending || transfer || error)) {
2219 all = true;
2220 pending = true;
2221 transfer = true;
2222 error = true;
2223 }
2224 final Timestamp tstart = WaarpStringUtils.fixDate(start);
2225 if (tstart != null) {
2226 start = tstart.toString();
2227 }
2228 final Timestamp tstop = WaarpStringUtils.fixDate(stop, tstart);
2229 if (tstop != null) {
2230 stop = tstop.toString();
2231 }
2232 head = resetOptionTransfer(head, startid == null? "" : startid,
2233 stopid == null? "" : stopid, start, stop,
2234 rule == null? "" : rule, req == null? "" : req,
2235 pending, transfer, error, false, all);
2236 final HashMap<String, String> map = new HashMap<String, String>();
2237 if (stopcommand) {
2238 if ("StopCleanAll".equalsIgnoreCase(parm)) {
2239 TransferUtils.cleanSelectedTransfers(dbSession, 0, map, authentHttp,
2240 head, startid, stopid, tstart,
2241 tstop, rule, req, pending,
2242 transfer, error, seeAll);
2243 } else {
2244 TransferUtils.stopSelectedTransfers(dbSession, 0, map, authentHttp,
2245 head, startid, stopid, tstart,
2246 tstop, rule, req, pending,
2247 transfer, error, seeAll);
2248 }
2249 } else {
2250 DbPreparedStatement preparedStatement = null;
2251 try {
2252 preparedStatement =
2253 DbTaskRunner.getFilterPrepareStatement(dbSession, 0, false,
2254 startid, stopid, tstart,
2255 tstop, rule, req, pending,
2256 transfer, error, false,
2257 all, seeAll);
2258 preparedStatement.executeQuery();
2259 while (preparedStatement.getNext()) {
2260 try {
2261 final DbTaskRunner taskRunner =
2262 DbTaskRunner.getFromStatement(preparedStatement);
2263 final LocalChannelReference lcr =
2264 Configuration.configuration.getLocalTransaction()
2265 .getFromRequest(
2266 taskRunner.getKey());
2267 final R66Result finalResult =
2268 TransferUtils.restartTransfer(taskRunner, lcr);
2269 final ErrorCode result = finalResult.getCode();
2270 final ErrorCode last = taskRunner.getErrorInfo();
2271 taskRunner.setErrorExecutionStatus(result);
2272 map.put(taskRunner.getKey(), taskRunner.getJsonAsString());
2273 taskRunner.setErrorExecutionStatus(last);
2274 } catch (final WaarpDatabaseException e) {
2275
2276 logger.warn("An error occurs while accessing a Runner: {}",
2277 e.getMessage());
2278 }
2279 }
2280 preparedStatement.realClose();
2281 } catch (final WaarpDatabaseException e) {
2282 if (preparedStatement != null) {
2283 preparedStatement.realClose();
2284 }
2285 logger.warn(OPEN_R66_WEB_ERROR2, e.getMessage());
2286 errorText +=
2287 Messages.getString("ErrorCode.17") + ": " + e.getMessage() +
2288 "<BR/>";
2289 }
2290 }
2291 final StringBuilder builder = new StringBuilder("[");
2292 if (!map.isEmpty()) {
2293 for (final String string : map.values()) {
2294 builder.append(string).append(',');
2295 }
2296 map.clear();
2297 builder.setLength(builder.length() - 1);
2298 }
2299 builder.append(']');
2300 head = head.replace(XXXDATAJSONXXX, builder.toString());
2301 return this;
2302 }
2303 }
2304 }