Exemplo n.º 1
0
 def setSsoCharacter(charID, ssoCharID):
     char = eos.db.getCharacter(charID)
     if ssoCharID is not None:
         sso = eos.db.getSsoCharacter(ssoCharID, config.getClientSecret())
         char.setSsoCharacter(sso, config.getClientSecret())
     else:
         char.setSsoCharacter(None, config.getClientSecret())
     eos.db.commit()
Exemplo n.º 2
0
    def getLoginURI(self, redirect=None):
        self.state = str(uuid.uuid4())

        if self.settings.get("ssoMode") == EsiSsoMode.AUTO:
            args = {
                'state': self.state,
                'pyfa_version': config.version,
                'login_method': self.settings.get('loginMode'),
                'client_hash': config.getClientSecret()
            }

            if redirect is not None:
                args['redirect'] = redirect

            return '%s?%s' % (
                self.oauth_authorize,
                urlencode(args)
            )
        else:
            return '%s?response_type=%s&redirect_uri=%s&client_id=%s%s%s' % (
                self.oauth_authorize,
                'code',
                quote('http://localhost:6461', safe=''),
                self.settings.get('clientID'),
                '&scope=%s' % '+'.join(scopes) if scopes else '',
                '&state=%s' % self.state
            )
Exemplo n.º 3
0
    def getLoginURI(self, redirect=None):
        self.state = str(uuid.uuid4())

        if self.settings.get("ssoMode") == SsoMode.AUTO:
            args = {
                'state': self.state,
                'pyfa_version': config.version,
                'login_method': self.settings.get('loginMode'),
                'client_hash': config.getClientSecret()
            }

            if redirect is not None:
                args['redirect'] = redirect

            return '%s?%s' % (
                self.oauth_authorize,
                urlencode(args)
            )
        else:
            return '%s?response_type=%s&redirect_uri=%s&client_id=%s%s%s' % (
                self.oauth_authorize,
                'code',
                quote('http://localhost:6461', safe=''),
                self.settings.get('clientID'),
                '&scope=%s' % '+'.join(scopes) if scopes else '',
                '&state=%s' % self.state
            )
Exemplo n.º 4
0
Arquivo: esi.py Projeto: wyl0706/Pyfa
    def handleLogin(self, message):

        # we already have authenticated stuff for the auto mode
        if (self.settings.get('ssoMode') == SsoMode.AUTO):
            ssoInfo = message['SSOInfo'][0]
            auth_response = json.loads(base64.b64decode(ssoInfo))
        else:
            # otherwise, we need to fetch the information
            auth_response = self.auth(message['code'][0])

        res = self._session.get(self.oauth_verify,
                                headers=self.get_oauth_header(
                                    auth_response['access_token']))
        if res.status_code != 200:
            raise APIException(self.oauth_verify, res.status_code, res.json())
        cdata = res.json()
        print(cdata)

        currentCharacter = self.getSsoCharacter(cdata['CharacterName'])

        if currentCharacter is None:
            currentCharacter = SsoCharacter(cdata['CharacterID'],
                                            cdata['CharacterName'],
                                            config.getClientSecret())

        Esi.update_token(currentCharacter, auth_response)

        eos.db.save(currentCharacter)
        wx.PostEvent(self.mainFrame, GE.SsoLogin(character=currentCharacter))
Exemplo n.º 5
0
    def handleLogin(self, ssoInfo):
        auth_response = json.loads(base64.b64decode(ssoInfo))

        # We need to preload the ESI Security object beforehand with the auth response so that we can use verify to
        # get character information
        # init the security object
        esisecurity = EsiSecurityProxy(sso_url=config.ESI_AUTH_PROXY)

        esisecurity.update_token(auth_response)

        # we get the character information
        cdata = esisecurity.verify()
        print(cdata)

        currentCharacter = self.getSsoCharacter(cdata['CharacterName'])

        if currentCharacter is None:
            currentCharacter = SsoCharacter(cdata['CharacterID'],
                                            cdata['CharacterName'],
                                            config.getClientSecret())
            currentCharacter.esi_client = Esi.genEsiClient(esisecurity)

        Esi.update_token(
            currentCharacter,
            auth_response)  # this also sets the esi security token

        eos.db.save(currentCharacter)
        wx.PostEvent(self.mainFrame, GE.SsoLogin(character=currentCharacter))
