Reverted deleted methods from PresentationUrlDownloadService.java

This commit is contained in:
Ghazi Triki 2016-09-29 18:46:31 +01:00
parent 0e72d7523d
commit 7b6abc1dbe

View File

@ -2,8 +2,17 @@ package org.bigbluebutton.presentation;
import java.io.File; import java.io.File;
import java.io.FilenameFilter; import java.io.FilenameFilter;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -12,6 +21,7 @@ public class PresentationUrlDownloadService {
private static Logger log = LoggerFactory private static Logger log = LoggerFactory
.getLogger(PresentationUrlDownloadService.class); .getLogger(PresentationUrlDownloadService.class);
private final int maxRedirects = 5;
private PageExtractor pageExtractor; private PageExtractor pageExtractor;
private DocumentConversionService documentConversionService; private DocumentConversionService documentConversionService;
private String presentationBaseURL; private String presentationBaseURL;
@ -93,6 +103,88 @@ public class PresentationUrlDownloadService {
return null; return null;
} }
private String followRedirect(String meetingId, String redirectUrl,
int redirectCount, String origUrl) {
if (redirectCount > maxRedirects) {
log.error("Max redirect reached for meeting=[{}] with url=[{}]",
meetingId, origUrl);
return null;
}
URL presUrl;
try {
presUrl = new URL(redirectUrl);
} catch (MalformedURLException e) {
log.error("Malformed url=[{}] for meeting=[{}]", redirectUrl,
meetingId);
return null;
}
HttpURLConnection conn;
try {
conn = (HttpURLConnection) presUrl.openConnection();
conn.setReadTimeout(5000);
conn.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
conn.addRequestProperty("User-Agent", "Mozilla");
// normally, 3xx is redirect
int status = conn.getResponseCode();
if (status != HttpURLConnection.HTTP_OK) {
if (status == HttpURLConnection.HTTP_MOVED_TEMP
|| status == HttpURLConnection.HTTP_MOVED_PERM
|| status == HttpURLConnection.HTTP_SEE_OTHER) {
String newUrl = conn.getHeaderField("Location");
return followRedirect(meetingId, newUrl, redirectCount + 1,
origUrl);
} else {
log.error(
"Invalid HTTP response=[{}] for url=[{}] with meeting[{}]",
status, redirectUrl, meetingId);
return null;
}
} else {
return redirectUrl;
}
} catch (IOException e) {
log.error("IOException for url=[{}] with meeting[{}]", redirectUrl,
meetingId);
return null;
}
}
public boolean savePresentation(final String meetingId,
final String filename, final String urlString) {
String finalUrl = followRedirect(meetingId, urlString, 0, urlString);
if (finalUrl == null)
return false;
boolean success = false;
GetMethod method = new GetMethod(finalUrl);
HttpClient client = new HttpClient();
try {
int statusCode = client.executeMethod(method);
if (statusCode == HttpStatus.SC_OK) {
FileUtils.copyInputStreamToFile(
method.getResponseBodyAsStream(), new File(filename));
log.info("Downloaded presentation at [{}]", finalUrl);
success = true;
}
} catch (HttpException e) {
log.error("HttpException while downloading presentation at [{}]",
finalUrl);
} catch (IOException e) {
log.error("IOException while downloading presentation at [{}]",
finalUrl);
} finally {
method.releaseConnection();
}
return success;
}
public void setPageExtractor(PageExtractor extractor) { public void setPageExtractor(PageExtractor extractor) {
this.pageExtractor = extractor; this.pageExtractor = extractor;
} }