From aa1a93adb47f97a0705ea17f29528395779c5549 Mon Sep 17 00:00:00 2001 From: MuK IT GmbH Date: Mon, 15 Oct 2018 21:32:55 +0000 Subject: [PATCH] publish muk_utils - 12.0 --- muk_utils/__manifest__.py | 2 +- muk_utils/tests/common.py | 68 +++++++++++++++++++++++++++++++++++++ muk_utils/tools/__init__.py | 3 +- muk_utils/tools/file.py | 6 +++- muk_utils/tools/http.py | 35 +++++++++++++++++++ 5 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 muk_utils/tests/common.py create mode 100644 muk_utils/tools/http.py diff --git a/muk_utils/__manifest__.py b/muk_utils/__manifest__.py index d510844..d1392b3 100644 --- a/muk_utils/__manifest__.py +++ b/muk_utils/__manifest__.py @@ -20,7 +20,7 @@ { "name": "MuK Utils", "summary": """Utility Features""", - "version": '12.0.1.1.0', + "version": '12.0.1.1.1', "category": 'Extra Tools', "license": "AGPL-3", "author": "MuK IT", diff --git a/muk_utils/tests/common.py b/muk_utils/tests/common.py new file mode 100644 index 0000000..ccf10ef --- /dev/null +++ b/muk_utils/tests/common.py @@ -0,0 +1,68 @@ +################################################################################### +# +# Copyright (C) 2017 MuK IT GmbH +# +# Odoo Proprietary License v1.0 +# +# This software and associated files (the "Software") may only be used +# (executed, modified, executed after modifications) if you have +# purchased a valid license from the authors, typically via Odoo Apps, +# or if you have received a written agreement from the authors of the +# Software (see the COPYRIGHT file). +# +# You may develop Odoo modules that use the Software as a library +# (typically by depending on it, importing it and using its resources), +# but without copying any source code or material from the Software. +# You may distribute those modules under the license of your choice, +# provided that this license is compatible with the terms of the Odoo +# Proprietary License (For example: LGPL, MIT, or proprietary licenses +# similar to this one). +# +# It is forbidden to publish, distribute, sublicense, or sell copies of +# the Software or modified copies of the Software. +# +# The above copyright notice and this permission notice must be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +################################################################################### + +import os +import time +import hmac +import hashlib +import logging + +from odoo.tests import common, HOST, PORT + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +class HttpCase(common.HttpCase): + + def csrf_token(self, time_limit=3600): + token = self.session.sid + max_ts = '' if not time_limit else int(time.time() + time_limit) + msg = '%s%s' % (token, max_ts) + secret = self.env['ir.config_parameter'].sudo().get_param('database.secret') + assert secret, "CSRF protection requires a configured database secret" + hm = hmac.new(secret.encode('ascii'), msg.encode('utf-8'), hashlib.sha1).hexdigest() + return '%so%s' % (hm, max_ts) + + def url_open(self, url, data=None, timeout=10, csrf=False): + if url.startswith('/'): + url = "http://%s:%s%s" % (HOST, PORT, url) + if data: + if csrf: + data.update({'csrf_token': self.csrf_token()}) + return self.opener.post(url, data=data, timeout=timeout) + return self.opener.get(url, timeout=timeout) + + \ No newline at end of file diff --git a/muk_utils/tools/__init__.py b/muk_utils/tools/__init__.py index 5bd208c..e768f4b 100644 --- a/muk_utils/tools/__init__.py +++ b/muk_utils/tools/__init__.py @@ -20,4 +20,5 @@ from . import file from . import json from . import cache -from . import types \ No newline at end of file +from . import types +from . import http \ No newline at end of file diff --git a/muk_utils/tools/file.py b/muk_utils/tools/file.py index 308f8c8..13ab100 100644 --- a/muk_utils/tools/file.py +++ b/muk_utils/tools/file.py @@ -18,13 +18,16 @@ ################################################################################### import os +import re import io +import sys import base64 import shutil import urllib import logging import tempfile import mimetypes +import unicodedata from odoo.tools.mimetypes import guess_mimetype @@ -61,7 +64,8 @@ def unique_name(name, names, escape_suffix=False): return name def unique_files(files): - ufiles = unames = [] + ufiles = [] + unames = [] for file in files: uname = unique_name(file[0], unames, escape_suffix=True) ufiles.append((uname, file[1])) diff --git a/muk_utils/tools/http.py b/muk_utils/tools/http.py new file mode 100644 index 0000000..a8c5ae6 --- /dev/null +++ b/muk_utils/tools/http.py @@ -0,0 +1,35 @@ +################################################################################### +# +# Copyright (C) 2018 MuK IT GmbH +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +import logging + +from werkzeug.datastructures import CombinedMultiDict + +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# Werkzeug Helper +#---------------------------------------------------------- + +def request_params(httprequest): + return CombinedMultiDict([ + httprequest.args, + httprequest.form, + httprequest.files + ]) \ No newline at end of file