Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / settings.py @ ff5edb80

History | View | Annotate | Download (8.1 kB)

1 ff5edb80 Giorgos Korfiatis
# Copyright 2012-2014 GRNET S.A. All rights reserved.
2 91884d63 Giorgos Korfiatis
#
3 91884d63 Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or
4 91884d63 Giorgos Korfiatis
# without modification, are permitted provided that the following
5 91884d63 Giorgos Korfiatis
# conditions are met:
6 91884d63 Giorgos Korfiatis
#
7 91884d63 Giorgos Korfiatis
#   1. Redistributions of source code must retain the above
8 91884d63 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
9 91884d63 Giorgos Korfiatis
#      disclaimer.
10 91884d63 Giorgos Korfiatis
#
11 91884d63 Giorgos Korfiatis
#   2. Redistributions in binary form must reproduce the above
12 91884d63 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
13 91884d63 Giorgos Korfiatis
#      disclaimer in the documentation and/or other materials
14 91884d63 Giorgos Korfiatis
#      provided with the distribution.
15 91884d63 Giorgos Korfiatis
#
16 91884d63 Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 91884d63 Giorgos Korfiatis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 91884d63 Giorgos Korfiatis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 91884d63 Giorgos Korfiatis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 91884d63 Giorgos Korfiatis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 91884d63 Giorgos Korfiatis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 91884d63 Giorgos Korfiatis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 91884d63 Giorgos Korfiatis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 91884d63 Giorgos Korfiatis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 91884d63 Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 91884d63 Giorgos Korfiatis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 91884d63 Giorgos Korfiatis
# POSSIBILITY OF SUCH DAMAGE.
28 91884d63 Giorgos Korfiatis
#
29 91884d63 Giorgos Korfiatis
# The views and conclusions contained in the software and
30 91884d63 Giorgos Korfiatis
# documentation are those of the authors and should not be
31 91884d63 Giorgos Korfiatis
# interpreted as representing official policies, either expressed
32 91884d63 Giorgos Korfiatis
# or implied, of GRNET S.A.
33 91884d63 Giorgos Korfiatis
34 cf441bae Antony Chazapis
#coding=utf8
35 74c62d99 Ilias Tsitsimpis
import logging
36 74c62d99 Ilias Tsitsimpis
37 a7dff008 Antony Chazapis
from django.conf import settings
38 a30e4fff Kostas Papadimitriou
from synnefo.lib import parse_base_url, join_urls
39 f759041f Ilias Tsitsimpis
from synnefo.lib.services import fill_endpoints
40 4080a1df Georgios D. Tsoukalas
from pithos.api.services import pithos_services as vanilla_pithos_services
41 f759041f Ilias Tsitsimpis
from astakosclient import AstakosClient
42 4080a1df Georgios D. Tsoukalas
43 4080a1df Georgios D. Tsoukalas
from copy import deepcopy
44 e3ff6830 Georgios D. Tsoukalas
45 f759041f Ilias Tsitsimpis
46 74c62d99 Ilias Tsitsimpis
logger = logging.getLogger(__name__)
47 74c62d99 Ilias Tsitsimpis
48 f759041f Ilias Tsitsimpis
# --------------------------------------------------------------------
49 f759041f Ilias Tsitsimpis
# Process Pithos settings
50 f759041f Ilias Tsitsimpis
51 e3ff6830 Georgios D. Tsoukalas
# Top-level URL for Pithos. Must set.
52 e3ff6830 Georgios D. Tsoukalas
BASE_URL = getattr(settings, 'PITHOS_BASE_URL',
53 2a54b2dd Georgios D. Tsoukalas
                   "https://object-store.example.synnefo.org/pithos/")
54 f759041f Ilias Tsitsimpis
# Service Token acquired by identity provider.
55 f759041f Ilias Tsitsimpis
SERVICE_TOKEN = getattr(settings, 'PITHOS_SERVICE_TOKEN', '')
56 e3ff6830 Georgios D. Tsoukalas
57 e3ff6830 Georgios D. Tsoukalas
BASE_HOST, BASE_PATH = parse_base_url(BASE_URL)
58 e3ff6830 Georgios D. Tsoukalas
59 fe4ad54f Georgios D. Tsoukalas
pithos_services = deepcopy(vanilla_pithos_services)
60 fe4ad54f Georgios D. Tsoukalas
fill_endpoints(pithos_services, BASE_URL)
61 9c6d629f Giorgos Korfiatis
PITHOS_PREFIX = pithos_services['pithos_object-store']['prefix']
62 9c6d629f Giorgos Korfiatis
PUBLIC_PREFIX = pithos_services['pithos_public']['prefix']
63 9c6d629f Giorgos Korfiatis
UI_PREFIX = pithos_services['pithos_ui']['prefix']
64 8f2eb016 Sofia Papagiannaki
VIEW_PREFIX = join_urls(UI_PREFIX, 'view')
65 2a54b2dd Georgios D. Tsoukalas
66 2a54b2dd Georgios D. Tsoukalas
67 f759041f Ilias Tsitsimpis
# --------------------------------------------------------------------
68 f759041f Ilias Tsitsimpis
# Process Astakos settings
69 2a54b2dd Georgios D. Tsoukalas
70 f759041f Ilias Tsitsimpis
ASTAKOS_AUTH_URL = getattr(
71 f759041f Ilias Tsitsimpis
    settings, 'ASTAKOS_AUTH_URL',
72 6ce03057 Giorgos Korfiatis
    'https://accounts.example.synnefo.org/astakos/identity/v2.0')
