cubicweb/web/webconfig.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Thu, 09 Mar 2017 16:35:58 +0100
changeset 12019 9759aefa047b
parent 12017 281a6219bdc9
child 12268 d84bc85f7f70
permissions -rw-r--r--
[web] Extract a base class out WebConfiguration This will be used to build a CubicWebPyramidConfiguration in following changeset.
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
8341
af813e7d5daa [etwist] fix static directory serving; closes #2174797
Florent Cayré <florent.cayre@gmail.com>
parents: 8186
diff changeset
    26
from os.path import 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
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
    32
from logilab.common.deprecation import deprecated
8989
8742f4bf029f import merge_options directly from logilab.common
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8941
diff changeset
    33
from logilab.common.configuration import merge_options
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
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
    35
from cubicweb import ConfigurationError
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
from cubicweb.toolsutils import read_config
8989
8742f4bf029f import merge_options directly from logilab.common
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8941
diff changeset
    37
from cubicweb.cwconfig import CubicWebConfiguration, register_persistent_options
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
register_persistent_options( (
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
    # site-wide only web ui configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
    ('site-title',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
     {'type' : 'string', 'default': 'unset title',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    44
      'help': _('site title'),
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
    45
      'sitewide': True, 'group': 'ui',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    47
    ('main-template',
823
cb8ccbef8fa5 main template refactoring
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 447
diff changeset
    48
     {'type' : 'string', 'default': 'main-template',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    49
      'help': _('id of main template used to render pages'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    50
      'sitewide': True, 'group': 'ui',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
    # user web ui configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
    ('fckeditor',
10273
ef74abcf369d [config] disable fckeditor by default (closes #1368900)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10121
diff changeset
    54
     {'type' : 'yn', 'default': False,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    55
      'help': _('should html fields being edited using fckeditor (a HTML '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    56
                'WYSIWYG editor).  You should also select text/html as default '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    57
                'text format to actually get fckeditor.'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    58
      'group': 'ui',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    59
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    60
    # navigation configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    61
    ('page-size',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
     {'type' : 'int', 'default': 40,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    63
      'help': _('maximum number of objects displayed by page of results'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
      'group': 'navigation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
    ('related-limit',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
     {'type' : 'int', 'default': 8,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    68
      'help': _('maximum number of related entities to display in the primary '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
                'view'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
      'group': 'navigation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    72
    ('combobox-limit',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
     {'type' : 'int', 'default': 20,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    74
      'help': _('maximum number of entities to display in related combo box'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    75
      'group': 'navigation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
      }),
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
    77
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    78
    ))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    79
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
12019
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
    81
class BaseWebConfiguration(CubicWebConfiguration):
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
    82
    """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
    83
    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
    84
    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
    85
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    86
    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
    87
        ('repository-uri',
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
         {'type' : 'string',
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
    89
          '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
    90
          '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
    91
          '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
    92
          }),
12010
c34590161082 web: add options to ignore css compilation and uicache
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11929
diff changeset
    93
        ('use-uicache',
c34590161082 web: add options to ignore css compilation and uicache
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 11929
diff changeset
    94
         {'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
    95
          '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
    96
          '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
    97
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
        ('anonymous-user',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   100
          'default': None,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   101
          'help': 'login of the CubicWeb user account to use for anonymous 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
   102
          'group': 'web', 'level': 1,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   103
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   104
        ('anonymous-password',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   105
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   106
          'default': None,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   107
          'help': 'password of the CubicWeb user account to use for anonymous user, '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   108
          '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
   109
          'group': 'web', 'level': 1,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   110
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   111
        ('query-log-file',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   112
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   113
          'default': None,
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   114
          '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
   115
          'group': 'web', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   116
          }),
12019
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   117
        ('cleanup-anonymous-session-time',
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   118
         {'type' : 'time',
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   119
          'default': '5min',
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   120
          '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
   121
          '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
   122
          '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
   123
          'group': 'web', 'level': 3,
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   124
          }),
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   125
    ))
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
    def anonymous_user(self):
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   128
        """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
   129
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   130
        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
   131
        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
   132
        """
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   133
        try:
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   134
            user   = self['anonymous-user'] or None
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   135
            passwd = self['anonymous-password']
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   136
            if user:
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   137
                user = text_type(user)
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   138
        except KeyError:
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   139
            user, passwd = None, None
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   140
        except UnicodeDecodeError:
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   141
            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
   142
        return user, passwd
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   143
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   144
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
class WebConfiguration(BaseWebConfiguration):
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   147
    """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
   148
    configuration and preferences
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   149
    """
9759aefa047b [web] Extract a base class out WebConfiguration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12017
diff changeset
   150
    options = merge_options(BaseWebConfiguration.options + (
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   151
        # web configuration
10323
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   152
        ('datadir-url',
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   153
         {'type': 'string', 'default': None,
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   154
          '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
   155
                   '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
   156
                   'cross-origin requests.'),
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   157
          'group': 'web',
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   158
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   159
        ('auth-mode',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   160
         {'type' : 'choice',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   161
          'choices' : ('cookie', 'http'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   162
          'default': 'cookie',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   163
          'help': 'authentication mode (cookie / http)',
5456
d040889fac4e merged back oldstable into stable
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5426 5428
diff changeset
   164
          'group': 'web', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   165
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   166
        ('realm',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   167
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   168
          'default': 'cubicweb',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   169
          '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
   170
          'group': 'web', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   171
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   172
        ('http-session-time',
5326
0d9054eb3bd1 [config] properly use time type for options representing a time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5283
diff changeset
   173
         {'type' : 'time',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   174
          '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
   175
          '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
   176
          "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
   177
          "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
   178
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   179
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   180
        ('submit-mail',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   181
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   182
          'default': None,
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   183
          'help': ('Mail used as recipient to report bug in this instance, '
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   184
                   '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
   185
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   186
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   187
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
   188
        ('language-mode',
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
         {'type' : 'choice',
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
   190
          '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
   191
          '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
   192
          '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
   193
                   'If set to "http-negotiation" the Accept-Language HTTP header will be used,'
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 "url-prefix", the URL will be inspected for a 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
   195
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   196
          }),
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   197
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
        ('print-traceback',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   199
         {'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
   200
          '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
   201
          '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
   202
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   203
          }),
4595
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   204
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   205
        ('captcha-font-file',
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   206
         {'type' : 'string',
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   207
          'default': join(CubicWebConfiguration.shared_dir(), 'data', 'porkys.ttf'),
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   208
          '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
   209
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
   210
          '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
   211
          }),
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   212
        ('captcha-font-size',
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   213
         {'type' : 'int',
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   214
          'default': 25,
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   215
          '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
   216
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
   217
          '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
   218
          }),
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   219
7762
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   220
        ('concat-resources',
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   221
         {'type' : 'yn',
9595
240a620b9cd3 [web] Disable 'concat-resources' by default (closes #3670503)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9372
diff changeset
   222
          '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
   223
          '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
   224
          '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
   225
          }),
8601
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
   226
        ('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
   227
         {'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
   228
          '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
   229
          '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
   230
          '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
   231
          }),
9372
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   232
        ('generate-staticdir',
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   233
         {'type': 'yn',
11229
0276f1246a4d [webconfig] disable generate-staticdir by default
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   234
          'default': False,
9372
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   235
          '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
   236
          'group': 'web', 'level': 2,
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   237
          }),
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   238
        ('staticdir-path',
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   239
         {'type': 'string',
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   240
          'default': None,
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   241
          '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
   242
          'group': 'web', 'level': 2,
e87a808a4c32 [webctl] Generate static data directory on upgrade (closes #2167873)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9340
diff changeset
   243
          }),
9571
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   244
        ('access-control-allow-origin',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   245
         {'type' : 'csv',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   246
          'default': (),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   247
          'help':('comma-separated list of allowed origin domains or "*" for any domain'),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   248
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   249
          }),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   250
        ('access-control-allow-methods',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   251
         {'type' : 'csv',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   252
          'default': (),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   253
          '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
   254
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   255
          }),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   256
        ('access-control-max-age',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   257
         {'type' : 'int',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   258
          'default': None,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   259
          '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
   260
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   261
          }),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   262
        ('access-control-expose-headers',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   263
         {'type' : 'csv',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   264
          'default': (),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   265
          'help':('comma-separated list of HTTP headers the application declare in response to a preflight request'),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   266
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   267
          }),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   268
        ('access-control-allow-headers',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   269
         {'type' : 'csv',
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   270
          'default': (),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   271
          'help':('comma-separated list of HTTP headers the application may set in the response'),
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   272
          'group': 'web', 'level': 2,
aaf83cc07eed [web] implement cross origin resource sharing (CORS) (closes #2491768)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 9504
diff changeset
   273
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   274
        ))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   275
8868
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   276
    def __init__(self, *args, **kwargs):
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   277
        super(WebConfiguration, self).__init__(*args, **kwargs)
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   278
        self.uiprops = None
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   279
        self.datadir_url = None
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   280
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
   281
    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
   282
        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
   283
            return False
c9d18b8dbfea [webconfig] cleanly handles ``fckeditor_installed`` when no uiprops
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8868
diff changeset
   284
        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
   285
7031
a04621040cad [config refactoring] rename eproperty_definition method to cwproperty_definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6425
diff changeset
   286
    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
   287
        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
   288
            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
   289
                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
   290
            yield key, pdef
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   291
10922
7d01c8c675a0 [web] Stop using webconfig.vc_config()
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10692
diff changeset
   292
    @deprecated('[3.22] call req.cnx.repo.get_versions() directly')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   293
    def vc_config(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   294
        return self.repository().get_versions()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   295
8605
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   296
    @cachedproperty
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   297
    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
   298
        """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
   299
        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
   300
        """
10692
14e7ddb0f670 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
   301
        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
   302
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   303
    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
   304
        """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
   305
        # hmac.new expect bytes
10692
14e7ddb0f670 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
   306
        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
   307
            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
   308
        # 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
   309
        # 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
   310
        return hmac.new(self._instance_salt,
10692
14e7ddb0f670 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
   311
                        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
   312
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   313
    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
   314
        """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
   315
        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
   316
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   317
    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
   318
        """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
   319
        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
   320
        """
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   321
        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
   322
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   323
    def locate_doc_file(self, fname):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   324
        """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
   325
        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
   326
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
   327
    @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
   328
    def _fs_path_locate(self, rid, rdirectory):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   329
        """return the directory where the given resource may be found"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   330
        path = [self.apphome] + self.cubes_path() + [join(self.shared_dir())]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   331
        for directory in path:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   332
            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
   333
                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
   334
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
   335
    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
   336
        """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
   337
        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
   338
        """
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
   339
        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
   340
        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
   341
            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
   342
        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
   343
            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
   344
                # @import('cubicweb.css') in css
10121
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   345
                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
   346
                     DeprecationWarning)
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   347
                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
   348
            return self.ensure_uid_directory(
dbe73990172b [webconfig] ensure uicache content has correct uid (related to #11298794)
David Douard <david.douard@logilab.fr>
parents: 10922
diff changeset
   349
                        self.uiprops.process_resource(
dbe73990172b [webconfig] ensure uicache content has correct uid (related to #11298794)
David Douard <david.douard@logilab.fr>
parents: 10922
diff changeset
   350
                             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
   351
        return join(directory, rdirectory), rid
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   352
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   353
    def locate_all_files(self, rid, rdirectory='wdoc'):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   354
        """return all files corresponding to the given resource"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   355
        path = [self.apphome] + self.cubes_path() + [join(self.shared_dir())]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   356
        for directory in path:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   357
            fpath = join(directory, rdirectory, rid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   358
            if exists(fpath):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   359
                yield join(fpath)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   360
10474
1dcc52f5e340 [cwctl] allow overriding config settings from the command line (closes #5557656)
David Douard <david.douard@logilab.fr>
parents: 10323
diff changeset
   361
    def load_configuration(self, **kw):
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   362
        """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
   363
        super(WebConfiguration, self).load_configuration(**kw)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   364
        # load external resources definition
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   365
        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
   366
        self._build_ui_properties()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   367
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   368
    def _init_base_url(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   369
        # 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
   370
        baseurl = self['base-url'] or self.default_base_url()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   371
        if baseurl and baseurl[-1] != '/':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   372
            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
   373
        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
   374
            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
   375
        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
   376
        if self.datadir_url:
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   377
            if self.datadir_url[-1] != '/':
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   378
                self.datadir_url += '/'
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   379
            if self.mode != 'test':
8cc58e8ad72f [web] Add datadir-url configuration option (closes #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10322
diff changeset
   380
                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
   381
            return
8259
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   382
        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
   383
        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
   384
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   385
    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
   386
        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
   387
            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
   388
        return 'data/%s/' % self.instance_md5_version()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   389
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   390
    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
   391
        # 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
   392
        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
   393
        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
   394
        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
   395
        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
   396
            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
   397
            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
   398
            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
   399
        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
   400
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
   401
    def _init_uiprops(self, uiprops):
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   402
        libuiprops = join(self.shared_dir(), 'data', '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
   403
        uiprops.load(libuiprops)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   404
        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
   405
            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
   406
        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
   407
        datadir_url = uiprops.context['datadir_url']
10121
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   408
        if (datadir_url+'/cubicweb.old.css') in uiprops['STYLESHEETS']:
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   409
            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
   410
                 DeprecationWarning)
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   411
            idx = uiprops['STYLESHEETS'].index(datadir_url+'/cubicweb.old.css')
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   412
            uiprops['STYLESHEETS'][idx] = datadir_url+'/cubicweb.css'
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   413
        if datadir_url+'/cubicweb.reset.css' in uiprops['STYLESHEETS']:
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   414
            warn('[3.20] cubicweb.reset.css is obsolete', DeprecationWarning)
23af005426bf [web] everything old is new again
Julien Cristau <julien.cristau@logilab.fr>
parents: 9669
diff changeset
   415
            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
   416
        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
   417
        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
   418
            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
   419
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
   420
    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
   421
        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
   422
        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
   423
            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
   424
            uiprops.load(uipropsfile)
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   425
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   426
    # static files handling ###################################################
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   427
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   428
    @property
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   429
    def static_directory(self):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   430
        return join(self.appdatahome, 'static')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   431
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   432
    def static_file_exists(self, rpath):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   433
        return exists(join(self.static_directory, rpath))
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   434
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   435
    def static_file_open(self, rpath, mode='wb'):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   436
        staticdir = self.static_directory
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   437
        rdir, filename = split(rpath)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   438
        if rdir:
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   439
            staticdir = join(staticdir, rdir)
8341
af813e7d5daa [etwist] fix static directory serving; closes #2174797
Florent Cayré <florent.cayre@gmail.com>
parents: 8186
diff changeset
   440
            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
   441
                self.check_writeable_uid_directory(staticdir)
10614
57dfde80df11 [py3k] file → open
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10568
diff changeset
   442
        return open(join(staticdir, filename), mode)
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   443
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   444
    def static_file_add(self, rpath, data):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   445
        stream = self.static_file_open(rpath)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   446
        stream.write(data)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   447
        stream.close()
11437
dbe73990172b [webconfig] ensure uicache content has correct uid (related to #11298794)
David Douard <david.douard@logilab.fr>
parents: 10922
diff changeset
   448
        self.ensure_uid(rpath)
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   449
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   450
    def static_file_del(self, rpath):
447
0e52d72104a6 pylint fixes
sylvain.thenault@logilab.fr
parents: 252
diff changeset
   451
        if self.static_file_exists(rpath):
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   452
            os.remove(join(self.static_directory, rpath))