cubicweb/web/webconfig.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Thu, 21 Mar 2019 11:50:31 +0100
changeset 12528 f9b46b63393e
parent 12503 b01dd0ef43aa
child 12529 7276f1c89ddd
permissions -rw-r--r--
Flake8 cubicweb/web/webconfig.py
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8601
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
     1
# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5326
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
5933
3d707b8f8a4d [web configuration] ensure data home directory / uicache file belong to daemon user and are writeable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5907
diff changeset
    18
"""web ui configuration for cubicweb instances"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11461
diff changeset
    20
10666
7f6b5f023884 [py3k] replace '_ = unicode' in global scope (closes #7589459)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10614
diff changeset
    21
from cubicweb import _
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
import os
8605
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
    24
import hmac
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
    25
from uuid import uuid4
12268
d84bc85f7f70 [config] Avoid relying on shared_dir method when possible
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12019
diff changeset
    26
from os.path import dirname, join, exists, split, isdir
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
    27
from warnings import warn
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    28
10692
14e7ddb0f670 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
    29
from six import text_type
14e7ddb0f670 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
    30
8605
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
    31
from logilab.common.decorators import cached, cachedproperty
8989
8742f4bf029f import merge_options directly from logilab.common
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8941
diff changeset
    32
from logilab.common.configuration import merge_options
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
7770
a17145243e04 [session] enforce coherency of login/passwd couple values when no anonymous user (closes: #1910849)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7380
diff changeset
    34
from cubicweb import ConfigurationError
8989
8742f4bf029f import merge_options directly from logilab.common
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8941
diff changeset
    35
from cubicweb.cwconfig import CubicWebConfiguration, register_persistent_options
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
12268
d84bc85f7f70 [config] Avoid relying on shared_dir method when possible
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12019
diff changeset
    38
_DATA_DIR = join(dirname(__file__), 'data')
d84bc85f7f70 [config] Avoid relying on shared_dir method when possible
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12019
diff changeset
    39
d84bc85f7f70 [config] Avoid relying on shared_dir method when possible
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12019
diff changeset
    40
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
    41
register_persistent_options((
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
    # site-wide only web ui configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
    ('site-title',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
    44
     {'type': 'string', 'default': 'unset title',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    45
      'help': _('site title'),
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
    46
      'sitewide': True, 'group': 'ui',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    47
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    48
    ('main-template',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
    49
     {'type': 'string', 'default': 'main-template',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    50
      'help': _('id of main template used to render pages'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
      'sitewide': True, 'group': 'ui',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
    # user web ui configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    54
    ('fckeditor',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
    55
     {'type': 'yn', 'default': False,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    56
      'help': _('should html fields being edited using fckeditor (a HTML '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    57
                'WYSIWYG editor).  You should also select text/html as default '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    58
                'text format to actually get fckeditor.'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    59
      'group': 'ui',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    60
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    61
    # navigation configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
    ('page-size',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
    63
     {'type': 'int', 'default': 40,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
      'help': _('maximum number of objects displayed by page of results'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
      'group': 'navigation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
    ('related-limit',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
    68
     {'type': 'int', 'default': 8,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
      'help': _('maximum number of related entities to display in the primary '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
                'view'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
      'group': 'navigation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    72
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
    ('combobox-limit',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
    74
     {'type': 'int', 'default': 20,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    75
      'help': _('maximum number of entities to display in related combo box'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
      'group': 'navigation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    77
      }),
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
    78
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
    79
))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    81
12019
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
    82
class BaseWebConfiguration(CubicWebConfiguration):
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
    83
    """Base class for web configurations"""
11900
8496135b6dc1 [cwvreg] load registry using modules names instead of directories
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11794
diff changeset
    84
    cubicweb_appobject_path = CubicWebConfiguration.cubicweb_appobject_path | set(['web.views'])
2657
de974465d381 [appobject] kill VObject class, move base selector classes to appobject
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2552
diff changeset
    85
    cube_appobject_path = CubicWebConfiguration.cube_appobject_path | set(['views'])
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
    86
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    87
    options = merge_options(CubicWebConfiguration.options + (
8669
62213a34726e [db-api/configuration] simplify db-api and configuration so that all the connection information is in the repository url, closes #2521848
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8605
diff changeset
    88
        ('repository-uri',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
    89
         {'type': 'string',
8669
62213a34726e [db-api/configuration] simplify db-api and configuration so that all the connection information is in the repository url, closes #2521848
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8605
diff changeset
    90
          'default': 'inmemory://',
62213a34726e [db-api/configuration] simplify db-api and configuration so that all the connection information is in the repository url, closes #2521848
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8605
diff changeset
    91
          'help': 'see `cubicweb.dbapi.connect` documentation for possible value',
62213a34726e [db-api/configuration] simplify db-api and configuration so that all the connection information is in the repository url, closes #2521848
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8605
diff changeset
    92
          'group': 'web', 'level': 2,
62213a34726e [db-api/configuration] simplify db-api and configuration so that all the connection information is in the repository url, closes #2521848
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8605
diff changeset
    93
          }),
12010
c34590161082 web: add options to ignore css compilation and uicache
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11929
diff changeset
    94
        ('use-uicache',
c34590161082 web: add options to ignore css compilation and uicache
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11929
diff changeset
    95
         {'type': 'yn', 'default': True,
c34590161082 web: add options to ignore css compilation and uicache
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11929
diff changeset
    96
          'help': _('should css be compiled and store in uicache'),
12017
281a6219bdc9 [web] Put 'use-uicache' option in level 2
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12010
diff changeset
    97
          'group': 'ui', 'level': 2,
12010
c34590161082 web: add options to ignore css compilation and uicache
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11929
diff changeset
    98
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
        ('anonymous-user',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   100
         {'type': 'string',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   101
          'default': None,
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   102
          'help': ('login of the CubicWeb user account to use for anonymous '
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   103
                   'user (if you want to allow anonymous)'),
5554
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5515
diff changeset
   104
          'group': 'web', 'level': 1,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   105
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   106
        ('anonymous-password',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   107
         {'type': 'string',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   108
          'default': None,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   109
          'help': 'password of the CubicWeb user account to use for anonymous user, '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   110
          'if anonymous-user is set',
5554
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5515
diff changeset
   111
          'group': 'web', 'level': 1,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   112
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   113
        ('query-log-file',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   114
         {'type': 'string',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   115
          'default': None,
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   116
          'help': 'web instance query log file',
5554
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5515
diff changeset
   117
          'group': 'web', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   118
          }),
12019
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   119
        ('cleanup-anonymous-session-time',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   120
         {'type': 'time',
12019
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   121
          'default': '5min',
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   122
          'help': 'Same as cleanup-session-time but specific to anonymous '
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   123
          'sessions. You can have a much smaller timeout here since it will be '
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   124
          'transparent to the user. Default to 5min.',
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   125
          'group': 'web', 'level': 3,
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   126
          }),
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   127
    ))
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   128
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   129
    def anonymous_user(self):
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   130
        """return a login and password to use for anonymous users.
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   131
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   132
        None may be returned for both if anonymous connection is not
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   133
        allowed or if an empty login is used in configuration
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   134
        """
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   135
        try:
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   136
            user = self['anonymous-user'] or None
12019
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   137
            passwd = self['anonymous-password']
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   138
            if user:
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   139
                user = text_type(user)
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   140
        except KeyError:
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   141
            user, passwd = None, None
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   142
        except UnicodeDecodeError:
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   143
            raise ConfigurationError("anonymous information should only contains ascii")
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   144
        return user, passwd
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   145
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   146
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   147
class WebConfiguration(BaseWebConfiguration):
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   148
    """the WebConfiguration is a singleton object handling instance's
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   149
    configuration and preferences
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   150
    """
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   151
    options = merge_options(BaseWebConfiguration.options + (
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   152
        # web configuration
10323
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   153
        ('datadir-url',
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   154
         {'type': 'string', 'default': None,
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   155
          'help': ('base url for static data, if different from "${base-url}/data/".  '
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   156
                   'If served from a different domain, that domain should allow '
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   157
                   'cross-origin requests.'),
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   158
          'group': 'web',
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   159
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   160
        ('auth-mode',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   161
         {'type': 'choice',
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   162
          'choices': ('cookie', 'http'),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   163
          'default': 'cookie',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   164
          'help': 'authentication mode (cookie / http)',
5456
d040889fac4e merged back oldstable into stable
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5426 5428
diff changeset
   165
          'group': 'web', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   166
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   167
        ('realm',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   168
         {'type': 'string',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   169
          'default': 'cubicweb',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   170
          'help': 'realm to use on HTTP authentication mode',
5456
d040889fac4e merged back oldstable into stable
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5426 5428
diff changeset
   171
          'group': 'web', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   172
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   173
        ('http-session-time',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   174
         {'type': 'time',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   175
          'default': 0,
5326
0d9054eb3bd1 [config] properly use time type for options representing a time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5283
diff changeset
   176
          'help': "duration of the cookie used to store session identifier. "
0d9054eb3bd1 [config] properly use time type for options representing a time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5283
diff changeset
   177
          "If 0, the cookie will expire when the user exist its browser. "
0d9054eb3bd1 [config] properly use time type for options representing a time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5283
diff changeset
   178
          "Should be 0 or greater than repository\'s session-time.",
5515
513af9be9e37 [config] rename remaining inputlevel to level in option definitions, as expected by lgc >= 0.50
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5500
diff changeset
   179
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   180
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   181
        ('submit-mail',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   182
         {'type': 'string',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   183
          'default': None,
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   184
          'help': ('Mail used as recipient to report bug in this instance, '
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   185
                   'if you want this feature on'),
5323
329b4f6d18b4 [config] with lgc >= 0.50, option's dict inputlevel becomes level
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5283
diff changeset
   186
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   187
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   188
11794
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   189
        ('language-mode',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   190
         {'type': 'choice',
11794
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   191
          'choices': ('http-negotiation', 'url-prefix', ''),
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   192
          'default': 'http-negotiation',
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   193
          'help': ('source for interface\'s language detection. '
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   194
                   'If set to "http-negotiation" the Accept-Language HTTP header will be used,'
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   195
                   ' if set to "url-prefix", the URL will be inspected for a'
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   196
                   ' short language prefix.'),
5323
329b4f6d18b4 [config] with lgc >= 0.50, option's dict inputlevel becomes level
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5283
diff changeset
   197
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
          }),
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   199
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   200
        ('print-traceback',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   201
         {'type': 'yn',
3638
648d6dbec630 system/user modes + CWDEV instead of installed/dev mixed modes. Fix behaviour when setting CW_MODE explicitly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3539
diff changeset
   202
          'default': CubicWebConfiguration.mode != 'system',
6109
47d9c0e0f7b7 integrate Celso's work on translation file: proper/complete spanish translation, fixed some typos in french translation, occured -> occurred fix in various places
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6061
diff changeset
   203
          'help': 'print the traceback on the error page when an error occurred',
5323
329b4f6d18b4 [config] with lgc >= 0.50, option's dict inputlevel becomes level
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5283
diff changeset
   204
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   205
          }),
4595
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   206
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   207
        ('captcha-font-file',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   208
         {'type': 'string',
12268
d84bc85f7f70 [config] Avoid relying on shared_dir method when possible
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12019
diff changeset
   209
          'default': join(_DATA_DIR, 'porkys.ttf'),
4595
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   210
          'help': 'True type font to use for captcha image generation (you \
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   211
must have the python imaging library installed to use captcha)',
5456
d040889fac4e merged back oldstable into stable
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5426 5428
diff changeset
   212
          'group': 'web', 'level': 3,
4595
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   213
          }),
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   214
        ('captcha-font-size',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   215
         {'type': 'int',
4595
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   216
          'default': 25,
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   217
          'help': 'Font size to use for captcha image generation (you must \
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   218
have the python imaging library installed to use captcha)',
5456
d040889fac4e merged back oldstable into stable
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5426 5428
diff changeset
   219
          'group': 'web', 'level': 3,
4595
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   220
          }),
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   221
7762
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   222
        ('concat-resources',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   223
         {'type': 'yn',
9595
240a620b9cd3 [web] Disable 'concat-resources' by default (closes #3670503)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9372
diff changeset
   224
          'default': False,
7762
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   225
          'help': 'use modconcat-like URLS to concat and serve JS / CSS files',
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   226
          'group': 'web', 'level': 2,
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   227
          }),
8601
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
   228
        ('anonymize-jsonp-queries',
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
   229
         {'type': 'yn',
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
   230
          'default': True,
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
   231
          'help': 'anonymize the connection before executing any jsonp query.',
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
   232
          'group': 'web', 'level': 1
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
   233
          }),
9372
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   234
        ('generate-staticdir',
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   235
         {'type': 'yn',
11229
0276f1246a4d [webconfig] disable generate-staticdir by default
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   236
          'default': False,
9372
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   237
          'help': 'Generate the static data resource directory on upgrade.',
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   238
          'group': 'web', 'level': 2,
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   239
          }),
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   240
        ('staticdir-path',
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   241
         {'type': 'string',
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   242
          'default': None,
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   243
          'help': 'The static data resource directory path.',
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   244
          'group': 'web', 'level': 2,
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   245
          }),
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   246
        ('access-control-allow-origin',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   247
         {'type': 'csv',
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   248
          'default': (),
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   249
          'help': ('comma-separated list of allowed origin domains or "*" for any domain'),
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   250
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   251
          }),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   252
        ('access-control-allow-methods',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   253
         {'type': 'csv',
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   254
          'default': (),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   255
          'help': ('comma-separated list of allowed HTTP methods'),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   256
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   257
          }),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   258
        ('access-control-max-age',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   259
         {'type': 'int',
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   260
          'default': None,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   261
          'help': ('maximum age of cross-origin resource sharing (in seconds)'),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   262
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   263
          }),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   264
        ('access-control-expose-headers',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   265
         {'type': 'csv',
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   266
          'default': (),
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   267
          'help': ('comma-separated list of HTTP headers the application '
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   268
                   'declare in response to a preflight request'),
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   269
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   270
          }),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   271
        ('access-control-allow-headers',
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   272
         {'type': 'csv',
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   273
          'default': (),
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   274
          'help': ('comma-separated list of HTTP headers the application may set in the response'),
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   275
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   276
          }),
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   277
    ))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   278
8868
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   279
    def __init__(self, *args, **kwargs):
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   280
        super(WebConfiguration, self).__init__(*args, **kwargs)
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   281
        self.uiprops = None
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   282
        self.datadir_url = None
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   283
890
3530baff9120 make fckeditor actually optional, fix its config, avoid needs for a link to fckeditor.js
sylvain.thenault@logilab.fr
parents: 823
diff changeset
   284
    def fckeditor_installed(self):
8870
c9d18b8dbfea [webconfig] cleanly handles ``fckeditor_installed`` when no uiprops
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8868
diff changeset
   285
        if self.uiprops is None:
c9d18b8dbfea [webconfig] cleanly handles ``fckeditor_installed`` when no uiprops
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8868
diff changeset
   286
            return False
c9d18b8dbfea [webconfig] cleanly handles ``fckeditor_installed`` when no uiprops
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8868
diff changeset
   287
        return exists(self.uiprops.get('FCKEDITOR_PATH', ''))
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   288
7031
a04621040cad [config refactoring] rename eproperty_definition method to cwproperty_definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6425
diff changeset
   289
    def cwproperty_definitions(self):
a04621040cad [config refactoring] rename eproperty_definition method to cwproperty_definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6425
diff changeset
   290
        for key, pdef in super(WebConfiguration, self).cwproperty_definitions():
890
3530baff9120 make fckeditor actually optional, fix its config, avoid needs for a link to fckeditor.js
sylvain.thenault@logilab.fr
parents: 823
diff changeset
   291
            if key == 'ui.fckeditor' and not self.fckeditor_installed():
3530baff9120 make fckeditor actually optional, fix its config, avoid needs for a link to fckeditor.js
sylvain.thenault@logilab.fr
parents: 823
diff changeset
   292
                continue
3530baff9120 make fckeditor actually optional, fix its config, avoid needs for a link to fckeditor.js
sylvain.thenault@logilab.fr
parents: 823
diff changeset
   293
            yield key, pdef
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   294
8605
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   295
    @cachedproperty
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   296
    def _instance_salt(self):
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   297
        """This random key/salt is used to sign content to be sent back by
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   298
        browsers, eg. in the error report form.
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   299
        """
10692
14e7ddb0f670 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
   300
        return str(uuid4()).encode('ascii')
8605
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   301
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   302
    def sign_text(self, text):
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   303
        """sign some text for later checking"""
9326
9d145b4c4e53 [web] make sign_text unicode aware, avoid crash with non-ascii chars. Closes #3289774
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9317
diff changeset
   304
        # hmac.new expect bytes
10692
14e7ddb0f670 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
   305
        if isinstance(text, text_type):
9326
9d145b4c4e53 [web] make sign_text unicode aware, avoid crash with non-ascii chars. Closes #3289774
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9317
diff changeset
   306
            text = text.encode('utf-8')
8605
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   307
        # replace \r\n so we do not depend on whether a browser "reencode"
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   308
        # original message using \r\n or not
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   309
        return hmac.new(self._instance_salt,
10692
14e7ddb0f670 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
   310
                        text.strip().replace(b'\r\n', b'\n')).hexdigest()
8605
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   311
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   312
    def check_text_sign(self, text, signature):
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   313
        """check the text signature is equal to the given signature"""
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   314
        return self.sign_text(text) == signature
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   315
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   316
    def locate_resource(self, rid):
5907
5eba1248e12b [web config] fix old css compat code: we have to modify locate_resource prototype so it return (potentially hacked) file name as well. Should only impact the file cube which has to be released anyway.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5902
diff changeset
   317
        """return the (directory, filename) where the given resource
