├── .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 |
16 |
17 |
18 |
25 |
26 |
27 |
28 |
38 |
39 |
40 |
41 |
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 |
57 |
58 |
59 |
65 |
{message}
66 |
71 |
72 |
73 |
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 |
15 |
16 |
17 |
20 |
21 |
22 | {{stamp.__title__}} {{stamp.__version__}}
23 |
24 |
25 | {{stamp.__description__}}
26 |
27 |
28 |
33 |
34 |
35 |
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 |
16 |
17 |
18 |
25 |
26 |
27 |
28 |
35 |
36 |
37 |
38 |
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 |
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 |
30 |
31 | The Onion Box
32 |
33 |
34 |
35 |
36 |
54 |
55 | % if show_logout is True:
56 |
58 | Logout
59 |
60 | % end
61 |
62 |
63 |
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 |