Example #1
0
    def test_read_config_no_signing_keys(self):
        """
        Register a client without signing keys with a registration token.
        Read config from storage to instantiate a client showing config 
        without signing keys is able to be used in client instantiation. 
        """

        config_client_public_key, config_client_private_key = e3db.Client.generate_keypair(
        )
        config_client_name = "client_{0}".format(
            binascii.hexlify(os.urandom(16)))
        test_config_client = e3db.Client.register(token,
                                                  config_client_name,
                                                  config_client_public_key,
                                                  backup=False,
                                                  api_url=api_url)
        config_client_api_key_id = test_config_client.api_key_id
        config_client_api_secret = test_config_client.api_secret
        config_client_id = test_config_client.client_id

        config_client_config = e3db.Config(config_client_id,
                                           config_client_api_key_id,
                                           config_client_api_secret,
                                           config_client_public_key,
                                           config_client_private_key,
                                           api_url=api_url)
        config_name = "integration_config_no_signing{0}".format(
            binascii.hexlify(os.urandom(16)))
        # write config with profile 'config_name' ~/.tozny/<profile>/e3db.json
        config_client_config.write(config_name)

        read_config_profile = e3db.Config.load(config_name)

        # Remove signing keys from config.
        read_config_profile.pop("public_signing_key", None)
        read_config_profile.pop("private_signing_key", None)

        # Assert config does not have signing keys
        assert ('public_signing_key' not in read_config_profile)
        assert ('private_signing_key' not in read_config_profile)

        read_client_config = e3db.Config(read_config_profile['client_id'],
                                         read_config_profile['api_key_id'],
                                         read_config_profile['api_secret'],
                                         read_config_profile['public_key'],
                                         read_config_profile['private_key'],
                                         read_config_profile['client_email'],
                                         read_config_profile['version'],
                                         read_config_profile['api_url'])

        # Assert Config version defaults to 1 given no signing keys
        assert (read_client_config.version == "1")

        # If this doesn't throw an exception during instantiation, we loaded
        # the configuration properly
        config_client = e3db.Client(read_client_config())

        # Assert signing keys defaulted to empty strings
        assert (config_client.public_signing_key == "")
        assert (config_client.private_signing_key == "")
    def register_client(self):
        client1_public_key, client1_private_key = e3db.Client.generate_keypair()
        client1_name = "email_{0}@tozny.com".format(time.time())
        test_client1 = e3db.Client.register(token, client1_name, client1_public_key, api_url=api_url)
        client1_api_key_id = test_client1.api_key_id
        client1_api_secret = test_client1.api_secret
        client1_id = test_client1.client_id

        client1_config = e3db.Config(
            client1_id,
            client1_api_key_id,
            client1_api_secret,
            client1_public_key,
            client1_private_key,
            api_url=api_url 
        )
        self.client1 = e3db.Client(client1_config())

        client2_public_key, client2_private_key = e3db.Client.generate_keypair()
        client2_name = "email_{0}@tozny.com".format(time.time())
        test_client2 = e3db.Client.register(token, client2_name, client2_public_key, api_url=api_url)
        client2_api_key_id = test_client2.api_key_id
        client2_api_secret = test_client2.api_secret
        client2_id = test_client2.client_id

        client2_config = e3db.Config(
            client2_id,
            client2_api_key_id,
            client2_api_secret,
            client2_public_key,
            client2_private_key,
            api_url=api_url 
        )
        self.client2 = e3db.Client(client2_config())
Example #3
0
    def test_read_write_config(self):
        """
        Register a client with a registration token.
        Write that config to disk storage. Read config from storage to
        instantiate a client showing config can be read and used later.
        """

        config_client_public_key, config_client_private_key = e3db.Client.generate_keypair(
        )
        config_client_name = "client_{0}".format(
            binascii.hexlify(os.urandom(16)))
        test_config_client = e3db.Client.register(token,
                                                  config_client_name,
                                                  config_client_public_key,
                                                  api_url=api_url)
        config_client_api_key_id = test_config_client.api_key_id
        config_client_api_secret = test_config_client.api_secret
        config_client_id = test_config_client.client_id

        config_client_config = e3db.Config(config_client_id,
                                           config_client_api_key_id,
                                           config_client_api_secret,
                                           config_client_public_key,
                                           config_client_private_key,
                                           api_url=api_url)
        config_name = "integration_config_{0}".format(
            binascii.hexlify(os.urandom(16)))
        # write to default location at ~/.tozny/e3db.json, with no profile
        config_client_config.write()
        # write config with profile 'config_name' ~/.tozny/<profile>/e3db.json
        config_client_config.write(config_name)

        with pytest.raises(IOError):
            # Try to write over existing config file.
            # SDK will prevent key loss and throw an error
            config_client_config.write()

        read_config = e3db.Config.load()
        read_config_profile = e3db.Config.load(config_name)
        # Check both config files were written properly, and able to be loaded
        assert (read_config == read_config_profile)

        read_client_config = e3db.Config(read_config_profile['client_id'],
                                         read_config_profile['api_key_id'],
                                         read_config_profile['api_secret'],
                                         read_config_profile['public_key'],
                                         read_config_profile['private_key'],
                                         read_config_profile['client_email'],
                                         read_config_profile['version'],
                                         read_config_profile['api_url'])

        # If this doesn't throw an exception during instantiation, we loaded
        # the configuration properly
        config_client = e3db.Client(read_client_config())
