By now enforcing the Content-Type header is set to 'application/json', we force browsers attempting a cross-domain request to first perform a CORS preflight OPTIONS request. This request always includes an Origin header which we check against our whitelist. The whitelist contains the current Host as well as anything specified in the new optional allowed_origins config value. Any non-browser tools must also now set the Context-type header.
50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from __future__ import absolute_import, unicode_literals
|
|
|
|
import logging
|
|
import os
|
|
|
|
import mopidy
|
|
from mopidy import config as config_lib, exceptions, ext
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Extension(ext.Extension):
|
|
dist_name = 'Mopidy-HTTP'
|
|
ext_name = 'http'
|
|
version = mopidy.__version__
|
|
|
|
def get_default_config(self):
|
|
conf_file = os.path.join(os.path.dirname(__file__), 'ext.conf')
|
|
return config_lib.read(conf_file)
|
|
|
|
def get_config_schema(self):
|
|
schema = super(Extension, self).get_config_schema()
|
|
schema['hostname'] = config_lib.Hostname()
|
|
schema['port'] = config_lib.Port()
|
|
schema['static_dir'] = config_lib.Path(optional=True)
|
|
schema['zeroconf'] = config_lib.String(optional=True)
|
|
schema['allowed_origins'] = config_lib.List(optional=True)
|
|
return schema
|
|
|
|
def validate_environment(self):
|
|
try:
|
|
import tornado.web # noqa
|
|
except ImportError as e:
|
|
raise exceptions.ExtensionError('tornado library not found', e)
|
|
|
|
def setup(self, registry):
|
|
from .actor import HttpFrontend
|
|
from .handlers import make_mopidy_app_factory
|
|
|
|
HttpFrontend.apps = registry['http:app']
|
|
HttpFrontend.statics = registry['http:static']
|
|
|
|
registry.add('frontend', HttpFrontend)
|
|
registry.add('http:app', {
|
|
'name': 'mopidy',
|
|
'factory': make_mopidy_app_factory(
|
|
registry['http:app'], registry['http:static']),
|
|
})
|