|
|
|
@ -39,13 +39,22 @@ import java.nio.channels.FileChannel;
|
|
|
|
|
import java.nio.channels.FileLock;
|
|
|
|
|
import java.util.Properties;
|
|
|
|
|
import java.util.concurrent.Semaphore;
|
|
|
|
|
|
|
|
|
|
import com.google.common.io.Files;
|
|
|
|
|
|
|
|
|
|
import net.yacy.cora.date.GenericFormatter;
|
|
|
|
|
import net.yacy.cora.document.id.DigestURL;
|
|
|
|
|
import net.yacy.cora.federate.yacy.CacheStrategy;
|
|
|
|
|
import net.yacy.cora.order.Digest;
|
|
|
|
|
import net.yacy.cora.protocol.ClientIdentification;
|
|
|
|
|
import net.yacy.cora.protocol.ConnectionInfo;
|
|
|
|
|
import net.yacy.cora.protocol.RequestHeader;
|
|
|
|
|
import net.yacy.cora.protocol.TimeoutRequest;
|
|
|
|
|
import net.yacy.cora.protocol.http.HTTPClient;
|
|
|
|
|
import net.yacy.cora.sorting.Array;
|
|
|
|
|
import net.yacy.cora.util.ConcurrentLog;
|
|
|
|
|
import net.yacy.crawler.retrieval.Response;
|
|
|
|
|
import net.yacy.document.Document;
|
|
|
|
|
import net.yacy.gui.YaCyApp;
|
|
|
|
|
import net.yacy.gui.framework.Browser;
|
|
|
|
|
import net.yacy.http.Jetty9HttpServerImpl;
|
|
|
|
@ -54,17 +63,11 @@ import net.yacy.kelondro.util.FileUtils;
|
|
|
|
|
import net.yacy.kelondro.util.Formatter;
|
|
|
|
|
import net.yacy.kelondro.util.MemoryControl;
|
|
|
|
|
import net.yacy.kelondro.util.OS;
|
|
|
|
|
import net.yacy.peers.Seed;
|
|
|
|
|
import net.yacy.peers.operation.yacyBuildProperties;
|
|
|
|
|
import net.yacy.peers.operation.yacyRelease;
|
|
|
|
|
import net.yacy.search.Switchboard;
|
|
|
|
|
import net.yacy.search.SwitchboardConstants;
|
|
|
|
|
import com.google.common.io.Files;
|
|
|
|
|
import net.yacy.cora.document.id.DigestURL;
|
|
|
|
|
import net.yacy.cora.federate.yacy.CacheStrategy;
|
|
|
|
|
import net.yacy.cora.order.Digest;
|
|
|
|
|
import net.yacy.cora.protocol.ConnectionInfo;
|
|
|
|
|
import net.yacy.crawler.retrieval.Response;
|
|
|
|
|
import net.yacy.peers.Seed;
|
|
|
|
|
import net.yacy.server.serverSwitch;
|
|
|
|
|
import net.yacy.utils.translation.TranslatorXliff;
|
|
|
|
|
|
|
|
|
@ -265,22 +268,7 @@ public final class yacy {
|
|
|
|
|
//final File htTemplatePath = new File(homePath, sb.getConfig("htTemplatePath","htdocs"));
|
|
|
|
|
|
|
|
|
|
// copy the donate iframe (better to copy this once here instead of doing this in an actual iframe in the search result)
|
|
|
|
|
final File wwwEnvPath = new File(htDocsPath, "env");
|
|
|
|
|
mkdirIfNeseccary(wwwEnvPath);
|
|
|
|
|
final String iframesource = sb.getConfig("donation.iframesource", "");
|
|
|
|
|
final String iframetarget = sb.getConfig("donation.iframetarget", "");
|
|
|
|
|
final File iframefile = new File(htDocsPath, iframetarget);
|
|
|
|
|
if (!iframefile.exists()) new Thread() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
final ClientIdentification.Agent agent = ClientIdentification.getAgent(ClientIdentification.yacyInternetCrawlerAgentName);
|
|
|
|
|
Response response;
|
|
|
|
|
try {
|
|
|
|
|
response = sb.loader == null ? null : sb.loader.load(sb.loader.request(new DigestURL(iframesource), false, true), CacheStrategy.NOCACHE, Integer.MAX_VALUE, null, agent);
|
|
|
|
|
if (response != null) FileUtils.copy(response.getContent(), iframefile);
|
|
|
|
|
} catch (Throwable e) {}
|
|
|
|
|
}
|
|
|
|
|
}.start();
|
|
|
|
|
importDonationIFrame(sb, htDocsPath);
|
|
|
|
|
|
|
|
|
|
// create default notifier picture
|
|
|
|
|
File notifierFile = new File(htDocsPath, "notifier.gif");
|
|
|
|
@ -421,6 +409,59 @@ public final class yacy {
|
|
|
|
|
} catch (final Exception e) {} // was once stopped by de.anomic.net.ftpc$sm.checkExit(ftpc.java:1790)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Concurrently import the donation iframe content to serve it directly from this peer.
|
|
|
|
|
* @param switchBoard the SwitchBoard instance. Must not be null.
|
|
|
|
|
* @param htDocsDirectory the custom htdocs directory. Must not be null.
|
|
|
|
|
*/
|
|
|
|
|
private static void importDonationIFrame(final Switchboard switchBoard, final File htDocsDirectory) {
|
|
|
|
|
final File wwwEnvPath = new File(htDocsDirectory, "env");
|
|
|
|
|
mkdirIfNeseccary(wwwEnvPath);
|
|
|
|
|
final String iframesource = switchBoard.getConfig("donation.iframesource", "");
|
|
|
|
|
final String iframetarget = switchBoard.getConfig("donation.iframetarget", "");
|
|
|
|
|
final File iframefile = new File(htDocsDirectory, iframetarget);
|
|
|
|
|
if (!iframefile.exists()) new Thread() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
final ClientIdentification.Agent agent = ClientIdentification.getAgent(ClientIdentification.yacyInternetCrawlerAgentName);
|
|
|
|
|
Response documentResponse;
|
|
|
|
|
try {
|
|
|
|
|
/* Load the donation html frame content */
|
|
|
|
|
documentResponse = switchBoard.loader == null ? null : switchBoard.loader.load(switchBoard.loader.request(new DigestURL(iframesource), false, true), CacheStrategy.NOCACHE, Integer.MAX_VALUE, null, agent);
|
|
|
|
|
if (documentResponse != null) {
|
|
|
|
|
Document[] documents = documentResponse.parse();
|
|
|
|
|
if(documents != null && documents.length > 0 && documents[0] != null) {
|
|
|
|
|
Document donateDocument = documents[0];
|
|
|
|
|
String donateDocContent = new String(documentResponse.getContent(), donateDocument.getCharset());
|
|
|
|
|
/* Load image resources contained in the page */
|
|
|
|
|
if(donateDocument.getImages() != null) {
|
|
|
|
|
for(DigestURL imgURL : donateDocument.getImages().keySet()) {
|
|
|
|
|
try {
|
|
|
|
|
Response response = switchBoard.loader.load(switchBoard.loader.request(imgURL, false, true), CacheStrategy.NOCACHE, Integer.MAX_VALUE, null, agent);
|
|
|
|
|
if (response != null) {
|
|
|
|
|
String imgFileName = imgURL.getFileName();
|
|
|
|
|
/* Store each image in the same directory as the iframe target file */
|
|
|
|
|
FileUtils.copy(response.getContent(), new File(iframefile.getParentFile(), imgFileName));
|
|
|
|
|
|
|
|
|
|
/* Transform the original image URL to a relative one */
|
|
|
|
|
donateDocContent = donateDocContent.replace(imgURL.getURL().toString(), imgFileName);
|
|
|
|
|
}
|
|
|
|
|
} catch(IOException e) {
|
|
|
|
|
/* Failing to load one image should not stop the whole task */
|
|
|
|
|
ConcurrentLog.warn("STARTUP", "Donation frame retrieval : could not get an image resource.", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
FileUtils.copy(donateDocContent.getBytes(donateDocument.getCharset()), iframefile);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
ConcurrentLog.warn("STARTUP", "Could not retrieve donation frame content.", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}.start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param f
|
|
|
|
|
*/
|
|
|
|
|