import urllib.parse from django.conf import settings from core.lib.opensearch import client, run_main_query from core.lib.threshold import threshold_request def get_irc_stats(): url = "irc/stats" payload = {} stats = threshold_request(url, payload) if not stats: return {} return stats def get_irc_networks(): url = "irc/networks" payload = {} networks = threshold_request(url, payload) if not networks: return {} return networks def get_irc_network(net): url = f"irc/network/{net}" payload = {} network = threshold_request(url, payload) if not network: return {} return network def edit_irc_network(net, data): url = f"irc/network/{net}/edit" payload = dict(data) result = threshold_request(url, payload) return result def change_network_status(net, num, status): url = f"irc/network/{net}/{num}" payload = {"status": status} result = threshold_request(url, payload) return result def get_irc_relays(net): url = f"irc/network/{net}/relays" payload = {} relays = threshold_request(url, payload) if not relays: return {} return relays def get_irc_channels(net): url = f"irc/network/{net}/channels" payload = {} channels = threshold_request(url, payload) if not channels: return {} return channels def part_channel(net, channel): channel = urllib.parse.quote(channel, safe="") url = f"irc/network/{net}/channel/{channel}" payload = {} parted = threshold_request(url, payload, method="DELETE") if not parted: return {} return parted def join_channel(net, channel): channel = urllib.parse.quote(channel, safe="") url = f"irc/network/{net}/channel/{channel}" payload = {} joined = threshold_request(url, payload, method="PUT") if not joined: return {} return joined def get_aliases(): url = "aliases" payload = {} aliases = threshold_request(url, payload, method="GET") return aliases def add_relay(net, num): if num: url = f"irc/network/{net}/{num}" else: url = f"irc/network/{net}" payload = {} created = threshold_request(url, payload, method="PUT") return created def del_relay(net, num): url = f"irc/network/{net}/{num}" payload = {} deleted = threshold_request(url, payload, method="DELETE") return deleted def update_aliases(aliases): url = "aliases" payload = aliases deleted = threshold_request(url, payload, method="POST") return deleted def run_auto(net): url = f"irc/auto/{net}" payload = {} deleted = threshold_request(url, payload, method="POST") return deleted def run_list(net): url = f"irc/list/{net}" payload = {} ran = threshold_request(url, payload, method="POST") return ran def create_network(data): url = "irc/network/create" payload = data ran = threshold_request(url, payload, method="PUT") return ran def del_network(net): url = f"irc/network/{net}" payload = {} deleted = threshold_request(url, payload, method="DELETE") return deleted def construct_alert_query(): # Get the initial query query = { "size": 25, "query": { "bool": { "must": [ {"match": {"src": "irc"}}, ] } }, "sort": [ { "ts": { "order": "desc", } } ], } return query def get_irc_alerts(user): query = construct_alert_query() results = run_main_query( client, user, # passed through run_main_query to filter_blacklisted query, custom_query=True, index=settings.OPENSEARCH_INDEX_INT, ) if not results: return [] results_parsed = [] if "hits" in results.keys(): if "hits" in results["hits"]: for item in results["hits"]["hits"]: element = item["_source"] element["id"] = item["_id"] # Split the timestamp into date and time ts = element["ts"] ts_spl = ts.split("T") date = ts_spl[0] time = ts_spl[1] element["date"] = date element["time"] = time results_parsed.append(element) return results_parsed def send_irc_message(net, num, channel, msg, nick=None): channel = urllib.parse.quote(channel, safe="") url = f"irc/msg/{net}/{num}/{channel}" payload = {"msg": msg} if nick: payload["nick"] = nick messaged = threshold_request(url, payload, method="PUT") return messaged