Compare commits

...

438 Commits

Author SHA1 Message Date
Kaio Duarte Costa d4a87cd416 language localization corrections and line inclusion
Added: 'LocalePtBr' 
Correction: 'locale'
2022-11-18 13:28:36 +00:00
Kaio Duarte Costa 0455ed15d7 Brazilian Portuguese translation - 99% complete 2022-11-18 13:23:29 +00:00
Kaio Duarte Costa 1f15e8af39 Translation Update - 80% 2022-11-17 21:23:50 +00:00
Kaio Duarte Costa 32b4ad2576 File with Brazilian Portuguese translation 2022-11-17 00:45:01 +00:00
Sarah Jamie Lewis 08d337401f Update Flutter Build Images 2022-11-16 17:54:23 +00:00
Sarah Jamie Lewis 91eca10f12 Update test/crypto deps 2022-11-16 17:54:23 +00:00
Sarah Jamie Lewis 870e7338ae Copyright notice 2022-11-16 17:54:23 +00:00
Sarah Jamie Lewis af4aab3a47 New Cwtch Icons, Dutch / Turkish Translations 2022-11-16 17:54:23 +00:00
Dan Ballard 8972d0eef5 Merge pull request 'Fix Mac Builds' (#541) from fix-mac into trunk
Reviewed-on: cwtch.im/cwtch-ui#541
2022-09-10 21:34:51 +00:00
Sarah Jamie Lewis 881cfbd0a3 Merge branch 'trunk' into fix-mac 2022-09-10 21:34:19 +00:00
Sarah Jamie Lewis c5f684e42e Fix Mac Builds 2022-09-10 14:33:33 -07:00
Dan Ballard 2d89b30881 Merge pull request 'update-cwtch' (#540) from update-cwtch into trunk
Reviewed-on: cwtch.im/cwtch-ui#540
2022-09-10 19:47:23 +00:00
Sarah Jamie Lewis e51c30ecc9 Update Cwtch 2022-09-10 12:45:21 -07:00
Sarah Jamie Lewis fb4c438e1c Dutch Integration 2022-09-10 08:11:08 -07:00
Sarah Jamie Lewis 2eca5058a8 Merge pull request 'fix antispam tooltips/message blocking for p2p contacts' (#538) from fixAntispam into trunk
Reviewed-on: cwtch.im/cwtch-ui#538
2022-09-10 00:26:48 +00:00
Dan Ballard 94297ee85f fix antispam tooltips/message blocking for p2p contacts 2022-09-09 17:20:34 -07:00
Sarah Jamie Lewis 3fe732809d Merge pull request 'bump tor versions, move linux to harvested tor, bump lcg to 1.9.0' (#537) from torBump into trunk
Reviewed-on: cwtch.im/cwtch-ui#537
2022-09-09 23:29:33 +00:00
Dan Ballard 52b1f28252 lcg 1.9.0 2022-09-09 16:03:39 -07:00
Dan Ballard 16f413177f bump tor versions, move linux to harvested tor 2022-09-09 15:20:09 -07:00
Dan Ballard ea7b307de2 Merge pull request 'allow sharing proifile via qrcode' (#536) from qrcode into trunk
Reviewed-on: cwtch.im/cwtch-ui#536
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-09-09 22:19:55 +00:00
Dan Ballard 4d4901838e qrcode experiment; dont sent when doing antispam on enter 2022-09-09 14:55:58 -07:00
Dan Ballard cfa4b4f95b allow sharing proifile via qrcode 2022-09-09 14:02:28 -07:00
Dan Ballard 2defc7ea2c Merge pull request 'Update translations' (#535) from update-translations into trunk
Reviewed-on: cwtch.im/cwtch-ui#535
2022-09-09 19:58:13 +00:00
Sarah Jamie Lewis cfb32bc84a Update translations 2022-09-09 12:50:10 -07:00
Dan Ballard e570f6941b Merge pull request 'Expose antispam status in UI' (#534) from antispam into trunk
Reviewed-on: cwtch.im/cwtch-ui#534
2022-09-09 19:33:44 +00:00
Sarah Jamie Lewis 37e18d03a1 Expose antispam status in UI 2022-09-09 12:24:20 -07:00
Sarah Jamie Lewis 76c925d874 Merge pull request 'lcg bump; selected conversation sanity null;' (#533) from lcgBump into trunk
Reviewed-on: cwtch.im/cwtch-ui#533
2022-09-09 19:22:31 +00:00
Dan Ballard 975983be3c lcg bump; selected conversation sanity null; 2022-09-09 12:03:32 -07:00
Sarah Jamie Lewis 7edc46743f Merge pull request 'save message drafts (until cwtch close)' (#529) from savedrafts into trunk
Reviewed-on: cwtch.im/cwtch-ui#529
2022-08-26 21:58:18 +00:00
erinn 74ab39067e provider.listen false, revert final 2022-08-26 14:44:13 -07:00
erinn cac2064731 save message drafts (until cwtch close) 2022-08-26 14:34:33 -07:00
Dan Ballard 93284708e0 Merge pull request 'Load Messages when Syncing a Group' (#527) from load_messages_sync into trunk
Reviewed-on: cwtch.im/cwtch-ui#527
2022-08-19 02:45:58 +00:00
Sarah Jamie Lewis 521c0600a2 Load Messages when Syncing a Group
Fixes: #306
2022-08-18 14:26:42 -07:00
Dan Ballard 7f2a8d649d Merge pull request 'fix importBundle error handling and dupping of events' (#523) from noAddContactDup into trunk
Reviewed-on: cwtch.im/cwtch-ui#523
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-08-16 18:00:34 +00:00
Dan Ballard d550c23fbd importBundle returns result 2022-08-16 10:41:36 -07:00
Dan Ballard 5d09341277 fix importBundle error handling and dupping of events 2022-08-14 20:43:34 -07:00
Dan Ballard 191065f51c Merge pull request 'Initial Commit of Fastlane + Debug Accessibiltiy Views' (#521) from debug_access into trunk
Reviewed-on: cwtch.im/cwtch-ui#521
2022-08-12 14:51:34 +00:00
Sarah Jamie Lewis 47e26f18fc Initial Commit of Fastlane + Debug Accessibiltiy Views 2022-08-11 13:17:38 -07:00
Dan Ballard 2bf28e2c6a Merge pull request 'Initial Support for Turkish' (#519) from locale_tr into trunk
Reviewed-on: cwtch.im/cwtch-ui#519
2022-07-29 22:53:47 +00:00
Sarah Jamie Lewis af3c6940bd Initial Support for Turkish 2022-07-29 15:20:16 -07:00
Dan Ballard c3fa6735f5 Merge pull request 'Fix Quoting of Large Messages' (#517) from fixquote into trunk
Reviewed-on: cwtch.im/cwtch-ui#517
2022-07-27 19:38:46 +00:00
Sarah Jamie Lewis 8cfbc39988 Merge branch 'trunk' into fixquote 2022-07-27 17:38:21 +00:00
Sarah Jamie Lewis fc29b10f12 Fix Quoting of Large Messages 2022-07-27 10:35:54 -07:00
Dan Ballard a49ad07b40 Merge pull request 'Fix indexing error in conversation list search.' (#516) from pinned into trunk
Reviewed-on: cwtch.im/cwtch-ui#516
2022-07-25 18:09:09 +00:00
Sarah Jamie Lewis 34e296959a Fix indexing error in conversation list search.
Only allow pinning of accepted contacts
2022-07-25 09:31:56 -07:00
Sarah Jamie Lewis d4d7a54af1 Merge pull request 'docs on making a self signed cert' (#491) from winInstructions into trunk
Reviewed-on: cwtch.im/cwtch-ui#491
2022-07-25 16:27:37 +00:00
Sarah Jamie Lewis 5139846f31 Merge branch 'trunk' into winInstructions 2022-07-25 16:27:28 +00:00
Sarah Jamie Lewis 483213c63b Merge pull request 'Pinning Conversations' (#515) from pinned into trunk
Reviewed-on: cwtch.im/cwtch-ui#515
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-07-25 16:27:20 +00:00
Sarah Jamie Lewis 546ac6c23d Pinning Conversations 2022-07-22 10:18:55 -07:00
Dan Ballard 3a752b7397 Merge pull request 'Implement View Replies' (#507) from viewreplies into trunk
Reviewed-on: cwtch.im/cwtch-ui#507
2022-07-07 22:13:10 +00:00
Sarah Jamie Lewis 7540aed701 Handle viewing replies to images correctly 2022-07-07 13:51:59 -07:00
Sarah Jamie Lewis ad52f2e0c8 Fixup Padding and add message about no replies 2022-07-07 13:40:23 -07:00
Sarah Jamie Lewis 337f6dc5d9 Use Long Press on Android to access replies 2022-07-07 12:58:44 -07:00
Sarah Jamie Lewis 814e6df6f6 Implement View Replies 2022-07-07 12:58:44 -07:00
Dan Ballard 62ea8278f3 Merge pull request 'Prevent a new line in the middle of a sentance from sending a message' (#506) from filesharing-persist into trunk
Reviewed-on: cwtch.im/cwtch-ui#506
2022-07-06 22:02:03 +00:00
Sarah Jamie Lewis e8a638ed29 Prevent a new line in the middle of a sentance from sending a message 2022-07-06 15:00:34 -07:00
Sarah Jamie Lewis 44fba12d21 Merge pull request 'File sharing Manager + File Sharing Fixes' (#505) from filesharing-persist into trunk
Reviewed-on: cwtch.im/cwtch-ui#505
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-07-06 21:19:20 +00:00
Sarah Jamie Lewis 7516232bd4 Merge branch 'trunk' into filesharing-persist 2022-07-06 21:19:12 +00:00
Sarah Jamie Lewis 5be25b87c4 Android 2022-07-06 13:57:35 -07:00
Sarah Jamie Lewis e13ad5d218 Update lcg 2022-07-06 13:11:49 -07:00
Sarah Jamie Lewis c397a9cdb7 Update File Sharing tooltip 2022-07-06 12:25:04 -07:00
Sarah Jamie Lewis 60e822cf12 Android + Time out Resume Logic so files can be requested again 2022-07-06 12:14:40 -07:00
Sarah Jamie Lewis 0ea2a2116e File Sharing Manager 2022-07-06 11:57:04 -07:00
Dan Ballard 9fb9759e6a Merge pull request 'Fix bugs in Invite Modal' (#504) from invite-fix into trunk
Reviewed-on: cwtch.im/cwtch-ui#504
2022-07-04 22:12:13 +00:00
Sarah Jamie Lewis 62b87f2939 Fix #498 2022-07-04 14:39:58 -07:00
Sarah Jamie Lewis da58555104 Fix bugs in Invite Modal 2022-07-04 14:34:32 -07:00
Sarah Jamie Lewis d8cfb5c730 Merge pull request 'android-modal' (#500) from android-modal into trunk
Reviewed-on: cwtch.im/cwtch-ui#500
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-07-04 19:17:05 +00:00
Sarah Jamie Lewis 0dd9ecedac update pubspec version 2022-07-04 12:16:38 -07:00
Sarah Jamie Lewis 61ee9491ab Fix Cut off Buttons in Android 2022-07-04 12:16:38 -07:00
Sarah Jamie Lewis 6b9cf1f164 Fix Modal for New/Import and Unlock on Android 2022-07-04 12:16:38 -07:00
Sarah Jamie Lewis b8326762bf Fix Android Modal Menu 2022-07-04 12:16:38 -07:00
Dan Ballard af9a386ae8 Merge pull request 'new russian translations from @RuLang' (#499) from ru-update into trunk
Reviewed-on: cwtch.im/cwtch-ui#499
2022-07-04 18:56:12 +00:00
Sarah Jamie Lewis da5925c7b3 new russian translations from @RuLang 2022-07-04 10:43:30 -07:00
Dan Ballard eabee61687 Merge pull request 'pubspec andro ver bump' (#497) from androidExported into trunk
Reviewed-on: cwtch.im/cwtch-ui#497
2022-06-29 17:38:40 +00:00
Dan Ballard 102341f931 pubspec andro ver bump 2022-06-29 10:38:07 -07:00
Dan Ballard e36c5bf2f9 Merge pull request 'android 12 sdk 31 fixes' (#496) from androidExported into trunk
Reviewed-on: cwtch.im/cwtch-ui#496
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-06-29 17:37:07 +00:00
Dan Ballard 629c9152ca Merge branch 'trunk' into androidExported 2022-06-29 17:22:40 +00:00
Dan Ballard 9298be0a61 android 12 sdk 31 fixes 2022-06-29 10:21:54 -07:00
Sarah Jamie Lewis fc4a87e3aa Merge pull request 'upgrade android kotlin + work package for android 12' (#495) from androidExported into trunk
Reviewed-on: cwtch.im/cwtch-ui#495
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-06-29 03:03:12 +00:00
Dan Ballard bef8ca083b Merge branch 'trunk' into androidExported 2022-06-29 00:29:28 +00:00
Dan Ballard 8d0b277731 upgrade android kotlin + work package for android 12 2022-06-28 17:28:55 -07:00
Sarah Jamie Lewis 7badbca926 Merge pull request 'android exported activity' (#494) from androidExported into trunk
Reviewed-on: cwtch.im/cwtch-ui#494
2022-06-28 20:48:10 +00:00
Dan Ballard 708f00f678 android exported activity 2022-06-28 13:20:29 -07:00
Dan Ballard 4404977128 Merge pull request '1.8.0' (#493) from 1.8.0 into trunk
Reviewed-on: cwtch.im/cwtch-ui#493
2022-06-27 19:51:28 +00:00
Sarah Jamie Lewis e29366cb49 Merge branch 'trunk' into 1.8.0 2022-06-27 19:21:01 +00:00
Sarah Jamie Lewis 3a12a94a85 1.8.0 2022-06-27 12:20:24 -07:00
Sarah Jamie Lewis 8da9db87de Merge pull request 'newwincert' (#492) from newwincert into trunk
Reviewed-on: cwtch.im/cwtch-ui#492
2022-06-24 05:33:56 +00:00
Sarah Jamie Lewis 93adb32ca5 Merge branch 'trunk' into newwincert 2022-06-24 05:33:49 +00:00
Dan Ballard ee9af54917 adjust drone to handle new windows cert and sign more dlls 2022-06-23 21:46:46 -07:00
Sarah Jamie Lewis 453feae88a Merge pull request 'Fix Image Width Handling' (#490) from fuzzbot-fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#490
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-23 23:38:15 +00:00
Dan Ballard e32e32ed27 docs on making a self signed cert 2022-06-23 16:10:05 -07:00
Sarah Jamie Lewis bf1eece1e2 increase max image size 2022-06-23 16:00:54 -07:00
Sarah Jamie Lewis 9c9916e7c9 max height on images 2022-06-23 15:59:25 -07:00
Sarah Jamie Lewis b3788b4f05 Fix Image Width Handling 2022-06-23 15:51:16 -07:00
Dan Ballard 5f67f626e5 Merge pull request 'fuzzbot-fixes' (#489) from fuzzbot-fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#489
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-23 19:26:46 +00:00
Sarah Jamie Lewis 00ca54a6a3 Merge branch 'trunk' into fuzzbot-fixes 2022-06-23 19:08:54 +00:00
Sarah Jamie Lewis 5770eb4b66 Fix File Bubble Preview Cache Issues + Wrap Quoted Message Malformed Bubbles as Rows 2022-06-23 12:07:39 -07:00
Sarah Jamie Lewis ab77ad80d1 Fix Bugs in Quoted Message Selection found by Fuzzbot 2022-06-23 11:25:26 -07:00
Dan Ballard 0c426a129a Merge pull request 'Turn on Message Formatting by Default' (#488) from default_message_formatting into trunk
Reviewed-on: cwtch.im/cwtch-ui#488
2022-06-22 21:34:22 +00:00
Sarah Jamie Lewis 0aa0d286ef move formatting out of experiments in settings 2022-06-22 14:22:52 -07:00
Sarah Jamie Lewis 1483ddcc94 Turn on Message Formatting by Default 2022-06-22 12:56:35 -07:00
Dan Ballard 405160947b Merge pull request 'add support for diff arch macos libcwtch-go' (#487) from macarm into trunk
Reviewed-on: cwtch.im/cwtch-ui#487
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-06-22 19:45:13 +00:00
Dan Ballard 3a5668734e mac arm64 2022-06-22 12:40:06 -07:00
Dan Ballard a6406e9068 add support for diff arch macos libcwtch-go 2022-06-22 12:05:46 -07:00
Sarah Jamie Lewis a4e1a7ede1 Merge pull request 'New Translations + Update LCG' (#486) from intl_fix into trunk
Reviewed-on: cwtch.im/cwtch-ui#486
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-21 23:11:54 +00:00
Sarah Jamie Lewis 77227111fd Merge branch 'trunk' into intl_fix 2022-06-21 23:09:52 +00:00
Sarah Jamie Lewis 9d2654459c Merge pull request 'fix first sync' (#485) from fixFirstSync into trunk
Reviewed-on: cwtch.im/cwtch-ui#485
2022-06-21 23:09:46 +00:00
Sarah Jamie Lewis 6dca8e80e6 New Translations + Update LCG 2022-06-21 16:09:09 -07:00
Dan Ballard 3f4530f299 fix first sync 2022-06-21 16:03:04 -07:00
Dan Ballard 40b3207e2d Merge pull request 'Remove Group "Address" - it is badly named, and no longer relavent' (#482) from fix_308 into trunk
Reviewed-on: cwtch.im/cwtch-ui#482
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-21 22:12:14 +00:00
Sarah Jamie Lewis fc1f910486 Remove Awful Flutter 3 Screen Transitions 2022-06-21 14:58:09 -07:00
Sarah Jamie Lewis f71bce5b71 Remove Group "Address" - it is badly named, and no longer relavent 2022-06-21 14:08:54 -07:00
Sarah Jamie Lewis c01860f1de Merge pull request 'Flutter3, local_desktop_notifications on linux again' (#484) from flutter3_notify into trunk
Reviewed-on: cwtch.im/cwtch-ui#484
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-06-21 21:08:47 +00:00
Dan Ballard c7e6cfcbc1 macos podfile lock update for flutter 3 2022-06-21 16:58:02 -04:00
Dan Ballard d9acca7b1b drone flutter 3.0.1 windows 2022-06-21 13:06:38 -07:00
Dan Ballard 914fe9c300 updated widget goldens, cwtch label flutter 3 minute change 2022-06-21 13:06:38 -07:00
Dan Ballard ce5499419f drone test 2022-06-21 13:06:38 -07:00
Dan Ballard 531595e9e9 remove notification debugging and linux notifier 2022-06-21 13:06:38 -07:00
Dan Ballard 9857dff9a3 upgraded to flutter 3, upgraded kotlin and gradle, some deps 2022-06-21 13:06:38 -07:00
Dan Ballard 03b3d86a41 translate lux material stuff; upgrade to fixed local notification package; upgrade provide, scrollable_position 2022-06-21 13:06:38 -07:00
Dan Ballard a5040b7236 start of flutter3 migration, update l10n/custom_material_delegate, update cwtchNotifier to user local_notifier 2022-06-21 13:06:38 -07:00
Dan Ballard a83b357f0f Merge pull request 'Fix Debug Errors + Implement Scroll To on DM' (#481) from fix_308 into trunk
Reviewed-on: cwtch.im/cwtch-ui#481
2022-06-20 19:10:32 +00:00
Sarah Jamie Lewis b425175fff Attempt to fix Scroll-to Bug 2022-06-20 11:41:31 -07:00
Sarah Jamie Lewis 8570199196 Fix: #308 - Scroll to Contact
Also fixes a bunch of debug-build issues (overflows / resizes).
2022-06-20 10:54:06 -07:00
Dan Ballard 1122c818f5 Merge pull request 'Add Snackbar Notifications for all Copies' (#478) from snackbars into trunk
Reviewed-on: cwtch.im/cwtch-ui#478
2022-06-16 17:54:30 +00:00
Dan Ballard 6714b0d8a0 Merge pull request 'Message Formatting Toolbar Tooltips' (#477) from formatting_toolbar_tooltip into trunk
Reviewed-on: cwtch.im/cwtch-ui#477
2022-06-16 17:53:54 +00:00
Sarah Jamie Lewis 0d90219c87 Add Snackbar Notifications for all Copies 2022-06-16 09:40:55 -07:00
Sarah Jamie Lewis 8ab82569e3 Message Formatting Toolbar Tooltips 2022-06-16 09:23:10 -07:00
Dan Ballard a7861681e1 Merge pull request 'Update Translations (including RU from @RuLang)' (#476) from intl into trunk
Reviewed-on: cwtch.im/cwtch-ui#476
2022-06-15 18:06:56 +00:00
Sarah Jamie Lewis 106b45c758 Update Translations (including RU from @RuLang) 2022-06-15 10:46:05 -07:00
Sarah Jamie Lewis 644ae502e5 Merge pull request 'formatting_toolbar' (#475) from formatting_toolbar into trunk
Reviewed-on: cwtch.im/cwtch-ui#475
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-15 03:14:17 +00:00
Sarah Jamie Lewis 7bae6485f7 Fixup Formatting PR (Dans Comments) 2022-06-14 18:44:24 -07:00
Sarah Jamie Lewis 04c335e7a4 formatting toolbar 2022-06-14 18:30:04 -07:00
Sarah Jamie Lewis 3961692817 Nicer Quoted Messages 2022-06-13 10:06:06 -07:00
Sarah Jamie Lewis d703a9636f Fix Contact Message Date not displaying date for day old messages 2022-06-13 09:31:25 -07:00
Dan Ballard e4419366a4 Merge pull request 'Click to scroll on Quoted Message / Shorten Text' (#469) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#469
2022-06-10 23:43:09 +00:00
Sarah Jamie Lewis f848316db9 Fix bug preventing scrolling to unread messages 2022-06-10 15:42:54 -07:00
Sarah Jamie Lewis a5b253f185 Merge pull request 'reply_links' (#470) from reply_links into marcia_fixes
Reviewed-on: cwtch.im/cwtch-ui#470
2022-06-10 21:32:13 +00:00
Sarah Jamie Lewis e7c19c7477 Merge pull request 'show down button in messageview when ever scrolling up' (#471) from show_down into marcia_fixes
Reviewed-on: cwtch.im/cwtch-ui#471
2022-06-10 21:31:10 +00:00
Dan Ballard 59df024867 show down button in messageview when ever scrolling up 2022-06-10 14:28:16 -07:00
Sarah Jamie Lewis 65ff084952 make links in replies clickable 2022-06-10 14:21:40 -07:00
Sarah Jamie Lewis b3e11cfffd remove scroll controller from message view 2022-06-10 12:24:38 -07:00
Sarah Jamie Lewis 0c9be47e17 Click to scroll on Quoted Message / Shorten Text 2022-06-10 12:12:43 -07:00
Dan Ballard 3bb3a8736c Merge pull request 'Fix message view title padding in doublecol view' (#468) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#468
2022-06-10 18:16:31 +00:00
Sarah Jamie Lewis 67850e8e4b Fix message view title padding in doublecol view 2022-06-10 10:40:39 -07:00
Dan Ballard c8e896fa51 Merge pull request 'Modal Menu UI Fixes' (#467) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#467
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-09 23:19:13 +00:00
Sarah Jamie Lewis d1e8f71290 fixes for profile buttons 2022-06-09 14:54:48 -07:00
Sarah Jamie Lewis be8646e805 fix padding 2022-06-09 14:30:38 -07:00
Sarah Jamie Lewis 6d42f2c76c make text bold and add additional padding to contacts modal 2022-06-09 14:28:24 -07:00
Sarah Jamie Lewis 8429907650 modal menus design fixes 2022-06-09 14:26:02 -07:00
Sarah Jamie Lewis c3848553d7 Bugfix when resizing app when menu is open 2022-06-09 13:49:38 -07:00
Sarah Jamie Lewis 3c85b8f59e Merge pull request 'Column-wise contact row (marcia feedback)' (#466) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#466
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-09 20:43:10 +00:00
Sarah Jamie Lewis d0e7e6703b Different buttons 2022-06-09 13:40:42 -07:00
Sarah Jamie Lewis 2bc47173f9 more clear contact request 2022-06-09 13:36:59 -07:00
Sarah Jamie Lewis 15c68d8812 remove padding 2022-06-09 13:20:01 -07:00
Sarah Jamie Lewis e76f2883c6 Column-wise contact row (marcia feedback) 2022-06-09 13:10:27 -07:00
Dan Ballard 439b9b874f Merge pull request 'marcia settings fixes' (#462) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#462
2022-05-31 23:31:27 +00:00
Sarah Jamie Lewis f5393cdb79 Merge branch 'trunk' into marcia_fixes 2022-05-31 23:19:49 +00:00
Sarah Jamie Lewis c0f1b674aa marcia settings fixes 2022-05-31 13:37:32 -07:00
Dan Ballard 630713a5e4 Merge pull request 'New Polish Translations' (#460) from pl_intl into trunk
Reviewed-on: cwtch.im/cwtch-ui#460
2022-05-24 18:53:52 +00:00
Sarah Jamie Lewis d10a6df872 Merge branch 'trunk' into pl_intl 2022-05-24 18:16:16 +00:00
Sarah Jamie Lewis 2723a35d44 New Polish Translations 2022-05-24 11:14:42 -07:00
Dan Ballard 427081c937 Merge pull request 'Fix #457 + Formatting' (#459) from fix457 into trunk
Reviewed-on: cwtch.im/cwtch-ui#459
2022-05-11 19:56:11 +00:00
Sarah Jamie Lewis 9d4abc3725 Fix #457 + Formatting 2022-05-11 12:44:24 -07:00
Sarah Jamie Lewis fa52b741bf Merge pull request 'v1.7.1 29' (#454) from pubspecBump into trunk
Reviewed-on: cwtch.im/cwtch-ui#454
2022-05-02 22:12:25 +00:00
Dan Ballard fb86fb6eae v1.7.1 29 2022-05-02 15:07:55 -07:00
Sarah Jamie Lewis 8dd696b6ab Merge pull request 'dont start 'new messages' when convo selected' (#453) from cache3.0 into trunk
Reviewed-on: cwtch.im/cwtch-ui#453
2022-05-01 17:32:16 +00:00
Dan Ballard 001ad854c7 dont start 'new messages' when convo selected 2022-04-30 14:43:45 -07:00
Dan Ballard af5fb678fc Merge pull request 'caching fixes for stability and android' (#450) from cache3.0 into trunk
Reviewed-on: cwtch.im/cwtch-ui#450
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-29 23:37:20 +00:00
Dan Ballard ffa51e83a1 new message marker moved from id to index and now works on old messages 2022-04-29 16:07:52 -07:00
Dan Ballard 441845ed49 Merge pull request 'Fix maximum width of dropdown boxes in settings' (#452) from fix-settings into trunk
Reviewed-on: cwtch.im/cwtch-ui#452
2022-04-29 17:50:18 +00:00
Sarah Jamie Lewis 0146436cb3 Fix maximum width of dropdown boxes in settings 2022-04-29 09:57:26 -07:00
Dan Ballard 0647a2d98d android pre load unsynced messages 2022-04-28 21:28:12 -07:00
Dan Ballard 0bcfe75a63 rework cache android resume based off message count totals, force pre fetch on load message list, tweak new messages bubble behaviour 2022-04-28 08:57:31 -07:00
Dan Ballard ecdcef2192 Merge pull request 'GetMessage* on android; make reply to use message cache; New Messages bubble doesn't reup' (#448) from replyFix into trunk
Reviewed-on: cwtch.im/cwtch-ui#448
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-27 04:51:20 +00:00
Dan Ballard e6c9f7becb GetMessage* on android; make reply to use message cache; New Messages bubble doesn't reup 2022-04-26 21:34:16 -07:00
Sarah Jamie Lewis 9d8f73ac00 Merge pull request 'Format, Context Binding and Check if File Exists in File Bubble' (#447) from file-fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#447
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-04-26 19:38:28 +00:00
Sarah Jamie Lewis dc78117e1a Format, Context Binding and Check if File Exists in File Bubble 2022-04-26 12:16:48 -07:00
Dan Ballard 59e3220bce Merge pull request 'Debug Info Fix and Dependency Upgrades' (#433) from perf into trunk
Reviewed-on: cwtch.im/cwtch-ui#433
2022-04-21 23:56:32 +00:00
Sarah Jamie Lewis 653ba199bc Merge branch 'trunk' into perf 2022-04-21 23:33:26 +00:00
Sarah Jamie Lewis 1b45205c48 Merge pull request 'nsis uninstall typo reg key' (#438) from winUninstall into trunk
Reviewed-on: cwtch.im/cwtch-ui#438
2022-04-21 23:33:17 +00:00
Dan Ballard 85186b2565 nsis uninstall typo reg key 2022-04-21 16:32:22 -07:00
Sarah Jamie Lewis 3287fa79ff Merge branch 'trunk' into perf 2022-04-21 23:32:07 +00:00
Sarah Jamie Lewis 111d522484 Upgrade lcg to 1.7.1 2022-04-21 16:31:17 -07:00
Sarah Jamie Lewis 20c854bafb Update Translations 2022-04-21 16:14:03 -07:00
Dan Ballard ffdc7b3262 Merge pull request 'winUninstall' (#434) from winUninstall into trunk
Reviewed-on: cwtch.im/cwtch-ui#434
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-21 18:40:31 +00:00
Dan Ballard a3d986d9d6 ffi on windows more options to detect tor; nsis installer warn about cwtch needing exiting 2022-04-20 18:20:44 -07:00
Sarah Jamie Lewis 5e3387ec8a Debug Info Fix an Dependency Upgrades 2022-04-20 17:28:38 -07:00
Dan Ballard a6c7682c84 nsis windows installer detect running, ask to not, abort 2022-04-20 14:25:36 -07:00
Dan Ballard b29836ed3b register uninstaller with windows add/remove programs 2022-04-20 12:26:28 -07:00
Sarah Jamie Lewis e0bf47b6ab Merge pull request 'a bunch of cache logic fixes and futher support for reconnect on android' (#431) from cachefixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#431
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-20 18:16:47 +00:00
Dan Ballard 4bd92d854f comments 2022-04-19 20:46:59 -07:00
Dan Ballard 82d1bf873f lcg bump 2022-04-19 20:46:59 -07:00
Dan Ballard 5959981fe4 a bunch of cache logic fixes and futher support for reconnect on android 2022-04-19 20:46:59 -07:00
Dan Ballard ab315e289a Merge pull request 'MainActivity return result to not leave dart calls hanging' (#432) from kotlinResult into trunk
Reviewed-on: cwtch.im/cwtch-ui#432
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-20 03:36:20 +00:00
Dan Ballard 6392d67332 MainActivity return result to not leave dart calls hanging 2022-04-19 18:34:22 -07:00
Dan Ballard 8f0b73af2a Merge pull request 'fix linux notification icon (rever to old linux notification manager) and light theme fixes' (#429) from linuxNotif into trunk
Reviewed-on: cwtch.im/cwtch-ui#429
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-15 01:02:30 +00:00
Dan Ballard 4e2f83ccd9 light theme fixes + message cache ! fix 2022-04-14 17:50:53 -07:00
Dan Ballard dc5ba7b392 readd linux notification manager so it handles notification icon in different linux style installs 2022-04-14 17:02:24 -07:00
Sarah Jamie Lewis 3595f5d8d1 Merge pull request 'Debug Info Pane for Desktop' (#428) from debuginfo into trunk
Reviewed-on: cwtch.im/cwtch-ui#428
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-04-14 22:51:35 +00:00
Sarah Jamie Lewis 1df348c0c1 Debug Info Pane for Desktop 2022-04-14 15:34:36 -07:00
Sarah Jamie Lewis 548e7f4925 Merge pull request 'add android flag secure, pubspec vewrsion bump, and stubs for sdk31 hide overlay' (#427) from androidFlags into trunk
Reviewed-on: cwtch.im/cwtch-ui#427
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-13 21:57:52 +00:00
Dan Ballard a20d2dffc4 add android flag secure, pubspec vewrsion bump, and stubs for sdk31 hide overlay 2022-04-13 14:53:44 -07:00
Dan Ballard 2a712565e9 Merge pull request 'andoird settings / request for power optimization exemption' (#426) from power into trunk
Reviewed-on: cwtch.im/cwtch-ui#426
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-13 21:23:41 +00:00
Dan Ballard a94fd3547b add popup about disable battery unoptimized; fix mute policy loading 2022-04-13 14:09:33 -07:00
Dan Ballard c377a09748 add setting that reports / triggers android power optimization exemption 2022-04-13 12:57:15 -07:00
Dan Ballard d261fbd4c0 kotlin powermanagement info and exemption request 2022-04-13 12:53:32 -07:00
Dan Ballard 933ca74fbc Merge pull request 'Themeing Updates including Nicer Code Formatting' (#425) from theme-updates into trunk
Reviewed-on: cwtch.im/cwtch-ui#425
2022-04-12 22:08:20 +00:00
Sarah Jamie Lewis 38f317194d Merge branch 'trunk' into theme-updates 2022-04-12 21:18:58 +00:00
Sarah Jamie Lewis a4ab2ec060 Themeing Updates including Nicer Code Formatting 2022-04-12 14:15:58 -07:00
Dan Ballard 47795094a0 Merge pull request 'Add Hook into Add Contact Flow to better Gauge Intent' (#424) from add_contact_hook into trunk
Reviewed-on: cwtch.im/cwtch-ui#424
2022-04-12 19:27:18 +00:00
Sarah Jamie Lewis 0d1e7bb5a0 Add Hook into Add Contact Flow to better Gauge Intent
(This the future we can expand this, use this information to better guide people)
2022-04-12 12:15:39 -07:00
Sarah Jamie Lewis 987b80c92b Merge pull request 'Message Formatting Experiment Initial Commit' (#413) from message-formatting into trunk
Reviewed-on: cwtch.im/cwtch-ui#413
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-04-06 22:15:44 +00:00
Sarah Jamie Lewis e718adad8a Add Roboto Fonts License 2022-04-06 15:04:17 -07:00
Sarah Jamie Lewis 0b9c159e85 Icon and Log Error 2022-04-06 14:54:53 -07:00
Sarah Jamie Lewis a4a2af08b4 Message Formatting Experiment Initial Commit 2022-04-06 14:36:34 -07:00
Sarah Jamie Lewis 471a729d46 Merge pull request 'port most gomobile FlwtchWorker calls to lcg to MainActivity; sendmessage sets lastSeen time' (#412) from mainActivityPort into trunk
Reviewed-on: cwtch.im/cwtch-ui#412
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-06 19:01:40 +00:00
Dan Ballard 1cffea5c1a port most gomobile FlwtchWorker calls to lcg to MainActivity; sendmessage sets lastSeen time 2022-04-05 18:38:59 -07:00
Sarah Jamie Lewis e7c5b2cfa5 Merge pull request 'store last seen time in lcg and handle unread counts' (#411) from unreadSync into trunk
Reviewed-on: cwtch.im/cwtch-ui#411
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-04 22:17:59 +00:00
Dan Ballard e08114881c store last seen time in lcg and handle unread counts 2022-04-04 15:02:37 -07:00
Sarah Jamie Lewis 6eaf95a33b Merge pull request 'only send message on Enter Up event' (#408) from androMessage into trunk
Reviewed-on: cwtch.im/cwtch-ui#408
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-03-24 23:39:48 +00:00
Dan Ballard 0db68bcdbb Merge branch 'trunk' into androMessage 2022-03-24 23:37:31 +00:00
Dan Ballard f64559191b only send message on Enter Up event 2022-03-24 16:25:08 -07:00
Dan Ballard b8c1c7682b Merge pull request 'message cache allows index locking, rework messageHandler to use bulk fetching, sendMessage flow with no sleep; move some core getMessages/SendMessage handlers from FlwtchWorker to MainActivity' (#407) from androMessage into trunk
Reviewed-on: cwtch.im/cwtch-ui#407
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-03-24 19:41:16 +00:00
Dan Ballard 9812111041 comments, organizing logic 2022-03-24 12:04:09 -07:00
Dan Ballard ecc9a3a48c comments, fix new messages marker logic 2022-03-23 18:02:26 -07:00
Dan Ballard 523531e6be new lcg version 2022-03-23 18:02:26 -07:00
Dan Ballard ff3e60a750 message cache allows index locking, rework messageHandler to use bulk fetching, sendMessage flow with no sleep; move some core getMessages/SendMessage handlers from FlwtchWorker to MainActivity 2022-03-23 18:01:43 -07:00
Dan Ballard 5a1c66bc25 Merge pull request 'Renable Network Status Updates, Display Status in Contacts View' (#406) from ns into trunk
Reviewed-on: cwtch.im/cwtch-ui#406
2022-03-23 21:42:28 +00:00
Sarah Jamie Lewis 10780ac8cb Merge branch 'trunk' into ns 2022-03-23 21:24:14 +00:00
Sarah Jamie Lewis 0857d46809 Renable Network Status Updates, Display Status in Contacts View 2022-03-23 14:23:23 -07:00
Dan Ballard d7d3b2ef97 Merge pull request 'Fix: #344 - Folder Selection on Settings can be Opened Multiple times' (#402) from small_edits into trunk
Reviewed-on: cwtch.im/cwtch-ui#402
2022-03-22 02:17:14 +00:00
Sarah Jamie Lewis 65d5e9777d Fix: 344 - Folder Selection on Settings can be Opened Multiple times 2022-03-21 10:49:53 -07:00
Dan Ballard 27f4c5f00e Merge pull request 'Localizations + Allow Editing when Contact is Offline' (#400) from small_edits into trunk
Reviewed-on: cwtch.im/cwtch-ui#400
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-03-21 16:37:26 +00:00
Sarah Jamie Lewis f48b6af3dd Localizations + Allow Editing 2022-03-21 09:23:16 -07:00
Dan Ballard d8e19de5b1 Merge pull request 'Import and Export Profile' (#397) from import_export into trunk
Reviewed-on: cwtch.im/cwtch-ui#397
2022-03-11 21:10:03 +00:00
Sarah Jamie Lewis af03dd30cc Upgrade libcwtch 2022-03-11 12:27:44 -08:00
Sarah Jamie Lewis 8a3867b5b3 Import / Export for Android 2022-03-11 12:26:23 -08:00
Sarah Jamie Lewis 6237032716 Import and Export Profile 2022-03-11 12:26:21 -08:00
Dan Ballard 915cf1a6d8 Merge pull request 'splash on shutdown; android stability: check if lcg started' (#399) from splashExit into trunk
Reviewed-on: cwtch.im/cwtch-ui#399
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-03-11 00:45:45 +00:00
Dan Ballard c4ebed0a71 splash on shutdown; android stability: check if lcg started 2022-03-10 16:45:18 -08:00
Dan Ballard 3c71bb8184 Merge pull request 'Using build context instead of inherited context when building file bubble popout' (#395) from file_bubble_pop_fix into trunk
Reviewed-on: cwtch.im/cwtch-ui#395
2022-03-08 19:08:12 +00:00
Sarah Jamie Lewis c3661d4caa Using build context instead of inherited context when building file bubble popout
Fix: #394
2022-03-08 10:56:20 -08:00
Sarah Jamie Lewis 62a99797ca Merge pull request 'assorted android and sync progress fixes' (#391) from state into trunk
Reviewed-on: cwtch.im/cwtch-ui#391
2022-03-04 21:17:41 +00:00
Dan Ballard 7cfa9432c8 unbreak notifications on android ([Pp]ictures) + asset dup; fix sync progres resume logic 2022-03-04 13:15:08 -08:00
Dan Ballard 1d0cb785c1 fix android segfault in flwtch worker; try/catch to catch future bugs in flwtch worker; resume servers load sync status from cwtch; add bg color to sync progress bar; showdown now synchronous so completes 2022-03-04 13:15:08 -08:00
Dan Ballard 8eaa3974c9 Merge pull request 'Stop using key-based lookups for messages, use the message cache instead.' (#392) from message_row_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#392
2022-03-04 21:14:34 +00:00
Sarah Jamie Lewis 6cc5146744 Readd-widget key cache 2022-03-04 12:14:43 -08:00
Sarah Jamie Lewis 1fea540f9d Stop using key-based lookups for messages, use the message cache instead.
Always update alignment to allow for message row objects to be reused
2022-03-04 12:14:43 -08:00
Dan Ballard 7457246a01 Merge pull request 'Finish up Danish translation' (#390) from da into trunk
Reviewed-on: cwtch.im/cwtch-ui#390
2022-03-03 18:52:02 +00:00
Sarah Jamie Lewis 0a26a1899b Finidh up Danish translation 2022-03-03 10:19:42 -08:00
Sarah Jamie Lewis 8183fbd987 Merge pull request 'danish-localization' (#388) from christofal/cwtch-ui:danish-localization into trunk
Reviewed-on: cwtch.im/cwtch-ui#388
2022-03-03 17:57:12 +00:00
Sarah Jamie Lewis f3f5f65e22 Merge branch 'trunk' into danish-localization 2022-03-03 17:56:26 +00:00
Dan Ballard c565089578 Merge pull request 'Spanish and Welsh complete' (#387) from es into trunk
Reviewed-on: cwtch.im/cwtch-ui#387
2022-03-02 23:04:32 +00:00
Sarah Jamie Lewis 009f99e0f5 Merge branch 'trunk' into es 2022-03-02 23:01:35 +00:00
Sarah Jamie Lewis 0894fc577b Spanish and Welsh complete 2022-03-02 15:00:34 -08:00
Dan Ballard b0977b31a5 Merge pull request 'Support Welsh, Update Translations for other Languages' (#385) from cy into trunk
Reviewed-on: cwtch.im/cwtch-ui#385
2022-03-02 19:31:46 +00:00
Sarah Jamie Lewis 6df922d64e Merge branch 'trunk' into cy 2022-03-02 19:29:54 +00:00
Sarah Jamie Lewis b70de4052d Support Welsh, Update Translations for other Languages 2022-03-02 11:28:43 -08:00
Allan Christoffersen 453558f034 Full Danish localization 2022-03-02 15:32:47 +01:00
Allan Christoffersen 481890b55f Initial commit of Danish localization 2022-03-02 14:30:53 +01:00
Dan Ballard 7122db0388 Merge pull request 'Move messageDate format handling to MessageBubbleDecoration' (#384) from messagedate into trunk
Reviewed-on: cwtch.im/cwtch-ui#384
2022-03-01 17:39:23 +00:00
Sarah Jamie Lewis c56f40c090 Merge branch 'trunk' into messagedate 2022-03-01 06:36:51 +00:00
Sarah Jamie Lewis c4c693144d Move messageDate format handling to MessageBubbleDecoration 2022-02-28 22:35:09 -08:00
Dan Ballard 891bf51a70 Merge pull request 'harmonize translations from lokalize' (#383) from i18n into trunk
Reviewed-on: cwtch.im/cwtch-ui#383
2022-03-01 00:02:33 +00:00
Sarah Jamie Lewis a559b0caf8 Update No with clobbered 2022-02-28 16:01:10 -08:00
Sarah Jamie Lewis 054e5fca84 harmonize translations from lokalize 2022-02-28 15:43:33 -08:00
Dan Ballard 6b5f4febe7 Merge pull request 'Full Norwegian Translation' (#382) from no into trunk
Reviewed-on: cwtch.im/cwtch-ui#382
2022-02-28 23:39:23 +00:00
Sarah Jamie Lewis 2c55f78913 Small updates 2022-02-28 15:19:25 -08:00
Henrik Austad f1cfd2c30f Norwegian localization 2022-02-28 15:18:39 -08:00
Sarah Jamie Lewis b36e76b818 remove norwya to add better 2022-02-28 15:18:21 -08:00
Dan Ballard 2aadea0cea Merge pull request 'Complete German Translation.' (#381) from de into trunk
Reviewed-on: cwtch.im/cwtch-ui#381
2022-02-28 20:49:44 +00:00
Dan Ballard 423a2bce5e Merge branch 'trunk' into de 2022-02-28 20:49:23 +00:00
Dan Ballard eef40f76f9 Merge pull request 'Add support for many prospective new languages' (#380) from lb into trunk
Reviewed-on: cwtch.im/cwtch-ui#380
2022-02-28 20:49:04 +00:00
Sarah Jamie Lewis 385f86be02 Complete German Translation 2022-02-28 12:29:20 -08:00
Sarah Jamie Lewis 193a9d6f89 Add support for many prospective new languages 2022-02-28 12:05:22 -08:00
Dan Ballard 2ade7e8e4f Merge pull request 'Initial support for Romanian localization' (#379) from ro into trunk
Reviewed-on: cwtch.im/cwtch-ui#379
2022-02-27 20:04:50 +00:00
Sarah Jamie Lewis 12a0fc1059 Update French 2022-02-27 12:02:17 -08:00
Sarah Jamie Lewis 82542664ad Merge branch 'trunk' into ro 2022-02-27 19:37:49 +00:00
Sarah Jamie Lewis 670d8bc343 Initial support for Romanian localization 2022-02-27 11:36:51 -08:00
Dan Ballard ce1db17148 Merge pull request 'WIP make NixNotificationManager using flutter_local_notification' (#375) from macNotifications into trunk
Reviewed-on: cwtch.im/cwtch-ui#375
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-02-24 00:22:06 +00:00
Dan Ballard 018a51b76e Merge branch 'macNotifications' of git.openprivacy.ca:cwtch.im/cwtch-ui into macNotifications 2022-02-23 16:21:50 -08:00
Dan Ballard 61cdb37226 lcg bump 2022-02-23 16:21:42 -08:00
Dan Ballard 5b4778dd78 Merge branch 'trunk' into macNotifications 2022-02-23 19:33:29 +00:00
Dan Ballard 152f5fbc96 garuntee no notifications while using app for nix 2022-02-23 11:27:15 -08:00
Dan Ballard 5e7272b15a nix notification manager only use title, body is unsafe 2022-02-23 11:13:03 -08:00
Dan Ballard 9473acd438 Merge pull request 'Add Message Status Widget to File Bubble' (#376) from fix297 into trunk
Reviewed-on: cwtch.im/cwtch-ui#376
2022-02-22 20:49:34 +00:00
Sarah Jamie Lewis 4fd8075497 Merge branch 'trunk' into fix297 2022-02-22 19:14:25 +00:00
Sarah Jamie Lewis 70eb160abc Add Message Status Widget to File Bubble
Also fix bug in peer settings
2022-02-22 11:09:44 -08:00
Dan Ballard 1a4dccf44a disable sound until we make it a setting 2022-02-20 09:53:15 -08:00
Dan Ballard 7509c20a62 make NixNotificationManager using flutter_local_notification 2022-02-18 15:50:34 -08:00
Dan Ballard 68c2e1547a Merge pull request 'Check WorkInfo is not Null' (#374) from cwtch1.6.1-fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#374
2022-02-16 23:58:45 +00:00
Sarah Jamie Lewis 705b6e02c9 Fix overlap in debug settings 2022-02-16 13:49:29 -08:00
Sarah Jamie Lewis 137de57e83 Check WorkInfo is Null
This shouldn't happen in normal use, but can happen in debug builds
2022-02-16 13:44:32 -08:00
Dan Ballard 6859780873 Merge pull request 'cwtch1.6.1-fixes' (#373) from cwtch1.6.1-fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#373
2022-02-16 18:34:44 +00:00
Sarah Jamie Lewis dab09c6acb Fix #314 - Numpad enter should send message 2022-02-14 12:20:25 -08:00
Sarah Jamie Lewis 7bf2e15009 Formatting 2022-02-14 11:03:28 -08:00
Sarah Jamie Lewis a0f8be2d53 Bump Android Version 2022-02-14 11:02:19 -08:00
Sarah Jamie Lewis 02407c5abe Fix #371
Fix #368
Fix #16
2022-02-14 11:01:58 -08:00
Sarah Jamie Lewis 635e383f65 Merge pull request 'pubspec version bump for android' (#369) from ps160 into trunk
Reviewed-on: cwtch.im/cwtch-ui#369
2022-02-11 18:59:16 +00:00
Dan Ballard 1ec9be3d9a pubspec version bump for android 2022-02-11 13:57:25 -05:00
Sarah Jamie Lewis fd886e7315 Merge pull request 'libcwtch go 1.6.0' (#367) from lcg160 into trunk
Reviewed-on: cwtch.im/cwtch-ui#367
2022-02-10 21:18:14 +00:00
Dan Ballard 387816ea0f libcwtch go 1.6.0 2022-02-10 15:58:09 -05:00
Dan Ballard 3cb6c9d9f4 Merge pull request 'Allow cwtch: prefix' (#366) from cwtch_prefix into trunk
Reviewed-on: cwtch.im/cwtch-ui#366
2022-02-09 22:37:27 +00:00
Sarah Jamie Lewis f1688c5f8f upgrade lcg 2022-02-09 14:30:41 -08:00
Sarah Jamie Lewis d5296d2211 Merge branch 'trunk' into cwtch_prefix 2022-02-09 21:59:31 +00:00
Sarah Jamie Lewis 953971980f Allow cwtch: prefix 2022-02-09 13:58:40 -08:00
Sarah Jamie Lewis 7e59d1a526 Merge pull request 'mac lcg' (#360) from maclcg into trunk
Reviewed-on: cwtch.im/cwtch-ui#360
2022-02-09 02:42:28 +00:00
Dan Ballard 783d666486 mac lcg 2022-02-08 21:41:19 -05:00
Dan Ballard 040ba80480 Merge pull request 'notificationSettings' (#354) from notificationSettings into trunk
Reviewed-on: cwtch.im/cwtch-ui#354
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-02-08 23:21:28 +00:00
Dan Ballard 8ba54469eb comment/format fix 2022-02-08 18:21:06 -05:00
Dan Ballard 706d1da518 new lcg version 2022-02-08 17:50:32 -05:00
Dan Ballard b5511ae723 Merge branch 'trunk' into notificationSettings 2022-02-08 17:11:29 -05:00
Dan Ballard 4c47198977 notification policy work, translations, even for notifications 2022-02-08 17:07:39 -05:00
erinn 9a17852533 Merge pull request 'Add Profile Image Preview to Peer Settings + other UI Profile Image Fixups' (#359) from custom_profile_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#359
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-02-08 22:07:32 +00:00
Sarah Jamie Lewis 2a07ba8ed7 revert message row image size change 2022-02-08 14:05:23 -08:00
Sarah Jamie Lewis 2e5ee796fa Add Profile Image Preview to Peer Settings + other UI Profile Image Fixups 2022-02-08 14:05:09 -08:00
Dan Ballard d1d3f23f82 android notification policy/content 2022-02-08 12:35:25 -05:00
Dan Ballard fa6e399aab android work 2022-02-08 11:44:00 -05:00
Dan Ballard ddefcb8ff2 rejig notification policy globally and conversationally 2022-02-08 11:40:15 -05:00
Dan Ballard b382c3d349 desktop support for notification settings 2022-02-08 11:34:05 -05:00
Dan Ballard c550437aa5 settings pane headers, and notification settings options 2022-02-08 11:34:05 -05:00
erinn e6246cf44a Merge pull request 'Update Goldens' (#358) from custom_profile_images into trunk
Reviewed-on: cwtch.im/cwtch-ui#358
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-02-07 23:38:50 +00:00
Sarah Jamie Lewis d71574a831 Merge branch 'trunk' into custom_profile_images 2022-02-07 23:35:43 +00:00
Sarah Jamie Lewis 62bca86c19 Update Goldens 2022-02-07 15:35:01 -08:00
erinn 729ff6811e Merge pull request 'Profile Images' (#355) from custom_profile_images into trunk
Reviewed-on: cwtch.im/cwtch-ui#355
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-02-07 23:16:46 +00:00
Sarah Jamie Lewis bf4cfde7df Fixup Context Listen 2022-02-07 15:16:02 -08:00
Sarah Jamie Lewis 403454d6b8 Add Edit Badge 2022-02-07 15:12:36 -08:00
Sarah Jamie Lewis d902ba5cce Rename Constant 2022-02-07 14:59:09 -08:00
Sarah Jamie Lewis 5b5fe586e8 Update Lib Cwtch, Allow Deleting P2P contacts, Formatting 2022-02-07 14:53:33 -08:00
Sarah Jamie Lewis b280765631 Fallback to Default Profile Images when Image Previews are Disabled 2022-02-07 14:26:14 -08:00
Sarah Jamie Lewis 2a2d808b60 Disable image previews when file sharing is disables 2022-02-07 12:23:26 -08:00
Sarah Jamie Lewis d158d7d619 Select Profile Image tooltip + restrict selection only when image previews are enabled 2022-02-07 12:20:54 -08:00
Sarah Jamie Lewis c6192ef736 Factor out showFilePicker into a generic controller 2022-02-07 11:30:17 -08:00
Sarah Jamie Lewis 3d85883f8e Profile Images 2022-02-04 16:57:31 -08:00
erinn e22db92dc1 add gherkin tests (#353)
* not all tests are complete
* language and theme tests fail due to upstream issue with dropdown boxes
* not yet autorun or reported by drone

Co-authored-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
Reviewed-on: cwtch.im/cwtch-ui#353
Co-authored-by: erinn <erinn@openprivacy.ca>
Co-committed-by: erinn <erinn@openprivacy.ca>
2022-02-05 00:37:25 +00:00
Sarah Jamie Lewis dd69afc98b Merge pull request 'profile level unread notifications and in profile other profile unread notifications' (#337) from profileNotify into trunk
Reviewed-on: cwtch.im/cwtch-ui#337
2022-02-04 02:01:35 +00:00
Sarah Jamie Lewis ab9d6929be Merge branch 'trunk' into profileNotify 2022-02-04 02:01:30 +00:00
Sarah Jamie Lewis cd4c778b71 Merge pull request 'windows notifications: switch from desktoats to win_toats' (#350) from wintoasts into trunk
Reviewed-on: cwtch.im/cwtch-ui#350
2022-02-04 02:01:22 +00:00
Dan Ballard 19a202a04c formating, and moving active=true up to be better 2022-02-03 13:58:51 -08:00
Dan Ballard be65417f27 new plugin generated code 2022-02-03 08:43:29 -05:00
Dan Ballard 8a9ee402bf recalculate unrad count incases some not read 2022-02-03 08:43:02 -05:00
Dan Ballard 1a9f0763d7 update goldens with new profile unread widgetry 2022-02-02 19:20:28 -05:00
Dan Ballard a82ade8663 profile level unread notifications and in profile other profile unread notifications 2022-02-02 19:20:28 -05:00
Dan Ballard 715b2c6876 windows notifications: switch from desktoats to win_toats 2022-02-02 12:27:42 -08:00
Dan Ballard ca03ddbc53 Merge pull request 'calculate server progress based on last message, nowtime, and message flow; display progress on group contact and remote server' (#340) from serverProgress into trunk
Reviewed-on: cwtch.im/cwtch-ui#340
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-02-02 18:05:49 +00:00
Dan Ballard 0853832a38 Merge branch 'trunk' into serverProgress 2022-02-02 18:05:40 +00:00
Dan Ballard f818d4f2f8 remove syncProgress from contact and wire contact row to search server's list 2022-01-27 18:41:17 -05:00
Sarah Jamie Lewis 6814515186 Merge pull request 'Fixup Length Display so it counts Bytes not Chars' (#346) from fastercwtch into trunk
Reviewed-on: cwtch.im/cwtch-ui#346
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-01-27 21:11:38 +00:00
Sarah Jamie Lewis d84850af49 Fixup Length Display so it counts Bytes not Chars 2022-01-27 13:02:18 -08:00
Dan Ballard a4ce168aec calculate server progress based on last message, nowtime, and message flow; display progress on group contact and remote server 2022-01-26 20:17:13 -05:00
Sarah Jamie Lewis 2bff77983b Merge pull request 'add window_manager plug in to get desktop active state to gate windows notifications; also add spam prevention to windows notifications' (#338) from winFocus into trunk
Reviewed-on: cwtch.im/cwtch-ui#338
2022-01-26 21:41:37 +00:00
Sarah Jamie Lewis 35ae5773f7 Merge branch 'trunk' into winFocus 2022-01-26 21:41:30 +00:00
Sarah Jamie Lewis 6276b022dc Merge pull request 'Upgrade Cwtch and Display Message Limits' (#339) from fastercwtch into trunk
Reviewed-on: cwtch.im/cwtch-ui#339
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-01-26 20:48:22 +00:00
Sarah Jamie Lewis 5c76628578 Upgrade Cwtch and Display Message Limits 2022-01-26 12:28:50 -08:00
Dan Ballard dc587f95f0 remove prints, add comments 2022-01-26 08:48:35 -08:00
Dan Ballard 04cf1e16c2 pubspec for windows_manager 2022-01-26 08:42:25 -08:00
Dan Ballard d96e251650 Merge branch 'trunk' into winFocus 2022-01-26 16:34:25 +00:00
Dan Ballard c3bc961a47 add window_manager plug in to get desktop active state to gate windows notifications; also add spam prevention to windows notifications 2022-01-26 08:31:07 -08:00
Sarah Jamie Lewis c672574bb2 Merge pull request 'add desktoasts windows notifications' (#336) from winNotify into trunk
Reviewed-on: cwtch.im/cwtch-ui#336
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-01-25 22:56:20 +00:00
Sarah Jamie Lewis 05f3cacdbd Merge branch 'trunk' into winNotify 2022-01-25 22:56:03 +00:00
Sarah Jamie Lewis 2e3d02bbe9 Merge pull request 'bump to tor 0.4.6.9' (#332) from androTor into trunk
Reviewed-on: cwtch.im/cwtch-ui#332
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-01-25 22:55:57 +00:00
Dan Ballard 23b6eddf6a bump windows tor 2022-01-25 10:52:18 -05:00
Dan Ballard c838176e3b add desktoasts windows notifications 2022-01-25 04:03:05 -08:00
Dan Ballard a9d272e414 bump android or to 0.4.6.9 2022-01-21 18:48:34 -05:00
Dan Ballard 598251a624 Merge pull request 'Fix #330 - Multiple file browser windows are opened.' (#331) from sender_size into trunk
Reviewed-on: cwtch.im/cwtch-ui#331
2022-01-21 21:42:41 +00:00
Sarah Jamie Lewis def222a8ab upgrade flutter file picker 2022-01-21 13:40:23 -08:00
Sarah Jamie Lewis 748326e13f Fix #330 - Multiple file browser windows are opened. 2022-01-21 13:19:00 -08:00
erinn 508592f80c Merge pull request 'Only override path for Sender, not any other attributes.' (#329) from sender_size into trunk
Reviewed-on: cwtch.im/cwtch-ui#329
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-01-21 20:12:54 +00:00
Sarah Jamie Lewis d27cc0e64e More notify listeners 2022-01-21 12:09:58 -08:00
Sarah Jamie Lewis e359afbdab notify listeners 2022-01-21 12:08:23 -08:00
Sarah Jamie Lewis 92374ad112 Only override path for Sender, not any other attributes.
For auto-downloads both the sender and receiver set the path before
the UI can set download state. As such we need to be careful about how
we let the sender know about the filekey/path.
2022-01-21 10:16:30 -08:00
erinn 0a3837c8b5 Merge pull request 'Clean up sender side image preview' (#328) from sender_size into trunk
Reviewed-on: cwtch.im/cwtch-ui#328
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-01-20 22:55:20 +00:00
Sarah Jamie Lewis 19777afb79 Merge branch 'trunk' into sender_size 2022-01-20 22:53:03 +00:00
Sarah Jamie Lewis 9931521910 Clean up sender side image preview 2022-01-20 14:52:31 -08:00
erinn 7dcc1c863a Merge pull request 'Enable Sender Side Image Previews' (#327) from sender_size into trunk
Reviewed-on: cwtch.im/cwtch-ui#327
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-01-20 22:44:19 +00:00
Sarah Jamie Lewis 13c1a52442 Only allow path override for senders 2022-01-20 14:42:45 -08:00
Sarah Jamie Lewis 6364ebffc6 Update lcg 2022-01-20 14:32:35 -08:00
Sarah Jamie Lewis d095971cb3 Sender side previews - fixing up PR comments 2022-01-20 14:19:06 -08:00
Sarah Jamie Lewis 797279d6d7 Enable Sender Side Image Previews 2022-01-20 14:00:15 -08:00
Sarah Jamie Lewis d0fecbd545 Merge pull request 'message caching' (#326) from cache into trunk
Reviewed-on: cwtch.im/cwtch-ui#326
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-01-20 21:22:50 +00:00
Dan Ballard ccdd7d0e27 remove byType bools and replace with interface and structs for type safety 2022-01-20 15:58:14 -05:00
Dan Ballard 889d398343 add notifyListen to newMessage in contact; format 2022-01-20 13:37:09 -05:00
Dan Ballard 589bc4c36c new lcg; cleanup 2022-01-20 13:05:11 -05:00
Dan Ballard 793b6e2e1a message cache expansion: stores all messages fetched, indexed by hash and id where possible 2022-01-20 09:24:06 -05:00
Dan Ballard d5cb37ed9c stub of new cache 2022-01-20 09:24:06 -05:00
Dan Ballard e7b9f5bb96 move all classes in model.dart to their own models/X.dart 2022-01-20 09:24:06 -05:00
Dan Ballard 5e8f712a90 Merge pull request 'Fixup Widths on Small Screens' (#323) from torcache into trunk
Reviewed-on: cwtch.im/cwtch-ui#323
2022-01-19 22:23:46 +00:00
Sarah Jamie Lewis 2495814869 Fixup Widths on Small Screens 2022-01-19 14:09:19 -08:00
Dan Ballard 08b9dfed5f Merge pull request 'Formatting' (#322) from torcache into trunk
Reviewed-on: cwtch.im/cwtch-ui#322
2022-01-19 22:01:26 +00:00
Sarah Jamie Lewis 19f73eb075 Formatting 2022-01-19 13:59:04 -08:00
Dan Ballard 0fe6f21a75 Merge pull request 'Update lcg' (#320) from torcache into trunk
Reviewed-on: cwtch.im/cwtch-ui#320
2022-01-19 21:30:25 +00:00
Sarah Jamie Lewis 52e22c085f Update lcg 2022-01-19 13:29:13 -08:00
Sarah Jamie Lewis 47348f3ad7 Merge pull request 'move all classes in model.dart to their own models/X.dart' (#317) from models into trunk
Reviewed-on: cwtch.im/cwtch-ui#317
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-01-19 20:35:26 +00:00
Dan Ballard 706c1fb354 move all classes in model.dart to their own models/X.dart 2022-01-18 18:32:00 -05:00
erinn e99fc45a28 Merge pull request 'Allow Tor Caching + Our Own Linkify' (#316) from torcache into trunk
Reviewed-on: cwtch.im/cwtch-ui#316
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-01-18 23:06:25 +00:00
Sarah Jamie Lewis ca44fd798c Show tooltip for links 2022-01-18 15:03:54 -08:00
Sarah Jamie Lewis 1700306c78 Link to specific commit hashes 2022-01-18 14:48:18 -08:00
Sarah Jamie Lewis da3234e3e4 Formatting 2022-01-18 14:44:19 -08:00
Sarah Jamie Lewis 303b70d751 Fixup displayed link + add linkify to licenses.dart 2022-01-18 14:43:49 -08:00
Sarah Jamie Lewis cd1bf07fba Responding to @errorinn PR Comments 2022-01-18 14:32:45 -08:00
Sarah Jamie Lewis b3f06d6765 Update lcg 2022-01-18 13:47:47 -08:00
Sarah Jamie Lewis c6e64a3a5f Allow Tor Caching + Our Own Linkify 2022-01-18 13:17:52 -08:00
erinn 9d10b9ea8d Merge pull request 'Tor Circuit Info Display for P2P + Many Minor UI Fixups.' (#304) from getinfo into trunk
Reviewed-on: cwtch.im/cwtch-ui#304
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-01-17 23:05:11 +00:00
Sarah Jamie Lewis 7257e2bca0 Update Goldens 2022-01-17 14:55:37 -08:00
Sarah Jamie Lewis 5494cb5de0 Upgrade LibCwtch-Go 2022-01-17 14:52:15 -08:00
Sarah Jamie Lewis d6ecf87255 PR Fixups 2022-01-17 12:29:13 -08:00
Sarah Jamie Lewis ae6f0dd456 Update Translations + notifylisteners 2022-01-17 12:24:48 -08:00
Sarah Jamie Lewis ed671d32bc Padding / Margin Changes + Tor Circuit Info 2022-01-14 14:24:41 -08:00
Sarah Jamie Lewis daa89bf6e7 Add Circuit Info To Peer Settings 2022-01-14 14:24:41 -08:00
erinn 24787adc9c Merge pull request 'android-fix' (#302) from android-fix into trunk
Reviewed-on: cwtch.im/cwtch-ui#302
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-01-13 00:55:20 +00:00
Sarah Jamie Lewis a3e2da8469 update text field golden 2022-01-12 16:05:58 -08:00
Sarah Jamie Lewis 9d3d5b06e5 Upgrade Android Dependencies. Remove references to jCenter 2022-01-12 15:54:07 -08:00
Sarah Jamie Lewis bee3ae6e7b Fix Debug Layout Issue in AddContact 2022-01-12 15:28:51 -08:00
erinn 1bd2195be4 Merge pull request 'Support Custom Tor Configuration' (#300) from custom_tor_config into trunk
Reviewed-on: cwtch.im/cwtch-ui#300
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-01-12 23:19:15 +00:00
Sarah Jamie Lewis 26f32a0790 Update Translations + Error Reporting 2022-01-12 15:15:58 -08:00
Sarah Jamie Lewis 958be3e8f7 Upgade lcg 2022-01-12 14:43:26 -08:00
Sarah Jamie Lewis 4cdbb04243 Update Translations 2022-01-12 14:43:26 -08:00
Sarah Jamie Lewis 92422de98e Support Custom Tor Configuration
Fixes: #19
2022-01-12 14:43:26 -08:00
erinn 5e4c190e41 Merge pull request 'Fix #295 - P2P Avatar should not be clickable.' (#296) from fix_295 into trunk
Reviewed-on: cwtch.im/cwtch-ui#296
Reviewed-by: erinn <erinn@openprivacy.ca>
2022-01-10 20:49:36 +00:00
Sarah Jamie Lewis 659e89d626 Formatting PR 2022-01-10 12:28:12 -08:00
Sarah Jamie Lewis 306a9c4de5 Fix #295 - Clicking on an Avatar in P2P Chat should not result in an action 2022-01-10 12:27:56 -08:00
Dan Ballard e12b744e68 Merge pull request 'libcwtchgo 1.5.4 and pubspec version bump for android' (#294) from v152 into trunk
Reviewed-on: cwtch.im/cwtch-ui#294
2022-01-07 21:54:31 +00:00
Dan Ballard ca95d7cff3 Merge pull request 'fix save history option saving in peer settings' (#293) from fixSaveHist into trunk
Reviewed-on: cwtch.im/cwtch-ui#293
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-01-07 21:54:10 +00:00
Dan Ballard da4b444db6 libcwtchgo 1.5.4 and pubspec version bump for android 2022-01-07 16:53:25 -05:00
Dan Ballard afdeeae423 fix save history option saving in peer settings 2022-01-07 09:53:39 -05:00
Sarah Jamie Lewis 891bb8740f Merge pull request 'add required provider to groupsettingsview so leave action can trigger' (#292) from fixLeave into trunk
Reviewed-on: cwtch.im/cwtch-ui#292
2022-01-07 03:45:34 +00:00
Sarah Jamie Lewis 6446b44a27 Merge branch 'trunk' into fixLeave 2022-01-07 03:45:17 +00:00
Sarah Jamie Lewis 165c9a3c41 Merge pull request 'fix android invitations' (#291) from fixAndroidAttrInv into trunk
Reviewed-on: cwtch.im/cwtch-ui#291
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-01-07 03:44:36 +00:00
Dan Ballard 1ea285de51 add required provider to groupsettingsview so leave action can trigger 2022-01-06 22:26:51 -05:00
Dan Ballard bfba2f47fb Merge branch 'trunk' into fixAndroidAttrInv 2022-01-07 03:16:18 +00:00
Dan Ballard 91031be4c0 fix android invitations 2022-01-06 22:08:18 -05:00
Sarah Jamie Lewis 8de3f8dc42 Merge pull request 'fix gomobile/FlwtchWorker calls incorrectly casting Long for SetContactAttribute and sendInvite' (#290) from fixAndroidAttrInv into trunk
Reviewed-on: cwtch.im/cwtch-ui#290
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-01-07 00:23:02 +00:00
Dan Ballard ce7e7df3ae fix gomobile/FlwtchWorker calls incorrectly casting Long for SetContactAttribute and sendInvite 2022-01-06 18:46:49 -05:00
Dan Ballard 5c6765b565 Merge pull request 'fix accept block' (#288) from fixAcceptBlock into trunk
Reviewed-on: cwtch.im/cwtch-ui#288
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-01-06 23:06:56 +00:00
Dan Ballard 5e485b6327 Rework accept/block data flow to map to new storage; fix add group server list falls back to onion when no description 2022-01-06 18:06:06 -05:00
Sarah Jamie Lewis 90e3cd203d Merge pull request 'theme android appbar color' (#285) from appbarColor into trunk
Reviewed-on: cwtch.im/cwtch-ui#285
2022-01-04 21:31:33 +00:00
Dan Ballard c12f6b54dc theme android appbar color 2022-01-04 15:52:43 -05:00
225 changed files with 351865 additions and 3742 deletions

View File

@ -8,7 +8,7 @@ clone:
steps:
- name: clone
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
environment:
buildbot_key_b64:
from_secret: buildbot_key_b64
@ -24,7 +24,7 @@ steps:
- git checkout $DRONE_COMMIT
- name: fetch
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
volumes:
- name: deps
path: /root/.pub-cache
@ -47,7 +47,7 @@ steps:
# #Todo: fix all the lint errors and add `-set_exit_status` above to enforce linting
- name: build-linux
image: openpriv/flutter-desktop:linux-fstable-2.8.0
image: openpriv/flutter-desktop:linux-fstable-3.3.8
volumes:
- name: deps
path: /root/.pub-cache
@ -61,7 +61,7 @@ steps:
- rm -r cwtch
- name: test-build-android
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
when:
event: pull_request
volumes:
@ -71,7 +71,7 @@ steps:
- flutter build apk --debug
- name: build-android
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
when:
event: push
environment:
@ -95,7 +95,7 @@ steps:
#- cp build/app/outputs/flutter-apk/app-debug.apk deploy/android
- name: widget-tests
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
volumes:
- name: deps
path: /root/.pub-cache
@ -177,7 +177,7 @@ clone:
steps:
- name: clone
image: openpriv/flutter-desktop:windows-sdk30-fstable-2.8.1
image: openpriv/flutter-desktop:windows-sdk30-fstable-3.3.8
environment:
buildbot_key_b64:
from_secret: buildbot_key_b64
@ -195,16 +195,15 @@ steps:
- git checkout $Env:DRONE_COMMIT
- name: fetch
image: openpriv/flutter-desktop:windows-sdk30-fstable-2.8.1
image: openpriv/flutter-desktop:windows-sdk30-fstable-3.3.8
commands:
- powershell -command "Invoke-WebRequest -Uri https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-win64-0.4.6.5.zip -OutFile tor.zip"
- powershell -command "if ((Get-FileHash tor.zip -Algorithm sha512).Hash -ne '7917561a7a063440a1ddfa9cb544ab9ffd09de84cea3dd66e3cc9cd349dd9f85b74a522ec390d7a974bc19b424c4d53af60e57bbc47e763d13cab6a203c4592f' ) { Write-Error 'tor.zip sha512sum mismatch' }"
- git describe --tags --abbrev=1 > VERSION
- powershell -command "Get-Date -Format 'yyyy-MM-dd-HH-mm'" > BUILDDATE
- .\fetch-tor-win.ps1
- .\fetch-libcwtch-go.ps1
- name: build-windows
image: openpriv/flutter-desktop:windows-sdk30-fstable-2.8.1
image: openpriv/flutter-desktop:windows-sdk30-fstable-3.3.8
commands:
- flutter pub get
- $Env:version += type .\VERSION
@ -230,7 +229,7 @@ steps:
status: [ success ]
environment:
pfx:
from_secret: pfx
from_secret: pfx2022_b64
pfx_pass:
from_secret: pfx_pass
commands:
@ -246,6 +245,8 @@ steps:
- echo $Env:pfx > codesign.pfx.b64
- certutil -decode codesign.pfx.b64 codesign.pfx
- signtool sign /v /fd sha256 /a /f codesign.pfx /p $Env:pfx_pass /tr http://timestamp.digicert.com $Env:releasedir\cwtch.exe
- signtool sign /v /fd sha256 /a /f codesign.pfx /p $Env:pfx_pass /tr http://timestamp.digicert.com $Env:releasedir\libCwtch.dll
- signtool sign /v /fd sha256 /a /f codesign.pfx /p $Env:pfx_pass /tr http://timestamp.digicert.com $Env:releasedir\flutter_windows.dll
- copy windows\runner\resources\knot_128.ico $Env:releasedir\cwtch.ico
- makensis windows\nsis\cwtch-installer.nsi
- move windows\nsis\cwtch-installer.exe cwtch-installer.exe
@ -261,7 +262,7 @@ steps:
- move *.sha512 deploy\$Env:builddir
- name: deploy-windows
image: openpriv/flutter-desktop:windows-sdk30-fstable-2.8.1
image: openpriv/flutter-desktop:windows-sdk30-fstable-3.3.8
when:
event: push
status: [ success ]
@ -361,4 +362,4 @@ trigger:
branch: trunk
event:
- push
- pull_request
- pull_request

7
.gitignore vendored
View File

@ -40,10 +40,17 @@ app.*.symbols
# Obfuscation related
app.*.map.json
# Tor
data-dir*
# Compiled Libs
linux/tor
linux/libCwtch.so
android/cwtch/cwtch.aar
android/app/src/main/jniLibs/*/libtor.so
libCwtch.dylib
coverage
test/failures
.gradle

View File

@ -1 +1 @@
2021-12-20-18-47-v1.5.2
2022-09-10-15-31-v1.9.0-6-g397d264

View File

@ -1 +1 @@
2021-12-20-23-47-v1.5.2
2022-09-10-19-30-v1.9.0-6-g397d264

View File

@ -65,7 +65,7 @@ To build a release version and load normal profiles, use `build-release.sh X` in
### Building on MacOS
- Cocaopods is required, you may need to `gem install cocaopods -v 1.9.3`
- copy `libCwtch.dylib` into the root folder, or run `fetch-libcwtch-go-macos.sh` to download it
- copy `libCwtch.x64.dylib` and `libCwtch.arm/dylib` into the root folder, or run `fetch-libcwtch-go-macos.sh` to download it
- run `fetch-tor-macos.sh` to fetch Tor or Download and install Tor Browser and `cp -r /Applications/Tor\ Browser.app/Contents/MacOS/Tor ./macos/`
- `flutter build macos`
- optional: launch cwtch-ui release build with `./build/macos/Build/Products/Release/Cwtch.app/Contents/MacOS/Cwtch`

View File

@ -33,7 +33,7 @@ if (keystorePropertiesFile.exists()) {
}
android {
compileSdkVersion 30
compileSdkVersion 31
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
@ -48,7 +48,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "im.cwtch.flwtch"
minSdkVersion 16
targetSdkVersion 30
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
@ -89,7 +89,8 @@ dependencies {
implementation project(':cwtch')
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2"
implementation "com.airbnb.android:lottie:3.5.0"
implementation "com.airbnb.android:lottie:4.2.1"
implementation "androidx.localbroadcastmanager:localbroadcastmanager:1.0.0"
implementation "com.android.support.constraint:constraint-layout:2.0.4"
// WorkManager
@ -98,7 +99,10 @@ dependencies {
//implementation("androidx.work:work-runtime:$work_version")
// Kotlin + coroutines
implementation("androidx.work:work-runtime-ktx:2.5.0")
// 2022.06: upgraded from 2.5 to 2.7 for android 12
// err: "requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent"
// as per https://github.com/flutter/flutter/issues/93609
implementation 'androidx.work:work-runtime-ktx:2.7.0'
// optional - RxJava2 support
//implementation("androidx.work:work-rxjava2:$work_version")

View File

@ -6,7 +6,7 @@
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="io.flutter.app.FlutterApplication"
android:name="${applicationName}"
android:label="Cwtch"
android:extractNativeLibs="true"
android:icon="@mipmap/knott">
@ -16,7 +16,8 @@
android:theme="@style/NormalTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
android:windowSoftInputMode="adjustResize"
android:exported="true">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
@ -46,7 +47,15 @@
<!--Needed to run in background (lol)-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!--Meeded to check if activity is foregrounded or if messages from the service should be queued-->
<!-- Ability to ask user to exempt app from power management (which can kill it more frequently especially on some devices.
Allows app to use ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS -->
<uses-permission-sdk-23 android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<!-- TODO when we support sdk 31
<uses-permission-sdk-23 android:name="android.permission.HIDE_OVERLAY_WINDOWS" />
-->
<!--Needed to check if activity is foregrounded or if messages from the service should be queued-->
<uses-permission android:name="android.permission.GET_TASKS" />
<queries>

View File

@ -0,0 +1,25 @@
// Generated file.
//
// If you wish to remove Flutter's multidex support, delete this entire file.
//
// Modifications to this file should be done in a copy under a different name
// as this file may be regenerated.
package io.flutter.app;
import android.app.Application;
import android.content.Context;
import androidx.annotation.CallSuper;
import androidx.multidex.MultiDex;
/**
* Extension of {@link android.app.Application}, adding multidex support.
*/
public class FlutterMultiDexApplication extends Application {
@Override
@CallSuper
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}

View File

@ -1,24 +1,27 @@
package im.cwtch.flwtch
import android.app.*
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.graphics.BitmapFactory
import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.work.*
import androidx.work.CoroutineWorker
import androidx.work.ForegroundInfo
import androidx.work.WorkerParameters
import cwtch.Cwtch
import io.flutter.FlutterInjector
import org.json.JSONObject
import java.nio.file.Files
import java.nio.file.Paths
import java.nio.file.StandardCopyOption
import android.net.Uri
class FlwtchWorker(context: Context, parameters: WorkerParameters) :
CoroutineWorker(context, parameters) {
@ -29,13 +32,26 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) :
private var notificationID: MutableMap<String, Int> = mutableMapOf()
private var notificationIDnext: Int = 1
private var notificationSimple: String? = null
private var notificationConversationInfo: String? = null
private val TAG: String = "FlwtchWorker.kt"
override suspend fun doWork(): Result {
// Hack to uncomment and deploy if your device has zombie workers you need to kill
// We need a proper solution but this will clear those out for now
/*if (notificationSimple == null) {
Log.e("FlwtchWorker", "doWork found notificationSimple is null, app has not started, this is a stale thread, terminating")
return Result.failure()
}*/
val method = inputData.getString(KEY_METHOD)
?: return Result.failure()
val args = inputData.getString(KEY_ARGS)
?: return Result.failure()
// Mark the Worker as important
val progress = "Cwtch is keeping Tor running in the background"//todo:translate
val progress = "Cwtch is keeping Tor running in the background" // TODO: translate
setForeground(createForegroundInfo(progress))
return handleCwtch(method, args)
}
@ -49,329 +65,198 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) :
}
private fun handleCwtch(method: String, args: String): Result {
val a = JSONObject(args)
when (method) {
"Start" -> {
Log.i("FlwtchWorker.kt", "handleAppInfo Start")
val appDir = (a.get("appDir") as? String) ?: ""
val torPath = (a.get("torPath") as? String) ?: "tor"
Log.i("FlwtchWorker.kt", "appDir: '$appDir' torPath: '$torPath'")
if (method != "Start") {
if (Cwtch.started() != 1.toLong()) {
Log.e(TAG, "libCwtch-go reports it is not initialized yet")
return Result.failure()
}
}
if (Cwtch.startCwtch(appDir, torPath) != 0.toLong()) return Result.failure()
val a = JSONObject(args)
when (method) {
"Start" -> {
Log.i(TAG, "handleAppInfo Start")
val appDir = (a.get("appDir") as? String) ?: ""
val torPath = (a.get("torPath") as? String) ?: "tor"
Log.i(TAG, "appDir: '$appDir' torPath: '$torPath'")
Log.i("FlwtchWorker.kt", "startCwtch success, starting coroutine AppbusEvent loop...")
val downloadIDs = mutableMapOf<String, Int>()
while(true) {
val evt = MainActivity.AppbusEvent(Cwtch.getAppBusEvent())
if (evt.EventType == "NewMessageFromPeer" || evt.EventType == "NewMessageFromGroup") {
val data = JSONObject(evt.Data)
val handle = if (evt.EventType == "NewMessageFromPeer") data.getString("RemotePeer") else data.getString("GroupID");
if (data["RemotePeer"] != data["ProfileOnion"]) {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createMessageNotificationChannel(handle, handle)
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
if (Cwtch.startCwtch(appDir, torPath) != 0.toLong()) return Result.failure()
Log.i(TAG, "startCwtch success, starting coroutine AppbusEvent loop...")
val downloadIDs = mutableMapOf<String, Int>()
var flags = PendingIntent.FLAG_UPDATE_CURRENT
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
flags = flags or PendingIntent.FLAG_IMMUTABLE
}
while (true) {
try {
val evt = MainActivity.AppbusEvent(Cwtch.getAppBusEvent())
// TODO replace this notification block with the NixNotification manager in dart as it has access to contact names and also needs less working around
if (evt.EventType == "NewMessageFromPeer" || evt.EventType == "NewMessageFromGroup") {
val data = JSONObject(evt.Data)
val handle = data.getString("RemotePeer");
val conversationId = data.getInt("ConversationID").toString();
val notificationChannel = if (evt.EventType == "NewMessageFromPeer") handle else conversationId
if (data["RemotePeer"] != data["ProfileOnion"]) {
val notification = data["notification"]
if (notification == "SimpleEvent") {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createMessageNotificationChannel("Cwtch", "Cwtch")
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
}
val clickIntent = Intent(applicationContext, MainActivity::class.java).also { intent ->
intent.action = Intent.ACTION_RUN
intent.putExtra("EventType", "NotificationClicked")
}
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle("Cwtch")
.setContentText(notificationSimple ?: "New Message")
.setSmallIcon(R.mipmap.knott_transparent)
.setContentIntent(PendingIntent.getActivity(applicationContext, 1, clickIntent, flags))
.setAutoCancel(true)
.build()
notificationManager.notify(getNotificationID("Cwtch", "Cwtch"), newNotification)
} else if (notification == "ContactInfo") {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createMessageNotificationChannel(notificationChannel, notificationChannel)
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
}
val loader = FlutterInjector.instance().flutterLoader()
Log.i(TAG, "notification for " + evt.EventType + " " + handle + " " + conversationId + " " + channelId)
Log.i(TAG, data.toString());
val key = loader.getLookupKeyForAsset(data.getString("picture"))//"assets/profiles/001-centaur.png")
val fh = applicationContext.assets.open(key)
val clickIntent = Intent(applicationContext, MainActivity::class.java).also { intent ->
intent.action = Intent.ACTION_RUN
intent.putExtra("EventType", "NotificationClicked")
intent.putExtra("ProfileOnion", data.getString("ProfileOnion"))
intent.putExtra("Handle", handle)
}
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle(data.getString("Nick"))
.setContentText((notificationConversationInfo
?: "New Message From %1").replace("%1", data.getString("Nick")))
.setLargeIcon(BitmapFactory.decodeStream(fh))
.setSmallIcon(R.mipmap.knott_transparent)
.setContentIntent(PendingIntent.getActivity(applicationContext, 1, clickIntent, flags))
.setAutoCancel(true)
.build()
notificationManager.notify(getNotificationID(data.getString("ProfileOnion"), channelId), newNotification)
}
val loader = FlutterInjector.instance().flutterLoader()
val key = loader.getLookupKeyForAsset("assets/" + data.getString("Picture"))//"assets/profiles/001-centaur.png")
val fh = applicationContext.assets.open(key)
val clickIntent = Intent(applicationContext, MainActivity::class.java).also { intent ->
intent.action = Intent.ACTION_RUN
intent.putExtra("EventType", "NotificationClicked")
intent.putExtra("ProfileOnion", data.getString("ProfileOnion"))
intent.putExtra("Handle", handle)
}
} else if (evt.EventType == "FileDownloadProgressUpdate") {
try {
val data = JSONObject(evt.Data);
val fileKey = data.getString("FileKey");
val title = data.getString("NameSuggestion");
val progress = data.getString("Progress").toInt();
val progressMax = data.getString("FileSizeInChunks").toInt();
if (!downloadIDs.containsKey(fileKey)) {
downloadIDs.put(fileKey, downloadIDs.count());
}
var dlID = downloadIDs.get(fileKey);
if (dlID == null) {
dlID = 0;
}
if (progress >= 0) {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createDownloadNotificationChannel(fileKey, fileKey)
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
};
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setOngoing(true)
.setContentTitle("Downloading")//todo: translate
.setContentText(title)
.setSmallIcon(android.R.drawable.stat_sys_download)
.setProgress(progressMax, progress, false)
.setSound(null)
//.setSilent(true)
.build();
notificationManager.notify(dlID, newNotification);
}
} catch (e: Exception) {
Log.d("FlwtchWorker->FileDownloadProgressUpdate", e.toString() + " :: " + e.getStackTrace());
}
} else if (evt.EventType == "FileDownloaded") {
Log.d(TAG, "file downloaded!");
val data = JSONObject(evt.Data);
val tempFile = data.getString("TempFile");
val fileKey = data.getString("FileKey");
if (tempFile != "" && tempFile != data.getString("FilePath")) {
val filePath = data.getString("FilePath");
Log.i(TAG, "moving " + tempFile + " to " + filePath);
val sourcePath = Paths.get(tempFile);
val targetUri = Uri.parse(filePath);
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
val bytesWritten = Files.copy(sourcePath, os);
Log.d("TAG", "copied " + bytesWritten.toString() + " bytes");
if (bytesWritten != 0L) {
os?.flush();
os?.close();
Files.delete(sourcePath);
}
}
if (downloadIDs.containsKey(fileKey)) {
notificationManager.cancel(downloadIDs.get(fileKey) ?: 0);
}
}
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle(data.getString("Nick"))
.setContentText("New message")//todo: translate
.setLargeIcon(BitmapFactory.decodeStream(fh))
.setSmallIcon(R.mipmap.knott_transparent)
.setContentIntent(PendingIntent.getActivity(applicationContext, 1, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT))
.setAutoCancel(true)
.build()
notificationManager.notify(getNotificationID(data.getString("ProfileOnion"), handle), newNotification)
}
} else if (evt.EventType == "FileDownloadProgressUpdate") {
try {
val data = JSONObject(evt.Data);
val fileKey = data.getString("FileKey");
val title = data.getString("NameSuggestion");
val progress = data.getString("Progress").toInt();
val progressMax = data.getString("FileSizeInChunks").toInt();
if (!downloadIDs.containsKey(fileKey)) {
downloadIDs.put(fileKey, downloadIDs.count());
Intent().also { intent ->
intent.action = "im.cwtch.flwtch.broadcast.SERVICE_EVENT_BUS"
intent.putExtra("EventType", evt.EventType)
intent.putExtra("Data", evt.Data)
intent.putExtra("EventID", evt.EventID)
LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)
}
var dlID = downloadIDs.get(fileKey);
if (dlID == null) {
dlID = 0;
}
if (progress >= 0) {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createDownloadNotificationChannel(fileKey, fileKey)
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
};
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setOngoing(true)
.setContentTitle("Downloading")//todo: translate
.setContentText(title)
.setSmallIcon(android.R.drawable.stat_sys_download)
.setProgress(progressMax, progress, false)
.setSound(null)
//.setSilent(true)
.build();
notificationManager.notify(dlID, newNotification);
if (evt.EventType == "Shutdown") {
Log.i(TAG, "processing shutdown event, exiting FlwtchWorker/Start()...");
return Result.success()
}
} catch (e: Exception) {
Log.d("FlwtchWorker->FileDownloadProgressUpdate", e.toString() + " :: " + e.getStackTrace());
}
} else if (evt.EventType == "FileDownloaded") {
Log.d("FlwtchWorker", "file downloaded!");
val data = JSONObject(evt.Data);
val tempFile = data.getString("TempFile");
val fileKey = data.getString("FileKey");
if (tempFile != "" && tempFile != data.getString("FilePath")) {
val filePath = data.getString("FilePath");
Log.i("FlwtchWorker", "moving "+tempFile+" to "+filePath);
val sourcePath = Paths.get(tempFile);
val targetUri = Uri.parse(filePath);
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
val bytesWritten = Files.copy(sourcePath, os);
Log.d("FlwtchWorker", "copied " + bytesWritten.toString() + " bytes");
if (bytesWritten != 0L) {
os?.flush();
os?.close();
Files.delete(sourcePath);
}
}
if (downloadIDs.containsKey(fileKey)) {
notificationManager.cancel(downloadIDs.get(fileKey)?:0);
Log.e(TAG, "Error in handleCwtch: " + e.toString() + " :: " + e.getStackTrace());
}
}
Intent().also { intent ->
intent.action = "im.cwtch.flwtch.broadcast.SERVICE_EVENT_BUS"
intent.putExtra("EventType", evt.EventType)
intent.putExtra("Data", evt.Data)
intent.putExtra("EventID", evt.EventID)
LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)
}
}
// Event passing translations from Flutter to Kotlin worker scope so the worker can use them
"L10nInit" -> {
notificationSimple = (a.get("notificationSimple") as? String) ?: "New Message"
notificationConversationInfo = (a.get("notificationConversationInfo") as? String)
?: "New Message From "
}
else -> {
Log.i(TAG, "unknown command: " + method);
return Result.failure()
}
}
"ReconnectCwtchForeground" -> {
Cwtch.reconnectCwtchForeground()
}
"CreateProfile" -> {
val nick = (a.get("nick") as? String) ?: ""
val pass = (a.get("pass") as? String) ?: ""
Cwtch.createProfile(nick, pass)
}
"LoadProfiles" -> {
val pass = (a.get("pass") as? String) ?: ""
Cwtch.loadProfiles(pass)
}
"ChangePassword" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val pass = (a.get("OldPass") as? String) ?: ""
val passNew = (a.get("NewPass") as? String) ?: ""
val passNew2 = (a.get("NewPassAgain") as? String) ?: ""
Cwtch.changePassword(profile, pass, passNew, passNew2)
}
"GetMessage" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val indexI = a.getInt("index").toLong()
Log.d("FlwtchWorker", "Cwtch GetMessage " + profile + " " + conversation.toString() + " " + indexI.toString())
return Result.success(Data.Builder().putString("result", Cwtch.getMessage(profile, conversation, indexI)).build())
}
"GetMessageByID" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val id = a.getInt("id").toLong()
return Result.success(Data.Builder().putString("result", Cwtch.getMessageByID(profile, conversation, id)).build())
}
"GetMessageByContentHash" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val contentHash = (a.get("contentHash") as? String) ?: ""
return Result.success(Data.Builder().putString("result", Cwtch.getMessagesByContentHash(profile, conversation, contentHash)).build())
}
"UpdateMessageAttribute" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val channel = a.getInt("chanenl").toLong()
val midx = a.getInt("midx").toLong()
val key = (a.get("key") as? String) ?: ""
val value = (a.get("value") as? String) ?: ""
Cwtch.setMessageAttribute(profile, conversation, channel, midx, key, value)
}
"AcceptConversation" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
Cwtch.acceptConversation(profile, conversation)
}
"BlockContact" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
Cwtch.blockContact(profile, conversation)
}
"SendMessage" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val message = (a.get("message") as? String) ?: ""
Cwtch.sendMessage(profile, conversation, message)
}
"SendInvitation" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val target = (a.get("target") as? Long) ?: -1
Cwtch.sendInvitation(profile, conversation, target)
}
"ShareFile" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val filepath = (a.get("filepath") as? String) ?: ""
Cwtch.shareFile(profile, conversation, filepath)
}
"DownloadFile" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val filepath = (a.get("filepath") as? String) ?: ""
val manifestpath = (a.get("manifestpath") as? String) ?: ""
val filekey = (a.get("filekey") as? String) ?: ""
// FIXME: Prevent spurious calls by Intent
if (profile != "") {
Cwtch.downloadFile(profile, conversation, filepath, manifestpath, filekey)
}
}
"CheckDownloadStatus" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val fileKey = (a.get("fileKey") as? String) ?: ""
Cwtch.checkDownloadStatus(profile, fileKey)
}
"VerifyOrResumeDownload" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val fileKey = (a.get("fileKey") as? String) ?: ""
Cwtch.verifyOrResumeDownload(profile, conversation, fileKey)
}
"SendProfileEvent" -> {
val onion = (a.get("onion") as? String) ?: ""
val jsonEvent = (a.get("jsonEvent") as? String) ?: ""
Cwtch.sendProfileEvent(onion, jsonEvent)
}
"SendAppEvent" -> {
val jsonEvent = (a.get("jsonEvent") as? String) ?: ""
Cwtch.sendAppEvent(jsonEvent)
}
"ResetTor" -> {
Cwtch.resetTor()
}
"ImportBundle" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val bundle = (a.get("bundle") as? String) ?: ""
Cwtch.importBundle(profile, bundle)
}
"CreateGroup" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val server = (a.get("server") as? String) ?: ""
val groupName = (a.get("groupName") as? String) ?: ""
Cwtch.createGroup(profile, server, groupName)
}
"DeleteProfile" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val pass = (a.get("pass") as? String) ?: ""
Cwtch.deleteProfile(profile, pass)
}
"ArchiveConversation" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = (a.get("conversation") as? Long) ?: -1
Cwtch.archiveConversation(profile, conversation)
}
"DeleteConversation" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = (a.get("conversation") as? Long) ?: -1
Cwtch.deleteContact(profile, conversation)
}
"SetProfileAttribute" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val key = (a.get("Key") as? String) ?: ""
val v = (a.get("Val") as? String) ?: ""
Cwtch.setProfileAttribute(profile, key, v)
}
"SetConversationAttribute" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = (a.get("conversation") as? Long) ?: -1
val key = (a.get("Key") as? String) ?: ""
val v = (a.get("Val") as? String) ?: ""
Cwtch.setConversationAttribute(profile, conversation, key, v)
}
"Shutdown" -> {
Cwtch.shutdownCwtch();
return Result.success()
}
"LoadServers" -> {
val password = (a.get("Password") as? String) ?: ""
Cwtch.loadServers(password)
}
"CreateServer" -> {
val password = (a.get("Password") as? String) ?: ""
val desc = (a.get("Description") as? String) ?: ""
val autostart = (a.get("Autostart") as? Boolean) ?: false
Cwtch.createServer(password, desc, autostart)
}
"DeleteServer" -> {
val serverOnion = (a.get("ServerOnion") as? String) ?: ""
val password = (a.get("Password") as? String) ?: ""
Cwtch.deleteServer(serverOnion, password)
}
"LaunchServers" -> {
Cwtch.launchServers()
}
"LaunchServer" -> {
val serverOnion = (a.get("ServerOnion") as? String) ?: ""
Cwtch.launchServer(serverOnion)
}
"StopServer" -> {
val serverOnion = (a.get("ServerOnion") as? String) ?: ""
Cwtch.stopServer(serverOnion)
}
"StopServers" -> {
Cwtch.stopServers()
}
"DestroyServers" -> {
Cwtch.destroyServers()
}
"SetServerAttribute" -> {
val serverOnion = (a.get("ServerOnion") as? String) ?: ""
val key = (a.get("Key") as? String) ?: ""
val v = (a.get("Val") as? String) ?: ""
Cwtch.setServerAttribute(serverOnion, key, v)
}
else -> {
Log.i("FlwtchWorker", "unknown command: " + method);
return Result.failure()
}
}
return Result.success()
return Result.success()
}
// Creates an instance of ForegroundInfo which can be used to update the
// ongoing notification.
private fun createForegroundInfo(progress: String): ForegroundInfo {
val id = "flwtch"
val title = "Flwtch"
val cancel = "Shut down"//todo: translate
val title = "Flwtch" // TODO: change
val cancel = "Shut down" // TODO: translate
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createForegroundNotificationChannel(id, id)
@ -385,6 +270,10 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) :
intent.action = Intent.ACTION_RUN
intent.putExtra("EventType", "ShutdownClicked")
}
var flags = PendingIntent.FLAG_UPDATE_CURRENT
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
flags = flags or PendingIntent.FLAG_IMMUTABLE
}
val notification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle(title)
@ -394,7 +283,7 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) :
.setOngoing(true)
// Add the cancel action to the notification which can
// be used to cancel the worker
.addAction(android.R.drawable.ic_delete, cancel, PendingIntent.getActivity(applicationContext, 2, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(android.R.drawable.ic_delete, cancel, PendingIntent.getActivity(applicationContext, 2, cancelIntent, flags))
.build()
return ForegroundInfo(101, notification)

View File

@ -1,46 +1,48 @@
package im.cwtch.flwtch
import SplashView
import android.annotation.TargetApi
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import androidx.annotation.NonNull
import android.content.pm.PackageManager
import android.net.Uri
import android.os.PowerManager
import android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
import android.util.Log
import android.view.Window
import android.view.WindowManager
import androidx.annotation.NonNull
import androidx.lifecycle.Observer
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.work.*
import io.flutter.embedding.android.SplashScreen
import cwtch.Cwtch
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.android.SplashScreen
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel.Result
import io.flutter.plugin.common.ErrorLogResult
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.Result
import org.json.JSONObject
import java.util.concurrent.TimeUnit
import java.io.File
import java.nio.file.Files
import java.nio.file.Paths
import java.nio.file.StandardCopyOption
import java.util.concurrent.TimeUnit
import android.net.Uri
import android.provider.DocumentsContract
import android.content.ContentUris
import android.os.Build
import android.os.Environment
import android.database.Cursor
import android.provider.MediaStore
class MainActivity: FlutterActivity() {
override fun provideSplashScreen(): SplashScreen? = SplashView()
// Channel to get app info
private val CHANNEL_APP_INFO = "test.flutter.dev/applicationInfo"
private val CALL_APP_INFO = "getNativeLibDir"
private val ANDROID_SETTINGS_CHANNEL_NAME = "androidSettings"
private val ANDROID_SETTINGS_CHANGE_NAME= "androidSettingsChanged"
private var andoidSettingsChangeChannel: MethodChannel? = null
private val CALL_ASK_BATTERY_EXEMPTION = "requestBatteryExemption"
private val CALL_IS_BATTERY_EXEMPT = "isBatteryExempt"
// Channel to get cwtch api calls on
private val CHANNEL_CWTCH = "cwtch"
@ -52,6 +54,7 @@ class MainActivity: FlutterActivity() {
private val CHANNEL_NOTIF_CLICK = "im.cwtch.flwtch/notificationClickHandler"
private val CHANNEL_SHUTDOWN_CLICK = "im.cwtch.flwtch/shutdownClickHandler"
private val TAG: String = "MainActivity.kt"
// WorkManager tag applied to all Start() infinite coroutines
val WORKER_TAG = "cwtchEventBusWorker"
@ -62,11 +65,27 @@ class MainActivity: FlutterActivity() {
// "Download to..." prompt extra arguments
private val FILEPICKER_REQUEST_CODE = 234
private val PREVIEW_EXPORT_REQUEST_CODE = 235
private val PROFILE_EXPORT_REQUEST_CODE = 236
private val REQUEST_DOZE_WHITELISTING_CODE:Int = 9
private var dlToProfile = ""
private var dlToHandle = ""
private var dlToFileKey = ""
private var exportFromPath = ""
override fun onCreate(savedInstanceState: android.os.Bundle?) {
super.onCreate(savedInstanceState)
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
// Todo: when we support SDK 31
// hideOverlay()
}
/*
@TargetApi(31)
fun hideOverlay() {
window.setHideOverlayWindows(true);
}
*/
// handles clicks received from outside the app (ie, notifications)
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
@ -93,8 +112,16 @@ class MainActivity: FlutterActivity() {
override fun onActivityResult(requestCode: Int, result: Int, intent: Intent?) {
super.onActivityResult(requestCode, result, intent);
// has null intent and data
if (requestCode == REQUEST_DOZE_WHITELISTING_CODE) {
// 0 == "battery optimized" (still)
// -1 == "no battery optimization" (exempt!)
andoidSettingsChangeChannel!!.invokeMethod("powerExemptionChange", result == -1)
return;
}
if (intent == null || intent!!.getData() == null) {
Log.i("MainActivity:onActivityResult", "user canceled activity");
Log.i(TAG, "user canceled activity");
return;
}
@ -110,8 +137,6 @@ class MainActivity: FlutterActivity() {
)), ErrorLogResult(""));//placeholder; this Result is never actually invoked
} else if (requestCode == PREVIEW_EXPORT_REQUEST_CODE) {
val targetPath = intent!!.getData().toString()
var srcFile = File(this.exportFromPath)
Log.i("MainActivity:PREVIEW_EXPORT", "exporting previewed file")
val sourcePath = Paths.get(this.exportFromPath);
val targetUri = Uri.parse(targetPath);
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
@ -122,6 +147,20 @@ class MainActivity: FlutterActivity() {
os?.close();
//Files.delete(sourcePath);
}
} else if (requestCode == PROFILE_EXPORT_REQUEST_CODE ) {
val targetPath = intent!!.getData().toString()
val srcFile = StringBuilder().append(this.applicationContext.cacheDir).append("/").append(this.exportFromPath).toString();
Log.i("MainActivity:PREVIEW_EXPORT", "exporting previewed file " + srcFile);
val sourcePath = Paths.get(srcFile);
val targetUri = Uri.parse(targetPath);
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
val bytesWritten = Files.copy(sourcePath, os);
Log.d("MainActivity:PREVIEW_EXPORT", "copied " + bytesWritten.toString() + " bytes");
if (bytesWritten != 0L) {
os?.flush();
os?.close();
//Files.delete(sourcePath);
}
}
}
@ -132,10 +171,13 @@ class MainActivity: FlutterActivity() {
requestWindowFeature(Window.FEATURE_NO_TITLE)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL_APP_INFO).setMethodCallHandler { call, result -> handleAppInfo(call, result) }
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL_CWTCH).setMethodCallHandler { call, result -> handleCwtch(call, result) }
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, ANDROID_SETTINGS_CHANNEL_NAME).setMethodCallHandler { call, result -> handleAndroidSettings(call, result) }
notificationClickChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL_NOTIF_CLICK)
shutdownClickChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL_SHUTDOWN_CLICK)
andoidSettingsChangeChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, ANDROID_SETTINGS_CHANGE_NAME)
}
// MethodChannel CHANNEL_APP_INFO handler (Flutter Channel for requests for Android environment info)
private fun handleAppInfo(@NonNull call: MethodCall, @NonNull result: Result) {
when (call.method) {
CALL_APP_INFO -> result.success(getNativeLibDir())
@ -144,6 +186,30 @@ class MainActivity: FlutterActivity() {
}
}
// MethodChannel ANDROID_SETTINGS_CHANNEL_NAME handler (Flutter Channel for requests for Android settings)
// Called from lib/view/globalsettingsview.dart
private fun handleAndroidSettings(@NonNull call: MethodCall, @NonNull result: Result) {
when (call.method) {
CALL_IS_BATTERY_EXEMPT -> result.success(checkIgnoreBatteryOpt() ?: false);
CALL_ASK_BATTERY_EXEMPTION -> { requestBatteryExemption(); result.success(null); }
else -> result.notImplemented()
}
}
@TargetApi(23)
private fun checkIgnoreBatteryOpt(): Boolean {
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
return powerManager.isIgnoringBatteryOptimizations(this.packageName) ?: false;
}
@TargetApi(23)
private fun requestBatteryExemption() {
val i = Intent()
i.action = ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
i.data = Uri.parse("package:" + this.packageName)
startActivityForResult(i, REQUEST_DOZE_WHITELISTING_CODE);
}
private fun getNativeLibDir(): String {
val ainfo = this.applicationContext.packageManager.getApplicationInfo(
"im.cwtch.flwtch", // Must be app name
@ -154,76 +220,336 @@ class MainActivity: FlutterActivity() {
// receives messages from the ForegroundService (which provides, ironically enough, the backend)
private fun handleCwtch(@NonNull call: MethodCall, @NonNull result: Result) {
var method = call.method
// todo change usage patern to match that in FlwtchWorker
// Unsafe for anything using int args, causes access time attempt to cast to string which will fail
val argmap: Map<String, String> = call.arguments as Map<String, String>
// the frontend calls Start every time it fires up, but we don't want to *actually* call Cwtch.Start()
// in case the ForegroundService is still running. in both cases, however, we *do* want to re-register
// the eventbus listener.
if (call.method == "Start") {
val uniqueTag = argmap["torPath"] ?: "nullEventBus"
when (call.method) {
"Start" -> {
val uniqueTag = argmap["torPath"] ?: "nullEventBus"
// note: because the ForegroundService is specified as UniquePeriodicWork, it can't actually get
// accidentally duplicated. however, we still need to manually check if it's running or not, so
// that we can divert this method call to ReconnectCwtchForeground instead if so.
val works = WorkManager.getInstance(this).getWorkInfosByTag(WORKER_TAG).get()
for (workInfo in works) {
WorkManager.getInstance(this).cancelWorkById(workInfo.id)
}
WorkManager.getInstance(this).pruneWork()
// note: because the ForegroundService is specified as UniquePeriodicWork, it can't actually get
// accidentally duplicated. however, we still need to manually check if it's running or not, so
// that we can divert this method call to ReconnectCwtchForeground instead if so.
val works = WorkManager.getInstance(this).getWorkInfosByTag(WORKER_TAG).get()
for (workInfo in works) {
WorkManager.getInstance(this).cancelWorkById(workInfo.id)
}
WorkManager.getInstance(this).pruneWork()
Log.i("MainActivity.kt", "Start() launching foregroundservice")
// this is where the eventbus ForegroundService gets launched. WorkManager should keep it alive after this
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, call.method).putString(FlwtchWorker.KEY_ARGS, JSONObject(argmap).toString()).build()
// 15 minutes is the shortest interval you can request
val workRequest = PeriodicWorkRequestBuilder<FlwtchWorker>(15, TimeUnit.MINUTES).setInputData(data).addTag(WORKER_TAG).addTag(uniqueTag).build()
WorkManager.getInstance(this).enqueueUniquePeriodicWork("req_$uniqueTag", ExistingPeriodicWorkPolicy.REPLACE, workRequest)
return
} else if (call.method == "CreateDownloadableFile") {
this.dlToProfile = argmap["ProfileOnion"] ?: ""
this.dlToHandle = argmap["handle"] ?: ""
val suggestedName = argmap["filename"] ?: "filename.ext"
this.dlToFileKey = argmap["filekey"] ?: ""
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/octet-stream"
putExtra(Intent.EXTRA_TITLE, suggestedName)
Log.i("MainActivity.kt", "Start() launching foregroundservice")
// this is where the eventbus ForegroundService gets launched. WorkManager should keep it alive after this
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, call.method).putString(FlwtchWorker.KEY_ARGS, JSONObject(argmap).toString()).build()
// 15 minutes is the shortest interval you can request
val workRequest = PeriodicWorkRequestBuilder<FlwtchWorker>(15, TimeUnit.MINUTES).setInputData(data).addTag(WORKER_TAG).addTag(uniqueTag).build()
WorkManager.getInstance(this).enqueueUniquePeriodicWork("req_$uniqueTag", ExistingPeriodicWorkPolicy.REPLACE, workRequest)
}
startActivityForResult(intent, FILEPICKER_REQUEST_CODE)
return
} else if (call.method == "ExportPreviewedFile") {
this.exportFromPath = argmap["Path"] ?: ""
val suggestion = argmap["FileName"] ?: "filename.ext"
var imgType = "jpeg"
if (suggestion.endsWith("png")) {
imgType = "png"
} else if (suggestion.endsWith("webp")) {
imgType = "webp"
} else if (suggestion.endsWith("bmp")) {
imgType = "bmp"
} else if (suggestion.endsWith("gif")) {
imgType = "gif"
"CreateDownloadableFile" -> {
this.dlToProfile = argmap["ProfileOnion"] ?: ""
this.dlToHandle = argmap["handle"] ?: ""
val suggestedName = argmap["filename"] ?: "filename.ext"
this.dlToFileKey = argmap["filekey"] ?: ""
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/octet-stream"
putExtra(Intent.EXTRA_TITLE, suggestedName)
}
startActivityForResult(intent, FILEPICKER_REQUEST_CODE)
}
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "image/" + imgType
putExtra(Intent.EXTRA_TITLE, suggestion)
"ExportPreviewedFile" -> {
this.exportFromPath = argmap["Path"] ?: ""
val suggestion = argmap["FileName"] ?: "filename.ext"
var imgType = "jpeg"
if (suggestion.endsWith("png")) {
imgType = "png"
} else if (suggestion.endsWith("webp")) {
imgType = "webp"
} else if (suggestion.endsWith("bmp")) {
imgType = "bmp"
} else if (suggestion.endsWith("gif")) {
imgType = "gif"
}
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "image/" + imgType
putExtra(Intent.EXTRA_TITLE, suggestion)
}
startActivityForResult(intent, PREVIEW_EXPORT_REQUEST_CODE)
}
startActivityForResult(intent, PREVIEW_EXPORT_REQUEST_CODE)
return
}
"ExportProfile" -> {
this.exportFromPath = argmap["file"] ?: ""
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/gzip"
putExtra(Intent.EXTRA_TITLE, argmap["file"])
}
startActivityForResult(intent, PROFILE_EXPORT_REQUEST_CODE)
}
"GetMessages" -> {
Log.d("MainActivity.kt", "Cwtch GetMessages")
// ...otherwise fallthru to a normal ffi method call (and return the result using the result callback)
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, method).putString(FlwtchWorker.KEY_ARGS, JSONObject(argmap).toString()).build()
val workRequest = OneTimeWorkRequestBuilder<FlwtchWorker>().setInputData(data).build()
WorkManager.getInstance(this).enqueue(workRequest)
WorkManager.getInstance(applicationContext).getWorkInfoByIdLiveData(workRequest.id).observe(
this, Observer { workInfo ->
if (workInfo.state == WorkInfo.State.SUCCEEDED) {
val res = workInfo.outputData.keyValueMap.toString()
result.success(workInfo.outputData.getString("result"))
val profile = argmap["ProfileOnion"] ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val indexI: Int = call.argument("index") ?: 0
val count: Int = call.argument("count") ?: 1
result.success(Cwtch.getMessages(profile, conversation.toLong(), indexI.toLong(), count.toLong()))
return
}
"SendMessage" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val message: String = call.argument("message") ?: ""
result.success(Cwtch.sendMessage(profile, conversation.toLong(), message))
return
}
"SendInvitation" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val target: Int = call.argument("target") ?: 0
result.success(Cwtch.sendInvitation(profile, conversation.toLong(), target.toLong()))
return
}
"ShareFile" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val filepath: String = call.argument("filepath") ?: ""
result.success(Cwtch.shareFile(profile, conversation.toLong(), filepath))
return
}
"GetSharedFiles" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
result.success(Cwtch.getSharedFiles(profile, conversation.toLong()))
return
}
"RestartSharing" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val filepath: String = call.argument("filekey") ?: ""
result.success(Cwtch.restartSharing(profile, filepath))
return
}
"StopSharing" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val filepath: String = call.argument("filekey") ?: ""
result.success(Cwtch.stopSharing(profile, filepath))
return
}
"CreateProfile" -> {
val nick: String = call.argument("nick") ?: ""
val pass: String = call.argument("pass") ?: ""
Cwtch.createProfile(nick, pass)
}
"LoadProfiles" -> {
val pass: String = call.argument("pass") ?: ""
Cwtch.loadProfiles(pass)
}
"ChangePassword" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val pass: String = call.argument("OldPass") ?: ""
val passNew: String = call.argument("NewPass") ?: ""
val passNew2: String = call.argument("NewPassAgain") ?: ""
Cwtch.changePassword(profile, pass, passNew, passNew2)
}
"GetMessage" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val indexI: Int = call.argument("index") ?: 0
result.success(Cwtch.getMessage(profile, conversation.toLong(), indexI.toLong()))
return
}
"GetMessageByID" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val id: Int = call.argument("id") ?: 0
result.success(Cwtch.getMessageByID(profile, conversation.toLong(), id.toLong()))
return
}
"GetMessageByContentHash" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val contentHash: String = call.argument("contentHash") ?: ""
result.success(Cwtch.getMessagesByContentHash(profile, conversation.toLong(), contentHash))
return
}
"SetMessageAttribute" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val channel: Int = call.argument("Chanenl") ?: 0
val midx: Int = call.argument("Message") ?: 0
val key: String = call.argument("key") ?: ""
val value: String = call.argument("value") ?: ""
Cwtch.setMessageAttribute(profile, conversation.toLong(), channel.toLong(), midx.toLong(), key, value)
}
"AcceptConversation" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.acceptConversation(profile, conversation.toLong())
}
"BlockContact" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.blockContact(profile, conversation.toLong())
}
"UnblockContact" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.unblockContact(profile, conversation.toLong())
}
"DownloadFile" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val filepath: String = call.argument("filepath") ?: ""
val manifestpath: String = call.argument("manifestpath") ?: ""
val filekey: String = call.argument("filekey") ?: ""
// FIXME: Prevent spurious calls by Intent
if (profile != "") {
Cwtch.downloadFile(profile, conversation.toLong(), filepath, manifestpath, filekey)
}
}
)
"CheckDownloadStatus" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val fileKey: String = call.argument("fileKey") ?: ""
Cwtch.checkDownloadStatus(profile, fileKey)
}
"VerifyOrResumeDownload" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val fileKey: String = call.argument("fileKey") ?: ""
Cwtch.verifyOrResumeDownload(profile, conversation.toLong(), fileKey)
}
"SendProfileEvent" -> {
val onion: String= call.argument("onion") ?: ""
val jsonEvent: String = call.argument("jsonEvent") ?: ""
Cwtch.sendProfileEvent(onion, jsonEvent)
}
"SendAppEvent" -> {
val jsonEvent: String = call.argument("jsonEvent") ?: ""
Cwtch.sendAppEvent(jsonEvent)
}
"ResetTor" -> {
Cwtch.resetTor()
}
"ImportBundle" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val bundle: String = call.argument("bundle") ?: ""
result.success(Cwtch.importBundle(profile, bundle))
}
"CreateGroup" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val server: String = call.argument("server") ?: ""
val groupName: String = call.argument("groupName") ?: ""
Cwtch.createGroup(profile, server, groupName)
}
"DeleteProfile" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val pass: String = call.argument("pass") ?: ""
Cwtch.deleteProfile(profile, pass)
}
"ArchiveConversation" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.archiveConversation(profile, conversation.toLong())
}
"DeleteConversation" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.deleteContact(profile, conversation.toLong())
}
"SetProfileAttribute" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val key: String = call.argument("Key") ?: ""
val v: String = call.argument("Val") ?: ""
Cwtch.setProfileAttribute(profile, key, v)
}
"SetConversationAttribute" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val key: String = call.argument("Key") ?: ""
val v: String = call.argument("Val") ?: ""
Cwtch.setConversationAttribute(profile, conversation.toLong(), key, v)
}
"LoadServers" -> {
val password: String = call.argument("Password") ?: ""
Cwtch.loadServers(password)
}
"CreateServer" -> {
val password: String = call.argument("Password") ?: ""
val desc: String = call.argument("Description") ?: ""
val autostart: Boolean = call.argument("Autostart") ?: false
Cwtch.createServer(password, desc, autostart)
}
"DeleteServer" -> {
val serverOnion: String = call.argument("ServerOnion") ?: ""
val password: String = call.argument("Password") ?: ""
Cwtch.deleteServer(serverOnion, password)
}
"LaunchServers" -> {
Cwtch.launchServers()
}
"LaunchServer" -> {
val serverOnion: String = call.argument("ServerOnion") ?: ""
Cwtch.launchServer(serverOnion)
}
"StopServer" -> {
val serverOnion: String = call.argument("ServerOnion") ?: ""
Cwtch.stopServer(serverOnion)
}
"StopServers" -> {
Cwtch.stopServers()
}
"DestroyServers" -> {
Cwtch.destroyServers()
}
"SetServerAttribute" -> {
val serverOnion: String = call.argument("ServerOnion") ?: ""
val key: String = call.argument("Key") ?: ""
val v: String = call.argument("Val") ?: ""
Cwtch.setServerAttribute(serverOnion, key, v)
}
"ExportProfile" -> {
val profileOnion: String = call.argument("ProfileOnion") ?: ""
val file: String = StringBuilder().append(this.applicationContext.cacheDir).append("/").append(call.argument("file") ?: "").toString()
Log.i("FlwtchWorker", "constructing exported file " + file);
Cwtch.exportProfile(profileOnion,file)
}
"ImportProfile" -> {
val file: String = call.argument("file") ?: ""
val pass: String = call.argument("pass") ?: ""
Data.Builder().putString("result", Cwtch.importProfile(file, pass)).build()
}
"ReconnectCwtchForeground" -> {
Cwtch.reconnectCwtchForeground()
}
"Shutdown" -> {
Cwtch.shutdownCwtch();
}
else -> {
// ...otherwise fallthru to a normal ffi method call (and return the result using the result callback)
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, method).putString(FlwtchWorker.KEY_ARGS, JSONObject(argmap).toString()).build()
val workRequest = OneTimeWorkRequestBuilder<FlwtchWorker>().setInputData(data).build()
WorkManager.getInstance(this).enqueue(workRequest)
WorkManager.getInstance(applicationContext).getWorkInfoByIdLiveData(workRequest.id).observe(
this, Observer { workInfo ->
if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
val res = workInfo.outputData.keyValueMap.toString()
result.success(workInfo.outputData.getString("result"))
}
}
)
return
}
}
result.success(null)
}
// using onresume/onstop for broadcastreceiver because of extended discussion on https://stackoverflow.com/questions/7439041/how-to-unregister-broadcastreceiver
@ -232,19 +558,22 @@ class MainActivity: FlutterActivity() {
Log.i("MainActivity.kt", "onResume")
if (myReceiver == null) {
Log.i("MainActivity.kt", "onResume registering local broadcast receiver / event bus forwarder")
val mc = MethodChannel(flutterEngine?.dartExecutor?.binaryMessenger, CWTCH_EVENTBUS)
val filter = IntentFilter("im.cwtch.flwtch.broadcast.SERVICE_EVENT_BUS")
myReceiver = MyBroadcastReceiver(mc)
LocalBroadcastManager.getInstance(applicationContext).registerReceiver(myReceiver!!, filter)
val bm = flutterEngine?.dartExecutor?.binaryMessenger;
if (bm != null) {
val mc = MethodChannel(bm, CWTCH_EVENTBUS)
val filter = IntentFilter("im.cwtch.flwtch.broadcast.SERVICE_EVENT_BUS")
myReceiver = MyBroadcastReceiver(mc)
LocalBroadcastManager.getInstance(applicationContext)
.registerReceiver(myReceiver!!, filter)
}
}
// ReconnectCwtchForeground which will resync counters and settings...
// We need to do this here because after a "pause" flutter is still running
// but we might have lost sync with the background process...
Log.i("MainActivity.kt", "Call ReconnectCwtchForeground")
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, "ReconnectCwtchForeground").putString(FlwtchWorker.KEY_ARGS, "{}").build()
val workRequest = OneTimeWorkRequestBuilder<FlwtchWorker>().setInputData(data).build()
WorkManager.getInstance(applicationContext).enqueue(workRequest)
Cwtch.reconnectCwtchForeground()
}
override fun onStop() {

View File

@ -13,6 +13,7 @@
app:lottie_autoPlay="true"
app:lottie_rawRes="@raw/cwtch_animated_logo_op"
app:lottie_loop="true"
app:lottie_speed="1.00" />
app:lottie_speed="1.00"
app:lottie_enableMergePathsForKitKatAndAbove="true" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,8 +1,9 @@
buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.5.31'
repositories {
google()
jcenter()
// jCenter() no longer exists... https://blog.gradle.org/jcenter-shutdown
mavenCentral()
}
dependencies {
@ -15,7 +16,7 @@ buildscript {
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}

View File

@ -1,6 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017
#Mon Jun 20 10:33:21 PDT 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-bin.zip
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
zipStoreBase=GRADLE_USER_HOME

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 51 KiB

8
build.yaml Normal file
View File

@ -0,0 +1,8 @@
targets:
$default:
sources:
- lib/**
- pubspec.*
- $package$
# Allows the code generator to target files outside of the lib folder
- integration_test/**.dart

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

View File

@ -0,0 +1,16 @@
Cwtch (/kʊtʃ/ - a Welsh word roughly translating to “a hug that creates a safe place”) is a decentralized,
privacy-preserving, multi-party messaging protocol that can be used to build metadata resistant applications.
- Decentralized and Open: There is no “Cwtch service” or “Cwtch network”. Participants in Cwtch
can host their own safe spaces, or lend their infrastructure to others seeking a safe space.
The Cwtch protocol is open, and anyone is free to build bots, services and user interfaces and
integrate and interact with Cwtch.
- Privacy Preserving: All communication in Cwtch is end-to-end encrypted and takes place over Tor v3
onion services.
- Metadata Resistant: Cwtch has been designed such that no information is exchanged or available to
anyone without their explicit consent, including on-the-wire messages and protocol metadata.
For more information on how Cwtch works and a guide to metadata resistant communication please
checkout the Cwtch Handbook: https://docs.cwtch.im/

View File

@ -0,0 +1 @@
Metadata resistant privacy platform designed to help you resist surveillance

View File

@ -0,0 +1 @@
Cwtch

View File

@ -0,0 +1 @@
https://cwtch.im/cwtch-explainer.mp4

View File

@ -3,4 +3,6 @@
VERSION=`cat LIBCWTCH-GO-MACOS.version`
echo $VERSION
curl https://build.openprivacy.ca/files/libCwtch-go-macos-$VERSION/libCwtch.dylib --output libCwtch.dylib
curl https://build.openprivacy.ca/files/libCwtch-go-macos-$VERSION/libCwtch.x64.dylib --output libCwtch.x64.dylib
curl https://build.openprivacy.ca/files/libCwtch-go-macos-$VERSION/libCwtch.arm64.dylib --output libCwtch.arm64.dylib

View File

@ -1,7 +1,7 @@
#!/bin/sh
cd macos
curl https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-macos-0.4.6.7.tar.gz --output tor.tar.gz
curl https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-macos-0.4.7.8.tar.gz --output tor.tar.gz
tar -xzf tor.tar.gz
chmod a+x Tor/tor.real
cd ..

View File

@ -1,6 +1,6 @@
Invoke-WebRequest -Uri https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-win64-0.4.6.5.zip -OutFile tor.zip
Invoke-WebRequest -Uri https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-win64-0.4.7.8.zip -OutFile tor.zip
if ((Get-FileHash tor.zip -Algorithm sha512).Hash -ne '7917561a7a063440a1ddfa9cb544ab9ffd09de84cea3dd66e3cc9cd349dd9f85b74a522ec390d7a974bc19b424c4d53af60e57bbc47e763d13cab6a203c4592f' ) { Write-Error 'tor.zip sha512sum mismatch' }
if ((Get-FileHash tor.zip -Algorithm sha512).Hash -ne '5b8f900a37f6e90d7a945b3903d769383c7478042cb43b2105d2374186e1a536f1a4758a2823d1d5be71d53a81dcfd8243293e04f82812d355983df322823cf4' ) { Write-Error 'tor.zip sha512sum mismatch' }
Expand-Archive -Path tor.zip -DestinationPath Tor

View File

@ -1,12 +1,14 @@
#!/bin/sh
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.5.9-linux-x86_64 -O linux/tor
chmod a+x linux/tor
cd linux
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.7.8-linux-x86_64.tar.gz -O tor.tar.gz
tar -xzf tor.tar.gz
cd ..
mkdir -p android/app/src/main/jniLibs/arm64-v8a
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.4.9-arm64_pie -O android/app/src/main/jniLibs/arm64-v8a/libtor.so
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.7.10-arm64 -O android/app/src/main/jniLibs/arm64-v8a/libtor.so
chmod a+x android/app/src/main/jniLibs/arm64-v8a/libtor.so
mkdir -p android/app/src/main/jniLibs/armeabi-v7a
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.4.9-arm_pie -O android/app/src/main/jniLibs/armeabi-v7a/libtor.so
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.7.10-arm7 -O android/app/src/main/jniLibs/armeabi-v7a/libtor.so
chmod a+x android/app/src/main/jniLibs/armeabi-v7a/libtor.so

20
index2.js Normal file
View File

@ -0,0 +1,20 @@
var fs = require("fs");
var reporter = require('cucumber-html-reporter');
const reportRootDir = 'integration_test/gherkin/reports/'
const jsonReportPath = `${reportRootDir}json_report.json`;
const htmlReportPath = `${reportRootDir}cucumber_report.html`;
const reportFile = fs.readFileSync(`${reportRootDir}integration_response_data.json`);
//const jsonReport = JSON.parse(JSON.parse(reportFile).gherkin_reports)[0];
const jsonReport = JSON.parse(reportFile);
fs.writeFileSync(jsonReportPath, JSON.stringify(jsonReport));
var options = {
theme: 'bootstrap',
jsonFile: jsonReportPath,
output: htmlReportPath,
reportSuiteAsScenarios: true,
launchReport: false,
};
reporter.generate(options);

View File

@ -0,0 +1,60 @@
## Environments
Located in the `integration_test/env` folder and managed by the hooks in `integration_test/hooks/env.dart`. Specify the environment you want a feature to run in by tagging it.
* `[no tag] (env/default)`: default environment to load if none is specified
* `@env:aliceandbob1 (env/aliceandbob1)`: no-password Alice, Bob, and Carol profiles. Alice and Bob have already added each other, Carol has no contacts
* `@env:persist (env/persist)`: changes made to this profile persist between features and scenarios (but NOT between runs)
* `@env:clean`: runs the feature with no profile existing yet on disk
## Tests
[ ] 1. general
[X] splash screen + clean load
[X] setting save+load (TODO: dropdowns)
[~] tor status+reset
[~] shutdown cwtch
[ ] 2. global settings (verify functionality)
[_] language # blocked by dropdown
[_] theme+color theme # blocked by dropdown
[ ] column mode -> background? so all tests check both modes?
[X] block unknown
[X] streamer mode
[ ] 3. experiments (
[ ] group chat -> needs many
[ ] server hosting -> also many
[ ] file sharing -> a couple
[ ] image previews
[ ] clickable links (how much to test?)
[ ] 4. profile mgmt
[X] create+delete
[X] default+password load
[X] name change
[ ] password change
[ ] known server mgmt
[ ] 5. p2p chat
[ ] add, remove, block, archive
[ ] invite accept+reject
[X] send+receive
[ ] acks
[ ] try to send a long message
[ ] malformed messages, replies
[ ] overlays (invite, file/image)
[ ] send
[ ] receive
[ ] functionality
[ ] 6. p2p settings
[ ] name saving + transmission
[ ] block (ui indicators, functionality) inc in groups
[ ] history save+load
[ ] 7. groupchat
[ ] add, leave, archive
[ ] send+receive inc acks
[ ] try to send a long message
[ ] malformed messages, replies
[ ] overlays (invite, file/image) inc from non-contacts
[ ] send
[ ] receive
[ ] functionality
[ ] 8. group settings
[ ] display name

View File

@ -0,0 +1 @@
_âeK%?Š!ţ~Lö9<C3B6>u×ÍlýQQż¦U•rMQCN5<4E>T-Ó/[<ń<ěn@KgŚă-ŕóŕČŃÓWÇ^l$řIC]»ÎI× ů@z¤m•Şb ŠNgířż?ő:†IşäD!ă±6ć°%čě…b

View File

@ -0,0 +1 @@
¢‰qö3‰ ÉÌ¥êÒŽB7 Å¢(ÊvQBöÞɱ<C389>øŒœ¾F±zŠ\\UƒÈG[Ü/ £Ñ?uš¼\;]y”HþG|þÛ,Þ3xÛÞeE0 !¬ÄSÍž<nÐÃòÐÉ®M~ üw “ÀëQ@6ǸËÖo£ÉüØ…ÕöÀiò

View File

@ -0,0 +1 @@
;KĄĂ”ČÓŠť\|ç<ÂŐÉ^1iRüÁw°ôFŔQĄ'¢©©z{P4ĂP(ä"5͸Qpr7˝`ŇK^uý¸ČÖ;©1&Ĺ,vŞ K/YößžŹmĄâ}±3]/§v"&ĽiѸ!3Wîyëjuvą¶D+w_'

View File

@ -0,0 +1,2 @@
¢ž»5‡Ä ô<03>m-J0újÕx­ ŽÙð•ÛjÙß“K×çøs³C=íà¾t¶-ÿD÷ñÇecàIXF`íI´
÷³6 Vr×gp4ËBóäÞS¿E<C2BF>tvìíä1iù¢‡”}ûZóÈWMóŒö´»1þ‡KB||Å,¢fEž%<<3C>D

View File

@ -0,0 +1,411 @@
dir-key-certificate-version 3
fingerprint 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4
dir-key-published 2021-09-01 00:00:00
dir-key-expires 2022-03-01 00:00:00
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA7cZXvDRxfjDYtr9/9UsQ852+6cmHMr8VVh8GkLwbq3RzqjkULwQ2
R9mFvG4FnqMcMKXi62rYYA3fZL1afhT804cpvyp/D3dPM8QxW88fafFAgIFP4LiD
0JYjnF8cva5qZ0nzlWnMXLb32IXSvsGSE2FRyAV0YN9a6k967LSgCfUnZ+IKMezW
1vhL9YK4QIfsDowgtVsavg63GzGmA7JvZmn77+/J5wKz11vGr7Wttf8XABbH2taX
O9j/KGBOX2OKhoF3mXfZSmUO2dV9NMwtkJ7zD///Ny6sfApWV6kVP4O9TdG3bAsl
+fHCoCKgF/jAAWzh6VckQTOPzQZaH5aMWfXrDlzFWg17MjonI+bBTD2Ex2pHczzJ
bN7coDMRH2SuOXv8wFf27KdUxZ/GcrXSRGzlRLygxqlripUanjVGN2JvrVQVr0kz
pjNjiZl2z8ZyZ5d4zQuBi074JPGgx62xAstP37v1mPw14sIWfLgY16ewYuS5bCxV
lyS28jsPht9VAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA+jzmadukj4Q0qLgJ0at+nDXGruO5JD3HsehobiwO8HrdaaImY+rY
CZzxRWM4xryQ2AFuAGbSxGoNQT3dTLvjKNVdGY6jPzlS7vxKbPeNZtc/YMvfZ+Fx
uEjvaZ6nDbviVtQhtE0J2EZ32n90Ob8YC8l/7zh0hp+mZO6Wf2DGXWjNvG7d8Ucc
p5A1ZVIpJ/VQzdlPaocO+6AvxvSBpaIUF0yGpTwofTOjtUmZyuWbhRndsQj1qMcj
e8wzOIgr3HZyhO9wztQGkZ8bzHq65oZe0IIOXZu0icZamFGQ5I6y5duCqxDDe4C/
v1/6bD1I+/ujLXRMmkcbJ3NZE+KrZg7KIE5ScGbkJIX7vIicqtsf+7VipdOh3/wp
qaDxX9Sp2cbVUU0M/aJ14nDSeFlx0XQAgWkPjG2lYtTNEC2zuudBCuCD8es8EhAW
FrU94cYg9lVId0NDMOpWPMH2QJFS4tk3Hc66si3+gkCOt2GOaSQeD+gGWkdwDzn3
S8iAur2GohFFAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
B4914rKqUc51Q1nq8CrA/e7EaMQ0ug08qlBqWyzZSDiBKVCoQj446ZJMU9VKlzJF
XtuURlJ7zswXMze7HceakrkxZAc7GiAGKO5hgbbI8XGLvXn16Lsr/MP1cmbKoI04
g5tG9Kx6yOB4r/l2TQY9Tw22YcdJ24W2/mw6TmDv0b+IorsIBnxIDv7Q7j25IkNE
hW3F9R+Ntja1RWPqKnptp8nxBt5/2jVr637BFczDv9K509QX+HHKyICA1hnvDDU7
N5Y1/mVu4JwQrBAFL857XbobP4QaLsZ34Q8LRE4dveuyw+vjVa1YimZ6h/RvrYyP
8DUi4XnzFyztecivXbdSTpMTSMfC4NQXFeT+XStRdWlapZyCFhp74w3wv7HCB0z6
7QT1HWMKPRvj1DsHhvPviyLVCL2tl2x+G7aaledOPf6BbhO7VolNeHiubyYCQl2H
t/Vy72DZbQeuLhf5GyqVyUm9uugzvVrryUiNUApOW8Xta2dAEBqinDrrY6iMYxh/
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
UrJN3Ey1hSHTaMUAhINCVFhojt48ppxky0bvwztQ9p/Vy7dfRx0APNbL70/XZOrR
sRj8zxtx2+tc5Lnkfaah63bmVsUNTgD6LudDaffXiV8XhIeVbzS0r/YJ0U1OsbK+
ApDItNDUz+VIJL5JUDjq/6fojFlWPYNIwyk5G8zOM70Atjk6UDyCIihV2u5pofW3
znFaFp/XhC14S8lMPZYKbnyl2iQ7UsqLpTxg3EwivIlSVFs5YQe0yXgJFX0oNd9Z
gAf3JIonA2g8Oo9EkgRfYCI33AwyVoU3QN1/AmLH2uPWTKhMu7k+OHktuIBfyFTR
9jbUq+YTU1ni6kEsJVBP/0I4n9Xb4VYIoqOq0BrcEp3lQ8BCEWjIGwLh1HYc9/DY
meE+cwLp0RNU8cuxyrGnkLA350bsNxrDkiaHAkj5ZA8W9VTGYsBxVhbLdQzN3GOm
63GJBgjdaOsD6WXs/737nD2sLu6dnA/Jbz84ouZSafQO/FNQZnndfj4osjabmq8O
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 0232AF901C31A04EE9848595AF9BB7620D4C5B2E
dir-key-published 2021-08-01 20:00:02
dir-key-expires 2022-08-01 20:00:02
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu9O0Pueesn0+29BlxZs60mBqehjdQtgSnKOm9QZxbQ0xrMQgbFnR
hWbKD8erenyeFk2SF6AJkbyzgYC89hyPW+8GBDmg5bE8fRKjgV/nI3tY2m4rkY3u
zSmYIdwqHUUc98Xzt9PaQ8IJAlDBY4XLKrWmJMxSyhBlVEept7+9Tj23qowW44Mz
xPJZ1aFkB1FpkD6qmoCzVZbhXy3cGt1nDwdJK7KqlaXziz9pFiw8PzTVU2xFgJNy
+nEcT72DBtk3G5K2Riu/aXY/D541Cioj9KMV4Nv4g8aBKx58Xq2tq1pFkc1Bqj1y
2MomVR3iskFzlqC8yKWGVe4OP2IaOhtcQJYp5GR9q+dWnr53WWNVxNu3sA9iMal3
PJUk5pIYrsmArGew5gmlCe+Al46nPINxc7ouztmStAV+2F6SpZlKOcstnT+KJ52O
1xnOSaj/WnzG2o4KZ9UrFQoUNOLQJcelPcC+vrinMk9BQPcB072l9NjpUBC9brsW
qTCMStn1jfDDAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAp7nHn/R+ZZ8lza379M7BJ00JYPAcncjtoa2K2Z75bDoxlegGvZXp
j4D0WhqksaaOr/+YCSPMcs4HAapKE/Dj09p1kjzh6Xu/iVp51NiQAARS5j3tu/5k
WJQ7ig207TdtjmslZIx0UU8pieuenRdyUN0PvjOkaoZIpao1+UlIe47DP+42D3QX
1J2wu48QDvt7hUUA3y7yLUyNMarqYBbbXQ/MpH8tcMT76TTN1uilP6W/3j1b6Fr7
NGtbUrS1EzOOHnCpgpnD8qGcisDKrHcVkNkh1w+8LW9ef7RGpFPpn022hUQG0WLD
5zrh19SAsKetWAZY6RlvyCHPVReajIAovwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
ca3I8mHu2zEOCnzySzdk+rbZLpohw5aa3NmTGFzRUXqOeHClOYHRc+glAyCrtUA3
lEa5fiFaZTImKu0J/uroyR4uF5JpzLOfojTQi9P5hMCBSdd7uGzoKC+/dKb2OngZ
VkBjptMf1S9dy2lUdDksHnnyg8UrV7EolIHUFNdEBI1LeONkdesZ5oQMg3HRlVpU
v+m/7y/MB+o3KAXkQyAxTcV4bKdsHm3Pf0CSfDgOPImwFS4lwyEW0STlOmVHojZR
5wm+5dwt9vbD7K6ectbnWtWjiSrvtGjqixO652lxz1qrsid99S5wEzJNhfif8lYe
VsB9h7YagNHJHLiGeBT1kg==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
ZkHpe8JVvGsiAsH8gw1eZVIIE8WuM+3Sdd37U2tOyDi7FVwJV+oJ+aKwcCTqTLaj
jglQJbg2JdV4ofy49ZaQa6FBGLrzxAS6Gx0jg+28Kzbr0xu9hSX81oPSXKn9KDLr
BvmuSqKBB+5B9nIEBjm6FwPc8MjqlvNesuJ3IpW9+e85eB7qsH4ozjHF0GIgpXu/
qXrk2TEK1nMc9EN+VCYuy3gAm46GHQEYR1U7gIofCYf7LQpDrfj1sAGquCQ3vYqT
Ex3GtqcDV22IME67Cou5rv9OmMnmy1dbeHO4g843RX0LXtEDdGYGSLHzl8EAscrg
i55XFlS6z5OwCbdDvFTkHUWRlaiDtoymaxAEW6GUmNjHhgWY9wJwgroVNRsP8Ihi
aex9HIND1MY4ERS41Csba/0grf+FahMVI12gwpmrnKfF95QHWw2MEvT1pzZGtMnq
XD8mcVNYJtcTvYM/cUa0I4BFD1AyeIP54hEXwIsqHm8KBJpjX/ZpPzksnc4NY8i0
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 49015F787433103580E3B66A1707A00E60F2D15B
dir-key-published 2021-11-28 16:32:54
dir-key-expires 2022-02-28 16:32:54
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAxVbS0noZKz1Ei6858RGyyuQgwQUKG4Urrp2BiAzkYxwX+6fURlut
AjeLb4XysqCdNdUipuLRQ2QIy1C220QiCHV6jZAsM4tmEq6TpK6q1lxi5YPKqbGS
CfUQFT1nO4s4DCYSLCwiRNy6bMe8tNHc0MpXP3loCbPkYCoXrEL6vYIROw3oeGWE
KbFPQrzYJAPHgUubBibsY5lkUY9N/5QZw2y1bn+dq9mFOoCIHLd6DkQmySmftnMe
QrpYA2WvE4M5yN2HB8QGT7TdzXPPL6889rFw/mjqYExQPX7cqmILkchsB7I5whjA
u0oodF8Y9ooK9QT0GeK4h3xQhzNG17anuUxbZ7sxzmBwBNmkNyLWEeIntazyjRFr
P2mDY/9YK2JOQKkh3tKl1whcCG9ZtAhKmm/ijG7OrhqtusdGKBXIgALf4f111AK1
gNcacDx2fJzRHuNK8zkIORAzStxKdLbAbBNeLENk1zBjSkrxCOJH4mBpr8TXULq1
ThLI/8OzZq4LAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAo32l4qg46cqP/sAL+oLmQM0mDiQUy6EtNa73vyy0BJEGWJeImUO4
gHNg9pyMFqyF+rP824gAzwX9Un9HaKgFpIrsKcZzg+Yl2vlrBQpJ0NPIkN9oqj27
W/A7RftMhH2itv0v87QudD7FqJpxdYNf3wpr9GvsAiHZMBfC88WhCnmJoDBwyucY
HFH7gzjPeDx37KD57o2M1KC/SRVtQtrccA/WzcxNypgAYkJu4yE2gaDr2WFn3hFv
kscW0jn6+157UuKH0rCNeRFDx8SsSS0nr6Zk/n+dlXzHGDO3vQIKCoRoH9yL4T//
hkMYE/4qc9R49VyXxK+n/qU6HQYpQMi+VwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
KKrOMRAg1bx+XFLRjhQB5OFjtupkqkFnGjS3LZQ5FHNwJ7cKG1X7K0aJNAumRPMD
w9xraIMuuok46wj35P9Tcy68qi3EqIJP5378ZtdK3Ncy9KkSWJSA9MLPmB3fClL/
/5TwboePXRdlt++Bcw9OC83HDuFVBqZArFIvopKf/AJOyViRVHlBmgNKFpm9RJTo
XsD415rJAi79tAfXzKuagke6DTVqobMhxrUmp3RjbEEEC6icQ3YX9X6NOPQ4Gwl2
bpWOVi3/9EGRge0X8IYsqB6/pnEXM2FSOTMdwo4YQzIgW/HLE9hXjFCx7QcPkcos
AZHvl12tKzZF3F9MKPcNyQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
wb40bfNLWyU9pWW+2BAHbrmZZfbs9UEIS/6G66VE6823/r6M90RCmFx1JlwqgmaV
/WMbBE9DxFKILyhuQi6whIKoYndg72VDeZL5BzWctalw24VpJePVjeGLcTdJHBVh
a6UiQFaQdH+bTX6qNIFv9nNwq7ZzJRBvaYF9bK8kaTrZilFKoRVBxXssBUFjEz6t
f+sei5WIiBnzaQOUxdMjvdDAHci4DXwGw1U2M7jcYARo4FfvWkAxzWLxocWmauPM
8tDn0fSgMnLlSOR2crnriQMFhYD+9xyxfOq1IDH2IWCKlejz7j3DHSqBYiUSO9oD
uX6htwbMWwZQeqt+LttE/zZX1Tcv6PJqemT8uabH0s94W2A3sJpstWJ+0capb+Mj
bvTXj7t2ilqa5RX35KKhaQ6wlh4OXZb2ydeJZc7wtyG8eN53aVqJNJQ+WZn4IiTq
fefr2ojy2VDJLDHJVNpKQQzmjXtSs+69wCvrqdHGjGAQl5L31LjZgaNLNj14RI+H
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint ED03BB616EB2F60BEC80151114BB25CEF515B226
dir-key-published 2021-03-29 03:27:58
dir-key-expires 2022-03-29 03:27:58
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA1d6uTRiqdMp4BHBYIHKR6NB599Z1Bqw4TbOVkM2N1aSA4V/L/hKI
nl6m/2LL/UAS+E3NCFX0dhw2+D7r7BTJyfGwz0H2MR6Py5/rCMAnPl20wCjXk2qY
ACQa0rJvIqXobwGnDlvxn4ezsj0IEY/FEb61zHnnPHf6d3uyFR1QT06qEOQyYzML
76f/Lud8MUt+8KzsdnadAPL8okNvcS/nqa2bWbbGhC8S8rtDpPg5BhX2ikXa88RM
QdrrackdppB2ttHlq9+iH3c8Wyp7bvdH8uhv410W7RnIE4P+KIxt3L0gqkxCjjyh
mn9ONcdgNOKe31q2cdW5LOPSIK+I5/VTjYjICza7Euyg03drpoBMGLuuJZY6FXEV
auIBncWe+So8FMxqU/fwo5xm6x085U1MwXUmi4XDYpr/kau6ytPnzzw9J++4W9iC
em5Jp0vaxrDnPdphqT0FWsBAwsZFL7nZRnmUlTgGsXUa0oSM9/MErDwzELh/NwG4
DNyyzRG8iP61AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAsw2ZJlGsmfDmDwoKbzjOno759Xwqn6JX+tFasI8eRjOFnOyjYzd1
XjG6Gj2hVpF/ze2NiTuUyRu3Ybp8G9/gs8VGPljxSHkEugGjQdYFoST02ma0vUHA
8YqpBYOiLvsXnqfEkl3Yj6HVxmVJA9j8BxODODlBtxRMJWFrpp/b+qCo/YyGmCh3
n0qd3QNqFPLIzwvjWVhaFfga8dXBT73wX9uYT7nT/e3pV7ZvTw0caqi7svNzj0I8
/OxOEjoBQEQMQVPT2bNZKBe9X8QKDSgdealZQwBT9wdZ4KndtCj6Y8MVjj15/YtH
fWfNyUHgVqOmfDK7m3pHXR9fGgsLQexIfQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
GyN9MMaPABXJ16WAFIhdzOhNT59BI0RAfV9ZpUJgzkAAmpoj+WwUtWfcrW7a08CT
9g60QwJonP/Nh+8iLvQYH5ZyEqsEj0HEUD/yI2kvN41Y5QBD1Sku8Cu4E2UaICzL
V63oitjQzppKlVXHyP/SXsI2bUjoHLtT2pBvxRJ84DlZBEQ/ZqS38NN/+Z6DtMR/
kn0l7W5yA3bYWzeKy1TeKLWo7p0hHzv/Hswe/eha+27LuwZZwwfSQrRy1fi66Fmj
0xBP+iXXtmNleFegFuhEBPXa+9udrT9rodSdazkGPzjyF6HWRMP5DtmTI6ovJDVX
60UQ0hNb6KAP+FZKPz9/dA==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
zAgmCR7tf0btsogvBmdxJ7+RWjPBzmDSA7f+zlK0jOc3lDDD4pxuQO6iNcoEDYMC
5hkzVoGBMYsxLfLZXFGE518dn79iKr6SQoq87AhnAsIiAfXMk2AWLkWI7MTzZo2U
dcgo+7vzxMObk86vzFxYWrSqp6CSZ7RwBRnH3vCGLfOMZ1lXMug+MQAQYAyl6KIR
3d/uEu3+sPFJcHQFP3C/7bHDG5j/76kwoFzjSjg974rSjr1j1FbrpNn35mLc+2X/
11n7cOADHWaSN3MlLWGsYxuuX2l1w/XZNfFEezDwK3BOotbj5spU2nQ8xbDFPB5+
ixDfc00TC3YbveSz+S8W9czfysJt3KaWmQczDtSIXag1qrL52CBGUVGP6+R7xnpR
/4QD6yCKmDcNk2D1YnindwYC48ydDt/u9A/97cEBpUbul3feW7eKLk79MIklWlWo
3c3aQVH6Ewrb76oXYYwzNbqJOp2ceREu72/Fk/keprVcupVDtVoqHgDDpfOUYTJd
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint D586D18309DED4CD6D57C18FDB97EFA96D330566
dir-key-published 2021-09-06 18:42:41
dir-key-expires 2022-09-06 18:42:41
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAvi5+A+XPw4jxMYhmEI4+MpnaX3dUEbsMGHA+xAMnmVhuxbm3Dn5c
TyhQNY2LOlsieE84UYG+J4dABfaFH4w0l6zUJkuytX4+6WRQontw9puR/IcXkRwM
8Tv/tY675OYRCm9DgDAWfqZM0IgTzSrYRDl8eFPSFCOP0NhMrQZeUrdKgwAXVZWP
xt9nTCwT4K9BMp47LEmZKdEokeVsr0l29Z9v5+r24k9x8EQjDexsoHwlVrxWfarG
1klWssfSFpkMN+FkTQnBC6ByiBh5ZKM5AC/HkVFvuHjehUpfrtNk6XNFcKbDvEIg
qPdg1QWuuSWpZVA+/EwSBtwMNcq9pv60L8Cm9WCJoSC691WByiGwFCy1/XcBI4J/
BkoMEvP3kAxzm92jqGbpFSJawFRPZKy89FDKpha/So3CERQPV0ar+DTpVqDlryWV
N4x1IzpPeSHFj7T74q8qdrxx0wcAjWJ9WYoGQif6FK3hHcmbSGSgyvAFeoYxyUCL
JHkjBCD4WTWVAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA1Hguh3PNTfMd7kLD8NupSdye1KB6hhQitx8DipvT71ZaCZYI8fZ3
z5xa6fCcJXv/xoz1tzKeJ1n4/AzAbc7ltCyyWkj9CbiB99cEe+sVE9R899eFvPP9
DUmsmgy0Bn2MrdfD/N5VeJ219TTtqI75BJMd9n1+r5zUzhji2ihcLWYgi0GVZoec
6B+xfPtYbifCdrPRBwrMAW4EhtMKeJfzsYFO220f7x2OmmZB9muesi5O8/0zjwu1
xOKldXCFbccTfFN88nYmaO8j0SpG9nOveFXavPs0LyVzhuMkbLXSWAN+M/S6GC4L
1kbkjQ6YhuYSnKxGFo/wdax41jrSFCf3qQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2a4uvuN2LUgSuHoWYckJusjzeaEfTTN+DHJdQjJrMueZtxhhz+C+soYoSAvBsHI
huc2y0wLbeNMpLXeyGoYh0M4zm6RyjMksHQZbgPjkibflbUI3csJcvaBMQonfo9B
knoqOzeQd8NioOlnbYQ+k78swGtg2ndHpK4G4NMBK6ZQrbhrIk0nVhOhaIHpGdiN
icr+czGq6SzH4Snp26dJ+J+9SAdTOzgat/C2Othdu122JR2/7GzCnz8dqS3LabN9
iWJWMLxayFKi+Z5f1WjCNOVh5lSjpeLjUNSrA1hXXKSRD0eFOQFRvgvO60gyvooH
C8amqpSD8HqsCK6MvN7V9g==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
uuQhm7YYbqR4/fGSDWqzwiw40nr7y3laCmfiTDHOA5N6lVOw/tM4bdMbGH58wkkK
XBIEz4zQnIT4Sgaumc9PZK3/a8wkx3HgvSNZAEvv5GK2iD8QQNaR0mv7/gbCOLeD
4MAsWH7ehc2u0AcebYehYWE7/fknYRfIGLRzeAeR479LgtFIaaZ54lGeEWKA7qBc
B3njJcNDlekChydxw2JRMw2GmK7Gn/cVRLjFiG32aaTPA37Ietw6Z8wXEjTy4087
KTzTe6puX0g9kCWMaGIBzod+ucNOG9WhgVfy6M+OMddI4KbgizUM7a5c3DZwnQHk
nn5yqib/W7NmHZOL1k2qYlKQlbr412bsDgBDoFYSYPIkbO4x7LHJnGGiwxYx4vmx
caxDySQtqCcR9ygMrZVrL9W/Z+w2N/KCXnL+SgTmN0x/Saor1ZTkONj5Tfn4dg/W
xDxvLO02DpVTfgidUsBeHSnMQn7w0iG0abhWFmYNFDjxZFEWy30mRCEYADC/1NCI
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 27102BC123E7AF1D4741AE047E160C91ADC76B21
dir-key-published 2021-08-21 23:12:45
dir-key-expires 2022-08-21 23:12:45
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAuxgnMVH4vwBjMeGvrEODOYcjbCS4N+Wt0SZ6XA5I08HyMf5AbaaF
MDscJBRIUOp7DyLmUwK+jp+QI8pUjjKsB8S0ctb/J3Im2T6CXnP2KgEfVmpNVQmV
XdMm8cRZl1uIZDDBAXizSQ51f9A17TJh7pF/5khYp/SAzl6aO5ETn7ry0ITiJnNa
6cY+400F7ZBA8NuXnCHVGfmpFFsiJKFrS1Kve629eeaNEd3mynRviBXJy5a4NEGf
y42Ev8on6SxEnF9OG0NMJ081/+mP+j8Dsl3+Uehzr9B42MQQfDo4RdYGrt9XolBm
L4eay1ieZEsFeDy0TMfiGGbr90wo1fgGLHIRSfTNLhhPJ/f9cTZPe98rhSgGWiAd
RvK5SljoIOR4qdS9/aiZkj1P+etvh1rIQUcG4/xCOBnouEBK+DDHZFqyMtpMPtV0
Bxi20DVaMJcyhdfjVqcRSyuR8tlOnTid6QwBj6kgIIfMaC+4Ht6yO/SYquCWlaZl
y7Pu7li8WyW9AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAu1QJ+qlCbtrYsg9QENtOpvMrEDc+WgH1ZFxEqk0v/ad2ACQYe4dT
g1gJ6VZyGths3p8+WQXIA9YbcEr2oajXlLmLT2QAlqlsXMPKwwIpeG4rvR43Wwq5
mQ7aX+/VjZ9YZNoZVEAy1O7ti7GIXJzJYDOdgBjLifSjpjcEmSaf+v4E357azs9R
ndLHRRwbBLdUl7G3aMkL4ejrv6AAXexPxAL90xsb/MAhVEOQrJNcVMTgII0fSf56
P1J17SQwthNZ4rTMo2O9TvWUGNf1sMb9kdm+A2Nwo2CKmUR0uo5wHN4YHSBYFDcb
hxRtZlhSFfBJvJgrX8/+CnJrBFC6S/7vJwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
VzdxGiA6egLcZjm3hHrTW+N+7sPwaEcdYR5/GW757MO79O8QwjOLJSa5dOF5yDWa
3Ie+QDB2Q++a3+w776zqpFsaGCuEHBCfU9pxatKdoTsExZdQnWHJg4u9YD1JcYvL
dZq9uCCWaKa91OjA6/U9zp/LY3tOPUWCyO4MHehHYggzapbcF5uaMG0AT0lZzaXJ
vh180N5YGMfm0eYXJqkJyX3WCZhGroh7o3DyaqtBSJ1cY4NzTNgPoCAi3J/XEoCI
3JzxfH97uyqQngR1yGb5KggdM2ejci3Ld9q99hjXlzYRtsobUQBTlZca2vUk5ALh
vFWU7GzcNIdDjKBUd+IhTQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
WldVJc0L3fByDY9D+Yha2/8Bw5nqRpHu8RL8lU8zXb0rhfiA6DN2aefSCG9WEay1
sTVs4zhS8N0+278oP51Lg7S+V6SmXxKZbF3I2zNaFMIPVspRA3OF0R9vCP1YMxeo
D4EDQXiRxNNeM9hAjmmLiE0j7ZMetZ88ewwsOOXAvPHmCth09nWdCYKwibwUW/U3
w1HXCHK4BdZ7XXkMJNry7kZP/H1/5oYyuKshue4+f8tgRa0xg0wbHDrdbrR1qBBu
Xg9Q11hV29RIdD0ZgugUdyGKlpRa6Mb3GD5DzN845sFhCjsPrYyZv7Xo/S+uTtN4
t59BtF1TjnsAhUk7shk2W3zzaauzUarkDA1v+mb9NZ3CFsNgfxt6d1yDDyuxJgaC
VkIfO9nX9dCORSC9Ow+XOq+D/o4FfSe4q0VvrJJILAcw2Nu1Zg4ZhHBeugP9f4I9
p/+ZMrEr+YAKkjPw+uIEdR0l/YZEhcrjymX4FY829LNll2AceqMCKoapFWuEzzDP
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58
dir-key-published 2021-11-09 19:16:37
dir-key-expires 2023-05-09 19:16:37
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu/DOrbv/4IAYvyxsy/6ivC3q5yCQBWLKHZGYKQa5G/3rem8wen0f
qF7y4ye6U6faWc5kcNMHEKMIeBzMErxwF345qoGHITxbbOWnizgwPgrdCwlK3p0H
1XZGU/TTjoaM25P+ZNCBvGmDQRAtgs2odnv+i8hpu6vrcAUZYXmmw/Ag1Ou2AlLC
mPpbjV1O5SMylgC4IuCBPr3iA+M1kKkvj4LmwU6pJxjAae76GLzzQ/Ffvi7rRpvU
2BHetjehk+7/t8izgbhT4VABtzKgrv9ATnhfEgPeT/WBq0E75iciBBAXRPF5kEA4
k++NPy21XpL7jkQ4wnMs2HyiFhHbUwbLcoyQ/JVq/WBboSwStYbkdizRpkhJ1eNg
LiD8CPWcZnhWZi9VWrwT0xl+Mu4v6kwo9kVnXhOfcK8Wni9FqiBu2tmNDoGPG1Ac
wptYQSIoujuLgn4MARREwo9cWrKp2w+D7Dt4U7U5OrXL7TXjonEKuEHwRhzz1JA8
7LXm/wENwn1/AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAuxJxHCGOw9DgNtw4wqi78OE3djdiLwbie+2CevKMRaO14IhuQGVK
w1PYsnTuVLVcJl3Y4QKQ4nnbe1QCiGrLq9wueQy7ZvBeZry3f+QD1Q/PAG19n6/7
hlhXclSOJ/jRah0Gi+QXAycKE5RES/Qn4F5fNE7MxzM0ZQHIlszZLNUrcpeLE9nX
avlqlSqK8FmLPOpOSRrdPtzKP2sjW9UUFVGMfurDYIC51hkZI/nyy8A1C844sfuF
LV6oYpYw5+soA122zBqGqP6vApwFCvWSDcGlx8xj1Irdo+JIDfK8vklu9P11rTWB
R7dZw9pD21reD0pf0Bipzneho6iiL++w+QIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
aMzjdOHri8Kmdoy0qt1a33Y9/e5vKkJQkzCKdHN34Il5FMMCkOrJ1yeQgZyp6mU4
jPSpUZlr1Iq52x5ers4fH4SybvX16BDq+p6+Zel9f5TpFg1vzdpJH1WOJ3ZoES1N
S8CpiXVz8flc5Ez6Dc7uZGSE2fYRl1Pswn3GuLfR1Wjw0VNp1VgHZk6xYXRk/YLx
OyjZTWEWAF/0qw3usXtvTvh6wGniVxr0rg3zZbesLXti4TAn3B3N6VG1TPOizna6
s26edpQ6RQPigAuccEwU5iaIQEGkIxcoe61qnPvAoWP3Jk/sZAGCqhbya0CBCH8U
pEW/OauwlDlr3yXEKh05aQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
XhAoF04YrM2zJUvrQuEsGhU53Pbf1B0jv5F4YkMlRX2y15rKXKI93vQTM1LbnYc0
ETkhSOQB2rpnX0bcE+K+x0sWXiMRtR1HSX/oIPDI9MNqHv75eZlEkSaDJHIsQJlj
Dd++tMHkRc49nNNo2J25J3TiBU0ecpVYYvtJzynE3W8tX3io6EmvTehkj2o79z0A
ax2A5JG65plch0ES2yK2jqgBEmkA/eZENDNQAaERXMFJbbpHIMBaGguwCEieJe77
JBAOxJFRGpL6MhMpcvi5MgEMqfAv3AhlBo93n4apT2CYR8PdCHUZyq7FrgwTSJS7
ndl3YmvxJ7wnyTXitw0GcSVeQaYMQV+LR9Z1VkmjIwRuHliUn7hR79pYqs3t11aQ
muW8jOrx+5QsiTLEPV6Hs0pzXc9XDw7mnJ6M2gxxF8fZCztal3TNLs9+1O22fxME
0VU1oS7SG6T4M1YOXgKFUP20gLl8sZf+3lGp3aLZIK8psR3vzggpaRSUKgip4Lqv
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 23D15D965BC35114467363C165C4F724B64B4F66
dir-key-published 2021-09-18 16:07:20
dir-key-expires 2022-09-18 16:07:20
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAlv6XS+VppPaQzOgor0YFlcXLWeXiMn5N3VBneXuw8maLOu9oPJ9z
2/oMQN8a+VOWTf+/jebGzOBK6MamXpgsIZPQWiT18gZMsYdR8mcqBYqVP3khwUWh
9QYkV+m+Auxa0TLzTrsi6dLDJ384XdpDweU+YJghMJNZ1NqiT8ogj84hxs5Tf+Qf
bn7EBIcU7SAKr5Lw25KrMb5e3AZSC5MilBS/KLgVTq/GiWb7pKd5pxGwlGolNX8a
PccZ2ZT2DrSQsct4wVxhSbUqANI3PfMpXvmUDxWWBgbQwLF02/4gi+13snlHtqwl
y1WjE55HVfx1CTX13SStwmF/N3SFtFf1qil3j5qrHdHtKlAYOaTfqab1eLVH1l83
LI5QWD7ri9GpPqIjlh6PuaHjaO2FW20SouZtS9jJKwi1l1G3ef1tSlha1cxkRxIp
U/ngvQBsoa9X26VfQA4MieZgVVdMVwjCNh2YC9aEXc/KxfcBueZkM1194qP88cVu
dOFYaftOkuGPAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA3OigVlkOvlx54wcY0RRuExNw2sPYHr8m8QP+SnzARDbrubvsKT0S
z/+aVWccgacBtihOpF9juQLHb+nqhea9s6QS8XAQ98bqm8foKToWuxnIRS9c+8e1
qcENTfh6U2Dr8ckwVcKAPtnLnPtbxuFF5UiqXAPA89ZmtqUPv+DfmDr5fdeb0bCu
Lo6TCFLQOcn2Qz1WsSv/2JRkSBy8pgaC01zErgv9oRVIzFfLn8YpfnWZkFiRGwX6
/GBLsS19SLLX0xLkPwQ/CwN6OkipOtYi6UNq0osHw9xfm5sCzcnltJShA1YtIp72
e1HkTx03a43uAKlJBo1rMD29stVJu9ABEwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2YFJIj1zR9iMPWRJYMDEKuLlV0Gbis9232Gog5sS06LpUFPYL6clLDf7eWAimPs
u8rUUP4JEjmAY7bWHyqbG3D5iljNin50W7kvY8ip+Vqf64vjNUXFDKUbi0iGkfVC
nfX67FL0JF74hqtCtMlS5QPvD4oLsC40DdmPD4kCulaSrMlmsFRGFdl60HeSLbeP
oopRA4yYB4ZGJxJUaSuMm6RrcK08G2l7vLfHpxhcJWQVb2fKB7Ds+AogZYnc6ZYF
hpGAP9y+Yn8TUUqPMhhZwLw/8eUAhtv8G2aBBxHyctlGvg1YFiquPP6VEn88h9GZ
X4d/mLOAQeYWEalQC812iw==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
OlLQuEDdagECnVy1Nke/C7dpS8+8XvgLK/hGgV/OpCWr+Gq8bL6/NpK9GP7EbsUI
NxsguJ2r1wkEGTixz88gdKWDCC3evGW1pqnsjkCk69gHGtCxmrFeiCxCSomaOjzw
HCnp3TcT1DA4EstoXUqPysVkBYkx8OBO6rGhvE+G1S4bVG/EJkPCMhjPlxX41ON6
NWvtf32dviA5W1BrYKWJy/v0pCsApgjZa6qpaLdgqQabG5YEJA0rONS1hL+AcJks
CnvkSS7iU/4jrDPfgOLoVxEkH68swLol2Qf0RFHg12EL5kf0xbPnfE84aQyt99an
6VAMVIy/tCxR2efZ0+uQmQk7S35uQH/PxZ3/mq6cDMw7+WZdYbrkyfmFK/A+yL2P
op71Ik0Xf0Qwd0qMhTZMVPZpZDQmxvr0j0r3xHia0Ez+PhovnnxqI9/cThRQ/ceN
jE2cA46H4ZfYn5OdCP+mP9L+MsqJYoHj/SigcIrXUX58R1D0JWVX2KPU+tVyQ03B
-----END SIGNATURE-----
dir-key-certificate-version 3
dir-address 154.35.175.225:80
fingerprint EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97
dir-key-published 2021-02-08 18:16:07
dir-key-expires 2022-02-08 18:16:07
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAwBmqdD+G0q3smN5OBFHCcK5pQH5G1GIpFJ1JxCVEp92tTK4ZHnot
9RzMfag6zQFqwLaJ+yEb1DOjTdTMfcUTsj5f3GUqPB+U7shSMAvvAAM+Bx/4m1AU
u6sk4XmPB1bCBfcRl4zhnY6XFIbj0ktuBDblcxHz3lDgHFpBoci9sF59mM14MZ09
EdwgeckcU5oeq6ApuSlUVaOT8xsKV/yeK4SKaFfDclwPAJuitQ5CpqctP7ExmlrY
sboTDtz7/Xa6OccaGDEUf7TRlipvUX6rvlmvHm3qjdixVfExpa8E5QG79GZTL82p
1zBd3iqc6QEnRDTiW9cMUeQt4EvrwOUVVYPWo3hp1C/iiNzWraDays2xuhaSB0gj
fPatu2CFW5XB2vd9IvIiWeklSFqnF8DL38jDL7DbFiETJreGsDMR03yHWVd0MbPz
OrvAxG4tJn+JtnwhzlbRjnfk53jOTbiM0vMV8h/ztapCiJeT/6i7nVQ1xL2boeYw
5RDUlwZaQiaXAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEApIIcKBWvD0P2YQtsrFKEF1kprJUCEUlWqzV4mVbTcVdzVQpct8t8
NAO8kDbxRSyU2S6gKecusy4H1MJWVAe2qvKIY974espuJwBXWFgT70jSBTFzjMpB
dAaTTY+kNZa66kjBjCVolr8UfFvL7HaL3CCtWD9ds7+ep76co1h3s3sD2BWW/M5m
V6ML8kYkjRW6SW8YHW6By3G+UuqRiGziJIIwQAoPnNSWrzW6UTLpVRDjdo70bQvU
vvfppUuNNji5SFfzSiakxHIse/eHG/rTNSzOvlpjuZxzPIcekr71eu1hCVHb2QdA
9Ikc5pUQeB0zImI8WJ9OVJDFUEgjJ9LGtQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
cy+VPbSGSJ5aI7egCwgNY6mgSlJumULFmUN8gfahvMo5hUwVLqP1FtoKIO8yBUc0
Y47pt6G5a0fjm6mjapFbU7IpqIUl+5gLBRKD6ugx+hr2IoqIVJY7WQUvVMBnfqHp
Z5N6kXfFBT+EbnbLiUqoRo1/AHC6E6CqI5pdhV86UCFydmuLf/MfwJpXiYRJueqk
DnPYEflq+Zu/RReL5aJlVOVuWq0ZpuzUHk4gIicKESLGkv4eI2CvuB5HTeNAB9L5
laMe+YpoXqgqMae1HT+rupPXYeONPygFXXbNLNVrR7OjAYG2TOaqdUTQkFefFVtD
ungKyPS6LTytSuU/rjWCbQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
sV4ouMb8pmCM3WjLTFxfRVb6qZl8rQ0tYM/AjKz1ufU0UmL7yx/7JMg2InDcYPH3
4PIUQrDLoAMxnnNVMDaDGoGDGI5keUmU1eSGvdJYN7okd0aRvA9LFGw4uDVVyB0K
l7BOk80y15P34R4G6oPvcR8aCxoiMh9UusbhiVjBr6dAfJGVVxZAO1ZJ8pa8fcrA
IbtNks2vut6Oy4oaC7zLCwcbRJM6dSvzcbzBpCf7/b9w6NQNqCBBQkqKgUl0FqKM
QRKqHWuhbqcL9+lj7rvgWCEigLu9ff1+E7C4BV7GzOm5FPcRqfkPaMsjQuM/HErH
swhf2Ra+Tcdk9gdI4AomqwaoD6B2uKsZkcFpZhq4HAle6rOP9eC16DpqsokpqoW9
vb5Mic7ABYVpB4t3o5wOI9D4exXmzv6gpuOyl5rJGL5ORYSEhnMGsKMyPceCGysg
SzwfPWBqRTM2LfBxhW05UEBJev4EXk7AA5sr6GkcX/CXeR47pyXQAyc2doZo7Aoq
-----END SIGNATURE-----

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,58 @@
# Tor state file last generated on 2022-02-04 13:53:23 local time
# Other times below are in UTC
# You *do not* need to edit this file.
CircuitBuildTimeBin 675 1
CircuitBuildTimeBin 825 1
CircuitBuildTimeBin 875 1
CircuitBuildTimeBin 925 1
CircuitBuildTimeBin 975 1
CircuitBuildTimeBin 1075 1
CircuitBuildTimeBin 1125 2
CircuitBuildTimeBin 1175 1
CircuitBuildTimeBin 1225 9
CircuitBuildTimeBin 1275 21
CircuitBuildTimeBin 1325 7
CircuitBuildTimeBin 1375 6
CircuitBuildTimeBin 1425 9
CircuitBuildTimeBin 1475 2
CircuitBuildTimeBin 1525 6
CircuitBuildTimeBin 1575 4
CircuitBuildTimeBin 1625 4
CircuitBuildTimeBin 1675 13
CircuitBuildTimeBin 1725 3
CircuitBuildTimeBin 1775 1
CircuitBuildTimeBin 1875 1
CircuitBuildTimeBin 1925 1
CircuitBuildTimeBin 1975 3
CircuitBuildTimeBin 2025 1
CircuitBuildTimeBin 2075 2
CircuitBuildTimeBin 2275 1
CircuitBuildTimeBin 2325 1
CircuitBuildTimeBin 2575 1
CircuitBuildTimeBin 2725 1
CircuitBuildTimeBin 2775 2
Dormant 0
Guard in=default rsa_id=BD4C647508162F59CB44E4DFC1C2B2B8A9387CCA nickname=regar42 sampled_on=2022-01-27T11:01:16 sampled_idx=0 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-01-25T23:44:41 confirmed_idx=2 pb_use_attempts=78.000000 pb_use_successes=78.000000 pb_circ_attempts=102.000000 pb_circ_successes=100.000000 pb_successful_circuits_closed=100.000000 pb_timeouts=1.000000
Guard in=default rsa_id=AADD84AF8D3C24F492D9EC1E08360D1C7CD5730D nickname=axeTorC sampled_on=2022-01-28T04:55:37 sampled_idx=1 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-04T01:41:15 confirmed_idx=0 pb_use_attempts=1.000000 pb_use_successes=1.000000 pb_circ_attempts=1.000000 pb_circ_successes=1.000000 pb_successful_circuits_closed=1.000000
Guard in=default rsa_id=F7B8A4B5F16ECDF6CA626F96F4E3C219D1A664EC nickname=kerneloopsRelay sampled_on=2022-01-26T16:41:28 sampled_idx=2 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-01-24T18:55:06 confirmed_idx=1
Guard in=default rsa_id=274A1DC6210E91827CDF40DC0E95E4A3CA929A08 nickname=AllanonTor sampled_on=2022-01-26T18:56:19 sampled_idx=3 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=891FB8477529A6B2894B7A3129402E0FD5DD281F nickname=hers sampled_on=2022-01-31T03:58:06 sampled_idx=4 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=898B2FBA56F3707B72A0B97CC492CBB466D9D707 nickname=julianrelay sampled_on=2022-01-30T07:22:54 sampled_idx=5 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=84A9473665250B752B621892834E71EECBD610FF nickname=flyingcubetech sampled_on=2022-01-24T19:47:40 sampled_idx=6 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=7DFC30D7EAAEF6E74B081EC0291757E9414A8C06 nickname=TorRelay1337 sampled_on=2022-01-27T01:43:00 sampled_idx=7 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=A5E42F1A3AFA948A7F2FDB1954A4CF6C6489D418 nickname=bauruine sampled_on=2022-01-31T11:16:43 sampled_idx=8 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=F9AEA07ACE06E8E7D55E10FFBAE037E8C833FA93 nickname=DTFNODE46 sampled_on=2022-01-24T22:18:09 sampled_idx=9 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=3910C5CA0CC5AFE22C709DF471A2B5B6B4AEDC98 nickname=criticalcat sampled_on=2022-01-25T22:53:24 sampled_idx=10 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=FD449127D30D8F5D124653D9EF736EDF4A12B4DC nickname=lw sampled_on=2022-02-01T00:36:22 sampled_idx=11 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=0E2EEC125A6AC8D5EBF5DB36B776A3DA5510E7A0 nickname=Nako sampled_on=2022-02-04T00:40:19 sampled_idx=12 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2C7C9294CFA7AAFB3D25B72DEAED242E96927F03 nickname=ChomelesDEnetcup sampled_on=2022-01-30T05:51:02 sampled_idx=13 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=916DC3199F639168CD20AEC4D45969268E807699 nickname=defcon777 sampled_on=2022-01-27T11:01:04 sampled_idx=14 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=A6C3B64EC8EE20D77987EBC5E894CA6CCE4B5295 nickname=OwlRelay sampled_on=2022-01-30T19:20:11 sampled_idx=15 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=6FB33CCBEF5135AFA3D6D33CE030F96728EDD70C nickname=MDMIT1 sampled_on=2022-01-31T16:49:37 sampled_idx=16 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=85703987A509438D96E22AD367E99FF295E089AF nickname=gbtUSicebeer09b sampled_on=2022-02-03T22:13:49 sampled_idx=17 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=BA053C72E476C1EB9D05237D0D6A289C18FBE8E7 nickname=straDEicebeer02b sampled_on=2022-01-24T08:18:24 sampled_idx=18 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=225A8EA367DF3073433E0A845DDDA26D2357E4C6 nickname=Manureva sampled_on=2022-01-29T21:39:31 sampled_idx=19 sampled_by=0.4.5.9 listed=1
LastWritten 2022-02-04 21:53:23
TorVersion Tor 0.4.5.9 (git-d0ed04d50e80fe1c)
TotalBuildTimes 108

View File

@ -0,0 +1,3 @@
SocksPort 9667 OnionTrafficOnly
ControlPort 9668
HashedControlPassword 16:501107AD0642A3C66029D6A37845E976D5F55B4DED7C4A43CC044638A5

Binary file not shown.

1
integration_test/env/default/dev/SALT vendored Normal file
View File

@ -0,0 +1 @@
ó„Ý gÞd7èfª>ZrPòV`dB<(÷ ôÈW`½ 7¾c´¬n•ËnŠ.ü¾s8lÿ·“*dZUmÊŠí&¸ÊhøEëö8mê<1E>«Y ŸüñrÒý×W²H%{¸iùFÃÎ<äÿ[0²Ñâ”\ yÚø-¯R½L´¨ -'

View File

@ -0,0 +1,411 @@
dir-key-certificate-version 3
fingerprint E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58
dir-key-published 2021-11-09 19:16:37
dir-key-expires 2023-05-09 19:16:37
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu/DOrbv/4IAYvyxsy/6ivC3q5yCQBWLKHZGYKQa5G/3rem8wen0f
qF7y4ye6U6faWc5kcNMHEKMIeBzMErxwF345qoGHITxbbOWnizgwPgrdCwlK3p0H
1XZGU/TTjoaM25P+ZNCBvGmDQRAtgs2odnv+i8hpu6vrcAUZYXmmw/Ag1Ou2AlLC
mPpbjV1O5SMylgC4IuCBPr3iA+M1kKkvj4LmwU6pJxjAae76GLzzQ/Ffvi7rRpvU
2BHetjehk+7/t8izgbhT4VABtzKgrv9ATnhfEgPeT/WBq0E75iciBBAXRPF5kEA4
k++NPy21XpL7jkQ4wnMs2HyiFhHbUwbLcoyQ/JVq/WBboSwStYbkdizRpkhJ1eNg
LiD8CPWcZnhWZi9VWrwT0xl+Mu4v6kwo9kVnXhOfcK8Wni9FqiBu2tmNDoGPG1Ac
wptYQSIoujuLgn4MARREwo9cWrKp2w+D7Dt4U7U5OrXL7TXjonEKuEHwRhzz1JA8
7LXm/wENwn1/AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAuxJxHCGOw9DgNtw4wqi78OE3djdiLwbie+2CevKMRaO14IhuQGVK
w1PYsnTuVLVcJl3Y4QKQ4nnbe1QCiGrLq9wueQy7ZvBeZry3f+QD1Q/PAG19n6/7
hlhXclSOJ/jRah0Gi+QXAycKE5RES/Qn4F5fNE7MxzM0ZQHIlszZLNUrcpeLE9nX
avlqlSqK8FmLPOpOSRrdPtzKP2sjW9UUFVGMfurDYIC51hkZI/nyy8A1C844sfuF
LV6oYpYw5+soA122zBqGqP6vApwFCvWSDcGlx8xj1Irdo+JIDfK8vklu9P11rTWB
R7dZw9pD21reD0pf0Bipzneho6iiL++w+QIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
aMzjdOHri8Kmdoy0qt1a33Y9/e5vKkJQkzCKdHN34Il5FMMCkOrJ1yeQgZyp6mU4
jPSpUZlr1Iq52x5ers4fH4SybvX16BDq+p6+Zel9f5TpFg1vzdpJH1WOJ3ZoES1N
S8CpiXVz8flc5Ez6Dc7uZGSE2fYRl1Pswn3GuLfR1Wjw0VNp1VgHZk6xYXRk/YLx
OyjZTWEWAF/0qw3usXtvTvh6wGniVxr0rg3zZbesLXti4TAn3B3N6VG1TPOizna6
s26edpQ6RQPigAuccEwU5iaIQEGkIxcoe61qnPvAoWP3Jk/sZAGCqhbya0CBCH8U
pEW/OauwlDlr3yXEKh05aQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
XhAoF04YrM2zJUvrQuEsGhU53Pbf1B0jv5F4YkMlRX2y15rKXKI93vQTM1LbnYc0
ETkhSOQB2rpnX0bcE+K+x0sWXiMRtR1HSX/oIPDI9MNqHv75eZlEkSaDJHIsQJlj
Dd++tMHkRc49nNNo2J25J3TiBU0ecpVYYvtJzynE3W8tX3io6EmvTehkj2o79z0A
ax2A5JG65plch0ES2yK2jqgBEmkA/eZENDNQAaERXMFJbbpHIMBaGguwCEieJe77
JBAOxJFRGpL6MhMpcvi5MgEMqfAv3AhlBo93n4apT2CYR8PdCHUZyq7FrgwTSJS7
ndl3YmvxJ7wnyTXitw0GcSVeQaYMQV+LR9Z1VkmjIwRuHliUn7hR79pYqs3t11aQ
muW8jOrx+5QsiTLEPV6Hs0pzXc9XDw7mnJ6M2gxxF8fZCztal3TNLs9+1O22fxME
0VU1oS7SG6T4M1YOXgKFUP20gLl8sZf+3lGp3aLZIK8psR3vzggpaRSUKgip4Lqv
-----END SIGNATURE-----
dir-key-certificate-version 3
dir-address 154.35.175.225:80
fingerprint EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97
dir-key-published 2021-02-08 18:16:07
dir-key-expires 2022-02-08 18:16:07
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAwBmqdD+G0q3smN5OBFHCcK5pQH5G1GIpFJ1JxCVEp92tTK4ZHnot
9RzMfag6zQFqwLaJ+yEb1DOjTdTMfcUTsj5f3GUqPB+U7shSMAvvAAM+Bx/4m1AU
u6sk4XmPB1bCBfcRl4zhnY6XFIbj0ktuBDblcxHz3lDgHFpBoci9sF59mM14MZ09
EdwgeckcU5oeq6ApuSlUVaOT8xsKV/yeK4SKaFfDclwPAJuitQ5CpqctP7ExmlrY
sboTDtz7/Xa6OccaGDEUf7TRlipvUX6rvlmvHm3qjdixVfExpa8E5QG79GZTL82p
1zBd3iqc6QEnRDTiW9cMUeQt4EvrwOUVVYPWo3hp1C/iiNzWraDays2xuhaSB0gj
fPatu2CFW5XB2vd9IvIiWeklSFqnF8DL38jDL7DbFiETJreGsDMR03yHWVd0MbPz
OrvAxG4tJn+JtnwhzlbRjnfk53jOTbiM0vMV8h/ztapCiJeT/6i7nVQ1xL2boeYw
5RDUlwZaQiaXAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEApIIcKBWvD0P2YQtsrFKEF1kprJUCEUlWqzV4mVbTcVdzVQpct8t8
NAO8kDbxRSyU2S6gKecusy4H1MJWVAe2qvKIY974espuJwBXWFgT70jSBTFzjMpB
dAaTTY+kNZa66kjBjCVolr8UfFvL7HaL3CCtWD9ds7+ep76co1h3s3sD2BWW/M5m
V6ML8kYkjRW6SW8YHW6By3G+UuqRiGziJIIwQAoPnNSWrzW6UTLpVRDjdo70bQvU
vvfppUuNNji5SFfzSiakxHIse/eHG/rTNSzOvlpjuZxzPIcekr71eu1hCVHb2QdA
9Ikc5pUQeB0zImI8WJ9OVJDFUEgjJ9LGtQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
cy+VPbSGSJ5aI7egCwgNY6mgSlJumULFmUN8gfahvMo5hUwVLqP1FtoKIO8yBUc0
Y47pt6G5a0fjm6mjapFbU7IpqIUl+5gLBRKD6ugx+hr2IoqIVJY7WQUvVMBnfqHp
Z5N6kXfFBT+EbnbLiUqoRo1/AHC6E6CqI5pdhV86UCFydmuLf/MfwJpXiYRJueqk
DnPYEflq+Zu/RReL5aJlVOVuWq0ZpuzUHk4gIicKESLGkv4eI2CvuB5HTeNAB9L5
laMe+YpoXqgqMae1HT+rupPXYeONPygFXXbNLNVrR7OjAYG2TOaqdUTQkFefFVtD
ungKyPS6LTytSuU/rjWCbQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
sV4ouMb8pmCM3WjLTFxfRVb6qZl8rQ0tYM/AjKz1ufU0UmL7yx/7JMg2InDcYPH3
4PIUQrDLoAMxnnNVMDaDGoGDGI5keUmU1eSGvdJYN7okd0aRvA9LFGw4uDVVyB0K
l7BOk80y15P34R4G6oPvcR8aCxoiMh9UusbhiVjBr6dAfJGVVxZAO1ZJ8pa8fcrA
IbtNks2vut6Oy4oaC7zLCwcbRJM6dSvzcbzBpCf7/b9w6NQNqCBBQkqKgUl0FqKM
QRKqHWuhbqcL9+lj7rvgWCEigLu9ff1+E7C4BV7GzOm5FPcRqfkPaMsjQuM/HErH
swhf2Ra+Tcdk9gdI4AomqwaoD6B2uKsZkcFpZhq4HAle6rOP9eC16DpqsokpqoW9
vb5Mic7ABYVpB4t3o5wOI9D4exXmzv6gpuOyl5rJGL5ORYSEhnMGsKMyPceCGysg
SzwfPWBqRTM2LfBxhW05UEBJev4EXk7AA5sr6GkcX/CXeR47pyXQAyc2doZo7Aoq
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 49015F787433103580E3B66A1707A00E60F2D15B
dir-key-published 2021-11-28 16:32:54
dir-key-expires 2022-02-28 16:32:54
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAxVbS0noZKz1Ei6858RGyyuQgwQUKG4Urrp2BiAzkYxwX+6fURlut
AjeLb4XysqCdNdUipuLRQ2QIy1C220QiCHV6jZAsM4tmEq6TpK6q1lxi5YPKqbGS
CfUQFT1nO4s4DCYSLCwiRNy6bMe8tNHc0MpXP3loCbPkYCoXrEL6vYIROw3oeGWE
KbFPQrzYJAPHgUubBibsY5lkUY9N/5QZw2y1bn+dq9mFOoCIHLd6DkQmySmftnMe
QrpYA2WvE4M5yN2HB8QGT7TdzXPPL6889rFw/mjqYExQPX7cqmILkchsB7I5whjA
u0oodF8Y9ooK9QT0GeK4h3xQhzNG17anuUxbZ7sxzmBwBNmkNyLWEeIntazyjRFr
P2mDY/9YK2JOQKkh3tKl1whcCG9ZtAhKmm/ijG7OrhqtusdGKBXIgALf4f111AK1
gNcacDx2fJzRHuNK8zkIORAzStxKdLbAbBNeLENk1zBjSkrxCOJH4mBpr8TXULq1
ThLI/8OzZq4LAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAo32l4qg46cqP/sAL+oLmQM0mDiQUy6EtNa73vyy0BJEGWJeImUO4
gHNg9pyMFqyF+rP824gAzwX9Un9HaKgFpIrsKcZzg+Yl2vlrBQpJ0NPIkN9oqj27
W/A7RftMhH2itv0v87QudD7FqJpxdYNf3wpr9GvsAiHZMBfC88WhCnmJoDBwyucY
HFH7gzjPeDx37KD57o2M1KC/SRVtQtrccA/WzcxNypgAYkJu4yE2gaDr2WFn3hFv
kscW0jn6+157UuKH0rCNeRFDx8SsSS0nr6Zk/n+dlXzHGDO3vQIKCoRoH9yL4T//
hkMYE/4qc9R49VyXxK+n/qU6HQYpQMi+VwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
KKrOMRAg1bx+XFLRjhQB5OFjtupkqkFnGjS3LZQ5FHNwJ7cKG1X7K0aJNAumRPMD
w9xraIMuuok46wj35P9Tcy68qi3EqIJP5378ZtdK3Ncy9KkSWJSA9MLPmB3fClL/
/5TwboePXRdlt++Bcw9OC83HDuFVBqZArFIvopKf/AJOyViRVHlBmgNKFpm9RJTo
XsD415rJAi79tAfXzKuagke6DTVqobMhxrUmp3RjbEEEC6icQ3YX9X6NOPQ4Gwl2
bpWOVi3/9EGRge0X8IYsqB6/pnEXM2FSOTMdwo4YQzIgW/HLE9hXjFCx7QcPkcos
AZHvl12tKzZF3F9MKPcNyQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
wb40bfNLWyU9pWW+2BAHbrmZZfbs9UEIS/6G66VE6823/r6M90RCmFx1JlwqgmaV
/WMbBE9DxFKILyhuQi6whIKoYndg72VDeZL5BzWctalw24VpJePVjeGLcTdJHBVh
a6UiQFaQdH+bTX6qNIFv9nNwq7ZzJRBvaYF9bK8kaTrZilFKoRVBxXssBUFjEz6t
f+sei5WIiBnzaQOUxdMjvdDAHci4DXwGw1U2M7jcYARo4FfvWkAxzWLxocWmauPM
8tDn0fSgMnLlSOR2crnriQMFhYD+9xyxfOq1IDH2IWCKlejz7j3DHSqBYiUSO9oD
uX6htwbMWwZQeqt+LttE/zZX1Tcv6PJqemT8uabH0s94W2A3sJpstWJ+0capb+Mj
bvTXj7t2ilqa5RX35KKhaQ6wlh4OXZb2ydeJZc7wtyG8eN53aVqJNJQ+WZn4IiTq
fefr2ojy2VDJLDHJVNpKQQzmjXtSs+69wCvrqdHGjGAQl5L31LjZgaNLNj14RI+H
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint D586D18309DED4CD6D57C18FDB97EFA96D330566
dir-key-published 2021-09-06 18:42:41
dir-key-expires 2022-09-06 18:42:41
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAvi5+A+XPw4jxMYhmEI4+MpnaX3dUEbsMGHA+xAMnmVhuxbm3Dn5c
TyhQNY2LOlsieE84UYG+J4dABfaFH4w0l6zUJkuytX4+6WRQontw9puR/IcXkRwM
8Tv/tY675OYRCm9DgDAWfqZM0IgTzSrYRDl8eFPSFCOP0NhMrQZeUrdKgwAXVZWP
xt9nTCwT4K9BMp47LEmZKdEokeVsr0l29Z9v5+r24k9x8EQjDexsoHwlVrxWfarG
1klWssfSFpkMN+FkTQnBC6ByiBh5ZKM5AC/HkVFvuHjehUpfrtNk6XNFcKbDvEIg
qPdg1QWuuSWpZVA+/EwSBtwMNcq9pv60L8Cm9WCJoSC691WByiGwFCy1/XcBI4J/
BkoMEvP3kAxzm92jqGbpFSJawFRPZKy89FDKpha/So3CERQPV0ar+DTpVqDlryWV
N4x1IzpPeSHFj7T74q8qdrxx0wcAjWJ9WYoGQif6FK3hHcmbSGSgyvAFeoYxyUCL
JHkjBCD4WTWVAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA1Hguh3PNTfMd7kLD8NupSdye1KB6hhQitx8DipvT71ZaCZYI8fZ3
z5xa6fCcJXv/xoz1tzKeJ1n4/AzAbc7ltCyyWkj9CbiB99cEe+sVE9R899eFvPP9
DUmsmgy0Bn2MrdfD/N5VeJ219TTtqI75BJMd9n1+r5zUzhji2ihcLWYgi0GVZoec
6B+xfPtYbifCdrPRBwrMAW4EhtMKeJfzsYFO220f7x2OmmZB9muesi5O8/0zjwu1
xOKldXCFbccTfFN88nYmaO8j0SpG9nOveFXavPs0LyVzhuMkbLXSWAN+M/S6GC4L
1kbkjQ6YhuYSnKxGFo/wdax41jrSFCf3qQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2a4uvuN2LUgSuHoWYckJusjzeaEfTTN+DHJdQjJrMueZtxhhz+C+soYoSAvBsHI
huc2y0wLbeNMpLXeyGoYh0M4zm6RyjMksHQZbgPjkibflbUI3csJcvaBMQonfo9B
knoqOzeQd8NioOlnbYQ+k78swGtg2ndHpK4G4NMBK6ZQrbhrIk0nVhOhaIHpGdiN
icr+czGq6SzH4Snp26dJ+J+9SAdTOzgat/C2Othdu122JR2/7GzCnz8dqS3LabN9
iWJWMLxayFKi+Z5f1WjCNOVh5lSjpeLjUNSrA1hXXKSRD0eFOQFRvgvO60gyvooH
C8amqpSD8HqsCK6MvN7V9g==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
uuQhm7YYbqR4/fGSDWqzwiw40nr7y3laCmfiTDHOA5N6lVOw/tM4bdMbGH58wkkK
XBIEz4zQnIT4Sgaumc9PZK3/a8wkx3HgvSNZAEvv5GK2iD8QQNaR0mv7/gbCOLeD
4MAsWH7ehc2u0AcebYehYWE7/fknYRfIGLRzeAeR479LgtFIaaZ54lGeEWKA7qBc
B3njJcNDlekChydxw2JRMw2GmK7Gn/cVRLjFiG32aaTPA37Ietw6Z8wXEjTy4087
KTzTe6puX0g9kCWMaGIBzod+ucNOG9WhgVfy6M+OMddI4KbgizUM7a5c3DZwnQHk
nn5yqib/W7NmHZOL1k2qYlKQlbr412bsDgBDoFYSYPIkbO4x7LHJnGGiwxYx4vmx
caxDySQtqCcR9ygMrZVrL9W/Z+w2N/KCXnL+SgTmN0x/Saor1ZTkONj5Tfn4dg/W
xDxvLO02DpVTfgidUsBeHSnMQn7w0iG0abhWFmYNFDjxZFEWy30mRCEYADC/1NCI
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint ED03BB616EB2F60BEC80151114BB25CEF515B226
dir-key-published 2021-03-29 03:27:58
dir-key-expires 2022-03-29 03:27:58
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA1d6uTRiqdMp4BHBYIHKR6NB599Z1Bqw4TbOVkM2N1aSA4V/L/hKI
nl6m/2LL/UAS+E3NCFX0dhw2+D7r7BTJyfGwz0H2MR6Py5/rCMAnPl20wCjXk2qY
ACQa0rJvIqXobwGnDlvxn4ezsj0IEY/FEb61zHnnPHf6d3uyFR1QT06qEOQyYzML
76f/Lud8MUt+8KzsdnadAPL8okNvcS/nqa2bWbbGhC8S8rtDpPg5BhX2ikXa88RM
QdrrackdppB2ttHlq9+iH3c8Wyp7bvdH8uhv410W7RnIE4P+KIxt3L0gqkxCjjyh
mn9ONcdgNOKe31q2cdW5LOPSIK+I5/VTjYjICza7Euyg03drpoBMGLuuJZY6FXEV
auIBncWe+So8FMxqU/fwo5xm6x085U1MwXUmi4XDYpr/kau6ytPnzzw9J++4W9iC
em5Jp0vaxrDnPdphqT0FWsBAwsZFL7nZRnmUlTgGsXUa0oSM9/MErDwzELh/NwG4
DNyyzRG8iP61AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAsw2ZJlGsmfDmDwoKbzjOno759Xwqn6JX+tFasI8eRjOFnOyjYzd1
XjG6Gj2hVpF/ze2NiTuUyRu3Ybp8G9/gs8VGPljxSHkEugGjQdYFoST02ma0vUHA
8YqpBYOiLvsXnqfEkl3Yj6HVxmVJA9j8BxODODlBtxRMJWFrpp/b+qCo/YyGmCh3
n0qd3QNqFPLIzwvjWVhaFfga8dXBT73wX9uYT7nT/e3pV7ZvTw0caqi7svNzj0I8
/OxOEjoBQEQMQVPT2bNZKBe9X8QKDSgdealZQwBT9wdZ4KndtCj6Y8MVjj15/YtH
fWfNyUHgVqOmfDK7m3pHXR9fGgsLQexIfQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
GyN9MMaPABXJ16WAFIhdzOhNT59BI0RAfV9ZpUJgzkAAmpoj+WwUtWfcrW7a08CT
9g60QwJonP/Nh+8iLvQYH5ZyEqsEj0HEUD/yI2kvN41Y5QBD1Sku8Cu4E2UaICzL
V63oitjQzppKlVXHyP/SXsI2bUjoHLtT2pBvxRJ84DlZBEQ/ZqS38NN/+Z6DtMR/
kn0l7W5yA3bYWzeKy1TeKLWo7p0hHzv/Hswe/eha+27LuwZZwwfSQrRy1fi66Fmj
0xBP+iXXtmNleFegFuhEBPXa+9udrT9rodSdazkGPzjyF6HWRMP5DtmTI6ovJDVX
60UQ0hNb6KAP+FZKPz9/dA==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
zAgmCR7tf0btsogvBmdxJ7+RWjPBzmDSA7f+zlK0jOc3lDDD4pxuQO6iNcoEDYMC
5hkzVoGBMYsxLfLZXFGE518dn79iKr6SQoq87AhnAsIiAfXMk2AWLkWI7MTzZo2U
dcgo+7vzxMObk86vzFxYWrSqp6CSZ7RwBRnH3vCGLfOMZ1lXMug+MQAQYAyl6KIR
3d/uEu3+sPFJcHQFP3C/7bHDG5j/76kwoFzjSjg974rSjr1j1FbrpNn35mLc+2X/
11n7cOADHWaSN3MlLWGsYxuuX2l1w/XZNfFEezDwK3BOotbj5spU2nQ8xbDFPB5+
ixDfc00TC3YbveSz+S8W9czfysJt3KaWmQczDtSIXag1qrL52CBGUVGP6+R7xnpR
/4QD6yCKmDcNk2D1YnindwYC48ydDt/u9A/97cEBpUbul3feW7eKLk79MIklWlWo
3c3aQVH6Ewrb76oXYYwzNbqJOp2ceREu72/Fk/keprVcupVDtVoqHgDDpfOUYTJd
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4
dir-key-published 2021-09-01 00:00:00
dir-key-expires 2022-03-01 00:00:00
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA7cZXvDRxfjDYtr9/9UsQ852+6cmHMr8VVh8GkLwbq3RzqjkULwQ2
R9mFvG4FnqMcMKXi62rYYA3fZL1afhT804cpvyp/D3dPM8QxW88fafFAgIFP4LiD
0JYjnF8cva5qZ0nzlWnMXLb32IXSvsGSE2FRyAV0YN9a6k967LSgCfUnZ+IKMezW
1vhL9YK4QIfsDowgtVsavg63GzGmA7JvZmn77+/J5wKz11vGr7Wttf8XABbH2taX
O9j/KGBOX2OKhoF3mXfZSmUO2dV9NMwtkJ7zD///Ny6sfApWV6kVP4O9TdG3bAsl
+fHCoCKgF/jAAWzh6VckQTOPzQZaH5aMWfXrDlzFWg17MjonI+bBTD2Ex2pHczzJ
bN7coDMRH2SuOXv8wFf27KdUxZ/GcrXSRGzlRLygxqlripUanjVGN2JvrVQVr0kz
pjNjiZl2z8ZyZ5d4zQuBi074JPGgx62xAstP37v1mPw14sIWfLgY16ewYuS5bCxV
lyS28jsPht9VAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA+jzmadukj4Q0qLgJ0at+nDXGruO5JD3HsehobiwO8HrdaaImY+rY
CZzxRWM4xryQ2AFuAGbSxGoNQT3dTLvjKNVdGY6jPzlS7vxKbPeNZtc/YMvfZ+Fx
uEjvaZ6nDbviVtQhtE0J2EZ32n90Ob8YC8l/7zh0hp+mZO6Wf2DGXWjNvG7d8Ucc
p5A1ZVIpJ/VQzdlPaocO+6AvxvSBpaIUF0yGpTwofTOjtUmZyuWbhRndsQj1qMcj
e8wzOIgr3HZyhO9wztQGkZ8bzHq65oZe0IIOXZu0icZamFGQ5I6y5duCqxDDe4C/
v1/6bD1I+/ujLXRMmkcbJ3NZE+KrZg7KIE5ScGbkJIX7vIicqtsf+7VipdOh3/wp
qaDxX9Sp2cbVUU0M/aJ14nDSeFlx0XQAgWkPjG2lYtTNEC2zuudBCuCD8es8EhAW
FrU94cYg9lVId0NDMOpWPMH2QJFS4tk3Hc66si3+gkCOt2GOaSQeD+gGWkdwDzn3
S8iAur2GohFFAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
B4914rKqUc51Q1nq8CrA/e7EaMQ0ug08qlBqWyzZSDiBKVCoQj446ZJMU9VKlzJF
XtuURlJ7zswXMze7HceakrkxZAc7GiAGKO5hgbbI8XGLvXn16Lsr/MP1cmbKoI04
g5tG9Kx6yOB4r/l2TQY9Tw22YcdJ24W2/mw6TmDv0b+IorsIBnxIDv7Q7j25IkNE
hW3F9R+Ntja1RWPqKnptp8nxBt5/2jVr637BFczDv9K509QX+HHKyICA1hnvDDU7
N5Y1/mVu4JwQrBAFL857XbobP4QaLsZ34Q8LRE4dveuyw+vjVa1YimZ6h/RvrYyP
8DUi4XnzFyztecivXbdSTpMTSMfC4NQXFeT+XStRdWlapZyCFhp74w3wv7HCB0z6
7QT1HWMKPRvj1DsHhvPviyLVCL2tl2x+G7aaledOPf6BbhO7VolNeHiubyYCQl2H
t/Vy72DZbQeuLhf5GyqVyUm9uugzvVrryUiNUApOW8Xta2dAEBqinDrrY6iMYxh/
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
UrJN3Ey1hSHTaMUAhINCVFhojt48ppxky0bvwztQ9p/Vy7dfRx0APNbL70/XZOrR
sRj8zxtx2+tc5Lnkfaah63bmVsUNTgD6LudDaffXiV8XhIeVbzS0r/YJ0U1OsbK+
ApDItNDUz+VIJL5JUDjq/6fojFlWPYNIwyk5G8zOM70Atjk6UDyCIihV2u5pofW3
znFaFp/XhC14S8lMPZYKbnyl2iQ7UsqLpTxg3EwivIlSVFs5YQe0yXgJFX0oNd9Z
gAf3JIonA2g8Oo9EkgRfYCI33AwyVoU3QN1/AmLH2uPWTKhMu7k+OHktuIBfyFTR
9jbUq+YTU1ni6kEsJVBP/0I4n9Xb4VYIoqOq0BrcEp3lQ8BCEWjIGwLh1HYc9/DY
meE+cwLp0RNU8cuxyrGnkLA350bsNxrDkiaHAkj5ZA8W9VTGYsBxVhbLdQzN3GOm
63GJBgjdaOsD6WXs/737nD2sLu6dnA/Jbz84ouZSafQO/FNQZnndfj4osjabmq8O
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 27102BC123E7AF1D4741AE047E160C91ADC76B21
dir-key-published 2021-08-21 23:12:45
dir-key-expires 2022-08-21 23:12:45
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAuxgnMVH4vwBjMeGvrEODOYcjbCS4N+Wt0SZ6XA5I08HyMf5AbaaF
MDscJBRIUOp7DyLmUwK+jp+QI8pUjjKsB8S0ctb/J3Im2T6CXnP2KgEfVmpNVQmV
XdMm8cRZl1uIZDDBAXizSQ51f9A17TJh7pF/5khYp/SAzl6aO5ETn7ry0ITiJnNa
6cY+400F7ZBA8NuXnCHVGfmpFFsiJKFrS1Kve629eeaNEd3mynRviBXJy5a4NEGf
y42Ev8on6SxEnF9OG0NMJ081/+mP+j8Dsl3+Uehzr9B42MQQfDo4RdYGrt9XolBm
L4eay1ieZEsFeDy0TMfiGGbr90wo1fgGLHIRSfTNLhhPJ/f9cTZPe98rhSgGWiAd
RvK5SljoIOR4qdS9/aiZkj1P+etvh1rIQUcG4/xCOBnouEBK+DDHZFqyMtpMPtV0
Bxi20DVaMJcyhdfjVqcRSyuR8tlOnTid6QwBj6kgIIfMaC+4Ht6yO/SYquCWlaZl
y7Pu7li8WyW9AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAu1QJ+qlCbtrYsg9QENtOpvMrEDc+WgH1ZFxEqk0v/ad2ACQYe4dT
g1gJ6VZyGths3p8+WQXIA9YbcEr2oajXlLmLT2QAlqlsXMPKwwIpeG4rvR43Wwq5
mQ7aX+/VjZ9YZNoZVEAy1O7ti7GIXJzJYDOdgBjLifSjpjcEmSaf+v4E357azs9R
ndLHRRwbBLdUl7G3aMkL4ejrv6AAXexPxAL90xsb/MAhVEOQrJNcVMTgII0fSf56
P1J17SQwthNZ4rTMo2O9TvWUGNf1sMb9kdm+A2Nwo2CKmUR0uo5wHN4YHSBYFDcb
hxRtZlhSFfBJvJgrX8/+CnJrBFC6S/7vJwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
VzdxGiA6egLcZjm3hHrTW+N+7sPwaEcdYR5/GW757MO79O8QwjOLJSa5dOF5yDWa
3Ie+QDB2Q++a3+w776zqpFsaGCuEHBCfU9pxatKdoTsExZdQnWHJg4u9YD1JcYvL
dZq9uCCWaKa91OjA6/U9zp/LY3tOPUWCyO4MHehHYggzapbcF5uaMG0AT0lZzaXJ
vh180N5YGMfm0eYXJqkJyX3WCZhGroh7o3DyaqtBSJ1cY4NzTNgPoCAi3J/XEoCI
3JzxfH97uyqQngR1yGb5KggdM2ejci3Ld9q99hjXlzYRtsobUQBTlZca2vUk5ALh
vFWU7GzcNIdDjKBUd+IhTQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
WldVJc0L3fByDY9D+Yha2/8Bw5nqRpHu8RL8lU8zXb0rhfiA6DN2aefSCG9WEay1
sTVs4zhS8N0+278oP51Lg7S+V6SmXxKZbF3I2zNaFMIPVspRA3OF0R9vCP1YMxeo
D4EDQXiRxNNeM9hAjmmLiE0j7ZMetZ88ewwsOOXAvPHmCth09nWdCYKwibwUW/U3
w1HXCHK4BdZ7XXkMJNry7kZP/H1/5oYyuKshue4+f8tgRa0xg0wbHDrdbrR1qBBu
Xg9Q11hV29RIdD0ZgugUdyGKlpRa6Mb3GD5DzN845sFhCjsPrYyZv7Xo/S+uTtN4
t59BtF1TjnsAhUk7shk2W3zzaauzUarkDA1v+mb9NZ3CFsNgfxt6d1yDDyuxJgaC
VkIfO9nX9dCORSC9Ow+XOq+D/o4FfSe4q0VvrJJILAcw2Nu1Zg4ZhHBeugP9f4I9
p/+ZMrEr+YAKkjPw+uIEdR0l/YZEhcrjymX4FY829LNll2AceqMCKoapFWuEzzDP
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 0232AF901C31A04EE9848595AF9BB7620D4C5B2E
dir-key-published 2021-08-01 20:00:02
dir-key-expires 2022-08-01 20:00:02
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu9O0Pueesn0+29BlxZs60mBqehjdQtgSnKOm9QZxbQ0xrMQgbFnR
hWbKD8erenyeFk2SF6AJkbyzgYC89hyPW+8GBDmg5bE8fRKjgV/nI3tY2m4rkY3u
zSmYIdwqHUUc98Xzt9PaQ8IJAlDBY4XLKrWmJMxSyhBlVEept7+9Tj23qowW44Mz
xPJZ1aFkB1FpkD6qmoCzVZbhXy3cGt1nDwdJK7KqlaXziz9pFiw8PzTVU2xFgJNy
+nEcT72DBtk3G5K2Riu/aXY/D541Cioj9KMV4Nv4g8aBKx58Xq2tq1pFkc1Bqj1y
2MomVR3iskFzlqC8yKWGVe4OP2IaOhtcQJYp5GR9q+dWnr53WWNVxNu3sA9iMal3
PJUk5pIYrsmArGew5gmlCe+Al46nPINxc7ouztmStAV+2F6SpZlKOcstnT+KJ52O
1xnOSaj/WnzG2o4KZ9UrFQoUNOLQJcelPcC+vrinMk9BQPcB072l9NjpUBC9brsW
qTCMStn1jfDDAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAp7nHn/R+ZZ8lza379M7BJ00JYPAcncjtoa2K2Z75bDoxlegGvZXp
j4D0WhqksaaOr/+YCSPMcs4HAapKE/Dj09p1kjzh6Xu/iVp51NiQAARS5j3tu/5k
WJQ7ig207TdtjmslZIx0UU8pieuenRdyUN0PvjOkaoZIpao1+UlIe47DP+42D3QX
1J2wu48QDvt7hUUA3y7yLUyNMarqYBbbXQ/MpH8tcMT76TTN1uilP6W/3j1b6Fr7
NGtbUrS1EzOOHnCpgpnD8qGcisDKrHcVkNkh1w+8LW9ef7RGpFPpn022hUQG0WLD
5zrh19SAsKetWAZY6RlvyCHPVReajIAovwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
ca3I8mHu2zEOCnzySzdk+rbZLpohw5aa3NmTGFzRUXqOeHClOYHRc+glAyCrtUA3
lEa5fiFaZTImKu0J/uroyR4uF5JpzLOfojTQi9P5hMCBSdd7uGzoKC+/dKb2OngZ
VkBjptMf1S9dy2lUdDksHnnyg8UrV7EolIHUFNdEBI1LeONkdesZ5oQMg3HRlVpU
v+m/7y/MB+o3KAXkQyAxTcV4bKdsHm3Pf0CSfDgOPImwFS4lwyEW0STlOmVHojZR
5wm+5dwt9vbD7K6ectbnWtWjiSrvtGjqixO652lxz1qrsid99S5wEzJNhfif8lYe
VsB9h7YagNHJHLiGeBT1kg==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
ZkHpe8JVvGsiAsH8gw1eZVIIE8WuM+3Sdd37U2tOyDi7FVwJV+oJ+aKwcCTqTLaj
jglQJbg2JdV4ofy49ZaQa6FBGLrzxAS6Gx0jg+28Kzbr0xu9hSX81oPSXKn9KDLr
BvmuSqKBB+5B9nIEBjm6FwPc8MjqlvNesuJ3IpW9+e85eB7qsH4ozjHF0GIgpXu/
qXrk2TEK1nMc9EN+VCYuy3gAm46GHQEYR1U7gIofCYf7LQpDrfj1sAGquCQ3vYqT
Ex3GtqcDV22IME67Cou5rv9OmMnmy1dbeHO4g843RX0LXtEDdGYGSLHzl8EAscrg
i55XFlS6z5OwCbdDvFTkHUWRlaiDtoymaxAEW6GUmNjHhgWY9wJwgroVNRsP8Ihi
aex9HIND1MY4ERS41Csba/0grf+FahMVI12gwpmrnKfF95QHWw2MEvT1pzZGtMnq
XD8mcVNYJtcTvYM/cUa0I4BFD1AyeIP54hEXwIsqHm8KBJpjX/ZpPzksnc4NY8i0
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 23D15D965BC35114467363C165C4F724B64B4F66
dir-key-published 2021-09-18 16:07:20
dir-key-expires 2022-09-18 16:07:20
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAlv6XS+VppPaQzOgor0YFlcXLWeXiMn5N3VBneXuw8maLOu9oPJ9z
2/oMQN8a+VOWTf+/jebGzOBK6MamXpgsIZPQWiT18gZMsYdR8mcqBYqVP3khwUWh
9QYkV+m+Auxa0TLzTrsi6dLDJ384XdpDweU+YJghMJNZ1NqiT8ogj84hxs5Tf+Qf
bn7EBIcU7SAKr5Lw25KrMb5e3AZSC5MilBS/KLgVTq/GiWb7pKd5pxGwlGolNX8a
PccZ2ZT2DrSQsct4wVxhSbUqANI3PfMpXvmUDxWWBgbQwLF02/4gi+13snlHtqwl
y1WjE55HVfx1CTX13SStwmF/N3SFtFf1qil3j5qrHdHtKlAYOaTfqab1eLVH1l83
LI5QWD7ri9GpPqIjlh6PuaHjaO2FW20SouZtS9jJKwi1l1G3ef1tSlha1cxkRxIp
U/ngvQBsoa9X26VfQA4MieZgVVdMVwjCNh2YC9aEXc/KxfcBueZkM1194qP88cVu
dOFYaftOkuGPAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA3OigVlkOvlx54wcY0RRuExNw2sPYHr8m8QP+SnzARDbrubvsKT0S
z/+aVWccgacBtihOpF9juQLHb+nqhea9s6QS8XAQ98bqm8foKToWuxnIRS9c+8e1
qcENTfh6U2Dr8ckwVcKAPtnLnPtbxuFF5UiqXAPA89ZmtqUPv+DfmDr5fdeb0bCu
Lo6TCFLQOcn2Qz1WsSv/2JRkSBy8pgaC01zErgv9oRVIzFfLn8YpfnWZkFiRGwX6
/GBLsS19SLLX0xLkPwQ/CwN6OkipOtYi6UNq0osHw9xfm5sCzcnltJShA1YtIp72
e1HkTx03a43uAKlJBo1rMD29stVJu9ABEwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2YFJIj1zR9iMPWRJYMDEKuLlV0Gbis9232Gog5sS06LpUFPYL6clLDf7eWAimPs
u8rUUP4JEjmAY7bWHyqbG3D5iljNin50W7kvY8ip+Vqf64vjNUXFDKUbi0iGkfVC
nfX67FL0JF74hqtCtMlS5QPvD4oLsC40DdmPD4kCulaSrMlmsFRGFdl60HeSLbeP
oopRA4yYB4ZGJxJUaSuMm6RrcK08G2l7vLfHpxhcJWQVb2fKB7Ds+AogZYnc6ZYF
hpGAP9y+Yn8TUUqPMhhZwLw/8eUAhtv8G2aBBxHyctlGvg1YFiquPP6VEn88h9GZ
X4d/mLOAQeYWEalQC812iw==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
OlLQuEDdagECnVy1Nke/C7dpS8+8XvgLK/hGgV/OpCWr+Gq8bL6/NpK9GP7EbsUI
NxsguJ2r1wkEGTixz88gdKWDCC3evGW1pqnsjkCk69gHGtCxmrFeiCxCSomaOjzw
HCnp3TcT1DA4EstoXUqPysVkBYkx8OBO6rGhvE+G1S4bVG/EJkPCMhjPlxX41ON6
NWvtf32dviA5W1BrYKWJy/v0pCsApgjZa6qpaLdgqQabG5YEJA0rONS1hL+AcJks
CnvkSS7iU/4jrDPfgOLoVxEkH68swLol2Qf0RFHg12EL5kf0xbPnfE84aQyt99an
6VAMVIy/tCxR2efZ0+uQmQk7S35uQH/PxZ3/mq6cDMw7+WZdYbrkyfmFK/A+yL2P
op71Ik0Xf0Qwd0qMhTZMVPZpZDQmxvr0j0r3xHia0Ez+PhovnnxqI9/cThRQ/ceN
jE2cA46H4ZfYn5OdCP+mP9L+MsqJYoHj/SigcIrXUX58R1D0JWVX2KPU+tVyQ03B
-----END SIGNATURE-----

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,39 @@
# Tor state file last generated on 2022-02-04 13:57:02 local time
# Other times below are in UTC
# You *do not* need to edit this file.
CircuitBuildTimeBin 875 1
CircuitBuildTimeBin 1025 1
CircuitBuildTimeBin 1125 1
CircuitBuildTimeBin 1175 1
CircuitBuildTimeBin 1275 1
CircuitBuildTimeBin 1475 1
CircuitBuildTimeBin 1875 1
CircuitBuildTimeBin 1925 1
CircuitBuildTimeBin 2025 1
CircuitBuildTimeBin 2375 1
Dormant 0
Guard in=default rsa_id=D70A5E01EC14D078164D5E587608949F85FD771B nickname=leaders2 sampled_on=2022-01-30T18:34:14 sampled_idx=0 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-02T06:04:33 confirmed_idx=1 pb_circ_attempts=13.000000 pb_circ_successes=10.000000 pb_successful_circuits_closed=10.000000 pb_timeouts=1.000000
Guard in=default rsa_id=598C8E4E92D8D7750991D23F6776EE92EC1A00C1 nickname=Unnamed sampled_on=2022-02-01T01:24:07 sampled_idx=1 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-01-29T15:09:32 confirmed_idx=2
Guard in=default rsa_id=013ABAED8F4CDB677BE0B5212E4B2583B86035EE nickname=b0rken sampled_on=2022-01-27T22:32:07 sampled_idx=2 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-03T10:23:27 confirmed_idx=0
Guard in=default rsa_id=66DFC51E724E38DDCB3AB67DDF4C0BB0F1F49C0B nickname=Seccom04 sampled_on=2022-01-26T06:52:32 sampled_idx=3 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=9400AF52EC2929DA41E6DDD3B684F23643BC316C nickname=BM03 sampled_on=2022-01-30T16:35:42 sampled_idx=4 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=DD0C8EEC5CA402A9FA4478F10C31A440F71F6885 nickname=chaosDelroth sampled_on=2022-01-31T18:30:35 sampled_idx=5 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=6055FE90C18DD4B2593A9D0E02DDC4D68E9BA62E nickname=elects2 sampled_on=2022-01-29T10:24:36 sampled_idx=6 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=79233E8202A0EE755B39BC24BE80939C023B3FCD nickname=m83fr2 sampled_on=2022-02-01T17:58:48 sampled_idx=7 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=C4BDBFD1049EE1D4F6977C42485F94CD5F97BA92 nickname=lenin sampled_on=2022-01-29T15:57:51 sampled_idx=8 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=876C5AC1D2811E650AD4C78B77841C1ACB3B0088 nickname=whoUSicebeer05b sampled_on=2022-01-29T15:26:49 sampled_idx=9 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=FF8B7CAD5F508972509D79F933FB24D2F524AB75 nickname=einNettesRelay sampled_on=2022-02-02T09:24:01 sampled_idx=10 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=BFB14B9ADF1F19E59258CAE7FCDBAAC9937B7B10 nickname=Yggdrasil sampled_on=2022-02-02T13:42:48 sampled_idx=11 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=ACBD72F9395DE8DE293D37CCF7733F1BE23EDA53 nickname=hopUSicebeer7b sampled_on=2022-02-02T18:42:20 sampled_idx=12 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=F79370BA46ADC03CC10866924EE4A3C470BAFE93 nickname=skankhunt42de4 sampled_on=2022-01-25T11:00:17 sampled_idx=13 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=C1939D36649DE98A202429631D8EFC70128D5F5F nickname=rinderwahnRelay10L sampled_on=2022-01-26T01:10:26 sampled_idx=14 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=3BC258C20BBB8094C12DA7CB982B36D1502FAC3C nickname=Assange041us sampled_on=2022-01-31T23:57:37 sampled_idx=15 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=B2242163F681F77F93190663AC5F696ACF76C4FD nickname=torexit42 sampled_on=2022-02-03T12:50:47 sampled_idx=16 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=1F953ACBFB9F44CE38543B7E9C0E0BE1BDC7E941 nickname=bauruine sampled_on=2022-01-24T00:30:24 sampled_idx=17 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=F00C8B7589FEE52BE84387CDB422C1F1386979C0 nickname=JennyRelay sampled_on=2022-01-30T03:59:39 sampled_idx=18 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=CD39C258265B25EAA4ABA4FDCB2DF98104CAA362 nickname=normaray sampled_on=2022-01-30T09:12:11 sampled_idx=19 sampled_by=0.4.5.9 listed=1
LastWritten 2022-02-04 21:57:02
MinutesSinceUserActivity 3
TorVersion Tor 0.4.5.9 (git-d0ed04d50e80fe1c)
TotalBuildTimes 10

View File

@ -0,0 +1,3 @@
SocksPort 9735 OnionTrafficOnly
ControlPort 9736
HashedControlPassword 16:178423CBFA6B25BD608424EE12A1FACF5D36FF43215636A5917F8D64DF

View File

@ -0,0 +1,2 @@
DÍk­HzöĺN(Ăĺ•őŐ`x<>ć—×ë#€ÍěĎ3— c˛2_Ś3‰őťŞRC6~-zSÉĘ?JŽčĐ<>4 fřŔăhŢýüv˝F†8áBü1Q\˛"lHh5í§ <¦‹;$J3č"źúBamT5 <Á4îě•Żcj™ÚŽśËgˇŹÉÂ/<2F>‰vęĽnKÄßVG†Ű~YdŞG ÝrQPÁrôŕ<C3B4>ljěăČ-ZĽy÷_Ľ¸˙˛M·ôÄĽĂ!AX^HR˘¦ç<>őX ;ăŘ©Ô)@2šŔ”tŕÍŁä ý´[cdX®ĹĹ­+ý,0wa}ß%<25><11>
Ď9˘x[ÝČNP]Ĺ5o_M@Ą†™±!©•Ű0:IÄŮóv€ó;ź ÔĂP¨Öe?€˛Śip*‰{<ŐČ—´,RyMnď-‡gËťëĺÉfŹÚV<56>Dá>łĐ;S8őĎ0l¦k "ľÖöĘ1˝żA4ţ<11>vG6î€Uş^"zÓ«H¸´e”S•<53>°u\čč=Ś5ńë¨Ů¤»]aď˝3ąďí©g`î-SŻŢŰ…ý#ăE÷× ¸=Śµ˘W,8­đdŚĚä.˙ Ž҉=şPüÖ•Ąń_<C584>jäĎřĚvyěž,Ľî<˙xokV»`<60>vQ|Ć/©˙ťs˝0şę-tÖ-ßĂ[şa=ý­ôßć<>ŕé÷µ×łëöN­řmďV!qŘŹZ†Т˛Ł Ě˛±saŢSúT ‚ż€”ôîěuDąL<>­-‘Ç"šŇíRşŁŰ<*'ófgߧČM~ŇŚ"sŐ<73>âl/xuĹ<řsÂÄ4÷~Ůf>yś§­NÝ{ľ¨b!Ey 'ˇězęoZ!×<>\"´a(Ýp,PhŔrZ…ŐMµ-…ë+ĐľÇĆą ÉŚťÎĘÝô\}ë~ł?sJL|ú©z˙·°IaXYh/á ą2;vą“u§…ÉĽ<C389>P€(

BIN
integration_test/env/persist/dev/SALT vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,411 @@
dir-key-certificate-version 3
fingerprint 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4
dir-key-published 2021-09-01 00:00:00
dir-key-expires 2022-03-01 00:00:00
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA7cZXvDRxfjDYtr9/9UsQ852+6cmHMr8VVh8GkLwbq3RzqjkULwQ2
R9mFvG4FnqMcMKXi62rYYA3fZL1afhT804cpvyp/D3dPM8QxW88fafFAgIFP4LiD
0JYjnF8cva5qZ0nzlWnMXLb32IXSvsGSE2FRyAV0YN9a6k967LSgCfUnZ+IKMezW
1vhL9YK4QIfsDowgtVsavg63GzGmA7JvZmn77+/J5wKz11vGr7Wttf8XABbH2taX
O9j/KGBOX2OKhoF3mXfZSmUO2dV9NMwtkJ7zD///Ny6sfApWV6kVP4O9TdG3bAsl
+fHCoCKgF/jAAWzh6VckQTOPzQZaH5aMWfXrDlzFWg17MjonI+bBTD2Ex2pHczzJ
bN7coDMRH2SuOXv8wFf27KdUxZ/GcrXSRGzlRLygxqlripUanjVGN2JvrVQVr0kz
pjNjiZl2z8ZyZ5d4zQuBi074JPGgx62xAstP37v1mPw14sIWfLgY16ewYuS5bCxV
lyS28jsPht9VAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA+jzmadukj4Q0qLgJ0at+nDXGruO5JD3HsehobiwO8HrdaaImY+rY
CZzxRWM4xryQ2AFuAGbSxGoNQT3dTLvjKNVdGY6jPzlS7vxKbPeNZtc/YMvfZ+Fx
uEjvaZ6nDbviVtQhtE0J2EZ32n90Ob8YC8l/7zh0hp+mZO6Wf2DGXWjNvG7d8Ucc
p5A1ZVIpJ/VQzdlPaocO+6AvxvSBpaIUF0yGpTwofTOjtUmZyuWbhRndsQj1qMcj
e8wzOIgr3HZyhO9wztQGkZ8bzHq65oZe0IIOXZu0icZamFGQ5I6y5duCqxDDe4C/
v1/6bD1I+/ujLXRMmkcbJ3NZE+KrZg7KIE5ScGbkJIX7vIicqtsf+7VipdOh3/wp
qaDxX9Sp2cbVUU0M/aJ14nDSeFlx0XQAgWkPjG2lYtTNEC2zuudBCuCD8es8EhAW
FrU94cYg9lVId0NDMOpWPMH2QJFS4tk3Hc66si3+gkCOt2GOaSQeD+gGWkdwDzn3
S8iAur2GohFFAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
B4914rKqUc51Q1nq8CrA/e7EaMQ0ug08qlBqWyzZSDiBKVCoQj446ZJMU9VKlzJF
XtuURlJ7zswXMze7HceakrkxZAc7GiAGKO5hgbbI8XGLvXn16Lsr/MP1cmbKoI04
g5tG9Kx6yOB4r/l2TQY9Tw22YcdJ24W2/mw6TmDv0b+IorsIBnxIDv7Q7j25IkNE
hW3F9R+Ntja1RWPqKnptp8nxBt5/2jVr637BFczDv9K509QX+HHKyICA1hnvDDU7
N5Y1/mVu4JwQrBAFL857XbobP4QaLsZ34Q8LRE4dveuyw+vjVa1YimZ6h/RvrYyP
8DUi4XnzFyztecivXbdSTpMTSMfC4NQXFeT+XStRdWlapZyCFhp74w3wv7HCB0z6
7QT1HWMKPRvj1DsHhvPviyLVCL2tl2x+G7aaledOPf6BbhO7VolNeHiubyYCQl2H
t/Vy72DZbQeuLhf5GyqVyUm9uugzvVrryUiNUApOW8Xta2dAEBqinDrrY6iMYxh/
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
UrJN3Ey1hSHTaMUAhINCVFhojt48ppxky0bvwztQ9p/Vy7dfRx0APNbL70/XZOrR
sRj8zxtx2+tc5Lnkfaah63bmVsUNTgD6LudDaffXiV8XhIeVbzS0r/YJ0U1OsbK+
ApDItNDUz+VIJL5JUDjq/6fojFlWPYNIwyk5G8zOM70Atjk6UDyCIihV2u5pofW3
znFaFp/XhC14S8lMPZYKbnyl2iQ7UsqLpTxg3EwivIlSVFs5YQe0yXgJFX0oNd9Z
gAf3JIonA2g8Oo9EkgRfYCI33AwyVoU3QN1/AmLH2uPWTKhMu7k+OHktuIBfyFTR
9jbUq+YTU1ni6kEsJVBP/0I4n9Xb4VYIoqOq0BrcEp3lQ8BCEWjIGwLh1HYc9/DY
meE+cwLp0RNU8cuxyrGnkLA350bsNxrDkiaHAkj5ZA8W9VTGYsBxVhbLdQzN3GOm
63GJBgjdaOsD6WXs/737nD2sLu6dnA/Jbz84ouZSafQO/FNQZnndfj4osjabmq8O
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint D586D18309DED4CD6D57C18FDB97EFA96D330566
dir-key-published 2021-09-06 18:42:41
dir-key-expires 2022-09-06 18:42:41
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAvi5+A+XPw4jxMYhmEI4+MpnaX3dUEbsMGHA+xAMnmVhuxbm3Dn5c
TyhQNY2LOlsieE84UYG+J4dABfaFH4w0l6zUJkuytX4+6WRQontw9puR/IcXkRwM
8Tv/tY675OYRCm9DgDAWfqZM0IgTzSrYRDl8eFPSFCOP0NhMrQZeUrdKgwAXVZWP
xt9nTCwT4K9BMp47LEmZKdEokeVsr0l29Z9v5+r24k9x8EQjDexsoHwlVrxWfarG
1klWssfSFpkMN+FkTQnBC6ByiBh5ZKM5AC/HkVFvuHjehUpfrtNk6XNFcKbDvEIg
qPdg1QWuuSWpZVA+/EwSBtwMNcq9pv60L8Cm9WCJoSC691WByiGwFCy1/XcBI4J/
BkoMEvP3kAxzm92jqGbpFSJawFRPZKy89FDKpha/So3CERQPV0ar+DTpVqDlryWV
N4x1IzpPeSHFj7T74q8qdrxx0wcAjWJ9WYoGQif6FK3hHcmbSGSgyvAFeoYxyUCL
JHkjBCD4WTWVAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA1Hguh3PNTfMd7kLD8NupSdye1KB6hhQitx8DipvT71ZaCZYI8fZ3
z5xa6fCcJXv/xoz1tzKeJ1n4/AzAbc7ltCyyWkj9CbiB99cEe+sVE9R899eFvPP9
DUmsmgy0Bn2MrdfD/N5VeJ219TTtqI75BJMd9n1+r5zUzhji2ihcLWYgi0GVZoec
6B+xfPtYbifCdrPRBwrMAW4EhtMKeJfzsYFO220f7x2OmmZB9muesi5O8/0zjwu1
xOKldXCFbccTfFN88nYmaO8j0SpG9nOveFXavPs0LyVzhuMkbLXSWAN+M/S6GC4L
1kbkjQ6YhuYSnKxGFo/wdax41jrSFCf3qQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2a4uvuN2LUgSuHoWYckJusjzeaEfTTN+DHJdQjJrMueZtxhhz+C+soYoSAvBsHI
huc2y0wLbeNMpLXeyGoYh0M4zm6RyjMksHQZbgPjkibflbUI3csJcvaBMQonfo9B
knoqOzeQd8NioOlnbYQ+k78swGtg2ndHpK4G4NMBK6ZQrbhrIk0nVhOhaIHpGdiN
icr+czGq6SzH4Snp26dJ+J+9SAdTOzgat/C2Othdu122JR2/7GzCnz8dqS3LabN9
iWJWMLxayFKi+Z5f1WjCNOVh5lSjpeLjUNSrA1hXXKSRD0eFOQFRvgvO60gyvooH
C8amqpSD8HqsCK6MvN7V9g==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
uuQhm7YYbqR4/fGSDWqzwiw40nr7y3laCmfiTDHOA5N6lVOw/tM4bdMbGH58wkkK
XBIEz4zQnIT4Sgaumc9PZK3/a8wkx3HgvSNZAEvv5GK2iD8QQNaR0mv7/gbCOLeD
4MAsWH7ehc2u0AcebYehYWE7/fknYRfIGLRzeAeR479LgtFIaaZ54lGeEWKA7qBc
B3njJcNDlekChydxw2JRMw2GmK7Gn/cVRLjFiG32aaTPA37Ietw6Z8wXEjTy4087
KTzTe6puX0g9kCWMaGIBzod+ucNOG9WhgVfy6M+OMddI4KbgizUM7a5c3DZwnQHk
nn5yqib/W7NmHZOL1k2qYlKQlbr412bsDgBDoFYSYPIkbO4x7LHJnGGiwxYx4vmx
caxDySQtqCcR9ygMrZVrL9W/Z+w2N/KCXnL+SgTmN0x/Saor1ZTkONj5Tfn4dg/W
xDxvLO02DpVTfgidUsBeHSnMQn7w0iG0abhWFmYNFDjxZFEWy30mRCEYADC/1NCI
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 49015F787433103580E3B66A1707A00E60F2D15B
dir-key-published 2021-11-28 16:32:54
dir-key-expires 2022-02-28 16:32:54
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAxVbS0noZKz1Ei6858RGyyuQgwQUKG4Urrp2BiAzkYxwX+6fURlut
AjeLb4XysqCdNdUipuLRQ2QIy1C220QiCHV6jZAsM4tmEq6TpK6q1lxi5YPKqbGS
CfUQFT1nO4s4DCYSLCwiRNy6bMe8tNHc0MpXP3loCbPkYCoXrEL6vYIROw3oeGWE
KbFPQrzYJAPHgUubBibsY5lkUY9N/5QZw2y1bn+dq9mFOoCIHLd6DkQmySmftnMe
QrpYA2WvE4M5yN2HB8QGT7TdzXPPL6889rFw/mjqYExQPX7cqmILkchsB7I5whjA
u0oodF8Y9ooK9QT0GeK4h3xQhzNG17anuUxbZ7sxzmBwBNmkNyLWEeIntazyjRFr
P2mDY/9YK2JOQKkh3tKl1whcCG9ZtAhKmm/ijG7OrhqtusdGKBXIgALf4f111AK1
gNcacDx2fJzRHuNK8zkIORAzStxKdLbAbBNeLENk1zBjSkrxCOJH4mBpr8TXULq1
ThLI/8OzZq4LAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAo32l4qg46cqP/sAL+oLmQM0mDiQUy6EtNa73vyy0BJEGWJeImUO4
gHNg9pyMFqyF+rP824gAzwX9Un9HaKgFpIrsKcZzg+Yl2vlrBQpJ0NPIkN9oqj27
W/A7RftMhH2itv0v87QudD7FqJpxdYNf3wpr9GvsAiHZMBfC88WhCnmJoDBwyucY
HFH7gzjPeDx37KD57o2M1KC/SRVtQtrccA/WzcxNypgAYkJu4yE2gaDr2WFn3hFv
kscW0jn6+157UuKH0rCNeRFDx8SsSS0nr6Zk/n+dlXzHGDO3vQIKCoRoH9yL4T//
hkMYE/4qc9R49VyXxK+n/qU6HQYpQMi+VwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
KKrOMRAg1bx+XFLRjhQB5OFjtupkqkFnGjS3LZQ5FHNwJ7cKG1X7K0aJNAumRPMD
w9xraIMuuok46wj35P9Tcy68qi3EqIJP5378ZtdK3Ncy9KkSWJSA9MLPmB3fClL/
/5TwboePXRdlt++Bcw9OC83HDuFVBqZArFIvopKf/AJOyViRVHlBmgNKFpm9RJTo
XsD415rJAi79tAfXzKuagke6DTVqobMhxrUmp3RjbEEEC6icQ3YX9X6NOPQ4Gwl2
bpWOVi3/9EGRge0X8IYsqB6/pnEXM2FSOTMdwo4YQzIgW/HLE9hXjFCx7QcPkcos
AZHvl12tKzZF3F9MKPcNyQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
wb40bfNLWyU9pWW+2BAHbrmZZfbs9UEIS/6G66VE6823/r6M90RCmFx1JlwqgmaV
/WMbBE9DxFKILyhuQi6whIKoYndg72VDeZL5BzWctalw24VpJePVjeGLcTdJHBVh
a6UiQFaQdH+bTX6qNIFv9nNwq7ZzJRBvaYF9bK8kaTrZilFKoRVBxXssBUFjEz6t
f+sei5WIiBnzaQOUxdMjvdDAHci4DXwGw1U2M7jcYARo4FfvWkAxzWLxocWmauPM
8tDn0fSgMnLlSOR2crnriQMFhYD+9xyxfOq1IDH2IWCKlejz7j3DHSqBYiUSO9oD
uX6htwbMWwZQeqt+LttE/zZX1Tcv6PJqemT8uabH0s94W2A3sJpstWJ+0capb+Mj
bvTXj7t2ilqa5RX35KKhaQ6wlh4OXZb2ydeJZc7wtyG8eN53aVqJNJQ+WZn4IiTq
fefr2ojy2VDJLDHJVNpKQQzmjXtSs+69wCvrqdHGjGAQl5L31LjZgaNLNj14RI+H
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 27102BC123E7AF1D4741AE047E160C91ADC76B21
dir-key-published 2021-08-21 23:12:45
dir-key-expires 2022-08-21 23:12:45
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAuxgnMVH4vwBjMeGvrEODOYcjbCS4N+Wt0SZ6XA5I08HyMf5AbaaF
MDscJBRIUOp7DyLmUwK+jp+QI8pUjjKsB8S0ctb/J3Im2T6CXnP2KgEfVmpNVQmV
XdMm8cRZl1uIZDDBAXizSQ51f9A17TJh7pF/5khYp/SAzl6aO5ETn7ry0ITiJnNa
6cY+400F7ZBA8NuXnCHVGfmpFFsiJKFrS1Kve629eeaNEd3mynRviBXJy5a4NEGf
y42Ev8on6SxEnF9OG0NMJ081/+mP+j8Dsl3+Uehzr9B42MQQfDo4RdYGrt9XolBm
L4eay1ieZEsFeDy0TMfiGGbr90wo1fgGLHIRSfTNLhhPJ/f9cTZPe98rhSgGWiAd
RvK5SljoIOR4qdS9/aiZkj1P+etvh1rIQUcG4/xCOBnouEBK+DDHZFqyMtpMPtV0
Bxi20DVaMJcyhdfjVqcRSyuR8tlOnTid6QwBj6kgIIfMaC+4Ht6yO/SYquCWlaZl
y7Pu7li8WyW9AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAu1QJ+qlCbtrYsg9QENtOpvMrEDc+WgH1ZFxEqk0v/ad2ACQYe4dT
g1gJ6VZyGths3p8+WQXIA9YbcEr2oajXlLmLT2QAlqlsXMPKwwIpeG4rvR43Wwq5
mQ7aX+/VjZ9YZNoZVEAy1O7ti7GIXJzJYDOdgBjLifSjpjcEmSaf+v4E357azs9R
ndLHRRwbBLdUl7G3aMkL4ejrv6AAXexPxAL90xsb/MAhVEOQrJNcVMTgII0fSf56
P1J17SQwthNZ4rTMo2O9TvWUGNf1sMb9kdm+A2Nwo2CKmUR0uo5wHN4YHSBYFDcb
hxRtZlhSFfBJvJgrX8/+CnJrBFC6S/7vJwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
VzdxGiA6egLcZjm3hHrTW+N+7sPwaEcdYR5/GW757MO79O8QwjOLJSa5dOF5yDWa
3Ie+QDB2Q++a3+w776zqpFsaGCuEHBCfU9pxatKdoTsExZdQnWHJg4u9YD1JcYvL
dZq9uCCWaKa91OjA6/U9zp/LY3tOPUWCyO4MHehHYggzapbcF5uaMG0AT0lZzaXJ
vh180N5YGMfm0eYXJqkJyX3WCZhGroh7o3DyaqtBSJ1cY4NzTNgPoCAi3J/XEoCI
3JzxfH97uyqQngR1yGb5KggdM2ejci3Ld9q99hjXlzYRtsobUQBTlZca2vUk5ALh
vFWU7GzcNIdDjKBUd+IhTQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
WldVJc0L3fByDY9D+Yha2/8Bw5nqRpHu8RL8lU8zXb0rhfiA6DN2aefSCG9WEay1
sTVs4zhS8N0+278oP51Lg7S+V6SmXxKZbF3I2zNaFMIPVspRA3OF0R9vCP1YMxeo
D4EDQXiRxNNeM9hAjmmLiE0j7ZMetZ88ewwsOOXAvPHmCth09nWdCYKwibwUW/U3
w1HXCHK4BdZ7XXkMJNry7kZP/H1/5oYyuKshue4+f8tgRa0xg0wbHDrdbrR1qBBu
Xg9Q11hV29RIdD0ZgugUdyGKlpRa6Mb3GD5DzN845sFhCjsPrYyZv7Xo/S+uTtN4
t59BtF1TjnsAhUk7shk2W3zzaauzUarkDA1v+mb9NZ3CFsNgfxt6d1yDDyuxJgaC
VkIfO9nX9dCORSC9Ow+XOq+D/o4FfSe4q0VvrJJILAcw2Nu1Zg4ZhHBeugP9f4I9
p/+ZMrEr+YAKkjPw+uIEdR0l/YZEhcrjymX4FY829LNll2AceqMCKoapFWuEzzDP
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint ED03BB616EB2F60BEC80151114BB25CEF515B226
dir-key-published 2021-03-29 03:27:58
dir-key-expires 2022-03-29 03:27:58
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA1d6uTRiqdMp4BHBYIHKR6NB599Z1Bqw4TbOVkM2N1aSA4V/L/hKI
nl6m/2LL/UAS+E3NCFX0dhw2+D7r7BTJyfGwz0H2MR6Py5/rCMAnPl20wCjXk2qY
ACQa0rJvIqXobwGnDlvxn4ezsj0IEY/FEb61zHnnPHf6d3uyFR1QT06qEOQyYzML
76f/Lud8MUt+8KzsdnadAPL8okNvcS/nqa2bWbbGhC8S8rtDpPg5BhX2ikXa88RM
QdrrackdppB2ttHlq9+iH3c8Wyp7bvdH8uhv410W7RnIE4P+KIxt3L0gqkxCjjyh
mn9ONcdgNOKe31q2cdW5LOPSIK+I5/VTjYjICza7Euyg03drpoBMGLuuJZY6FXEV
auIBncWe+So8FMxqU/fwo5xm6x085U1MwXUmi4XDYpr/kau6ytPnzzw9J++4W9iC
em5Jp0vaxrDnPdphqT0FWsBAwsZFL7nZRnmUlTgGsXUa0oSM9/MErDwzELh/NwG4
DNyyzRG8iP61AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAsw2ZJlGsmfDmDwoKbzjOno759Xwqn6JX+tFasI8eRjOFnOyjYzd1
XjG6Gj2hVpF/ze2NiTuUyRu3Ybp8G9/gs8VGPljxSHkEugGjQdYFoST02ma0vUHA
8YqpBYOiLvsXnqfEkl3Yj6HVxmVJA9j8BxODODlBtxRMJWFrpp/b+qCo/YyGmCh3
n0qd3QNqFPLIzwvjWVhaFfga8dXBT73wX9uYT7nT/e3pV7ZvTw0caqi7svNzj0I8
/OxOEjoBQEQMQVPT2bNZKBe9X8QKDSgdealZQwBT9wdZ4KndtCj6Y8MVjj15/YtH
fWfNyUHgVqOmfDK7m3pHXR9fGgsLQexIfQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
GyN9MMaPABXJ16WAFIhdzOhNT59BI0RAfV9ZpUJgzkAAmpoj+WwUtWfcrW7a08CT
9g60QwJonP/Nh+8iLvQYH5ZyEqsEj0HEUD/yI2kvN41Y5QBD1Sku8Cu4E2UaICzL
V63oitjQzppKlVXHyP/SXsI2bUjoHLtT2pBvxRJ84DlZBEQ/ZqS38NN/+Z6DtMR/
kn0l7W5yA3bYWzeKy1TeKLWo7p0hHzv/Hswe/eha+27LuwZZwwfSQrRy1fi66Fmj
0xBP+iXXtmNleFegFuhEBPXa+9udrT9rodSdazkGPzjyF6HWRMP5DtmTI6ovJDVX
60UQ0hNb6KAP+FZKPz9/dA==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
zAgmCR7tf0btsogvBmdxJ7+RWjPBzmDSA7f+zlK0jOc3lDDD4pxuQO6iNcoEDYMC
5hkzVoGBMYsxLfLZXFGE518dn79iKr6SQoq87AhnAsIiAfXMk2AWLkWI7MTzZo2U
dcgo+7vzxMObk86vzFxYWrSqp6CSZ7RwBRnH3vCGLfOMZ1lXMug+MQAQYAyl6KIR
3d/uEu3+sPFJcHQFP3C/7bHDG5j/76kwoFzjSjg974rSjr1j1FbrpNn35mLc+2X/
11n7cOADHWaSN3MlLWGsYxuuX2l1w/XZNfFEezDwK3BOotbj5spU2nQ8xbDFPB5+
ixDfc00TC3YbveSz+S8W9czfysJt3KaWmQczDtSIXag1qrL52CBGUVGP6+R7xnpR
/4QD6yCKmDcNk2D1YnindwYC48ydDt/u9A/97cEBpUbul3feW7eKLk79MIklWlWo
3c3aQVH6Ewrb76oXYYwzNbqJOp2ceREu72/Fk/keprVcupVDtVoqHgDDpfOUYTJd
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 23D15D965BC35114467363C165C4F724B64B4F66
dir-key-published 2021-09-18 16:07:20
dir-key-expires 2022-09-18 16:07:20
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAlv6XS+VppPaQzOgor0YFlcXLWeXiMn5N3VBneXuw8maLOu9oPJ9z
2/oMQN8a+VOWTf+/jebGzOBK6MamXpgsIZPQWiT18gZMsYdR8mcqBYqVP3khwUWh
9QYkV+m+Auxa0TLzTrsi6dLDJ384XdpDweU+YJghMJNZ1NqiT8ogj84hxs5Tf+Qf
bn7EBIcU7SAKr5Lw25KrMb5e3AZSC5MilBS/KLgVTq/GiWb7pKd5pxGwlGolNX8a
PccZ2ZT2DrSQsct4wVxhSbUqANI3PfMpXvmUDxWWBgbQwLF02/4gi+13snlHtqwl
y1WjE55HVfx1CTX13SStwmF/N3SFtFf1qil3j5qrHdHtKlAYOaTfqab1eLVH1l83
LI5QWD7ri9GpPqIjlh6PuaHjaO2FW20SouZtS9jJKwi1l1G3ef1tSlha1cxkRxIp
U/ngvQBsoa9X26VfQA4MieZgVVdMVwjCNh2YC9aEXc/KxfcBueZkM1194qP88cVu
dOFYaftOkuGPAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA3OigVlkOvlx54wcY0RRuExNw2sPYHr8m8QP+SnzARDbrubvsKT0S
z/+aVWccgacBtihOpF9juQLHb+nqhea9s6QS8XAQ98bqm8foKToWuxnIRS9c+8e1
qcENTfh6U2Dr8ckwVcKAPtnLnPtbxuFF5UiqXAPA89ZmtqUPv+DfmDr5fdeb0bCu
Lo6TCFLQOcn2Qz1WsSv/2JRkSBy8pgaC01zErgv9oRVIzFfLn8YpfnWZkFiRGwX6
/GBLsS19SLLX0xLkPwQ/CwN6OkipOtYi6UNq0osHw9xfm5sCzcnltJShA1YtIp72
e1HkTx03a43uAKlJBo1rMD29stVJu9ABEwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2YFJIj1zR9iMPWRJYMDEKuLlV0Gbis9232Gog5sS06LpUFPYL6clLDf7eWAimPs
u8rUUP4JEjmAY7bWHyqbG3D5iljNin50W7kvY8ip+Vqf64vjNUXFDKUbi0iGkfVC
nfX67FL0JF74hqtCtMlS5QPvD4oLsC40DdmPD4kCulaSrMlmsFRGFdl60HeSLbeP
oopRA4yYB4ZGJxJUaSuMm6RrcK08G2l7vLfHpxhcJWQVb2fKB7Ds+AogZYnc6ZYF
hpGAP9y+Yn8TUUqPMhhZwLw/8eUAhtv8G2aBBxHyctlGvg1YFiquPP6VEn88h9GZ
X4d/mLOAQeYWEalQC812iw==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
OlLQuEDdagECnVy1Nke/C7dpS8+8XvgLK/hGgV/OpCWr+Gq8bL6/NpK9GP7EbsUI
NxsguJ2r1wkEGTixz88gdKWDCC3evGW1pqnsjkCk69gHGtCxmrFeiCxCSomaOjzw
HCnp3TcT1DA4EstoXUqPysVkBYkx8OBO6rGhvE+G1S4bVG/EJkPCMhjPlxX41ON6
NWvtf32dviA5W1BrYKWJy/v0pCsApgjZa6qpaLdgqQabG5YEJA0rONS1hL+AcJks
CnvkSS7iU/4jrDPfgOLoVxEkH68swLol2Qf0RFHg12EL5kf0xbPnfE84aQyt99an
6VAMVIy/tCxR2efZ0+uQmQk7S35uQH/PxZ3/mq6cDMw7+WZdYbrkyfmFK/A+yL2P
op71Ik0Xf0Qwd0qMhTZMVPZpZDQmxvr0j0r3xHia0Ez+PhovnnxqI9/cThRQ/ceN
jE2cA46H4ZfYn5OdCP+mP9L+MsqJYoHj/SigcIrXUX58R1D0JWVX2KPU+tVyQ03B
-----END SIGNATURE-----
dir-key-certificate-version 3
dir-address 154.35.175.225:80
fingerprint EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97
dir-key-published 2021-02-08 18:16:07
dir-key-expires 2022-02-08 18:16:07
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAwBmqdD+G0q3smN5OBFHCcK5pQH5G1GIpFJ1JxCVEp92tTK4ZHnot
9RzMfag6zQFqwLaJ+yEb1DOjTdTMfcUTsj5f3GUqPB+U7shSMAvvAAM+Bx/4m1AU
u6sk4XmPB1bCBfcRl4zhnY6XFIbj0ktuBDblcxHz3lDgHFpBoci9sF59mM14MZ09
EdwgeckcU5oeq6ApuSlUVaOT8xsKV/yeK4SKaFfDclwPAJuitQ5CpqctP7ExmlrY
sboTDtz7/Xa6OccaGDEUf7TRlipvUX6rvlmvHm3qjdixVfExpa8E5QG79GZTL82p
1zBd3iqc6QEnRDTiW9cMUeQt4EvrwOUVVYPWo3hp1C/iiNzWraDays2xuhaSB0gj
fPatu2CFW5XB2vd9IvIiWeklSFqnF8DL38jDL7DbFiETJreGsDMR03yHWVd0MbPz
OrvAxG4tJn+JtnwhzlbRjnfk53jOTbiM0vMV8h/ztapCiJeT/6i7nVQ1xL2boeYw
5RDUlwZaQiaXAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEApIIcKBWvD0P2YQtsrFKEF1kprJUCEUlWqzV4mVbTcVdzVQpct8t8
NAO8kDbxRSyU2S6gKecusy4H1MJWVAe2qvKIY974espuJwBXWFgT70jSBTFzjMpB
dAaTTY+kNZa66kjBjCVolr8UfFvL7HaL3CCtWD9ds7+ep76co1h3s3sD2BWW/M5m
V6ML8kYkjRW6SW8YHW6By3G+UuqRiGziJIIwQAoPnNSWrzW6UTLpVRDjdo70bQvU
vvfppUuNNji5SFfzSiakxHIse/eHG/rTNSzOvlpjuZxzPIcekr71eu1hCVHb2QdA
9Ikc5pUQeB0zImI8WJ9OVJDFUEgjJ9LGtQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
cy+VPbSGSJ5aI7egCwgNY6mgSlJumULFmUN8gfahvMo5hUwVLqP1FtoKIO8yBUc0
Y47pt6G5a0fjm6mjapFbU7IpqIUl+5gLBRKD6ugx+hr2IoqIVJY7WQUvVMBnfqHp
Z5N6kXfFBT+EbnbLiUqoRo1/AHC6E6CqI5pdhV86UCFydmuLf/MfwJpXiYRJueqk
DnPYEflq+Zu/RReL5aJlVOVuWq0ZpuzUHk4gIicKESLGkv4eI2CvuB5HTeNAB9L5
laMe+YpoXqgqMae1HT+rupPXYeONPygFXXbNLNVrR7OjAYG2TOaqdUTQkFefFVtD
ungKyPS6LTytSuU/rjWCbQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
sV4ouMb8pmCM3WjLTFxfRVb6qZl8rQ0tYM/AjKz1ufU0UmL7yx/7JMg2InDcYPH3
4PIUQrDLoAMxnnNVMDaDGoGDGI5keUmU1eSGvdJYN7okd0aRvA9LFGw4uDVVyB0K
l7BOk80y15P34R4G6oPvcR8aCxoiMh9UusbhiVjBr6dAfJGVVxZAO1ZJ8pa8fcrA
IbtNks2vut6Oy4oaC7zLCwcbRJM6dSvzcbzBpCf7/b9w6NQNqCBBQkqKgUl0FqKM
QRKqHWuhbqcL9+lj7rvgWCEigLu9ff1+E7C4BV7GzOm5FPcRqfkPaMsjQuM/HErH
swhf2Ra+Tcdk9gdI4AomqwaoD6B2uKsZkcFpZhq4HAle6rOP9eC16DpqsokpqoW9
vb5Mic7ABYVpB4t3o5wOI9D4exXmzv6gpuOyl5rJGL5ORYSEhnMGsKMyPceCGysg
SzwfPWBqRTM2LfBxhW05UEBJev4EXk7AA5sr6GkcX/CXeR47pyXQAyc2doZo7Aoq
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 0232AF901C31A04EE9848595AF9BB7620D4C5B2E
dir-key-published 2021-08-01 20:00:02
dir-key-expires 2022-08-01 20:00:02
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu9O0Pueesn0+29BlxZs60mBqehjdQtgSnKOm9QZxbQ0xrMQgbFnR
hWbKD8erenyeFk2SF6AJkbyzgYC89hyPW+8GBDmg5bE8fRKjgV/nI3tY2m4rkY3u
zSmYIdwqHUUc98Xzt9PaQ8IJAlDBY4XLKrWmJMxSyhBlVEept7+9Tj23qowW44Mz
xPJZ1aFkB1FpkD6qmoCzVZbhXy3cGt1nDwdJK7KqlaXziz9pFiw8PzTVU2xFgJNy
+nEcT72DBtk3G5K2Riu/aXY/D541Cioj9KMV4Nv4g8aBKx58Xq2tq1pFkc1Bqj1y
2MomVR3iskFzlqC8yKWGVe4OP2IaOhtcQJYp5GR9q+dWnr53WWNVxNu3sA9iMal3
PJUk5pIYrsmArGew5gmlCe+Al46nPINxc7ouztmStAV+2F6SpZlKOcstnT+KJ52O
1xnOSaj/WnzG2o4KZ9UrFQoUNOLQJcelPcC+vrinMk9BQPcB072l9NjpUBC9brsW
qTCMStn1jfDDAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAp7nHn/R+ZZ8lza379M7BJ00JYPAcncjtoa2K2Z75bDoxlegGvZXp
j4D0WhqksaaOr/+YCSPMcs4HAapKE/Dj09p1kjzh6Xu/iVp51NiQAARS5j3tu/5k
WJQ7ig207TdtjmslZIx0UU8pieuenRdyUN0PvjOkaoZIpao1+UlIe47DP+42D3QX
1J2wu48QDvt7hUUA3y7yLUyNMarqYBbbXQ/MpH8tcMT76TTN1uilP6W/3j1b6Fr7
NGtbUrS1EzOOHnCpgpnD8qGcisDKrHcVkNkh1w+8LW9ef7RGpFPpn022hUQG0WLD
5zrh19SAsKetWAZY6RlvyCHPVReajIAovwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
ca3I8mHu2zEOCnzySzdk+rbZLpohw5aa3NmTGFzRUXqOeHClOYHRc+glAyCrtUA3
lEa5fiFaZTImKu0J/uroyR4uF5JpzLOfojTQi9P5hMCBSdd7uGzoKC+/dKb2OngZ
VkBjptMf1S9dy2lUdDksHnnyg8UrV7EolIHUFNdEBI1LeONkdesZ5oQMg3HRlVpU
v+m/7y/MB+o3KAXkQyAxTcV4bKdsHm3Pf0CSfDgOPImwFS4lwyEW0STlOmVHojZR
5wm+5dwt9vbD7K6ectbnWtWjiSrvtGjqixO652lxz1qrsid99S5wEzJNhfif8lYe
VsB9h7YagNHJHLiGeBT1kg==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
ZkHpe8JVvGsiAsH8gw1eZVIIE8WuM+3Sdd37U2tOyDi7FVwJV+oJ+aKwcCTqTLaj
jglQJbg2JdV4ofy49ZaQa6FBGLrzxAS6Gx0jg+28Kzbr0xu9hSX81oPSXKn9KDLr
BvmuSqKBB+5B9nIEBjm6FwPc8MjqlvNesuJ3IpW9+e85eB7qsH4ozjHF0GIgpXu/
qXrk2TEK1nMc9EN+VCYuy3gAm46GHQEYR1U7gIofCYf7LQpDrfj1sAGquCQ3vYqT
Ex3GtqcDV22IME67Cou5rv9OmMnmy1dbeHO4g843RX0LXtEDdGYGSLHzl8EAscrg
i55XFlS6z5OwCbdDvFTkHUWRlaiDtoymaxAEW6GUmNjHhgWY9wJwgroVNRsP8Ihi
aex9HIND1MY4ERS41Csba/0grf+FahMVI12gwpmrnKfF95QHWw2MEvT1pzZGtMnq
XD8mcVNYJtcTvYM/cUa0I4BFD1AyeIP54hEXwIsqHm8KBJpjX/ZpPzksnc4NY8i0
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58
dir-key-published 2021-11-09 19:16:37
dir-key-expires 2023-05-09 19:16:37
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu/DOrbv/4IAYvyxsy/6ivC3q5yCQBWLKHZGYKQa5G/3rem8wen0f
qF7y4ye6U6faWc5kcNMHEKMIeBzMErxwF345qoGHITxbbOWnizgwPgrdCwlK3p0H
1XZGU/TTjoaM25P+ZNCBvGmDQRAtgs2odnv+i8hpu6vrcAUZYXmmw/Ag1Ou2AlLC
mPpbjV1O5SMylgC4IuCBPr3iA+M1kKkvj4LmwU6pJxjAae76GLzzQ/Ffvi7rRpvU
2BHetjehk+7/t8izgbhT4VABtzKgrv9ATnhfEgPeT/WBq0E75iciBBAXRPF5kEA4
k++NPy21XpL7jkQ4wnMs2HyiFhHbUwbLcoyQ/JVq/WBboSwStYbkdizRpkhJ1eNg
LiD8CPWcZnhWZi9VWrwT0xl+Mu4v6kwo9kVnXhOfcK8Wni9FqiBu2tmNDoGPG1Ac
wptYQSIoujuLgn4MARREwo9cWrKp2w+D7Dt4U7U5OrXL7TXjonEKuEHwRhzz1JA8
7LXm/wENwn1/AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAuxJxHCGOw9DgNtw4wqi78OE3djdiLwbie+2CevKMRaO14IhuQGVK
w1PYsnTuVLVcJl3Y4QKQ4nnbe1QCiGrLq9wueQy7ZvBeZry3f+QD1Q/PAG19n6/7
hlhXclSOJ/jRah0Gi+QXAycKE5RES/Qn4F5fNE7MxzM0ZQHIlszZLNUrcpeLE9nX
avlqlSqK8FmLPOpOSRrdPtzKP2sjW9UUFVGMfurDYIC51hkZI/nyy8A1C844sfuF
LV6oYpYw5+soA122zBqGqP6vApwFCvWSDcGlx8xj1Irdo+JIDfK8vklu9P11rTWB
R7dZw9pD21reD0pf0Bipzneho6iiL++w+QIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
aMzjdOHri8Kmdoy0qt1a33Y9/e5vKkJQkzCKdHN34Il5FMMCkOrJ1yeQgZyp6mU4
jPSpUZlr1Iq52x5ers4fH4SybvX16BDq+p6+Zel9f5TpFg1vzdpJH1WOJ3ZoES1N
S8CpiXVz8flc5Ez6Dc7uZGSE2fYRl1Pswn3GuLfR1Wjw0VNp1VgHZk6xYXRk/YLx
OyjZTWEWAF/0qw3usXtvTvh6wGniVxr0rg3zZbesLXti4TAn3B3N6VG1TPOizna6
s26edpQ6RQPigAuccEwU5iaIQEGkIxcoe61qnPvAoWP3Jk/sZAGCqhbya0CBCH8U
pEW/OauwlDlr3yXEKh05aQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
XhAoF04YrM2zJUvrQuEsGhU53Pbf1B0jv5F4YkMlRX2y15rKXKI93vQTM1LbnYc0
ETkhSOQB2rpnX0bcE+K+x0sWXiMRtR1HSX/oIPDI9MNqHv75eZlEkSaDJHIsQJlj
Dd++tMHkRc49nNNo2J25J3TiBU0ecpVYYvtJzynE3W8tX3io6EmvTehkj2o79z0A
ax2A5JG65plch0ES2yK2jqgBEmkA/eZENDNQAaERXMFJbbpHIMBaGguwCEieJe77
JBAOxJFRGpL6MhMpcvi5MgEMqfAv3AhlBo93n4apT2CYR8PdCHUZyq7FrgwTSJS7
ndl3YmvxJ7wnyTXitw0GcSVeQaYMQV+LR9Z1VkmjIwRuHliUn7hR79pYqs3t11aQ
muW8jOrx+5QsiTLEPV6Hs0pzXc9XDw7mnJ6M2gxxF8fZCztal3TNLs9+1O22fxME
0VU1oS7SG6T4M1YOXgKFUP20gLl8sZf+3lGp3aLZIK8psR3vzggpaRSUKgip4Lqv
-----END SIGNATURE-----

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,35 @@
# Tor state file last generated on 2022-02-04 13:58:29 local time
# Other times below are in UTC
# You *do not* need to edit this file.
CircuitBuildTimeBin 1075 1
CircuitBuildTimeBin 1175 1
CircuitBuildTimeBin 1325 1
CircuitBuildTimeBin 1675 1
CircuitBuildTimeBin 2125 2
CircuitBuildTimeBin 2175 1
Dormant 0
Guard in=default rsa_id=73283C4DEBC01D3E4A5FD1BB1F2B50D927379F59 nickname=rinderwahnRelay29L sampled_on=2022-01-31T13:54:49 sampled_idx=0 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-01-26T00:18:13 confirmed_idx=2 pb_circ_attempts=7.000000 pb_circ_successes=7.000000 pb_successful_circuits_closed=7.000000
Guard in=default rsa_id=955F15325D6F3E3350EA8A70EB5C49C5BF95C5A0 nickname=XTOMDUS sampled_on=2022-01-31T07:54:08 sampled_idx=1 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-01T08:12:17 confirmed_idx=1
Guard in=default rsa_id=82DA9678A0BAE60087AA68A3E1D6E6A2C4246D6D nickname=Ichotolot63 sampled_on=2022-02-03T05:29:22 sampled_idx=2 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-02T08:46:50 confirmed_idx=0
Guard in=default rsa_id=77A3ADC5D455778B53C2803761916DFB7DA0A790 nickname=redvader sampled_on=2022-02-02T15:23:39 sampled_idx=3 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2096BCFEBB95A1134F39FCF8CEB076FF41A2B48B nickname=freja sampled_on=2022-02-03T19:51:55 sampled_idx=4 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=AE4FAE2EB5DC5D078458F0FCBF2B37F5D73F0868 nickname=sinkrlogin sampled_on=2022-01-24T19:30:40 sampled_idx=5 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=680F212ADE23311C658CC560DAF80DB42FEB85DF nickname=a9 sampled_on=2022-01-28T12:54:55 sampled_idx=6 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=3D5D6178C44537E3692853B344385F6572A55767 nickname=TorZabehlice sampled_on=2022-01-31T02:57:52 sampled_idx=7 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=CEDB8AB22915097A3A14F63F28E1E43F86CBECC0 nickname=knight sampled_on=2022-01-26T09:02:31 sampled_idx=8 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=0B555940D37DC849728841C0B290074E1A1BDCA8 nickname=TORro sampled_on=2022-01-26T04:11:45 sampled_idx=9 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2A6D9EAE2FB319486C5E3BF5CC0F83F06B73CE0F nickname=clicker1 sampled_on=2022-01-28T16:27:29 sampled_idx=10 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=7B3535760987464C8B5686F203B6EBE767C0873E nickname=Hydra69 sampled_on=2022-01-25T23:46:36 sampled_idx=11 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=0F0F690AF1D32C7C3C72C543836625628887BA85 nickname=Hydra57 sampled_on=2022-01-24T15:26:39 sampled_idx=12 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=AC2275831607A95CD8B939C3B8DC466CCF48E2B9 nickname=notsorelay sampled_on=2022-01-25T04:52:58 sampled_idx=13 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=38F732DD349A2E59078434651162A2F4201934A5 nickname=mixminion sampled_on=2022-01-25T18:16:12 sampled_idx=14 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2F844B6701E6C614240214489A99DF607F43C5B0 nickname=3totalrecovery3 sampled_on=2022-01-31T01:50:15 sampled_idx=15 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=EBE718E1A49EE229071702964F8DB1F318075FF8 nickname=fluxe4 sampled_on=2022-01-24T07:17:01 sampled_idx=16 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=8118F4C0E60C84A453ACCD1641F3A7328CBE6280 nickname=wilfong sampled_on=2022-02-01T10:05:37 sampled_idx=17 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2AA5F598F9A1812F01CD99E3B59BB87362ED7438 nickname=setsun sampled_on=2022-02-01T12:40:07 sampled_idx=18 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=CF6A6080091BB210AA3892FEFE2F6A396DA08DF3 nickname=cryzrelay01 sampled_on=2022-02-01T11:05:41 sampled_idx=19 sampled_by=0.4.5.9 listed=1
LastWritten 2022-02-04 21:58:29
MinutesSinceUserActivity 1
TorVersion Tor 0.4.5.9 (git-d0ed04d50e80fe1c)
TotalBuildTimes 7

View File

@ -0,0 +1,3 @@
SocksPort 9982 OnionTrafficOnly
ControlPort 9983
HashedControlPassword 16:D95A03E7895DC6A2605B7AF7E28AB1E24D813742A0E86A2818C7179CE6

Binary file not shown.

View File

@ -0,0 +1,14 @@
@env:clean
Feature: Splash screen displays and then closes
Scenario: splash screen appears
Then I expect the widget 'SplashView' to be present within 1 second
Scenario: splash screen completes
Then I expect the widget 'ProfileManagerView' to be present within 10 seconds
Scenario: first-run of cwtch creates expected files and folders
Given I expect the widget 'ProfileManagerView' to be present within 10 seconds
Then I expect the folder 'integration_test/env/temp' to exist
And I expect the folder 'integration_test/env/temp/dev' to exist
And I expect the file 'integration_test/env/temp/dev/SALT' to exist
And I expect the file 'integration_test/env/temp/dev/ui.globals' to exist
And I expect the folder 'integration_test/env/temp/dev/tor' to exist
And I expect the file 'integration_test/env/temp/dev/tor/torrc' to exist

View File

@ -0,0 +1,49 @@
@env:persist
Feature: Settings pane opens and can save settings persistently
Scenario: Open the Settings pane
Given I tap the 'OpenSettingsView' button
Then I expect the text 'Cwtch Settings' to be present
And I take a screenshot
Scenario: Change every setting (except Language)
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
When I tap the widget that contains the text "Use Light Themes"
#And I choose option 3 from the "DropdownTheme" dropdown
#When I tap the "DropdownTheme" button
#And I tap the first "ddi_mermaid" element
#And I tap the element that contains the text "Mermaid"
#And I tap the element that contains the text "Mermaid" within the "DropdownTheme"
And I tap the widget that contains the text "Block Unknown Contacts"
And I tap the widget that contains the text "Streamer/Presentation Mode"
And I tap the widget that contains the text "Enable Experiments"
And I tap the widget that contains the text "Enable Group Chat"
And I tap the widget that contains the text "Hosting Servers"
And I tap the widget that contains the text "File Sharing"
And I tap the widget that contains the text "Image Previews and Profile Pictures"
And I fill the "DownloadFolderPicker" field with "/this/is/a/test"
And I tap the widget that contains the text "Enable Clickable Links"
Then I expect the switch that contains the text "Use Light Themes" to be checked
And I expect the switch that contains the text "Block Unknown Contacts" to be checked
And I expect the switch that contains the text "Streamer/Presentation Mode" to be checked
And I expect the switch that contains the text "Enable Experiments" to be checked
And I expect the switch that contains the text "Enable Group Chat" to be checked
And I expect the switch that contains the text "Hosting Servers" to be checked
And I expect the switch that contains the text "File Sharing" to be checked
And I expect the switch that contains the text "Image Previews and Profile Pictures" to be checked
And I expect the "DownloadFolderPicker" to be "/this/is/a/test"
And I expect the switch that contains the text "Enable Clickable Links" to be checked
Scenario: When the app is reloaded, settings from the previous scenario have persisted
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
Then I expect the switch that contains the text "Use Light Themes" to be checked
And I expect the switch that contains the text "Block Unknown Contacts" to be checked
And I expect the switch that contains the text "Streamer/Presentation Mode" to be checked
And I expect the switch that contains the text "Enable Experiments" to be checked
And I expect the switch that contains the text "Enable Group Chat" to be checked
And I expect the switch that contains the text "Hosting Servers" to be checked
And I expect the switch that contains the text "File Sharing" to be checked
And I expect the switch that contains the text "Image Previews and Profile Pictures" to be checked
And I expect the "DownloadFolderPicker" to be "/this/is/a/test"
And I expect the switch that contains the text "Enable Clickable Links" to be checked

View File

@ -0,0 +1,11 @@
Feature: Tor initializes correctly
Scenario: Check the Tor version
Given I tap the icon with type "TorIcon"
Then I expect the Tor version to be present
And I expect the string 'Online' to be present within 60 seconds
Scenario: Reset Tor
Given I tap the icon with type "TorIcon"
Then I expect the string 'Online' to be present within 60 seconds
Then I tap the button with text "Reset"
Then I expect the text "Online" to be absent

View File

@ -0,0 +1,7 @@
Feature: Shutdown Cwtch button works correctly
Scenario: Clicking 'Shutdown Cwtch' shuts down Cwtch
Given I tap the button with tooltip 'Shutdown Cwtch'
Then I expect the text 'Shutdown Cwtch?' to be present
#this also kills the testing framework sadly. will have to find a workaround
#And I tap the button that contains the text 'Shutdown Cwtch'
#Then I wait until the widget with type 'ProfileMgrView' is absent

View File

@ -0,0 +1,14 @@
Feature: Global 'language' setting
Scenario: Change the language to French and back
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
Then I expect the text 'Language' to be present
And I expect the text 'Langue' to be absent
When I tap the widget that contains the text "English"
And I tap the widget that contains the text "Frances"
Then I expect the text 'Langue' to be present
And I expect the text 'Language' to be absent
When I tap the widget that contains the text "Français"
And I tap the widget that contains the text "Anglais"
Then I expect the text 'Language' to be present
And I expect the text 'Langue' to be absent

View File

@ -0,0 +1,10 @@
Feature: Global 'Theme' setting
Scenario: Change the theme to Mermaid
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
When I tap the "DropdownTheme" button
And I tap the element that contains the text "Mermaid"
Scenario: Change the theme to Light Mode
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
And I tap the widget that contains the text "Theme"

View File

@ -0,0 +1,20 @@
@env:aliceandbob1
Feature: Block unknown contacts setting
Scenario: Carol adds Alice but Alice doesn't see it because Block Unknowns is enabled
Given I wait until the widget with type 'ProfileMgrView' is present
Given I tap the 'OpenSettingsView' button
When I tap the widget that contains the text "Block Unknown Contacts"
Then I expect the switch that contains the text "Block Unknown Contacts" to be checked
Given I tap the back button
And I wait until the text "Carol" is present
And I tap the button that contains the text "Carol"
And I tap the button with tooltip "Add a new contact or conversation"
When I fill the "txtAddP2P" field with "vbmmsbx3rhndpfz6t3jkrd7m3yu62xzrldxkdgsw4rsehiwuw3tmo7yd"
And I wait for 1 second
And I take a screenshot
And I tap the back button
And I wait until the text "Alice" is present
And I wait until the tooltip "Online" is present
And I tap the button that contains the text "Alice"
And I wait for 20 seconds
Then I expect the text "yxj2pvhozedflp4g7yitpqkeho63maaffi2qgsj3e6s2fbmosuuas2qd" to be absent

View File

@ -0,0 +1,18 @@
@env:aliceandbob1
Feature: Streamer mode
Scenario: All onions disappear when Streamer Mode is enabled
Given I wait until the widget with type 'ProfileMgrView' is present
And I wait until the text "vbmmsbx3rhndpfz6t3jkrd7m3yu62xzrldxkdgsw4rsehiwuw3tmo7yd" is present
And I wait until the text "pjurzypqui3dnpxj6aemk6cqz22yx6zfr5lq4jzu7muwe2yyx2zrnzyd" is present
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
And I tap the widget that contains the text "Streamer/Presentation Mode"
Then I expect the switch that contains the text "Streamer/Presentation Mode" to be checked
When I tap the back button
And I wait until the text "Alice" is present
And I wait until the text "Bob" is present
Then I expect the text "vbmmsbx3rhndpfz6t3jkrd7m3yu62xzrldxkdgsw4rsehiwuw3tmo7yd" to be absent
And I expect the text "pjurzypqui3dnpxj6aemk6cqz22yx6zfr5lq4jzu7muwe2yyx2zrnzyd" to be absent
When I tap the button that contains the text "Alice"
Then I expect the text "vbmmsbx3rhndpfz6t3jkrd7m3yu62xzrldxkdgsw4rsehiwuw3tmo7yd" to be absent
And I expect the text "pjurzypqui3dnpxj6aemk6cqz22yx6zfr5lq4jzu7muwe2yyx2zrnzyd" to be absent

View File

@ -0,0 +1,90 @@
@env:persist
Feature: Basic Profile Management
Scenario: Error on Creating a Profile without a Display Name
Given I wait until the widget with type 'ProfileMgrView' is present
And I tap the button with tooltip "Add new profile"
Then I expect the text 'Display Name' to be present
And I expect the text 'New Password' to be present
And I expect the text 'Please enter a display name' to be absent
Then I tap the "button" widget with label "Add new profile"
And I expect the text 'Please enter a display name' to be present
And I take a screenshot
Scenario: Create Unencrypted Profile
Given I wait until the widget with type 'ProfileMgrView' is present
And I tap the button with tooltip "Add new profile"
Then I expect the text 'Display Name' to be present
And I expect the text 'New Password' to be present
And I take a screenshot
Then I tap the "passwordCheckBox" widget
And I expect the text 'New Password' to be absent
And I take a screenshot
Then I fill the "displayNameFormElement" field with "Alice (Unencrypted)"
Then I tap the "button" widget with label "Add new profile"
And I expect a "ProfileRow" widget with text "Alice (Unencrypted)"
And I take a screenshot
Then I tap the "ProfileRow" widget with label "Alice (Unencrypted)"
And I expect the text "Alice (Unencrypted) » Conversations" to be present
And I take a screenshot
Scenario: Load Unencrypted Profile
Given I wait until the widget with type 'ProfileMgrView' is present
Then I expect a "ProfileRow" widget with text "Alice (Unencrypted)"
Scenario: Create Encrypted Profile
Given I wait until the widget with type 'ProfileMgrView' is present
And I tap the button with tooltip "Add new profile"
Then I expect the text 'Display Name' to be present
And I expect the text 'New Password' to be present
And I take a screenshot
Then I fill the "displayNameFormElement" field with "Alice (Encrypted)"
Then I fill the "passwordFormElement" field with "password1"
Then I fill the "confirmPasswordFormElement" field with "password1"
And I take a screenshot
Then I tap the "button" widget with label "Add new profile"
And I expect a "ProfileRow" widget with text "Alice (Encrypted)"
And I take a screenshot
Then I tap the "ProfileRow" widget with label "Alice (Encrypted)"
And I expect the text 'Alice (Encrypted) » Conversations' to be present
And I take a screenshot
Scenario: Load an Encrypted Profile by Unlocking it with a Password
Given I wait until the widget with type 'ProfileMgrView' is present
Then I expect the text 'Enter a password to view your profiles' to be absent
And I tap the button with tooltip "Unlock encrypted profiles by entering their password."
Then I expect the text 'Enter a password to view your profiles' to be present
When I fill the "unlockPasswordProfileElement" field with "password1"
And I tap the "button" widget with label "Unlock"
Then I expect a "ProfileRow" widget with text "Alice (Encrypted)"
Scenario: Load an Encrypted Profile by Unlocking it with a Password and Change the Name
Given I wait until the widget with type 'ProfileMgrView' is present
Then I expect the text 'Enter a password to view your profiles' to be absent
And I tap the button with tooltip "Unlock encrypted profiles by entering their password."
Then I expect the text 'Enter a password to view your profiles' to be present
When I fill the "unlockPasswordProfileElement" field with "password1"
And I tap the "button" widget with label "Unlock"
Then I expect a "ProfileRow" widget with text "Alice (Encrypted)"
When I tap the "IconButton" widget with tooltip "Edit Profile Alice (Encrypted)"
Then I expect the text 'Display Name' to be present
Then I fill the "displayNameFormElement" field with "Carol (Encrypted)"
And I tap the "button" widget with label "Save Profile"
And I wait until the widget with type 'ProfileMgrView' is present
Then I expect a "ProfileRow" widget with text "Carol (Encrypted)"
Scenario: Delete an Encrypted Profile
Given I wait until the widget with type 'ProfileMgrView' is present
Then I expect the text 'Enter a password to view your profiles' to be absent
And I tap the button with tooltip "Unlock encrypted profiles by entering their password."
Then I expect the text 'Enter a password to view your profiles' to be present
When I fill the "unlockPasswordProfileElement" field with "password1"
And I tap the "button" widget with label "Unlock"
Then I expect a "ProfileRow" widget with text "Carol (Encrypted)"
And I take a screenshot
When I tap the "IconButton" widget with tooltip "Edit Profile Carol (Encrypted)"
Then I expect the text 'Display Name' to be present
When I tap the button that contains the text "Delete"
Then I expect the text "Really Delete Profile" to be present
When I tap the "button" widget with label "Really Delete Profile"
And I wait until the widget with type 'ProfileMgrView' is present
Then I expect a "ProfileRow" widget with text "Carol (Encrypted)" to be absent

View File

@ -0,0 +1,31 @@
@env:aliceandbob1
Feature: Sending and receiving chat messages
Background:
Given I wait until the widget with type "ProfileRow" is present
And I wait for 4 seconds
Given I tap the button that contains the text "Alice"
And I tap the button that contains the text "Bob"
And I wait until the text "Contact is offline, messages can't be delivered right now" is absent
#And I wait for 6 seconds
When I fill the "txtCompose" field with "hello! this is a test!"
And I tap the "btnSend" button
Then I expect a "MessageBubble" widget with text "hello! this is a test!\u202F" to be present within 5 seconds
#Then I expect the text "hello! this is a test!" to be present
And I tap the back button
And I tap the back button
Scenario: Bob receives the message from Alice
Given I tap the button that contains the text "Bob"
And I tap the button that contains the text "Alice"
Then I expect a "MessageBubble" widget with text "hello! this is a test!\u202F" to be present within 5 seconds
Scenario: Bob replies to a message from Alice
Given I tap the button that contains the text "Bob"
And I tap the button that contains the text "Alice"
#When I swipe right by 15 pixels on the element that contains the text "hello! this is a test!\u202F"
#When I swipe right by 15 pixels on the widget of type "MessageBubble" with text "hello! this is a test!\u202F"
And I tap the button with tooltip "Reply to this message"
And I fill the "txtCompose" field with "yay the test worked"
And I tap the "btnSend" button
Then I expect to see the message "yay the test worked\u202F" replying to "hello! this is a test!" within 5 seconds
And I take a screenshot

Some files were not shown because too many files have changed in this diff Show More