Example #1
0
    def _lookup_saml_token(self, db, patron):
        """Look up for a SAML token.

        :param db: Database session
        :type db: sqlalchemy.orm.session.Session

        :param patron: Patron object
        :type patron: core.model.patron.Patron

        :return: SAML subject (if any)
        :rtype: Optional[api.saml.metadata.Subject]
        """
        self._logger.debug("Started looking up for a SAML token")

        from api.authenticator import BaseSAMLAuthenticationProvider

        credential = Credential.lookup_by_patron(
            db,
            BaseSAMLAuthenticationProvider.TOKEN_DATA_SOURCE_NAME,
            BaseSAMLAuthenticationProvider.TOKEN_TYPE,
            patron,
            allow_persistent_token=False,
            auto_create_datasource=True,
        )

        self._logger.debug(
            "Finished looking up for a SAML token: {0}".format(credential)
        )

        return credential
Example #2
0
    def test_save_proquest_token_saves_token(self):
        # Arrange
        credential_manager = ProQuestCredentialManager()
        patron = self._patron()
        expected_token = "12345"

        # Act
        credential_manager.save_proquest_token(
            self._db, patron, datetime.timedelta(hours=1), expected_token
        )
        token = Credential.lookup_by_patron(
            self._db,
            self._data_source.name,
            ProQuestCredentialType.PROQUEST_JWT_TOKEN.value,
            patron,
        )

        # Assert
        assert expected_token == token.credential
Example #3
0
    def lookup_proquest_token(self, db, patron):
        """Look up for a JWT bearer token used required to use ProQuest API.

        :param db: Database session
        :type db: sqlalchemy.orm.session.Session

        :param patron: Patron object
        :type patron: core.model.patron.Patron

        :return: Credential object containing the existing ProQuest JWT bearer token (if any)
        :rtype: Optional[core.model.credential.Credential]
        """
        if not is_session(db):
            raise ValueError('"db" argument must be a valid SQLAlchemy session')
        if not isinstance(patron, Patron):
            raise ValueError('"patron" argument must be an instance of Patron class')

        self._logger.debug("Started looking up for a ProQuest JWT token")

        credential = Credential.lookup_by_patron(
            db,
            DataSourceConstants.PROQUEST,
            ProQuestCredentialType.PROQUEST_JWT_TOKEN.value,
            patron,
            allow_persistent_token=False,
            auto_create_datasource=True,
        )

        self._logger.debug(
            "Finished looking up for a ProQuest JWT token: {0}".format(credential)
        )

        if credential:
            return credential

        return None