Example #1
0
def db_update_node(store, request, language):
    """
    Update and serialize the node infos

    :param store: the store on which perform queries.
    :param language: the language in which to localize data
    :return: a dictionary representing the serialization of the node
    """
    enable_disable_languages(store, request)

    if language in request['languages_enabled']:
        node_l10n = NodeL10NFactory(store)
        node_l10n.update(request, language)

    node = NodeFactory(store)
    node.update(request)

    if request[
            'basic_auth'] and request['basic_auth_username'] != '' and request[
                'basic_auth_password'] != '':
        node.set_val('basic_auth', True)
        node.set_val('basic_auth_username', request['basic_auth_username'])
        node.set_val('basic_auth_password', request['basic_auth_password'])
    else:
        node.set_val('basic_auth', False)

    db_refresh_memory_variables(store)

    # TODO pass instance of db_update_node into admin_serialize
    return db_admin_serialize_node(store, language)
Example #2
0
    def epilogue(self):
        nf = NodeFactory(self.store_new)
        url = nf.get_val(u'public_site')
        o = urlparse(url)
        domain = o.hostname if not o.hostname is None else ''

        models.db_delete(self.store_new,
                         Config,
                         var_group=u'node',
                         var_name=u'public_site')
        add_raw_config(self.store_new, u'node', u'hostname', domain != '',
                       unicode(domain))

        url = nf.get_val(u'hidden_service')
        o = urlparse(url)
        domain = o.hostname if not o.hostname is None else ''

        models.db_delete(self.store_new,
                         Config,
                         var_group=u'node',
                         var_name=u'hidden_service')
        add_raw_config(self.store_new, u'node', u'onionservice', domain != '',
                       unicode(domain))

        add_raw_config(self.store_new, u'node', u'reachable_via_web', False,
                       False)
        self.entries_count['Config'] += 1

        self.store_new.commit()
Example #3
0
def get_onion_service_info(store):
    node_fact = NodeFactory(store)
    hostname = node_fact.get_val(u'onionservice')

    priv_fact = PrivateFactory(store)
    key = priv_fact.get_val(u'tor_onion_key')

    return hostname, key
Example #4
0
def set_onion_service_info(store, hostname, key):
    node_fact = NodeFactory(store)
    node_fact.set_val(u'onionservice', hostname)

    priv_fact = PrivateFactory(store)
    priv_fact.set_val(u'tor_onion_key', key)

    GLApiCache.invalidate()
Example #5
0
def wizard(store, request, language):
    node = NodeFactory(store)

    if node.get_val('wizard_done'):
        # TODO report as anomaly
        log.err("DANGER: Wizard already initialized!")
        raise errors.ForbiddenOperation

    try:
        node._query_group()

        nn = unicode(request['node']['name'])
        node.set_val('name', nn)
        node.set_val('default_language', language)
        node.set_val('wizard_done', True)

        node_l10n = NodeL10NFactory(store)

        node_l10n.set_val('description', language, nn)
        node_l10n.set_val('header_title_homepage', language, nn)
        node_l10n.set_val('presentation', language, nn)

        context = db_create_context(store, request['context'], language)

        langs_to_drop = EnabledLanguage.list(store)
        langs_to_drop.remove(language)
        if len(langs_to_drop):
            EnabledLanguage.remove_old_langs(store, langs_to_drop)

        request['receiver']['contexts'] = [context.id]
        request['receiver']['language'] = language
        db_create_receiver(store, request['receiver'], language)

        admin_dict = {
            'username': u'admin',
            'password': request['admin']['password'],
            'role': u'admin',
            'state': u'enabled',
            'deletable': False,
            'name': u'Admin',
            'public_name': u'Admin',
            'description': u'',
            'mail_address': request['admin']['mail_address'],
            'language': language,
            'password_change_needed': False,
            'pgp_key_remove': False,
            'pgp_key_fingerprint': '',
            'pgp_key_public': '',
            'pgp_key_expiration': datetime_null()
        }

        db_create_admin_user(store, admin_dict, language)

    except Exception as excep:
        log.err("Failed wizard initialization %s" % excep)
        raise excep
Example #6
0
def db_update_node(store, request, language):
    """
    Update and serialize the node infos

    :param store: the store on which perform queries.
    :param language: the language in which to localize data
    :return: a dictionary representing the serialization of the node
    """
    enable_disable_languages(store, request)

    if language in request["languages_enabled"]:
        node_l10n = NodeL10NFactory(store)
        node_l10n.update(request, language)

    node = NodeFactory(store)
    node.update(request)

    if request["basic_auth"] and request["basic_auth_username"] != "" and request["basic_auth_password"] != "":
        node.set_val("basic_auth", True)
        node.set_val("basic_auth_username", request["basic_auth_username"])
        node.set_val("basic_auth_password", request["basic_auth_password"])
    else:
        node.set_val("basic_auth", False)

    db_refresh_memory_variables(store)

    # TODO pass instance of db_update_node into admin_serialize
    return db_admin_serialize_node(store, language)
Example #7
0
def db_serialize_node(store, language):
    """
    Serialize node info.
    """
    # Contexts and Receivers relationship
    configured = store.find(models.ReceiverContext).count() > 0

    ro_node = NodeFactory(store).public_export()

    misc_dict = {
        'languages_enabled': l10n.EnabledLanguage.list(store),
        'languages_supported': LANGUAGES_SUPPORTED,
        'configured': configured,
        'accept_submissions': GLSettings.accept_submissions,
        'logo': db_get_file(store, u'logo'),
        'favicon': db_get_file(store, u'favicon'),
        'css': db_get_file(store, u'css'),
        'homepage': db_get_file(store, u'homepage'),
        'script': db_get_file(store, u'script')
    }

    l10n_dict = NodeL10NFactory(store).localized_dict(language)

    ret = disjoint_union(ro_node, l10n_dict, misc_dict)

    return ret
Example #8
0
    def migrate_User(self):
        default_language = NodeFactory(
            self.store_old).get_val(u'default_language')
        enabled_languages = EnabledLanguage.list(self.store_old)

        old_objs = self.store_old.find(self.model_from['User'])
        for old_obj in old_objs:
            new_obj = self.model_to['User']()
            for _, v in new_obj._storm_columns.items():
                if v.name in ['pgp_key_public', 'pgp_key_fingerprint']:
                    if getattr(old_obj, v.name) is None:
                        setattr(new_obj, v.name, '')
                        continue

                elif v.name in ['pgp_key_expiration']:
                    if getattr(old_obj, v.name) is None:
                        setattr(new_obj, v.name, datetime_null())
                        continue

                elif v.name == 'language' and getattr(
                        old_obj, v.name) not in enabled_languages:
                    # fix users that have configured a language that has never been there
                    setattr(new_obj, v.name, default_language)
                    continue

                setattr(new_obj, v.name, getattr(old_obj, v.name))

            self.store_new.add(new_obj)
Example #9
0
def init_db(store, use_single_lang=False):
    db_create_tables(store)
    appdata_dict = db_update_appdata(store)

    log.debug("Performing database initialization...")

    config.system_cfg_init(store)

    if GLSettings.skip_wizard:
        NodeFactory(store).set_val('wizard_done', True)

    log.debug("Inserting internationalized strings...")

    if not use_single_lang:
        EnabledLanguage.add_all_supported_langs(store, appdata_dict)
    else:
        EnabledLanguage.add_new_lang(store, u'en', appdata_dict)

    with open(os.path.join(GLSettings.client_path, 'logo.png'),
              'r') as logo_file:
        data = logo_file.read()
        files.db_add_file(store, data, u'logo')

    with open(os.path.join(GLSettings.client_path, 'favicon.ico'),
              'r') as favicon_file:
        data = favicon_file.read()
        files.db_add_file(store, data, u'favicon')
