add authentication for kontor-scripts
This commit is contained in:
+12
-38
@@ -17,7 +17,7 @@ from platformdirs import PlatformDirs
|
||||
import requests
|
||||
import yaml
|
||||
|
||||
from config import get_logger
|
||||
from config import get_api_config, get_logger
|
||||
|
||||
parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument("--verbose", "-v", action="count", default=0)
|
||||
@@ -106,9 +106,11 @@ def is_file_downloaded(media_file: dict, dir: Path) -> FileStatus:
|
||||
return FileStatus.UNKNOWN
|
||||
|
||||
|
||||
def update_status(item_id: UUID, file_info: dict):
|
||||
url: str = f"http://127.0.0.1:8800/api/media/files/{item_id}"
|
||||
headers: Dict[str, str] = {"Authorization": f"Bearer {bearer_token}"}
|
||||
def update_status(item_id: UUID, file_info: dict, api_data: Dict[str, Any]):
|
||||
host = api_data["host"]
|
||||
token = api_data['token']
|
||||
url: str = f"http://{host}:{port}/api/media/files/{item_id}"
|
||||
headers: Dict[str, str] = {"Authorization": f"Bearer {token}"}
|
||||
update = requests.put(url, headers=headers, json=file_info)
|
||||
log.info(f"update status: {update.status_code}")
|
||||
log.info(f"update result: {update.json()}")
|
||||
@@ -132,39 +134,11 @@ def rename_file(file_info: dict):
|
||||
if __name__ == "__main__":
|
||||
log = get_logger(args.verbose, args.config)
|
||||
log.info("kontor.download started")
|
||||
api_data: Dict[str, Any] = {}
|
||||
token: str | None = None
|
||||
host: str | None = None
|
||||
port: int = 0
|
||||
dirs = PlatformDirs(args.config)
|
||||
api_config = Path(dirs.user_config_dir, 'api.yaml')
|
||||
with open(api_config, 'rt') as f:
|
||||
api_data = yaml.safe_load(f.read())
|
||||
if not api_data:
|
||||
log.fatal("API configuration is missing")
|
||||
sys.exit(1)
|
||||
api_data = get_api_config(log, args.config)
|
||||
host = api_data["host"]
|
||||
port = api_data["port"]
|
||||
if not token:
|
||||
log.info("Call login first")
|
||||
login_url = f"http://{host}:{port}/login"
|
||||
login_data = {}
|
||||
login_data['user'] = api_data["user"]
|
||||
login_data['pass'] = api_data["pass"]
|
||||
response = requests.post(login_url, data=login_data)
|
||||
status = response.status_code
|
||||
log.info(f"Status: {status}")
|
||||
if status != 200:
|
||||
log.fatal("authentication failed")
|
||||
sys.exit(0)
|
||||
data = response.json()
|
||||
token = data['token']
|
||||
api_data['token'] = token
|
||||
with open(api_config, 'w') as f:
|
||||
yaml.dump(api_data, f)
|
||||
else:
|
||||
token = api_data['token']
|
||||
url: str = f"http://{host}:8500/api/media/files?download=true"
|
||||
token = api_data['token']
|
||||
url: str = f"http://{host}:{port}/api/media/files?download=true"
|
||||
headers: Dict[str, str] = {"Authorization": f"Bearer {token}"}
|
||||
response = requests.get(url, headers=headers)
|
||||
log.info(f"Status: {response.status_code}")
|
||||
@@ -186,15 +160,15 @@ if __name__ == "__main__":
|
||||
match download_status:
|
||||
case FileStatus.DOWNLOADED:
|
||||
rename_file(item)
|
||||
update_status(file_id, item)
|
||||
update_status(file_id, item, api_data)
|
||||
case FileStatus.RENAMED:
|
||||
log.info("update status")
|
||||
update_status(file_id, item)
|
||||
update_status(file_id, item, api_data)
|
||||
case FileStatus.UNKNOWN:
|
||||
download_file(link, item, args.dir)
|
||||
rename_file(item)
|
||||
log.info(f"{item}")
|
||||
update_status(file_id, item)
|
||||
update_status(file_id, item, api_data)
|
||||
log.warning(f"processed {mediafile_index}/{entries_count}")
|
||||
if args.limit and args.limit <= mediafile_index:
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user