Exemple #1
0
    def update_plugins(cls, dirs):
        """
        Takes the list of the plugins directories located in ictv/plugins and updates
        the database if they're not in db
        :param dirs: The directory listing of ictv/plugins
        :return: the list of plugins present in updated database
        """
        s = set()
        plugins_list = []
        for p in Plugin.select():
            s.add(p.name)
            if p.name not in dirs:
                # Plugin exists in database but was not found in the plugins directory
                p.activated = 'notfound'
            else:
                path = os.path.join(p.package_path, 'config.yaml')
                if os.path.isfile(path):
                    # Plugin is considered to be found
                    if p.activated == 'notfound':
                        p.activated = 'no'
                    with open(path, 'r') as f:
                        config = yaml.load(f,
                                           Loader=yamlordereddictloader.Loader)
                        p.webapp = config['plugin']['webapp']
                        p.static = config['plugin']['static']
                        p.description = config['plugin'].get(
                            'description', None)
                        if 'channels_params' in config:
                            # The plugin has channel specific parameters that can be changed from channel to channel
                            order = 0
                            for k, v in config['channels_params'].items():
                                p.channels_params[
                                    k] = v  # Sets the parameter to its default value
                                if 'order' not in p.channels_params[k]:
                                    p.channels_params[k]['order'] = order
                                    order += 1
                                if PluginParamAccessRights.selectBy(
                                        plugin=p, name=k).getOne(None) is None:
                                    PluginParamAccessRights(plugin=p, name=k)
                            for k in list(p.channels_params):
                                if k not in config['channels_params'].keys():
                                    p.channels_params.pop(k)
                                    PluginParamAccessRights.deleteBy(plugin=p,
                                                                     name=k)

                            p.channels_params = p.channels_params  # Force SQLObject update
                else:
                    p.activated = 'notfound'

            plugins_list.append(p)
        for p in dirs:
            if p not in s:
                # Plugin was not in database, it should be added but not activated
                plugins_list.append(Plugin(name=p, activated='no'))
        return plugins_list
Exemple #2
0
 def has_visible_params_for(self, user):
     """ Returns true if the given user has access to one or more parameters of this channel. """
     if user.super_admin:
         return True
     if user.admin:
         return PluginParamAccessRights.selectBy(plugin=self.plugin, administrator_read=True).count() > 0
     if self.has_admin(user):
         return PluginParamAccessRights.selectBy(plugin=self.plugin, channel_administrator_read=True).count() > 0
     if self.has_contrib(user):
         return PluginParamAccessRights.selectBy(plugin=self.plugin, channel_contributor_read=True).count() > 0
     return False
Exemple #3
0
 def f():
     p = Plugin.selectBy(name='fake_plugin').getOne()
     p.activated = 'yes'
     p.channels_params['this_parameter_does_not_exists'] = None
     p.channels_params = p.channels_params  # Force SQLObject update
     PluginParamAccessRights(plugin=p,
                             name='this_parameter_does_not_exists')
Exemple #4
0
def create_database():
    Building.createTable()
    Channel.createTable()
    Plugin.createTable()
    User.createTable()
    PluginChannel.createTable()
    ChannelBundle.createTable()
    Role.createTable()
    Screen.createTable()
    ScreenMac.createTable()
    Subscription.createTable()
    Template.createTable()
    Asset.createTable()
    PluginParamAccessRights.createTable()
    LogStat.createTable()
    DBVersion.createTable()
    DBVersion(version=database_version)
    User(username="******", fullname="ICTV Admin", email="admin@ictv", super_admin=True, disabled=False)
