Compare commits

...

286 Commits

Author SHA1 Message Date
kev aecd9ad9ef Update 'README.md' 9 months ago
Kevin Froman 3e17cf7c0b added papers list dev doc 9 months ago
Kevin Froman 735220d8da update runtime result 9 months ago
Kevin Froman 914b505dfa added remote ui plugin 9 months ago
Kevin Froman 8659fa613e merge master for docker fixes 9 months ago
Kevin Froman 7fa320cfc5 don't print version command to devnull in run script either 9 months ago
Kevin Froman 9306143e4c dont check hostname if not bound to loopback in client api security 9 months ago
Kevin Froman 7303cf041e if binding to 0.0.0.0, don't validate source ip in client api 9 months ago
Kevin Froman 4e96d18396 print tor errors to stdout 9 months ago
Duncan X Simpson 133b3ea699 Docker improvements 10 months ago
Duncan X Simpson 3a98183fa0 Compare uid not username in create_dirs() 10 months ago
Kevin Froman 8083489110 removed process info from run-onionr-node script 9 months ago
dependabot-preview[bot] cb2e29ad6e Bump pdoc3 from 0.9.1 to 0.9.2 9 months ago
dependabot-preview[bot] 6b6a698370 Bump pip-tools from 5.4.0 to 5.5.0 10 months ago
Kevin Froman d10ccd2e13 Merge branch 'docker' of https://git.k7dxs.net/dxs/onionr 9 months ago
Kevin Froman 513b758c7a removed process info from run-onionr-node script 9 months ago
Kevin F 5a9594074e
Merge pull request #109 from beardog108/dependabot/pip/pdoc3-0.9.2 9 months ago
dependabot-preview[bot] ba8b9b49ed
Bump pdoc3 from 0.9.1 to 0.9.2 9 months ago
Kevin F 8c9a24b227
Merge pull request #117 from beardog108/dependabot/pip/pip-tools-5.5.0 9 months ago
Kevin Froman c28e5dea74 Merge branch 'master' of ssh://git.voidnet.tech:/kev/Onionr 9 months ago
Kevin Froman 07d9207808 Fix regression when opening homepage 9 months ago
Kevin Froman ad91a3222f show web url every time onionr daemon starts 9 months ago
Kevin Froman a032782d26 merge readme changes 9 months ago
Kevin Froman 1042676f26 added security mechanisms doc 9 months ago
Kevin Froman 9bf27b345d improved readme layout 9 months ago
Kevin Froman 8a2d0a635a accept #1 fixing #31 arm64 build issues 9 months ago
footsiefat 5a0231653f Added a new ARM64 (Raspberry Pi's for example) patch allowing for proper support now. 9 months ago
footsiefat e71935fcef Added a new ARM64 (Raspberry Pi's for example) patch allowing for proper support now. 9 months ago
Kevin Froman 87685fd728 add license to disk ministry 9 months ago
Kevin Froman d0df62770f added doc that describes testing 9 months ago
Kevin Froman e95b75b193 update runtime-result 9 months ago
Kevin Froman 59090b4a03 Merge branch 'master' of git.voidnet.tech:kev/Onionr 9 months ago
Kevin Froman ab41282fba Added instructions for generating requirements.txt 9 months ago
kev d1e4ae6032 Use list for version infos in issue template 9 months ago
kev b6b941bf9b Remove i2p and add cpu to issue template for now 9 months ago
Kevin Froman 509e8a290b don't use hard coded python version number in .env file 9 months ago
Kevin Froman b267d3028e bump version to 8.0.2 9 months ago
Kevin Froman 76f1d164e7 + added basic dev guide 9 months ago
Kevin Froman 54f6e3bdc6 Added instructions for generating requirements.txt 9 months ago
Kevin Froman fd440b8b91 Merge branch 'master' of git.voidnet.tech:kev/Onionr 9 months ago
Kevin Froman 8797bce4fa don't use hard coded python version number in .env file 9 months ago
kev b42dc8fbc6 Use list for version infos in issue template 9 months ago
kev e950f3242e Remove i2p and add cpu to issue template for now 9 months ago
Kevin Froman eefcb8ccbe added basic dev guide 9 months ago
Kevin Froman f4e37bbf4e added basic dev guide 9 months ago
Kevin Froman 7dce969eaa added benchmark for neighbor closeness 9 months ago
Kevin Froman 79b46b62eb add SO link to err msg when sqlite is not installed 9 months ago
Kevin Froman 314bec0909 move centos install 9 months ago
Kevin Froman fcc3bd656d added quickstart guide pdf 9 months ago
Kevin F 4b7be71102
Merge pull request #118 from digitalhuman/patch-1 9 months ago
Kevin Froman 8a722a0911 removed outdated html autogenerated docs 9 months ago
Victor Angelier CCX 797da0aaea
Install on CentOS 7 9 months ago
Kevin Froman 52bffa0aae update readme 10 months ago
dependabot-preview[bot] d7bcd2b4a8
Bump pip-tools from 5.4.0 to 5.5.0 10 months ago
Kevin Froman 0fb5e5df10 remove chat web files 10 months ago
Kevin Froman ae84d09e8e * detect stale run file 10 months ago
Kevin Froman 80e4562029 Merge branch 'master' of https://git.voidnet.tech/kev/onionr 10 months ago
Kevin Froman 427957b9e8 add all venvs to gitignore and update changelog 10 months ago
Kevin Froman 9d55c62d68 * revert pow to 5 10 months ago
Kevin Froman e36f44f9a1 bump deps 10 months ago
Kevin Froman 57638e73f7 added faq.md 10 months ago
Duncan X Simpson 2dc11303d7 Docker improvements 10 months ago
Duncan X Simpson 9345d27d6a Compare uid not username in create_dirs() 10 months ago
Kevin Froman 5afbed63cf Merge branch 'bind-args' 10 months ago
Kevin Froman c44d6624ff correct yt link 10 months ago
Kevin Froman ae359de562 Added custom port and bind address args 10 months ago
dependabot-preview[bot] 2bd58945da Bump watchdog from 0.10.4 to 1.0.1 11 months ago
Duncan X Simpson b1ef248ee9 Docker improvements 10 months ago
Kevin Froman 416e43e7bb correct yt link 10 months ago
Kevin Froman 1eb6140811 Added custom port and bind address args 10 months ago
Kevin Froman 700bde4bd8 Merge branch 'master' of https://git.k7dxs.net/dxs/onionr 10 months ago
Kevin Froman 71b511382b correct yt link 10 months ago
Duncan X Simpson 67f5c30d85 Docker improvements 10 months ago
Kevin Froman 9684585432 Fix consent message in onboarding 10 months ago
Kevin Froman 9d6216e16b decrease pow, bump version 11 months ago
Kevin Froman 2a6f6bb1aa speed up tests by lowering pow in their configs 11 months ago
Kevin Froman 7820c87b79 bump version 11 months ago
Kevin Froman 93d176badc fix upload.py logging b_hash define 11 months ago
Kevin Froman 968f468027 Merge branch 'fixmultiprocessexit' of /home/user/win-merges/bare-onionr/onionr into fixmultiprocessexit 11 months ago
Kevin Froman 86fd936d52 exit faster from communicator 11 months ago
Kevin Froman e34b499044 purge old blocks if POW increases 11 months ago
Kevin Froman 01ed4d49d0 fix wsl apport breaking sites 11 months ago
Kevin Froman 9db9c495c8 check block POW *before* syncning from lan 11 months ago
Kevin Froman dcc304be9d fix wsl apport breaking sitecreator 11 months ago
Kevin Froman eaf61c280a fixed subprocesspow not exiting on wsl 11 months ago
Kevin Froman e831a27ae3 bug fixes in block creation and directory security 11 months ago
Kevin Froman de271794fd added git-update.sh 11 months ago
Kevin Froman 21df88fdaa bumped deps 11 months ago
dependabot-preview[bot] 9d4afc4b3a Bump pip-tools from 5.3.1 to 5.4.0 11 months ago
Kevin Froman 28044f2bd7 bump version 11 months ago
Kevin Froman adba4be099 fix tests 11 months ago
Kevin Froman 30a4285b92 - Removed direct connections (will be a different project in the future) 11 months ago
Kevin Froman 59330149e1 removed netcheck comm timer 11 months ago
Kevin Froman a775f3b26d dont upload blocks that arent valid (anymore?), progress removing communicator timers 11 months ago
Kevin Froman cc703fc404 progress removing communicator timers 11 months ago
Kevin Froman ecd2cc54da progress removing communicator timers 11 months ago
Kevin Froman bbd76da333 added flood fill work, misc bug fixes and removing communicator timers 11 months ago
Kevin Froman 04105a2b70 show more info in show-blocks.py script 12 months ago
Kevin Froman 8d839f62c9 bump version 12 months ago
Kevin Froman a0ae62d0a3 added togglenetwork module in torcontrol 12 months ago
Kevin Froman a9d0524ccc + added sandbox script 12 months ago
Kevin Froman 130e9de5e9 remove disablenetwork for now 12 months ago
Kevin Froman f0cd2fb2b9 moved blockmetadata to onionrblocks 12 months ago
Kevin Froman 44112750ec Merge branch 'master' into flood-fill 12 months ago
Kevin Froman f2d7075b3a bump version 1 year ago
Kevin Froman 256c402223 fix connectnewpeers not using specified peer 1 year ago
Kevin Froman 2601263b87 disable forward secrecy for now, fix autocomplete for to address in mail 1 year ago
Kevin Froman 3ab8681b24 Merge branch 'master' of gitlab.com:beardog/Onionr 1 year ago
Kevin Froman 2837210cf4 blockapi decrypt fix 1 year ago
Kevin Froman d0e6f6c4af bump requirements 1 year ago
Kevin Froman 67054446ae bump requirements 1 year ago
Kevin Froman f7f4732789 added floodfill network visualization script 1 year ago
Kevin Froman f80d58e5b8 added floodfill network visualization script 1 year ago
Kevin Froman 4a831a4a4d fixed closeness calculation 1 year ago
Kevin Froman 57ec04eff5 remove hs after creation in generate onions 1 year ago
Kevin Froman da11c74f6c finished closeness measurement 1 year ago
Kevin Froman c4be08bd23 added onion generator script 1 year ago
Kevin Froman 299980f126 work on flood fill network 1 year ago
Kevin Froman b5fe4453ed added graph simulation script 1 year ago
Kevin Froman 77de7e318d fix zalgo overflow in circles ui 1 year ago
Kevin Froman eec8c356ad fix systemrandom shuffle 1 year ago
Kevin Froman 6a4744997c correct wording in log warning in sidebar 1 year ago
Kevin Froman cf0507b82d ensure whole tree is made in createdirs 1 year ago
Kevin Froman 862b39c217 fix systemrandom shuffle 1 year ago
Kevin Froman b424ef6674 disable restart tor button if tor is not enabled 1 year ago
Kevin Froman 4847d9bddf added cpu optimize onboarding option 1 year ago
Kevin Froman 51c3078b90 newline in tor sidebar log 1 year ago
Kevin Froman 8a4c138eed don't netcheck if tor disabled 1 year ago
Kevin Froman 5dddeb3f10 remove random shuffle function for systemrandom equivalent 1 year ago
Kevin Froman fb85856f76 added bootstrap run argument 1 year ago
Kevin Froman 5c61708c61 added graph simulation script 1 year ago
Kevin Froman 183e6491d0 use SystemRandom for randomshuffle instead of own rolled implementation 1 year ago
Kevin Froman 3ca05e2390 added sidebar log warning 1 year ago
Kevin Froman 88ec98c92a size sanity in webui sidebar log output 1 year ago
Kevin Froman 8f52fa4669 autoscroll sidebar log 1 year ago
Kevin Froman 60c7e6cb37 now shows log in sidebar 1 year ago
Kevin Froman c23b286540 added file reader offset 1 year ago
Kevin Froman 723d004e5c disable autocomplete for mail message subjects 1 year ago
Kevin Froman 989692c6ac add disable-plugin-list, --store-plaintext and --dev-mode run arguments 1 year ago
Kevin Froman fcfecaff7e fix removing circles from nav bar when disabled 1 year ago
Kevin Froman 895b4fe4fd side bar and ui node list fixes 1 year ago
Kevin Froman cf669024bf handle invalid input when adding peer better 1 year ago
Kevin Froman a9096dc048 correct return type in storage setdata 1 year ago
Kevin Froman 1e7d7840b1 added showblocks script 1 year ago
Kevin Froman 57225f57f0 work on fixing weird upload issues 1 year ago
Kevin Froman fbcb95be9e fix mixmate indent 1 year ago
Kevin Froman c2b7246048 handle bad user ids in mail ui better 1 year ago
Kevin Froman e0f59784b1 Fix mixmate and sneakernet 1 year ago
Kevin Froman 2291d5a5f2 reduce pow 1 year ago
Kevin Froman d067a343e6 fixed pex 1 year ago
Kevin Froman 3ef29077e7 plaintext block fixes with sharing, fixed peer lookup 1 year ago
Kevin Froman 835c2e527e Fixed encrypted uploads 1 year ago
Kevin Froman 1c44a514a5 Fixed encrypted uploads 1 year ago
Kevin Froman 5baa048a4e Fixed encrypted uploads 1 year ago
Kevin Froman 0338cd64b6 do not upload plaintext to peers that do not support it, closes #14 1 year ago
Kevin Froman fc7db42deb do not upload plaintext to peers that do not support it, closes #14 1 year ago
Kevin Froman 503bf65cbe fix error on deletion or upload of plaintext blocks to node that does not support it 1 year ago
Kevin F da57dc373f
Merge pull request #100 from beardog108/dependabot/pip/ujson-4.0.1 1 year ago
dependabot-preview[bot] f0bb41daac
Bump ujson from 4.0.0 to 4.0.1 1 year ago
Kevin Froman 2dc706a894 fixed sneakernet, removed unused vdf 1 year ago
Kevin Froman d0baa7fd12 deleted csharppow and bumped version 1 year ago
Kevin Froman 10689f24d7 added graph info to readme 1 year ago
Kevin F b010fa8326
Merge pull request #99 from beardog108/dependabot/pip/ujson-4.0.0 1 year ago
Kevin Froman b5b7c756ea removed old onionr contact address from readme 1 year ago
dependabot-preview[bot] 99371cfec5
Bump ujson from 3.2.0 to 4.0.0 1 year ago
Kevin Froman 10ba2be93f small bug fixes, added more cors headers for pub api browser requests 1 year ago
Kevin Froman 45940b2dba + added address adding input to web ui in sidebar 1 year ago
Kevin Froman 092233027c allow truncated hashes in getblocks public endpoint 1 year ago
Kevin Froman 5abe4cf704 (re)added cors to public api 1 year ago
Kevin Froman ab9726a41a in removeblock calculate size of block before removing it 1 year ago
Kevin Froman 6370d07f90 fix standalone block file ext in removeblock 1 year ago
Kevin Froman fa0318802b use new pow value formats 1 year ago
Kevin Froman 366295f09c Added upload mixing run script arg 1 year ago
Kevin Froman 48f988877d use new pow value formats 1 year ago
Kevin Froman 68a557daf5 added block type filter for public get blocks endpoint 1 year ago
Kevin Froman 02cdbc75ce c# pow implementation work 1 year ago
Kevin F 843f1c1a8e
Merge pull request #97 from beardog108/dependabot/pip/helium-3.0.5 1 year ago
Kevin F 50f0ff8da6
Merge pull request #98 from beardog108/dependabot/pip/gevent-20.9.0 1 year ago
Kevin Froman 60d6aa0510 c# pow implementation work 1 year ago
dependabot-preview[bot] 0c315c3181
Bump gevent from 20.6.2 to 20.9.0 1 year ago
Kevin Froman e9dbc9fa09 c# pow implementation work 1 year ago
Kevin Froman 499981ed52 c# pow implementation work 1 year ago
Kevin Froman 60c1ec07e9 started c# pow implementation 1 year ago
Kevin Froman fd0f13cf63 started c# pow implementation 1 year ago
Kevin Froman 3199f93d4b work on making mail more efficient, added --private-ke argument imp to run script 1 year ago
Kevin Froman 646a7c0b80 Removed difficulty adjuster from pow 1 year ago
Kevin Froman 5b3d76067a Move users to use phrase system for sites as well 1 year ago
Kevin Froman c0ebfec034 Default disabled upload mixing with new config value 1 year ago
Kevin Froman c19797bb2e Added remove log on exit argument to run script 1 year ago
Kevin Froman 1f067f614a Added tor restart button to index and tor restart command. Enabled tor restart daemon event 1 year ago
Kevin Froman b4d80da3ff Work on fixing node uptime 1 year ago
dependabot-preview[bot] 43d3e687d7
Bump helium from 3.0.4 to 3.0.5 1 year ago
Kevin Froman 4bc2bf5db5 removed deterministic keys due to poor hashing 1 year ago
Kevin Froman c7e0b6c1b2 Removed batch files, added WIP run wrapper script 1 year ago
Kevin Froman 247b1f616d added missing last release to changelog 1 year ago
Kevin Froman b4ddf343fc Removed unreachable return in onionrproofs 1 year ago
Kevin Froman 196d02a751 Sped up + fixed statistics table command using psutil, removed checkcommunicator as a result 1 year ago
Kevin Froman a5b6805b5f Update readme to have version tag 1 year ago
Kevin Froman e11c3d2733 Merge branch 'master' into remote-access 1 year ago
Kevin F 97708e5875
Merge pull request #91 from beardog108/dependabot/pip/pip-tools-5.3.1 1 year ago
Kevin F 41e57cb5b9
Merge pull request #96 from beardog108/dependabot/pip/ujson-3.2.0 1 year ago
dependabot-preview[bot] 79a5e6ca3e
Bump ujson from 3.0.0 to 3.2.0 1 year ago
Kevin Froman 2ce5f48c90 Added ui.public_remote_enabled and ui.public_remote_hosts 1 year ago
Kevin Froman 17ef138c21 bump version 1 year ago
Kevin Froman cb88ff8c3f update runtime test 1 year ago
Kevin Froman d40bd85368 added test for api version 1 year ago
dependabot-preview[bot] d7e7d4499b
Bump pip-tools from 5.2.1 to 5.3.1 1 year ago
Kevin F 104f71c0c3
Merge pull request #95 from beardog108/dependabot/pip/pdoc3-0.9.1 1 year ago
Kevin Froman 16cdd6d877 Merge branch 'master' of ssh://git.voidnet.tech:/kev/Onionr 1 year ago
Kevin Froman b7091d2062 fix showlogo crash when not connected to terminal, bump version 1 year ago
Kevin Froman f8fcd6d4e5 Formatting changes 1 year ago
Kevin Froman 15a66c7fb4 fix showlogo crash when not connected to terminal 1 year ago
Kevin Froman 37e5dbab4b Moved plugin web files to be in the plugin folder to reduce staticfiles blueprint coupling 1 year ago
dependabot-preview[bot] 3df1859df5
Bump pdoc3 from 0.8.3 to 0.9.1 1 year ago
Kevin Froman 14f2d03ebf Formatting improvements in httpapis 1 year ago
Kevin Froman 3422ca43ff Fixing block syncing quirks 1 year ago
Kevin Froman a83351a73c misc formatting improvements 1 year ago
Kevin Froman 39650a4ca0 catch and log when cannot reach non-managed tor 1 year ago
Kevin Froman 8d54519771 implemented the sybil attack script 1 year ago
Kevin Froman 9f1f1435ce Fix block downloading for shared state 1 year ago
Kevin Froman 78e533952c added sybil attack script 1 year ago
Kevin Froman e19e23022b show message if user tries to open .onion as onionr site 1 year ago
Kevin Froman 68aac2153b add some more useful logging for failed signed blocks in validatemetadata 1 year ago
Kevin Froman 15379a7c2f add readline to client api request crafter 1 year ago
Kevin Froman 61bc5fd34b use better language for LE on onboarding page 1 year ago
Kevin Froman b66e1d852e clear stats interval on shutdown button, remove deprecated sync httpget 1 year ago
Kevin Froman 02fde0ad70 fix subprocesspow keyboard interrupt not being catched 1 year ago
Kevin Froman 308fca7c22 added creating blocks count to sidebar 1 year ago
Kevin Froman 72653c1e93 check for light theme before enabling particles 1 year ago
Kevin Froman cd0b69b03f Use init-time creation only of StorageCounter to use less inotify instances 1 year ago
Kevin Froman bbc9646a25 fix LANServer dns rebinding crashing because of old kwarg format 1 year ago
Kevin Froman fd73f63ecd fix public block list not working because of old kwarg format 1 year ago
Kevin Froman 2cf7a8c8b3 Fix unclickable labels in onboarding 1 year ago
Kevin Froman 6089cc3c98 fix formatting in onionrservices 1 year ago
Kevin Froman 05127dd3b7 remove warden since it won't be implemented 1 year ago
Kevin Froman d39c12ab4d Update runtime test 1 year ago
Kevin Froman ce0e60c4ea Correct formatting in expiredblocks 1 year ago
Kevin Froman 0938bf0692 Deduplicate infoNumbers in transportinfo keydb 1 year ago
Kevin Froman fb4dd07ba4 fix missed blockHash->block_hash change in onionrstorage 1 year ago
Kevin Froman 6f242298fe Don't run LAN unittests on QubesOS 1 year ago
Kevin Froman 0b2658374b Added/corrected timeouts for sqlite3 database connections 1 year ago
Kevin Froman 2a7c933321 Utils format fixes 1 year ago
Kevin Froman c9af24392d Fix netutils formatting 1 year ago
Kevin Froman 272d7d7f74 Removed Windows specific code 1 year ago
Kevin Froman ce63c4cd3b Show a terminal message if bridge is enabled but one is not set. By design, there is no easy way for us to get Tor bridges automatically 1 year ago
Kevin Froman e900d597d8 Added repo-size shield to readme 1 year ago
Kevin Froman 2ddeab8788 work on tor blocking detection 1 year ago
Kevin Froman a24086da62 add comments to bootstrappeers 1 year ago
Kevin Froman 8389ed190c Basic check for QubesOS in runtime tests and to avoid starting LAN server 1 year ago
Kevin Froman 87b8655b83 do not start lan on qubes 1 year ago
Kevin Froman feb8004c95 fix generating hashes not being removed when done, add endpoint to get generating hashes 1 year ago
Kevin Froman a01b645a79 added dump endpoints to debug api 1 year ago
Kevin Froman 3473c5e36a Improved torcontrol formatting and efficency 1 year ago
Kevin Froman e14955cb6b Improved formatting and removed unnecessary imports in torcontrol 1 year ago
Kevin Froman 504c53edb3 added debug info api files 1 year ago
Kevin Froman 5e00bb930f added client api request crafting script 1 year ago
Kevin Froman 6976dcf8f3 Friends API now shows redirect error message when ref header not set instead of request failing 1 year ago
Kevin Froman 552e7427d8 Merge branch 'master' of ssh://git.voidnet.tech:/kev/Onionr into sidebar 1 year ago
kev 661a4ee3d2 Fix doc links in readme 1 year ago
Kevin Froman 96af4e8db0 Fixed some broken things from communicator decoupling 1 year ago
Kevin Froman bff2595ac9 Merge branch 'new-release' into sidebar 1 year ago
Kevin Froman 522cd2c462 bumped requirements versions 1 year ago
Kevin 2f5c1311be update readme to reflect release tag usage 1 year ago
Kevin 077f530b72 Fix peeraction still using comm_inst 1 year ago
Kevin 5930f3bfad Added missing tests and sidebar files 1 year ago
Kevin ab10cea8b6 add forgotten spawndaemonthreads and added license info to bulma extension files 1 year ago
Kevin 086f2f718c fix onlinepeers decoupling 1 year ago
Kevin 4cf17ffe62 work on removing communicator 1 year ago
Kevin 0b34aa7385 added onionrthreads to replace communicator timers 1 year ago
Kevin 6f1daf50d3 added setup kvvars 1 year ago
Kevin 5bde99967b Moved all communicator ext vars to KV 1 year ago
Kevin f28d469e56 Moved all communicator ext vars to KV 1 year ago
Kevin 080f33bf1f More decoupling, removed unnecessary announceCache 1 year ago
Kevin fad5e8547e Moved cooldownPeer to KV to further reduce coupling 1 year ago
Kevin dde10b7005 Moved offllinePeers to KV to further reduce coupling 1 year ago
Kevin 10c1cd7803 Moved blocksToUpload to KV to further reduce coupling 1 year ago
Kevin 97a5f50271 Moved dbTimestamps and newPeers to KV for more decoupling 1 year ago
Kevin e00d41f8a9 Moved onlinePeers and announceCache to kv for more decoupling 1 year ago
Kevin 6a6718c9fd Moved onlinePeers to KV to further reduce coupling 1 year ago
Kevin 0e4e7bb050 Moved communicator shutdown over to KV model for more decoupling 1 year ago
Kevin F 0460d3380f
Merge pull request #89 from beardog108/dependabot/pip/deadsimplekv-0.3.2 1 year ago
dependabot-preview[bot] e3b1eaad17
Bump deadsimplekv from 0.3.1 to 0.3.2 1 year ago
Kevin 6ecb62356a Moved blockQueue to DSKV singleton as part of communicator decoupling 1 year ago
Kevin 47013431d2 Removed use of communicator's storagecounter to reduce coupling 1 year ago
Kevin b4be481f81 bumped urllib3 to 1.25.10 1 year ago
Kevin f4d1739e4a made storagecounter use a watchdog (inotify) instead of excessive file reads 1 year ago
  1. 4
      .dockerignore
  2. 2
      .env
  3. 6
      .gitignore
  4. 39
      CHANGELOG.md
  5. 35
      Dockerfile
  6. 11
      ISSUE_TEMPLATE.md
  7. 72
      README.md
  8. 1
      docs/TODO.txt
  9. BIN
      docs/basic-onionr-user-guide.pdf
  10. 19
      docs/dev/generating-requirements.txt.md
  11. 44
      docs/dev/running-tests.md
  12. 43
      docs/dev/security-mechanisms.md
  13. 9
      docs/dev/selected-papers.md
  14. 63
      docs/dev/setup.md
  15. 28
      docs/docker.md
  16. 24
      docs/faq.md
  17. 1
      docs/html/index.html
  18. 88
      docs/html/src/apiservers/index.html
  19. 411
      docs/html/src/apiservers/private/index.html
  20. 175
      docs/html/src/apiservers/private/register_private_blueprints.html
  21. 220
      docs/html/src/apiservers/public/index.html
  22. 166
      docs/html/src/bigbrother/index.html
  23. 77
      docs/html/src/bigbrother/ministry/index.html
  24. 149
      docs/html/src/bigbrother/ministry/ofcommunication.html
  25. 227
      docs/html/src/bigbrother/ministry/ofexec.html
  26. 119
      docs/html/src/communicator/bootstrappeers.html
  27. 210
      docs/html/src/communicator/daemoneventhooks/index.html
  28. 117
      docs/html/src/communicator/daemoneventhooks/removefrominsertqueue.html
  29. 866
      docs/html/src/communicator/index.html
  30. 124
      docs/html/src/communicator/onlinepeers/clearofflinepeer.html
  31. 91
      docs/html/src/communicator/onlinepeers/index.html
  32. 173
      docs/html/src/communicator/onlinepeers/onlinepeers.html
  33. 141
      docs/html/src/communicator/onlinepeers/pickonlinepeers.html
  34. 127
      docs/html/src/communicator/onlinepeers/removeonlinepeer.html
  35. 178
      docs/html/src/communicator/peeraction.html
  36. 215
      docs/html/src/communicator/uploadqueue/index.html
  37. 202
      docs/html/src/communicatorutils/announcenode.html
  38. 242
      docs/html/src/communicatorutils/connectnewpeers.html
  39. 166
      docs/html/src/communicatorutils/cooldownpeer.html
  40. 121
      docs/html/src/communicatorutils/deniableinserts.html
  41. 375
      docs/html/src/communicatorutils/downloadblocks/index.html
  42. 139
      docs/html/src/communicatorutils/downloadblocks/shoulddownload.html
  43. 206
      docs/html/src/communicatorutils/housekeeping.html
  44. 130
      docs/html/src/communicatorutils/index.html
  45. 173
      docs/html/src/communicatorutils/lookupadders.html
  46. 254
      docs/html/src/communicatorutils/lookupblocks.html
  47. 159
      docs/html/src/communicatorutils/netcheck.html
  48. 253
      docs/html/src/communicatorutils/onionrcommunicatortimers.html
  49. 111
      docs/html/src/communicatorutils/proxypicker.html
  50. 90
      docs/html/src/communicatorutils/restarttor.html
  51. 144
      docs/html/src/communicatorutils/servicecreator.html
  52. 313
      docs/html/src/communicatorutils/uploadblocks/index.html
  53. 151
      docs/html/src/communicatorutils/uploadblocks/mixmate/index.html
  54. 300
      docs/html/src/communicatorutils/uploadblocks/mixmate/pool.html
  55. 220
      docs/html/src/communicatorutils/uploadblocks/session.html
  56. 422
      docs/html/src/communicatorutils/uploadblocks/sessionmanager.html
  57. 431
      docs/html/src/config/index.html
  58. 213
      docs/html/src/config/onboarding.html
  59. 143
      docs/html/src/coredb/blockmetadb/add.html
  60. 133
      docs/html/src/coredb/blockmetadb/expiredblocks.html
  61. 266
      docs/html/src/coredb/blockmetadb/index.html
  62. 176
      docs/html/src/coredb/blockmetadb/updateblockinfo.html
  63. 69
      docs/html/src/coredb/dbfiles.html
  64. 81
      docs/html/src/coredb/index.html
  65. 254
      docs/html/src/coredb/keydb/addkeys.html
  66. 91
      docs/html/src/coredb/keydb/index.html
  67. 239
      docs/html/src/coredb/keydb/listkeys.html
  68. 184
      docs/html/src/coredb/keydb/removekeys.html
  69. 230
      docs/html/src/coredb/keydb/transportinfo.html
  70. 251
      docs/html/src/coredb/keydb/userinfo.html
  71. 65
      docs/html/src/data2871027835/index.html
  72. 246
      docs/html/src/data2871027835/plugins/chat/controlapi.html
  73. 80
      docs/html/src/data2871027835/plugins/chat/index.html
  74. 122
      docs/html/src/data2871027835/plugins/chat/main.html
  75. 200
      docs/html/src/data2871027835/plugins/chat/peerserver.html
  76. 53
      docs/html/src/data2871027835/plugins/chat/settings.html
  77. 65
      docs/html/src/data2871027835/plugins/encrypt/index.html
  78. 414
      docs/html/src/data2871027835/plugins/encrypt/main.html
  79. 236
      docs/html/src/data2871027835/plugins/flow/flowapi.html
  80. 70
      docs/html/src/data2871027835/plugins/flow/index.html
  81. 476
      docs/html/src/data2871027835/plugins/flow/main.html
  82. 90
      docs/html/src/data2871027835/plugins/index.html
  83. 65
      docs/html/src/data2871027835/plugins/metadataprocessor/index.html
  84. 165
      docs/html/src/data2871027835/plugins/metadataprocessor/main.html
  85. 85
      docs/html/src/data2871027835/plugins/pms/index.html
  86. 127
      docs/html/src/data2871027835/plugins/pms/loadinbox.html
  87. 216
      docs/html/src/data2871027835/plugins/pms/mailapi.html
  88. 206
      docs/html/src/data2871027835/plugins/pms/main.html
  89. 96
      docs/html/src/data2871027835/plugins/pms/onblacklist.html
  90. 333
      docs/html/src/data2871027835/plugins/pms/sentboxdb.html
  91. 65
      docs/html/src/data2871027835/plugins/searchengine/index.html
  92. 82
      docs/html/src/data2871027835/plugins/searchengine/main.html
  93. 116
      docs/html/src/etc/cleanup/index.html
  94. 59
      docs/html/src/etc/dependencycheck.html
  95. 136
      docs/html/src/etc/humanreadabletime.html
  96. 90
      docs/html/src/etc/index.html
  97. 171
      docs/html/src/etc/onionrvalues.html
  98. 113
      docs/html/src/etc/powchoice.html
  99. 90
      docs/html/src/etc/waitforsetvar.html
  100. 92
      docs/html/src/filepaths/index.html

4
.dockerignore

@ -1,4 +1,6 @@
onionr/data/**/*
onionr/data
RUN-WINDOWS.bat
MY-RUN.sh
Dockerfile
.dockerignore
.git

2
.env

@ -1 +1 @@
PYTHONPATH=./venv/bin/python3.8
PYTHONPATH=./venv/bin/python

6
.gitignore

@ -13,11 +13,11 @@ src/data/*
src/data-backup/*
run.sh
src/.onionr-lock
daemon-true.txt
.vscode/tags
.vscode/settings.json
venv/*
venv*
src/fs*
src/tmp/*
testdata/*
@ -40,3 +40,5 @@ src/data/*.log
onionr-*.pkg.tar.gz
pkg/
spawnnodes.py
static-data/tor-node-list.dat

39
CHANGELOG.md

@ -5,9 +5,44 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [8.0.1] - 2020-12-22
* Fix subprocess in 3.9x with dumb hack
* Dependency bumps
## [8.0.0] - 2020-12-04
* Decrease PoW until better implementation is made
## [7.2.0] - 2020-12-03
* Purge blocks not meeting current pow on startup
* Check block POW before LAN sync
* WSL fixes
## [7.1.0] - 2020-11-23
* Check for ownership of existing dirs in createdirs, this prevents the rare edge case where a user might use a home directory in a location an attacker could write (allowing arbitrary code execution via plugins). This was already partially mitigated by the chmod of the home directory in any case, but this further fixes the issue.
## [7.0.0] - 2020-11-22
* Removed communicator timers
* Removed direct connections and chat (these will be either plugins or separate programs/processes in the future)
## [5.1.0] - 2020-09-07
* Moved plugin web files to be in the plugin folder to reduce staticfiles blueprint coupling
* Added basic sidebar on index page
* Many bug fixes
## [5.0.1] - 2020-08-08
* bumped deadsimplekv to 0.3.2
* bumped urllib3 to 1.25.10
## [5.0.0] - 2020-07-23
- Removed single-process POW support (was only needed on Windows)

35
Dockerfile

@ -1,28 +1,31 @@
FROM python
FROM python:3.7
EXPOSE 8080
USER root
RUN mkdir /app
WORKDIR /app
#Base settings
ENV HOME /root
ENV ONIONR_DOCKER=true
#Install needed packages
RUN apt update && apt install -y tor locales
RUN apt-get update && apt-get install -y tor locales
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
WORKDIR /srv/
ADD ./requirements.txt /srv/requirements.txt
ADD ./requirements.txt /app/requirements.txt
RUN pip3 install --require-hashes -r requirements.txt
WORKDIR /root/
#Add Onionr source
COPY . /root/
VOLUME /root/data/
COPY . /app/
#Set upstart command
CMD bash
VOLUME /app/data/
#Expose ports
EXPOSE 8080
#Default to running as nonprivileged user
RUN chmod g=u -R /app
USER 1000
ENV HOME=/app
CMD ["bash", "./run-onionr-node.sh"]

11
ISSUE_TEMPLATE.md

@ -5,8 +5,9 @@
# Steps to Reproduce
# Version Information
Onionr:
OS:
Python:
Tor:
I2P:
* Onionr:
* OS:
* Python:
* Tor:
* CPU:

72
README.md

@ -11,9 +11,9 @@
Anonymous social platform, mail, file sharing.
</p>
<img src='https://img.shields.io/github/license/beardog108/onionr'> <img src='https://gitlab.com/beardog/Onionr/badges/master/build.svg'> <img src='https://img.shields.io/badge/python%20version%20%F0%9F%90%8D-3.7+-blue'> <img src='https://img.shields.io/github/commit-activity/m/beardog108/onionr'>
<img src='https://img.shields.io/github/license/beardog108/onionr'> <img src="https://img.shields.io/github/repo-size/beardog108/onionr"> <img src='https://img.shields.io/badge/python%20version%20%F0%9F%90%8D-3.7+-blue'> <img src='https://img.shields.io/github/commit-activity/m/beardog108/onionr'>
<a href='https://www.reddit.com/r/onionr'><img src = 'https://img.shields.io/reddit/subreddit-subscribers/onionr?style=social'></a> <a href='https://twitter.com/onionrnet'><img src='https://img.shields.io/twitter/follow/onionrnet?style=social'></a>
<a href='https://www.reddit.com/r/onionr'><img src = 'https://img.shields.io/reddit/subreddit-subscribers/onionr?style=social'></a> <a href='https://twitter.com/onionrnet'><img src='https://img.shields.io/twitter/follow/onionrnet?style=social'></a> - [Discord](https://discord.gg/DVF2bEAzrt) - Matrix: #onionr:amorgan.xyz
| | | |
| ----------- | ----------- | ----------- |
@ -21,7 +21,7 @@
| [Docs](#documentation)/[web copy](https://beardog108.github.io/onionr/) | [Get involved](#help-out) | [Onionr.net](https://onionr.net/)/[.onion](http://onionrbak72t5zhbzuey2fdkpczlvhowgcpqc6uoyrd3uxztzxwz5cyd.onion/) |
<hr>
---
**The main repository for this software is at https://git.VoidNet.tech/kev/onionr/**
@ -30,19 +30,25 @@ Mirrors: [Github](https://github.com/beardog108/onionr), [Gitlab](https://gitlab
Onionr ("Onion Relay") is a decentralized/distributed peer-to-peer communication network, designed to be anonymous and resistant to (meta)data analysis, spam, and corruption.
Onionr stores data in independent packages referred to as 'blocks'. The blocks are distributed to all interested nodes. Blocks and user IDs cannot be easily proven to have been created by a particular user. Even if there is enough evidence to believe that a specific user created a block, nodes still operate behind Tor and as such cannot be trivially unmasked. Anonymity is achieved by a stateless network, with no given indication of what node a block originates from. Through message mixing and key privacy, it is intended to be nigh impossible to discover the identity of a message creator or recipient.
Onionr gives the individual the ability to speak freely, without fear of surveillance and censorship.
Via long-term traffic analysis, a well funded adversary may discover the most probable node(s) to be creating a set of related blocks, however doing so would only lead them to a node behind Tor. As the first node that a block appears on is almost always not the creator of the block, there is plausible deniability regarding the true creator of the block.
---
Onionr gives the individual the ability to speak freely, without fear of surveillance and censorship.
Onionr stores data in independent packages referred to as 'blocks'. The blocks are distributed to all nodes interested in their data type. Blocks and user IDs cannot be easily proven to have been created by a particular user. Even if there is enough evidence to believe that a specific user created a block, nodes still operate behind Tor and as such cannot be trivially unmasked. Anonymity is achieved by a stateless network, with no given indication of what node a block originates from. In fact, since one is not required to participate in routing or storage to insert a message, blocks often do not originate from any identifiable node.
Onionr works primarily via epidemic/gossip style routing, with message delivery taking roughly log<sub>F</sub>(N) cycles where F is the number of nodes to send a message to each cycle and N is the number of connected nodes. So a network of 100 million nodes can deliver messages in a few minutes even with high packet loss and malfunctioning nodes.
Through message mixing and key privacy, it is intended to be nigh impossible to discover the identity of a message creator or recipient. Via long-term traffic analysis, a well funded adversary may discover the most probable node(s) to be creating a set of related blocks, however doing so would only lead them to a node behind Tor. As the first node that a block appears on is almost always not the creator of the block, there is plausible deniability regarding the true creator of the block.
Users are identified by ed25519/curve25519 public keys, which can be used to sign blocks or send encrypted data.
Onionr can be used for mail, as a social network, instant messenger, file sharing software, or for encrypted group discussion.
Due to the nature of anonymity, the graph as implemented in this reference network is dense, undirected, cyclic and can be disconnected. Since Onionr is technically just a data format, any routing scheme can be used to pass messages.
The whitepaper is available [here](docs/whitepaper.md).
![Tor stinks slide image](docs/tor-stinks-02.png)
---
## Main Features
@ -57,9 +63,9 @@ Onionr ships with various application plugins ready for use out of the box:
Currently usable:
* Mail
* Public anonymous chat/message board
* Simple webpage hosting - Will be greatly extended
* 📨 Mail
* 💬 Public anonymous chat/message board
* 📃 Simple webpage hosting - Will be greatly extended
* File sharing (Work in progress)
Not yet usable:
@ -67,13 +73,6 @@ Not yet usable:
* Instant messaging
## Watch the talk from BSidesPDX 2019
<a href="https://invidio.us/watch?v=mrULtmSkKxg">
<img src="docs/talk.png" alt="improving anonymous networking talk link" width="600">
</a>
# Screenshots
<img alt='Node statistics page screenshot' src='docs/onionr-1.png' width=600>
@ -92,19 +91,22 @@ Encrypted, metadata-masking mail application. One of the first distributed mail
More docs coming soon.
* [Block specification](docs/specs/block-spec.md)
* [HTTP API](docs/http-api.md)
* [Block specification](docs/dev/specs/block-spec.md)
* [HTTP API](docs/dev/http-api.md)
# Install and Run on Linux
The following applies to Ubuntu Bionic. Other distros may have different package or command names.
The following applies to Ubuntu Bionic. Other distributions may have different package or command names.
Master may be unstable, you should use the latest release tag. (checkout via git: `$ git checkout release-latest`)
`$ sudo apt install python3-pip python3-dev tor`
* Have python3.7+, python3-pip, Tor (daemon, not browser) installed. python3-dev is recommended.
* Clone the git repo: `$ git clone https://gitlab.com/beardog/onionr`
* You may need build-essentials or the equivalent of your platform
* Clone the git repo: `$ git clone https://gitlab.com/beardog/onionr --tags`
* cd into install direction: `$ cd onionr/`
* Install the Python dependencies ([virtualenv strongly recommended](https://virtualenv.pypa.io/en/stable/userguide/)): `$ pip3 install --require-hashes -r requirements.txt`
* Install the Python dependencies ([virtualenv strongly recommended](https://virtualenv.pypa.io/en/stable/userguide/)): `$ pip3 install --require-hashes -r requirements.txt` (on ARM64 devices like Raspberry Pi 4's use requirements-ARM.txt instead.)
* (Optional): Install desktop notification dependencies: `$ pip3 install --require-hashes -r requirements-notifications.txt`
(--require-hashes is intended to prevent exploitation via compromise of PyPi/CA certificates)
@ -117,11 +119,13 @@ The following applies to Ubuntu Bionic. Other distros may have different package
* Gracefully stop Onionr from CLI `$ ./onionr.sh stop`
# Contact
Email: beardog [ at ] mailbox.org
# Contact/Community
Onionr Mail: `particularizing-zabaione-defuze-iodizer-saucepan-patientest-sell-waken-chifforobe-embonpoint-aquanaut-chambermaid-barky-fumer-jolt-biotic`
* Email: beardog [ at ] mailbox.org
* Twitter: [@onionrnet](https://twitter.com/onionrnet)
* Onionr Mail: decentralized-fiery-freehearted-skimmer-yodling-topstitch-divorceable-ojibwa-resettlement-infracted-lessor-noninstinctual-leaseholder-counterpoised-couture-skinful
* Matrix: #onionr:amorgan.xyz
* Discord: https://discord.gg/DVF2bEAzrt (Discord is bad for freedom and privacy, this is only provided for convienience)
# Help out
@ -130,7 +134,7 @@ Everyone is welcome to contribute. Help is wanted for the following:
* Development (Get in touch first)
* Creation of a shared lib for use from other languages and faster proof-of-work
* Android and IOS development
* Windows and Mac support (already partially supported, testers needed)
* Mac support (already partially supported, testers needed)
* Bug fixes and development of new features
* Testing
* Translations/localizations
@ -139,6 +143,12 @@ Everyone is welcome to contribute. Help is wanted for the following:
* Security review/audit
* I2P support
## Watch the talk from BSidesPDX 2019
<a href="https://www.youtube.com/watch?v=mrULtmSkKxg">
<img src="docs/talk.png" alt="improving anonymous networking talk link" width="600">
</a>
## Contribute money:
Donating at least $3 gets you cool Onionr stickers. Get in touch if you want them.
@ -146,11 +156,13 @@ Donating at least $3 gets you cool Onionr stickers. Get in touch if you want the
![sticker](docs/sticker.png)
Bitcoin: [1onion55FXzm6h8KQw3zFw2igpHcV7LPq](bitcoin:1onion55FXzm6h8KQw3zFw2igpHcV7LPq) (Contact us for a unique address or for other coins)
* Bitcoin: [1onion55FXzm6h8KQw3zFw2igpHcV7LPq](bitcoin:1onion55FXzm6h8KQw3zFw2igpHcV7LPq) (Contact us for a unique address or for other coins)
* Monero: 4B5BA24d1P3R5aWEpkGY5TP7buJJcn2aSGBVRQCHhpiahxeB4aWsu15XwmuTjC6VF62NApZeJGTS248RMVECP8aW73Uj2ax
Monero: 4B5BA24d1P3R5aWEpkGY5TP7buJJcn2aSGBVRQCHhpiahxeB4aWsu15XwmuTjC6VF62NApZeJGTS248RMVECP8aW73Uj2ax
* USD (Card/Paypal (no account required)): [Ko-Fi](https://www.ko-fi.com/beardogkf)
USD (Card/Paypal): [Ko-Fi](https://www.ko-fi.com/beardogkf)
* Sign up for [privacy.com (refferal link)](https://privacy.com/join/FNNDF) to protect your personal information when contributing or shopping elsewhere, we both get $5 USD.
Note: probably not tax deductible

1
docs/TODO.txt

@ -15,5 +15,4 @@
* add BCC support to mail
* prevent local insertion success of duplicate block content
* truncate last N blocks when sharing list

BIN
docs/basic-onionr-user-guide.pdf

Binary file not shown.

19
docs/dev/generating-requirements.txt.md

@ -0,0 +1,19 @@
# Generating requirements.txt
To generate a requirements.txt file, install pip-tools from pip
Onionr requirements files should have hashes to prevent backdooring by the pypi server.
Put your package versions in requirements.in like normal. Child dependencies are usually not necessary:
```
requests==0.1.1
flask==0.1.1
```
Then generate the requirements.txt:
`$ pip-compile requirements.in --generate-hashes -o requirements.txt`
Your requirements.txt will have hash-pinned requirements of all dependencies and child dependencies.

44
docs/dev/running-tests.md

@ -0,0 +1,44 @@
# Running Onionr tests
Onionr has four types of tests:
* unittests
* integration tests
* selenium tests (web tests)
* runtime-tests
## unittests
Onionr uses Python's built in unittest module. These tests are located in tests/ (top level)
Run all tests with `$ make test`, which will also run integration tests.
Please note that one unittest tests if runtime-tests have passed recently. This is simply a forceful reminder to run those tests as well.
You can also run a single unittest in a loop by using the script scripts/run-unit-test-by-name.py
## integration tests
These tests are pretty basic and test on stdout of Onionr commands.
They are also run from `$ make test`
The runtime-tests do most of the actual integration testing.
## selenium tests
These are browser automation tests to test if the UI is working as how it should for a user.
There's only a couple and they're incomplete, so they can be ignored for now (test manually)
## runtime-tests
These are important. They look into the Onionr client Flask app when Onionr daemon is running and test a bunch of things.
If you do it a lot you should make your own Onionr network (disable official bootstrap)
You run this while the daemon is running (probably should make sure onboarding is done), with `$ onionr.sh runtime-test`
It's necessary to do this before running `$ make test` for unittesting

43
docs/dev/security-mechanisms.md

@ -0,0 +1,43 @@
# Onionr Security Mechanisms
## bigbrother 👁️
Bigbrother is a cheeky module that uses Python3.8+ sys auditing events to log and/or block certain sensitive events.
It has a little overhead, so one can disable it in config in general.security_auditing
[ChaosWebs.net/blog/preventing-arbitrary-code-execution-in-python38-with-auditing.html](https://chaoswebs.net/blog/preventing-arbitrary-code-execution-in-python38-with-auditing.html)
### Threat model
It is intended to log bugs leaking private file system information, block+log network leaks, and block+log eval-like arbitrary code execution. It is not intended to block malicious browser scripts or malicious Python plugins. It cannot work with subprocesses that do not activate the module.
It's not intended to be bulletproof by any means, but it helps.
### What big brother does
* Disk access checks for disk access outside. Only logs, does not block
* Network leaks. (Non Tor/LAN) Blocks and logs
* Arbitrary code execution: logs and blocks non-whitelisted bytecode importing/compiling and subprocesses.
## Sybil attacks
As with any decentralized network, sybil nodes could collude to spy or cause mayhem. Due to the gossip nature of Onionr, sybil nodes would have a hard time fully stopping the network. In terms of spying, they could not conclusively prove the origin of messages due to the multiple transport nature of the network and layering behind Tor/etc.
## Tor configuration
When managed by Onionr, Tor has a control port password that gets stored in Onionr config.
Tor is also configured to reject requests to non-onion services, which helps to stop redirect based denial of service attacks.
## Web security
Onionr secures both it's main web APIs with anti-dns-rebinding logic, which validates the host header used in connections to it. This is to prevent exfiltration of data and side channel deanonymization.
Onionr secures the client API with a token that must be passed in most requests, with the exception of static API files. This is to prevent CSRF and side channel deanonymization.
Onionr binds most services to random loopback addresses to reduce all cross-site web attacks, including discovery of Onionr on a computer from a normal website. This is not supported on Mac because Mac does not support non 'typical' loopback addresses.
Onionr has a strict content-security-policy, rejecting all non-localhost requests and denying inline scripts and similar insecure sources.

9
docs/dev/selected-papers.md

@ -0,0 +1,9 @@
# Interesting papers related to Onionr development
A paper being listed here is not end-all-be-all endorsement of every detail inside.
* [Epidemic Routing for Partially-Connected Ad Hoc Networks](https://web.archive.org/web/20200208074703/http://issg.cs.duke.edu/epidemic/epidemic.pdf)
* [Freenet: A distibuted decentralized information storage and retrieval system](https://freenetproject.org/assets/papers/ddisrs.pdf)
* [Protecting Free Expression Online with Freenet](https://freenetproject.org/assets/papers/ddisrs.pdf)
* [Bitmessage: A Peer‐to‐Peer Message Authentication and Delivery System](https://archive.org/details/BitmessageWhitepaper/)
* [MuON: Epidemic based Mutual Anonymity](https://web.archive.org/web/20060901153544/http://www.csl.mtu.edu/cs6461/www/Reading/MuON_ICNP2005.pdf)

63
docs/dev/setup.md

@ -1,13 +1,72 @@
<h1 align="center">Onionr Developer Guide</h1>
This page assumes that Onionr is already installed and normal user requirements are setup.
The Onionr development environment is simple. All one really needs is a supported Python version (currently 3.7-3.8 as of writing).
There are additional requirements specified in requirements-dev.txt
Intended to be used from VSCode, there are scripts in scripts/ named enable/disable-dev-config.py.
**Developers agree to the [CoC](../../CODE_OF_CONDUCT.md) and to contribute new code under GPLv3 or later**. Developers should stick to PEP8 in most cases, and write unittests or integration tests where possible.
## Developer Scripts
run-onionr-node.py can be used to start a node with specific parameters
Intended to be used from VSCode (but could work otherwise), there are scripts in scripts/ named enable/disable-dev-config.py.
These make modifications to the default config for the purpose of making testing Onionr nodes easier.
Be sure to disable it again before pushing work.
Generally, one should disable bootstrap list usage when making non trivial changes. This is a config option: general.use_bootstrap_list.
There are also scripts to generate new tests.
*When adjusting PoW, it will make your node not compatible with the existing network*
Generally, one should disable bootstrap list usage when testing non trivial changes. This is a config option: general.use_bootstrap_list. and can be configured through enable-dev-config.py and run-onionr-node.py
# Current state of Onionr [2021-01-14]
Onionr in it's current form is functional, albeit buggy.
## Current major components
Onionr runs via two main HTTP gevent servers serving Flask apps.
Dir: apiservers
* 1 Parent app hosts all public API endpoints for the Tor transport.
* 1 Parent app hosts all UI-related files and endpoints. Some commands and internal modules interact with this API as well
* The HTTP servers have strict anti-dns-rebinding and CSRF countermeasures, so there is a script to craft requests to the UI-related API in scripts/
* Block storage is currently handled via metadata in sqlite (mostly defunct now), and block data storage in a different database. This is in blocks/ in running Onionr daemon data directory
* cryptography is currently handled in onionrcrypto/ except for ephemeral messages which are handled by onionr
* Transport clients run from looping threads mostly created in communicator/__init__.py, this includes block lookups and uploading on the Tor transport
## Road map
There are several big ways Onionr will be improved in the next major version:
* Migration to the [new modular block system](https://git.voidnet.tech/kev/onionrblocks)
* Probability proof of work -> verifiable delay function
* Friend system built on top of signing proofs (Private networks?)
* Gossip transport improvements such as with neighbor improvements. See streamfill/ and [simple gossip](https://github.com/onion-sudo/simplegossip) for incomplete experiments
* Finish removing "communicator"
* I2P transports
* Gossip
* Torrents (patch for sha1?)
* Modular transports
* Currently transports are just threads coupled together.
* It would be better if there was a generic way to tell any loaded transport what blocks are wanted and feed back received blocks to the database
* Migrate to SafeDB for peers and blocks
* SafeDB wrapper that contacts http endpoint to store if it is running, otherwise directly open DB
* Separate UI logic from daemon. Refactor code to
* Improve cryptography
* Restore phrases or deterministic keys (generate key from password, be very careful)
* Change identities to be dual keys (ed25519+curve25519)
* Finish treasurechest
* Interact via [named pipes](https://en.wikipedia.org/wiki/Named_pipe)
* Ephemeral key management
* Encrypt/decrypt/sign/verify functions to keep key out of main memory
* PGP-like symmetric messages

28
docs/docker.md

@ -0,0 +1,28 @@
# Running Onionr in Docker
A Dockerfile is included in the root directory of Onionr.
In Docker version 20.10 (and probably others), there is a strange bug where Onionr must be run with -it or stdout will be garbled and it may hang.
## Clone and build the image
`$ git clone https://git.voidnet.tech/kev/onionr/`
`$ cd onionr`
`$ sudo docker build -t onionr .`
## Run Onionr
`$ sudo docker run -it -p 8080:8080 onionr`
Onionr will be accessible over any network interface by default, so make sure to either change the entry point bind-address argument or set a firewall rule.
That said, Onionr does protect it's interface by default with a web token, which will be shown in stdout.
**However, anyone who can access the port may be able to see what Onionr sites you have saved and potentially deanonymize your node**
## View the UI
Visit the address and port for the machine Onionr is running on, for example: http://192.168.1.5:8080/#<long-token-taken-from-stdout>
If you want a secure connection to the interface, either use a proxy such as nginx or caddy, or use [SSH tunneling](./vps-cloud-guide.md).

24
docs/faq.md

@ -0,0 +1,24 @@
<h1 align="center">Onionr FAQ</h1>
(Most of the FAQ answers apply to planned features and do not reflect in the demo network)
* How does Onionr route messages?
Onionr creates a message with an anti-spam proof (usually). It is then forwarded between nodes using binomial tree broadcast.
The network is structured based on the particular transport being used, for Tor, .onion addresses are used to determine closeness between nodes.
Churn due to connectivity changes or issues, membership changes or malicious activity means nodes need to sometimes look far away for missed messages.
To help with scale, messages can be intelligently deleted or forwarded, for example a mail message can be marked by its recipient at a given point for deletion, or forum posts can be set to expire after a short period or after lack of activity.
* Why do you use Python instead of [language]?
I'm very comfortable in Python, and I believe it is a maintainable language if you use it correctly with modern features, also it has many quality libraries useful to the project, like pyncal and stem. Most places in the project are IO bound.
* What do you think of bad actors who might use Onionr?
Users should be able to exclude viewing, processing, and hosting content they do not want to. To this end, I want to enable user-configurable filtering based on lists provided by friends, fuzzy hashing, and voting.

1
docs/html/index.html

@ -1 +0,0 @@
<meta http-equiv="refresh" content="0;URL='src/index.html'">

88
docs/html/src/apiservers/index.html

@ -1,88 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.7.4" />
<title>src.apiservers API documentation</title>
<meta name="description" content="Flask WSGI apps for the public and private API servers …" />
<link href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel='stylesheet'>
<link href='https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel='stylesheet'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" rel="stylesheet">
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>src.apiservers</code></h1>
</header>
<section id="section-intro">
<p>Flask WSGI apps for the public and private API servers.</p>
<p>Public is net-facing server meant for other nodes
Private is meant for controlling and accessing this node</p>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">&#34;&#34;&#34;Flask WSGI apps for the public and private API servers.
Public is net-facing server meant for other nodes
Private is meant for controlling and accessing this node
&#34;&#34;&#34;
from . import public, private
PublicAPI = public.PublicAPI
ClientAPI = private.PrivateAPI</code></pre>
</details>
</section>
<section>
<h2 class="section-title" id="header-submodules">Sub-modules</h2>
<dl>
<dt><code class="name"><a title="src.apiservers.private" href="private/index.html">src.apiservers.private</a></code></dt>
<dd>
<section class="desc"><p>Onionr - Private P2P Communication …</p></section>
</dd>
<dt><code class="name"><a title="src.apiservers.public" href="public/index.html">src.apiservers.public</a></code></dt>
<dd>
<section class="desc"><p>Onionr - Private P2P Communication …</p></section>
</dd>
</dl>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="src" href="../index.html">src</a></code></li>
</ul>
</li>
<li><h3><a href="#header-submodules">Sub-modules</a></h3>
<ul>
<li><code><a title="src.apiservers.private" href="private/index.html">src.apiservers.private</a></code></li>
<li><code><a title="src.apiservers.public" href="public/index.html">src.apiservers.public</a></code></li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.7.4</a>.</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad()</script>
</body>
</html>

411
docs/html/src/apiservers/private/index.html

@ -1,411 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.7.4" />
<title>src.apiservers.private API documentation</title>
<meta name="description" content="Onionr - Private P2P Communication …" />
<link href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel='stylesheet'>
<link href='https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel='stylesheet'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" rel="stylesheet">
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>src.apiservers.private</code></h1>
</header>
<section id="section-intro">
<p>Onionr - Private P2P Communication.</p>
<p>This file handles all incoming http requests to the client, using Flask</p>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">&#34;&#34;&#34;Onionr - Private P2P Communication.
This file handles all incoming http requests to the client, using Flask
&#34;&#34;&#34;
from typing import Dict
import hmac
import flask
from gevent.pywsgi import WSGIServer
from onionrutils import epoch
import httpapi
from filepaths import private_API_host_file
import logger
from etc import waitforsetvar
from . import register_private_blueprints
import config
from .. import public
&#34;&#34;&#34;
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see &lt;https://www.gnu.org/licenses/&gt;.
&#34;&#34;&#34;
class PrivateAPI:
&#34;&#34;&#34;Client HTTP api for controlling onionr and using UI.&#34;&#34;&#34;
callbacks: Dict[str, Dict] = {&#39;public&#39;: {}, &#39;private&#39;: {}}
def __init__(self):
&#34;&#34;&#34;Initialize the api server, preping variables for later use.
This initialization defines all of the API entry points
and handlers for the endpoints and errors
This also saves the used host (random localhost IP address)
to the data folder in host.txt
&#34;&#34;&#34;
self.config = config
self.startTime = epoch.get_epoch()
app = flask.Flask(__name__)
bind_port = int(config.get(&#39;client.client.port&#39;, 59496))
self.bindPort = bind_port
self.clientToken = config.get(&#39;client.webpassword&#39;)
self.host = httpapi.apiutils.setbindip.set_bind_IP(
private_API_host_file)
logger.info(&#39;Running api on %s:%s&#39; % (self.host, self.bindPort))
self.httpServer = &#39;&#39;
self.queueResponse = {}
self.get_block_data = httpapi.apiutils.GetBlockData(self)
register_private_blueprints.register_private_blueprints(self, app)
httpapi.load_plugin_blueprints(app)
self.app = app
def start(self):
&#34;&#34;&#34;Start client gevent API web server with flask client app.&#34;&#34;&#34;
waitforsetvar.wait_for_set_var(self, &#34;_too_many&#34;)
fd_handler = httpapi.fdsafehandler.FDSafeHandler
self.publicAPI = self._too_many.get( # pylint: disable=E1101
public.PublicAPI)
self.httpServer = WSGIServer((self.host, self.bindPort),
self.app, log=None,
handler_class=fd_handler)
self.httpServer.serve_forever()
def setPublicAPIInstance(self, inst):
&#34;&#34;&#34;Dynamically set public API instance.&#34;&#34;&#34;
self.publicAPI = inst
def validateToken(self, token):
&#34;&#34;&#34;Validate that the client token matches the given token.
Used to prevent CSRF and other attacks.
&#34;&#34;&#34;
if not self.clientToken:
logger.error(&#34;client password needs to be set&#34;)
return False
try:
return hmac.compare_digest(self.clientToken, token)
except TypeError:
return False
def getUptime(self) -&gt; int:
&#34;&#34;&#34;Safely wait for uptime to be set and return it.&#34;&#34;&#34;
while True:
try:
return epoch.get_epoch() - self.startTime
except (AttributeError, NameError):
# Don&#39;t error on race condition with startup
pass
def getBlockData(self, bHash, decrypt=False, raw=False,
headerOnly=False) -&gt; bytes:
&#34;&#34;&#34;Returns block data bytes.&#34;&#34;&#34;
return self.get_block_data.get_block_data(bHash,
decrypt=decrypt,
raw=raw,
headerOnly=headerOnly)</code></pre>
</details>
</section>
<section>
<h2 class="section-title" id="header-submodules">Sub-modules</h2>
<dl>
<dt><code class="name"><a title="src.apiservers.private.register_private_blueprints" href="register_private_blueprints.html">src.apiservers.private.register_private_blueprints</a></code></dt>
<dd>
<section class="desc"><p>Onionr - Private P2P Communication …</p></section>
</dd>
</dl>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="src.apiservers.private.PrivateAPI"><code class="flex name class">
<span>class <span class="ident">PrivateAPI</span></span>