the script is working correctly, still need to add logins
This commit is contained in:
commit
7485a8e823
4 changed files with 169 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
result
|
97
flake.lock
Normal file
97
flake.lock
Normal file
|
@ -0,0 +1,97 @@
|
|||
{
|
||||
"nodes": {
|
||||
"inept-epub": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1626630204,
|
||||
"narHash": "sha256-R56r2p7z1bNJS0ng+KeuV4zbWT4T46zc6YDqySB7jQc=",
|
||||
"owner": "BentonEdmondson",
|
||||
"repo": "inept-epub",
|
||||
"rev": "45306cadf7fd7a04453a60b8c1e39bc06b0035ec",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "BentonEdmondson",
|
||||
"repo": "inept-epub",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"libgourou-utils": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1626630231,
|
||||
"narHash": "sha256-nuhlaSwdTVZl3mHA3Pw8pdbr8bxBmRuNAEwNh/IU/NE=",
|
||||
"owner": "BentonEdmondson",
|
||||
"repo": "libgourou-utils",
|
||||
"rev": "07637d6aab51fc1e188576fefcf9a7b6d77f6fc6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "BentonEdmondson",
|
||||
"repo": "libgourou-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1626464457,
|
||||
"narHash": "sha256-u2PCh/+8vQSLwf0mPpKHKQ8hAPB3l4uNZR3r0TdK2Lg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c6c4a3d45ab200f17805d2d86a1ff1cc7ca2b186",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1626464457,
|
||||
"narHash": "sha256-u2PCh/+8vQSLwf0mPpKHKQ8hAPB3l4uNZR3r0TdK2Lg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c6c4a3d45ab200f17805d2d86a1ff1cc7ca2b186",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1626464457,
|
||||
"narHash": "sha256-u2PCh/+8vQSLwf0mPpKHKQ8hAPB3l4uNZR3r0TdK2Lg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c6c4a3d45ab200f17805d2d86a1ff1cc7ca2b186",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"inept-epub": "inept-epub",
|
||||
"libgourou-utils": "libgourou-utils",
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
26
flake.nix
Normal file
26
flake.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
inputs.nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable;
|
||||
inputs.libgourou-utils.url = github:BentonEdmondson/libgourou-utils;
|
||||
inputs.inept-epub.url = github:BentonEdmondson/inept-epub;
|
||||
|
||||
outputs = { self, ... }@flakes: let
|
||||
nixpkgs = flakes.nixpkgs.legacyPackages.x86_64-linux;
|
||||
libgourou-utils = flakes.libgourou-utils.defaultPackage.x86_64-linux;
|
||||
inept-epub = flakes.inept-epub.defaultPackage.x86_64-linux;
|
||||
in {
|
||||
defaultPackage.x86_64-linux = nixpkgs.stdenv.mkDerivation {
|
||||
pname = "knock";
|
||||
version = "0.0.0";
|
||||
src = self;
|
||||
nativeBuildInputs = [ nixpkgs.makeWrapper ];
|
||||
buildInputs = [ nixpkgs.python3 libgourou-utils inept-epub ];
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
chmod +x knock
|
||||
cp knock $out/bin
|
||||
wrapProgram $out/bin/knock --prefix PATH : ${nixpkgs.lib.makeBinPath [libgourou-utils inept-epub]}
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
}
|
45
knock
Normal file
45
knock
Normal file
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
|
||||
parser = argparse.ArgumentParser(description='Convert an ACSM file to a DRM-free ePub file')
|
||||
parser.add_argument('acsm_file', metavar='file', type=str, help='the ACSM file to convert')
|
||||
args = parser.parse_args()
|
||||
|
||||
# these are all Path objects: https://docs.python.org/3/library/pathlib.html
|
||||
args.acsm_file = Path(args.acsm_file).expanduser()
|
||||
args.drm_file = args.acsm_file.with_suffix('.drm.epub')
|
||||
args.epub_file = args.acsm_file.with_suffix('.epub')
|
||||
args.adobe_dir = Path('~/.config/knock').expanduser()
|
||||
args.activation_file = args.adobe_dir.joinpath('activation.xml')
|
||||
|
||||
if not args.adobe_dir.exists():
|
||||
raise Exception('This device is not registered')
|
||||
|
||||
print('Downloading the ACSM file from Adobe...')
|
||||
|
||||
subprocess.check_output([
|
||||
'acsmdownloader',
|
||||
'-d', str(args.adobe_dir.joinpath('device.xml')),
|
||||
'-a', str(args.adobe_dir.joinpath('activation.xml')),
|
||||
'-k', str(args.adobe_dir.joinpath('devicesalt')),
|
||||
'-o', str(args.drm_file),
|
||||
'-f', str(args.acsm_file)
|
||||
])
|
||||
|
||||
print('Decrypting the file...')
|
||||
|
||||
subprocess.check_output([
|
||||
'inept-epub',
|
||||
str(args.activation_file),
|
||||
str(args.drm_file),
|
||||
str(args.epub_file)
|
||||
])
|
||||
|
||||
args.drm_file.unlink()
|
||||
|
||||
print(f'\nThe DRM-free ePub file now exists at {str(args.epub_file)}!')
|
||||
print(f'Once you make sure the ePub file is readable, you can delete {str(args.acsm_file)}.')
|
Loading…
Reference in a new issue