mirror of
https://github.com/Maschell/JNUSLib.git
synced 2024-11-18 14:09:19 +01:00
125 lines
4.5 KiB
Java
125 lines
4.5 KiB
Java
|
package de.mas.jnus.lib;
|
||
|
|
||
|
import java.io.File;
|
||
|
import java.io.IOException;
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.HashMap;
|
||
|
import java.util.List;
|
||
|
import java.util.Map;
|
||
|
|
||
|
import de.mas.jnus.lib.entities.content.Content;
|
||
|
import de.mas.jnus.lib.implementations.NUSDataProvider;
|
||
|
import de.mas.jnus.lib.utils.FileUtils;
|
||
|
import de.mas.jnus.lib.utils.Utils;
|
||
|
import lombok.Getter;
|
||
|
import lombok.Setter;
|
||
|
|
||
|
public class ExtractionService {
|
||
|
private static Map<NUSTitle,ExtractionService> instances = new HashMap<>();
|
||
|
|
||
|
public static ExtractionService getInstance(NUSTitle nustitle) {
|
||
|
if(!instances.containsKey(nustitle)){
|
||
|
instances.put(nustitle, new ExtractionService(nustitle));
|
||
|
}
|
||
|
return instances.get(nustitle);
|
||
|
}
|
||
|
|
||
|
@Getter @Setter private NUSTitle NUSTitle = null;
|
||
|
|
||
|
private ExtractionService(NUSTitle nustitle){
|
||
|
setNUSTitle(nustitle);
|
||
|
}
|
||
|
|
||
|
private NUSDataProvider getDataProvider(){
|
||
|
return getNUSTitle().getDataProvider();
|
||
|
}
|
||
|
|
||
|
public void extractAllEncrpytedContentFileHashes(String outputFolder) throws IOException {
|
||
|
extractEncryptedContentHashesTo(new ArrayList<Content>(getNUSTitle().getTMD().getAllContents().values()),outputFolder);
|
||
|
}
|
||
|
|
||
|
public void extractEncryptedContentHashesTo(List<Content> list, String outputFolder) throws IOException {
|
||
|
Utils.createDir(outputFolder);
|
||
|
NUSDataProvider dataProvider = getDataProvider();
|
||
|
for(Content c : list){
|
||
|
dataProvider.saveContentH3Hash(c, outputFolder);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void extractAllEncryptedContentFiles(String outputFolder) throws IOException {
|
||
|
extractAllEncryptedContentFilesWithHashesTo(outputFolder);
|
||
|
}
|
||
|
|
||
|
public void extractAllEncryptedContentFilesWithoutHashesTo(String outputFolder) throws IOException {
|
||
|
extractEncryptedContentFilesTo(new ArrayList<Content>(getNUSTitle().getTMD().getAllContents().values()),outputFolder,false);
|
||
|
}
|
||
|
|
||
|
public void extractAllEncryptedContentFilesWithHashesTo(String outputFolder) throws IOException {
|
||
|
extractEncryptedContentFilesTo(new ArrayList<Content>(getNUSTitle().getTMD().getAllContents().values()),outputFolder,true);
|
||
|
}
|
||
|
|
||
|
public void extractEncryptedContentFilesTo(List<Content> list,String outputFolder,boolean withHashes) throws IOException {
|
||
|
Utils.createDir(outputFolder);
|
||
|
NUSDataProvider dataProvider = getDataProvider();
|
||
|
for(Content c : list){
|
||
|
if(withHashes){
|
||
|
dataProvider.saveEncryptedContentWithH3Hash(c, outputFolder);
|
||
|
}else{
|
||
|
dataProvider.saveEncryptedContent(c, outputFolder);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void extractTMDTo(String output) throws IOException {
|
||
|
Utils.createDir(output);
|
||
|
|
||
|
byte[] rawTMD= getDataProvider().getRawTMD();
|
||
|
|
||
|
if(rawTMD != null && rawTMD.length == 0){
|
||
|
System.out.println("Couldn't write TMD: No TMD loaded");
|
||
|
return;
|
||
|
}
|
||
|
String tmd_path = output + File.separator + Settings.TMD_FILENAME;
|
||
|
System.out.println("Extracting TMD to: " + tmd_path);
|
||
|
FileUtils.saveByteArrayToFile(tmd_path,rawTMD);
|
||
|
}
|
||
|
|
||
|
public void extractTicketTo(String output) throws IOException {
|
||
|
Utils.createDir(output);
|
||
|
|
||
|
byte[] rawTicket= getDataProvider().getRawTicket();
|
||
|
|
||
|
if(rawTicket != null && rawTicket.length == 0){
|
||
|
System.out.println("Couldn't write Ticket: No Ticket loaded");
|
||
|
return;
|
||
|
}
|
||
|
String ticket_path = output + File.separator + Settings.TICKET_FILENAME;
|
||
|
System.out.println("Extracting Ticket to: " + ticket_path);
|
||
|
FileUtils.saveByteArrayToFile(ticket_path,rawTicket);
|
||
|
}
|
||
|
|
||
|
public void extractCertTo(String output) throws IOException {
|
||
|
Utils.createDir(output);
|
||
|
|
||
|
byte[] rawCert = getDataProvider().getRawCert();
|
||
|
|
||
|
if(rawCert != null && rawCert.length == 0){
|
||
|
System.out.println("Couldn't write Cert: No Cert loaded");
|
||
|
return;
|
||
|
}
|
||
|
String cert_path = output + File.separator + Settings.CERT_FILENAME;
|
||
|
System.out.println("Extracting Cert to: " + cert_path);
|
||
|
FileUtils.saveByteArrayToFile(cert_path,rawCert);
|
||
|
}
|
||
|
|
||
|
public void extractAll(String outputFolder) throws IOException {
|
||
|
Utils.createDir(outputFolder);
|
||
|
extractAllEncryptedContentFilesWithHashesTo(outputFolder);
|
||
|
extractCertTo(outputFolder);
|
||
|
extractTMDTo(outputFolder);
|
||
|
extractTicketTo(outputFolder);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|