Exemplo n.º 1
0
def unpack_msg(data, *args, **kwargs):
    if not __ca.config['SECURIZER']:
        return data
    else:
        # if 'key' in data:
        #     cipher_key = base64.b64decode(data.get('key'))
        # else:
        #     try:
        #         cipher_key = session.get('cipher_key', None)
        #     except RuntimeError:
        #         cipher_key = None
        # try:
        #     session['cipher_key'] = cipher_key
        # except RuntimeError:
        #     pass
        if not 'error' in data:
            dim = None
            if dim is None:
                dim = Dimension.get_current()
                if dim is None:
                    raise ValueError('No dimension found but SECURIZER set')
            return _unpack_msg(data,
                               *args,
                               pub_key=dim.public,
                               priv_key=dim.private,
                               **kwargs)
        else:
            return data
Exemplo n.º 2
0
    def test_join_command(self, mock_now, mock_check, mock_current_app,
                          mock_current_app2, mock_time_sleep):
        with virtual_network(self.app, self.app_join):
            mock_now.return_value = now
            mock_check.return_value = True
            mock_current_app.dm.config.http_conf.get.side_effect = [
                '/origin_key', '/origin_cert'
            ]
            self.mock_dm.config.http_conf.__getitem__.side_effect = {
                'keyfile': '/dest_key',
                'certfile': '/dest_cert'
            }.__getitem__
            mock_current_app2.dm.cluster_manager.get_alive.return_value = [
                self.s1.id
            ]

            join(self.mock_dm, 'node1', self.token, port=5000)

            # check if new server created
            server_new = Server.query.get(self.join_server_id)
            self.assertEqual(server_new.last_modified_at, now)

            with self.app_join.app_context():
                self.dim.pop('current')
                self.assertDictEqual(self.dim,
                                     Dimension.get_current().to_json())
                s = Server.query.get(self.s1.id)
                self.assertEqual(0, s.route.cost)

            self.assertTrue(os.path.exists('/dest_key'))
            self.assertTrue(os.path.exists('/dest_cert'))
Exemplo n.º 3
0
    def setUp(self):
        """Create and configure a new app instance for each test."""
        # create the app with common test config
        self.app = create_app('test')
        self.app.config['SCHEME'] = 'http'

        @self.app.route('/', methods=['GET', 'POST'])
        def home():
            return {'msg': 'default response'}

        @self.app.route('/securized', methods=['GET', 'POST'])
        @securizer
        def securized():
            return {'msg': 'default response'}

        self.app_context = self.app.app_context()
        self.app_context.push()
        self.client = self.app.test_client()
        db.init_app(self.app)
        db.create_all()
        self.server = Server('me', port=5000, me=True)
        db.session.add(self.server)
        db.session.add(Dimension.from_json(self.json_dim))
        db.session.commit()

        self.token = create_access_token('test')
        self.auth = HTTPBearerAuth(self.token)
        self.url = 'https://me:5000/'
Exemplo n.º 4
0
    def fill_database(self, node):
        db.create_all()
        d = Dimension.from_json(self.dim)
        d.current = True
        s1 = Server(id='00000000-0000-0000-0000-000000000001', name='node1', created_on=now, me=node == 'node1')
        g11 = Gate(id='00000000-0000-0000-0000-000000000011', server=s1, port=5000, dns=s1.name)
        s2 = Server(id='00000000-0000-0000-0000-000000000002', name='node2', created_on=now, me=node == 'node2')
        g12 = Gate(id='00000000-0000-0000-0000-000000000012', server=s2, port=5000, dns=s2.name)
        s3 = Server(id='00000000-0000-0000-0000-000000000003', name='node3', created_on=now, me=node == 'node3')
        g13 = Gate(id='00000000-0000-0000-0000-000000000013', server=s3, port=5000, dns=s3.name)
        s4 = Server(id='00000000-0000-0000-0000-000000000004', name='node4', created_on=now, me=node == 'node4')
        g14 = Gate(id='00000000-0000-0000-0000-000000000014', server=s4, port=5000, dns=s4.name)

        if node == 'node1':
            self.s1 = s1
            self.s2 = s2
            self.s3 = s3
            self.s4 = s4
            Route(s2, g12)
            Route(s3, s2, 1)
        elif node == 'node2':
            Route(s1, g11)
            Route(s3, g13)
        elif node == 'node3':
            Route(s1, s2, 1)
            Route(s2, g12)

        db.session.add_all([d, s1, s2, s3, s4])
        db.session.commit()
