You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.9 KiB

  1. ###################################################################################
  2. #
  3. # Copyright (C) 2017 MuK IT GmbH
  4. #
  5. # Odoo Proprietary License v1.0
  6. #
  7. # This software and associated files (the "Software") may only be used
  8. # (executed, modified, executed after modifications) if you have
  9. # purchased a valid license from the authors, typically via Odoo Apps,
  10. # or if you have received a written agreement from the authors of the
  11. # Software (see the COPYRIGHT file).
  12. #
  13. # You may develop Odoo modules that use the Software as a library
  14. # (typically by depending on it, importing it and using its resources),
  15. # but without copying any source code or material from the Software.
  16. # You may distribute those modules under the license of your choice,
  17. # provided that this license is compatible with the terms of the Odoo
  18. # Proprietary License (For example: LGPL, MIT, or proprietary licenses
  19. # similar to this one).
  20. #
  21. # It is forbidden to publish, distribute, sublicense, or sell copies of
  22. # the Software or modified copies of the Software.
  23. #
  24. # The above copyright notice and this permission notice must be included
  25. # in all copies or substantial portions of the Software.
  26. #
  27. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  28. # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29. # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  30. # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31. # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  32. # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  33. # DEALINGS IN THE SOFTWARE.
  34. #
  35. ###################################################################################
  36. import os
  37. import time
  38. import hmac
  39. import hashlib
  40. import logging
  41. from odoo.tests import common, HOST, PORT
  42. _path = os.path.dirname(os.path.dirname(__file__))
  43. _logger = logging.getLogger(__name__)
  44. class HttpCase(common.HttpCase):
  45. def csrf_token(self, time_limit=3600):
  46. token = self.session.sid
  47. max_ts = '' if not time_limit else int(time.time() + time_limit)
  48. msg = '%s%s' % (token, max_ts)
  49. secret = self.env['ir.config_parameter'].sudo().get_param('database.secret')
  50. assert secret, "CSRF protection requires a configured database secret"
  51. hm = hmac.new(secret.encode('ascii'), msg.encode('utf-8'), hashlib.sha1).hexdigest()
  52. return '%so%s' % (hm, max_ts)
  53. def url_open(self, url, data=None, timeout=10, csrf=False):
  54. if url.startswith('/'):
  55. url = "http://%s:%s%s" % (HOST, PORT, url)
  56. if data:
  57. if csrf:
  58. data.update({'csrf_token': self.csrf_token()})
  59. return self.opener.post(url, data=data, timeout=timeout)
  60. return self.opener.get(url, timeout=timeout)