Esempio n. 1
0
def settings_save(_context, request):
    data = request.POST.get('data')
    response = Response()
    if data is not None:
        data = json.loads(data)
        for key in data:
            k = key.replace("___", ".")
            setting_data = request.db.settings.find_one({"key": k})
            if setting_data is None:
                setting = create_setting(k)
            else:
                setting = Setting().deserialize(setting_data)

            if isinstance(data[key], str):
                Setting().set_value(setting, 'value', data[key])
            else:
                Setting().set_value(setting, 'value', json.dumps(data[key]))

            # Save in mongoDB
            obj = Setting().serialize(setting)
            if obj['_id'] == colander.null:
                del obj['_id']
                request.db.settings.insert_one(obj)
            else:
                obj['_id'] = ObjectId(obj['_id'])
                request.db.settings.replace_one({'_id': obj['_id']}, obj)

    messages.created_msg(request, _('Settings modified successfully'),
                         'success')
    response.write('SUCCESS')
    return response
Esempio n. 2
0
def settings(context, request):
    settings = request.db.settings.find().sort([("type", pymongo.DESCENDING), ("key", pymongo.ASCENDING)])
    result = []
    if settings.count() == 0:
        # If there aren't settings in the database then load the default values
        
        # firstboot_api.comments
        result.append(create_setting("firstboot_api.comments"))
        
        # firstboot_api.organization_name
        result.append(create_setting("firstboot_api.organization_name"))
        
        # firstboot_api.version
        result.append(create_setting("firstboot_api.version"))

        # update_error_interval
        result.append(create_setting("update_error_interval"))
        
        # repositories
        result.append(create_setting("repositories"))
        
        # printers.urls
        result.append(create_setting("printers.urls"))
        
        # software_profiles
        result.append(create_setting("software_profiles"))
        
        
    else:
        for setting in settings:
            if setting['key'] == "software_profiles":
                # Get software profiles from database
                sp_setting = Setting().deserialize(setting)
                software_profiles = request.db.software_profiles.find()
                
                value = '['
                for sp in software_profiles:
                    del sp['_id']                
                    if value == '[':
                        value = value + json.dumps(sp)
                    else:
                        value = value + ', ' + json.dumps(sp)
                    
                value = value + ']'
                
                Setting().set_value(sp_setting, 'value', value)
                result.append(sp_setting)
            else:
                result.append(Setting().deserialize(setting))
        
    #logger.debug('settings= %s'%(str(result)))
    return { "settings": result }
Esempio n. 3
0
def settings(_context, request):
    settings_data_count = request.db.settings.count_documents(
        {'key': {
            '$nin': EXCLUDE_SETTINGS
        }})
    result = []
    if settings_data_count == 0:
        # If there aren't settings in the database then load the default values

        # firstboot_api.comments
        result.append(create_setting("firstboot_api.comments"))

        # firstboot_api.organization_name
        result.append(create_setting("firstboot_api.organization_name"))

        # firstboot_api.version
        result.append(create_setting("firstboot_api.version"))

        # update_error_interval
        result.append(create_setting("update_error_interval"))

        # repositories
        result.append(create_setting("repositories"))

        # printers.urls
        result.append(create_setting("printers.urls"))

        # mimetypes
        result.append(create_setting("mimetypes"))

    else:
        includesMimeTypes = False
        settings_data = request.db.settings.find({
            'key': {
                '$nin': EXCLUDE_SETTINGS
            }
        }).sort([("type", pymongo.DESCENDING), ("key", pymongo.ASCENDING)])

        for setting in settings_data:
            if setting['key'] == "mimetypes":
                includesMimeTypes = True
                result.append(Setting().deserialize(setting))
            else:
                result.append(Setting().deserialize(setting))

        if not includesMimeTypes:
            result.append(create_setting("mimetypes"))
    #logger.debug('settings= %s'%(str(result)))
    return {"settings": result}
Esempio n. 4
0
def create_setting(key):
    default_settings = get_current_registry().settings

    setting = Setting()
    setting.key = key

    if key == "update_error_interval":
        appstruct = {'key': key, 'type': 'number', 'value': default_settings.get('update_error_interval')}
    elif key == "repositories":
        appstruct = {'key': key, 'type': 'URLs', 'value': default_settings.get('repositories')}
    elif key == "printers.urls":
        appstruct = {'key': key, 'type': 'URLs', 'value': default_settings.get('printers.urls')}
    elif key ==  "mimetypes":
        appstruct = {'key': key, 'type': 'Mimetypes', 'value': default_settings.get(key)}
    else:
        appstruct = {'key': key, 'type': 'string', 'value': default_settings.get(key)}

    return Setting().serialize(appstruct)
