Добавление своего инструмента в MaxKB
Инструменты могут использоваться вашим ИИ ассистентом для взаимодействия со сторонними системами, ниже пример инструмента, который получает список пользователей JumpServer
Во вкладке Tool, нажмите кнопку Create и выберите Create Tool, для нового инструмента нужно будет определить список параметров при запуске в разделе Startup Parameters, а также список вводных данных в разделе Input Parameters (см скриншот)
Python код:
import datetime, hmac, hashlib, base64, requests
from urllib.parse import urlparse
def jms_fetch_users(key_id, secret, base_url, org_id, search="", offset=0, limit=500, verify=False, timeout=15, return_names=True):
path = f"/api/v1/users/users/?search={search}&offset={offset}&limit={limit}&display=1&draw=1"
url = base_url.rstrip("/") + path
accept = "application/json"
date_str = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
parsed = urlparse(url)
request_target = f"get {parsed.path}" + (f"?{parsed.query}" if parsed.query else "")
signing_string = f"(request-target): {request_target}\naccept: {accept}\ndate: {date_str}"
signature = base64.b64encode(hmac.new(secret.encode(), signing_string.encode(), hashlib.sha256).digest()).decode()
authorization = f'Signature keyId="{key_id}",algorithm="hmac-sha256",headers="(request-target) accept date",signature="{signature}"'
headers = {
"Accept": accept,
"Date": date_str,
"Authorization": authorization,
"X-JMS-ORG": org_id,
}
r = requests.get(url, headers=headers, verify=verify, timeout=timeout)
r.raise_for_status()
data = r.json()
if not return_names:
return data
results = data.get("results") or data.get("data") or []
return [i.get("username") for i in results if isinstance(i, dict)]