Exemplo n.º 5
0
def load_global_data_into_context():
    from dimensigon.domain.entities import Server, Dimension
    from dimensigon.web.decorators import set_source
    global _dimension, _server
    set_source()
    g.server = Server.get_current()
    g.dimension = Dimension.get_current()
Exemplo n.º 6
0
    def _fill_database(self, app: Flask):
        with mock.patch('dimensigon.domain.entities.get_now') as mock_get_now:
            mock_get_now.return_value = defaults.INITIAL_DATEMARK
            node = app.config['SERVER_NAME']
            with app.app_context():
                db.create_all()
                event.listen(db.session, 'after_commit', receive_after_commit)
                set_initial(**self.initials)
                d = Dimension.from_json(self.dim)
                d.current = True
                s1 = Server('node1',
                            created_on=defaults.INITIAL_DATEMARK,
                            id=self.SERVER1,
                            me=node == 'node1')
                g11 = Gate(id='00000000-0000-0000-0000-000000000011',
                           server=s1,
                           port=5000,
                           dns=s1.name)
                s2 = Server('node2',
                            created_on=defaults.INITIAL_DATEMARK,
                            id=self.SERVER2,
                            me=node == 'node2')
                g12 = Gate(id='00000000-0000-0000-0000-000000000012',
                           server=s2,
                           port=5000,
                           dns=s2.name)
                s3 = Server('node3',
                            created_on=defaults.INITIAL_DATEMARK,
                            id=self.SERVER3,
                            me=node == 'node3')
                g13 = Gate(id='00000000-0000-0000-0000-000000000013',
                           server=s3,
                           port=5000,
                           dns=s3.name)

                if node == 'node1':
                    Route(s2, g12)
                    Route(s3, g13)
                elif node == 'node2':
                    Route(s1, g11)
                    Route(s3, g13)
                elif node == 'node3':
                    Route(s1, g11)
                    Route(s2, g12)

                self.fill_database()
                db.session.add_all([d, s1, s2, s3])
                db.session.commit()
            if node == 'node1':
                self.s1, self.s2, self.s3 = db.session.merge(
                    s1), db.session.merge(s2), db.session.merge(s3)
Exemplo n.º 7
0
def generate_dimension(name):
    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives import serialization
    from cryptography.hazmat.primitives.asymmetric import rsa
    from dimensigon.domain.entities import Dimension

    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=4096,
        backend=default_backend()
    )
    priv_pem = private_key.private_bytes(encoding=serialization.Encoding.PEM,
                                         format=serialization.PrivateFormat.TraditionalOpenSSL,
                                         encryption_algorithm=serialization.NoEncryption())
    pub_pem = private_key.public_key().public_bytes(encoding=serialization.Encoding.PEM,
                                                    format=serialization.PublicFormat.PKCS1)

    return Dimension(name=name, private=priv_pem, public=pub_pem)
Exemplo n.º 8
0
    def _fill_database(self):
        with mock.patch('dimensigon.domain.entities.get_now') as mock_get_now:
            mock_get_now.return_value = defaults.INITIAL_DATEMARK
            db.create_all()
            event.listen(db.session, 'after_commit', receive_after_commit)

            set_initial(**self.initials)
            d = Dimension.from_json(self.dim)
            d.current = True
            self.s1 = Server('node1',
                             created_on=defaults.INITIAL_DATEMARK,
                             id=self.SERVER,
                             me=True)
            self.g11 = Gate(id='00000000-0000-0000-0000-000000000011',
                            server=self.s1,
                            port=5000,
                            dns=self.s1.name)
            self.fill_database()
            db.session.add_all([d, self.s1])
            db.session.commit()
Exemplo n.º 9
0
def pack_msg(data, *args, **kwargs):
    if not __ca.config['SECURIZER']:
        return data
    else:
        # if not ('symmetric_key' in kwargs or 'cipher_key' in kwargs):
        #     try:
        #         kwargs['cipher_key'] = session.get('cipher_key')
        #     except RuntimeError:
        #         pass
        # if generate_key:
        #     kwargs.pop('symmetric_key', None)
        #     kwargs.pop('cipher_key', None)
        dim = None
        if dim is None:
            dim = Dimension.get_current()
            if dim is None:
                raise ValueError('No dimension found but SECURIZER set')
        return _pack_msg(data,
                         *args,
                         source=Server.get_current(),
                         pub_key=dim.public,
                         priv_key=dim.private,
                         **kwargs)