#!/usr/bin/python3

import sys
import os
import re
import logging
import traceback
import configparser
import urllib.parse

sys.path.append("/usr/share/rhn/")
from spacewalk.satellite_tools.ulnauth import ULNAuth

# for testing add the relative path to the load path
if "spacewalk-uln-resolver" in sys.argv[0]:
    sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '../python'))

from zypp_plugin import Plugin


class SpacewalkULNPlugin(Plugin):
    """
    ULN authentication Plugin
    """
    def __init__(self):
        Plugin.__init__(self)
        self._uln_auth = ULNAuth()

    def RESOLVEURL(self, headers, body):
        """
        Resolve URL.

        :returns: None
        """
        try:
            self._uln_auth.authenticate(headers['url'])
            self.auth_headers = {
                "X-ULN-Api-User-Key": self._uln_auth.token
            }
        except Exception as exc:
            self.answer("ERROR", {}, str(exc))
        hostname, label = self._uln_auth.get_hostname(headers.pop('url'))
        url = self._uln_auth.url + "/XMLRPC/GET-REQ/" + label
        if headers:
           url += "?{}".format(urllib.parse.urlencode(headers))
        self.answer("RESOLVEDURL", self.auth_headers, url)

plugin = SpacewalkULNPlugin()
plugin.main()