5eba1248e12b [web config] fix old css compat code: we have to modify locate_resource prototype so it return (potentially hacked) file name as well. Should only impact the file cube which has to be released anyway.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5902
diff changeset
   318
        may be found
5eba1248e12b [web config] fix old css compat code: we have to modify locate_resource prototype so it return (potentially hacked) file name as well. Should only impact the file cube which has to be released anyway.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5902
diff changeset
   319
        """
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   320
        return self._fs_locate(rid, 'data')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   321
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   322
    def locate_doc_file(self, fname):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   323
        """return the directory where the given resource may be found"""
5907
5eba1248e12b [web config] fix old css compat code: we have to modify locate_resource prototype so it return (potentially hacked) file name as well. Should only impact the file cube which has to be released anyway.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5902
diff changeset
   324
        return self._fs_locate(fname, 'wdoc')[0]
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   325
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
   326
    @cached
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
   327
    def _fs_path_locate(self, rid, rdirectory):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   328
        """return the directory where the given resource may be found"""
12268
d84bc85f7f70 [config] Avoid relying on shared_dir method when possible
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12019
diff changeset
   329
        path = [self.apphome] + self.cubes_path() + [dirname(__file__)]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   330
        for directory in path:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   331
            if exists(join(directory, rdirectory, rid)):
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
   332
                return directory
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
   333
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
   334
    def _fs_locate(self, rid, rdirectory):
5907
5eba1248e12b [web config] fix old css compat code: we have to modify locate_resource prototype so it return (potentially hacked) file name as well. Should only impact the file cube which has to be released anyway.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5902
diff changeset
   335
        """return the (directory, filename) where the given resource
