示例#1
0
    def inara_cmdr(self, cmdr):
        if self.player_name is None:
            return None

        if self.backoff["Inara"].throttled():
            EDRLOG.log(u"Backing off from Inara API calls", "DEBUG")
            return None

        EDRLOG.log(u"Requesting Inara profile for {}".format(cmdr), "INFO")
        headers = {
            "Authorization": "ApiKey {}".format(self.INARA_API_KEY),
            "X-EDR-UID": self.uid()
        }
        requester = quote(
            self.player_name.encode('utf-8')) if self.player_name else u"-"
        endpoint = "https://us-central1-blistering-inferno-4028.cloudfunctions.net/edr/v1/inara/{}/{}".format(
            quote(cmdr.lower().encode('utf-8')), quote(requester))
        resp = self.__get(endpoint, "EDR", headers=headers)

        if not self.__check_response(resp, "Inara", "Inara"):
            EDRLOG.log(
                u"Inara profile failed. Error code: {}".format(
                    resp.status_code), "ERROR")
            return None

        processed = self.__process_inara_response(resp.content)
        if not processed:
            return None

        cmdr_profile = edrcmdrprofile.EDRCmdrProfile()
        cmdr_profile.from_inara_api(processed)
        return cmdr_profile
示例#2
0
    def cmdr(self, cmdr, autocreate=True):
        if not self.__preflight("cmdr", cmdr):
            EDRLOG.log(u"Preflight failed for cmdr call.", "DEBUG")
            raise CommsJammedError("cmdr")
        cmdr_profile = edrcmdrprofile.EDRCmdrProfile()

        params = {}
        if sys.version_info.major == 2:
            params = {
                "orderBy": '"cname"',
                "equalTo": json.dumps(cmdr.lower().encode('utf-8')),
                "limitToFirst": 1,
                "auth": self.auth_token()
            }
        else:
            params = {
                "orderBy": '"cname"',
                "equalTo": json.dumps(cmdr.lower()),
                "limitToFirst": 1,
                "auth": self.auth_token()
            }
        resp = self.__get("{}/v1/cmdrs.json".format(self.EDR_SERVER), "EDR",
                          params)

        if not self.__check_response(resp, "EDR", "Cmdrs"):
            EDRLOG.log(u"Failed to retrieve cmdr id.", "ERROR")
            EDRLOG.log(
                u"{error}, {content}".format(error=resp.status_code,
                                             content=resp.text), "DEBUG")
            return None

        if resp.content == 'null' or resp.content == b'null':
            if autocreate and not self.is_anonymous():
                params = {"auth": self.auth_token()}
                endpoint = "{}/v1/cmdrs.json".format(self.EDR_SERVER)
                resp = self.__post(endpoint,
                                   "EDR",
                                   params=params,
                                   json={
                                       "name": cmdr,
                                       "uid": self.uid(),
                                       "requester": self.player_name
                                   })
                if not self.__check_response(resp, "EDR", "Post cmdr"):
                    EDRLOG.log(u"Failed to retrieve cmdr key.", "ERROR")
                    return None
                json_cmdr = json.loads(resp.content)
                EDRLOG.log(u"New cmdr:{}".format(json_cmdr), "DEBUG")
                cmdr_profile.cid = list(json_cmdr.values())[0]
                cmdr_profile.name = cmdr
            else:
                return None
        else:
            json_cmdr = json.loads(resp.content)
            EDRLOG.log(u"Existing cmdr:{}".format(json_cmdr), "DEBUG")
            cmdr_profile.cid = list(json_cmdr)[0]
            cmdr_profile.from_dict(list(json_cmdr.values())[0])

        return cmdr_profile
示例#3
0
文件: edrinara.py 项目: Niteship/edr
 def cmdr(self, cmdr_name):
     if self.requester is None:
         return
     json_resp = self.__cmdr(cmdr_name)
     if json_resp:
         profile = edrcmdrprofile.EDRCmdrProfile()
         profile.from_inara_api(json_resp)
         EDRLOG.log(u"Obtained a cmdr profile from Inara API.", "INFO")
         return profile
     return None