Exemplo n.º 6
0
    def delSsoCharacter(self, id):
        char = eos.db.getSsoCharacter(id, config.getClientSecret())

        # There is an issue in which the SSO character is not removed from any linked characters - a reference to the
        # sso character remains even though the SSO character is deleted which should have deleted the link. This is a
        # work around until we can figure out why. Manually delete SSOCharacter from all of it's characters
        for x in char.characters:
            x._Character__ssoCharacters.remove(char)
        eos.db.remove(char)
        wx.PostEvent(self.mainFrame, GE.SsoLogout(charID=id))
Exemplo n.º 7
0
    def delSsoCharacter(self, id):
        char = eos.db.getSsoCharacter(id, config.getClientSecret())

        # There is an issue in which the SSO character is not removed from any linked characters - a reference to the
        # sso character remains even though the SSO character is deleted which should have deleted the link. This is a
        # work around until we can figure out why. Manually delete SSOCharacter from all of it's characters
        for x in char.characters:
            x._Character__ssoCharacters.remove(char)
        eos.db.remove(char)
        wx.PostEvent(self.mainFrame, GE.SsoLogout(charID=id))
Exemplo n.º 8
0
 def ssoLogin(self, event):
     self.popCharList()
     sChar = Character.getInstance()
     # Update existing pyfa character, if it doesn't exist - create new
     char = sChar.getCharacter(event.character.characterName)
     if char is None:
         char = sChar.new(event.character.characterName)
     char.setSsoCharacter(event.character, config.getClientSecret())
     sChar.apiFetch(char.ID, APIView.fetchCallback)
     event.Skip()
Exemplo n.º 9
0
    def fetchSkills(self, event):
        sEsi = Esi.getInstance()
        chars = sEsi.getSsoCharacters()

        for ssoChar in chars:
            if not ssoChar.characters:
                char = Character.new(ssoChar.characterName)
                char.setSsoCharacter(ssoChar, config.getClientSecret())
            for char in ssoChar.characters:
                sChar = Character.getInstance()
                sChar.apiFetch(char.ID, APIView.fetchCallback)
Exemplo n.º 10
0
    def getSsoCharacter(self, id):
        """
        Get character, and modify to include the eve connection
        """
        char = eos.db.getSsoCharacter(id, config.getClientSecret())
        if char is not None and char.esi_client is None:
            char.esi_client = Esi.genEsiClient()
            Esi.update_token(
                char, Esi.get_sso_data(char)
            )  # don't use update_token on security directly, se still need to apply the values here

        eos.db.commit()
        return char
Exemplo n.º 11
0
 def ssoLogin(self, event):
     self.popCharList()
     sChar = Character.getInstance()
     # Update existing pyfa character, if it doesn't exist - create new
     char = sChar.getCharacter(event.character.characterName)
     newChar = False
     if char is None:
         char = sChar.new(event.character.characterName)
         newChar = True
     char.setSsoCharacter(event.character, config.getClientSecret())
     sChar.apiFetch(char.ID, APIView.fetchCallback)
     wx.PostEvent(self.mainFrame, GE.CharListUpdated())
     event.Skip()
Exemplo n.º 12
0
    def run(self):
        network = Network.getInstance()

        try:
            try:
                response = network.get(
                    url=
                    'https://www.pyfa.io/update_check?pyfa_version={}&client_hash={}'
                    .format(config.version, config.getClientSecret()),
                    type=network.UPDATE,
                    timeout=5)
            except (KeyboardInterrupt, SystemExit):
                raise
            except Exception as e:
                response = network.get(
                    url='https://api.github.com/repos/pyfa-org/Pyfa/releases',
                    type=network.UPDATE,
                    timeout=5)

            jsonResponse = response.json()
            jsonResponse.sort(key=lambda x: calendar.timegm(
                dateutil.parser.parse(x['published_at']).utctimetuple()),
                              reverse=True)

            for release in jsonResponse[:5]:
                rVersion = Version(release['tag_name'])
                cVersion = Version(config.version)

                # Suppress pre releases if we're not already on a pre-release (if we are, we want to know about new ones)
                if not cVersion.is_prerelease and rVersion.is_prerelease and self.settings.get(
                        'prerelease'):
                    continue

                # Handle use-case of updating to suppressed version
                if self.settings.get('version') == 'v' + config.version:
                    self.settings.set('version', None)

                # Suppress version
                if release['tag_name'] == self.settings.get('version'):
                    break

                if rVersion > cVersion:
                    wx.CallAfter(self.callback, release, rVersion)
                    break

        except (KeyboardInterrupt, SystemExit):
            raise
        except Exception as e:
            pyfalog.error("Caught exception in run")
            pyfalog.error(e)
            pass
