2023-02-24 17:17:00 +01:00
|
|
|
from setup.loginAccount import loginAndGetKey
|
2023-02-23 08:41:48 +01:00
|
|
|
from setup.fulfill import downloadFile
|
|
|
|
|
|
|
|
from decrypt.decodePDF import decryptPDF
|
|
|
|
from decrypt.decodeEPUB import decryptEPUB
|
|
|
|
|
2023-02-23 19:42:15 +01:00
|
|
|
import argparse
|
|
|
|
from os import mkdir, remove, rename
|
|
|
|
from os.path import exists
|
|
|
|
|
|
|
|
from setup.params import FILE_DEVICEKEY, FILE_DEVICEXML, FILE_ACTIVATIONXML
|
|
|
|
from decrypt.params import KEYPATH
|
|
|
|
from setup.data import createDefaultFiles
|
2023-02-26 15:00:51 +01:00
|
|
|
from setup.ia import SESSION_FILE, manage_login, get_book, return_book
|
2023-02-23 19:42:15 +01:00
|
|
|
|
2023-02-26 15:00:51 +01:00
|
|
|
|
|
|
|
def loginADE(email, password):
|
|
|
|
if email is None or password is None:
|
|
|
|
print("Email or Password cannot be empty")
|
|
|
|
print()
|
|
|
|
return
|
|
|
|
if not exists('account'): mkdir('account')
|
|
|
|
loginAndGetKey(email, password)
|
|
|
|
print()
|
|
|
|
|
|
|
|
def loginIA(email,password):
|
|
|
|
if email is None or password is None:
|
|
|
|
print("Email or Password cannot be empty")
|
|
|
|
print()
|
|
|
|
return
|
|
|
|
manage_login(email,password)
|
|
|
|
print()
|
|
|
|
|
|
|
|
def main(acsmFile, outputFilename):
|
|
|
|
if not exists('account'): mkdir('account')
|
2023-02-23 19:42:15 +01:00
|
|
|
|
|
|
|
# setting up the account and keys
|
|
|
|
if not (exists(FILE_ACTIVATIONXML) and exists(FILE_DEVICEXML) and exists(FILE_DEVICEKEY) and exists(KEYPATH)):
|
|
|
|
createDefaultFiles()
|
2023-02-24 11:46:01 +01:00
|
|
|
print()
|
|
|
|
|
2023-02-23 19:42:15 +01:00
|
|
|
# cheek for file existance
|
|
|
|
if not exists(acsmFile):
|
|
|
|
print(f"{acsmFile} file does not exist")
|
|
|
|
print()
|
2023-02-26 15:00:51 +01:00
|
|
|
return
|
2023-02-23 19:42:15 +01:00
|
|
|
|
|
|
|
# download
|
|
|
|
encryptedFile = downloadFile(acsmFile)
|
|
|
|
print(encryptedFile)
|
|
|
|
print()
|
|
|
|
|
|
|
|
# decrypt
|
2023-04-09 12:58:59 +02:00
|
|
|
if encryptedFile is None:
|
|
|
|
print("Failed to Download, try decrypting from ACSM file")
|
|
|
|
return
|
2023-02-23 19:42:15 +01:00
|
|
|
if encryptedFile.endswith(".pdf"):
|
|
|
|
decryptedFile = decryptPDF(encryptedFile)
|
|
|
|
elif encryptedFile.endswith(".epub"):
|
|
|
|
decryptedFile = decryptEPUB(encryptedFile)
|
2023-02-23 08:41:48 +01:00
|
|
|
else:
|
2023-02-23 19:42:15 +01:00
|
|
|
print("File format not supported")
|
2023-02-23 08:41:48 +01:00
|
|
|
print()
|
2023-02-26 15:00:51 +01:00
|
|
|
return
|
2023-02-23 08:41:48 +01:00
|
|
|
|
2023-02-23 19:42:15 +01:00
|
|
|
remove(encryptedFile)
|
2023-02-24 11:46:01 +01:00
|
|
|
if outputFilename is None:
|
|
|
|
tempName = encryptedFile
|
|
|
|
else:
|
|
|
|
tempName = outputFilename
|
|
|
|
rename(decryptedFile, tempName)
|
|
|
|
print(tempName)
|
2023-02-23 08:41:48 +01:00
|
|
|
print()
|
2023-02-23 19:42:15 +01:00
|
|
|
|
2023-02-26 15:00:51 +01:00
|
|
|
def handle_IA(url,format):
|
|
|
|
if not exists(SESSION_FILE):
|
|
|
|
print("Login to InternetArchive first or give ACSm file as input")
|
|
|
|
return
|
|
|
|
acsmFile = get_book(url,format)
|
|
|
|
if acsmFile is None:
|
|
|
|
print("Could not get Book, try using ACSm file as input")
|
|
|
|
return
|
|
|
|
main(acsmFile,None)
|
|
|
|
remove(acsmFile)
|
|
|
|
if(return_book(url) is None):
|
|
|
|
print("Please return it yourself")
|
|
|
|
|
2023-02-23 19:42:15 +01:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2023-02-26 15:00:51 +01:00
|
|
|
parser = argparse.ArgumentParser(description="Download and Decrypt an encrypted PDF or EPUB file.")
|
|
|
|
parser.add_argument("-f", type=str, nargs='?', default=None, help="path to the ACSM file")
|
|
|
|
parser.add_argument("-u", type=str, nargs='?', default=None, help="book url from InternetArchive")
|
|
|
|
parser.add_argument("-t", type=str, nargs='?', default='pdf', help="book file type/format/extension for book url (defaults to PDF)")
|
|
|
|
parser.add_argument("-o", type=str, nargs='?', default=None, help="output file name")
|
|
|
|
parser.add_argument("-la", action="store_true", help="login to your ADE account.")
|
|
|
|
parser.add_argument("-li", action="store_true", help="login to your InternetArchive.")
|
|
|
|
parser.add_argument("-e", type=str, nargs='?', default=None, help="email/username")
|
|
|
|
parser.add_argument("-p", type=str, nargs='?', default=None, help="password")
|
|
|
|
parser.add_argument("-lo", action="store_true", help="logout from all")
|
2023-02-23 19:42:15 +01:00
|
|
|
args = parser.parse_args()
|
2023-02-24 11:46:01 +01:00
|
|
|
|
2023-02-26 15:00:51 +01:00
|
|
|
# Logout
|
|
|
|
if args.lo:
|
|
|
|
from shutil import rmtree
|
|
|
|
rmtree("account")
|
|
|
|
mkdir('account')
|
|
|
|
print()
|
|
|
|
print("Logout Sucessfull")
|
|
|
|
print()
|
|
|
|
|
|
|
|
# ADE login
|
|
|
|
elif args.la:
|
|
|
|
print()
|
|
|
|
print("chose login for ADE")
|
|
|
|
loginADE(args.e, args.p)
|
|
|
|
|
|
|
|
# IA login
|
|
|
|
elif args.li:
|
|
|
|
print()
|
|
|
|
print("chose login for InternetArchive")
|
|
|
|
loginIA(args.e, args.p)
|
|
|
|
|
|
|
|
# Book url
|
|
|
|
elif args.u:
|
|
|
|
print()
|
|
|
|
if not args.t in ['pdf','epub']:
|
|
|
|
print("only PDF and EPUB are supported")
|
|
|
|
else:
|
|
|
|
handle_IA(args.u, args.t)
|
|
|
|
print()
|
|
|
|
|
2023-02-24 11:46:01 +01:00
|
|
|
# check for default value
|
2023-02-26 15:00:51 +01:00
|
|
|
elif args.f == None:
|
2023-02-24 11:46:01 +01:00
|
|
|
if exists("URLLink.acsm"):
|
2023-02-26 15:00:51 +01:00
|
|
|
args.f = "URLLink.acsm"
|
2023-02-26 18:22:36 +01:00
|
|
|
main(args.f, args.o)
|
2023-02-26 15:00:51 +01:00
|
|
|
else: parser.print_help()
|
2023-02-24 11:46:01 +01:00
|
|
|
|
2023-02-26 15:00:51 +01:00
|
|
|
else:
|
2023-02-26 18:22:36 +01:00
|
|
|
main(args.f, args.o)
|