73 f759041f Ilias Tsitsimpis
74 f759041f Ilias Tsitsimpis
ASTAKOSCLIENT_POOLSIZE = \
75 f759041f Ilias Tsitsimpis
    getattr(settings, 'PITHOS_ASTAKOSCLIENT_POOLSIZE', 200)
76 f759041f Ilias Tsitsimpis
77 f759041f Ilias Tsitsimpis
78 f759041f Ilias Tsitsimpis
# --------------------------------------
79 f759041f Ilias Tsitsimpis
# Define a LazyAstakosUrl
80 74c62d99 Ilias Tsitsimpis
# This is used to define ASTAKOS_ACCOUNT_URL and
81 74c62d99 Ilias Tsitsimpis
# ASTAKOS_UI_URL and should never be used as is.
82 f759041f Ilias Tsitsimpis
class LazyAstakosUrl(object):
83 f759041f Ilias Tsitsimpis
    def __init__(self, endpoints_name):
84 f759041f Ilias Tsitsimpis
        self.endpoints_name = endpoints_name
85 f759041f Ilias Tsitsimpis
86 f759041f Ilias Tsitsimpis
    def __str__(self):
87 f759041f Ilias Tsitsimpis
        if not hasattr(self, 'str'):
88 f759041f Ilias Tsitsimpis
            try:
89 f759041f Ilias Tsitsimpis
                astakos_client = \
90 f759041f Ilias Tsitsimpis
                    AstakosClient(SERVICE_TOKEN, ASTAKOS_AUTH_URL)
91 f759041f Ilias Tsitsimpis
                self.str = getattr(astakos_client, self.endpoints_name)
92 74c62d99 Ilias Tsitsimpis
            except Exception as excpt:
93 74c62d99 Ilias Tsitsimpis
                logger.exception(
94 74c62d99 Ilias Tsitsimpis
                    "Could not retrieve endpoints from Astakos url %s: %s",
95 74c62d99 Ilias Tsitsimpis
                    ASTAKOS_AUTH_URL, excpt)
96 74c62d99 Ilias Tsitsimpis
                return ""
97 f759041f Ilias Tsitsimpis
        return self.str