Exemple #5
0
 def get_access_rights_for(self, param_name, user):
     """
         Returns a tuple of booleans (read_access, write_access) indicating which type of rights
         this user has on the given param of this channel depending on they role and the param access configuration.
     """
     if user.super_admin:
         return True, True
     rights = PluginParamAccessRights.selectBy(plugin=self.plugin, name=param_name).getOne((False, False))
     if user.admin:
         return rights.administrator_read, rights.administrator_write
     if self.has_admin(user):
         return rights.channel_administrator_read, rights.channel_administrator_write
     if self.has_contrib(user):
         return rights.channel_contributor_read, rights.channel_contributor_write
     return False, False
Exemple #6
0
 def runTest(self):
     """ Tests the plugin parameter access rights. """
     p = Plugin(name='testPlug', activated='yes')
     par = PluginParamAccessRights(plugin=p, name='testParam')
     assert par.get_access_rights_for(
         UserPermissions.super_administrator) == (True, True)
     assert par.get_access_rights_for(
         UserPermissions.administrator) == (True, True)
     assert par.get_access_rights_for(
         UserPermissions.channel_administrator) == (True, False)
     assert par.get_access_rights_for(
         UserPermissions.channel_contributor) == (False, False)
     assert par.get_access_rights_for(
         UserPermissions.no_permission) == (False, False)
Exemple #7
0
 def runTest(self):
     p = Plugin.byName('fake_plugin')
     assert 'this_parameter_does_not_exists' not in p.channels_params
     assert PluginParamAccessRights.selectBy(
         plugin=p,
         name='this_parameter_does_not_exists').getOne(None) is None