Example #4
0
  def setup_class(self):
    """This code runs before the tests and assigns a dynamically configured client"""
    client1_public_key, client1_private_key = e3db.Client.generate_keypair()
    client1_public_signing_key, client1_private_signing_key = e3db.Client.generate_signing_keypair()
    client1_name = "client_{0}".format(binascii.hexlify(os.urandom(16)))
    test_client1 = e3db.Client.register(token, client1_name, client1_public_key, backup=False, api_url=api_url, 
                                        public_signing_key=client1_public_signing_key,
                                        private_signing_key=client1_private_signing_key)
    client1_api_key_id = test_client1.api_key_id
    client1_api_secret = test_client1.api_secret
    client1_id = test_client1.client_id

    client1_config = e3db.Config(
        client1_id,
        client1_api_key_id,
        client1_api_secret,
        client1_public_key,
        client1_private_key,
        api_url=api_url,
        public_signing_key=client1_public_signing_key,
        private_signing_key=client1_private_signing_key
    )

    self.client1 = e3db.Client(client1_config())

    # Client 2
    client2_public_key, client2_private_key = e3db.Client.generate_keypair()
    client2_public_signing_key, client2_private_signing_key = e3db.Client.generate_signing_keypair()
    client2_name = "client_{0}".format(binascii.hexlify(os.urandom(16)))
    test_client2 = e3db.Client.register(token, client2_name, client2_public_key, backup=False, api_url=api_url, 
                                        public_signing_key=client2_public_signing_key,
                                        private_signing_key=client2_private_signing_key)
    client2_api_key_id = test_client2.api_key_id
    client2_api_secret = test_client2.api_secret
    client2_id = test_client2.client_id

    client2_config = e3db.Config(
        client2_id,
        client2_api_key_id,
        client2_api_secret,
        client2_public_key,
        client2_private_key,
        api_url=api_url,
        public_signing_key=client2_public_signing_key,
        private_signing_key=client2_private_signing_key
    )

    self.client2 = e3db.Client(client2_config())
Example #5
0
def register_and_write_credentials():
    public_key, private_key = e3db.Client.generate_keypair()
    client_info = e3db.Client.register(registration_token, client_name,
                                       public_key)
    config = e3db.Config(client_info.client_id, client_info.api_key_id,
                         client_info.api_secret, public_key, private_key)
    config.write(client_name)
Example #6
0
    def test_client_signing_keys_optional(self):
        """
        Client created without signing keys contains correct value; client 
        created without it contains empty string.
        """
        client_public_key, client_private_key = e3db.Client.generate_keypair()
        client_name = "client_no_signing_{0}".format(
            binascii.hexlify(os.urandom(16)))
        test_client = e3db.Client.register(token,
                                           client_name,
                                           client_public_key,
                                           backup=False,
                                           api_url=api_url)
        client_api_key_id = test_client.api_key_id
        client_api_secret = test_client.api_secret
        client_id = test_client.client_id
        client_no_signing_config = e3db.Config(client_id,
                                               client_api_key_id,
                                               client_api_secret,
                                               client_public_key,
                                               client_private_key,
                                               api_url=api_url)
        client_no_signing_keys = e3db.Client(client_no_signing_config())

        client_public_signing_key, client_private_signing_key = e3db.Client.generate_signing_keypair(
        )
        client_signing_config = e3db.Config(
            client_id,
            client_api_key_id,
            client_api_secret,
            client_public_key,
            client_private_key,
            api_url=api_url,
            public_signing_key=client_public_signing_key,
            private_signing_key=client_private_signing_key)
        client_signing_keys = e3db.Client(client_signing_config())

        assert (client_no_signing_keys.private_signing_key == "")
        assert (client_no_signing_keys.public_signing_key == "")
        assert (client_signing_keys.private_signing_key ==
                client_private_signing_key)
        assert (client_signing_keys.public_signing_key ==
                client_public_signing_key)