5eba1248e12b [web config] fix old css compat code: we have to modify locate_resource prototype so it return (potentially hacked) file name as well. Should only impact the file cube which has to be released anyway.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5902
diff changeset
   336
        may be found
5eba1248e12b [web config] fix old css compat code: we have to modify locate_resource prototype so it return (potentially hacked) file name as well. Should only impact the file cube which has to be released anyway.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5902
diff changeset
   337
        """
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
   338
        directory = self._fs_path_locate(rid, rdirectory)
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
   339
        if directory is None:
5907
5eba1248e12b [web config] fix old css compat code: we have to modify locate_resource prototype so it return (potentially hacked) file name as well. Should only impact the file cube which has to be released anyway.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5902
diff changeset
   340
            return None, None
12010
c34590161082 web: add options to ignore css compilation and uicache
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11929
diff changeset
   341
        if self['use-uicache'] and rdirectory == 'data' and rid.endswith('.css'):
10121
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   342
            if rid == 'cubicweb.old.css':
5902
c344b3079a2d [css] old css bw compat with @import in a custom css
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5658
diff changeset
   343
                # @import('cubicweb.css') in css
10121
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   344
                warn('[3.20] cubicweb.old.css has been renamed back to cubicweb.css',
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   345
                     DeprecationWarning)
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   346
                rid = 'cubicweb.css'
11437
dbe73990172b [webconfig] ensure uicache content has correct uid (related to #11298794)
David Douard <david.douard@logilab.fr>
parents: 10922
diff changeset
   347
            return self.ensure_uid_directory(
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   348
                self.uiprops.process_resource(
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   349
                    join(directory, rdirectory), rid)), rid
5907
5eba1248e12b [web config] fix old css compat code: we have to modify locate_resource prototype so it return (potentially hacked) file name as well. Should only impact the file cube which has to be released anyway.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5902
diff changeset
   350
        return join(directory, rdirectory), rid
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   351
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   352
    def locate_all_files(self, rid, rdirectory='wdoc'):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   353
        """return all files corresponding to the given resource"""
12268
d84bc85f7f70 [config] Avoid relying on shared_dir method when possible
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12019
diff changeset
   354
        path = [self.apphome] + self.cubes_path() + [dirname(__file__)]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   355
        for directory in path:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   356
            fpath = join(directory, rdirectory, rid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   357
            if exists(fpath):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   358
                yield join(fpath)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   359
10474
1dcc52f5e340 [cwctl] allow overriding config settings from the command line (closes #5557656)
David Douard <david.douard@logilab.fr>
parents: 10323
diff changeset
   360
    def load_configuration(self, **kw):
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   361
        """load instance's configuration files"""