示例#4
0
    def cmdr(self, cmdr, autocreate=True):
        cmdr_profile = edrcmdrprofile.EDRCmdrProfile()

        params = {
            "orderBy": '"cname"',
            "equalTo":
            json.dumps(urllib.quote_plus(cmdr.lower().encode('utf-8'))),
            "limitToFirst": 1,
            "auth": self.auth_token()
        }
        endpoint = "{}/v1/cmdrs.json".format(self.EDR_SERVER)
        EDRLOG.log(u"Endpoint: {}".format(endpoint), "DEBUG")
        resp = requests.get(endpoint, params=params)

        if resp.status_code != requests.codes.ok:
            EDRLOG.log(u"Failed to retrieve cmdr id.", "ERROR")
            EDRLOG.log(
                u"{error}, {content}".format(error=resp.status_code,
                                             content=resp.content), "DEBUG")
            return None

        if resp.content == 'null':
            if autocreate:
                params = {"auth": self.auth_token()}
                endpoint = "{}/v1/cmdrs.json".format(self.EDR_SERVER)
                resp = requests.post(endpoint,
                                     params=params,
                                     json={
                                         "name": cmdr,
                                         "uid": self.uid()
                                     })
                if resp.status_code != requests.codes.ok:
                    EDRLOG.log(u"Failed to retrieve cmdr key.", "ERROR")
                    return None
                json_cmdr = json.loads(resp.content)
                EDRLOG.log(u"New cmdr:{}".format(json_cmdr), "DEBUG")
                cmdr_profile.cid = json_cmdr.values()[0]
                cmdr_profile.name = cmdr
            else:
                return None
        else:
            json_cmdr = json.loads(resp.content)
            EDRLOG.log(u"Existing cmdr:{}".format(json_cmdr), "DEBUG")
            cmdr_profile.cid = json_cmdr.keys()[0]
            cmdr_profile.from_dict(json_cmdr.values()[0])

        return cmdr_profile
示例#5
0
文件: edrinara.py 项目: glock2how/edr
    def cmdr(self, cmdr_name):
        if self.version is None or self.cmdr_name is None:
            return

        payload = {
            "header": self.__api_header(),
            "events": [self.__api_cmdrprofile(cmdr_name)]
        }

        resp = requests.post(self.INARA_ENDPOINT, json=payload)
        if resp.status_code != requests.codes.ok:
            EDRLOG.log(
                u"Failed to obtain cmdr profile from Inara. code={code}, content={content}"
                .format(code=resp.status_code, content=resp.content), "ERROR")
            return None

        EDRLOG.log(u"Obtained a response from the Inara API.", "INFO")
        try:
            json_resp = json.loads(resp.content)
            if json_resp["events"][0]["eventStatus"] == 204:
                EDRLOG.log(
                    u"cmdr {} was not found via the Inara API.".format(
                        cmdr_name), "INFO")
                return None
            elif json_resp["events"][0]["eventStatus"] != requests.codes.ok:
                EDRLOG.log(
                    u"Error from Inara API. code={code}, content={content}".
                    format(code=resp.status_code,
                           content=resp.content), "ERROR")
                return None
        except:
            EDRLOG.log(
                u"Malformed cmdr profile response from Inara API? code={code}, content={content}"
                .format(code=resp.status_code, content=resp.content), "ERROR")
            return None

        try:
            json_resp = json.loads(resp.content)["events"][0]["eventData"]
            profile = edrcmdrprofile.EDRCmdrProfile()
            profile.from_inara_api(json_resp)
            EDRLOG.log(u"Obtained a cmdr profile from Inara API.", "INFO")
            return profile
        except:
            EDRLOG.log(
                u"Malformed cmdr profile response from Inara API? code={code}, content={content}"
                .format(code=resp.status_code, content=resp.content), "ERROR")
            return None