Esempio n. 5
0
def create_setting(key):
    default_settings = get_current_registry().settings

    setting = Setting()
    setting.key = key

    if key == "update_error_interval":
        appstruct = {'key': key, 'type': 'number', 'value': default_settings.get('update_error_interval')}
    elif key == "repositories":
        appstruct = {'key': key, 'type': 'URLs', 'value': default_settings.get('repositories')}
    elif key == "printers.urls":
        appstruct = {'key': key, 'type': 'URLs', 'value': default_settings.get('printers.urls')}
    elif key == "software_profiles":
        value = get_setting('software_profiles', default_settings, None)
        appstruct = {'key': key, 'type': 'Profiles', 'value': value}
    else:
        appstruct = {'key': key, 'type': 'string', 'value': default_settings.get(key)}

    return Setting().serialize(appstruct)
Esempio n. 6
0
def get_setting(key, settings, db):
    value = None
    if db is not None:
        setting = db.settings.find_one({"key": key})
        if setting is not None:
            obj = Setting().serialize(setting)
            value = obj['value']

    if value is None:
        value = settings.get(key)

    return value
Esempio n. 7
0
def get_setting(key, settings, db):
    value = None
    if db is not None:
        setting = db.settings.find_one({"key": key})
        if setting is not None:
            obj = Setting().serialize(setting)
            value = obj['value']

    if value is None:
        value = settings.get(key)
        # "software_profiles" has a different format in gecoscc.ini
        if key == "software_profiles":
            value = transform_software_profiles(value)

    return value
Esempio n. 8
0
def settings_save(context, request):
    data = request.POST.get('data')
    settings = request.db.settings.find()
    response = Response()
    if data is not None:
        data = json.loads(data)
        for key in data:
            k = key.replace("___", ".")
            setting_data = request.db.settings.find_one({"key": k })
            if setting_data is None:
                setting = create_setting(k)
            else:
                setting = Setting().deserialize(setting_data)
            
            if isinstance(data[key], str) or isinstance(data[key], unicode):
                Setting().set_value(setting, 'value', data[key])
            else:
                Setting().set_value(setting, 'value', json.dumps(data[key]))
            
            # Save in mongoDB
            obj = Setting().serialize(setting)
            if obj['_id'] == colander.null:
                del obj['_id']
            else:
                obj['_id'] = ObjectId(obj['_id'])
            #logger.debug('save= %s'%(obj))
            request.db.settings.save(obj)
            
            # If saving "software_profiles", save them also in "software_profiles" collection
            if key == "software_profiles":
                collection = request.db.software_profiles
                # Update the software profiles
                for new_profile in data[key]:
                    name = new_profile['name']
                    db_profile = collection.find_one({'name': name})
                    
                    if not db_profile:
                        collection.insert(new_profile)
                        logger.debug("Created profile: %s" % name)

                    elif new_profile['packages'] != db_profile['packages']:
                        collection.update({'name': name}, new_profile)
                        logger.debug("Updated profile: %s" % name)

                # Check if the user is trying to delete a software profile
                sp_policy = request.db.policies.find_one({"slug" : "package_profile_res"})
                if not sp_policy:
                    messages.created_msg(request, _('Software Profiles policy not found'), 'warning')
                    response.write('SUCCESS')
                    return response
                    
                db_profiles = collection.find()
                for profile in db_profiles:
                    profile_found = False
                    for new_profile in data[key]:
                        if new_profile['name'] == profile['name']:
                            profile_found = True
                            
                    if not profile_found:
                        # Check if we can delete the software profile
                        # (the software profile is not in use)
                        logger.debug("Try to delete: %s - %s"%(str(profile['_id']), profile['name']))
                        obj_related_list = "policies.%s.object_related_list"%(str(sp_policy['_id']))
                        profile_id = str(profile['_id'])
                        nnodes = request.db.nodes.find({obj_related_list : profile_id}).count()
                        logger.debug("Found %s nodes"%(nnodes))
                        
                        if nnodes == 0:
                            # It it's not used we can delete it
                            collection.remove({"_id": profile['_id']})
                        else:
                            # It's used, so we can't delete it
                            messages.created_msg(request, _('Software Profile in use: %s')%(profile['name']), 'warning')
                            response.write('SUCCESS')
                            return response
                        
                        
                        
    messages.created_msg(request, _('Settings modified successfully'), 'success')
    response.write('SUCCESS')
    return response