├── .gitattributes ├── .github └── workflows │ └── build_then_pypi.yml ├── .gitignore ├── Docker ├── Dockerfile └── theonionbox.cfg ├── FreeBSD └── theonionbox.sh ├── LICENSE ├── README.md ├── cc ├── ControlCenter │ ├── __init__.pyj │ ├── cards │ │ ├── __init__.pyj │ │ └── node.pyj │ ├── controlcenter.pyj │ ├── controls │ │ ├── __init__.pyj │ │ ├── base.pyj │ │ ├── connection.pyj │ │ ├── flags.pyj │ │ ├── smoothie.pyj │ │ ├── version.pyj │ │ └── version_check.pyj │ ├── dialogs │ │ ├── __init__.pyj │ │ ├── about.pyj │ │ ├── base.pyj │ │ ├── launcher.pyj │ │ ├── license.pyj │ │ ├── login.pyj │ │ └── properties.pyj │ └── utils │ │ ├── __init__.pyj │ │ ├── auth.pyj │ │ ├── format_bytes.pyj │ │ ├── make_id.pyj │ │ ├── uuid.pyj │ │ └── variables.pyj └── lib │ └── RapydSmoothie │ ├── __init__.pyj │ ├── smoothie.pyj │ ├── timeseries.pyj │ └── util.pyj ├── docs ├── description.rst └── images │ ├── bandwidth.png │ ├── cc.png │ ├── configuration.png │ ├── connectionerror.png │ ├── control.png │ ├── generalinfo.png │ ├── header.png │ ├── hidden.png │ ├── local.png │ ├── location.png │ ├── login.png │ ├── messages.png │ ├── network.png │ ├── pclogo.svg │ ├── raspbian.png │ └── weights.png ├── init.d └── theonionbox.sh ├── setup.py ├── support └── osxtemp │ └── libsmc │ ├── LICENSE │ ├── Makefile │ ├── include │ └── smc.h │ └── src │ └── smc.c ├── systemd └── theonionbox.service └── theonionbox ├── __init__.py ├── __main__.py ├── config └── theonionbox.example ├── css ├── box.css └── cc.css ├── libs ├── LatoLatin │ ├── OFL.txt │ ├── README-WEB.txt │ ├── fonts │ │ ├── LatoLatin-Black.eot │ │ ├── LatoLatin-Black.ttf │ │ ├── LatoLatin-Black.woff │ │ ├── LatoLatin-Black.woff2 │ │ ├── LatoLatin-BlackItalic.eot │ │ ├── LatoLatin-BlackItalic.ttf │ │ ├── LatoLatin-BlackItalic.woff │ │ ├── LatoLatin-BlackItalic.woff2 │ │ ├── LatoLatin-Bold.eot │ │ ├── LatoLatin-Bold.ttf │ │ ├── LatoLatin-Bold.woff │ │ ├── LatoLatin-Bold.woff2 │ │ ├── LatoLatin-BoldItalic.eot │ │ ├── LatoLatin-BoldItalic.ttf │ │ ├── LatoLatin-BoldItalic.woff │ │ ├── LatoLatin-BoldItalic.woff2 │ │ ├── LatoLatin-Hairline.eot │ │ ├── LatoLatin-Hairline.ttf │ │ ├── LatoLatin-Hairline.woff │ │ ├── LatoLatin-Hairline.woff2 │ │ ├── LatoLatin-HairlineItalic.eot │ │ ├── LatoLatin-HairlineItalic.ttf │ │ ├── LatoLatin-HairlineItalic.woff │ │ ├── LatoLatin-HairlineItalic.woff2 │ │ ├── LatoLatin-Heavy.eot │ │ ├── LatoLatin-Heavy.ttf │ │ ├── LatoLatin-Heavy.woff │ │ ├── LatoLatin-Heavy.woff2 │ │ ├── LatoLatin-HeavyItalic.eot │ │ ├── LatoLatin-HeavyItalic.ttf │ │ ├── LatoLatin-HeavyItalic.woff │ │ ├── LatoLatin-HeavyItalic.woff2 │ │ ├── LatoLatin-Italic.eot │ │ ├── LatoLatin-Italic.ttf │ │ ├── LatoLatin-Italic.woff │ │ ├── LatoLatin-Italic.woff2 │ │ ├── LatoLatin-Light.eot │ │ ├── LatoLatin-Light.ttf │ │ ├── LatoLatin-Light.woff │ │ ├── LatoLatin-Light.woff2 │ │ ├── LatoLatin-LightItalic.eot │ │ ├── LatoLatin-LightItalic.ttf │ │ ├── LatoLatin-LightItalic.woff │ │ ├── LatoLatin-LightItalic.woff2 │ │ ├── LatoLatin-Medium.eot │ │ ├── LatoLatin-Medium.ttf │ │ ├── LatoLatin-Medium.woff │ │ ├── LatoLatin-Medium.woff2 │ │ ├── LatoLatin-MediumItalic.eot │ │ ├── LatoLatin-MediumItalic.ttf │ │ ├── LatoLatin-MediumItalic.woff │ │ ├── LatoLatin-MediumItalic.woff2 │ │ ├── LatoLatin-Regular.eot │ │ ├── LatoLatin-Regular.ttf │ │ ├── LatoLatin-Regular.woff │ │ ├── LatoLatin-Regular.woff2 │ │ ├── LatoLatin-Semibold.eot │ │ ├── LatoLatin-Semibold.ttf │ │ ├── LatoLatin-Semibold.woff │ │ ├── LatoLatin-Semibold.woff2 │ │ ├── LatoLatin-SemiboldItalic.eot │ │ ├── LatoLatin-SemiboldItalic.ttf │ │ ├── LatoLatin-SemiboldItalic.woff │ │ ├── LatoLatin-SemiboldItalic.woff2 │ │ ├── LatoLatin-Thin.eot │ │ ├── LatoLatin-Thin.ttf │ │ ├── LatoLatin-Thin.woff │ │ ├── LatoLatin-Thin.woff2 │ │ ├── LatoLatin-ThinItalic.eot │ │ ├── LatoLatin-ThinItalic.ttf │ │ ├── LatoLatin-ThinItalic.woff │ │ └── LatoLatin-ThinItalic.woff2 │ └── latolatinfonts.css ├── bootstrap-4.3.1 │ ├── css │ │ ├── bootstrap-grid.css │ │ ├── bootstrap-grid.css.map │ │ ├── bootstrap-grid.min.css │ │ ├── bootstrap-grid.min.css.map │ │ ├── bootstrap-reboot.css │ │ ├── bootstrap-reboot.css.map │ │ ├── bootstrap-reboot.min.css │ │ ├── bootstrap-reboot.min.css.map │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.css.map │ └── js │ │ ├── bootstrap.bundle.js │ │ ├── bootstrap.bundle.js.map │ │ ├── bootstrap.bundle.min.js │ │ ├── bootstrap.bundle.min.js.map │ │ ├── bootstrap.js │ │ ├── bootstrap.js.map │ │ ├── bootstrap.min.js │ │ └── bootstrap.min.js.map ├── fontawesome-free-5.11.2-web │ ├── LICENSE.txt │ ├── css │ │ ├── all.css │ │ ├── all.min.css │ │ ├── brands.css │ │ ├── brands.min.css │ │ ├── fontawesome.css │ │ ├── fontawesome.min.css │ │ ├── regular.css │ │ ├── regular.min.css │ │ ├── solid.css │ │ ├── solid.min.css │ │ ├── svg-with-js.css │ │ ├── svg-with-js.min.css │ │ ├── v4-shims.css │ │ └── v4-shims.min.css │ └── webfonts │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.svg │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.svg │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.svg │ │ ├── fa-solid-900.ttf │ │ ├── fa-solid-900.woff │ │ └── fa-solid-900.woff2 ├── glide-3.4.1 │ ├── LICENSE │ └── dist │ │ ├── css │ │ ├── glide.core.css │ │ ├── glide.core.min.css │ │ ├── glide.theme.css │ │ └── glide.theme.min.css │ │ ├── glide.esm.js │ │ ├── glide.js │ │ ├── glide.min.js │ │ └── glide.modular.esm.js ├── jquery-3.4.1 │ └── jquery-3.4.1.min.js ├── jquery.pep-0.6.10 │ └── jquery.pep.js ├── js-md5-0.7.3 │ └── md5.js ├── scrollMonitor-1.2.4 │ ├── LICENSE │ ├── scrollMonitor.js │ └── scrollMonitor.js.map └── smoothie-1.36 │ ├── LICENSE.txt │ └── smoothie.js ├── pages ├── cc.html └── index.html ├── scripts ├── authrequest_basic.js ├── authrequest_digest.js ├── box.js ├── cc.js └── chart.js ├── sections ├── accounting │ ├── accounting.html │ └── accounting.js ├── config │ ├── config.css │ ├── config.html │ └── config.js ├── error │ └── error.html ├── family │ ├── family.html │ └── family.js ├── header │ ├── header.css │ └── header.html ├── hiddenservice │ ├── hiddenservice.css │ ├── hiddenservice.html │ └── hiddenservice.js ├── host │ ├── host.html │ └── host.js ├── license │ └── license.html ├── local │ ├── local.html │ └── local.js ├── login │ ├── login.css │ ├── login.html │ └── login.js ├── messages │ ├── messages.css │ ├── messages.html │ └── messages.js ├── monitor │ ├── monitor.css │ ├── monitor.html │ └── monitor.js ├── network │ ├── network.html │ └── network.js ├── network_bandwidth │ ├── network_bandwidth.html │ └── network_bandwidth.js ├── network_weights │ ├── network_weights.html │ └── network_weights.js └── transport │ ├── transport.html │ └── transport.js ├── stamp.py ├── theonionbox.py ├── tob ├── __init__.py ├── apps │ ├── __init__.py │ ├── base.py │ ├── controlcenter.py │ └── dashboard.py ├── authenticate.py ├── box.py ├── ccfile.py ├── config.py ├── configcollector.py ├── credits.py ├── deviation.py ├── geoip.py ├── libraries │ ├── __init__.py │ ├── fontawesome.py │ └── latolatin.py ├── license.py ├── livedata │ ├── __init__.py │ └── recorder.py ├── log.py ├── manpage.py ├── nodes │ ├── __init__.py │ ├── manager.py │ └── node.py ├── onionoo.py ├── persistor.py ├── plugin │ ├── __init__.py │ └── session.py ├── proxy.py ├── scheduler.py ├── session.py ├── simplecontroller.py ├── stam │ ├── __init__.py │ ├── control.py │ └── socket.py ├── static.py ├── system │ ├── __init__.py │ ├── darwin │ │ ├── __init__.py │ │ ├── osxtemp │ │ │ ├── __init__.py │ │ │ └── libsmc.dylib │ │ └── systray.py │ ├── freebsd.py │ ├── linux.py │ └── windows │ │ ├── __init__.py │ │ └── uptime │ │ ├── license.txt │ │ └── uptime.exe ├── template_tools.py ├── terminalsize.py ├── transportation.py ├── utils │ ├── __init__.py │ └── attrdict.py └── version.py └── tor ├── tor.1.html └── tor.1.ndx /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the end-of-line behavior, to get rid of an 'issue' in bottle's SimpleTemplate Engine 2 | *.html text eol=lf 3 | *.css text eol=lf 4 | *.js text eol=lf 5 | -------------------------------------------------------------------------------- /.github/workflows/build_then_pypi.yml: -------------------------------------------------------------------------------- 1 | name: Create sdist & upload to PyPi 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | build: 9 | 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - uses: actions/checkout@master 14 | 15 | - uses: actions/setup-python@v1 16 | with: 17 | python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax 18 | architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified 19 | 20 | - name: Pip grip (dependency of setup.py) 21 | run: python -m pip install grip 22 | 23 | - name: Install Node.js 24 | uses: actions/setup-node@v1 25 | 26 | - name: Run setup.py to create sdist 27 | run: python setup.py sdist 28 | 29 | - name: Publish TheOnionBox distribution to PyPI 30 | uses: pypa/gh-action-pypi-publish@master 31 | with: 32 | user: __token__ 33 | password: ${{ secrets.pypi_theonionbox }} 34 | 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /theonionbox/scripts/jquery-1.12.2.min.map 2 | /.pypirc 3 | /theonionbox/config/myonionbox.cfg 4 | /.idea 5 | # Byte-compiled / optimized / DLL files 6 | __pycache__/ 7 | *.py[cod] 8 | 9 | # C extensions 10 | *.so 11 | 12 | # Distribution / packaging 13 | .Python 14 | env/ 15 | build/ 16 | develop-eggs/ 17 | dist/ 18 | downloads/ 19 | eggs/ 20 | /xtor 21 | .eggs/ 22 | 23 | lib64/ 24 | parts/ 25 | sdist/ 26 | var/ 27 | *.egg-info/ 28 | .installed.cfg 29 | *.egg 30 | 31 | # PyInstaller 32 | # Usually these files are written by a python script from a template 33 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 34 | *.manifest 35 | *.spec 36 | 37 | # Installer logs 38 | pip-log.txt 39 | pip-delete-this-directory.txt 40 | 41 | # Unit test / coverage reports 42 | htmlcov/ 43 | .tox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *,cover 50 | 51 | # Translations 52 | *.mo 53 | *.pot 54 | 55 | # Django stuff: 56 | *.log 57 | 58 | # Sphinx documentation 59 | docs/_build/ 60 | 61 | # PyBuilder 62 | target/ 63 | theonionbox/theonionbox.ltd 64 | 65 | # Special to The Onion Box 66 | # Glide Library comes with a 'dist' directory that we need! 67 | !theonionbox/libs/glide-*/dist/ 68 | /node_modules/ 69 | 70 | # Rapydscript 71 | *.pyj-cached -------------------------------------------------------------------------------- /Docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.6 2 | 3 | EXPOSE 8080 4 | 5 | RUN pip install pip --upgrade && pip install theonionbox 6 | 7 | COPY theonionbox.cfg /usr/local/lib/python3.6/site-packages/theonionbox 8 | 9 | ENTRYPOINT ["/usr/local/bin/theonionbox", "-c", "/usr/local/lib/python3.6/site-packages/theonionbox/theonionbox.cfg"] 10 | -------------------------------------------------------------------------------- /FreeBSD/theonionbox.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # PROVIDE: theonionbox 4 | # REQUIRE: DAEMON FILESYSTEMS 5 | # BEFORE: LOGIN 6 | 7 | # FreeBSD tutorial for rc.d: https://www.freebsd.org/doc/en_US.ISO8859-1/articles/rc-scripting/rcng-dummy.html 8 | 9 | # Add the following line to /etc/rc.conf to enable TheOnionBox. 10 | # theonionbox_enable (bool): Set it to "YES" to enable TheOnionBox. Default: NO 11 | 12 | # To achieve this, run the following line from the shell: 13 | # echo “theonionbox_enable=YES” >>/etc/rc.conf 14 | 15 | . /etc/rc.subr 16 | 17 | name="theonionbox" 18 | rcvar=theonionbox_enable 19 | 20 | load_rc_config ${name} 21 | 22 | : ${theonionbox_enable="NO"} 23 | : ${theonionbox_pidfile="/var/run/${name}.pid"} 24 | 25 | # 26 | # Set the following lines according to your installation: 27 | # 28 | 29 | # theonionbox_dir (str): Points to your theonionbox directory 30 | # Default: /your/path/to/theonionbox ... which you obviously have to alter! 31 | : ${theonionbox_dir="/your/path/to/theonionbox"} 32 | 33 | # theonionbox_start_args (str): Command line parameters to be provided to theonionbox at start 34 | # Refer to README for further details 35 | # Default: (not used) 36 | # Example: To define a configuration file 37 | # : ${theonionbox_start_args="--config='${theonionbox_dir}/config/theonionbox.example'"} 38 | # Another example: To switch on DEBUG mode 39 | # : ${theonionbox_start_args="-d"} 40 | 41 | # theonionbox_user (str): TheOnionBox daemon user. 42 | # Default: _tor 43 | : ${theonionbox_user="_tor"} 44 | 45 | # required_files=${theonionbox_conf} 46 | required_dirs=${theonionbox_dir} 47 | pidfile=${theonionbox_pidfile} 48 | 49 | # Please ensure that this points to the python executable you intend to use! 50 | # If you receive a "WARNING: $command_interpreter /[...]/python != /[...]/python3" (or similar), you most probably defined a path to a symlink. 51 | # To avoid this WARNING, you should reference directly to the executable! 52 | command_interpreter="${theonionbox_dir}/bin/python" 53 | 54 | # That's our script 55 | command="${theonionbox_dir}/bin/theonionbox" 56 | procname="${command}" 57 | start_cmd="/usr/sbin/daemon -S -T 'theonionbox' -u ${theonionbox_user} -p ${pidfile} ${command} ${theonionbox_start_args}" 58 | 59 | # Let's go! 60 | run_rc_command "$1" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 - 2020 Ralph Wetzel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /cc/ControlCenter/__init__.pyj: -------------------------------------------------------------------------------- 1 | from controlcenter import ControlCenter -------------------------------------------------------------------------------- /cc/ControlCenter/cards/__init__.pyj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/cc/ControlCenter/cards/__init__.pyj -------------------------------------------------------------------------------- /cc/ControlCenter/controls/__init__.pyj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/cc/ControlCenter/controls/__init__.pyj -------------------------------------------------------------------------------- /cc/ControlCenter/controls/base.pyj: -------------------------------------------------------------------------------- 1 | from utils.make_id import make_id as MakeID 2 | 3 | class Base(): 4 | 5 | def __init__(self, id, tag): 6 | self.id = id 7 | self.tag = tag 8 | 9 | def update(self, value): 10 | console.log("Base:update() Not implemented...") 11 | 12 | def make_id(self, tag=None, jquery=True): 13 | return MakeID(self.id, tag, jquery) -------------------------------------------------------------------------------- /cc/ControlCenter/controls/connection.pyj: -------------------------------------------------------------------------------- 1 | from controls.base import Base as ControlBase 2 | 3 | class Connection(ControlBase): 4 | 5 | def __init__(self, id, tag='connection'): 6 | ControlBase.__init__(self, id, tag) 7 | 8 | html = """ 9 | 11 | 13 | 15 | 17 | """ 18 | 19 | html = str.format(html, id=self.id, tag=self.tag) 20 | $(self.make_id(self.tag)).html(html) 21 | 22 | self.last = None 23 | 24 | def update(self, data): 25 | 26 | if data is None or data == self.last: 27 | return 28 | 29 | icons = { 30 | 'h': 'home', 31 | 'p': 'password', 32 | 'c': 'cookie', 33 | 'x': 'proxy' 34 | } 35 | 36 | for i in icons: 37 | icon = $(self.make_id(self.tag + '.' + icons[i])) 38 | if i in data: 39 | if icon.is(':hidden'): 40 | icon.show(1000) 41 | icon.tooltip({'container': 'body', 42 | 'trigger': 'click hover'}) 43 | else: 44 | if icon.is(':visible'): 45 | icon.hide(500) 46 | icon.tooltip('dispose') 47 | 48 | self.last = data -------------------------------------------------------------------------------- /cc/ControlCenter/controls/version.pyj: -------------------------------------------------------------------------------- 1 | from controls.base import Base as ControlBase 2 | 3 | class Version(ControlBase): 4 | 5 | def __init__(self, id, tag): 6 | 7 | ControlBase.__init__(self, id, tag) 8 | 9 | # print(self.tag, self.make_id(self.tag)) 10 | 11 | $me = $(self.make_id(self.tag)) 12 | # assert($me.length > 0) 13 | 14 | html = """ 15 |
16 | 17 | 18 |
19 | 20 | """ 21 | 22 | html = str.format(html, id=self.id, tag=self.tag) 23 | $me.html(html) 24 | 25 | def update(self, version, mode = '', latest = None, flag = None): 26 | 27 | if (version == self.version and 28 | mode == self.mode and 29 | latest == self.latest and 30 | flag == self.flag): 31 | return True 32 | 33 | red_flags = ['obsolete', 'old', 'unrecommended', 'unknown'] 34 | 35 | $version = $(self.make_id(self.tag + '.version')) 36 | $version.text('Tor ' + version) 37 | 38 | $check = $(self.make_id(self.tag + '.check')) 39 | $check.tooltip('dispose') 40 | 41 | if latest is None or (version == latest and flag not in red_flags): 42 | if $check.is(':visible'): 43 | $check.hide(500) 44 | 45 | else: 46 | html = """ 47 | 48 | """ 49 | color = 'black' 50 | title = '' 51 | 52 | if flag in red_flags: 53 | color = 'tomato' 54 | if len(title) > 0: 55 | title += '
' 56 | title += 'This Tor version is ' + flag + '!' 57 | 58 | if latest is not None: 59 | # console.log(latest) 60 | if len(title) > 0: 61 | title += '
' 62 | title += 'Latest stable Tor version is ' + latest + '.' 63 | 64 | html = str.format(html, color=color) 65 | $check.html(html) 66 | 67 | if $check.is(':hidden'): 68 | $check.show(1000) 69 | 70 | $check.tooltip({'container': 'body', 71 | 'trigger': 'click hover', 72 | 'html': True, 73 | 'title': title 74 | }) 75 | 76 | $mode = $(self.make_id(self.tag + '.mode')) 77 | 78 | if mode == '': 79 | if $mode.is(':visible'): 80 | $mode.hide('slow') 81 | $container = $(self.make_id(self.tag + '.container')) 82 | $container.addClass('text-center').removeClass('text-right') 83 | 84 | else: 85 | 86 | $mode.text(mode + " Mode") 87 | 88 | if $mode.is(':hidden'): 89 | $mode.show('slow') 90 | $container = $(self.make_id(self.tag + '.container')) 91 | $container.removeClass('text-center').addClass('text-right') 92 | 93 | self.version = version 94 | self.mode = mode 95 | self.latest = latest 96 | self.flag = flag 97 | 98 | return True 99 | -------------------------------------------------------------------------------- /cc/ControlCenter/controls/version_check.pyj: -------------------------------------------------------------------------------- 1 | from controls.base import Base as ControlBase 2 | 3 | class VersionCheck(ControlBase): 4 | 5 | def update(self, version=None, latest=None, flag=None): 6 | 7 | if version == self.version and latest == self.latest and flag == self.flag: 8 | return True 9 | 10 | red_flags = ['obsolete', 'old', 'unrecommended', 'unknown'] 11 | 12 | $me = $(self.make_id(self.tag)) 13 | if $me.length < 1: 14 | return False 15 | 16 | $me.tooltip('dispose') 17 | 18 | # print(version, latest, flag) 19 | 20 | if version == latest and flag not in red_flags: 21 | if $me.is(':visible'): 22 | $me.hide(500) 23 | return True 24 | 25 | html = """ 26 | 27 | """ 28 | color = 'black' 29 | title = '' 30 | 31 | if flag in red_flags: 32 | color = 'tomato' 33 | if len(title) > 0: 34 | title += '
' 35 | title += 'This Tor version is ' + flag + '!' 36 | 37 | if latest is not None: 38 | # console.log(latest) 39 | if len(title) > 0: 40 | title += '
' 41 | title += 'Latest stable Tor version is ' + latest + '.' 42 | 43 | html = str.format(html, color=color) 44 | $me.html(html) 45 | 46 | if $me.is(':hidden'): 47 | $me.show(1000) 48 | 49 | $me.tooltip({'container': 'body', 50 | 'trigger': 'click hover', 51 | 'html': True, 52 | 'title': title 53 | }) 54 | 55 | self.version = version 56 | self.latest = latest 57 | self.flag = flag 58 | 59 | return True 60 | -------------------------------------------------------------------------------- /cc/ControlCenter/dialogs/__init__.pyj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/cc/ControlCenter/dialogs/__init__.pyj -------------------------------------------------------------------------------- /cc/ControlCenter/dialogs/about.pyj: -------------------------------------------------------------------------------- 1 | from dialogs.base import Base as DialogBase 2 | from utils.auth import Basic, Digest 3 | 4 | class About(DialogBase): 5 | 6 | def __init__(self, session_id, base_path = None): 7 | DialogBase.__init__(self) 8 | self.base_path = base_path 9 | self.session_id = session_id 10 | 11 | def create(self): 12 | 13 | html = """ 14 | 42 | """ 43 | 44 | # html = str.format(html, id=self.id, server=self.server) 45 | DialogBase.create(self, html) 46 | 47 | 48 | def show(self): 49 | if self.modal is None: 50 | self.create() 51 | 52 | p = DialogBase.show(self) 53 | 54 | $.post({ 55 | 'url': self.base_path + "/" + self.session_id + "/cc/" + "about" 56 | , 'timeout': 5000 57 | }) 58 | .done(def(data): 59 | $('#about').removeClass('text-center').addClass('text-left') 60 | .css('color', 'black') 61 | .html(data) 62 | ) 63 | 64 | return p -------------------------------------------------------------------------------- /cc/ControlCenter/dialogs/base.pyj: -------------------------------------------------------------------------------- 1 | from utils.uuid import uuid4 2 | 3 | class Base(): 4 | 5 | def __init__(self): 6 | self.modal = None 7 | 8 | # https://stackoverflow.com/questions/29552904/return-a-value-from-bootstraps-modal-box-yes-or-no-option 9 | self.dfd = jQuery.Deferred() 10 | self.id = uuid4().replace(v'/-/g', "") 11 | self.esc_to_dismiss = True 12 | 13 | def remove(self): 14 | if self.modal is not None: 15 | self.modal.remove() 16 | del self.modal 17 | 18 | def create(self, html = '
'): 19 | self.remove() 20 | self.modal = $(html).modal({'backdrop': 'static', 'keyboard': False}) 21 | return self.modal 22 | 23 | def show(self, html = None): 24 | if html is not None: 25 | self.create(html) 26 | 27 | if self.modal is not None: 28 | $('body').append(self.modal) 29 | 30 | self.modal.on('hidden.bs.modal', def(event): 31 | self.remove() 32 | ) 33 | 34 | self.modal.on('keydown', def(event): 35 | if event.which == 27: # Esc 36 | if self.esc_to_dismiss == True: 37 | self.modal.modal('hide') 38 | ) 39 | 40 | self.modal.modal('show') 41 | 42 | return self.dfd.promise() 43 | 44 | 45 | class Message(Base): 46 | 47 | def __init__(self, message = None, title = 'The Onion Box'): 48 | 49 | Base.__init__(self) 50 | self.title = title 51 | self. message = message 52 | 53 | def create(self): 54 | 55 | html = """ 56 | 74 | """ 75 | 76 | html = str.format(html, id=self.id, title = self.title, message = self.message) 77 | return Base.create(self, html) 78 | 79 | def show(self): 80 | 81 | if self.modal is None: 82 | self.create() 83 | 84 | return Base.show(self) -------------------------------------------------------------------------------- /cc/ControlCenter/dialogs/launcher.pyj: -------------------------------------------------------------------------------- 1 | from dialogs.base import Base as DialogBase 2 | 3 | class Launcher(DialogBase): 4 | 5 | def __init__(self, session_id, base_path = None): 6 | DialogBase.__init__(self) 7 | self.base_path = base_path 8 | self.session_id = session_id 9 | 10 | def create(self): 11 | 12 | html = """ 13 | 36 | """ 37 | 38 | # html = str.format(html, id=self.id, server=self.server) 39 | DialogBase.create(self, html) 40 | 41 | def show(self): 42 | if self.modal is None: 43 | self.create() 44 | 45 | p = DialogBase.show(self) 46 | 47 | setTimeout(def(): 48 | self.modal.modal('hide') 49 | , 3000) 50 | 51 | return p -------------------------------------------------------------------------------- /cc/ControlCenter/dialogs/license.pyj: -------------------------------------------------------------------------------- 1 | from dialogs.base import Base as DialogBase 2 | from utils.auth import Basic, Digest 3 | 4 | class License(DialogBase): 5 | 6 | def __init__(self, session_id, base_path = None): 7 | DialogBase.__init__(self) 8 | self.base_path = base_path 9 | self.session_id = session_id 10 | 11 | def create(self): 12 | 13 | html = """ 14 | 39 | """ 40 | 41 | # html = str.format(html, id=self.id, server=self.server) 42 | DialogBase.create(self, html) 43 | 44 | 45 | def show(self): 46 | if self.modal is None: 47 | self.create() 48 | 49 | p = DialogBase.show(self) 50 | 51 | $.post({ 52 | 'url': self.base_path + "/" + self.session_id + "/cc/" + "license" 53 | , 'timeout': 2000 54 | }) 55 | .done(def(data): 56 | $('#license').removeClass('text-center').addClass('text-left') 57 | .css('color', 'black') 58 | .html(data) 59 | ) 60 | 61 | return p -------------------------------------------------------------------------------- /cc/ControlCenter/utils/__init__.pyj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/cc/ControlCenter/utils/__init__.pyj -------------------------------------------------------------------------------- /cc/ControlCenter/utils/auth.pyj: -------------------------------------------------------------------------------- 1 | class NotImplemetedError(Exception): 2 | def __init__(self, message): 3 | self.name = 'NotImplementedError' 4 | self.message = message 5 | 6 | class Base(): 7 | 8 | def __init__(self, header): 9 | self.header = header 10 | 11 | def create_auth_header(self, username, password): 12 | raise NotImplemetedError('Not implemented.') 13 | 14 | class Basic(Base): 15 | 16 | def create_auth_header(self, username, password): 17 | 18 | headers = self.header.split(',') 19 | if headers.length > 1: 20 | # not a 'basic' header 21 | return None 22 | 23 | regex = v'/(.+) realm=(.+)/g' 24 | elements = regex.exec(headers[0]) 25 | 26 | if not elements? or elements.length != 3: 27 | return None 28 | 29 | scheme = elements[1] 30 | response = btoa(username+':'+password) 31 | 32 | return scheme + " " + response 33 | 34 | class Digest(Base): 35 | 36 | def __init__(self, header, method='GET', url='login'): 37 | 38 | Base.__init__(self, header) 39 | self.method = method 40 | self.url = url 41 | self.nc = 1 42 | 43 | def create_auth_header(self, username, password): 44 | 45 | # This code is based on the contribution from 46 | # Jamie Perkins' "Digest Auth Request" 47 | # https://github.com/inorganik/digest-auth-request 48 | # adapted to suit our needs! 49 | 50 | # requires an md5 implementation - to be provided seperately! 51 | 52 | # generate 16 char client nonce 53 | def generate_client_nonce(): 54 | characters = 'abcdef0123456789' 55 | token = '' 56 | 57 | for i in range(16): 58 | randNum = Math.round(Math.random() * characters.length) 59 | token += characters.substr(randNum, 1) 60 | 61 | return token 62 | 63 | 64 | headers = self.header.split(', ') 65 | if headers.length == 1: 66 | # not a 'digest' header 67 | return None 68 | 69 | hh = headers[0].split(' ') 70 | if not hh.length == 2: 71 | return None 72 | 73 | auth_method = hh[0] 74 | headers[0] = hh[1] 75 | 76 | for item in headers: 77 | item = item.split(',')[0] 78 | data = item.split('=') 79 | if data.length != 2: 80 | continue 81 | 82 | if data[0] == 'realm': 83 | realm = data[1] 84 | elif data[0] == 'nonce': 85 | nonce = data[1] 86 | elif data[0] == 'opaque': 87 | opaque = data[1] 88 | elif data[0] == 'qop': 89 | qop = data[1] 90 | 91 | cnonce = generate_client_nonce() 92 | self.nc += 1 93 | 94 | # generate response 95 | # md5 by md5.js 96 | 97 | ha1_prep = username + ':' + realm + ':' + password 98 | HA1 = md5(ha1_prep) 99 | ha2_prep = self.method + ':' + self.url 100 | HA2 = md5(ha2_prep) 101 | response = md5(HA1 + ':' + nonce + ':' + ('00000000' + self.nc).slice(-8) + ':' + cnonce + ':' + 102 | qop + ':' + HA2) if qop else md5(HA1 + ':' + nonce + ':' + HA2) 103 | 104 | if qop: 105 | return (auth_method + ' ' + 106 | 'username="' + username + '", ' + 107 | 'realm="' + realm + '", ' + 108 | 'nonce="' + nonce + '", ' + 109 | 'uri="' + self.url + '", ' + 110 | 'response="' + response + '", ' + 111 | 'opaque="' + opaque + '", ' + 112 | 'qop=' + qop + '", ' + 113 | 'nc=' + ('00000000' + self.nc).slice(-8)+', '+ 114 | 'cnonce="' + cnonce + '"' 115 | ) 116 | 117 | return (auth_method + ' ' + 118 | 'username="' + username + '", ' + 119 | 'realm="' + realm + '", ' + 120 | 'nonce="' + nonce + '", ' + 121 | 'uri="' + self.url + '", ' + 122 | 'response="' + response + '"' 123 | ) 124 | 125 | -------------------------------------------------------------------------------- /cc/ControlCenter/utils/format_bytes.pyj: -------------------------------------------------------------------------------- 1 | def format_bytes(pBytes, pCalc = 'iec', pUnits = 'si', separator = None): 2 | 3 | # Thank's to 'Brennan T' on 4 | # http://stackoverflow.com/questions/15900485/correct-way-to-convert-size-in-bytes-to-kb-mb-gb-in-javascript 5 | 6 | if separator is None: 7 | separator = ' ' 8 | 9 | # Handle some special cases 10 | if pBytes == 0: 11 | return '0 Bytes' 12 | if pBytes == 1: 13 | return '1 Byte' 14 | if pBytes == -1: 15 | return '-1 Byte' 16 | 17 | bytes = Math.abs(pBytes) 18 | 19 | # Attention: arm calculates according IEC, yet displays 'si' - Abbreviations 20 | # Therefore we have to enable this wrong behaviour here! 21 | 22 | # IEC units use 2^10 as an order of magnitude 23 | orderOfMagnitude = Math.pow(2, 10) 24 | if pCalc is not None and pCalc.toLowerCase() == 'si': 25 | #SI units use the Metric representation based on 10^3 as a order of magnitude 26 | orderOfMagnitude = Math.pow(10, 3) 27 | 28 | # IEC units use 2^10 as an order of magnitude 29 | abbreviations = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'] 30 | if pUnits is not None and pUnits.toLowerCase() == 'si': 31 | # SI units use the Metric representation based on 10^3 as a order of magnitude 32 | abbreviations = ['Bytes', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] 33 | 34 | i = Math.floor(Math.log(bytes) / Math.log(orderOfMagnitude)) 35 | result = bytes / Math.pow(orderOfMagnitude, i) 36 | 37 | # This will get the sign right 38 | if pBytes < 0: 39 | result *= -1 40 | 41 | # This bit here is purely for show. it drops the precision on numbers greater than 100 before the units. 42 | # it also always shows the full number of bytes if bytes is the unit. 43 | if result >= 99.995 or i == 0: 44 | if result.toFixed(0) == 1: 45 | return '1 Byte' 46 | return result.toFixed(0) + separator + abbreviations[i] 47 | 48 | return result.toFixed(2) + separator + abbreviations[i] 49 | -------------------------------------------------------------------------------- /cc/ControlCenter/utils/make_id.pyj: -------------------------------------------------------------------------------- 1 | def make_id(id, tag=None, jquery=True): 2 | 3 | mid = "tobcc." + id 4 | if tag is not None: 5 | mid += "." + tag 6 | 7 | if jquery: 8 | # https://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/ 9 | # attention: '\\' has to be escaped @ $1 => '\\\\' @ v'' (Literal JavaScript) 10 | return "#" + v'mid.replace( /(:|\.|\[|\]|,|=|@)/g, "\\\\$1" )' 11 | 12 | return mid 13 | -------------------------------------------------------------------------------- /cc/ControlCenter/utils/uuid.pyj: -------------------------------------------------------------------------------- 1 | def uuid4(): 2 | 3 | # https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript/8809472#8809472 4 | 5 | d = Date().getTime() 6 | if performance? and v'typeof performance.now' == 'function': 7 | d += performance.now() 8 | 9 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(v'/[xy]/g', def(c): 10 | nonlocal d 11 | r = (d + Math.random() * 16) % 16 | 0 12 | d = Math.floor(d / 16) 13 | return (r if c == 'x' else (r & 0x3 | 0x8)).toString(16) 14 | ) 15 | 16 | -------------------------------------------------------------------------------- /cc/ControlCenter/utils/variables.pyj: -------------------------------------------------------------------------------- 1 | class TimestampedVariable(): 2 | 3 | def __init__(self, *args): 4 | 5 | assert(len(args) == 1) 6 | 7 | self.v = args[0] 8 | self.type = $.type(self.v) 9 | self.modified = (new Date).getTime() 10 | 11 | @property 12 | def value(self): 13 | return self.v 14 | 15 | @value.setter 16 | def value(self, value): 17 | assert($.type(value) == self.type) 18 | self.v = value 19 | self.modified = (new Date).getTime() 20 | 21 | def if_modified_since(self, timestamp): 22 | # msg = 'last_mod: ' + self.modified + '| ims: ' + timestamp 23 | # msg += ( ' ==> Modified') if self.modified > timestamp else '' 24 | # console.log(msg) 25 | if self.modified > timestamp: 26 | return self.v 27 | else: 28 | return None -------------------------------------------------------------------------------- /cc/lib/RapydSmoothie/__init__.pyj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/cc/lib/RapydSmoothie/__init__.pyj -------------------------------------------------------------------------------- /cc/lib/RapydSmoothie/timeseries.pyj: -------------------------------------------------------------------------------- 1 | # 2 | # Part of RapydSmoothie 3 | # A RapydScript-NG clone of SmoothieChart 4 | # 5 | # SmoothieChart Copyright (c) 2010-2013, Joe Walnes 6 | # 2013-2018, Drew Noakes 7 | # Details: www.smoothiechart.org / https://github.com/joewalnes/smoothie 8 | # License: MIT @ https://github.com/joewalnes/smoothie/blob/master/LICENSE.txt 9 | # 10 | # RapydSmoothie Copyright (c) 2018, Ralph Wetzel 11 | # License: MIT 12 | # Language: RapydScript-NG Transpiler 13 | # https://github.com/kovidgoyal/rapydscript-ng 14 | # Coverage: SmoothieChart 1.36 ("Add title option, by @mesca") 15 | # 16 | 17 | from RapydSmoothie.util import extend 18 | 19 | class TimeSeries(): 20 | 21 | defaultOptions = { 22 | "resetBoundsInterval": 3000, 23 | "resetBounds": True 24 | } 25 | 26 | def __init__(self, options: dict = {}): 27 | 28 | self.options = extend({}, TimeSeries.defaultOptions, options) 29 | self.disabled = False 30 | self.clear() 31 | 32 | # Clears all data and state from this TimeSeries object. 33 | def clear(self): 34 | self.data = [] 35 | self.maxValue = None 36 | self.minValue = None 37 | 38 | # Recalculate the min/max values for this TimeSeries object. 39 | # This causes the graph to scale itself in the y-axis. 40 | def resetBounds(self): 41 | 42 | if len(self.data) > 0: 43 | self.minValue = self.data[0][1] 44 | self.maxValue = self.data[0][1] 45 | for p in self.data: 46 | pv = p[1] 47 | if pv < self.minValue: 48 | self.minValue = pv 49 | elif pv > self.maxValue: 50 | self.maxValue = pv 51 | else: 52 | self.maxValue = None 53 | self.minValue = None 54 | 55 | # Adds a new data point to the TimeSeries, preserving chronological order. 56 | def append(self, timestamp, value, sumRepeatedTimeStampValues=False): 57 | 58 | i = len(self.data) - 1 59 | 60 | while i>=0 and self.data[i][0] > timestamp: 61 | i-=1 62 | 63 | if i == -1: 64 | # This new item is the oldest data 65 | self.data.insert(0, [timestamp, value]) 66 | elif len(self.data)>0 and self.data[i][0] == timestamp: 67 | # Update existing values in the array 68 | if sumRepeatedTimeStampValues is True: 69 | # Sum this value into the existing 'bucket' 70 | self.data[i][1] += value 71 | else: 72 | # Replace the previous value 73 | self.data[i][1] = value 74 | elif i < len(self.data) - 1: 75 | # Splice into the correct position to keep timestamps in order 76 | self.data.insert(i+1, [timestamp, value]) 77 | else: 78 | # Add to the end of the array 79 | self.data.push([timestamp, value]) 80 | 81 | self.maxValue = value if self.maxValue is None else max(self.maxValue, value) 82 | self.minValue = value if self.minValue is None else min(self.minValue, value) 83 | 84 | def dropOldData(self, oldestValidTime, maxDataSetLength): 85 | # We must always keep one expired data point as we need this to draw the 86 | # line that comes into the chart from the left, but any points prior to that can be removed. 87 | removeCount = 0 88 | lsd = len(self.data) 89 | 90 | while lsd - removeCount >= maxDataSetLength and self.data[removeCount + 1][0] < oldestValidTime: 91 | removeCount += 1 92 | if removeCount != 0: 93 | self.data.splice(0, removeCount) 94 | 95 | window.TimeSeries = TimeSeries -------------------------------------------------------------------------------- /cc/lib/RapydSmoothie/util.pyj: -------------------------------------------------------------------------------- 1 | ##### 2 | # 3 | # Part of RapydSmoothie 4 | # A RapydScript-NG clone of SmoothieChart 5 | # 6 | # SmoothieChart Copyright (c) 2010-2013, Joe Walnes 7 | # 2013-2018, Drew Noakes 8 | # Details: www.smoothiechart.org / https://github.com/joewalnes/smoothie 9 | # License: MIT @ https://github.com/joewalnes/smoothie/blob/master/LICENSE.txt 10 | # 11 | # RapydSmoothie Copyright (c) 2018, Ralph Wetzel 12 | # License: MIT 13 | # Language: RapydScript-NG Transpiler 14 | # https://github.com/kovidgoyal/rapydscript-ng 15 | # Coverage: SmoothieChart 1.36 ("Add title option, by @mesca") 16 | # 17 | ##### 18 | 19 | class DefaultOptionsBase: 20 | 21 | def hasOwnProperty(self, key): 22 | rv = key not in ['constructor', '__init__', '__repr__', '__str__', 'hasOwnProperty'] 23 | # console.log('hOP: ' + key + " => " + rv) 24 | return rv 25 | 26 | 27 | def extend(*args): 28 | 29 | def all_property_keys(o): 30 | v"""var keys = []; 31 | for (var k in o) { 32 | keys.push(k); 33 | } 34 | return keys""" 35 | 36 | args[0] = args[0] or {}; 37 | 38 | al = len(args) 39 | i = 1 40 | 41 | while i < al: 42 | keys = all_property_keys(args[i]) 43 | for key in keys: 44 | if args[i].hasOwnProperty(key): 45 | # second test necessary as typeof(null) == 'object' 46 | if v"typeof(args[i][key]) === 'object'" and args[i][key]?: 47 | if Array.isArray(args[i][key]) is True: 48 | args[0][key] = args[i][key] 49 | else: 50 | args[0][key] = extend(args[0][key], args[i][key]) 51 | else: 52 | args[0][key] = args[i][key] 53 | 54 | i += 1 55 | 56 | return args[0] 57 | 58 | def binarySearch(data, value): 59 | 60 | low = 0 61 | high = len(data) 62 | 63 | while low < high: 64 | mid = (low + high) >> 1 65 | if value < data[mid][0]: 66 | high = mid 67 | else: 68 | low = mid + 1 69 | 70 | return low -------------------------------------------------------------------------------- /docs/description.rst: -------------------------------------------------------------------------------- 1 | 2 | The Onion Box 3 | ============= 4 | 5 | *The Onion Box* provides a web interface to monitor the operation of a 6 | `Tor `__ node. It is able to monitor any Tor 7 | node operated as relay, as bridge and even as client - as long as it can 8 | establish a connection to the node and authenticate successfully. 9 | 10 | The connection to the Tor node to be monitored may be established via a 11 | local ``ControlSocket`` or a ``ControlPort`` (local or remote). Advanced 12 | users may establish a connection via the Tor network to a node proving 13 | access to it’s ``ControlPort`` by means of a Hidden Service - supporting 14 | on demand as well `Hidden Service Client 15 | Authorization `__. 16 | 17 | *The Onion Box* supports whatever authentication method the Tor node 18 | provides. 19 | 20 | A single instance of *The Onion Box* is able to provide monitoring 21 | functionality for as many nodes as you like. 22 | 23 | Above that, *The Onion Box* is able to display Tor network status 24 | protocol data for any Tor node known by 25 | `Onionoo `__. 26 | -------------------------------------------------------------------------------- /docs/images/bandwidth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/bandwidth.png -------------------------------------------------------------------------------- /docs/images/cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/cc.png -------------------------------------------------------------------------------- /docs/images/configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/configuration.png -------------------------------------------------------------------------------- /docs/images/connectionerror.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/connectionerror.png -------------------------------------------------------------------------------- /docs/images/control.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/control.png -------------------------------------------------------------------------------- /docs/images/generalinfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/generalinfo.png -------------------------------------------------------------------------------- /docs/images/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/header.png -------------------------------------------------------------------------------- /docs/images/hidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/hidden.png -------------------------------------------------------------------------------- /docs/images/local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/local.png -------------------------------------------------------------------------------- /docs/images/location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/location.png -------------------------------------------------------------------------------- /docs/images/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/login.png -------------------------------------------------------------------------------- /docs/images/messages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/messages.png -------------------------------------------------------------------------------- /docs/images/network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/network.png -------------------------------------------------------------------------------- /docs/images/pclogo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 60 | 61 | 62 | 63 | 64 | 66 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /docs/images/raspbian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/raspbian.png -------------------------------------------------------------------------------- /docs/images/weights.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/docs/images/weights.png -------------------------------------------------------------------------------- /init.d/theonionbox.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ##### 4 | # This script is based on a great tutorial of SC Phillips 5 | # http://blog.scphillips.com/posts/2013/07/getting-a-python-script-to-run-in-the-background-as-a-service-on-boot/ 6 | # 7 | 8 | ### BEGIN INIT INFO 9 | # Provides: theonionbox 10 | # Required-Start: $remote_fs $syslog 11 | # Required-Stop: $remote_fs $syslog 12 | # Default-Start: 2 3 4 5 13 | # Default-Stop: 0 1 6 14 | # Short-Description: The Onion Box: WebInterface to monitor Tor node operations 15 | # Description: http://www.theonionbox.com 16 | ### END INIT INFO 17 | 18 | # Adapt this to provide the path to the root directory of the virtual environment you created for your box 19 | DIR=/the/path/to/your/virtual_env 20 | # usually no need to change the next two lines! 21 | DAEMON=$DIR/bin/theonionbox 22 | DAEMON_NAME=theonionbox 23 | 24 | # This next line determines what user the script runs as. 25 | DAEMON_USER=debian-tor 26 | 27 | # Add any command line options for your daemon here: 28 | # If you e.g. want your box to create additional log files, enable this here! 29 | # DAEMON_OPTS="--log=$DIR" 30 | # HeadsUp! You then have to ensure that DAEMON_USER has write privileges to $DIR! 31 | DAEMON_OPTS="" 32 | 33 | ##### 34 | # *** No need to change anything below this line! *** 35 | # 36 | 37 | # The process ID of the script when it runs is stored here: 38 | PIDFILE=/var/run/$DAEMON_NAME.pid 39 | 40 | . /lib/lsb/init-functions 41 | 42 | # Redirecting to syslog! 43 | # http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ 44 | 45 | # Notice the '--id=\$\$"? This ensures that the PID of the daemon 46 | # (which is the PPID of the launching bash) is appended to the syslog identifier! 47 | 48 | do_start () { 49 | log_daemon_msg "Starting system $DAEMON_NAME daemon" 50 | start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER \ 51 | --chuid $DAEMON_USER \ 52 | --startas /bin/bash \ 53 | -- -c "exec $DAEMON $DAEMON_OPTS 1> >( logger -t $DAEMON_NAME --id=\$\$) 2>&1" 54 | log_end_msg $? 55 | } 56 | 57 | do_stop () { 58 | log_daemon_msg "Stopping system $DAEMON_NAME daemon" 59 | start-stop-daemon --stop --pidfile $PIDFILE --retry 10 60 | log_end_msg $? 61 | } 62 | 63 | case "$1" in 64 | 65 | start|stop) 66 | do_${1} 67 | ;; 68 | 69 | restart) 70 | do_stop 71 | do_start 72 | ;; 73 | 74 | status) 75 | status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $? 76 | ;; 77 | 78 | *) 79 | echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}" 80 | exit 1 81 | ;; 82 | 83 | esac 84 | exit 0 -------------------------------------------------------------------------------- /support/osxtemp/libsmc/Makefile: -------------------------------------------------------------------------------- 1 | CC = cc 2 | CFLAGS = -mmacosx-version-min=10.6 -std=c99 -arch x86_64 -O2 3 | FRAMEWORKS = -framework IOKit 4 | SRC = src/*.c 5 | OBJ = libsmc.o 6 | LIB = libsmc.a 7 | LIB_DY = libsmc.dylib 8 | 9 | static: 10 | ${CC} ${CFLAGS} -c -o ${OBJ} ${SRC} 11 | libtool -static -o ${LIB} ${OBJ} 12 | 13 | dynamic: 14 | ${CC} ${CFLAGS} ${FRAMEWORKS} -dynamiclib -o ${LIB_DY} ${SRC} 15 | 16 | clean: 17 | rm *.o *.a *.dylib 18 | 19 | 20 | -------------------------------------------------------------------------------- /systemd/theonionbox.service: -------------------------------------------------------------------------------- 1 | # Based on a contribution by svengo 2 | # https://github.com/ralphwetzel/theonionbox/issues/24 3 | 4 | # Run The Onion Box as background service 5 | # https://github.com/ralphwetzel/theonionbox/ 6 | 7 | [Unit] 8 | Description=The Onion Box 9 | Documentation=https://github.com/ralphwetzel/theonionbox 10 | After=network.target 11 | 12 | [Service] 13 | Type=simple 14 | WorkingDirectory=/home/pi/theonionbox 15 | ExecStart=/home/pi/theonionbox/bin/theonionbox 16 | User=debian-tor 17 | SyslogIdentifier=theonionbox 18 | StandardOutput=syslog 19 | StandardError=syslog 20 | Restart=on-failure 21 | RestartSec=10 22 | 23 | [Install] 24 | WantedBy=multi-user.target 25 | -------------------------------------------------------------------------------- /theonionbox/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/__init__.py -------------------------------------------------------------------------------- /theonionbox/__main__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import pathlib 4 | import site 5 | import sys 6 | 7 | 8 | def main(): 9 | 10 | if __name__ == '__main__' and __package__ in ['', None]: 11 | 12 | # Being __main__, we need to add the current dir to the site-dirs, to allow ABSOLUTE import 13 | # We resolve this Path, as __file__ might be relative, if __name__ == __main__. 14 | cp = pathlib.Path(__file__).resolve() 15 | cp = cp.parent 16 | assert cp.exists() 17 | 18 | # Add the current dir to the site-dirs, to allow ABSOLUTE import 19 | site.addsitedir(cp) 20 | from theonionbox import main as onion_main 21 | else: 22 | # we're in a package => RELATIVE should work. 23 | from .theonionbox import main as onion_main 24 | 25 | # The scripting part of theonionbox is being executed as we 'import'. 26 | # Now we launch the server: 27 | onion_main() 28 | 29 | 30 | if __name__ == '__main__': 31 | main() 32 | -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/README-WEB.txt: -------------------------------------------------------------------------------- 1 | 2 | Lato font family (Web version) 3 | 4 | ============================== 5 | 6 | Version 2.015; Latin+Cyrillic+Greek+IPA opensource 7 | 8 | Created by: tyPoland Lukasz Dziedzic 9 | Creation year: 2015 10 | 11 | Copyright (c) 2010-2015 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1. 12 | 13 | Lato is a trademark of tyPoland Lukasz Dziedzic. 14 | 15 | Source URL: http://www.latofonts.com/ 16 | License URL: http://scripts.sil.org/OFL 17 | 18 | ================ 19 | 20 | Lato is a sanserif typeface family designed in the Summer 2010 and extended in the Summer 2013 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in the 2010s, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness. In 2013-2014, the family was greatly extended (with the help of Adam Twardoch and Botio Nikoltchev) to cover 3000+ glyphs over nine weights with italics. It now supports 100+ Latin-based languages, 50+ Cyrillic-based languages as well as Greek and IPA phonetics. The Lato fonts are available free of charge under the SIL Open Font License from http://www.latofonts.com/ 21 | 22 | ================ 23 | 24 | CONTENTS: 25 | 26 | This folder contains two subfolders: Lato and LatoLatin. Inside these subfolders, you will find CSS-compatible webfont kits which you can install on your website via self-hosting. The Lato subfolder contains webfonts with the complete character set (160-640 KB per font) while the LatoLatin subfolder contains smaller versions that only include the most important glyphs for European Latin-based languages (40-150 KB per font). 27 | 28 | ================ 29 | 30 | REVISION LOG: 31 | 32 | # Version 2.015 (2015-08-06) 33 | Initial implementation of mark positioning (should work for most glyphs) 34 | Autohinted using ttfautohint 1.3. 35 | 36 | # Version 2.010 (2014-09-01) 37 | Improved some contour bugs and diacritics positioning. 38 | Improved outline quality. 39 | Revised OTL features so that they work in browsers (ot-sanitise). 40 | Autohinted using ttfautohint 1.1. 41 | Interpolated the Medium weight differently so it provides more visual difference from Regular. 42 | 43 | # Version 2.007 (2014-02-27) 44 | Greatly expanded character set, revised metrics, four additional weights. 45 | 46 | # Version 1.104 (2011-11-08) 47 | Merged the distribution again 48 | Autohinted with updated ttfautohint 0.4 (which no longer causes Adobe and iOS problems) 49 | except the Hai and Lig weights which are hinted in FLS 5.1. 50 | 51 | # Version 1.102 (2011-10-28) 52 | Added OpenType Layout features 53 | Ssplit between desktop and web versions 54 | Desktop version: all weights autohinted with FontLab Studio 55 | Web version autohinted with ttfautohint 0.4 except the Hai and Lig weights 56 | 57 | # Version 1.101 (2011-09-30) 58 | Fixed OS/2 table Unicode and codepage entries 59 | 60 | # Version 1.100 (2011-09-12) 61 | Added Polish diacritics to the character set 62 | Weights Hai and Lig autohinted with FontLab Studio 63 | Other weights autohinted with ttfautohint 0.3 64 | 65 | # Version 1.011 (2010-12-29) 66 | Added the soft hyphen glyph 67 | 68 | # Version 1.010 (2010-12-13) 69 | Initial version released under SIL Open Font License 70 | Western character set 71 | 72 | ================ 73 | -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Black.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Black.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Black.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Black.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Black.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-BlackItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-BlackItalic.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-BlackItalic.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-BlackItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-BlackItalic.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-BlackItalic.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Bold.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Bold.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Bold.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Bold.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-BoldItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-BoldItalic.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-BoldItalic.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-BoldItalic.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-BoldItalic.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Hairline.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Hairline.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Hairline.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Hairline.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Hairline.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Hairline.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Hairline.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Hairline.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-HairlineItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-HairlineItalic.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-HairlineItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-HairlineItalic.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-HairlineItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-HairlineItalic.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-HairlineItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-HairlineItalic.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Heavy.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Heavy.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Heavy.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Heavy.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Heavy.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Heavy.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Heavy.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Heavy.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-HeavyItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-HeavyItalic.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-HeavyItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-HeavyItalic.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-HeavyItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-HeavyItalic.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-HeavyItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-HeavyItalic.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Italic.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Italic.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Italic.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Italic.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Light.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Light.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Light.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Light.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-LightItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-LightItalic.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-LightItalic.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-LightItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-LightItalic.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-LightItalic.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Medium.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Medium.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Medium.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Medium.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-MediumItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-MediumItalic.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-MediumItalic.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-MediumItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-MediumItalic.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-MediumItalic.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Regular.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Regular.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Regular.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Regular.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Semibold.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Semibold.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Semibold.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Semibold.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-SemiboldItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-SemiboldItalic.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-SemiboldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-SemiboldItalic.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-SemiboldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-SemiboldItalic.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-SemiboldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-SemiboldItalic.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Thin.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Thin.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Thin.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Thin.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-Thin.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-ThinItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-ThinItalic.eot -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-ThinItalic.ttf -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-ThinItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-ThinItalic.woff -------------------------------------------------------------------------------- /theonionbox/libs/LatoLatin/fonts/LatoLatin-ThinItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/LatoLatin/fonts/LatoLatin-ThinItalic.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/bootstrap-4.3.1/css/bootstrap-reboot.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/) 3 | * Copyright 2011-2019 The Bootstrap Authors 4 | * Copyright 2011-2019 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} 8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */ -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Font Awesome Free License 2 | ------------------------- 3 | 4 | Font Awesome Free is free, open source, and GPL friendly. You can use it for 5 | commercial projects, open source projects, or really almost whatever you want. 6 | Full Font Awesome Free license: https://fontawesome.com/license/free. 7 | 8 | # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) 9 | In the Font Awesome Free download, the CC BY 4.0 license applies to all icons 10 | packaged as SVG and JS file types. 11 | 12 | # Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL) 13 | In the Font Awesome Free download, the SIL OFL license applies to all icons 14 | packaged as web and desktop font files. 15 | 16 | # Code: MIT License (https://opensource.org/licenses/MIT) 17 | In the Font Awesome Free download, the MIT license applies to all non-font and 18 | non-icon files. 19 | 20 | # Attribution 21 | Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font 22 | Awesome Free files already contain embedded comments with sufficient 23 | attribution, so you shouldn't need to do anything additional when using these 24 | files normally. 25 | 26 | We've kept attribution comments terse, so we ask that you do not actively work 27 | to remove them from files, especially code. They're a great way for folks to 28 | learn about Font Awesome. 29 | 30 | # Brand Icons 31 | All brand icons are trademarks of their respective owners. The use of these 32 | trademarks does not indicate endorsement of the trademark holder by Font 33 | Awesome, nor vice versa. **Please do not use brand logos for any purpose except 34 | to represent the company, product, or service to which they refer.** 35 | -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/css/brands.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Brands'; 7 | font-style: normal; 8 | font-weight: normal; 9 | font-display: auto; 10 | src: url("../webfonts/fa-brands-400.eot"); 11 | src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } 12 | 13 | .fab { 14 | font-family: 'Font Awesome 5 Brands'; } 15 | -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/css/brands.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"} -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/css/regular.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 400; 9 | font-display: auto; 10 | src: url("../webfonts/fa-regular-400.eot"); 11 | src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } 12 | 13 | .far { 14 | font-family: 'Font Awesome 5 Free'; 15 | font-weight: 400; } 16 | -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/css/regular.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400} -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/css/solid.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 900; 9 | font-display: auto; 10 | src: url("../webfonts/fa-solid-900.eot"); 11 | src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } 12 | 13 | .fa, 14 | .fas { 15 | font-family: 'Font Awesome 5 Free'; 16 | font-weight: 900; } 17 | -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/css/solid.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900} -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ralphwetzel/theonionbox/9812fce48153955e179755ea7a58413c3bee182f/theonionbox/libs/fontawesome-free-5.11.2-web/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /theonionbox/libs/glide-3.4.1/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2013-present Jędrzej Chałubek 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /theonionbox/libs/glide-3.4.1/dist/css/glide.core.css: -------------------------------------------------------------------------------- 1 | .glide { 2 | position: relative; 3 | width: 100%; 4 | box-sizing: border-box; } 5 | .glide * { 6 | box-sizing: inherit; } 7 | .glide__track { 8 | overflow: hidden; } 9 | .glide__slides { 10 | position: relative; 11 | width: 100%; 12 | list-style: none; 13 | backface-visibility: hidden; 14 | transform-style: preserve-3d; 15 | touch-action: pan-Y; 16 | overflow: hidden; 17 | padding: 0; 18 | white-space: nowrap; 19 | display: flex; 20 | flex-wrap: nowrap; 21 | will-change: transform; } 22 | .glide__slides--dragging { 23 | user-select: none; } 24 | .glide__slide { 25 | width: 100%; 26 | height: 100%; 27 | flex-shrink: 0; 28 | white-space: normal; 29 | user-select: none; 30 | -webkit-touch-callout: none; 31 | -webkit-tap-highlight-color: transparent; } 32 | .glide__slide a { 33 | user-select: none; 34 | -webkit-user-drag: none; 35 | -moz-user-select: none; 36 | -ms-user-select: none; } 37 | .glide__arrows { 38 | -webkit-touch-callout: none; 39 | user-select: none; } 40 | .glide__bullets { 41 | -webkit-touch-callout: none; 42 | user-select: none; } 43 | .glide--rtl { 44 | direction: rtl; } 45 | -------------------------------------------------------------------------------- /theonionbox/libs/glide-3.4.1/dist/css/glide.core.min.css: -------------------------------------------------------------------------------- 1 | .glide{position:relative;width:100%;box-sizing:border-box}.glide *{box-sizing:inherit}.glide__track{overflow:hidden}.glide__slides{position:relative;width:100%;list-style:none;backface-visibility:hidden;transform-style:preserve-3d;touch-action:pan-Y;overflow:hidden;padding:0;white-space:nowrap;display:flex;flex-wrap:nowrap;will-change:transform}.glide__slides--dragging{user-select:none}.glide__slide{width:100%;height:100%;flex-shrink:0;white-space:normal;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.glide__slide a{user-select:none;-webkit-user-drag:none;-moz-user-select:none;-ms-user-select:none}.glide__arrows{-webkit-touch-callout:none;user-select:none}.glide__bullets{-webkit-touch-callout:none;user-select:none}.glide--rtl{direction:rtl} 2 | -------------------------------------------------------------------------------- /theonionbox/libs/glide-3.4.1/dist/css/glide.theme.css: -------------------------------------------------------------------------------- 1 | .glide__arrow { 2 | position: absolute; 3 | display: block; 4 | top: 50%; 5 | z-index: 2; 6 | color: white; 7 | text-transform: uppercase; 8 | padding: 9px 12px; 9 | background-color: transparent; 10 | border: 2px solid rgba(255, 255, 255, 0.5); 11 | border-radius: 4px; 12 | box-shadow: 0 0.25em 0.5em 0 rgba(0, 0, 0, 0.1); 13 | text-shadow: 0 0.25em 0.5em rgba(0, 0, 0, 0.1); 14 | opacity: 1; 15 | cursor: pointer; 16 | transition: opacity 150ms ease, border 300ms ease-in-out; 17 | transform: translateY(-50%); 18 | line-height: 1; } 19 | .glide__arrow:focus { 20 | outline: none; } 21 | .glide__arrow:hover { 22 | border-color: white; } 23 | .glide__arrow--left { 24 | left: 2em; } 25 | .glide__arrow--right { 26 | right: 2em; } 27 | .glide__arrow--disabled { 28 | opacity: 0.33; } 29 | 30 | .glide__bullets { 31 | position: absolute; 32 | z-index: 2; 33 | bottom: 2em; 34 | left: 50%; 35 | display: inline-flex; 36 | list-style: none; 37 | transform: translateX(-50%); } 38 | 39 | .glide__bullet { 40 | background-color: rgba(255, 255, 255, 0.5); 41 | width: 9px; 42 | height: 9px; 43 | padding: 0; 44 | border-radius: 50%; 45 | border: 2px solid transparent; 46 | transition: all 300ms ease-in-out; 47 | cursor: pointer; 48 | line-height: 0; 49 | box-shadow: 0 0.25em 0.5em 0 rgba(0, 0, 0, 0.1); 50 | margin: 0 0.25em; } 51 | .glide__bullet:focus { 52 | outline: none; } 53 | .glide__bullet:hover, .glide__bullet:focus { 54 | border: 2px solid white; 55 | background-color: rgba(255, 255, 255, 0.5); } 56 | .glide__bullet--active { 57 | background-color: white; } 58 | 59 | .glide--swipeable { 60 | cursor: grab; 61 | cursor: -moz-grab; 62 | cursor: -webkit-grab; } 63 | 64 | .glide--dragging { 65 | cursor: grabbing; 66 | cursor: -moz-grabbing; 67 | cursor: -webkit-grabbing; } 68 | -------------------------------------------------------------------------------- /theonionbox/libs/glide-3.4.1/dist/css/glide.theme.min.css: -------------------------------------------------------------------------------- 1 | .glide__arrow{position:absolute;display:block;top:50%;z-index:2;color:white;text-transform:uppercase;padding:9px 12px;background-color:transparent;border:2px solid rgba(255,255,255,0.5);border-radius:4px;box-shadow:0 0.25em 0.5em 0 rgba(0,0,0,0.1);text-shadow:0 0.25em 0.5em rgba(0,0,0,0.1);opacity:1;cursor:pointer;transition:opacity 150ms ease, border 300ms ease-in-out;transform:translateY(-50%);line-height:1}.glide__arrow:focus{outline:none}.glide__arrow:hover{border-color:white}.glide__arrow--left{left:2em}.glide__arrow--right{right:2em}.glide__arrow--disabled{opacity:0.33}.glide__bullets{position:absolute;z-index:2;bottom:2em;left:50%;display:inline-flex;list-style:none;transform:translateX(-50%)}.glide__bullet{background-color:rgba(255,255,255,0.5);width:9px;height:9px;padding:0;border-radius:50%;border:2px solid transparent;transition:all 300ms ease-in-out;cursor:pointer;line-height:0;box-shadow:0 0.25em 0.5em 0 rgba(0,0,0,0.1);margin:0 0.25em}.glide__bullet:focus{outline:none}.glide__bullet:hover,.glide__bullet:focus{border:2px solid white;background-color:rgba(255,255,255,0.5)}.glide__bullet--active{background-color:white}.glide--swipeable{cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.glide--dragging{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing} 2 | -------------------------------------------------------------------------------- /theonionbox/libs/scrollMonitor-1.2.4/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2013 Stu Kabakoff and contributors 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /theonionbox/libs/smoothie-1.36/LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | ----------- 3 | 4 | Copyright (c) 2010-2013, Joe Walnes 5 | 2013-2017, Drew Noakes 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in 15 | all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /theonionbox/pages/cc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | <% 4 | try: 5 | from tob.template_tools import * 6 | except ModuleNotFoundError: 7 | from theonionbox.tob.template_tools import * 8 | end 9 | 10 | base_path = get('virtual_basepath', '') + '/' 11 | %> 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | % for stylesheet in session['stylesheets']: 21 | 22 | % end 23 | 24 | 25 | 26 | The Onion Box 27 | 28 | 29 | 62 | 63 |
64 |
65 |
66 | 67 | %# NEVER NEVER shall this part of the code be executed! 68 | 69 | 96 | 97 | 98 | 99 | % for script in session['scripts']: 100 | 101 | % end 102 | 103 | 110 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /theonionbox/pages/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | <% 4 | try: 5 | from tob.template_tools import * 6 | except ModuleNotFoundError: 7 | from theonionbox.tob.template_tools import * 8 | end 9 | 10 | base_path = get('virtual_basepath', '') + '/' 11 | session = get('session') 12 | # page_stylesheets = get('stylesheets') 13 | # page_scripts = get('scripts') 14 | %> 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | The Onion Box 24 | 25 | % # for stylesheet in page_stylesheets: 26 | % for stylesheet in session['stylesheets']: 27 | 28 | % end 29 | 30 | 31 | 32 | 33 | 34 | %# NavBar will not be displayed yet helps to navigate via arrow keys 35 |