mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Add endpoint for serving i18n requests
For now JSON service is not available without authentication to IPA. But some of Web UI pages expect translations before or without Login process. This endpoint serves i18n requests only. Fixes: https://pagure.io/freeipa/issue/7559 Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com> Reviewed-By: Christian Heimes <cheimes@redhat.com> Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
This commit is contained in:
committed by
Rob Crittenden
parent
34fe4b1dd4
commit
ab0835f91f
@@ -29,11 +29,12 @@ register = Registry()
|
||||
|
||||
if api.env.context in ('server', 'lite'):
|
||||
from ipaserver.rpcserver import (
|
||||
wsgi_dispatch, xmlserver, jsonserver_kerb, jsonserver_session,
|
||||
login_kerberos, login_x509, login_password, change_password,
|
||||
sync_token, xmlserver_session)
|
||||
wsgi_dispatch, xmlserver, jsonserver_i18n_messages, jsonserver_kerb,
|
||||
jsonserver_session, login_kerberos, login_x509, login_password,
|
||||
change_password, sync_token, xmlserver_session)
|
||||
register()(wsgi_dispatch)
|
||||
register()(xmlserver)
|
||||
register()(jsonserver_i18n_messages)
|
||||
register()(jsonserver_kerb)
|
||||
register()(jsonserver_session)
|
||||
register()(login_kerberos)
|
||||
|
||||
@@ -41,6 +41,7 @@ import six
|
||||
from six.moves.urllib.parse import parse_qs
|
||||
from six.moves.xmlrpc_client import Fault
|
||||
# pylint: enable=import-error
|
||||
from six import BytesIO
|
||||
|
||||
from ipalib import plugable, errors
|
||||
from ipalib.capabilities import VERSION_WITHOUT_CAPABILITIES
|
||||
@@ -784,6 +785,49 @@ class xmlserver(KerberosWSGIExecutioner):
|
||||
return dump.encode('utf-8')
|
||||
|
||||
|
||||
class jsonserver_i18n_messages(jsonserver):
|
||||
"""
|
||||
JSON RPC server for i18n messages only.
|
||||
"""
|
||||
|
||||
key = '/i18n_messages'
|
||||
|
||||
def not_allowed(self, start_response):
|
||||
status = '405 Method Not Allowed'
|
||||
headers = [('Allow', 'POST')]
|
||||
response = b''
|
||||
|
||||
logger.debug('jsonserver_i18n_messages: %s', status)
|
||||
start_response(status, headers)
|
||||
return [response]
|
||||
|
||||
def forbidden(self, start_response):
|
||||
status = '403 Forbidden'
|
||||
headers = []
|
||||
response = b'Invalid RPC command'
|
||||
|
||||
logger.debug('jsonserver_i18n_messages: %s', status)
|
||||
start_response(status, headers)
|
||||
return [response]
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
logger.debug('WSGI jsonserver_i18n_messages.__call__:')
|
||||
if environ['REQUEST_METHOD'] != 'POST':
|
||||
return self.not_allowed(start_response)
|
||||
|
||||
data = read_input(environ)
|
||||
unmarshal_data = super(jsonserver_i18n_messages, self
|
||||
).unmarshal(data)
|
||||
name = unmarshal_data[0] if unmarshal_data else ''
|
||||
if name != 'i18n_messages':
|
||||
return self.forbidden(start_response)
|
||||
|
||||
environ['wsgi.input'] = BytesIO(data.encode('utf-8'))
|
||||
response = super(jsonserver_i18n_messages, self
|
||||
).__call__(environ, start_response)
|
||||
return response
|
||||
|
||||
|
||||
class jsonserver_session(jsonserver, KerberosSession):
|
||||
"""
|
||||
JSON RPC server protected with session auth.
|
||||
|
||||
Reference in New Issue
Block a user