98 f759041f Ilias Tsitsimpis
99 f759041f Ilias Tsitsimpis
# --------------------------------------
100 f759041f Ilias Tsitsimpis
# Define ASTAKOS_ACCOUNT_URL and ASTAKOS_UR_URL as LazyAstakosUrl
101 74c62d99 Ilias Tsitsimpis
# These are used to define the proxy paths.
102 74c62d99 Ilias Tsitsimpis
# These have to be resolved lazily (by the proxy function) so
103 74c62d99 Ilias Tsitsimpis
# they should not be used as is.
104 f759041f Ilias Tsitsimpis
ASTAKOS_ACCOUNT_URL = LazyAstakosUrl('account_url')
105 f759041f Ilias Tsitsimpis
ASTAKOS_UI_URL = LazyAstakosUrl('ui_url')
106 f759041f Ilias Tsitsimpis
107 f759041f Ilias Tsitsimpis
# --------------------------------------
108 f759041f Ilias Tsitsimpis
# Define Astakos prefixes
109 f759041f Ilias Tsitsimpis
ASTAKOS_PROXY_PREFIX = getattr(settings, 'PITHOS_PROXY_PREFIX', '_astakos')
110 f759041f Ilias Tsitsimpis
ASTAKOS_AUTH_PREFIX = join_urls('/', ASTAKOS_PROXY_PREFIX, 'identity')
111 f759041f Ilias Tsitsimpis
ASTAKOS_ACCOUNT_PREFIX = join_urls('/', ASTAKOS_PROXY_PREFIX, 'account')
112 f759041f Ilias Tsitsimpis
ASTAKOS_UI_PREFIX = join_urls('/', ASTAKOS_PROXY_PREFIX, 'ui')
113 f759041f Ilias Tsitsimpis
114 f759041f Ilias Tsitsimpis
# --------------------------------------
115 f759041f Ilias Tsitsimpis
# Define Astakos proxy paths
116 f759041f Ilias Tsitsimpis
ASTAKOS_AUTH_PROXY_PATH = join_urls(BASE_PATH, ASTAKOS_AUTH_PREFIX)
117 f759041f Ilias Tsitsimpis
ASTAKOS_ACCOUNT_PROXY_PATH = join_urls(BASE_PATH, ASTAKOS_ACCOUNT_PREFIX)
118 f759041f Ilias Tsitsimpis
ASTAKOS_UI_PROXY_PATH = join_urls(BASE_PATH, ASTAKOS_UI_PREFIX)
119 e3ff6830 Georgios D. Tsoukalas
120 f759041f Ilias Tsitsimpis
# Astakos login URL to redirect if the user information is missing
121 f759041f Ilias Tsitsimpis
LOGIN_URL = join_urls(ASTAKOS_UI_PROXY_PATH, 'login')
122 a7dff008 Antony Chazapis
123 6dd0fc7c Christos Stavrakakis
124 f759041f Ilias Tsitsimpis
# --------------------------------------------------------------------
125 f759041f Ilias Tsitsimpis
# Backend settings
126 ce2a2ef0 Antony Chazapis
127 a7dff008 Antony Chazapis
# SQLAlchemy (choose SQLite/MySQL/PostgreSQL).
128 2715ade4 Sofia Papagiannaki
BACKEND_DB_MODULE = getattr(
129 2715ade4 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_DB_MODULE', 'pithos.backends.lib.sqlalchemy')
130 2715ade4 Sofia Papagiannaki
BACKEND_DB_CONNECTION = getattr(settings, 'PITHOS_BACKEND_DB_CONNECTION',
131 2715ade4 Sofia Papagiannaki
                                'sqlite:////tmp/pithos-backend.db')
132 a7dff008 Antony Chazapis
133 a7dff008 Antony Chazapis
# Block storage.
134 2715ade4 Sofia Papagiannaki
BACKEND_BLOCK_MODULE = getattr(
135 2715ade4 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_BLOCK_MODULE', 'pithos.backends.lib.hashfiler')
136 2715ade4 Sofia Papagiannaki
BACKEND_BLOCK_PATH = getattr(
137 2715ade4 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_BLOCK_PATH', '/tmp/pithos-data/')
138 1427ce62 Sofia Papagiannaki
BACKEND_BLOCK_UMASK = getattr(settings, 'PITHOS_BACKEND_BLOCK_UMASK', 0o022)
139 a7dff008 Antony Chazapis
140 a7dff008 Antony Chazapis
# Queue for billing.
141 29148653 Sofia Papagiannaki
BACKEND_QUEUE_MODULE = getattr(settings, 'PITHOS_BACKEND_QUEUE_MODULE', None)
142 29148653 Sofia Papagiannaki
# Example: 'pithos.backends.lib.rabbitmq'
143 29148653 Sofia Papagiannaki
144 29148653 Sofia Papagiannaki
BACKEND_QUEUE_HOSTS = getattr(settings, 'PITHOS_BACKEND_QUEUE_HOSTS', None)
145 29148653 Sofia Papagiannaki
# Example: "['amqp://guest:guest@localhost:5672']"
146 29148653 Sofia Papagiannaki
147 29148653 Sofia Papagiannaki
BACKEND_QUEUE_EXCHANGE = getattr(settings, 'PITHOS_BACKEND_QUEUE_EXCHANGE',
148 29148653 Sofia Papagiannaki
                                 'pithos')
149 a7dff008 Antony Chazapis
150 a7dff008 Antony Chazapis
# Default setting for new accounts.
151 19ddd41b Sofia Papagiannaki
BACKEND_ACCOUNT_QUOTA = getattr(
152 19ddd41b Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_ACCOUNT_QUOTA', 50 * 1024 * 1024 * 1024)
153 19ddd41b Sofia Papagiannaki
BACKEND_CONTAINER_QUOTA = getattr(
154 c72c19e4 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_CONTAINER_QUOTA', 0)
155 a7dff008 Antony Chazapis
BACKEND_VERSIONING = getattr(settings, 'PITHOS_BACKEND_VERSIONING', 'auto')
156 29148653 Sofia Papagiannaki
BACKEND_FREE_VERSIONING = getattr(settings, 'PITHOS_BACKEND_FREE_VERSIONING',
157 29148653 Sofia Papagiannaki
                                  True)
158 a7dff008 Antony Chazapis
159 74cbb94a Sofia Papagiannaki
# Enable backend pooling
160 74cbb94a Sofia Papagiannaki
BACKEND_POOL_ENABLED = getattr(settings, 'PITHOS_BACKEND_POOL_ENABLED', True)
161 74cbb94a Sofia Papagiannaki
162 61c5b615 Sofia Papagiannaki
# Default backend pool size
163 61c5b615 Sofia Papagiannaki
BACKEND_POOL_SIZE = getattr(settings, 'PITHOS_BACKEND_POOL_SIZE', 5)
164 61c5b615 Sofia Papagiannaki
165 591e1df0 Sofia Papagiannaki
# Update object checksums.
166 591e1df0 Sofia Papagiannaki
UPDATE_MD5 = getattr(settings, 'PITHOS_UPDATE_MD5', False)
167 8efd183f Antony Chazapis
168 47462eda Filippos Giannakos
RADOS_STORAGE = getattr(settings, 'PITHOS_RADOS_STORAGE', False)
169 29148653 Sofia Papagiannaki
RADOS_POOL_BLOCKS = getattr(settings, 'PITHOS_RADOS_POOL_BLOCKS', 'blocks')
170 47462eda Filippos Giannakos
RADOS_POOL_MAPS = getattr(settings, 'PITHOS_RADOS_POOL_MAPS', 'maps')
171 61ae9b74 Sofia Papagiannaki
172 61ae9b74 Sofia Papagiannaki
# This enables a ui compatibility layer for the introduction of UUIDs in
173 61ae9b74 Sofia Papagiannaki
# identity management.  WARNING: Setting to True will break your installation.
174 61ae9b74 Sofia Papagiannaki
TRANSLATE_UUIDS = getattr(settings, 'PITHOS_TRANSLATE_UUIDS', False)
175 61ae9b74 Sofia Papagiannaki
176 29148653 Sofia Papagiannaki
# Set how many random bytes to use for constructing the URL
177 29148653 Sofia Papagiannaki
# of Pithos public files
178 29148653 Sofia Papagiannaki
PUBLIC_URL_SECURITY = getattr(settings, 'PITHOS_PUBLIC_URL_SECURITY', 16)
179 4a105ce2 Sofia Papagiannaki
# Set the alphabet to use for constructing the URL of Pithos public files
180 29148653 Sofia Papagiannaki
PUBLIC_URL_ALPHABET = getattr(
181 56f3c759 Sofia Papagiannaki
    settings,
182 56f3c759 Sofia Papagiannaki
    'PITHOS_PUBLIC_URL_ALPHABET',
183 29148653 Sofia Papagiannaki
    '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
184 3bdb9222 Sofia Papagiannaki
185 3bdb9222 Sofia Papagiannaki
# The maximum number or items returned by the listing api methods
186 3bdb9222 Sofia Papagiannaki
API_LIST_LIMIT = getattr(settings, 'PITHOS_API_LIST_LIMIT', 10000)
187 369a7b41 Sofia Papagiannaki
188 369a7b41 Sofia Papagiannaki
# The backend block size
189 369a7b41 Sofia Papagiannaki
BACKEND_BLOCK_SIZE = getattr(
190 369a7b41 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_BLOCK_SIZE', 4 * 1024 * 1024)
191 369a7b41 Sofia Papagiannaki
192 369a7b41 Sofia Papagiannaki
# The backend block hash algorithm
193 369a7b41 Sofia Papagiannaki
BACKEND_HASH_ALGORITHM = getattr(
194 369a7b41 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_HASH_ALGORITHM', 'sha256')
195 14569c60 Sofia Papagiannaki
196 6f65ba13 Sofia Papagiannaki
# Set the credentials (client identifier, client secret) issued for
197 6f65ba13 Sofia Papagiannaki
# authenticating the views with astakos during the resource access token
198 6f65ba13 Sofia Papagiannaki
# generation procedure
199 fe7d0186 Sofia Papagiannaki
OAUTH2_CLIENT_CREDENTIALS = getattr(settings,
200 fe7d0186 Sofia Papagiannaki
                                    'PITHOS_OAUTH2_CLIENT_CREDENTIALS',
201 fe7d0186 Sofia Papagiannaki
                                    (None, None))
202 46662ee6 Kostas Papadimitriou
203 46662ee6 Kostas Papadimitriou
# Set domain to restrict requests of pithos object contents serve endpoint or
204 46662ee6 Kostas Papadimitriou
# None for no domain restriction
205 4bf0ab85 Sofia Papagiannaki
UNSAFE_DOMAIN = getattr(settings, 'PITHOS_UNSAFE_DOMAIN', None)