diff options
| author | Jairo Llopis <Yajo@users.noreply.github.com> | 2018-05-09 08:46:15 +0100 |
|---|---|---|
| committer | xmo-odoo <xmo@odoo.com> | 2018-05-09 09:46:15 +0200 |
| commit | 285ead28e31ca54e9629d5153d0d03d7b4951535 (patch) | |
| tree | 3de03167228179eff72a3d12f2b42cd11c0d7803 /odoo/addons/base/controllers/rpc.py | |
| parent | e9e8fd24cf77397d57b73fb6ceb9befd326de19b (diff) | |
[IMP] Handle XMLRPC calls from standard controllers
This way, XMLRPC calls can get request details form the standard
`odoo.http.request` system.
Move jsonrpc to the same controller while at it, for coherence.
Fix #24183
Diffstat (limited to 'odoo/addons/base/controllers/rpc.py')
| -rw-r--r-- | odoo/addons/base/controllers/rpc.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/odoo/addons/base/controllers/rpc.py b/odoo/addons/base/controllers/rpc.py new file mode 100644 index 00000000000..f58bcda1605 --- /dev/null +++ b/odoo/addons/base/controllers/rpc.py @@ -0,0 +1,44 @@ +from xmlrpc.client import dumps, loads + +from werkzeug.wrappers import Response + +from odoo.http import Controller, dispatch_rpc, request, route +from odoo.service import wsgi_server + + +class RPC(Controller): + """Handle RPC connections.""" + + def _xmlrpc(self, service): + """Common method to handle an XML-RPC request.""" + data = request.httprequest.get_data() + params, method = loads(data) + result = dispatch_rpc(service, method, params) + return dumps((result,), methodresponse=1, allow_none=False) + + @route("/xmlrpc/<service>", auth="none", method="POST", csrf=False) + def xmlrpc_1(self, service): + """XML-RPC service that returns faultCode as strings. + + This entrypoint is historical and non-compliant, but kept for + backwards-compatibility. + """ + try: + response = self._xmlrpc(service) + except Exception as error: + response = wsgi_server.xmlrpc_handle_exception_string(error) + return Response(response=response, mimetype='text/xml') + + @route("/xmlrpc/2/<service>", auth="none", method="POST", csrf=False) + def xmlrpc_2(self, service): + """XML-RPC service that returns faultCode as int.""" + try: + response = self._xmlrpc(service) + except Exception as error: + response = wsgi_server.xmlrpc_handle_exception_int(error) + return Response(response=response, mimetype='text/xml') + + @route('/jsonrpc', type='json', auth="none") + def jsonrpc(self, service, method, args): + """ Method used by client APIs to contact OpenERP. """ + return dispatch_rpc(service, method, args) |
