Initial commit
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
commit
37c7ae2c9e
1 changed files with 60 additions and 0 deletions
60
aesgcm-dl.py
Executable file
60
aesgcm-dl.py
Executable file
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim:fenc=utf-8 et ts=4 sts=4 sw=4
|
||||
#
|
||||
# Copyright © 2022 Maxime “pep” Buquet <pep@bouah.net>
|
||||
#
|
||||
# This file is licensed under AGPL-3.0-or-later
|
||||
|
||||
"""
|
||||
AESGCM URIs downloader
|
||||
"""
|
||||
|
||||
import sys
|
||||
import asyncio
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
|
||||
from aiohttp import ClientSession
|
||||
from slixmpp.version import __version__ as slixmpp_version
|
||||
from slixmpp.plugins.xep_0454 import XEP_0454
|
||||
|
||||
|
||||
class InvalidURI(Exception):
|
||||
"""Raised when an invalid aesgcm URI is specified"""
|
||||
|
||||
def __init__(self, url) -> None:
|
||||
self.url = url
|
||||
|
||||
|
||||
async def handle_file(uri: str) -> None:
|
||||
"""Downloads, decrypts, and writes specified URI"""
|
||||
|
||||
try:
|
||||
aesurl, fragment = uri.rsplit('#', 1)
|
||||
except ValueError as exn:
|
||||
raise InvalidURI(uri) from exn
|
||||
|
||||
url = aesurl.replace('aesgcm://', 'https://')
|
||||
filename = Path(url.rsplit('/', 1)[1])
|
||||
|
||||
async with ClientSession(headers={'User-Agent': 'slixmpp ' + slixmpp_version}) as session:
|
||||
async with session.get(url) as response:
|
||||
print(f'Got response for {url}')
|
||||
input_file = BytesIO(await response.read())
|
||||
|
||||
with filename.open('wb') as file:
|
||||
print(f'Writing to {filename}')
|
||||
file.write(XEP_0454.decrypt(input_file, fragment))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 2:
|
||||
print('usage: aesgcm-dl <URI>', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
asyncio.run(handle_file(sys.argv[1]))
|
||||
except InvalidURI as exn:
|
||||
print(f'Invalid aesgcm URI: {exn.url}', file=sys.stderr)
|
||||
sys.exit(2)
|
Loading…
Reference in a new issue