forked from j62/ctbrec
1
0
Fork 0

Add HMAC as request param, if authentication is enabled

This commit is contained in:
0xboobface 2018-11-16 12:42:55 +01:00
parent d7ba8b2978
commit 25d5fa9646
2 changed files with 22 additions and 0 deletions

View File

@ -14,6 +14,8 @@ import java.nio.file.FileSystems;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.LinkOption; import java.nio.file.LinkOption;
import java.nio.file.Path; import java.nio.file.Path;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Duration; import java.time.Duration;
@ -34,6 +36,7 @@ import com.iheartradio.m3u8.ParseException;
import com.iheartradio.m3u8.PlaylistException; import com.iheartradio.m3u8.PlaylistException;
import ctbrec.Config; import ctbrec.Config;
import ctbrec.Hmac;
import ctbrec.Model; import ctbrec.Model;
import ctbrec.Recording; import ctbrec.Recording;
import ctbrec.io.HttpClient; import ctbrec.io.HttpClient;
@ -71,6 +74,13 @@ public class MergedHlsDownload extends AbstractHlsDownload {
mergeThread = createMergeThread(targetFile, progressListener, false); mergeThread = createMergeThread(targetFile, progressListener, false);
LOG.debug("Merge thread started"); LOG.debug("Merge thread started");
mergeThread.start(); mergeThread.start();
if(Config.getInstance().getSettings().requireAuthentication) {
URL u = new URL(segmentPlaylistUri);
String path = u.getPath();
byte[] key = Config.getInstance().getSettings().key;
String hmac = Hmac.calculate(path, key);
segmentPlaylistUri = segmentPlaylistUri + "?hmac=" + hmac;
}
LOG.debug("Downloading segments"); LOG.debug("Downloading segments");
downloadSegments(segmentPlaylistUri, false); downloadSegments(segmentPlaylistUri, false);
LOG.debug("Waiting for merge thread to finish"); LOG.debug("Waiting for merge thread to finish");
@ -82,6 +92,8 @@ public class MergedHlsDownload extends AbstractHlsDownload {
throw new IOException("Couldn't parse HLS playlist", e); throw new IOException("Couldn't parse HLS playlist", e);
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new IOException("Couldn't wait for write thread to finish. Recording might be cut off", e); throw new IOException("Couldn't wait for write thread to finish. Recording might be cut off", e);
} catch (InvalidKeyException | NoSuchAlgorithmException | IllegalStateException e) {
throw new IOException("Couldn't add HMAC to playlist url", e);
} finally { } finally {
alive = false; alive = false;
streamer.stop(); streamer.stop();

View File

@ -1,11 +1,13 @@
package ctbrec.ui; package ctbrec.ui;
import java.io.File; import java.io.File;
import java.net.URL;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import ctbrec.Config; import ctbrec.Config;
import ctbrec.Hmac;
import ctbrec.OS; import ctbrec.OS;
import ctbrec.Recording; import ctbrec.Recording;
import ctbrec.io.DevNull; import ctbrec.io.DevNull;
@ -81,6 +83,14 @@ public class Player {
} }
playerProcess = rt.exec(Config.getInstance().getSettings().mediaPlayer + " " + file, OS.getEnvironment(), dir); playerProcess = rt.exec(Config.getInstance().getSettings().mediaPlayer + " " + file, OS.getEnvironment(), dir);
} else { } else {
if(Config.getInstance().getSettings().requireAuthentication) {
URL u = new URL(url);
String path = u.getPath();
byte[] key = Config.getInstance().getSettings().key;
String hmac = Hmac.calculate(path, key);
url = url + "?hmac=" + hmac;
}
LOG.debug("Playing {}", url);
playerProcess = rt.exec(Config.getInstance().getSettings().mediaPlayer + " " + url); playerProcess = rt.exec(Config.getInstance().getSettings().mediaPlayer + " " + url);
} }