add authentication for kontor-scripts

This commit is contained in:
2026-01-07 23:46:42 +01:00
parent 696c3e77be
commit d63629ba5c
+46 -5
View File
@@ -2,15 +2,20 @@
download files with URLs from DB download files with URLs from DB
""" """
import os
import re import re
import subprocess import subprocess
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
from datetime import datetime from datetime import datetime
from enum import Enum, auto from enum import Enum, auto
from pathlib import Path from pathlib import Path
import sys
from typing import Any, Dict
from uuid import UUID from uuid import UUID
from platformdirs import PlatformDirs
import requests import requests
import yaml
from config import get_logger from config import get_logger
@@ -102,9 +107,9 @@ def is_file_downloaded(media_file: dict, dir: Path) -> FileStatus:
def update_status(item_id: UUID, file_info: dict): def update_status(item_id: UUID, file_info: dict):
update = requests.put( url: str = f"http://127.0.0.1:8800/api/media/files/{item_id}"
f"http://127.0.0.1:8800/api/media/files/{item_id}", json=file_info headers: Dict[str, str] = {"Authorization": f"Bearer {bearer_token}"}
) update = requests.put(url, headers=headers, json=file_info)
log.info(f"update status: {update.status_code}") log.info(f"update status: {update.status_code}")
log.info(f"update result: {update.json()}") log.info(f"update result: {update.json()}")
@@ -127,14 +132,50 @@ def rename_file(file_info: dict):
if __name__ == "__main__": if __name__ == "__main__":
log = get_logger(args.verbose, args.config) log = get_logger(args.verbose, args.config)
log.info("kontor.download started") log.info("kontor.download started")
response = requests.get("http://127.0.0.1:8800/api/media/files?download=true") 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)
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"
headers: Dict[str, str] = {"Authorization": f"Bearer {token}"}
response = requests.get(url, headers=headers)
log.info(f"Status: {response.status_code}") log.info(f"Status: {response.status_code}")
data = response.json() data = response.json()
entries_count = len(data) entries_count = len(data)
log.info(f"data: {entries_count}") log.info(f"data: {entries_count}")
mediafile_index = 1 mediafile_index = 1
log.debug(f"data: {len(data)}") log.debug(f"data: {data}")
missing_actors = {} missing_actors = {}
if args.dry_run:
sys.exit(0)
if args.limit: if args.limit:
log.warning(f"check the first {args.limit} links") log.warning(f"check the first {args.limit} links")
for item in data: for item in data: