Exemple #1
0
def get_globals():
    """Context variables that are available for every template rendered by
    OSFWebRenderer.
    """
    user = _get_current_user()
    user_institutions = [{'id': inst._id, 'name': inst.name, 'logo_path': inst.logo_path} for inst in user.affiliated_institutions] if user else []
    all_institutions = [{'id': inst._id, 'name': inst.name, 'logo_path': inst.logo_path} for inst in Institution.find().sort('name')]
    if request.host_url != settings.DOMAIN:
        try:
            inst_id = (Institution.find_one(Q('domains', 'eq', request.host.lower())))._id
            request_login_url = '{}institutions/{}'.format(settings.DOMAIN, inst_id)
        except NoResultsFound:
            request_login_url = request.url.replace(request.host_url, settings.DOMAIN)
    else:
        request_login_url = request.url
    return {
        'private_link_anonymous': is_private_link_anonymous_view(),
        'user_name': user.username if user else '',
        'user_full_name': user.fullname if user else '',
        'user_id': user._primary_key if user else '',
        'user_locale': user.locale if user and user.locale else '',
        'user_timezone': user.timezone if user and user.timezone else '',
        'user_url': user.url if user else '',
        'user_gravatar': profile_views.current_user_gravatar(size=25)['gravatar_url'] if user else '',
        'user_email_verifications': user.unconfirmed_email_info if user else [],
        'user_api_url': user.api_url if user else '',
        'user_entry_point': metrics.get_entry_point(user) if user else '',
        'user_institutions': user_institutions if user else None,
        'all_institutions': all_institutions,
        'display_name': get_display_name(user.fullname) if user else '',
        'use_cdn': settings.USE_CDN_FOR_CLIENT_LIBS,
        'piwik_host': settings.PIWIK_HOST,
        'piwik_site_id': settings.PIWIK_SITE_ID,
        'sentry_dsn_js': settings.SENTRY_DSN_JS if sentry.enabled else None,
        'dev_mode': settings.DEV_MODE,
        'allow_login': settings.ALLOW_LOGIN,
        'cookie_name': settings.COOKIE_NAME,
        'status': status.pop_status_messages(),
        'domain': settings.DOMAIN,
        'api_domain': settings.API_DOMAIN,
        'disk_saving_mode': settings.DISK_SAVING_MODE,
        'language': language,
        'noteworthy_links_node': settings.NEW_AND_NOTEWORTHY_LINKS_NODE,
        'popular_links_node': settings.POPULAR_LINKS_NODE,
        'web_url_for': util.web_url_for,
        'api_url_for': util.api_url_for,
        'api_v2_url': util.api_v2_url,  # URL function for templates
        'api_v2_base': util.api_v2_url(''),  # Base url used by JS api helper
        'sanitize': sanitize,
        'sjson': lambda s: sanitize.safe_json(s),
        'webpack_asset': paths.webpack_asset,
        'waterbutler_url': settings.WATERBUTLER_URL,
        'login_url': cas.get_login_url(request_login_url),
        'reauth_url': util.web_url_for('auth_logout', redirect_url=request.url, reauth=True),
        'profile_url': cas.get_profile_url(),
        'enable_institutions': settings.ENABLE_INSTITUTIONS,
        'keen_project_id': settings.KEEN_PROJECT_ID,
        'keen_write_key': settings.KEEN_WRITE_KEY,
        'maintenance': maintenance.get_maintenance(),
    }
Exemple #2
0
def get_or_create_user(user_id, sqlite_db):
    """Gets an OSF user from the sqlite cache.  If not found, pulls the user info from mongo and
    saves it.

    :param user_id: OSF user id (e.g. 'mst3k')
    :param sqlite_db: SQLite3 database handle
    :return: user dict
    """

    if user_id is None:
        return None

    cursor = sqlite_db.cursor()
    query = "SELECT * FROM users WHERE id='{}'".format(user_id)
    cursor.execute(query)

    users = cursor.fetchall()

    if len(users) > 1:
        raise Exception('Multiple users found for single node ID')

    if users:
        user_obj = {}
        for key in users[0].keys():
            user_obj[key] = users[0][key]
        user_obj['institutions'] = json.loads(user_obj['institutions'])
        return user_obj

    user = User.load(user_id)
    if user is None:
        return None

    institutions = [
        {'id': inst._id, 'name': inst.name, 'logo_path': inst.logo_path}
        for inst in user.affiliated_institutions
    ] if user else []

    query = "INSERT INTO users (id, entry_point, locale, timezone, institutions) VALUES ('{id}', '{entry_point}', '{locale}', '{timezone}', '{institutions}');".format(
        id=user_id,
        entry_point=None if user is None else get_entry_point(user),
        locale=getattr(user, 'locale', ''),
        timezone=getattr(user, 'timezone', ''),
        institutions=json.dumps(institutions),
    )
    cursor.execute(query)
    sqlite_db.commit()
    return get_or_create_user(user_id, sqlite_db)