web/webconfig.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Thu, 25 Apr 2013 13:34:48 +0200
changeset 8931 4b195bd82e8b
parent 8889 be91151107f6
child 8941 7b26fe71404f
permissions -rw-r--r--
[notification] move notification view in ``sobject.notification`` It has no user outside this module. This enforce serversideness of notification and allow future cleanup. No backward compat is set up to prevent circular import. The class has no other user anyway. (closes 2845144)
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
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
__docformat__ = "restructuredtext en"
2087
88fa02f50e71 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    21
_ = unicode
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
8605
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
    29
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
    30
from logilab.common.deprecation import deprecated
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
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
    32
from cubicweb import ConfigurationError
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
from cubicweb.toolsutils import read_config
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
from cubicweb.cwconfig import CubicWebConfiguration, register_persistent_options, merge_options
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
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
register_persistent_options( (
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
    # site-wide only web ui configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
    ('site-title',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
     {'type' : 'string', 'default': 'unset title',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
      'help': _('site title'),
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
    42
      'sitewide': True, 'group': 'ui',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    44
    ('main-template',
823
cb8ccbef8fa5 main template refactoring
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 447
diff changeset
    45
     {'type' : 'string', 'default': 'main-template',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
      'help': _('id of main template used to render pages'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    47
      'sitewide': True, 'group': 'ui',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    48
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    49
    # user web ui configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    50
    ('fckeditor',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
     {'type' : 'yn', 'default': True,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
      'help': _('should html fields being edited using fckeditor (a HTML '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
                'WYSIWYG editor).  You should also select text/html as default '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    54
                'text format to actually get fckeditor.'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    55
      'group': 'ui',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    56
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    57
    # navigation configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    58
    ('page-size',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    59
     {'type' : 'int', 'default': 40,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    60
      'help': _('maximum number of objects displayed by page of results'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    61
      'group': 'navigation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    63
    ('related-limit',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
     {'type' : 'int', 'default': 8,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
      'help': _('maximum number of related entities to display in the primary '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
                'view'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
      'group': 'navigation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    68
      }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
    ('combobox-limit',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
     {'type' : 'int', 'default': 20,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
      'help': _('maximum number of entities to display in related combo box'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    72
      'group': 'navigation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
      }),
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
    74
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    75
    ))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    77
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    78
class WebConfiguration(CubicWebConfiguration):
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
    79
    """the WebConfiguration is a singleton object handling instance's
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
    configuration and preferences
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    81
    """
5500
55a40cc0ab9a replaced hardcoded 'web/view' by os.path.join('web', 'view') so views path is also valid under windows
egazoni
parents: 5456
diff changeset
    82
    cubicweb_appobject_path = CubicWebConfiguration.cubicweb_appobject_path | set([join('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
    83
    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
    84
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    85
    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
    86
        ('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
    87
         {'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
    88
          '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
    89
          '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
    90
          '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
    91
          }),
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
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    93
        ('anonymous-user',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    94
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    95
          'default': None,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    96
          '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
    97
          'group': 'web', 'level': 1,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
        ('anonymous-password',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   100
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   101
          'default': None,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
          'help': 'password of the CubicWeb user account to use for anonymous user, '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   103
          '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
   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
        ('query-log-file',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   107
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   108
          'default': None,
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   109
          '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
   110
          'group': 'web', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   111
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   112
        # web configuration
8850
4032499c701e [cwconfig] Add optional configuration param to load a UI cube before other cubes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 8669
diff changeset
   113
        ('ui-cube',
4032499c701e [cwconfig] Add optional configuration param to load a UI cube before other cubes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 8669
diff changeset
   114
         {'type' : 'string',
4032499c701e [cwconfig] Add optional configuration param to load a UI cube before other cubes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 8669
diff changeset
   115
          'default': None,
4032499c701e [cwconfig] Add optional configuration param to load a UI cube before other cubes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 8669
diff changeset
   116
          'help': 'the name of the UI cube that will be loaded before all other '\
4032499c701e [cwconfig] Add optional configuration param to load a UI cube before other cubes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 8669
diff changeset
   117
          'cubes. Setting this value to None will instruct cubicweb not to load '\
4032499c701e [cwconfig] Add optional configuration param to load a UI cube before other cubes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 8669
diff changeset
   118
          'any extra cube.',
4032499c701e [cwconfig] Add optional configuration param to load a UI cube before other cubes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 8669
diff changeset
   119
          'group': 'web', 'level': 3,
4032499c701e [cwconfig] Add optional configuration param to load a UI cube before other cubes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 8669
diff changeset
   120
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   121
        ('https-url',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   122
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   123
          'default': None,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   124
          'help': 'web server root url on https. By specifying this option your '\
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   125
          'site can be available as an http and https site. Authenticated users '\
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   126
          'will in this case be authenticated and once done navigate through the '\
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   127
          'https site. IMPORTANTE NOTE: to do this work, you should have your '\
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   128
          'apache redirection include "https" as base url path so cubicweb can '\
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   129
          'differentiate between http vs https access. For instance: \n'\
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   130
          'RewriteRule ^/demo/(.*) http://127.0.0.1:8080/https/$1 [L,P]\n'\
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   131
          'where the cubicweb web server is listening on port 8080.',
5456
d040889fac4e merged back oldstable into stable
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5426 5428
diff changeset
   132
          'group': 'main', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   133
          }),
8149
3ed48646f354 [https] Allow configuration of anonymous access on https (closes #1971992)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7776
diff changeset
   134
        ('https-deny-anonymous',
8186
341c57b39dc9 [config, migration] fix https-deny-anonymous option type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8149
diff changeset
   135
         {'type': 'yn',
8149
3ed48646f354 [https] Allow configuration of anonymous access on https (closes #1971992)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7776
diff changeset
   136
          'default': False,
3ed48646f354 [https] Allow configuration of anonymous access on https (closes #1971992)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7776
diff changeset
   137
          'help': 'Prevent anonymous user to browse thought https version of '
3ed48646f354 [https] Allow configuration of anonymous access on https (closes #1971992)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7776
diff changeset
   138
                  'the site (https-url). Login form will then be displayed '
3ed48646f354 [https] Allow configuration of anonymous access on https (closes #1971992)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7776
diff changeset
   139
                  'until logged',
3ed48646f354 [https] Allow configuration of anonymous access on https (closes #1971992)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7776
diff changeset
   140
          'group': 'web',
3ed48646f354 [https] Allow configuration of anonymous access on https (closes #1971992)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7776
diff changeset
   141
          'level': 2
3ed48646f354 [https] Allow configuration of anonymous access on https (closes #1971992)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7776
diff changeset
   142
         }
3ed48646f354 [https] Allow configuration of anonymous access on https (closes #1971992)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7776
diff changeset
   143
          ),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   144
        ('auth-mode',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   145
         {'type' : 'choice',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   146
          'choices' : ('cookie', 'http'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   147
          'default': 'cookie',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   148
          'help': 'authentication mode (cookie / http)',
5456
d040889fac4e merged back oldstable into stable
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5426 5428
diff changeset
   149
          'group': 'web', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   150
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   151
        ('realm',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   152
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   153
          'default': 'cubicweb',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   154
          '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
   155
          'group': 'web', 'level': 3,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   156
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   157
        ('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
   158
         {'type' : 'time',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   159
          '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
   160
          '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
   161
          "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
   162
          "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
   163
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   164
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   165
        ('cleanup-anonymous-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
   166
         {'type' : 'time',
0d9054eb3bd1 [config] properly use time type for options representing a time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5283
diff changeset
   167
          'default': '5min',
5283
9ad0eaa09d34 [config] better *-session-time documentation and usage in session handler
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5005
diff changeset
   168
          'help': 'Same as cleanup-session-time but specific to anonymous '
9ad0eaa09d34 [config] better *-session-time documentation and usage in session handler
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5005
diff changeset
   169
          'sessions. You can have a much smaller timeout here since it will be '
9ad0eaa09d34 [config] better *-session-time documentation and usage in session handler
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5005
diff changeset
   170
          'transparent to the user. Default to 5min.',
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
          }),
2552
1ea2f2ff5dca add force-html-content-type config boolean variable
Florent <florent@secondweb.fr>
parents: 2476
diff changeset
   173
        ('force-html-content-type',
1ea2f2ff5dca add force-html-content-type config boolean variable
Florent <florent@secondweb.fr>
parents: 2476
diff changeset
   174
         {'type' : 'yn',
1ea2f2ff5dca add force-html-content-type config boolean variable
Florent <florent@secondweb.fr>
parents: 2476
diff changeset
   175
          'default': False,
1ea2f2ff5dca add force-html-content-type config boolean variable
Florent <florent@secondweb.fr>
parents: 2476
diff changeset
   176
          'help': 'force text/html content type for your html pages instead of cubicweb user-agent based'\
1ea2f2ff5dca add force-html-content-type config boolean variable
Florent <florent@secondweb.fr>
parents: 2476
diff changeset
   177
          'deduction of an appropriate content type',
5456
d040889fac4e merged back oldstable into stable
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5426 5428
diff changeset
   178
          'group': 'web', 'level': 3,
2552
1ea2f2ff5dca add force-html-content-type config boolean variable
Florent <florent@secondweb.fr>
parents: 2476
diff changeset
   179
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   180
        ('embed-allowed',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   181
         {'type' : 'regexp',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   182
          'default': None,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   183
          'help': 'regular expression matching URLs that may be embeded. \
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   184
leave it blank if you don\'t want the embedding feature, or set it to ".*" \
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   185
if you want to allow everything',
5456
d040889fac4e merged back oldstable into stable
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5426 5428
diff changeset
   186
          'group': 'web', 'level': 3,
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
        ('submit-mail',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   189
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   190
          'default': None,
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   191
          'help': ('Mail used as recipient to report bug in this instance, '
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   192
                   '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
   193
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   194
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   195
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   196
        ('language-negociation',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   197
         {'type' : 'yn',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
          'default': True,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   199
          'help': 'use Accept-Language http header to try to set user '\
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   200
          'interface\'s language according to browser defined preferences',
5323
329b4f6d18b4 [config] with lgc >= 0.50, option's dict inputlevel becomes level
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5283
diff changeset
   201
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   202
          }),
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   203
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   204
        ('print-traceback',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   205
         {'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
   206
          '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
   207
          '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
   208
          'group': 'web', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   209
          }),
4595
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   210
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   211
        ('captcha-font-file',
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   212
         {'type' : 'string',
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   213
          '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
   214
          '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
   215
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
   216
          '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
   217
          }),
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   218
        ('captcha-font-size',
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   219
         {'type' : 'int',
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   220
          'default': 25,
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   221
          '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
   222
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
   223
          '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
   224
          }),
bb08a75832e6 backport crypto/captcha utilities from the registration cube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   225
5510
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   226
        ('use-old-css',
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   227
         {'type' : 'yn',
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   228
          'default': True,
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   229
          'help': 'use cubicweb.old.css instead of 3.9 cubicweb.css',
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   230
          'group': 'web', 'level': 2,
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   231
          }),
7762
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   232
        ('concat-resources',
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   233
         {'type' : 'yn',
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   234
          'default': True,
a3f9ba4d44eb [web] add option to make resources-concat optional (implements #1910615)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7380
diff changeset
   235
          '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
   236
          '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
   237
          }),
8601
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
   238
        ('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
   239
         {'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
   240
          '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
   241
          '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
   242
          '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
   243
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   244
        ))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   245
8868
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   246
    def __init__(self, *args, **kwargs):
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   247
        super(WebConfiguration, self).__init__(*args, **kwargs)
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   248
        self.uiprops = None
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   249
        self.https_uiprops = None
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   250
        self.datadir_url = None
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   251
        self.https_datadir_url = None
12f29b0ed0bb [webconfig] explicit some webconfig attribute
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8669
diff changeset
   252
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
   253
    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
   254
        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
   255
            return False
c9d18b8dbfea [webconfig] cleanly handles ``fckeditor_installed`` when no uiprops
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8868
diff changeset
   256
        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
   257
7031
a04621040cad [config refactoring] rename eproperty_definition method to cwproperty_definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6425
diff changeset
   258
    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
   259
        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
   260
            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
   261
                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
   262
            yield key, pdef
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   263
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   264
    # don't use @cached: we want to be able to disable it while this must still
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   265
    # be cached
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   266
    def repository(self, vreg=None):
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   267
        """return the instance's repository object"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   268
        try:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   269
            return self.__repo
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   270
        except AttributeError:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   271
            from cubicweb.dbapi import get_repository
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
   272
            repo = get_repository(config=self, vreg=vreg)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   273
            self.__repo = repo
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   274
            return repo
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   275
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   276
    def vc_config(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   277
        return self.repository().get_versions()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   278
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   279
    def anonymous_user(self):
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
   280
        """return a login and password to use for anonymous users.
8601
1a6000ff2080 [web] add a ``anonymize-jsonp-queries`` option in file configuration (closes #2465388)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8475
diff changeset
   281
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
   282
        None may be returned for both if anonymous connection is not
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
   283
        allowed or if an empty login is used in configuration
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   284
        """
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   285
        try:
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
   286
            user   = self['anonymous-user'] or None
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   287
            passwd = self['anonymous-password']
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
   288
            if user:
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
   289
                user = unicode(user)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   290
        except KeyError:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   291
            user, passwd = None, None
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
   292
        except UnicodeDecodeError:
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
   293
            raise ConfigurationError("anonymous information should only contains ascii")
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   294
        return user, passwd
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
        """
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   301
        return str(uuid4())
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"""
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   305
        # 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
   306
        # 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
   307
        return hmac.new(self._instance_salt,
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   308
                        text.strip().replace('\r\n', '\n')).hexdigest()
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   309
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   310
    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
   311
        """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
   312
        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
   313
797fc2e2fb78 [web] add a digital signature to error form (closes #2522526)
David Douard <david.douard@logilab.fr>
parents: 8601
diff changeset
   314
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   315
    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
   316
        """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
   317
        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
   318
        """
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   319
        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
   320
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   321
    def locate_doc_file(self, fname):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   322
        """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
   323
        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
   324
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
   325
    @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
   326
    def _fs_path_locate(self, rid, rdirectory):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   327
        """return the directory where the given resource may be found"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   328
        path = [self.apphome] + self.cubes_path() + [join(self.shared_dir())]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   329
        for directory in path:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   330
            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
   331
                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
   332
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
    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
   334
        """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
   335
        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
   336
        """
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
   337
        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
   338
        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
   339
            return None, None
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
   340
        if rdirectory == 'data' and rid.endswith('.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
   341
            if self['use-old-css'] and rid == 'cubicweb.css':
c344b3079a2d [css] old css bw compat with @import in a custom css
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5658
diff changeset
   342
                # @import('cubicweb.css') in css
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
   343
                rid = 'cubicweb.old.css'
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
   344
            return self.uiprops.process_resource(join(directory, rdirectory), rid), rid
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
   345
        return join(directory, rdirectory), rid
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   346
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   347
    def locate_all_files(self, rid, rdirectory='wdoc'):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   348
        """return all files corresponding to the given resource"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   349
        path = [self.apphome] + self.cubes_path() + [join(self.shared_dir())]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   350
        for directory in path:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   351
            fpath = join(directory, rdirectory, rid)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   352
            if exists(fpath):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   353
                yield join(fpath)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   354
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   355
    def load_configuration(self):
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2267
diff changeset
   356
        """load instance's configuration files"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   357
        super(WebConfiguration, self).load_configuration()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   358
        # load external resources definition
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   359
        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
   360
        self._build_ui_properties()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   361
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   362
    def _init_base_url(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   363
        # 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
   364
        baseurl = self['base-url'] or self.default_base_url()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   365
        if baseurl and baseurl[-1] != '/':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   366
            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
   367
        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
   368
            self.global_set_option('base-url', baseurl)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   369
        httpsurl = self['https-url']
8259
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   370
        data_relpath = self.data_relpath()
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
   371
        if httpsurl:
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
   372
            if httpsurl[-1] != '/':
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
   373
                httpsurl += '/'
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
   374
                if not self.repairing:
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
   375
                    self.global_set_option('https-url', httpsurl)
8259
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   376
            self.https_datadir_url = httpsurl + data_relpath
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   377
        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
   378
1c5be4a1afd1 [web/config] refactor initialization of the data url
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8186
diff changeset
   379
    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
   380
        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
   381
            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
   382
        return 'data/%s/' % self.instance_md5_version()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   383
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   384
    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
   385
        # 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
   386
        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
   387
        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
   388
        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
   389
        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
   390
            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
   391
            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
   392
            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
   393
        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
   394
        if self['https-url']:
5934
6ccaaf04cfbc [web configuration] http/https ui properties should not share the same cache directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5933
diff changeset
   395
            cachedir = join(self.appdatahome, 'uicachehttps')
6ccaaf04cfbc [web configuration] http/https ui properties should not share the same cache directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5933
diff changeset
   396
            self.check_writeable_uid_directory(cachedir)
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
   397
            self.https_uiprops = PropertySheet(
5934
6ccaaf04cfbc [web configuration] http/https ui properties should not share the same cache directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5933
diff changeset
   398
                cachedir,
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
                data=lambda x: self.https_datadir_url + x,
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
                datadir_url=self.https_datadir_url[:-1])
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
            self._init_uiprops(self.https_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
   402
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
    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
   404
        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
   405
        uiprops.load(libuiprops)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   406
        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
   407
            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
   408
        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
   409
        datadir_url = uiprops.context['datadir_url']
5510
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   410
        # XXX pre 3.9 css compat
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   411
        if self['use-old-css']:
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   412
            if (datadir_url+'/cubicweb.css') in uiprops['STYLESHEETS']:
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   413
                idx = uiprops['STYLESHEETS'].index(datadir_url+'/cubicweb.css')
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   414
                uiprops['STYLESHEETS'][idx] = datadir_url+'/cubicweb.old.css'
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   415
            if datadir_url+'/cubicweb.reset.css' in uiprops['STYLESHEETS']:
d3e155cab542 [css] keep old css according to a configuration variable (true by default)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5508
diff changeset
   416
                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
   417
        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
   418
        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
   419
            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
   420
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
   421
    def _load_ui_properties_file(self, uiprops, path):
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
   422
        resourcesfile = join(path, 'data', 'external_resources')
252
8cd0c2111783 search external_resources in application home
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 151
diff changeset
   423
        if exists(resourcesfile):
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   424
            warn('[3.9] %s file is deprecated, use an uiprops.py file'
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   425
                 % resourcesfile, DeprecationWarning)
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
   426
            datadir_url = uiprops.context['datadir_url']
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   427
            for rid, val in read_config(resourcesfile).iteritems():
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   428
                if rid in ('STYLESHEETS', 'STYLESHEETS_PRINT',
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   429
                           'IE_STYLESHEETS', 'JAVASCRIPTS'):
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
   430
                    val = [w.strip().replace('DATADIR', datadir_url)
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   431
                           for w in val.split(',') if w.strip()]
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   432
                    if rid == 'IE_STYLESHEETS':
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   433
                        rid = 'STYLESHEETS_IE'
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   434
                else:
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
   435
                    val = val.strip().replace('DATADIR', datadir_url)
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
   436
                uiprops[rid] = val
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5443
diff changeset
   437
        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
   438
        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
   439
            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
   440
            uiprops.load(uipropsfile)
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   441
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   442
    # static files handling ###################################################
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   443
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   444
    @property
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   445
    def static_directory(self):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   446
        return join(self.appdatahome, 'static')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1490
diff changeset
   447
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   448
    def static_file_exists(self, rpath):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   449
        return exists(join(self.static_directory, rpath))
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   450
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   451
    def static_file_open(self, rpath, mode='wb'):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   452
        staticdir = self.static_directory
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   453
        rdir, filename = split(rpath)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   454
        if rdir:
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   455
            staticdir = join(staticdir, rdir)
8341
af813e7d5daa [etwist] fix static directory serving; closes #2174797
Florent Cayré <florent.cayre@gmail.com>
parents: 8186
diff changeset
   456
            if not isdir(staticdir) and 'w' in mode:
af813e7d5daa [etwist] fix static directory serving; closes #2174797
Florent Cayré <florent.cayre@gmail.com>
parents: 8186
diff changeset
   457
                os.makedirs(staticdir)
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   458
        return file(join(staticdir, filename), mode)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   459
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   460
    def static_file_add(self, rpath, data):
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   461
        stream = self.static_file_open(rpath)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   462
        stream.write(data)
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   463
        stream.close()
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   464
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   465
    def static_file_del(self, rpath):
447
0e52d72104a6 pylint fixes
sylvain.thenault@logilab.fr
parents: 252
diff changeset
   466
        if self.static_file_exists(rpath):
151
343e7a18675d static files support
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 30
diff changeset
   467
            os.remove(join(self.static_directory, rpath))
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
   468
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
   469
    @deprecated('[3.9] use _cw.uiprops.get(rid)')
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
   470
    def has_resource(self, rid):
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
   471
        """return true if an external resource is defined"""
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
   472
        return bool(self.uiprops.get(rid))