Example #7
0
    def setup_class(self):
        """
        Setup where we create two clients using registration tokens to associate
        them with our Tozny account. They will be used to test operations
        later in the integration tests where we don't want to create a new client
        every time.
        """
        client1_public_key, client1_private_key = e3db.Client.generate_keypair(
        )
        client1_public_signing_key, client1_private_signing_key = e3db.Client.generate_signing_keypair(
        )
        client1_name = "client_{0}".format(binascii.hexlify(os.urandom(16)))
        test_client1 = e3db.Client.register(
            token,
            client1_name,
            client1_public_key,
            backup=False,
            api_url=api_url,
            public_signing_key=client1_public_signing_key,
            private_signing_key=client1_private_signing_key)
        self.test_client1 = test_client1
        client1_api_key_id = test_client1.api_key_id
        client1_api_secret = test_client1.api_secret
        client1_id = test_client1.client_id

        client1_config = e3db.Config(
            client1_id,
            client1_api_key_id,
            client1_api_secret,
            client1_public_key,
            client1_private_key,
            api_url=api_url,
            public_signing_key=client1_public_signing_key,
            private_signing_key=client1_private_signing_key)

        self.client1 = e3db.Client(client1_config())

        client2_public_key, client2_private_key = e3db.Client.generate_keypair(
        )
        client2_public_signing_key, client2_private_signing_key = e3db.Client.generate_signing_keypair(
        )

        client2_name = "client_{0}".format(binascii.hexlify(os.urandom(16)))
        test_client2 = e3db.Client.register(
            token,
            client2_name,
            client2_public_key,
            backup=False,
            api_url=api_url,
            public_signing_key=client2_public_signing_key,
            private_signing_key=client2_private_signing_key)

        self.test_client2 = test_client2
        client2_api_key_id = test_client2.api_key_id
        client2_api_secret = test_client2.api_secret
        client2_id = test_client2.client_id

        client2_config = e3db.Config(
            client2_id,
            client2_api_key_id,
            client2_api_secret,
            client2_public_key,
            client2_private_key,
            api_url=api_url,
            public_signing_key=client2_public_signing_key,
            private_signing_key=client2_private_signing_key)

        self.client2 = e3db.Client(client2_config())

        client3_public_key, client3_private_key = e3db.Client.generate_keypair(
        )
        client3_public_signing_key, client3_private_signing_key = e3db.Client.generate_signing_keypair(
        )
        client3_name = "client_{0}".format(binascii.hexlify(os.urandom(16)))
        test_client3 = e3db.Client.register(
            token,
            client3_name,
            client3_public_key,
            backup=False,
            api_url=api_url,
            public_signing_key=client1_public_signing_key,
            private_signing_key=client1_private_signing_key)

        self.test_client3 = test_client3
        client3_api_key_id = test_client3.api_key_id
        client3_api_secret = test_client3.api_secret
        client3_id = test_client3.client_id

        client3_config = e3db.Config(
            client3_id,
            client3_api_key_id,
            client3_api_secret,
            client3_public_key,
            client3_private_key,
            api_url=api_url,
            public_signing_key=client3_public_signing_key,
            private_signing_key=client3_private_signing_key)

        self.client3 = e3db.Client(client3_config())
Example #8
0
print("Client ID: {0}".format(client_id))
print("API Key ID: {0}".format(api_key_id))
print("API Secret: {0}".format(api_secret))

# ---------------------------------------------------------
# Usage
# ---------------------------------------------------------

# Once the client is registered, you can use it immediately to create the
# configuration used to instantiate a Client that can communicate with
# e3db directly.

config = e3db.Config(
    client_id,
    api_key_id,
    api_secret,
    public_key,
    private_key
)

# Now create a client using that configuration.
client = e3db.Client(config())

# Optionally, if you want to save this Configuration to disk, do the following:
config.write()

# Configuration files live in ~/.tozny and you can have several
# different "profiles" like *dev* and *production*.

# Write ~/.tozny/dev/e3db.json profile
# config.write('dev')
import e3db
from e3db.types import Search

# For this example, instantiate a third party client
third_party_config = e3db.Config(
    'a08ddc06-fake-fake-fake-e0589610a05b',
    'fake6e9717e7ad5387c629553bf10db3055ed793376def7112ffa1624ec2fake',
    'fake1467d1d79d078696d69e7d8082337d60a4aee13b55499f8fd9b9412efake',
    'fakeLeDulPGJSddxY1GkvvZthoTZqsGmvS1AFszfake',
    'fakemq3k9vfEaKPd1sRQubfZ2umWbWF0iB2buUSfake',
    api_url = "https://api.e3db.com"
)

third_party_client = e3db.Client(third_party_config())

# Obtain records written by client from the third_party client
record_type = 'contact'
search_filter = Search(include_all_writers=True,include_data=True) \
                                .match(condition="AND", record_types=['contact'], writers=['tozny-client-id-that-shared-with-you'])
results = third_party_client.search(search_filter)
for record in results:
    print(record.to_json())