Exemplo n.º 13
0
    def getLoginURI(self, redirect=None):
        self.state = str(uuid.uuid4())
        esisecurity = EsiSecurityProxy(sso_url=config.ESI_AUTH_PROXY)

        args = {
            'state': self.state,
            'pyfa_version': config.version,
            'login_method': self.settings.get('loginMode'),
            'client_hash': config.getClientSecret()
        }

        if redirect is not None:
            args['redirect'] = redirect

        return esisecurity.get_auth_uri(**args)
Exemplo n.º 14
0
    def handleLogin(self, message):
        auth_response, data = self.auth(message['code'])

        currentCharacter = self.getSsoCharacter(data['name'])

        sub_split = data["sub"].split(":")
        if (len(sub_split) != 3):
            raise GenericSsoError("JWT sub does not contain the expected data. Contents: %s" % data["sub"])
        cid = sub_split[-1]
        if currentCharacter is None:
            currentCharacter = SsoCharacter(cid, data['name'], config.getClientSecret())

        Esi.update_token(currentCharacter, auth_response)

        eos.db.save(currentCharacter)
        wx.PostEvent(self.mainFrame, GE.SsoLogin(character=currentCharacter))
Exemplo n.º 15
0
    def run(self):
        network = Network.getInstance()

        try:
            try:
                response = network.request('https://www.pyfa.io/update_check?pyfa_version={}&client_hash={}'.format(
                    config.version, config.getClientSecret()), network.UPDATE)
            except Exception as e:
                response = network.request('https://api.github.com/repos/pyfa-org/Pyfa/releases', network.UPDATE)

            jsonResponse = response.json()
            jsonResponse.sort(
                key=lambda x: calendar.timegm(dateutil.parser.parse(x['published_at']).utctimetuple()),
                reverse=True
            )

            for release in jsonResponse[:5]:
                rVersion = Version(release['tag_name'])
                cVersion = Version(config.version)

                # Suppress pre releases if we're not already on a pre-release (if we are, we want to know about new ones)
                if not cVersion.is_prerelease and rVersion.is_prerelease and self.settings.get('prerelease'):
                    continue

                # Handle use-case of updating to suppressed version
                if self.settings.get('version') == 'v' + config.version:
                    self.settings.set('version', None)

                # Suppress version
                if release['tag_name'] == self.settings.get('version'):
                    break

                if rVersion > cVersion:
                    wx.CallAfter(self.callback, release, rVersion)
                    break

        except Exception as e:
            pyfalog.error("Caught exception in run")
            pyfalog.error(e)
            pass
Exemplo n.º 16
0
 def getSsoCharacter(charID):
     char = eos.db.getCharacter(charID)
     sso = char.getSsoCharacter(config.getClientSecret())
     return sso
Exemplo n.º 17
0
 def getSsoCharacter(self, id):
     char = eos.db.getSsoCharacter(id, config.getClientSecret())
     eos.db.commit()
     return char
Exemplo n.º 18
0
 def getSsoCharacters(self):
     chars = eos.db.getSsoCharacters(config.getClientSecret())
     return chars
Exemplo n.º 19
0
    def handleLogin(self, message):

        # we already have authenticated stuff for the auto mode
        if self.settings.get('ssoMode') == EsiSsoMode.AUTO:
            ssoInfo = message['SSOInfo'][0]
            auth_response = json.loads(base64.b64decode(ssoInfo))
        else:
            # otherwise, we need to fetch the information
            auth_response = self.auth(message['code'][0])

        res = self._session.get(
            self.oauth_verify,
            headers=self.get_oauth_header(auth_response['access_token'])
        )
        if res.status_code != 200:
            raise APIException(
                self.oauth_verify,
                res.status_code,
                res.json()
            )
        cdata = res.json()

        currentCharacter = self.getSsoCharacter(cdata['CharacterName'])

        if currentCharacter is None:
            currentCharacter = SsoCharacter(cdata['CharacterID'], cdata['CharacterName'], config.getClientSecret())

        Esi.update_token(currentCharacter, auth_response)

        eos.db.save(currentCharacter)
        wx.PostEvent(self.mainFrame, GE.SsoLogin(character=currentCharacter))
Exemplo n.º 20
0
Arquivo: esi.py Projeto: wyl0706/Pyfa
 def getSsoCharacter(self, id):
     char = eos.db.getSsoCharacter(id, config.getClientSecret())
     eos.db.commit()
     return char
Exemplo n.º 21
0
 def getSsoCharacters(self):
     chars = eos.db.getSsoCharacters(config.getClientSecret())
     return chars