%define name python-txtorcon %define version 20.0.0 %define unmangled_version 20.0.0 %define unmangled_version 20.0.0 %define release 1 Summary: Twisted-based Tor controller client, with state-tracking and configuration abstractions. https://txtorcon.readthedocs.org https://github.com/meejah/txtorcon Name: %{name} Version: %{version} Release: %{release} Source0: %{name}-%{unmangled_version}.tar.gz License: MIT Group: Development/Libraries BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot Prefix: %{_prefix} BuildArch: noarch Vendor: meejah Url: https://github.com/meejah/txtorcon BuildRequires: python36 BuildRequires: platform-python-devel Requires: python36 %description .. _NOTE: see docs/index.rst for the starting-point .. _ALSO: https://txtorcon.readthedocs.org for rendered docs .. image:: https://travis-ci.org/meejah/txtorcon.png?branch=master :target: https://www.travis-ci.org/meejah/txtorcon :alt: travis .. image:: https://coveralls.io/repos/meejah/txtorcon/badge.png :target: https://coveralls.io/r/meejah/txtorcon :alt: coveralls .. image:: http://codecov.io/github/meejah/txtorcon/coverage.svg?branch=master :target: http://codecov.io/github/meejah/txtorcon?branch=master :alt: codecov .. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable :target: https://txtorcon.readthedocs.io/en/stable :alt: ReadTheDocs .. image:: https://readthedocs.org/projects/txtorcon/badge/?version=latest :target: https://txtorcon.readthedocs.io/en/latest :alt: ReadTheDocs .. image:: https://landscape.io/github/meejah/txtorcon/master/landscape.svg?style=flat :target: https://landscape.io/github/meejah/txtorcon/master :alt: Code Health txtorcon ======== - **docs**: https://txtorcon.readthedocs.org or http://timaq4ygg2iegci7.onion - **code**: https://github.com/meejah/txtorcon - ``torsocks git clone git://timaq4ygg2iegci7.onion/txtorcon.git`` - MIT-licensed; - Python 2.7, PyPy 5.0.0+, Python 3.5+; - depends on `Twisted`_, `Automat `_, (and the `ipaddress `_ backport for non Python 3) Ten Thousand Feet ----------------- txtorcon is an implementation of the `control-spec `_ for `Tor `_ using the `Twisted`_ networking library for `Python `_. This is useful for writing utilities to control or make use of Tor in event-based Python programs. If your Twisted program supports endpoints (like ``twistd`` does) your server or client can make use of Tor immediately, with no code changes. Start your own Tor or connect to one and get live stream, circuit, relay updates; read and change config; monitor events; build circuits; create onion services; etcetera (`ReadTheDocs `_). Some Possibly Motivational Example Code --------------------------------------- `download `_ (also `python2 style `_) .. code:: python from twisted.internet.task import react from twisted.internet.defer import inlineCallbacks, ensureDeferred from twisted.internet.endpoints import UNIXClientEndpoint import treq import txtorcon async def main(reactor): tor = await txtorcon.connect( reactor, UNIXClientEndpoint(reactor, "/var/run/tor/control") ) print("Connected to Tor version {}".format(tor.version)) url = u'https://www.torproject.org:443' print(u"Downloading {}".format(repr(url))) resp = await treq.get(url, agent=tor.web_agent()) print(u" {} bytes".format(resp.length)) data = await resp.text() print(u"Got {} bytes:\n{}\n[...]{}".format( len(data), data[:120], data[-120:], )) print(u"Creating a circuit") state = await tor.create_state() circ = await state.build_circuit() await circ.when_built() print(u" path: {}".format(" -> ".join([r.ip for r in circ.path]))) print(u"Downloading meejah's public key via above circuit...") config = await tor.get_config() resp = await treq.get( u'https://meejah.ca/meejah.asc', agent=circ.web_agent(reactor, config.socks_endpoint(reactor)), ) data = await resp.text() print(data) @react def _main(reactor): return ensureDeferred(main(reactor)) Try It Now On Debian/Ubuntu --------------------------- For example, serve some files via an onion service (*aka* hidden service): .. code-block:: shell-session $ sudo apt-get install --install-suggests python3-txtorcon $ twistd -n web --port "onion:80" --path ~/public_html Read More --------- All the documentation starts `in docs/index.rst `_. Also hosted at `txtorcon.rtfd.org `_. You'll want to start with `the introductions `_ (`hosted at RTD `_). .. _Twisted: https://twistedmatrix.com/trac %prep %setup -n txtorcon-%{unmangled_version} pathfix.py -pni "%{__python3} %{py3_shbang_opts}" . whatnot/file-with-dashes.py else/no_py_extension || true %build python3 setup.py build %install python3 setup.py install --single-version-externally-managed -O1 --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES %clean rm -rf $RPM_BUILD_ROOT %files -f INSTALLED_FILES %defattr(-,root,root)