Exemple #8
0
    def runTest(self):
        """ Tests the PluginChannel SQLObject """
        Channel.deleteMany(None)
        fake_plugin = Plugin.selectBy(name='fake_plugin').getOne()
        plugin_channel = PluginChannel(name='MyPluginChannel',
                                       plugin=fake_plugin,
                                       subscription_right='public')
        user = User(fullname='User', email='test@localhost')
        user2 = User(fullname='User2', email='test2@localhost')

        assert plugin_channel.get_type_name() == 'Plugin fake_plugin'

        # Test user permissions
        def assert_no_permission(c, u):
            assert c.get_channel_permissions_of(
                u) == UserPermissions.no_permission
            assert u not in c.get_admins() and u not in c.get_contribs()

        def has_contrib(u, check_inlist=True):
            return plugin_channel.has_contrib(u) and (
                not check_inlist or u in plugin_channel.get_contribs())

        def has_admin(u):
            return plugin_channel.has_admin(
                u) and u in plugin_channel.get_admins()

        assert_no_permission(plugin_channel, user)
        assert_no_permission(plugin_channel, user2)

        plugin_channel.give_permission_to_user(
            user, UserPermissions.channel_contributor)
        role = Role.selectBy(user=user, channel=plugin_channel).getOne()

        assert has_contrib(user)
        assert not has_admin(user)
        assert not has_contrib(user2)
        assert not has_admin(user2)
        assert role.permission_level == UserPermissions.channel_contributor == plugin_channel.get_channel_permissions_of(
            user)

        assert json.loads(plugin_channel.get_users_as_json()) == {
            str(user.id): UserPermissions.channel_contributor.value
        }

        plugin_channel.give_permission_to_user(
            user, UserPermissions.channel_administrator)
        assert has_contrib(user, check_inlist=False)
        assert has_admin(user)
        assert not has_contrib(user2)
        assert not has_admin(user2)
        assert role.permission_level == UserPermissions.channel_administrator == plugin_channel.get_channel_permissions_of(
            user)

        assert json.loads(plugin_channel.get_users_as_json()) == {
            str(user.id): UserPermissions.channel_administrator.value
        }
        assert json.loads(PluginChannel.get_channels_users_as_json([plugin_channel])) == \
            {str(plugin_channel.id): {str(user.id): UserPermissions.channel_administrator.value}}

        plugin_channel.remove_permission_to_user(user)
        plugin_channel.give_permission_to_user(
            user2, UserPermissions.channel_administrator)
        assert not has_contrib(user)
        assert not has_admin(user)
        assert has_contrib(user2, check_inlist=False)
        assert has_admin(user2)
        plugin_channel.remove_permission_to_user(user2)
        assert not has_contrib(user2)
        assert not has_admin(user2)

        # Test plugin config parameters
        assert plugin_channel.get_config_param(
            'string_param') == 'default string'
        assert plugin_channel.get_config_param('int_param') == 1
        assert plugin_channel.get_config_param('float_param') == float('-inf')
        assert plugin_channel.get_config_param('boolean_param') is True
        assert plugin_channel.get_config_param('template_param') is None
        with pytest.raises(KeyError):
            assert plugin_channel.get_config_param(
                'this_param_does_not_exists')

        def assert_value_is_set(param, value):
            plugin_channel.plugin_config[param] = value
            plugin_channel.plugin_config = plugin_channel.plugin_config  # Force SQLObject update
            assert plugin_channel.get_config_param(param) == value

        assert_value_is_set('string_param', 'Hello, world!')
        assert_value_is_set('int_param', 42)
        assert_value_is_set('float_param', 42.0)
        assert_value_is_set('boolean_param', False)
        assert_value_is_set('template_param', 'fake-template')

        # Test parameters access rights
        ppar = PluginParamAccessRights.selectBy(plugin=fake_plugin,
                                                name='int_param').getOne()
        ppar.channel_contributor_read = False
        ppar.channel_contributor_write = False
        ppar.channel_administrator_read = True
        ppar.channel_administrator_write = False
        ppar.administrator_read = True
        ppar.administrator_write = True

        user.super_admin = True
        assert plugin_channel.has_visible_params_for(user)
        for param in [
                'string_param', 'int_param', 'float_param', 'boolean_param',
                'template_param'
        ]:
            assert plugin_channel.get_access_rights_for(param,
                                                        user) == (True, True)
        user.super_admin = False

        assert not plugin_channel.has_visible_params_for(user)
        plugin_channel.give_permission_to_user(
            user, UserPermissions.channel_contributor)
        assert not plugin_channel.has_visible_params_for(user)
        assert plugin_channel.get_access_rights_for('int_param',
                                                    user) == (False, False)
        plugin_channel.give_permission_to_user(
            user, UserPermissions.channel_administrator)
        assert plugin_channel.has_visible_params_for(user)
        assert plugin_channel.get_access_rights_for('int_param',
                                                    user) == (True, False)
        user.admin = True
        assert plugin_channel.has_visible_params_for(user)
        assert plugin_channel.get_access_rights_for('int_param',
                                                    user) == (True, True)
        plugin_channel.remove_permission_to_user(user)
        user.admin = False
        assert not plugin_channel.has_visible_params_for(user)
        assert plugin_channel.get_access_rights_for('int_param',
                                                    user) == (False, False)

        # Test miscellaneous parameters
        assert plugin_channel.cache_activated is True
        plugin_channel.plugin.cache_activated_default = False
        assert plugin_channel.cache_activated is False
        plugin_channel.cache_activated = True
        assert plugin_channel.cache_activated is True

        assert plugin_channel.cache_validity is 60
        plugin_channel.plugin.cache_validity_default = 120
        assert plugin_channel.cache_validity is 120
        plugin_channel.cache_validity = 42
        assert plugin_channel.cache_validity is 42

        assert plugin_channel.keep_noncomplying_capsules is False
        plugin_channel.plugin.keep_noncomplying_capsules_default = True
        assert plugin_channel.keep_noncomplying_capsules is True
        plugin_channel.keep_noncomplying_capsules = False
        assert plugin_channel.keep_noncomplying_capsules is False

        # Test flatten()
        plugin_channel.enabled = False
        assert plugin_channel.flatten() == []
        assert plugin_channel.flatten(keep_disabled_channels=True) == [
            plugin_channel
        ]
        plugin_channel.enabled = True
        assert plugin_channel.flatten() == [plugin_channel]