plugin upload, XEP-0363: code modernisation + preparation for extension:
- use of async/await syntax - fileUpload's options are now serialised, allowing non string values - (XEP-0363) Slot is now a dataclass, so it can be modified by other plugins - (XEP-0363) Moved SSL related code to the new tools.web module - (XEP-0363) added `XEP-0363_upload_size` and `XEP-0363_upload` trigger points - a Deferred is not used anymore for `progress_id`, the value is directly returned
This commit is contained in:
parent
dfed376f62
commit
edbee4d719
1 changed files with 228 additions and 225 deletions
67
sat/tools/web.py
Normal file
67
sat/tools/web.py
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# SàT: an XMPP client
|
||||
# Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org)
|
||||
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
from OpenSSL import SSL
|
||||
from zope.interface import implementer
|
||||
from treq.client import HTTPClient
|
||||
from twisted.internet.interfaces import IOpenSSLClientConnectionCreator
|
||||
from twisted.internet import reactor, ssl
|
||||
from twisted.web import iweb
|
||||
from twisted.web import client as http_client
|
||||
from sat.core.log import getLogger
|
||||
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
SSLError = SSL.Error
|
||||
|
||||
|
||||
@implementer(IOpenSSLClientConnectionCreator)
|
||||
class NoCheckConnectionCreator(object):
|
||||
def __init__(self, hostname, ctx):
|
||||
self._ctx = ctx
|
||||
|
||||
def clientConnectionForTLS(self, tlsProtocol):
|
||||
context = self._ctx
|
||||
connection = SSL.Connection(context, None)
|
||||
connection.set_app_data(tlsProtocol)
|
||||
return connection
|
||||
|
||||
|
||||
@implementer(iweb.IPolicyForHTTPS)
|
||||
class NoCheckContextFactory(ssl.ClientContextFactory):
|
||||
"""Context factory which doesn't do TLS certificate check
|
||||
|
||||
/!\\ it's obvisously a security flaw to use this class,
|
||||
and it should be used only with explicit agreement from the end used
|
||||
"""
|
||||
|
||||
def creatorForNetloc(self, hostname, port):
|
||||
log.warning(
|
||||
"TLS check disabled for {host} on port {port}".format(
|
||||
host=hostname, port=port
|
||||
)
|
||||
)
|
||||
certificateOptions = ssl.CertificateOptions(trustRoot=None)
|
||||
return NoCheckConnectionCreator(hostname, certificateOptions.getContext())
|
||||
|
||||
|
||||
#: following treq doesn't check TLS, obviously it is unsecure and should not be used
|
||||
#: without explicit warning
|
||||
treq_no_ssl = HTTPClient(http_client.Agent(reactor, NoCheckContextFactory))
|
||||
Loading…
Reference in a new issue