Files
cellxgene/server/common/default_config.py
bmccandless 5285556415 Add basic authentication in the server (#1670)
* Add basic authentication in the server

A pattern for creating authentication methods is introduced, with three
authentication types defined:
  none - no authentication
  session - like the current session based auth used for user annotations
  test - used to test the login/logout process end to end

The config endpoint now returns informations about the authentication, like if
the user is authenticated and their username.  The redirect uri's for login and
logout are also returned if the authentication type requires login

This is the first a several PRs for authentication.

*. Update server tests to avoid hardcoded ports

test_api and test_nan_rest now use a common function for starting a test server,
than will initially choose a random port.
2020-07-28 13:28:30 -07:00

175 lines
5.5 KiB
Python

import yaml
default_config = """
server:
app:
verbose: false
debug: false
host: "127.0.0.1"
port : null
open_browser: false
force_https: false
flask_secret_key: null
generate_cache_control_headers: false
server_timing_headers: false
csp_directives: null
authentication:
# The authentication types may be "none" or "session"
# none: No authentication support, features like user_annotations must not be enabled.
# session: A session based userid is automatically generated.
type: session
# a dictionary of parameters that may be required for an authentication type
params: null
multi_dataset:
# If dataroot is set, then cellxgene may serve multiple datasets. This parameter is not
# compatible with single_dataset/datapath.
# dataroot may be a string, representing the path to a directory or S3 prefix. In this
# case the datasets in that location are accessed from <server>/d/<datasetname>.
# example:
# dataroot: /path/to/datasets/
# or
# dataroot: s3://bucket/prefix/
#
# As an alternative, dataroot can be a dictionary, where a dataset key is associated with a base_url
# and a dataroot.
# example:
# dataroot:
# d1:
# base_url: set1
# dataroot: /path/to/set1_datasets/
# d2:
# base_url: set2/subdir
# dataroot: /path/to/set2_datasets/
#
# In this case, datasets can be accessed from <server>/set1/<datasetname> or
# <server>/set2/subdir/<datasetname>. It is possible to have different dataset configurations
# for datasets accessed through different dataroots. For example, in one dataroot, the
# user annotations could be enabled, and in another dataroot they could be disabled.
# To specify dataroot configurations, add a new top level dictionary to the config named
# per_dataset_config. Within per_dataset_config create a dictionary for each dataroot to specialize
# ("d1" or "d2" from the example). Each of these dictionaries has the exact same form as the "dataset"
# dictionary (see below).
# When this approach is used, the values for each configuration option are checked in
# this order: per_dataset_config/<key>, dataset, then the default values.
#
# example:
#
# per_dataset_config:
# d1:
# user_annotations:
# enable: false
# d2:
# user_annotations:
# enable: true
dataroot: null
# The index page when in multi-dataset mode:
# false or null: this returns a 404 code
# true: loads a test index page, which links to the datasets that are available in the dataroot
# string/URL: redirect to this URL: flask.redirect(config.multi_dataset__index)
index: false
# A list of allowed matrix types. If an empty list, then all matrix types are allowed
allowed_matrix_types: []
matrix_cache:
# The maximum number of datasets that may be opened at one time. The least recently used dataset
# is evicted from the cache first.
max_datasets: 5
# A matrix is automatically removed from the cache after timelimit_s number of seconds.
# If timelimit_s is set to None, then there is no time limit.
timelimit_s: 30
single_dataset:
# If datapath is set, then cellxgene with serve a single dataset located at datapath. This parameter is not
# compatible with multi_dataset/dataroot.
datapath: null
obs_names: null
var_names: null
about: null
title: null
diffexp:
alg_cxg:
# The number of threads to use is computed from: min(max_workers, cpu_multipler * cpu_count).
# Where cpu_count is determined at runtime.
max_workers: 64
cpu_multiplier: 4
# The target number of matrix elements that are evaluated
# together in one thread.
target_workunit: 16_000_000
data_locator:
s3:
# s3 region name.
# if true, then the s3 location is automatically determined from the datapath or dataroot.
# if false/null, then do not set.
# if a string, then use that value (e.g. us-east-1).
region_name: true
adaptor:
cxg_adaptor:
# The key/values under tiledb_ctx will be used to initialize the tiledb Context.
# If 'vfs.s3.region' is not set, then it will automatically use the setting from
# data_locator / s3 / region_name.
tiledb_ctx:
sm.tile_cache_size: 8589934592
sm.num_reader_threads: 32
anndata_adaptor:
backed: false
limits:
column_request_max: 32
diffexp_cellcount_max: null
dataset:
app:
# Scripts can be a list of either file names (string) or dicts containing keys src, integrity and crossorigin.
# these will be injected into the index template as script tags with these attributes set.
scripts: []
# Inline scripts are a list of file names, where the contents of the file will be injected into the index.
inline_scripts: []
about_legal_tos: null
about_legal_privacy: null
# allow authentication support
authentication_enable: true
presentation:
max_categories: 1000
custom_colors: true
user_annotations:
enable: true
type: local_file_csv
local_file_csv:
directory: null
file: null
ontology:
enable: false
obo_location: null
embeddings:
names : []
enable_reembedding: false
diffexp:
enable: true
lfc_cutoff: 0.01
top_n: 10
"""
def get_default_config():
return yaml.load(default_config, Loader=yaml.Loader)