10474
1dcc52f5e340 [cwctl] allow overriding config settings from the command line (closes #5557656)
David Douard <david.douard@logilab.fr>
parents: 10323
diff changeset
   362
        super(WebConfiguration, self).load_configuration(**kw)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   363
        # load external resources definition
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   364
        self._init_base_url()
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   365
        self._build_ui_properties()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   366
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   367
    def _init_base_url(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   368
        # normalize base url(s)
4909
a13c1d1ecc5b [web server] simplify base-url handling on startup. Ensure config['base-url'] is correctly set once started
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4719
diff changeset
   369
        baseurl = self['base-url'] or self.default_base_url()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   370
        if baseurl and baseurl[-1] != '/':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   371
            baseurl += '/'
7130
5eb622c0c672 [config] do not set base-url during instance creation, we don't want generated value to ends up in the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7031
diff changeset
   372
        if not (self.repairing or self.creating):
5005
b04ec1b6f7da don't rewrite config's url during migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4909
diff changeset
   373
            self.global_set_option('base-url', baseurl)
10323
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   374
        self.datadir_url = self['datadir-url']
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   375
        if self.datadir_url:
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   376
            if self.datadir_url[-1] != '/':
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   377
                self.datadir_url += '/'
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   378
            if self.mode != 'test':
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   379
                self.datadir_url += '%s/' % self.instance_md5_version()
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   380
            return
8259
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   381
        data_relpath = self.data_relpath()
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   382
        self.datadir_url = baseurl + data_relpath
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   383
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   384
    def data_relpath(self):
8475
65fecbeb9c3a [webconfig] debug mode should not be special wrt data_url handling (closes #2405487)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8349
diff changeset
   385
        if self.mode == 'test':
8259
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   386
            return 'data/'
8475
65fecbeb9c3a [webconfig] debug mode should not be special wrt data_url handling (closes #2405487)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8349
diff changeset
   387
        return 'data/%s/' % self.instance_md5_version()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   388
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   389
    def _build_ui_properties(self):
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   390
        # self.datadir_url[:-1] to remove trailing /
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   391
        from cubicweb.web.propertysheet import PropertySheet
5933
3d707b8f8a4d [web configuration] ensure data home directory / uicache file belong to daemon user and are writeable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5907
diff changeset
   392
        cachedir = join(self.appdatahome, 'uicache')
3d707b8f8a4d [web configuration] ensure data home directory / uicache file belong to daemon user and are writeable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5907
diff changeset
   393
        self.check_writeable_uid_directory(cachedir)
5445
4467ed43d97d [web] use uiprops value to compile css transparently, handlig cache and reloading in debug mode
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5444
diff changeset
   394
        self.uiprops = PropertySheet(
5933
3d707b8f8a4d [web configuration] ensure data home directory / uicache file belong to daemon user and are writeable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5907
diff changeset
   395
            cachedir,
5445
4467ed43d97d [web] use uiprops value to compile css transparently, handlig cache and reloading in debug mode
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5444
diff changeset
   396
            data=lambda x: self.datadir_url + x,
4467ed43d97d [web] use uiprops value to compile css transparently, handlig cache and reloading in debug mode
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5444
diff changeset
   397
            datadir_url=self.datadir_url[:-1])
5467
57372dbfd114 [https] fix resource urls in https version of a site: should use the https version as well to avoid warnings from the nrowser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
   398
        self._init_uiprops(self.uiprops)
57372dbfd114 [https] fix resource urls in https version of a site: should use the https version as well to avoid warnings from the nrowser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
   399
57372dbfd114 [https] fix resource urls in https version of a site: should use the https version as well to avoid warnings from the nrowser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
   400
    def _init_uiprops(self, uiprops):
12268
d84bc85f7f70 [config] Avoid relying on shared_dir method when possible
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12019
diff changeset
   401
        libuiprops = join(_DATA_DIR, 'uiprops.py')
5467
57372dbfd114 [https] fix resource urls in https version of a site: should use the https version as well to avoid warnings from the nrowser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
   402
        uiprops.load(libuiprops)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   403
        for path in reversed([self.apphome] + self.cubes_path()):
5467
57372dbfd114 [https] fix resource urls in https version of a site: should use the https version as well to avoid warnings from the nrowser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
   404
            self._load_ui_properties_file(uiprops, path)
57372dbfd114 [https] fix resource urls in https version of a site: should use the https version as well to avoid warnings from the nrowser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
   405
        self._load_ui_properties_file(uiprops, self.apphome)
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5555
diff changeset
   406
        datadir_url = uiprops.context['datadir_url']
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   407
        if (datadir_url + '/cubicweb.old.css') in uiprops['STYLESHEETS']:
10121
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   408
            warn('[3.20] cubicweb.old.css has been renamed back to cubicweb.css',
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   409
                 DeprecationWarning)
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   410
            idx = uiprops['STYLESHEETS'].index(datadir_url + '/cubicweb.old.css')
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   411
            uiprops['STYLESHEETS'][idx] = datadir_url + '/cubicweb.css'
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   412
        if datadir_url + '/cubicweb.reset.css' in uiprops['STYLESHEETS']:
10121
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   413
            warn('[3.20] cubicweb.reset.css is obsolete', DeprecationWarning)
12528
f9b46b63393e Flake8 cubicweb/web/webconfig.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12503
diff changeset
   414
            uiprops['STYLESHEETS'].remove(datadir_url + '/cubicweb.reset.css')
5658
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5555
diff changeset
   415
        cubicweb_js_url = datadir_url + '/cubicweb.js'
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5555
diff changeset
   416
        if cubicweb_js_url not in uiprops['JAVASCRIPTS']:
7b9553a9db65 [ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 5555
diff changeset
   417
            uiprops['JAVASCRIPTS'].insert(0, cubicweb_js_url)
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   418
5467
57372dbfd114 [https] fix resource urls in https version of a site: should use the https version as well to avoid warnings from the nrowser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
   419
    def _load_ui_properties_file(self, uiprops, path):
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   420
        uipropsfile = join(path, 'uiprops.py')
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   421
        if exists(uipropsfile):
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   422
            self.debug('loading %s', uipropsfile)
5467
57372dbfd114 [https] fix resource urls in https version of a site: should use the https version as well to avoid warnings from the nrowser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
   423
            uiprops.load(uipropsfile)
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   424
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   425
    # static files handling ###################################################
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   426
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   427
    @property
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   428
    def static_directory(self):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   429
        return join(self.appdatahome, 'static')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   430
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   431
    def static_file_exists(self, rpath):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   432
        return exists(join(self.static_directory, rpath))
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   433
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   434
    def static_file_open(self, rpath, mode='wb'):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   435
        staticdir = self.static_directory
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   436
        rdir, filename = split(rpath)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   437
        if rdir:
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   438
            staticdir = join(staticdir, rdir)
8341
af813e7d5daa [etwist] fix static directory serving; closes #2174797
Florent Cayré <florent.cayre@gmail.com>
parents: 8186
diff changeset
   439
            if not isdir(staticdir) and 'w' in mode:
11437
dbe73990172b [webconfig] ensure uicache content has correct uid (related to #11298794)
David Douard <david.douard@logilab.fr>
parents: 10922
diff changeset
   440
                self.check_writeable_uid_directory(staticdir)
10614
57dfde80df11 [py3k] file → open
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10568
diff changeset
   441
        return open(join(staticdir, filename), mode)
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   442
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   443
    def static_file_add(self, rpath, data):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   444
        stream = self.static_file_open(rpath)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   445
        stream.write(data)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   446
        stream.close()
11437
dbe73990172b [webconfig] ensure uicache content has correct uid (related to #11298794)
David Douard <david.douard@logilab.fr>
parents: 10922
diff changeset
   447
        self.ensure_uid(rpath)
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   448
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   449
    def static_file_del(self, rpath):
447
0e52d72104a6 pylint fixes
sylvain.thenault@logilab.fr
parents: 252
diff changeset
   450
        if self.static_file_exists(rpath):
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   451
            os.remove(join(self.static_directory, rpath))