Example #10
0
def db_refresh_memory_variables(store):
    """
    This routine loads in memory few variables of node and notification tables
    that are subject to high usage.
    """
    node_ro = ObjectDict(NodeFactory(store).admin_export())

    GLSettings.memory_copy = node_ro

    GLSettings.memory_copy.accept_tor2web_access = {
        'admin': node_ro.tor2web_admin,
        'custodian': node_ro.tor2web_custodian,
        'whistleblower': node_ro.tor2web_whistleblower,
        'receiver': node_ro.tor2web_receiver,
        'unauth': node_ro.tor2web_unauth
    }

    enabled_langs = models.l10n.EnabledLanguage.list(store)
    GLSettings.memory_copy.languages_enabled = enabled_langs

    notif_ro = ObjectDict(NotificationFactory(store).admin_export())

    GLSettings.memory_copy.notif = notif_ro

    if GLSettings.developer_name:
        GLSettings.memory_copy.notif.source_name = GLSettings.developer_name

    if GLSettings.disable_mail_notification:
        GLSettings.memory_copy.notif.disable_admin_notification_emails = True
        GLSettings.memory_copy.notif.disable_custodian_notification_emails = True
        GLSettings.memory_copy.notif.disable_receiver_notification_emails = True

    GLSettings.memory_copy.private = ObjectDict(
        PrivateFactory(store).mem_copy_export())
Example #11
0
def load_profile(store, name):
    path = os.path.join(Settings.client_path, 'data/profiles',
                        '{}.json'.format(name))
    prof = read_json_file(path)

    if not set(prof['node'].keys()) <= NodeFactory.admin_node:
        raise ValueError('profile configuration key not in admin_node')

    NodeFactory(store).update(prof['node'])
Example #12
0
def commit_valid_config(store):
    cfg = get_valid_setup()

    priv_fact = PrivateFactory(store)
    priv_fact.set_val(u'https_dh_params', cfg['dh_params'])
    priv_fact.set_val(u'https_priv_key', cfg['key'])
    priv_fact.set_val(u'https_cert', cfg['cert'])
    priv_fact.set_val(u'https_chain', cfg['chain'])
    priv_fact.set_val(u'https_enabled', True)

    NodeFactory(store).set_val(u'hostname', 'localhost:9999')
Example #13
0
def serialize_ahmia(store, language):
    """
    Serialize Ahmia.fi descriptor.
    """
    ret_dict = NodeFactory(store).public_export()

    return {
        'title': ret_dict['name'],
        'description': NodeL10NFactory(store).get_val(language, 'description'),
        'keywords': '%s (GlobaLeaks instance)' % ret_dict['name'],
        'relation': ret_dict['public_site'],
        'language': ret_dict['default_language'],
        'contactInformation': u'',
        'type': 'GlobaLeaks'
    }
Example #14
0
def db_admin_serialize_node(store, language):
    node_dict = NodeFactory(store).admin_export()

    # Contexts and Receivers relationship
    configured  = store.find(models.ReceiverContext).count() > 0
    custom_homepage = os.path.isfile(os.path.join(GLSettings.static_path, "custom_homepage.html"))

    misc_dict = {
        'version': PrivateFactory(store).get_val('version'),
        'languages_supported': LANGUAGES_SUPPORTED,
        'languages_enabled': EnabledLanguage.list(store),
        'configured': configured,
        'custom_homepage': custom_homepage,
    }

    l10n_dict = NodeL10NFactory(store).localized_dict(language)

    return utils.sets.disjoint_union(node_dict, misc_dict, l10n_dict)
Example #15
0
def db_admin_serialize_node(store, language):
    node_dict = NodeFactory(store).admin_export()
    priv_dict = PrivateFactory(store)

    # Contexts and Receivers relationship
    configured = store.find(models.ReceiverContext).count() > 0

    misc_dict = {
        'version': priv_dict.get_val(u'version'),
        'latest_version': priv_dict.get_val(u'latest_version'),
        'languages_supported': LANGUAGES_SUPPORTED,
        'languages_enabled': EnabledLanguage.list(store),
        'configured': configured
    }

    l10n_dict = NodeL10NFactory(store).localized_dict(language)

    return utils.sets.merge_dicts(node_dict, misc_dict, l10n_dict)
Example #16
0
def db_refresh_memory_variables(store):
    """
    This routine loads in memory few variables of node and notification tables
    that are subject to high usage.
    """
    node_ro = ObjectDict(NodeFactory(store).admin_export())

    GLSettings.memory_copy = node_ro

    GLSettings.memory_copy.accept_tor2web_access = {
        'admin': node_ro.tor2web_admin,
        'custodian': node_ro.tor2web_custodian,
        'whistleblower': node_ro.tor2web_whistleblower,
        'receiver': node_ro.tor2web_receiver
    }

    enabled_langs = models.l10n.EnabledLanguage.list(store)
    GLSettings.memory_copy.languages_enabled = enabled_langs

    notif_fact = NotificationFactory(store)
    notif_ro = ObjectDict(notif_fact.admin_export())

    GLSettings.memory_copy.notif = notif_ro

    if GLSettings.developer_name:
        GLSettings.memory_copy.notif.source_name = GLSettings.developer_name

    db_refresh_exception_delivery_list(store)

    GLSettings.memory_copy.private = ObjectDict(
        PrivateFactory(store).mem_copy_export())

    if GLSettings.memory_copy.private.admin_api_token_digest != '':
        api_id = store.find(User.id, User.role == u'admin').order_by(
            User.creation_date).first()
        if api_id is not None:
            GLSettings.appstate.api_token_session = GLSession(
                api_id, 'admin', 'enabled')
Example #17
0
def wizard(store, request, language):
    node = NodeFactory(store)

    if node.get_val('wizard_done'):
        # TODO report as anomaly
        log.err("DANGER: Wizard already initialized!")
        raise errors.ForbiddenOperation

    try:
        node._query_group()

        node.set_val('name', request['node']['name'])
        node.set_val('default_language', language)
        node.set_val('wizard_done', True)

        if GLSettings.memory_copy.onionservice is not None:
            node.set_val('onionservice', GLSettings.memory_copy.onionservice)

        node_l10n = NodeL10NFactory(store)

        node_l10n.set_val('description', language, request['node']['description'])
        node_l10n.set_val('header_title_homepage', language, request['node']['name'])

        context = db_create_context(store, request['context'], language)

        langs_to_drop = EnabledLanguage.list(store)
        langs_to_drop.remove(language)
        if len(langs_to_drop):
            EnabledLanguage.remove_old_langs(store, langs_to_drop)

        request['receiver']['contexts'] = [context.id]
        request['receiver']['language'] = language
        db_create_receiver(store, request['receiver'], language)

        admin_dict = {
            'username': u'admin',
            'password': request['admin']['password'],
            'role': u'admin',
            'state': u'enabled',
            'deletable': False,
            'name': u'Admin',
            'public_name': u'Admin',
            'description': u'',
            'mail_address': request['admin']['mail_address'],
            'language': language,
            'password_change_needed': False,
            'pgp_key_remove': False,
            'pgp_key_fingerprint': '',
            'pgp_key_public': '',
            'pgp_key_expiration': datetime_null()
        }

        db_create_admin_user(store, admin_dict, language)

    except Exception as excep:
        log.err("Failed wizard initialization %s" % excep)
        raise excep
Example #18
0
def set_onion_service_info(store, hostname, key):
    node_fact = NodeFactory(store)
    node_fact.set_val('onionservice', hostname)

    priv_fact = PrivateFactory(store)
    priv_fact.set_val('tor_onion_key', key)
Example #19
0
def set_init_params(store, dh_params, hostname='localhost:9999'):
    PrivateFactory(store).set_val(u'https_dh_params', dh_params)
    NodeFactory(store).set_val(u'hostname', hostname)
    State.tenant_cache[1].hostname = 'localhost:9999'
Example #20
0
 def epilogue(self):
     nf = NodeFactory(self.store_new)
     self.trim_value_to_range(nf, u'wbtip_timetolive')
     self.store_new.commit()
Example #21
0
def set_init_params(store, dh_params, hostname='localhost:9999'):
    PrivateFactory(store).set_val(u'https_dh_params', dh_params)
    NodeFactory(store).set_val(u'hostname', hostname)
    GLSettings.memory_copy.hostname = 'localhost:9999'
Example #22
0
 def epilogue(self):
     nf = NodeFactory(self.store_new)
     self.trim_value_to_range(nf, 'wbtip_timetolive')
     self.trim_value_to_range(nf, 'submission_maximum_ttl')
     self.store_new.commit()