tor-commits
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
March 2019
- 20 participants
- 3265 discussions
commit 9c9388dbd3b1b8f96007c29f3e6d6ac270670b08
Author: Antonela <hola(a)antonela.me>
Date: Tue Mar 26 16:59:15 2019 -0300
Fix UI label typo
---
assets/static/images/tb85/TB8.svg | 179 ++++++++++++++++++++++++++++++++++
assets/static/images/tb85/tb85.png | Bin 46123 -> 58564 bytes
assets/static/images/tb85/tb85(a)2x.png | Bin 107230 -> 147986 bytes
3 files changed, 179 insertions(+)
diff --git a/assets/static/images/tb85/TB8.svg b/assets/static/images/tb85/TB8.svg
new file mode 100644
index 0000000..f4205b4
--- /dev/null
+++ b/assets/static/images/tb85/TB8.svg
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="1000px" height="312px" viewBox="0 0 1000 312" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 53.1 (72631) - https://sketchapp.com -->
+ <title>TB8</title>
+ <desc>Created with Sketch.</desc>
+ <defs>
+ <rect id="path-1" x="0" y="0" width="1000" height="236"></rect>
+ <path d="M0,4.99884334 C0,2.2380584 2.2412813,0 4.99563986,0 L995.00436,0 C997.763376,0 1000,2.23688538 1000,4.99884334 L1000,39 L0,39 L0,4.99884334 Z" id="path-3"></path>
+ <linearGradient x1="50%" y1="100%" x2="50%" y2="0%" id="linearGradient-4">
+ <stop stop-color="#420C5D" offset="0%"></stop>
+ <stop stop-color="#951AD1" offset="100%"></stop>
+ </linearGradient>
+ <linearGradient x1="50%" y1="100%" x2="50%" y2="0%" id="linearGradient-5">
+ <stop stop-color="#420C5D" offset="0%"></stop>
+ <stop stop-color="#951AD1" offset="100%"></stop>
+ </linearGradient>
+ <path d="M0.78125,0.90625 C4.76805554,0.90625 8,4.12420336 8,8.09375 C8,12.0632966 4.76805554,15.28125 0.78125,15.28125 L0.78125,0.90625 Z" id="path-6"></path>
+ <filter x="-581.8%" y="-236.5%" width="1042.0%" height="573.0%" filterUnits="objectBoundingBox" id="filter-7">
+ <feOffset dx="-8" dy="0" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
+ <feGaussianBlur stdDeviation="10" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
+ <feColorMatrix values="0 0 0 0 0.250980392 0 0 0 0 0.250980392 0 0 0 0 0.250980392 0 0 0 0.2 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
+ </filter>
+ </defs>
+ <g id="Landings" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="Download-Desktop---review" transform="translate(-220.000000, -670.000000)">
+ <g id="Hero">
+ <g id="TB8" transform="translate(220.000000, 670.000000)">
+ <g id="Group-4" transform="translate(0.000000, 76.000000)">
+ <mask id="mask-2" fill="white">
+ <use xlink:href="#path-1"></use>
+ </mask>
+ <use id="Rectangle" fill="#401753" fill-rule="nonzero" xlink:href="#path-1"></use>
+ <g id="Group-5" opacity="0.06" mask="url(#mask-2)">
+ <g transform="translate(-158.000000, -66.000000)">
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="206.5" cy="201.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="206.5" cy="201.5" r="50.3411215"></circle>
+ <circle id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" cx="207.121495" cy="202.121495" r="34.8037383"></circle>
+ <circle id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" cx="206.5" cy="201.5" r="19.2663551"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="424.5" cy="339.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="424.5" cy="339.5" r="50.3411215"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="551.5" cy="66.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="551.5" cy="66.5" r="50.3411215"></circle>
+ <circle id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" cx="552.121495" cy="67.1214953" r="34.8037383"></circle>
+ <circle id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" cx="551.5" cy="66.5" r="19.2663551"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="983.5" cy="339.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="983.5" cy="339.5" r="50.3411215"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="1109.5" cy="66.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="1109.5" cy="66.5" r="50.3411215"></circle>
+ <circle id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" cx="1110.1215" cy="67.1214953" r="34.8037383"></circle>
+ <circle id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" cx="1109.5" cy="66.5" r="19.2663551"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="768.5" cy="201.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="768.5" cy="201.5" r="50.3411215"></circle>
+ <circle id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" cx="769.121495" cy="202.121495" r="34.8037383"></circle>
+ <circle id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" cx="768.5" cy="201.5" r="19.2663551"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="704.5" cy="339.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="704.5" cy="339.5" r="50.3411215"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="831.5" cy="66.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="831.5" cy="66.5" r="50.3411215"></circle>
+ <circle id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" cx="832.121495" cy="67.1214953" r="34.8037383"></circle>
+ <circle id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" cx="831.5" cy="66.5" r="19.2663551"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="1049.5" cy="201.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="1049.5" cy="201.5" r="50.3411215"></circle>
+ <circle id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" cx="1050.1215" cy="202.121495" r="34.8037383"></circle>
+ <circle id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" cx="1049.5" cy="201.5" r="19.2663551"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="145.5" cy="339.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="145.5" cy="339.5" r="50.3411215"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="269.5" cy="66.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="269.5" cy="66.5" r="50.3411215"></circle>
+ <circle id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" cx="270.121495" cy="67.1214953" r="34.8037383"></circle>
+ <circle id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" cx="269.5" cy="66.5" r="19.2663551"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="486.5" cy="201.5" r="66.5"></circle>
+ <circle id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" cx="486.5" cy="201.5" r="50.3411215"></circle>
+ <circle id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" cx="487.121495" cy="202.121495" r="34.8037383"></circle>
+ <circle id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" cx="486.5" cy="201.5" r="19.2663551"></circle>
+ <path d="M564.5,406 C601.226936,406 631,376.226936 631,339.5 C631,302.773064 601.226936,273 564.5,273 C527.773064,273 498,302.773064 498,339.5 C498,376.226936 527.773064,406 564.5,406 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1,7"></path>
+ <path d="M564.5,389.841121 C592.302634,389.841121 614.841121,367.302634 614.841121,339.5 C614.841121,311.697366 592.302634,289.158879 564.5,289.158879 C536.697366,289.158879 514.158879,311.697366 514.158879,339.5 C514.158879,367.302634 536.697366,389.841121 564.5,389.841121 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1,7"></path>
+ <path d="M691.5,133 C728.226936,133 758,103.226936 758,66.5 C758,29.7730641 728.226936,0 691.5,0 C654.773064,0 625,29.7730641 625,66.5 C625,103.226936 654.773064,133 691.5,133 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="6,10"></path>
+ <path d="M691.5,116.841121 C719.302634,116.841121 741.841121,94.3026337 741.841121,66.5 C741.841121,38.6973663 719.302634,16.1588785 691.5,16.1588785 C663.697366,16.1588785 641.158879,38.6973663 641.158879,66.5 C641.158879,94.3026337 663.697366,116.841121 691.5,116.841121 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="6,10"></path>
+ <path d="M692.121495,101.925234 C711.343069,101.925234 726.925234,86.3430692 726.925234,67.1214953 C726.925234,47.8999214 711.343069,32.317757 692.121495,32.317757 C672.899921,32.317757 657.317757,47.8999214 657.317757,67.1214953 C657.317757,86.3430692 672.899921,101.925234 692.121495,101.925234 Z" id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="6,10"></path>
+ <path d="M691.5,85.7663551 C702.140514,85.7663551 710.766355,77.1405141 710.766355,66.5 C710.766355,55.8594859 702.140514,47.2336449 691.5,47.2336449 C680.859486,47.2336449 672.233645,55.8594859 672.233645,66.5 C672.233645,77.1405141 680.859486,85.7663551 691.5,85.7663551 Z" id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="6,10"></path>
+ <path d="M125.5,134 C162.226936,134 192,104.226936 192,67.5 C192,30.7730641 162.226936,1 125.5,1 C88.7730641,1 59,30.7730641 59,67.5 C59,104.226936 88.7730641,134 125.5,134 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1,7"></path>
+ <path d="M125.5,117.841121 C153.302634,117.841121 175.841121,95.3026337 175.841121,67.5 C175.841121,39.6973663 153.302634,17.1588785 125.5,17.1588785 C97.6973663,17.1588785 75.1588785,39.6973663 75.1588785,67.5 C75.1588785,95.3026337 97.6973663,117.841121 125.5,117.841121 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1,7"></path>
+ <path d="M126.121495,102.925234 C145.343069,102.925234 160.925234,87.3430692 160.925234,68.1214953 C160.925234,48.8999214 145.343069,33.317757 126.121495,33.317757 C106.899921,33.317757 91.317757,48.8999214 91.317757,68.1214953 C91.317757,87.3430692 106.899921,102.925234 126.121495,102.925234 Z" id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1,7"></path>
+ <path d="M1123.5,406 C1160.22694,406 1190,376.226936 1190,339.5 C1190,302.773064 1160.22694,273 1123.5,273 C1086.77306,273 1057,302.773064 1057,339.5 C1057,376.226936 1086.77306,406 1123.5,406 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="6,10"></path>
+ <path d="M1123.5,389.841121 C1151.30263,389.841121 1173.84112,367.302634 1173.84112,339.5 C1173.84112,311.697366 1151.30263,289.158879 1123.5,289.158879 C1095.69737,289.158879 1073.15888,311.697366 1073.15888,339.5 C1073.15888,367.302634 1095.69737,389.841121 1123.5,389.841121 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="6,10"></path>
+ <path d="M843.5,406 C880.226936,406 910,376.226936 910,339.5 C910,302.773064 880.226936,273 843.5,273 C806.773064,273 777,302.773064 777,339.5 C777,376.226936 806.773064,406 843.5,406 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,10"></path>
+ <path d="M843.5,389.841121 C871.302634,389.841121 893.841121,367.302634 893.841121,339.5 C893.841121,311.697366 871.302634,289.158879 843.5,289.158879 C815.697366,289.158879 793.158879,311.697366 793.158879,339.5 C793.158879,367.302634 815.697366,389.841121 843.5,389.841121 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,10"></path>
+ <path d="M970.5,133 C1007.22694,133 1037,103.226936 1037,66.5 C1037,29.7730641 1007.22694,0 970.5,0 C933.773064,0 904,29.7730641 904,66.5 C904,103.226936 933.773064,133 970.5,133 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,7"></path>
+ <path d="M970.5,116.841121 C998.302634,116.841121 1020.84112,94.3026337 1020.84112,66.5 C1020.84112,38.6973663 998.302634,16.1588785 970.5,16.1588785 C942.697366,16.1588785 920.158879,38.6973663 920.158879,66.5 C920.158879,94.3026337 942.697366,116.841121 970.5,116.841121 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,7"></path>
+ <path d="M971.121495,101.925234 C990.343069,101.925234 1005.92523,86.3430692 1005.92523,67.1214953 C1005.92523,47.8999214 990.343069,32.317757 971.121495,32.317757 C951.899921,32.317757 936.317757,47.8999214 936.317757,67.1214953 C936.317757,86.3430692 951.899921,101.925234 971.121495,101.925234 Z" id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,7"></path>
+ <path d="M970.5,85.7663551 C981.140514,85.7663551 989.766355,77.1405141 989.766355,66.5 C989.766355,55.8594859 981.140514,47.2336449 970.5,47.2336449 C959.859486,47.2336449 951.233645,55.8594859 951.233645,66.5 C951.233645,77.1405141 959.859486,85.7663551 970.5,85.7663551 Z" id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,7"></path>
+ <path d="M346.5,268 C383.226936,268 413,238.226936 413,201.5 C413,164.773064 383.226936,135 346.5,135 C309.773064,135 280,164.773064 280,201.5 C280,238.226936 309.773064,268 346.5,268 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1,7"></path>
+ <path d="M346.5,251.841121 C374.302634,251.841121 396.841121,229.302634 396.841121,201.5 C396.841121,173.697366 374.302634,151.158879 346.5,151.158879 C318.697366,151.158879 296.158879,173.697366 296.158879,201.5 C296.158879,229.302634 318.697366,251.841121 346.5,251.841121 Z" id="Oval" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1,7"></path>
+ <path d="M347.121495,236.925234 C366.343069,236.925234 381.925234,221.343069 381.925234,202.121495 C381.925234,182.899921 366.343069,167.317757 347.121495,167.317757 C327.899921,167.317757 312.317757,182.899921 312.317757,202.121495 C312.317757,221.343069 327.899921,236.925234 347.121495,236.925234 Z" id="Oval-Copy" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1,7"></path>
+ <path d="M346.5,220.766355 C357.140514,220.766355 365.766355,212.140514 365.766355,201.5 C365.766355,190.859486 357.140514,182.233645 346.5,182.233645 C335.859486,182.233645 327.233645,190.859486 327.233645,201.5 C327.233645,212.140514 335.859486,220.766355 346.5,220.766355 Z" id="Oval-Copy-2" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1,7"></path>
+ <path d="M1123,135 L1258,135 C1258,172.279221 1227.77922,202.5 1190.5,202.5 C1153.22078,202.5 1123,172.279221 1123,135 Z" id="Combined-Shape-Copy-6" stroke="none" fill-opacity="0.2" fill="#FFFFFF" fill-rule="evenodd"></path>
+ <path d="M1123,202.5 L1258,202.5 C1258,239.779221 1227.77922,270 1190.5,270 C1153.22078,270 1123,239.779221 1123,202.5 Z" id="Combined-Shape-Copy-7" stroke="#FFFFFF" stroke-width="1" fill="#FFFFFF" fill-rule="evenodd"></path>
+ <path d="M217,273 L352,273 C352,310.279221 321.779221,340.5 284.5,340.5 C247.220779,340.5 217,310.279221 217,273 Z" id="Combined-Shape-Copy-6" stroke="none" fill-opacity="0.2" fill="#FFFFFF" fill-rule="evenodd"></path>
+ <path d="M342,0 L477,0 C477,37.2792206 446.779221,67.5 409.5,67.5 C372.220779,67.5 342,37.2792206 342,0 Z" id="Combined-Shape-Copy-6" stroke="#FFFFFF" stroke-width="1" fill="#FFFFFF" fill-rule="evenodd"></path>
+ <path d="M342,70 L477,70 C477,107.279221 446.779221,137.5 409.5,137.5 C372.220779,137.5 342,107.279221 342,70 Z" id="Combined-Shape-Copy-7" stroke="none" fill-opacity="0.2" fill="#FFFFFF" fill-rule="evenodd"></path>
+ <path d="M842,127 L977,127 C977,164.279221 946.779221,194.5 909.5,194.5 C872.220779,194.5 842,164.279221 842,127 Z" id="Combined-Shape-Copy-2" stroke="#FFFFFF" stroke-width="1" fill="#FFFFFF" fill-rule="evenodd" transform="translate(909.500000, 160.750000) scale(1, -1) translate(-909.500000, -160.750000) "></path>
+ <path d="M842,197.5 L977,197.5 C977,234.779221 946.779221,265 909.5,265 C872.220779,265 842,234.779221 842,197.5 Z" id="Combined-Shape-Copy-3" stroke="none" fill-opacity="0.2" fill="#FFFFFF" fill-rule="evenodd" transform="translate(909.500000, 231.250000) scale(1, -1) translate(-909.500000, -231.250000) "></path>
+ <path d="M525.556061,168.75 L659.165152,168.75 C659.165152,206.029221 629.255738,236.25 592.360606,236.25 C555.465474,236.25 525.556061,206.029221 525.556061,168.75 Z" id="Combined-Shape-Copy-4" stroke="none" fill-opacity="0.2" fill="#FFFFFF" fill-rule="evenodd" transform="translate(592.360606, 202.500000) scale(-1, -1) rotate(90.000000) translate(-592.360606, -202.500000) "></path>
+ <path d="M595.834848,168.75 L729.443939,168.75 C729.443939,206.029221 699.534526,236.25 662.639394,236.25 C625.744262,236.25 595.834848,206.029221 595.834848,168.75 Z" id="Combined-Shape-Copy-5" stroke="#FFFFFF" stroke-width="1" fill="#FFFFFF" fill-rule="evenodd" transform="translate(662.639394, 202.500000) scale(-1, -1) rotate(90.000000) translate(-662.639394, -202.500000) "></path>
+ </g>
+ </g>
+ </g>
+ <g id="Browser/about:tor">
+ <g id="Browser-Navigation-Bar">
+ <g id="WIndow-Frame" fill="#DEDEDE">
+ <g id="Window-Frame">
+ <use xlink:href="#path-3"></use>
+ <path stroke="#B2B2B2" stroke-width="1" d="M0.5,38.5 L999.5,38.5 L999.5,4.99884334 C999.5,2.51337929 997.487585,0.5 995.00436,0.5 L4.99563986,0.5 C2.51581493,0.5 0.5,2.51580952 0.5,4.99884334 L0.5,38.5 Z" stroke-linejoin="square"></path>
+ </g>
+ </g>
+ <g id="Toolbar+Tab" fill="#F2F2F2" stroke="#B2B2B2">
+ <path d="M0.5,38.5 L0.5,75.5 L999.5,75.5 L999.5,38.5 L328.110432,38.5 L328.110432,1.00125757 C328.110432,0.722868895 327.887049,0.5 327.603235,0.5 L86.0070341,0.5 C85.7272646,0.5 85.4999552,0.726364786 85.5,1.00117603 L85.5061154,38.5 L0.5,38.5 Z"></path>
+ </g>
+ <g id="Navigation-Icons" transform="translate(11.000000, 50.000000)">
+ <path d="M1.32755237,7.97898471 L6.76592135,13.2975292 C7.1626259,13.6854931 7.80680906,13.6861402 8.19396269,13.3094647 L8.22802757,13.2763218 C8.62000848,12.8949496 8.61380407,12.2705868 8.2219152,11.8893042 L4.22442067,8 L13.4916192,8 C14.0458358,8 14.4951172,7.55613518 14.4951172,7 L14.4951172,7 C14.4951172,6.44771525 14.0537982,6 13.4916192,6 L4.22442067,6 L8.2219152,2.11069582 C8.61727187,1.72603929 8.61518119,1.10035374 8.22802757,0.723678248 L8.19396269,0.690535315 C7.80198178,0.309163191 7.17044428,0.305789709 6.76592135,0.700018913 L1.32755237,6 L1.32755237,6.04528809 L1.05600758,6.30948364 C0.657148233,6.69754804 0.648235506,7.31805325 1.05600758,7.71478916 L1.32755237,7.97898471 Z" id="Back" fill="#6D6D6D"></path>
+ <path d="M29.1189627,7.98430647 L34.5573317,13.302851 C34.9540362,13.6908149 35.5982194,13.6914619 35.985373,13.3147864 L36.0194379,13.2816435 C36.4114188,12.9002714 36.4052144,12.2759085 36.0133255,11.8946259 L32.015831,8.00532176 L41.284303,8.00532176 C41.8385958,8.00532176 42.2879389,7.56145693 42.2879389,7.00532176 L42.2879389,7.00532176 C42.2879389,6.45303701 41.8465592,6.00532176 41.284303,6.00532176 L32.015831,6.00532176 L36.0133255,2.11601758 C36.4086822,1.73136105 36.4065915,1.10567549 36.0194379,0.729000004 L35.985373,0.695857072 C35.5933921,0.314484948 34.9618546,0.311111466 34.5573317,0.705340669 L29.1189627,6.00532176 L29.1189627,6.05060984 L28.8474179,6.31480539 C28.4485585,6.7028698 28.4396458,7.32337501 28.8474179,7.72011092 L29.1189627,7.98430647 Z" id="Forward-Inactive" fill="#D7D7D7" transform="translate(35.416430, 7.002661) rotate(-180.000000) translate(-35.416430, -7.002661) "></path>
+ <g id="refresh-16" opacity="0.600000024" transform="translate(55.000000, 0.000000)" fill="#000000" fill-rule="nonzero">
+ <path d="M15,0 C14.4477153,0 14,0.44771525 14,1 L14,3.418 C12.2656045,0.514310998 8.70209555,-0.732515434 5.53572911,0.456459347 C2.36936266,1.64543413 0.507243887,4.92959094 1.11270734,8.25719541 C1.71817079,11.5847999 4.61776243,14.0025552 8,14 C9.85757574,14.0052268 11.6400293,13.267039 12.95,11.95 C13.3289722,11.5576211 13.3235524,10.9339152 12.9378186,10.5481814 C12.5520848,10.1624476 11.9283789,10.1570278 11.536,10.536 C9.99125715,12.1095317 7.60041508,12.4905288 5.64309951,11.4750741 C3.68578394,10.4596193 2.62049313,8.28558162 3.01739169,6.11654864 C3.41429024,3.94751567 5.18040527,2.29158019 7.37047725,2.03503148 C9.56054922,1.77848276 11.6615571,2.98141695 12.549,5 L10,5 C9.44771525,5 9,5.44771525 9,6 C9,6.55228475 9.44771525,7 10,7 L15,7 C15.5522847,7 16,6.55228475 16,6 L16,1 C16,0.44771525 15.5522847,0 15,0 Z" id="Shape"></path>
+ </g>
+ </g>
+ <g id="Address-Bar" transform="translate(93.000000, 43.000000)">
+ <path d="M0.5,2.99649048 L0.5,25.0035095 C0.5,26.3766525 1.62122926,27.5 2.99699242,27.5 L797.003008,27.5 C798.375694,27.5 799.5,26.3785056 799.5,25.0035095 L799.5,2.99649048 C799.5,1.62334753 798.378771,0.5 797.003008,0.5 L2.99699242,0.5 C1.62430628,0.5 0.5,1.62149435 0.5,2.99649048 Z" id="Address-Bar-Background" stroke="#B7B7B7" fill="#FFFFFF"></path>
+ <text id="Search-or-enter-addr" opacity="0.300000012" font-family="SFUIText-Regular, SF UI Text" font-size="13" font-weight="normal" fill="#000000">
+ <tspan x="113" y="19">Search or enter address</tspan>
+ </text>
+ <path d="M106,6 L106,24" id="Line-3" stroke="#979797" opacity="0.400000006" stroke-linecap="square"></path>
+ <g id="Tor-Browser" transform="translate(27.000000, 7.000000)" fill="#7D4698" font-family="SFUIText-Medium, SF UI Text" font-size="13" font-weight="400" letter-spacing="-0.300000012">
+ <text>
+ <tspan x="0" y="12">Tor Browse</tspan>
+ <tspan x="67.0146483" y="12">r</tspan>
+ </text>
+ </g>
+ </g>
+ <g id="Tab-Content" transform="translate(96.000000, 14.000000)">
+ <text id="About-Tor-Browser" font-family="SFUIText-Regular, SF UI Text" font-size="12" font-weight="normal" letter-spacing="-0.000427656208" fill="#000000">
+ <tspan x="0" y="11">Tor Browser</tspan>
+ </text>
+ <path d="M210,6.98984746 L213.780638,3.20920944 C214.059584,2.93026352 214.511845,2.93026352 214.790791,3.20920944 C215.069736,3.48815536 215.069736,3.94041606 214.790791,4.21936199 L211.010153,8 L214.790791,11.780638 C215.069736,12.0595839 215.069736,12.5118446 214.790791,12.7907906 C214.511845,13.0697365 214.059584,13.0697365 213.780638,12.7907906 L210,9.01015254 L206.219362,12.7907906 C205.940416,13.0697365 205.488155,13.0697365 205.209209,12.7907906 C204.930264,12.5118446 204.930264,12.0595839 205.209209,11.780638 L208.989847,8 L205.209209,4.21936199 C204.930264,3.94041606 204.930264,3.48815536 205.209209,3.20920944 C205.488155,2.93026352 205.940416,2.93026352 206.219362,3.20920944 L210,6.98984746 Z" id="Close-Icon" fill="#5A5A5A" fill-rule="nonzero"></path>
+ </g>
+ <g id="Streetlights" transform="translate(16.000000, 15.000000)">
+ <circle id="close" stroke="#E14640" fill="#FF6059" cx="7.22268727" cy="6.5" r="6"></circle>
+ <circle id="maximize" stroke="#1DAC2C" fill="#28CA42" cx="50.5057061" cy="6.5" r="6"></circle>
+ <circle id="minimize" stroke="#DFA023" fill="#FFBD2E" cx="28.8641967" cy="6.5" r="6"></circle>
+ </g>
+ <g id="new-16" opacity="0.5" transform="translate(343.000000, 15.000000)" fill="#000000" fill-rule="nonzero">
+ <path d="M11.1428571,5.14285714 L6.85714286,5.14285714 L6.85714286,0.857142857 C6.85714286,0.383755929 6.47338693,0 6,0 C5.52661307,0 5.14285714,0.383755929 5.14285714,0.857142857 L5.14285714,5.14285714 L0.857142857,5.14285714 C0.383755929,5.14285714 0,5.52661307 0,6 C-9.51619735e-17,6.47338693 0.383755929,6.85714286 0.857142857,6.85714286 L5.14285714,6.85714286 L5.14285714,11.1428571 C5.14285714,11.6162441 5.52661307,12 6,12 C6.47338693,12 6.85714286,11.6162441 6.85714286,11.1428571 L6.85714286,6.85714286 L11.1428571,6.85714286 C11.6162441,6.85714286 12,6.47338693 12,6 C12,5.52661307 11.6162441,5.14285714 11.1428571,5.14285714 Z" id="Shape"></path>
+ </g>
+ <g id="menu-16" transform="translate(966.000000, 43.000000)">
+ <rect id=":hover" x="0" y="0" width="28" height="28" rx="3"></rect>
+ <path d="M9,10 L19,10 C19.5522847,10 20,9.55228475 20,9 C20,8.44771525 19.5522847,8 19,8 L9,8 C8.44771525,8 8,8.44771525 8,9 C8,9.55228475 8.44771525,10 9,10 Z M19,13 L9,13 C8.44771525,13 8,13.4477153 8,14 C8,14.5522847 8.44771525,15 9,15 L19,15 C19.5522847,15 20,14.5522847 20,14 C20,13.4477153 19.5522847,13 19,13 Z M19,18 L9,18 C8.44771525,18 8,18.4477153 8,19 C8,19.5522847 8.44771525,20 9,20 L19,20 C19.5522847,20 20,19.5522847 20,19 C20,18.4477153 19.5522847,18 19,18 Z" id="Shape" fill="#6D6D6D" fill-rule="nonzero"></path>
+ </g>
+ <g id="security-indicator-16" transform="translate(937.000000, 42.000000)">
+ <path d="M3,0 L22.7011719,0 L25,0 C26.6568542,-3.04359188e-16 28,1.34314575 28,3 L28,25 C28,26.6568542 26.6568542,28 25,28 L3,28 C1.34314575,28 2.02906125e-16,26.6568542 0,25 L-8.8817842e-16,3 C-1.09108455e-15,1.34314575 1.34314575,3.04359188e-16 3,0 Z" id=":hover"></path>
+ <g id="B-shield-2-" transform="translate(6.000000, 7.000000)" fill="#6D6D6D" fill-rule="nonzero">
+ <path d="M8,13.9315843 C10.8656467,13.0576771 13,10.2413541 13,7.27272727 L13,4.24375717 L8,2.16583509 L8,13.9315843 Z M8,0 L15,2.90909091 L15,7.27272727 C15,11.3090909 12.0133333,15.0836364 8,16 C3.98666667,15.0836364 1,11.3090909 1,7.27272727 L1,2.90909091 L8,0 Z" id="Shape"></path>
+ </g>
+ </g>
+ </g>
+ <g id="tb_icon/Stable" transform="translate(100.000000, 49.000000)">
+ <g id="Stable">
+ <circle id="background" fill="#F2E4FF" fill-rule="nonzero" cx="8" cy="8" r="7.6875"></circle>
+ <path d="M8.01641071,14.5449909 L8.01641071,13.5752065 C11.0883185,13.5663359 13.5756501,11.0739036 13.5756501,7.99977823 C13.5756501,4.92587459 11.0883185,2.43344237 8.01641071,2.42457171 L8.01641071,1.45478738 C11.6238842,1.4638798 14.5452126,4.39030881 14.5452126,7.99977823 C14.5452126,11.6094694 11.6238842,14.5361202 8.01641071,14.5449909 L8.01641071,14.5449909 Z M8.01641071,11.1506348 C9.74907135,11.1415424 11.1515219,9.73487831 11.1515219,7.99977823 C11.1515219,6.26489993 9.74907135,4.85823585 8.01641071,4.84914343 L8.01641071,3.87958086 C10.2848589,3.88845152 12.1213062,5.72933415 12.1213062,7.99977823 C12.1213062,10.2704441 10.2848589,12.1113267 8.01641071,12.1201974 L8.01641071,11.1506348 Z M8.01641071,6.30370904 C8.94583356,6.3125797 9.69695626,7.06813772 9.69695626,7.99977823 C9.69695626,8.93164052 8.94583356,9.68719854 8.01641071,9.69606919 L8.01641071,6.30370904 Z M0,7.99977823 C0,12.4182514 3.58152686,16 8,16 C12.4182514,16 16,12.4182514
16,7.99977823 C16,3.58152686 12.4182514,0 8,0 C3.58152686,0 0,3.58152686 0,7.99977823 Z" id="center" fill="url(#linearGradient-4)"></path>
+ <g id="half" transform="translate(4.390625, 8.093750) scale(-1, 1) translate(-4.390625, -8.093750) ">
+ <use fill="black" fill-opacity="1" filter="url(#filter-7)" xlink:href="#path-6"></use>
+ <use fill="url(#linearGradient-5)" fill-rule="evenodd" xlink:href="#path-6"></use>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/assets/static/images/tb85/tb85.png b/assets/static/images/tb85/tb85.png
index af7039a..b977d06 100644
Binary files a/assets/static/images/tb85/tb85.png and b/assets/static/images/tb85/tb85.png differ
diff --git a/assets/static/images/tb85/tb85(a)2x.png b/assets/static/images/tb85/tb85(a)2x.png
index 2e3914f..75744ae 100644
Binary files a/assets/static/images/tb85/tb85(a)2x.png and b/assets/static/images/tb85/tb85(a)2x.png differ
1
0
commit 985626e7d915ff83d903975d85a4d61e34c8adc4
Author: Antonela <hola(a)antonela.me>
Date: Tue Mar 26 17:12:54 2019 -0300
add board, core nav in people's page
---
templates/people.html | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/templates/people.html b/templates/people.html
index 207f451..2ce698f 100644
--- a/templates/people.html
+++ b/templates/people.html
@@ -1,5 +1,6 @@
<div class="container py-3">
- <h3 class="text-primary display-5">{{ _('Board of Directors') }}</h3>
+ <a class="text-primary display-5" href="#board">{{ _('Board of Directors') }}</a>
+ <a class="text-primary display-5 pl-5" href="#core">{{ _('Core Tor') }}</a>
</div>
<div class="container-fluid">
<div class="row">
@@ -10,7 +11,7 @@
{% endfor %}
</div>
</div>
-<div class="container py-3">
+<div id="core" class="container py-3">
<h3 class="text-primary display-5">{{ _('Core Tor') }}</h3>
</div>
<div class="container-fluid">
1
0

26 Mar '19
commit 9cc3292334af9a8ea97e08ecbb97db08f59e295e
Merge: 0022d64 985626e
Author: hiro <hiro(a)torproject.org>
Date: Tue Mar 26 21:13:45 2019 +0100
Merge remote-tracking branch 'anto/master'
assets/static/images/tb85/TB8.svg | 179 ++++++++++++++++++++++++++++++
assets/static/images/tb85/tb85.png | Bin 46123 -> 58564 bytes
assets/static/images/tb85/tb85(a)2x.png | Bin 107230 -> 147986 bytes
content/about/people/antonela/contents.lr | 2 +
templates/download-android.html | 2 +-
templates/hero-home.html | 2 +-
templates/history.html | 2 +-
templates/navbar.html | 2 +-
templates/people.html | 5 +-
9 files changed, 188 insertions(+), 6 deletions(-)
1
0
commit 4401737ea0ebba535b9ebf71191f8abceb321728
Author: Antonela <hola(a)antonela.me>
Date: Tue Mar 26 17:02:51 2019 -0300
update my pronoun
---
content/about/people/antonela/contents.lr | 2 ++
1 file changed, 2 insertions(+)
diff --git a/content/about/people/antonela/contents.lr b/content/about/people/antonela/contents.lr
index 8dc783b..22b058c 100644
--- a/content/about/people/antonela/contents.lr
+++ b/content/about/people/antonela/contents.lr
@@ -6,6 +6,8 @@ role:core
---
name: Antonela Debiasi
---
+pronoun: she
+---
nickname: antonela
---
twitter_handle: holantonela
1
0
commit 0022d645be2df8578031d457588120ebd46a9788
Author: hiro <hiro(a)torproject.org>
Date: Tue Mar 26 21:12:07 2019 +0100
Update to htaccess
---
.htaccess | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/.htaccess b/.htaccess
index f911c21..75f29d0 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,12 +1,12 @@
RewriteEngine On
# moved to /docs/
-RewriteRule ^faq(.*) https://2019.www.torproject.org/docs/faq$1 [R=302,L]
-RewriteRule ^bridges(.*) https://2019.www.torproject.org/docs/bridges$1 [R=302,L]
-RewriteRule ^abuse(.*) https://2019.www.torproject.org/docs/abuse$1 [R=302,L]
-RewriteRule ^documentation(.*) https://2019.www.torproject.org/docs/documentation$1 [R=302,L]
-RewriteRule ^verifying-signatures(.*) https://2019.www.torproject.org/docs/verifying-signatures$1 [R=302,L]
-RewriteRule ^tor-manual(.*) https://2019.www.torproject.org/docs/tor-manual$1 [R=302,L]
+RewriteRule ^docs/faq(.*) https://2019.www.torproject.org/docs/faq$1 [R=302,L]
+RewriteRule ^docs/bridges(.*) https://2019.www.torproject.org/docs/bridges$1 [R=302,L]
+RewriteRule ^docs/abuse(.*) https://2019.www.torproject.org/docs/abuse$1 [R=302,L]
+RewriteRule ^docs/documentation(.*) https://2019.www.torproject.org/docs/documentation$1 [R=302,L]
+RewriteRule ^docs/verifying-signatures(.*) https://2019.www.torproject.org/docs/verifying-signatures$1 [R=302,L]
+RewriteRule ^docs/tor-manual(.*) https://2019.www.torproject.org/docs/tor-manual$1 [R=302,L]
# Torbutton
RewriteRule ^torbutton/design(.*) https://2019.www.torproject.org/docs/torbutton/en/design$1 [R=302,L]
1
0

[tpo/staging] replace http with https, and small linebreak corrections and some updated links
by emmapeel@torproject.org 26 Mar '19
by emmapeel@torproject.org 26 Mar '19
26 Mar '19
commit 5c58933eb76498695f2a5303e6f5e7672f7402dd
Author: emma peel <emma.peel(a)riseup.net>
Date: Tue Mar 26 20:24:34 2019 +0100
replace http with https, and small linebreak corrections and some updated links
---
content/about/sponsors/ncf/contents.lr | 2 +-
content/press/15-great-free-privacy-downloads/contents.lr | 2 +-
content/press/after-prism-is-too-much-anonymity-possible/contents.lr | 2 +-
content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr | 2 +-
.../contents.lr | 5 ++---
.../press/call-to-join-tor-network-to-fight-censorship/contents.lr | 2 +-
.../contents.lr | 5 ++---
.../contents.lr | 5 ++---
.../duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr | 5 ++---
.../contents.lr | 2 +-
content/press/facebook-once-again-accessible-via-tor/contents.lr | 2 +-
.../contents.lr | 2 +-
content/press/future-tense-the-deep-web/contents.lr | 2 +-
.../press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr | 2 +-
content/press/how-to-manage-your-web-footprint/contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 2 +-
content/press/nsa-targets-the-privacy-conscious/contents.lr | 2 +-
content/press/report-nsa-has-little-success-cracking-tor/contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 5 ++---
.../contents.lr | 2 +-
.../contents.lr | 2 +-
.../svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr | 2 +-
content/press/the-fp-top-100-global-thinkers/contents.lr | 5 ++---
.../contents.lr | 2 +-
.../contents.lr | 2 +-
content/press/tor-is-still-safe/contents.lr | 2 +-
content/press/tor-network-bridges-help-evade-blockers/contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 2 +-
content/press/tor-should-not-be-banned-in-britain/contents.lr | 2 +-
content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr | 2 +-
content/press/we-can-t-outlaw-anonymous-web-services/contents.lr | 5 ++---
content/press/web-anonymizers-suddenly-get-very-popular/contents.lr | 5 ++---
.../wiping-away-whistle-blowers-online-fingerprints/contents.lr | 2 +-
38 files changed, 46 insertions(+), 54 deletions(-)
diff --git a/content/about/sponsors/ncf/contents.lr b/content/about/sponsors/ncf/contents.lr
index e5b1414..d5218f6 100644
--- a/content/about/sponsors/ncf/contents.lr
+++ b/content/about/sponsors/ncf/contents.lr
@@ -6,4 +6,4 @@ time: 2010-2012, 2014
---
name: National Christian Foundation
---
-link: http://www.nationalchristian.com/
+link: https://www.nationalchristian.com/
diff --git a/content/press/15-great-free-privacy-downloads/contents.lr b/content/press/15-great-free-privacy-downloads/contents.lr
index 7c61edb..a6b2c1a 100644
--- a/content/press/15-great-free-privacy-downloads/contents.lr
+++ b/content/press/15-great-free-privacy-downloads/contents.lr
@@ -8,7 +8,7 @@ publisher: PC World
---
title: 15 Great, Free Privacy Downloads
---
-link: http://www.pcworld.com/article/149399-3/15_great_free_privacy_downloads.html
+link: https://www.pcworld.com/article/149399-3/15_great_free_privacy_downloads.ht…
---
pub_date: 2008-08-07
---
diff --git a/content/press/after-prism-is-too-much-anonymity-possible/contents.lr b/content/press/after-prism-is-too-much-anonymity-possible/contents.lr
index a9f65f6..2e286f1 100644
--- a/content/press/after-prism-is-too-much-anonymity-possible/contents.lr
+++ b/content/press/after-prism-is-too-much-anonymity-possible/contents.lr
@@ -8,7 +8,7 @@ publisher: Slice of MIT
---
title: After PRISM, Is Too Much Anonymity Possible?
---
-link: http://alum.mit.edu/pages/sliceofmit/2013/07/01/after-prism-asking-how-much…
+link: https://alum.mit.edu/pages/sliceofmit/2013/07/01/after-prism-asking-how-muc…
---
pub_date: 2013-07-01
---
diff --git a/content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr b/content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr
index 1561c9b..df89942 100644
--- a/content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr
+++ b/content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr
@@ -8,7 +8,7 @@ publisher: nu.nl
---
title: Anoniem browsen voor gsm in de maak
---
-link: http://www.nu.nl/internet/1891289/anoniem-browsen-voor-gsm-in-de-maak.html
+link: https://www.nu.nl/internet/1891289/anoniem-browsen-voor-gsm-in-de-maak.html
---
pub_date: 2008-12-29
---
diff --git a/content/press/building-a-new-tor-that-can-resist-next-generation-state-surveillance/contents.lr b/content/press/building-a-new-tor-that-can-resist-next-generation-state-surveillance/contents.lr
index 9fc4e30..cd277fd 100644
--- a/content/press/building-a-new-tor-that-can-resist-next-generation-state-surveillance/contents.lr
+++ b/content/press/building-a-new-tor-that-can-resist-next-generation-state-surveillance/contents.lr
@@ -6,10 +6,9 @@ type: snippet
---
publisher: ArsTechnica
---
-title:
-Building a new Tor that can resist next-generation state surveillance
+title: Building a new Tor that can resist next-generation state surveillance
---
-link: http://arstechnica.com/security/2016/08/building-a-new-tor-that-withstands-…
+link: https://arstechnica.com/security/2016/08/building-a-new-tor-that-withstands…
---
pub_date: 2016-08-31
---
diff --git a/content/press/call-to-join-tor-network-to-fight-censorship/contents.lr b/content/press/call-to-join-tor-network-to-fight-censorship/contents.lr
index 74df783..e81cab4 100644
--- a/content/press/call-to-join-tor-network-to-fight-censorship/contents.lr
+++ b/content/press/call-to-join-tor-network-to-fight-censorship/contents.lr
@@ -8,7 +8,7 @@ publisher: The Australian
---
title: Call to join Tor network to fight censorship
---
-link: http://www.theaustralian.com.au/australian-it/call-to-join-tor-network-to-f…
+link: https://www.theaustralian.com.au/australian-it/call-to-join-tor-network-to-…
---
pub_date: 2010-05-25
---
diff --git a/content/press/dark-website-agora-closes-over-tor-vulnerability-suspicions/contents.lr b/content/press/dark-website-agora-closes-over-tor-vulnerability-suspicions/contents.lr
index 2dbd72f..ebee7f4 100644
--- a/content/press/dark-website-agora-closes-over-tor-vulnerability-suspicions/contents.lr
+++ b/content/press/dark-website-agora-closes-over-tor-vulnerability-suspicions/contents.lr
@@ -6,10 +6,9 @@ type: snippet
---
publisher: SC MAGAZINE
---
-title:
-Dark website Agora closes over Tor vulnerability suspicions
+title: Dark website Agora closes over Tor vulnerability suspicions
---
-link: http://www.scmagazine.com/dark-website-agora-closes-over-tor-vulnerability-…
+link: https://www.scmagazine.com/dark-website-agora-closes-over-tor-vulnerability…
---
pub_date: 2015-08-28
---
diff --git a/content/press/developers-say-privacy-network-tor-was-not-compromised-during-silk-road-takedown/contents.lr b/content/press/developers-say-privacy-network-tor-was-not-compromised-during-silk-road-takedown/contents.lr
index c87e706..eb0e032 100644
--- a/content/press/developers-say-privacy-network-tor-was-not-compromised-during-silk-road-takedown/contents.lr
+++ b/content/press/developers-say-privacy-network-tor-was-not-compromised-during-silk-road-takedown/contents.lr
@@ -6,10 +6,9 @@ type: snippet
---
publisher: Inside BitCoins
---
-title:
-Developers Say Privacy Network Tor Was Not Compromised During Silk Road Takedown
+title: Developers Say Privacy Network Tor Was Not Compromised During Silk Road Takedown
---
-link: http://insidebitcoins.com/news/developers-say-privacy-network-tor-was-not-c…
+link: https://insidebitcoins.com/news/developers-say-privacy-network-tor-was-not-…
---
pub_date: 2015-01-07
---
diff --git a/content/press/duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr b/content/press/duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr
index 38b711f..5f284ec 100644
--- a/content/press/duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr
+++ b/content/press/duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr
@@ -6,10 +6,9 @@ type: snippet
---
publisher: Technical.ly Philly
---
-title:
-DuckDuckGo donates $25K to privacyfocused Tor Project
+title: DuckDuckGo donates $25K to privacyfocused Tor Project
---
-link: http://technical.ly/philly/2016/05/03/duckduckgo-tor-project/
+link: https://technical.ly/philly/2016/05/03/duckduckgo-tor-project/
---
pub_date: 2016-05-03
---
diff --git a/content/press/facebook-is-now-available-on-tor-for-more-secure-browsing/contents.lr b/content/press/facebook-is-now-available-on-tor-for-more-secure-browsing/contents.lr
index 7ab13dd..dbed322 100644
--- a/content/press/facebook-is-now-available-on-tor-for-more-secure-browsing/contents.lr
+++ b/content/press/facebook-is-now-available-on-tor-for-more-secure-browsing/contents.lr
@@ -8,7 +8,7 @@ publisher: The Next Web
---
title: Facebook is now available on Tor for more secure browsing
---
-link: http://thenextweb.com/facebook/2014/10/31/facebook-now-available-tor-networ…
+link: https://thenextweb.com/facebook/2014/10/31/facebook-now-available-tor-netwo…
---
pub_date: 2014-10-31
---
diff --git a/content/press/facebook-once-again-accessible-via-tor/contents.lr b/content/press/facebook-once-again-accessible-via-tor/contents.lr
index 43b0213..7f6bae5 100644
--- a/content/press/facebook-once-again-accessible-via-tor/contents.lr
+++ b/content/press/facebook-once-again-accessible-via-tor/contents.lr
@@ -8,7 +8,7 @@ publisher: Help Net Security
---
title: Facebook once again accessible via Tor
---
-link: http://www.net-security.org/secworld.php?id=15098
+link: https://www.net-security.org/secworld.php?id=15098
---
pub_date: 2013-06-19
---
diff --git a/content/press/feds-are-suspects-in-new-malware-that-attacks-tor-anonymity/contents.lr b/content/press/feds-are-suspects-in-new-malware-that-attacks-tor-anonymity/contents.lr
index d32a79b..e24b555 100644
--- a/content/press/feds-are-suspects-in-new-malware-that-attacks-tor-anonymity/contents.lr
+++ b/content/press/feds-are-suspects-in-new-malware-that-attacks-tor-anonymity/contents.lr
@@ -8,7 +8,7 @@ publisher: Wired
---
title: Feds Are Suspects in New Malware That Attacks Tor Anonymity
---
-link: http://www.wired.com/threatlevel/2013/08/freedom-hosting/
+link: https://www.wired.com/threatlevel/2013/08/freedom-hosting/
---
pub_date: 2013-08-05
---
diff --git a/content/press/future-tense-the-deep-web/contents.lr b/content/press/future-tense-the-deep-web/contents.lr
index cf11d9c..f9e1e15 100644
--- a/content/press/future-tense-the-deep-web/contents.lr
+++ b/content/press/future-tense-the-deep-web/contents.lr
@@ -8,7 +8,7 @@ publisher: ABC Australia
---
title: Future Tense: The Deep Web
---
-link: http://www.abc.net.au/rn/futuretense/stories/2010/2837736.htm
+link: https://www.abc.net.au/rn/futuretense/stories/2010/2837736.htm
---
pub_date: 2010-03-11
---
diff --git a/content/press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr b/content/press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr
index 12d5742..10db758 100644
--- a/content/press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr
+++ b/content/press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr
@@ -8,7 +8,7 @@ publisher: BNR Digital
---
title: Hoe censuurbestrijder Tor wordt gecensureerd
---
-link: http://www.bnr.nl/programma/bnrdigitaal/224190-1112/hoe-censuurbestrijder-t…
+link: https://www.bnr.nl/programma/bnrdigitaal/224190-1112/hoe-censuurbestrijder-…
---
pub_date: 2011-12-30
---
diff --git a/content/press/how-to-manage-your-web-footprint/contents.lr b/content/press/how-to-manage-your-web-footprint/contents.lr
index 12fc8f8..26e3f3d 100644
--- a/content/press/how-to-manage-your-web-footprint/contents.lr
+++ b/content/press/how-to-manage-your-web-footprint/contents.lr
@@ -8,7 +8,7 @@ publisher: Marie Claire
---
title: How to Manage Your Web Footprint
---
-link: http://www.marieclaire.com/career-money/career-coach/manage-online--web-ima…
+link: https://www.marieclaire.com/career-money/career-coach/manage-online--web-im…
---
pub_date: 2009-03-18
---
diff --git a/content/press/if-microsoft-thinks-old-tor-clients-are-risky-why-not-windows-xp/contents.lr b/content/press/if-microsoft-thinks-old-tor-clients-are-risky-why-not-windows-xp/contents.lr
index 8cf7eb8..3791e42 100644
--- a/content/press/if-microsoft-thinks-old-tor-clients-are-risky-why-not-windows-xp/contents.lr
+++ b/content/press/if-microsoft-thinks-old-tor-clients-are-risky-why-not-windows-xp/contents.lr
@@ -8,7 +8,7 @@ publisher: ZDNet
---
title: If Microsoft thinks old Tor clients are risky, why not Windows XP?
---
-link: http://www.zdnet.com/if-microsoft-thinks-old-tor-clients-are-risky-why-not-…
+link: https://www.zdnet.com/if-microsoft-thinks-old-tor-clients-are-risky-why-not…
---
pub_date: 2014-01-17
---
diff --git a/content/press/if-you-can-about-online-privacy-then-the-nsa-cares-about-targeting-you/contents.lr b/content/press/if-you-can-about-online-privacy-then-the-nsa-cares-about-targeting-you/contents.lr
index e2eaa57..66b6be9 100644
--- a/content/press/if-you-can-about-online-privacy-then-the-nsa-cares-about-targeting-you/contents.lr
+++ b/content/press/if-you-can-about-online-privacy-then-the-nsa-cares-about-targeting-you/contents.lr
@@ -8,7 +8,7 @@ publisher: Computerworld
---
title: If you can about online privacy, then the NSA cares about targeting you
---
-link: http://blogs.computerworld.com/privacy/24102/if-you-care-about-online-priva…
+link: https://blogs.computerworld.com/article/2476486/if-you-care-about-online-pr…
---
pub_date: 2014-07-07
---
diff --git a/content/press/mevade-botnet-miscalculated-effect-on-tor-network-says-damballa/contents.lr b/content/press/mevade-botnet-miscalculated-effect-on-tor-network-says-damballa/contents.lr
index 0b2d525..4dc29da 100644
--- a/content/press/mevade-botnet-miscalculated-effect-on-tor-network-says-damballa/contents.lr
+++ b/content/press/mevade-botnet-miscalculated-effect-on-tor-network-says-damballa/contents.lr
@@ -8,7 +8,7 @@ publisher: Techworld
---
title: Mevade botnet miscalculated effect on Tor network, says Damballa
---
-link: http://news.techworld.com/security/3468988/mevade-botnet-miscalculated-effe…
+link: https://news.techworld.com/security/3468988/mevade-botnet-miscalculated-eff…
---
pub_date: 2013-09-16
---
diff --git a/content/press/n-h-public-library-reconsiders-support-for-anonymous-internet-network-tor/contents.lr b/content/press/n-h-public-library-reconsiders-support-for-anonymous-internet-network-tor/contents.lr
index 2482db3..f14b9b7 100644
--- a/content/press/n-h-public-library-reconsiders-support-for-anonymous-internet-network-tor/contents.lr
+++ b/content/press/n-h-public-library-reconsiders-support-for-anonymous-internet-network-tor/contents.lr
@@ -8,7 +8,7 @@ publisher: NPR
---
title: N.H. Public Library Reconsiders Support For Anonymous Internet Network Tor
---
-link: http://www.npr.org/2015/09/16/440914105/n-h-public-library-reconsiders-supp…
+link: https://www.npr.org/2015/09/16/440914105/n-h-public-library-reconsiders-sup…
---
pub_date: 2015-09-16
---
diff --git a/content/press/nsa-targets-the-privacy-conscious/contents.lr b/content/press/nsa-targets-the-privacy-conscious/contents.lr
index 21f7e23..47c2358 100644
--- a/content/press/nsa-targets-the-privacy-conscious/contents.lr
+++ b/content/press/nsa-targets-the-privacy-conscious/contents.lr
@@ -8,7 +8,7 @@ publisher: DasErste.de
---
title: NSA targets the privacy-conscious
---
-link: http://daserste.ndr.de/panorama/aktuell/nsa230_page-1.html
+link: https://daserste.ndr.de/panorama/aktuell/nsa230_page-1.html
---
pub_date: 2014-07-03
---
diff --git a/content/press/report-nsa-has-little-success-cracking-tor/contents.lr b/content/press/report-nsa-has-little-success-cracking-tor/contents.lr
index 3d77d4f..4c89348 100644
--- a/content/press/report-nsa-has-little-success-cracking-tor/contents.lr
+++ b/content/press/report-nsa-has-little-success-cracking-tor/contents.lr
@@ -8,7 +8,7 @@ publisher: Computerworld
---
title: Report: NSA has little success cracking Tor
---
-link: http://www.computerworld.com/s/article/9242992/Report_NSA_has_little_succes…
+link: https://www.computerworld.com/s/article/9242992/Report_NSA_has_little_succe…
---
pub_date: 2013-10-04
---
diff --git a/content/press/rogue-nodes-turn-tor-anonymizer-into-eavesdropper-s-paradise/contents.lr b/content/press/rogue-nodes-turn-tor-anonymizer-into-eavesdropper-s-paradise/contents.lr
index 3667a4b..25333da 100644
--- a/content/press/rogue-nodes-turn-tor-anonymizer-into-eavesdropper-s-paradise/contents.lr
+++ b/content/press/rogue-nodes-turn-tor-anonymizer-into-eavesdropper-s-paradise/contents.lr
@@ -8,7 +8,7 @@ publisher: Wired
---
title: Rogue Nodes Turn Tor Anonymizer Into Eavesdropper's Paradise
---
-link: http://www.wired.com/politics/security/news/2007/09/embassy_hacks
+link: https://www.wired.com/politics/security/news/2007/09/embassy_hacks
---
pub_date: 2007-09-10
---
diff --git a/content/press/security-technology-to-help-students-in-future-careers/contents.lr b/content/press/security-technology-to-help-students-in-future-careers/contents.lr
index 5e5396b..4243a18 100644
--- a/content/press/security-technology-to-help-students-in-future-careers/contents.lr
+++ b/content/press/security-technology-to-help-students-in-future-careers/contents.lr
@@ -6,10 +6,9 @@ type: snippet
---
publisher: Daily Illini
---
-title:
-Security technology to help students in future careers
+title: Security technology to help students in future careers
---
-link: http://www.dailyillini.com/news/article_407e25da-9909-11e3-8f33-0017a43b237…
+link: https://dailyillini.com/news/2014/02/19/security-technology-to-help-student…
---
pub_date: 2014-02-19
---
diff --git a/content/press/state-of-the-arms-race-between-repressive-governments-and-anti-censorship-surveillance-tor-technology-and-why-american-companies-are-on-the-repressive-governments-side/contents.lr b/content/press/state-of-the-arms-race-between-repressive-governments-and-anti-censorship-surveillance-tor-technology-and-why-american-companies-are-on-the-repressive-governments-side/contents.lr
index aa80d38..7570c48 100644
--- a/content/press/state-of-the-arms-race-between-repressive-governments-and-anti-censorship-surveillance-tor-technology-and-why-american-companies-are-on-the-repressive-governments-side/contents.lr
+++ b/content/press/state-of-the-arms-race-between-repressive-governments-and-anti-censorship-surveillance-tor-technology-and-why-american-companies-are-on-the-repressive-governments-side/contents.lr
@@ -8,7 +8,7 @@ publisher: Boing Boing
---
title: State of the arms race between repressive governments and anti-censorship/surveillance Tor technology (and why American companies are on the repressive governments' side)
---
-link: http://boingboing.net/2011/12/29/state-of-the-arms-race-between.html
+link: https://boingboing.net/2011/12/29/state-of-the-arms-race-between.html
---
pub_date: 2011-12-29
---
diff --git a/content/press/steven-j-murdoch-interviewed-about-tor-and-censorship/contents.lr b/content/press/steven-j-murdoch-interviewed-about-tor-and-censorship/contents.lr
index c02861b..0ea4da2 100644
--- a/content/press/steven-j-murdoch-interviewed-about-tor-and-censorship/contents.lr
+++ b/content/press/steven-j-murdoch-interviewed-about-tor-and-censorship/contents.lr
@@ -8,7 +8,7 @@ publisher: BBC World Service
---
title: Steven J Murdoch interviewed about Tor and Censorship
---
-link: http://bbcworldservicetrust.wordpress.com/2009/03/12/12-march-world-day-aga…
+link: https://bbcworldservicetrust.wordpress.com/2009/03/12/12-march-world-day-ag…
---
pub_date: 2009-03-12
---
diff --git a/content/press/svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr b/content/press/svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr
index 7549e82..96cfe0c 100644
--- a/content/press/svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr
+++ b/content/press/svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr
@@ -8,7 +8,7 @@ publisher: Forskning & Framsteg
---
title: Svenskt bistånd hjälper hackare att lura nätcensuren
---
-link: http://fof.se/tidning/2012/9/artikel/svenskt-bistand-hjalper-hackare-att-lu…
+link: https://fof.se/tidning/2012/9/artikel/svenskt-bistand-hjalper-hackare-att-l…
---
pub_date: 2012-09-01
---
diff --git a/content/press/the-fp-top-100-global-thinkers/contents.lr b/content/press/the-fp-top-100-global-thinkers/contents.lr
index db65994..d1e85fc 100644
--- a/content/press/the-fp-top-100-global-thinkers/contents.lr
+++ b/content/press/the-fp-top-100-global-thinkers/contents.lr
@@ -6,10 +6,9 @@ type: snippet
---
publisher: Foreign Policy
---
-title: The FP Top 100 Global
-Thinkers
+title: The FP Top 100 Global Thinkers
---
-link: http://www.foreignpolicy.com/articles/2012/11/26/the_fp_100_global_thinkers…
+link: https://www.foreignpolicy.com/articles/2012/11/26/the_fp_100_global_thinker…
---
pub_date: 2012-12-01
---
diff --git a/content/press/tor-anonymity-project-looks-to-help-iranians-sidestep-net-ban/contents.lr b/content/press/tor-anonymity-project-looks-to-help-iranians-sidestep-net-ban/contents.lr
index 1ce4e23..7ad8a3b 100644
--- a/content/press/tor-anonymity-project-looks-to-help-iranians-sidestep-net-ban/contents.lr
+++ b/content/press/tor-anonymity-project-looks-to-help-iranians-sidestep-net-ban/contents.lr
@@ -8,7 +8,7 @@ publisher: CNet News
---
title: Tor anonymity project looks to help Iranians sidestep Net ban
---
-link: http://news.cnet.com/8301-13578_3-57375166-38/tor-anonymity-project-looks-t…
+link: https://news.cnet.com/8301-13578_3-57375166-38/tor-anonymity-project-looks-…
---
pub_date: 2012-02-10
---
diff --git a/content/press/tor-is-being-used-as-a-safe-haven-for-victims-of-cyberstalking/contents.lr b/content/press/tor-is-being-used-as-a-safe-haven-for-victims-of-cyberstalking/contents.lr
index 4ead942..129c5f7 100644
--- a/content/press/tor-is-being-used-as-a-safe-haven-for-victims-of-cyberstalking/contents.lr
+++ b/content/press/tor-is-being-used-as-a-safe-haven-for-victims-of-cyberstalking/contents.lr
@@ -8,7 +8,7 @@ publisher: Vice
---
title: Tor is Being Used as a Safe Haven for Victims of Cyberstalking
---
-link: http://motherboard.vice.com/read/tor-is-being-used-as-a-safe-haven-for-vict…
+link: https://motherboard.vice.com/read/tor-is-being-used-as-a-safe-haven-for-vic…
---
pub_date: 2014-05-09
---
diff --git a/content/press/tor-is-still-safe/contents.lr b/content/press/tor-is-still-safe/contents.lr
index b8f172e..db68861 100644
--- a/content/press/tor-is-still-safe/contents.lr
+++ b/content/press/tor-is-still-safe/contents.lr
@@ -9,7 +9,7 @@ publisher: Gizmodo
title: Tor is Still Safe
---
-link: http://gizmodo.com/tor-is-still-safe-1669011966
+link: https://gizmodo.com/tor-is-still-safe-1669011966
---
pub_date: 2014-12-17
---
diff --git a/content/press/tor-network-bridges-help-evade-blockers/contents.lr b/content/press/tor-network-bridges-help-evade-blockers/contents.lr
index 2fdf5dc..abce4eb 100644
--- a/content/press/tor-network-bridges-help-evade-blockers/contents.lr
+++ b/content/press/tor-network-bridges-help-evade-blockers/contents.lr
@@ -8,7 +8,7 @@ publisher: SearchSecurity.com
---
title: Tor network 'bridges' help evade blockers
---
-link: http://searchsecurity.techtarget.com/news/article/0,289142,sid14_gci1305120…
+link: https://searchsecurity.techtarget.com/news/article/0,289142,sid14_gci130512…
---
pub_date: 2008-03-12
---
diff --git a/content/press/tor-networks-stop-employees-from-touring-the-deep-web/contents.lr b/content/press/tor-networks-stop-employees-from-touring-the-deep-web/contents.lr
index b97520b..10b3611 100644
--- a/content/press/tor-networks-stop-employees-from-touring-the-deep-web/contents.lr
+++ b/content/press/tor-networks-stop-employees-from-touring-the-deep-web/contents.lr
@@ -8,7 +8,7 @@ publisher: TechTarget
---
title: Tor networks: Stop employees from touring the deep web
---
-link: http://searchsecurity.techtarget.com/feature/Tor-networks-Stop-employees-fr…
+link: https://searchsecurity.techtarget.com/feature/Tor-networks-Stop-employees-f…
---
pub_date: 2014-02-01
---
diff --git a/content/press/tor-project-teams-up-with-researchers-to-toughen-up-tor-browser/contents.lr b/content/press/tor-project-teams-up-with-researchers-to-toughen-up-tor-browser/contents.lr
index 87bcf6b..04c88a0 100644
--- a/content/press/tor-project-teams-up-with-researchers-to-toughen-up-tor-browser/contents.lr
+++ b/content/press/tor-project-teams-up-with-researchers-to-toughen-up-tor-browser/contents.lr
@@ -8,7 +8,7 @@ publisher: ZDNet
---
title: Tor Project teams up with researchers to toughen up Tor browser
---
-link: http://www.zdnet.com/article/tor-project-teams-up-with-researchers-to-tough…
+link: https://www.zdnet.com/article/tor-project-teams-up-with-researchers-to-toug…
---
pub_date: 2016-06-22
---
diff --git a/content/press/tor-should-not-be-banned-in-britain/contents.lr b/content/press/tor-should-not-be-banned-in-britain/contents.lr
index 9379fac..bd8b502 100644
--- a/content/press/tor-should-not-be-banned-in-britain/contents.lr
+++ b/content/press/tor-should-not-be-banned-in-britain/contents.lr
@@ -8,7 +8,7 @@ publisher: The Guardian
---
title: Tor Should Not be Banned in Britain
---
-link: http://www.theguardian.com/technology/2015/mar/11/tor-should-not-be-banned-…
+link: https://www.theguardian.com/technology/2015/mar/11/tor-should-not-be-banned…
---
pub_date: 2015-03-11
---
diff --git a/content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr b/content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr
index 2a82743..fa69b55 100644
--- a/content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr
+++ b/content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr
@@ -8,7 +8,7 @@ publisher: CSO
---
title: Turkey, Twitter & Censorship: VPN, Tor and more
---
-link: http://www.csoonline.com/article/2136262/social-networking-security/turkey-…
+link: https://www.csoonline.com/article/2136262/social-networking-security/turkey…
---
pub_date: 2014-03-23
---
diff --git a/content/press/we-can-t-outlaw-anonymous-web-services/contents.lr b/content/press/we-can-t-outlaw-anonymous-web-services/contents.lr
index 4ad0117..ffa53d1 100644
--- a/content/press/we-can-t-outlaw-anonymous-web-services/contents.lr
+++ b/content/press/we-can-t-outlaw-anonymous-web-services/contents.lr
@@ -6,10 +6,9 @@ type: snippet
---
publisher: The Hill
---
-title:
-We Can’t Outlaw Anonymous Web Services
+title: We Can’t Outlaw Anonymous Web Services
---
-link: http://thehill.com/policy/cybersecurity/235171-uk-lawmakers-we-cant-ban-onl…
+link: https://thehill.com/policy/cybersecurity/235171-uk-lawmakers-we-cant-ban-on…
---
pub_date: 2015-03-10
---
diff --git a/content/press/web-anonymizers-suddenly-get-very-popular/contents.lr b/content/press/web-anonymizers-suddenly-get-very-popular/contents.lr
index c30ad5c..d440d25 100644
--- a/content/press/web-anonymizers-suddenly-get-very-popular/contents.lr
+++ b/content/press/web-anonymizers-suddenly-get-very-popular/contents.lr
@@ -6,10 +6,9 @@ type: snippet
---
publisher: Fox News/eWeek
---
-title:
-Web Anonymizers Suddenly Get Very Popular
+title: Web Anonymizers Suddenly Get Very Popular
---
-link: http://www.foxnews.com/story/0,2933,183005,00.html
+link: https://www.foxnews.com/story/0,2933,183005,00.html
---
pub_date: 2006-01-27
---
diff --git a/content/press/wiping-away-whistle-blowers-online-fingerprints/contents.lr b/content/press/wiping-away-whistle-blowers-online-fingerprints/contents.lr
index fa37fd5..3e4eea7 100644
--- a/content/press/wiping-away-whistle-blowers-online-fingerprints/contents.lr
+++ b/content/press/wiping-away-whistle-blowers-online-fingerprints/contents.lr
@@ -8,7 +8,7 @@ publisher: CNN: Tech
---
title: Wiping away whistle-blowers' online fingerprints
---
-link: http://www.cnn.com/2011/TECH/web/06/11/hiding.online.identity/index.html
+link: https://www.cnn.com/2011/TECH/web/06/11/hiding.online.identity/index.html
---
pub_date: 2011-06-12
---
1
0

[tpo/master] replace http with https, and small linebreak corrections and some updated links
by emmapeel@torproject.org 26 Mar '19
by emmapeel@torproject.org 26 Mar '19
26 Mar '19
commit 0fcd0ed43f44347d5104bde5c2da863b5ca72a8c
Author: emma peel <emma.peel(a)riseup.net>
Date: Tue Mar 26 20:24:34 2019 +0100
replace http with https, and small linebreak corrections and some updated links
---
content/about/sponsors/ncf/contents.lr | 2 +-
content/press/15-great-free-privacy-downloads/contents.lr | 2 +-
content/press/after-prism-is-too-much-anonymity-possible/contents.lr | 2 +-
content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr | 2 +-
.../contents.lr | 5 ++---
.../press/call-to-join-tor-network-to-fight-censorship/contents.lr | 2 +-
.../contents.lr | 5 ++---
.../contents.lr | 5 ++---
.../duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr | 5 ++---
.../contents.lr | 2 +-
content/press/facebook-once-again-accessible-via-tor/contents.lr | 2 +-
.../contents.lr | 2 +-
content/press/future-tense-the-deep-web/contents.lr | 2 +-
.../press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr | 2 +-
content/press/how-to-manage-your-web-footprint/contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 2 +-
content/press/nsa-targets-the-privacy-conscious/contents.lr | 2 +-
content/press/report-nsa-has-little-success-cracking-tor/contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 5 ++---
.../contents.lr | 2 +-
.../contents.lr | 2 +-
.../svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr | 2 +-
content/press/the-fp-top-100-global-thinkers/contents.lr | 5 ++---
.../contents.lr | 2 +-
.../contents.lr | 2 +-
content/press/tor-is-still-safe/contents.lr | 2 +-
content/press/tor-network-bridges-help-evade-blockers/contents.lr | 2 +-
.../contents.lr | 2 +-
.../contents.lr | 2 +-
content/press/tor-should-not-be-banned-in-britain/contents.lr | 2 +-
content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr | 2 +-
content/press/we-can-t-outlaw-anonymous-web-services/contents.lr | 5 ++---
content/press/web-anonymizers-suddenly-get-very-popular/contents.lr | 5 ++---
.../wiping-away-whistle-blowers-online-fingerprints/contents.lr | 2 +-
38 files changed, 46 insertions(+), 54 deletions(-)
diff --git a/content/about/sponsors/ncf/contents.lr b/content/about/sponsors/ncf/contents.lr
index b7517b3..4c27d68 100644
--- a/content/about/sponsors/ncf/contents.lr
+++ b/content/about/sponsors/ncf/contents.lr
@@ -8,4 +8,4 @@ name: National Christian Foundation
---
_hidden: yes
---
-link: http://www.nationalchristian.com/
+link: https://www.nationalchristian.com/
diff --git a/content/press/15-great-free-privacy-downloads/contents.lr b/content/press/15-great-free-privacy-downloads/contents.lr
index 4940bbf..4fc5ade 100644
--- a/content/press/15-great-free-privacy-downloads/contents.lr
+++ b/content/press/15-great-free-privacy-downloads/contents.lr
@@ -10,7 +10,7 @@ publisher: PC World
---
title: 15 Great, Free Privacy Downloads
---
-link: http://www.pcworld.com/article/149399-3/15_great_free_privacy_downloads.html
+link: https://www.pcworld.com/article/149399-3/15_great_free_privacy_downloads.ht…
---
pub_date: 2008-08-07
---
diff --git a/content/press/after-prism-is-too-much-anonymity-possible/contents.lr b/content/press/after-prism-is-too-much-anonymity-possible/contents.lr
index 18fb968..1d039b6 100644
--- a/content/press/after-prism-is-too-much-anonymity-possible/contents.lr
+++ b/content/press/after-prism-is-too-much-anonymity-possible/contents.lr
@@ -10,7 +10,7 @@ publisher: Slice of MIT
---
title: After PRISM, Is Too Much Anonymity Possible?
---
-link: http://alum.mit.edu/pages/sliceofmit/2013/07/01/after-prism-asking-how-much…
+link: https://alum.mit.edu/pages/sliceofmit/2013/07/01/after-prism-asking-how-muc…
---
pub_date: 2013-07-01
---
diff --git a/content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr b/content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr
index fb5a0dc..814f032 100644
--- a/content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr
+++ b/content/press/anoniem-browsen-voor-gsm-in-de-maak/contents.lr
@@ -10,7 +10,7 @@ publisher: nu.nl
---
title: Anoniem browsen voor gsm in de maak
---
-link: http://www.nu.nl/internet/1891289/anoniem-browsen-voor-gsm-in-de-maak.html
+link: https://www.nu.nl/internet/1891289/anoniem-browsen-voor-gsm-in-de-maak.html
---
pub_date: 2008-12-29
---
diff --git a/content/press/building-a-new-tor-that-can-resist-next-generation-state-surveillance/contents.lr b/content/press/building-a-new-tor-that-can-resist-next-generation-state-surveillance/contents.lr
index 613ce08..0c1b8cb 100644
--- a/content/press/building-a-new-tor-that-can-resist-next-generation-state-surveillance/contents.lr
+++ b/content/press/building-a-new-tor-that-can-resist-next-generation-state-surveillance/contents.lr
@@ -8,10 +8,9 @@ type: snippet
---
publisher: ArsTechnica
---
-title:
-Building a new Tor that can resist next-generation state surveillance
+title: Building a new Tor that can resist next-generation state surveillance
---
-link: http://arstechnica.com/security/2016/08/building-a-new-tor-that-withstands-…
+link: https://arstechnica.com/security/2016/08/building-a-new-tor-that-withstands…
---
pub_date: 2016-08-31
---
diff --git a/content/press/call-to-join-tor-network-to-fight-censorship/contents.lr b/content/press/call-to-join-tor-network-to-fight-censorship/contents.lr
index 94d4fb5..295a452 100644
--- a/content/press/call-to-join-tor-network-to-fight-censorship/contents.lr
+++ b/content/press/call-to-join-tor-network-to-fight-censorship/contents.lr
@@ -10,7 +10,7 @@ publisher: The Australian
---
title: Call to join Tor network to fight censorship
---
-link: http://www.theaustralian.com.au/australian-it/call-to-join-tor-network-to-f…
+link: https://www.theaustralian.com.au/australian-it/call-to-join-tor-network-to-…
---
pub_date: 2010-05-25
---
diff --git a/content/press/dark-website-agora-closes-over-tor-vulnerability-suspicions/contents.lr b/content/press/dark-website-agora-closes-over-tor-vulnerability-suspicions/contents.lr
index a9c82ca..3facd64 100644
--- a/content/press/dark-website-agora-closes-over-tor-vulnerability-suspicions/contents.lr
+++ b/content/press/dark-website-agora-closes-over-tor-vulnerability-suspicions/contents.lr
@@ -8,10 +8,9 @@ type: snippet
---
publisher: SC MAGAZINE
---
-title:
-Dark website Agora closes over Tor vulnerability suspicions
+title: Dark website Agora closes over Tor vulnerability suspicions
---
-link: http://www.scmagazine.com/dark-website-agora-closes-over-tor-vulnerability-…
+link: https://www.scmagazine.com/dark-website-agora-closes-over-tor-vulnerability…
---
pub_date: 2015-08-28
---
diff --git a/content/press/developers-say-privacy-network-tor-was-not-compromised-during-silk-road-takedown/contents.lr b/content/press/developers-say-privacy-network-tor-was-not-compromised-during-silk-road-takedown/contents.lr
index abddb93..dbd3ec5 100644
--- a/content/press/developers-say-privacy-network-tor-was-not-compromised-during-silk-road-takedown/contents.lr
+++ b/content/press/developers-say-privacy-network-tor-was-not-compromised-during-silk-road-takedown/contents.lr
@@ -8,10 +8,9 @@ type: snippet
---
publisher: Inside BitCoins
---
-title:
-Developers Say Privacy Network Tor Was Not Compromised During Silk Road Takedown
+title: Developers Say Privacy Network Tor Was Not Compromised During Silk Road Takedown
---
-link: http://insidebitcoins.com/news/developers-say-privacy-network-tor-was-not-c…
+link: https://insidebitcoins.com/news/developers-say-privacy-network-tor-was-not-…
---
pub_date: 2015-01-07
---
diff --git a/content/press/duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr b/content/press/duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr
index e9e2093..b1dde68 100644
--- a/content/press/duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr
+++ b/content/press/duckduckgo-donates-25k-to-privacyfocused-tor-project/contents.lr
@@ -8,10 +8,9 @@ type: snippet
---
publisher: Technical.ly Philly
---
-title:
-DuckDuckGo donates $25K to privacyfocused Tor Project
+title: DuckDuckGo donates $25K to privacyfocused Tor Project
---
-link: http://technical.ly/philly/2016/05/03/duckduckgo-tor-project/
+link: https://technical.ly/philly/2016/05/03/duckduckgo-tor-project/
---
pub_date: 2016-05-03
---
diff --git a/content/press/facebook-is-now-available-on-tor-for-more-secure-browsing/contents.lr b/content/press/facebook-is-now-available-on-tor-for-more-secure-browsing/contents.lr
index 9793952..8dfddc7 100644
--- a/content/press/facebook-is-now-available-on-tor-for-more-secure-browsing/contents.lr
+++ b/content/press/facebook-is-now-available-on-tor-for-more-secure-browsing/contents.lr
@@ -10,7 +10,7 @@ publisher: The Next Web
---
title: Facebook is now available on Tor for more secure browsing
---
-link: http://thenextweb.com/facebook/2014/10/31/facebook-now-available-tor-networ…
+link: https://thenextweb.com/facebook/2014/10/31/facebook-now-available-tor-netwo…
---
pub_date: 2014-10-31
---
diff --git a/content/press/facebook-once-again-accessible-via-tor/contents.lr b/content/press/facebook-once-again-accessible-via-tor/contents.lr
index c78a5bb..6db9b58 100644
--- a/content/press/facebook-once-again-accessible-via-tor/contents.lr
+++ b/content/press/facebook-once-again-accessible-via-tor/contents.lr
@@ -10,7 +10,7 @@ publisher: Help Net Security
---
title: Facebook once again accessible via Tor
---
-link: http://www.net-security.org/secworld.php?id=15098
+link: https://www.net-security.org/secworld.php?id=15098
---
pub_date: 2013-06-19
---
diff --git a/content/press/feds-are-suspects-in-new-malware-that-attacks-tor-anonymity/contents.lr b/content/press/feds-are-suspects-in-new-malware-that-attacks-tor-anonymity/contents.lr
index 42b6219..00190a8 100644
--- a/content/press/feds-are-suspects-in-new-malware-that-attacks-tor-anonymity/contents.lr
+++ b/content/press/feds-are-suspects-in-new-malware-that-attacks-tor-anonymity/contents.lr
@@ -10,7 +10,7 @@ publisher: Wired
---
title: Feds Are Suspects in New Malware That Attacks Tor Anonymity
---
-link: http://www.wired.com/threatlevel/2013/08/freedom-hosting/
+link: https://www.wired.com/threatlevel/2013/08/freedom-hosting/
---
pub_date: 2013-08-05
---
diff --git a/content/press/future-tense-the-deep-web/contents.lr b/content/press/future-tense-the-deep-web/contents.lr
index 7a9db81..4db5d80 100644
--- a/content/press/future-tense-the-deep-web/contents.lr
+++ b/content/press/future-tense-the-deep-web/contents.lr
@@ -10,7 +10,7 @@ publisher: ABC Australia
---
title: Future Tense: The Deep Web
---
-link: http://www.abc.net.au/rn/futuretense/stories/2010/2837736.htm
+link: https://www.abc.net.au/rn/futuretense/stories/2010/2837736.htm
---
pub_date: 2010-03-11
---
diff --git a/content/press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr b/content/press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr
index f91dfc0..3e18d6c 100644
--- a/content/press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr
+++ b/content/press/hoe-censuurbestrijder-tor-wordt-gecensureerd/contents.lr
@@ -10,7 +10,7 @@ publisher: BNR Digital
---
title: Hoe censuurbestrijder Tor wordt gecensureerd
---
-link: http://www.bnr.nl/programma/bnrdigitaal/224190-1112/hoe-censuurbestrijder-t…
+link: https://www.bnr.nl/programma/bnrdigitaal/224190-1112/hoe-censuurbestrijder-…
---
pub_date: 2011-12-30
---
diff --git a/content/press/how-to-manage-your-web-footprint/contents.lr b/content/press/how-to-manage-your-web-footprint/contents.lr
index 5d935c8..46f7d44 100644
--- a/content/press/how-to-manage-your-web-footprint/contents.lr
+++ b/content/press/how-to-manage-your-web-footprint/contents.lr
@@ -10,7 +10,7 @@ publisher: Marie Claire
---
title: How to Manage Your Web Footprint
---
-link: http://www.marieclaire.com/career-money/career-coach/manage-online--web-ima…
+link: https://www.marieclaire.com/career-money/career-coach/manage-online--web-im…
---
pub_date: 2009-03-18
---
diff --git a/content/press/if-microsoft-thinks-old-tor-clients-are-risky-why-not-windows-xp/contents.lr b/content/press/if-microsoft-thinks-old-tor-clients-are-risky-why-not-windows-xp/contents.lr
index 9e4e74d..14b3441 100644
--- a/content/press/if-microsoft-thinks-old-tor-clients-are-risky-why-not-windows-xp/contents.lr
+++ b/content/press/if-microsoft-thinks-old-tor-clients-are-risky-why-not-windows-xp/contents.lr
@@ -10,7 +10,7 @@ publisher: ZDNet
---
title: If Microsoft thinks old Tor clients are risky, why not Windows XP?
---
-link: http://www.zdnet.com/if-microsoft-thinks-old-tor-clients-are-risky-why-not-…
+link: https://www.zdnet.com/if-microsoft-thinks-old-tor-clients-are-risky-why-not…
---
pub_date: 2014-01-17
---
diff --git a/content/press/if-you-can-about-online-privacy-then-the-nsa-cares-about-targeting-you/contents.lr b/content/press/if-you-can-about-online-privacy-then-the-nsa-cares-about-targeting-you/contents.lr
index 4cae755..112b0fd 100644
--- a/content/press/if-you-can-about-online-privacy-then-the-nsa-cares-about-targeting-you/contents.lr
+++ b/content/press/if-you-can-about-online-privacy-then-the-nsa-cares-about-targeting-you/contents.lr
@@ -10,7 +10,7 @@ publisher: Computerworld
---
title: If you can about online privacy, then the NSA cares about targeting you
---
-link: http://blogs.computerworld.com/privacy/24102/if-you-care-about-online-priva…
+link: https://blogs.computerworld.com/article/2476486/if-you-care-about-online-pr…
---
pub_date: 2014-07-07
---
diff --git a/content/press/mevade-botnet-miscalculated-effect-on-tor-network-says-damballa/contents.lr b/content/press/mevade-botnet-miscalculated-effect-on-tor-network-says-damballa/contents.lr
index 3723731..7fa5e35 100644
--- a/content/press/mevade-botnet-miscalculated-effect-on-tor-network-says-damballa/contents.lr
+++ b/content/press/mevade-botnet-miscalculated-effect-on-tor-network-says-damballa/contents.lr
@@ -10,7 +10,7 @@ publisher: Techworld
---
title: Mevade botnet miscalculated effect on Tor network, says Damballa
---
-link: http://news.techworld.com/security/3468988/mevade-botnet-miscalculated-effe…
+link: https://news.techworld.com/security/3468988/mevade-botnet-miscalculated-eff…
---
pub_date: 2013-09-16
---
diff --git a/content/press/n-h-public-library-reconsiders-support-for-anonymous-internet-network-tor/contents.lr b/content/press/n-h-public-library-reconsiders-support-for-anonymous-internet-network-tor/contents.lr
index 226491e..c5010ea 100644
--- a/content/press/n-h-public-library-reconsiders-support-for-anonymous-internet-network-tor/contents.lr
+++ b/content/press/n-h-public-library-reconsiders-support-for-anonymous-internet-network-tor/contents.lr
@@ -10,7 +10,7 @@ publisher: NPR
---
title: N.H. Public Library Reconsiders Support For Anonymous Internet Network Tor
---
-link: http://www.npr.org/2015/09/16/440914105/n-h-public-library-reconsiders-supp…
+link: https://www.npr.org/2015/09/16/440914105/n-h-public-library-reconsiders-sup…
---
pub_date: 2015-09-16
---
diff --git a/content/press/nsa-targets-the-privacy-conscious/contents.lr b/content/press/nsa-targets-the-privacy-conscious/contents.lr
index 4612f0b..469e66f 100644
--- a/content/press/nsa-targets-the-privacy-conscious/contents.lr
+++ b/content/press/nsa-targets-the-privacy-conscious/contents.lr
@@ -10,7 +10,7 @@ publisher: DasErste.de
---
title: NSA targets the privacy-conscious
---
-link: http://daserste.ndr.de/panorama/aktuell/nsa230_page-1.html
+link: https://daserste.ndr.de/panorama/aktuell/nsa230_page-1.html
---
pub_date: 2014-07-03
---
diff --git a/content/press/report-nsa-has-little-success-cracking-tor/contents.lr b/content/press/report-nsa-has-little-success-cracking-tor/contents.lr
index f95b1a7..f84d71d 100644
--- a/content/press/report-nsa-has-little-success-cracking-tor/contents.lr
+++ b/content/press/report-nsa-has-little-success-cracking-tor/contents.lr
@@ -10,7 +10,7 @@ publisher: Computerworld
---
title: Report: NSA has little success cracking Tor
---
-link: http://www.computerworld.com/s/article/9242992/Report_NSA_has_little_succes…
+link: https://www.computerworld.com/s/article/9242992/Report_NSA_has_little_succe…
---
pub_date: 2013-10-04
---
diff --git a/content/press/rogue-nodes-turn-tor-anonymizer-into-eavesdropper-s-paradise/contents.lr b/content/press/rogue-nodes-turn-tor-anonymizer-into-eavesdropper-s-paradise/contents.lr
index 1c23fb3..16be69f 100644
--- a/content/press/rogue-nodes-turn-tor-anonymizer-into-eavesdropper-s-paradise/contents.lr
+++ b/content/press/rogue-nodes-turn-tor-anonymizer-into-eavesdropper-s-paradise/contents.lr
@@ -10,7 +10,7 @@ publisher: Wired
---
title: Rogue Nodes Turn Tor Anonymizer Into Eavesdropper's Paradise
---
-link: http://www.wired.com/politics/security/news/2007/09/embassy_hacks
+link: https://www.wired.com/politics/security/news/2007/09/embassy_hacks
---
pub_date: 2007-09-10
---
diff --git a/content/press/security-technology-to-help-students-in-future-careers/contents.lr b/content/press/security-technology-to-help-students-in-future-careers/contents.lr
index a0d6468..3d27553 100644
--- a/content/press/security-technology-to-help-students-in-future-careers/contents.lr
+++ b/content/press/security-technology-to-help-students-in-future-careers/contents.lr
@@ -8,10 +8,9 @@ type: snippet
---
publisher: Daily Illini
---
-title:
-Security technology to help students in future careers
+title: Security technology to help students in future careers
---
-link: http://www.dailyillini.com/news/article_407e25da-9909-11e3-8f33-0017a43b237…
+link: https://dailyillini.com/news/2014/02/19/security-technology-to-help-student…
---
pub_date: 2014-02-19
---
diff --git a/content/press/state-of-the-arms-race-between-repressive-governments-and-anti-censorship-surveillance-tor-technology-and-why-american-companies-are-on-the-repressive-governments-side/contents.lr b/content/press/state-of-the-arms-race-between-repressive-governments-and-anti-censorship-surveillance-tor-technology-and-why-american-companies-are-on-the-repressive-governments-side/contents.lr
index 5087b9a..55db27b 100644
--- a/content/press/state-of-the-arms-race-between-repressive-governments-and-anti-censorship-surveillance-tor-technology-and-why-american-companies-are-on-the-repressive-governments-side/contents.lr
+++ b/content/press/state-of-the-arms-race-between-repressive-governments-and-anti-censorship-surveillance-tor-technology-and-why-american-companies-are-on-the-repressive-governments-side/contents.lr
@@ -10,7 +10,7 @@ publisher: Boing Boing
---
title: State of the arms race between repressive governments and anti-censorship/surveillance Tor technology (and why American companies are on the repressive governments' side)
---
-link: http://boingboing.net/2011/12/29/state-of-the-arms-race-between.html
+link: https://boingboing.net/2011/12/29/state-of-the-arms-race-between.html
---
pub_date: 2011-12-29
---
diff --git a/content/press/steven-j-murdoch-interviewed-about-tor-and-censorship/contents.lr b/content/press/steven-j-murdoch-interviewed-about-tor-and-censorship/contents.lr
index 6ad5f56..85bf849 100644
--- a/content/press/steven-j-murdoch-interviewed-about-tor-and-censorship/contents.lr
+++ b/content/press/steven-j-murdoch-interviewed-about-tor-and-censorship/contents.lr
@@ -10,7 +10,7 @@ publisher: BBC World Service
---
title: Steven J Murdoch interviewed about Tor and Censorship
---
-link: http://bbcworldservicetrust.wordpress.com/2009/03/12/12-march-world-day-aga…
+link: https://bbcworldservicetrust.wordpress.com/2009/03/12/12-march-world-day-ag…
---
pub_date: 2009-03-12
---
diff --git a/content/press/svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr b/content/press/svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr
index 7c6e355..28fdf07 100644
--- a/content/press/svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr
+++ b/content/press/svenskt-bistand-hjalper-hackare-att-lura-natcensuren/contents.lr
@@ -10,7 +10,7 @@ publisher: Forskning & Framsteg
---
title: Svenskt bistånd hjälper hackare att lura nätcensuren
---
-link: http://fof.se/tidning/2012/9/artikel/svenskt-bistand-hjalper-hackare-att-lu…
+link: https://fof.se/tidning/2012/9/artikel/svenskt-bistand-hjalper-hackare-att-l…
---
pub_date: 2012-09-01
---
diff --git a/content/press/the-fp-top-100-global-thinkers/contents.lr b/content/press/the-fp-top-100-global-thinkers/contents.lr
index ab0d9a8..5b6beef 100644
--- a/content/press/the-fp-top-100-global-thinkers/contents.lr
+++ b/content/press/the-fp-top-100-global-thinkers/contents.lr
@@ -8,10 +8,9 @@ type: snippet
---
publisher: Foreign Policy
---
-title: The FP Top 100 Global
-Thinkers
+title: The FP Top 100 Global Thinkers
---
-link: http://www.foreignpolicy.com/articles/2012/11/26/the_fp_100_global_thinkers…
+link: https://www.foreignpolicy.com/articles/2012/11/26/the_fp_100_global_thinker…
---
pub_date: 2012-12-01
---
diff --git a/content/press/tor-anonymity-project-looks-to-help-iranians-sidestep-net-ban/contents.lr b/content/press/tor-anonymity-project-looks-to-help-iranians-sidestep-net-ban/contents.lr
index 7e62a49..e309d3c 100644
--- a/content/press/tor-anonymity-project-looks-to-help-iranians-sidestep-net-ban/contents.lr
+++ b/content/press/tor-anonymity-project-looks-to-help-iranians-sidestep-net-ban/contents.lr
@@ -10,7 +10,7 @@ publisher: CNet News
---
title: Tor anonymity project looks to help Iranians sidestep Net ban
---
-link: http://news.cnet.com/8301-13578_3-57375166-38/tor-anonymity-project-looks-t…
+link: https://news.cnet.com/8301-13578_3-57375166-38/tor-anonymity-project-looks-…
---
pub_date: 2012-02-10
---
diff --git a/content/press/tor-is-being-used-as-a-safe-haven-for-victims-of-cyberstalking/contents.lr b/content/press/tor-is-being-used-as-a-safe-haven-for-victims-of-cyberstalking/contents.lr
index 550f5d0..b7958a0 100644
--- a/content/press/tor-is-being-used-as-a-safe-haven-for-victims-of-cyberstalking/contents.lr
+++ b/content/press/tor-is-being-used-as-a-safe-haven-for-victims-of-cyberstalking/contents.lr
@@ -10,7 +10,7 @@ publisher: Vice
---
title: Tor is Being Used as a Safe Haven for Victims of Cyberstalking
---
-link: http://motherboard.vice.com/read/tor-is-being-used-as-a-safe-haven-for-vict…
+link: https://motherboard.vice.com/read/tor-is-being-used-as-a-safe-haven-for-vic…
---
pub_date: 2014-05-09
---
diff --git a/content/press/tor-is-still-safe/contents.lr b/content/press/tor-is-still-safe/contents.lr
index 826ef3a..dfdd332 100644
--- a/content/press/tor-is-still-safe/contents.lr
+++ b/content/press/tor-is-still-safe/contents.lr
@@ -11,7 +11,7 @@ publisher: Gizmodo
title: Tor is Still Safe
---
-link: http://gizmodo.com/tor-is-still-safe-1669011966
+link: https://gizmodo.com/tor-is-still-safe-1669011966
---
pub_date: 2014-12-17
---
diff --git a/content/press/tor-network-bridges-help-evade-blockers/contents.lr b/content/press/tor-network-bridges-help-evade-blockers/contents.lr
index 44b5427..97ecd1e 100644
--- a/content/press/tor-network-bridges-help-evade-blockers/contents.lr
+++ b/content/press/tor-network-bridges-help-evade-blockers/contents.lr
@@ -10,7 +10,7 @@ publisher: SearchSecurity.com
---
title: Tor network 'bridges' help evade blockers
---
-link: http://searchsecurity.techtarget.com/news/article/0,289142,sid14_gci1305120…
+link: https://searchsecurity.techtarget.com/news/article/0,289142,sid14_gci130512…
---
pub_date: 2008-03-12
---
diff --git a/content/press/tor-networks-stop-employees-from-touring-the-deep-web/contents.lr b/content/press/tor-networks-stop-employees-from-touring-the-deep-web/contents.lr
index 6a027a7..4aff1e7 100644
--- a/content/press/tor-networks-stop-employees-from-touring-the-deep-web/contents.lr
+++ b/content/press/tor-networks-stop-employees-from-touring-the-deep-web/contents.lr
@@ -10,7 +10,7 @@ publisher: TechTarget
---
title: Tor networks: Stop employees from touring the deep web
---
-link: http://searchsecurity.techtarget.com/feature/Tor-networks-Stop-employees-fr…
+link: https://searchsecurity.techtarget.com/feature/Tor-networks-Stop-employees-f…
---
pub_date: 2014-02-01
---
diff --git a/content/press/tor-project-teams-up-with-researchers-to-toughen-up-tor-browser/contents.lr b/content/press/tor-project-teams-up-with-researchers-to-toughen-up-tor-browser/contents.lr
index 24c3f47..8f8f42f 100644
--- a/content/press/tor-project-teams-up-with-researchers-to-toughen-up-tor-browser/contents.lr
+++ b/content/press/tor-project-teams-up-with-researchers-to-toughen-up-tor-browser/contents.lr
@@ -10,7 +10,7 @@ publisher: ZDNet
---
title: Tor Project teams up with researchers to toughen up Tor browser
---
-link: http://www.zdnet.com/article/tor-project-teams-up-with-researchers-to-tough…
+link: https://www.zdnet.com/article/tor-project-teams-up-with-researchers-to-toug…
---
pub_date: 2016-06-22
---
diff --git a/content/press/tor-should-not-be-banned-in-britain/contents.lr b/content/press/tor-should-not-be-banned-in-britain/contents.lr
index bd14a03..f6a2a64 100644
--- a/content/press/tor-should-not-be-banned-in-britain/contents.lr
+++ b/content/press/tor-should-not-be-banned-in-britain/contents.lr
@@ -10,7 +10,7 @@ publisher: The Guardian
---
title: Tor Should Not be Banned in Britain
---
-link: http://www.theguardian.com/technology/2015/mar/11/tor-should-not-be-banned-…
+link: https://www.theguardian.com/technology/2015/mar/11/tor-should-not-be-banned…
---
pub_date: 2015-03-11
---
diff --git a/content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr b/content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr
index 8ac2b61..123199b 100644
--- a/content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr
+++ b/content/press/turkey-twitter-censorship-vpn-tor-and-more/contents.lr
@@ -10,7 +10,7 @@ publisher: CSO
---
title: Turkey, Twitter & Censorship: VPN, Tor and more
---
-link: http://www.csoonline.com/article/2136262/social-networking-security/turkey-…
+link: https://www.csoonline.com/article/2136262/social-networking-security/turkey…
---
pub_date: 2014-03-23
---
diff --git a/content/press/we-can-t-outlaw-anonymous-web-services/contents.lr b/content/press/we-can-t-outlaw-anonymous-web-services/contents.lr
index 9cd2c9c..e67a404 100644
--- a/content/press/we-can-t-outlaw-anonymous-web-services/contents.lr
+++ b/content/press/we-can-t-outlaw-anonymous-web-services/contents.lr
@@ -8,10 +8,9 @@ type: snippet
---
publisher: The Hill
---
-title:
-We Can’t Outlaw Anonymous Web Services
+title: We Can’t Outlaw Anonymous Web Services
---
-link: http://thehill.com/policy/cybersecurity/235171-uk-lawmakers-we-cant-ban-onl…
+link: https://thehill.com/policy/cybersecurity/235171-uk-lawmakers-we-cant-ban-on…
---
pub_date: 2015-03-10
---
diff --git a/content/press/web-anonymizers-suddenly-get-very-popular/contents.lr b/content/press/web-anonymizers-suddenly-get-very-popular/contents.lr
index 6e3b8a0..e05abb7 100644
--- a/content/press/web-anonymizers-suddenly-get-very-popular/contents.lr
+++ b/content/press/web-anonymizers-suddenly-get-very-popular/contents.lr
@@ -8,10 +8,9 @@ type: snippet
---
publisher: Fox News/eWeek
---
-title:
-Web Anonymizers Suddenly Get Very Popular
+title: Web Anonymizers Suddenly Get Very Popular
---
-link: http://www.foxnews.com/story/0,2933,183005,00.html
+link: https://www.foxnews.com/story/0,2933,183005,00.html
---
pub_date: 2006-01-27
---
diff --git a/content/press/wiping-away-whistle-blowers-online-fingerprints/contents.lr b/content/press/wiping-away-whistle-blowers-online-fingerprints/contents.lr
index 79e83af..cfcd17b 100644
--- a/content/press/wiping-away-whistle-blowers-online-fingerprints/contents.lr
+++ b/content/press/wiping-away-whistle-blowers-online-fingerprints/contents.lr
@@ -10,7 +10,7 @@ publisher: CNN: Tech
---
title: Wiping away whistle-blowers' online fingerprints
---
-link: http://www.cnn.com/2011/TECH/web/06/11/hiding.online.identity/index.html
+link: https://www.cnn.com/2011/TECH/web/06/11/hiding.online.identity/index.html
---
pub_date: 2011-06-12
---
1
0

[orbot/master] many small changes to support new binary loading, startup and more
by n8fr8@torproject.org 26 Mar '19
by n8fr8@torproject.org 26 Mar '19
26 Mar '19
commit 56917567cd21a734a35f3bee0e56ba23793b6887
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Tue Mar 26 03:03:48 2019 -0400
many small changes to support new binary loading, startup and more
- improved handling of port conflicts
- fixed loading of tor binary on arm64-v8a
- changed how we execute shell commands
---
app/build.gradle | 6 +-
app/src/main/AndroidManifest.xml | 4 +-
jsocksAndroid/src/main/AndroidManifest.xml | 8 +-
orbotservice/build.gradle | 19 +-
.../org/torproject/android/service/TorService.java | 470 +++++++++++----------
.../android/service/TorServiceConstants.java | 4 +-
.../android/service/util/CustomNativeLoader.java | 132 ++++++
.../android/service/util/CustomShell.java | 101 +++++
.../service/util/CustomTorResourceInstaller.java | 244 +++++++++++
.../android/service/util/NativeLoader.java | 35 +-
.../service/util/OtherResourceInstaller.java | 6 +-
.../android/service/util/PortForwarder.java | 80 ++++
.../android/service/vpn/OrbotVpnManager.java | 29 +-
orbotservice/src/main/jni/Application.mk | 2 +-
14 files changed, 859 insertions(+), 281 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 6b59a43d..4994f51e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -34,8 +34,8 @@ android {
minSdkVersion 16
applicationId 'org.torproject.android'
targetSdkVersion 28
- versionCode 16060001
- versionName '16.0.6-BETA-1-tor-0.3.5.8'
+ versionCode 16060002
+ versionName '16.0.6-BETA-2-tor-0.3.5.8'
archivesBaseName = "Orbot-$versionName"
}
}
@@ -55,7 +55,7 @@ android {
reset()
// Specifies a list of ABIs that Gradle should create APKs for.
- include "x86", "armeabi", "armeabi-v7a"
+ include "x86", "armeabi", "armeabi-v7a", "x86_64", "arm64-v8a"
// Specifies that we do not want to also generate a universal APK that includes all ABIs.
universalApk true
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ea90afe7..8e3b6014 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.torproject.android"
- android:installLocation="auto">
+ android:installLocation="internalOnly">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
@@ -30,7 +30,7 @@
>
<activity
android:name=".OrbotMainActivity"
- android:excludeFromRecents="true"
+ android:excludeFromRecents="false"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
diff --git a/jsocksAndroid/src/main/AndroidManifest.xml b/jsocksAndroid/src/main/AndroidManifest.xml
index 7351fd23..fb20a650 100644
--- a/jsocksAndroid/src/main/AndroidManifest.xml
+++ b/jsocksAndroid/src/main/AndroidManifest.xml
@@ -1,11 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.jsocksandroid"
- android:versionCode="1"
- android:versionName="1.0" >
-
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="21" />
+ package="com.example.jsocksandroid" >
</manifest>
diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle
index c9f0e8a4..df861342 100644
--- a/orbotservice/build.gradle
+++ b/orbotservice/build.gradle
@@ -1,8 +1,8 @@
apply plugin: 'com.android.library'
android {
- compileSdkVersion 27
- buildToolsVersion '27.0.3'
+ compileSdkVersion 28
+ buildToolsVersion '28.0.3'
sourceSets {
main {
@@ -12,9 +12,10 @@ android {
defaultConfig {
minSdkVersion 16
- targetSdkVersion 27
- versionCode 1
- versionName "1.0"
+ targetSdkVersion 28
+ versionCode 16060001
+ versionName '16.0.6-BETA-1-tor-0.3.5.8-orbotservice'
+ archivesBaseName = "OrbotService-$versionName"
}
buildTypes {
@@ -27,9 +28,11 @@ android {
dependencies {
implementation project(':jsocksAndroid')
- implementation 'org.torproject:tor-android-binary:0.3.5.8-rc'
- implementation 'com.android.support:appcompat-v7:27.1.1'
- implementation 'com.jrummyapps:android-shell:1.0.1'
+ implementation 'org.torproject:tor-android-binary:0.3.5.8-rc-v2'
+ implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'com.jaredrummler:android-shell:1.0.0'
implementation fileTree(dir: 'libs', include: ['.so'])
testImplementation 'junit:junit:4.12'
+
+ implementation 'com.offbynull.portmapper:portmapper:2.0.5'
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorService.java b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
index f87c0a10..7f2b37cc 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -39,12 +39,14 @@ import android.support.v4.content.LocalBroadcastManager;
import android.text.TextUtils;
import android.util.Log;
-import com.jrummyapps.android.shell.CommandResult;
-import com.jrummyapps.android.shell.Shell;
+import com.jaredrummler.android.shell.CommandResult;
+import com.jaredrummler.android.shell.Shell;
import org.torproject.android.binary.TorResourceInstaller;
import org.torproject.android.control.ConfigEntry;
import org.torproject.android.control.TorControlConnection;
+import org.torproject.android.service.util.CustomShell;
+import org.torproject.android.service.util.CustomTorResourceInstaller;
import org.torproject.android.service.util.DummyActivity;
import org.torproject.android.service.util.OtherResourceInstaller;
import org.torproject.android.service.util.Prefs;
@@ -59,6 +61,7 @@ import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
@@ -87,12 +90,13 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private final static int CONTROL_SOCKET_TIMEOUT = 0;
private TorControlConnection conn = null;
- private Socket torConnSocket = null;
private int mLastProcessId = -1;
- private int mPortHTTP = HTTP_PROXY_PORT_DEFAULT;
- private int mPortSOCKS = SOCKS_PROXY_PORT_DEFAULT;
-
+ public static int mPortSOCKS = SOCKS_PROXY_PORT_DEFAULT;
+ public static int mPortHTTP = HTTP_PROXY_PORT_DEFAULT;
+ public static int mPortDns = TOR_DNS_PORT_DEFAULT;
+ public static int mPortTrans = TOR_TRANSPROXY_PORT_DEFAULT;
+
private static final int NOTIFY_ID = 1;
private static final int ERROR_NOTIFY_ID = 3;
private static final int HS_NOTIFY_ID = 4;
@@ -340,7 +344,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
*/
public int onStartCommand(Intent intent, int flags, int startId) {
- showToolbarNotification(getString(R.string.status_starting_up),NOTIFY_ID,R.drawable.ic_stat_tor);
+ showToolbarNotification("",NOTIFY_ID,R.drawable.ic_stat_tor);
if (intent != null)
exec (new IncomingIntentRouter(intent));
@@ -509,12 +513,18 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
try
{
- appBinHome = getDir(TorServiceConstants.DIRECTORY_TOR_BINARY, Application.MODE_PRIVATE);
- appCacheHome = getDir(TorServiceConstants.DIRECTORY_TOR_DATA,Application.MODE_PRIVATE);
+ appBinHome = getFilesDir();//getDir(TorServiceConstants.DIRECTORY_TOR_BINARY, Application.MODE_PRIVATE);
+ if (!appBinHome.exists())
+ appBinHome.mkdirs();
+
+ appCacheHome = getCacheDir();// getDir(TorServiceConstants.DIRECTORY_TOR_DATA,Application.MODE_PRIVATE);
+ if (!appCacheHome.exists())
+ appCacheHome.mkdirs();
fileTor= new File(appBinHome, TorServiceConstants.TOR_ASSET_KEY);
fileObfsclient = new File(appBinHome, TorServiceConstants.OBFSCLIENT_ASSET_KEY);
fileTorRc = new File(appBinHome, TorServiceConstants.TORRC_ASSET_KEY);
+ fileControlPort = new File(getFilesDir(), "control.txt");
mHSBasePath = new File(
getFilesDir().getAbsolutePath(),
@@ -542,15 +552,14 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (Build.VERSION.SDK_INT >= 26)
createNotificationChannel();
+ torUpgradeAndConfig();
+
new Thread(new Runnable ()
{
public void run ()
{
try
{
-
- torUpgradeAndConfig();
-
findExistingTorDaemon();
}
catch (Exception e)
@@ -578,90 +587,93 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
return mCurrentStatus;
}
- private void torUpgradeAndConfig() throws IOException, TimeoutException {
+ private boolean torUpgradeAndConfig() throws IOException, TimeoutException {
if (isTorUpgradeAndConfigComplete)
- return;
+ return true;
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null);
logNotice("checking binary version: " + version);
-
- TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome);
+ CustomTorResourceInstaller installer = new CustomTorResourceInstaller(this, appBinHome);
logNotice("upgrading binaries to latest version: " + BINARY_TOR_VERSION);
fileTor = installer.installResources();
+ fileTor = new File(appBinHome,"tor");
+ if (fileTor != null && fileTor.canExecute()) {
+ prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED, BINARY_TOR_VERSION).apply();
- if (fileTor != null && fileTor.canExecute())
- prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED,BINARY_TOR_VERSION).apply();
+ fileTorRc = new File(appBinHome,"torrc");//installer.getTorrcFile();
+ if (!fileTorRc.exists())
+ return false;
- fileTorRc = installer.getTorrcFile();
+ OtherResourceInstaller oInstaller = new OtherResourceInstaller(this, appBinHome);
+ oInstaller.installResources();
- OtherResourceInstaller oInstaller = new OtherResourceInstaller(this, appBinHome);
- oInstaller.installResources();
+ isTorUpgradeAndConfigComplete = true;
+
+ return true;
+ }
- updateTorConfigFile ();
- isTorUpgradeAndConfigComplete = true;
+
+ return false;
}
- private boolean updateTorConfigFile () throws IOException, TimeoutException
+ private File updateTorrcCustomFile () throws IOException, TimeoutException
{
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
- TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome);
-
StringBuffer extraLines = new StringBuffer();
-
- String TORRC_CONTROLPORT_FILE_KEY = "ControlPortWriteToFile";
- fileControlPort = new File(appBinHome, "control.txt");
- extraLines.append(TORRC_CONTROLPORT_FILE_KEY).append(' ').append(fileControlPort.getCanonicalPath()).append('\n');
-// extraLines.append("RunAsDaemon 1").append('\n');
- // extraLines.append("AvoidDiskWrites 1").append('\n');
+ extraLines.append("\n");
+ extraLines.append("ControlPortWriteToFile").append(' ').append(fileControlPort.getCanonicalPath()).append('\n');
+
+ // extraLines.append("RunAsDaemon 1").append('\n');
+ // extraLines.append("AvoidDiskWrites 1").append('\n');
- String socksPortPref = prefs.getString(OrbotConstants.PREF_SOCKS,
- String.valueOf(TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT));
+ String socksPortPref = prefs.getString(OrbotConstants.PREF_SOCKS, String.valueOf(TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT));
+
if (socksPortPref.indexOf(':')!=-1)
socksPortPref = socksPortPref.split(":")[1];
- if (!socksPortPref.equalsIgnoreCase("auto"))
- {
- boolean isPortUsed = TorServiceUtils.isPortOpen("127.0.0.1",Integer.parseInt(socksPortPref),500);
-
- if (isPortUsed) //the specified port is not available, so let Tor find one instead
- socksPortPref = "auto";
- }
+ socksPortPref = checkPortOrAuto(socksPortPref);
- String isolate = " ";
+ String isolate = "";
if(prefs.getBoolean(OrbotConstants.PREF_ISOLATE_DEST, false))
{
- isolate += "IsolateDestAddr ";
+ isolate += " IsolateDestAddr ";
}
- String ipv6Pref = " IPv6Traffic ";
+ String ipv6Pref = "";
+
if(prefs.getBoolean(OrbotConstants.PREF_PREFER_IPV6, true))
{
- ipv6Pref += "PreferIPv6 ";
+ ipv6Pref += " IPv6Traffic PreferIPv6 ";
}
+
if(prefs.getBoolean(OrbotConstants.PREF_DISABLE_IPV4, false))
{
- ipv6Pref += "NoIPv4Traffic ";
+ ipv6Pref += " IPv6Traffic NoIPv4Traffic ";
}
extraLines.append("SOCKSPort ").append(socksPortPref).append(isolate).append(ipv6Pref).append('\n');
extraLines.append("SafeSocks 0").append('\n');
extraLines.append("TestSocks 0").append('\n');
+
if (Prefs.openProxyOnAllInterfaces())
extraLines.append("SocksListenAddress 0.0.0.0").append('\n');
- extraLines.append("HTTPTunnelPort ").append(mPortHTTP).append(isolate).append(ipv6Pref).append('\n');
+ String httpPortPref = HTTP_PROXY_PORT_DEFAULT + "";
+ extraLines.append("HTTPTunnelPort ").append(checkPortOrAuto(httpPortPref)).append('\n');
+
if(prefs.getBoolean(OrbotConstants.PREF_CONNECTION_PADDING, false))
{
extraLines.append("ConnectionPadding 1").append('\n');
}
+
if(prefs.getBoolean(OrbotConstants.PREF_REDUCED_CONNECTION_PADDING, true))
{
extraLines.append("ReducedConnectionPadding 1").append('\n');
@@ -670,9 +682,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
String transPort = prefs.getString("pref_transport", TorServiceConstants.TOR_TRANSPROXY_PORT_DEFAULT+"");
String dnsPort = prefs.getString("pref_dnsport", TorServiceConstants.TOR_DNS_PORT_DEFAULT+"");
- extraLines.append("TransPort ").append(transPort).append('\n');
- extraLines.append("DNSPort ").append(dnsPort).append('\n');
-
+ extraLines.append("TransPort ").append(checkPortOrAuto(transPort)).append('\n');
+ extraLines.append("DNSPort ").append(checkPortOrAuto(dnsPort)).append('\n');
extraLines.append("VirtualAddrNetwork 10.192.0.0/10").append('\n');
extraLines.append("AutomapHostsOnResolve 1").append('\n');
@@ -681,13 +692,16 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (Prefs.useDebugLogging())
{
- extraLines.append("Log debug syslog").append('\n');
+ extraLines.append("Log debug syslog").append('\n');
extraLines.append("Log info syslog").append('\n');
extraLines.append("SafeLogging 0").append('\n');
}
-
- processSettingsImpl(extraLines);
+
+ extraLines = processSettingsImpl(extraLines);
+
+ if (extraLines == null)
+ return null;
String torrcCustom = new String(prefs.getString("pref_custom_torrc", "").getBytes("US-ASCII"));
extraLines.append(torrcCustom).append('\n');
@@ -697,14 +711,38 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
debug("torrc.custom=" + extraLines.toString());
File fileTorRcCustom = new File(fileTorRc.getAbsolutePath() + ".custom");
- boolean success = installer.updateTorConfigCustom(fileTorRcCustom, extraLines.toString());
+ boolean success = updateTorConfigCustom(fileTorRcCustom, extraLines.toString());
- if (success)
+ if (success && fileTorRcCustom.exists())
{
logNotice ("success.");
+ return fileTorRcCustom;
}
-
- return success;
+ else
+ return null;
+
+ }
+
+ private String checkPortOrAuto (String port)
+ {
+ if (!port.equalsIgnoreCase("auto"))
+ {
+ boolean isPortUsed = TorServiceUtils.isPortOpen("127.0.0.1",Integer.parseInt(port),500);
+
+ if (isPortUsed) //the specified port is not available, so let Tor find one instead
+ port = "auto";
+ }
+
+ return port;
+ }
+
+ public boolean updateTorConfigCustom(File fileTorRcCustom, String extraLines) throws IOException, FileNotFoundException, TimeoutException {
+ FileWriter fos = new FileWriter(fileTorRcCustom, false);
+ PrintWriter ps = new PrintWriter(fos);
+ ps.print(extraLines);
+ ps.flush();
+ ps.close();
+ return true;
}
/**
@@ -742,27 +780,28 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
/**
* The entire process for starting tor and related services is run from this method.
*/
- private synchronized void startTor() {
+ private void startTor() {
String torProcId = null;
try { if (conn != null) torProcId = conn.getInfo("process/pid"); }
catch (Exception e){}
- // STATUS_STARTING is set in onCreate()
- if (mCurrentStatus == STATUS_STOPPING) {
- // these states should probably be handled better
- sendCallbackLogMessage("Ignoring start request, currently " + mCurrentStatus);
- return;
- } else if (mCurrentStatus == STATUS_ON && (torProcId != null)) {
-
- sendCallbackLogMessage("Ignoring start request, already started.");
- setTorNetworkEnabled (true);
+ try {
- return;
- }
+ // STATUS_STARTING is set in onCreate()
+ if (mCurrentStatus == STATUS_STOPPING) {
+ // these states should probably be handled better
+ sendCallbackLogMessage("Ignoring start request, currently " + mCurrentStatus);
+ return;
+ } else if (mCurrentStatus == STATUS_ON && (torProcId != null)) {
+
+ sendCallbackLogMessage("Ignoring start request, already started.");
+ setTorNetworkEnabled (true);
+
+ return;
+ }
- try {
// make sure there are no stray daemons running
// killAllDaemons();
@@ -786,89 +825,93 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
boolean success = runTorShellCmd();
+ if (success)
+ {
// if (mPortHTTP != -1)
// runPolipoShellCmd();
- // Tor is running, update new .onion names at db
- ContentResolver mCR = getApplicationContext().getContentResolver();
- Cursor hidden_services = mCR.query(HS_CONTENT_URI, hsProjection, null, null, null);
- if(hidden_services != null) {
- try {
- while (hidden_services.moveToNext()) {
- String HSDomain = hidden_services.getString(hidden_services.getColumnIndex(HiddenService.DOMAIN));
- Integer HSLocalPort = hidden_services.getInt(hidden_services.getColumnIndex(HiddenService.PORT));
- Integer HSAuthCookie = hidden_services.getInt(hidden_services.getColumnIndex(HiddenService.AUTH_COOKIE));
- String HSAuthCookieValue = hidden_services.getString(hidden_services.getColumnIndex(HiddenService.AUTH_COOKIE_VALUE));
-
- // Update only new domains or restored from backup with auth cookie
- if((HSDomain == null || HSDomain.length() < 1) || (HSAuthCookie == 1 && (HSAuthCookieValue == null || HSAuthCookieValue.length() < 1))) {
- String hsDirPath = new File(mHSBasePath.getAbsolutePath(),"hs" + HSLocalPort).getCanonicalPath();
- File file = new File(hsDirPath, "hostname");
-
- if (file.exists())
- {
- ContentValues fields = new ContentValues();
-
- try {
- String onionHostname = Utils.readString(new FileInputStream(file)).trim();
- if(HSAuthCookie == 1) {
- String[] aux = onionHostname.split(" ");
- onionHostname = aux[0];
- fields.put(HiddenService.AUTH_COOKIE_VALUE, aux[1]);
+ // Tor is running, update new .onion names at db
+ ContentResolver mCR = getApplicationContext().getContentResolver();
+ Cursor hidden_services = mCR.query(HS_CONTENT_URI, hsProjection, null, null, null);
+ if(hidden_services != null) {
+ try {
+ while (hidden_services.moveToNext()) {
+ String HSDomain = hidden_services.getString(hidden_services.getColumnIndex(HiddenService.DOMAIN));
+ Integer HSLocalPort = hidden_services.getInt(hidden_services.getColumnIndex(HiddenService.PORT));
+ Integer HSAuthCookie = hidden_services.getInt(hidden_services.getColumnIndex(HiddenService.AUTH_COOKIE));
+ String HSAuthCookieValue = hidden_services.getString(hidden_services.getColumnIndex(HiddenService.AUTH_COOKIE_VALUE));
+
+ // Update only new domains or restored from backup with auth cookie
+ if ((HSDomain == null || HSDomain.length() < 1) || (HSAuthCookie == 1 && (HSAuthCookieValue == null || HSAuthCookieValue.length() < 1))) {
+ String hsDirPath = new File(mHSBasePath.getAbsolutePath(), "hs" + HSLocalPort).getCanonicalPath();
+ File file = new File(hsDirPath, "hostname");
+
+ if (file.exists()) {
+ ContentValues fields = new ContentValues();
+
+ try {
+ String onionHostname = Utils.readString(new FileInputStream(file)).trim();
+ if (HSAuthCookie == 1) {
+ String[] aux = onionHostname.split(" ");
+ onionHostname = aux[0];
+ fields.put(HiddenService.AUTH_COOKIE_VALUE, aux[1]);
+ }
+ fields.put(HiddenService.DOMAIN, onionHostname);
+ mCR.update(HS_CONTENT_URI, fields, "port=" + HSLocalPort, null);
+ } catch (FileNotFoundException e) {
+ logException("unable to read onion hostname file", e);
+ showToolbarNotification(getString(R.string.unable_to_read_hidden_service_name), HS_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
}
- fields.put(HiddenService.DOMAIN, onionHostname);
- mCR.update(HS_CONTENT_URI, fields, "port=" + HSLocalPort , null);
- } catch (FileNotFoundException e) {
- logException("unable to read onion hostname file",e);
+ } else {
showToolbarNotification(getString(R.string.unable_to_read_hidden_service_name), HS_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
- }
- }
- else
- {
- showToolbarNotification(getString(R.string.unable_to_read_hidden_service_name), HS_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
+ }
}
}
+
+ } catch (NumberFormatException e) {
+ Log.e(OrbotConstants.TAG, "error parsing hsport", e);
+ } catch (Exception e) {
+ Log.e(OrbotConstants.TAG, "error starting share server", e);
}
- } catch (NumberFormatException e) {
- Log.e(OrbotConstants.TAG,"error parsing hsport",e);
- } catch (Exception e) {
- Log.e(OrbotConstants.TAG,"error starting share server",e);
+ hidden_services.close();
}
-
- hidden_services.close();
}
} catch (Exception e) {
logException("Unable to start Tor: " + e.toString(), e);
+ stopTor();
showToolbarNotification(
getString(R.string.unable_to_start_tor) + ": " + e.getMessage(),
ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
- //stopTor();
+
}
}
-
-
- private synchronized boolean runTorShellCmd() throws Exception
+ private boolean runTorShellCmd() throws Exception
{
boolean result = true;
- String torrcPath = new File(appBinHome, TORRC_ASSET_KEY).getCanonicalPath();
+ File fileTorrcCustom = updateTorrcCustomFile();
+
+ //make sure Tor exists and we can execute it
+ if ((!fileTor.exists()) || (!fileTor.canExecute()))
+ return false;
+
+ if ((!fileTorRc.exists()) || (!fileTorRc.canRead()) )
+ return false;
+
+ if ((!fileTorrcCustom.exists()) || (!fileTorrcCustom.canRead()) )
+ return false;
- updateTorConfigFile();
-
sendCallbackLogMessage(getString(R.string.status_starting_up));
-
+
String torCmdString = fileTor.getCanonicalPath()
+ " DataDirectory " + appCacheHome.getCanonicalPath()
- + " --defaults-torrc " + torrcPath
- + " -f " + torrcPath + ".custom";
+ + " --defaults-torrc " + fileTorRc.getCanonicalPath()
+ + " -f " + fileTorrcCustom.getCanonicalPath();
- debug(torCmdString);
-
-
int exitCode = -1;
try {
@@ -880,39 +923,37 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
return false;
}
+ if (exitCode == 0) {
+ logNotice("Tor configuration VERIFIED.");
+ try {
+ exitCode = exec(torCmdString, false);
+ } catch (Exception e) {
+ logNotice("Tor was unable to start: " + e.getMessage());
+ result = false;
- try {
- exitCode = exec(torCmdString, true);
- }
- catch (Exception e)
- {
- logNotice("Tor was unable to start: " + e.getMessage());
- return false;
- }
+ throw new Exception("Tor was unable to start: " + e.getMessage());
- if (exitCode != 0)
- {
- logNotice("Tor did not start. Exit:" + exitCode);
- return false;
- }
-
- //now try to connect
- mLastProcessId = initControlConnection (100,false);
+ }
- if (mLastProcessId == -1)
- {
- logNotice(getString(R.string.couldn_t_start_tor_process_) + "; exit=" + exitCode);
- sendCallbackLogMessage(getString(R.string.couldn_t_start_tor_process_));
-
- throw new Exception ("Unable to start Tor");
- }
- else
- {
-
- logNotice("Tor started; process id=" + mLastProcessId);
-
+ if (exitCode != 0) {
+ logNotice("Tor did not start. Exit:" + exitCode);
+ return false;
+ }
+
+ //now try to connect
+ mLastProcessId = initControlConnection(10, false);
+
+ if (mLastProcessId == -1) {
+ logNotice(getString(R.string.couldn_t_start_tor_process_) + "; exit=" + exitCode);
+ result = false;
+ throw new Exception(getString(R.string.couldn_t_start_tor_process_) + "; exit=" + exitCode);
+ } else {
+
+ logNotice("Tor started; process id=" + mLastProcessId);
+ result = true;
+ }
}
-
+
return result;
}
@@ -924,74 +965,29 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private int exec (String cmd, boolean wait) throws Exception
{
- CommandResult shellResult = Shell.run(cmd);
- debug("CMD: " + cmd + "; SUCCESS=" + shellResult.isSuccessful());
-
- if (!shellResult.isSuccessful()) {
- throw new Exception("Error: " + shellResult.exitCode + " ERR=" + shellResult.getStderr() + " OUT=" + shellResult.getStdout());
- }
-
- /**
- SimpleCommand command = new SimpleCommand(cmd);
- mShell.add(command);
- if (wait)
- command.waitForFinish();
- return command.getExitCode();
- **/
- return shellResult.exitCode;
- }
-
- /**
- private void updatePolipoConfig () throws FileNotFoundException, IOException
- {
-
-
- File file = new File(appBinHome, POLIPOCONFIG_ASSET_KEY);
-
- Properties props = new Properties();
-
- props.load(new FileReader(file));
-
- props.put("socksParentProxy", "\"localhost:" + mPortSOCKS + "\"");
- props.put("proxyPort",mPortHTTP+"");
-
- props.store(new FileWriter(file), "updated");
-
- }**/
-
-
- /**
- private void runPolipoShellCmd () throws Exception
- {
-
- logNotice( "Starting polipo process");
+ CommandResult result = CustomShell.run("sh",wait, null, cmd);
+ debug("executing: " + cmd);
+ debug("stdout: " + result.getStdout());
+ debug("stderr: " + result.getStderr());
- updatePolipoConfig();
+ return result.exitCode;
- String polipoConfigPath = new File(appBinHome, POLIPOCONFIG_ASSET_KEY).getCanonicalPath();
- String cmd = (filePolipo.getCanonicalPath() + " -c " + polipoConfigPath);
- CommandResult shellResult = Shell.run(cmd);
-
- sendCallbackLogMessage(getString(R.string.privoxy_is_running_on_port_) + mPortHTTP);
-
- logNotice("Polipo is running");
-
- }**/
+ }
protected TorControlConnection getControlConnection ()
{
return conn;
}
- private int initControlConnection (int maxTries, boolean isReconnect) throws Exception, RuntimeException
+ private int initControlConnection (int maxTries, boolean isReconnect) throws Exception
{
int controlPort = -1;
int attempt = 0;
logNotice( "Waiting for control port...");
- while (conn == null && attempt++ < maxTries)
+ while (conn == null && attempt++ < maxTries && (mCurrentStatus != STATUS_OFF))
{
try
{
@@ -1001,8 +997,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (controlPort != -1)
{
logNotice( "Connecting to control port: " + controlPort);
-
- torConnSocket = new Socket(IP_LOCALHOST, controlPort);
+
+ Socket torConnSocket = new Socket(IP_LOCALHOST, controlPort);
torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
conn = new TorControlConnection(torConnSocket);
@@ -1022,7 +1018,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
try {
// logNotice("waiting...");
- Thread.sleep(1000); }
+ Thread.sleep(2000); }
catch (Exception e){}
}
@@ -1054,6 +1050,27 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
confSocks = st.nextToken().split(":")[1];
confSocks = confSocks.substring(0,confSocks.length()-1);
mPortSOCKS = Integer.parseInt(confSocks);
+
+ String confHttp = conn.getInfo("net/listeners/httptunnel");
+ st = new StringTokenizer(confHttp," ");
+
+ confHttp = st.nextToken().split(":")[1];
+ confHttp = confHttp.substring(0,confHttp.length()-1);
+ mPortHTTP = Integer.parseInt(confHttp);
+
+ String confDns = conn.getInfo("net/listeners/dns");
+ st = new StringTokenizer(confDns," ");
+
+ confDns = st.nextToken().split(":")[1];
+ confDns = confDns.substring(0,confDns.length()-1);
+ mPortDns = Integer.parseInt(confDns);
+
+ String confTrans = conn.getInfo("net/listeners/trans");
+ st = new StringTokenizer(confTrans," ");
+
+ confTrans = st.nextToken().split(":")[1];
+ confTrans = confDns.substring(0,confTrans.length()-1);
+ mPortTrans = Integer.parseInt(confTrans);
return Integer.parseInt(torProcId);
@@ -1066,8 +1083,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
}
-
- return -1;
+ throw new Exception("Tor control port could not be found");
+
}
@@ -1233,13 +1250,16 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
return false;
}
-
- public void setTorNetworkEnabled (final boolean isEnabled)
+
+ private String lastNetworkValue = "0";
+
+ public void setTorNetworkEnabled (final boolean isEnabled) throws IOException
{
+ final String newValue =isEnabled ? "0" : "1";
//it is possible to not have a connection yet, and someone might try to newnym
- if (conn != null)
+ if (conn != null && (!lastNetworkValue.equals(newValue)))
{
new Thread ()
{
@@ -1247,8 +1267,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{
try {
- conn.setConf("DisableNetwork", isEnabled ? "0" : "1");
-
+ conn.setConf("DisableNetwork", newValue);
+ lastNetworkValue = newValue;
}
catch (Exception ioe){
debug("error requesting newnym: " + ioe.getLocalizedMessage());
@@ -1431,9 +1451,13 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (doNetworKSleep && mCurrentStatus != STATUS_OFF)
{
- setTorNetworkEnabled (mConnectivity);
-
- if (!mConnectivity)
+ try {
+ setTorNetworkEnabled (mConnectivity);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ if (!mConnectivity)
{
logNotice(context.getString(R.string.no_network_connectivity_putting_tor_to_sleep_));
showToolbarNotification(getString(R.string.no_internet_connection_tor),NOTIFY_ID,R.drawable.ic_stat_tor_off);
@@ -1451,7 +1475,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
};
- private boolean processSettingsImpl (StringBuffer extraLines) throws IOException
+ private StringBuffer processSettingsImpl (StringBuffer extraLines) throws IOException
{
logNotice(getString(R.string.updating_settings_in_tor_service));
@@ -1612,7 +1636,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{
showToolbarNotification (getString(R.string.your_reachableaddresses_settings_caused_an_exception_),ERROR_NOTIFY_ID,R.drawable.ic_stat_notifyerr);
- return false;
+ return null;
}
try
@@ -1636,7 +1660,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
showToolbarNotification (getString(R.string.your_relay_settings_caused_an_exception_),ERROR_NOTIFY_ID,R.drawable.ic_stat_notifyerr);
- return false;
+ return null;
}
ContentResolver mCR = getApplicationContext().getContentResolver();
@@ -1685,7 +1709,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
client_cookies.close();
}
- return true;
+ return extraLines;
}
public static String flattenToAscii(String string) {
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
index 4b62a6a8..b557de80 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
@@ -10,8 +10,8 @@ public interface TorServiceConstants {
String TOR_APP_USERNAME = "org.torproject.android";
String BROWSER_APP_USERNAME = "info.guardianproject.orfox";
- String DIRECTORY_TOR_BINARY = "bin";
- String DIRECTORY_TOR_DATA = "data";
+ //String DIRECTORY_TOR_BINARY = "bin";
+ //String DIRECTORY_TOR_DATA = "data";
//name of the tor C binary
String TOR_ASSET_KEY = "tor";
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java
new file mode 100644
index 00000000..6e75a98e
--- /dev/null
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java
@@ -0,0 +1,132 @@
+package org.torproject.android.service.util;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.os.Build;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
+
+public class CustomNativeLoader {
+
+ private final static String LIB_NAME = "tor";
+ private final static String LIB_SO_NAME = "tor.so";
+
+ private final static String TAG = "TorNativeLoader";
+
+ private static boolean loadFromZip(Context context, File destLocalFile, String arch) {
+
+
+ ZipFile zipFile = null;
+ InputStream stream = null;
+
+ try {
+ zipFile = new ZipFile(context.getApplicationInfo().sourceDir);
+ ZipEntry entry = zipFile.getEntry("lib/" + arch + "/" + LIB_SO_NAME);
+ if (entry == null) {
+ throw new Exception("Unable to find file in apk:" + "lib/" + arch + "/" + LIB_NAME);
+ }
+
+ //how we wrap this in another stream because the native .so is zipped itself
+ stream = zipFile.getInputStream(entry);
+
+ OutputStream out = new FileOutputStream(destLocalFile);
+ byte[] buf = new byte[4096];
+ int len;
+ while ((len = stream.read(buf)) > 0) {
+ Thread.yield();
+ out.write(buf, 0, len);
+ }
+ out.close();
+
+ if (Build.VERSION.SDK_INT >= 9) {
+ destLocalFile.setReadable(true, false);
+ destLocalFile.setExecutable(true, false);
+ destLocalFile.setWritable(true);
+ }
+
+ return true;
+ } catch (Exception e) {
+ Log.e(TAG, e.getMessage());
+ } finally {
+ if (stream != null) {
+ try {
+ stream.close();
+ } catch (Exception e) {
+ Log.e(TAG, e.getMessage());
+ }
+ }
+ if (zipFile != null) {
+ try {
+ zipFile.close();
+ } catch (Exception e) {
+ Log.e(TAG, e.getMessage());
+ }
+ }
+ }
+ return false;
+ }
+
+ public static synchronized File initNativeLibs(Context context, File destLocalFile) {
+
+ try {
+ String folder = Build.CPU_ABI;
+
+ /**
+ try {
+
+ if (Build.CPU_ABI.equalsIgnoreCase("arm64-v8a")) {
+ folder = "arm64-v8a";
+ }
+ else if (Build.CPU_ABI.equalsIgnoreCase("arm64")) {
+ folder = "arm64";
+ }
+ else if (Build.CPU_ABI.equalsIgnoreCase("x86_64")) {
+ folder = "x86_64";
+ }
+ else if (Build.CPU_ABI.equalsIgnoreCase("armeabi-v7a")) {
+ folder = "armeabi-v7a";
+ }
+ else if (Build.CPU_ABI.equalsIgnoreCase("armeabi")) {
+ folder = "armeabi";
+ } else if (Build.CPU_ABI.equalsIgnoreCase("x86")) {
+ folder = "x86";
+ } else if (Build.CPU_ABI.equalsIgnoreCase("mips")) {
+ folder = "mips";
+ } else {
+ folder = "armeabi";
+ //FileLog.e("tmessages", "Unsupported arch: " + Build.CPU_ABI);
+ }
+
+ } catch (Exception e) {
+ // FileLog.e("tmessages", e);
+ Log.e(TAG, e.getMessage(),e);
+ folder = "armeabi";
+ }**/
+
+
+ String javaArch = System.getProperty("os.arch");
+ if (javaArch != null && javaArch.contains("686")) {
+ folder = "x86";
+ }
+
+
+ if (loadFromZip(context, destLocalFile, folder)) {
+ return destLocalFile;
+ }
+
+ } catch (Throwable e) {
+ Log.e(TAG, e.getMessage(),e);
+ }
+
+
+ return null;
+ }
+}
+
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomShell.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomShell.java
new file mode 100644
index 00000000..8bd5fe6f
--- /dev/null
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomShell.java
@@ -0,0 +1,101 @@
+package org.torproject.android.service.util;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.WorkerThread;
+
+import com.jaredrummler.android.shell.CommandResult;
+import com.jaredrummler.android.shell.Shell;
+import com.jaredrummler.android.shell.ShellExitCode;
+import com.jaredrummler.android.shell.StreamGobbler;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class CustomShell extends Shell {
+
+
+ @WorkerThread
+ public static CommandResult run(@NonNull String shell, boolean waitFor, @Nullable String[] env, @NonNull String command) {
+ List<String> stdout = Collections.synchronizedList(new ArrayList<String>());
+ List<String> stderr = Collections.synchronizedList(new ArrayList<String>());
+ int exitCode = -1;
+
+ try {
+
+ // setup our process, retrieve stdin stream, and stdout/stderr gobblers
+ //Process process = runWithEnv(command, env);
+ ProcessBuilder builder = new ProcessBuilder();
+ builder.command("/system/bin/sh", "-c", command);
+ Process process = builder.start();
+
+ // DataOutputStream stdin = new DataOutputStream(process.getOutputStream());
+ StreamGobbler stdoutGobbler = null;
+ StreamGobbler stderrGobbler = null;
+
+ if (waitFor) {
+ stdoutGobbler = new StreamGobbler(process.getInputStream(), stdout);
+ stderrGobbler = new StreamGobbler(process.getErrorStream(), stderr);
+
+ // start gobbling and write our commands to the shell
+ stdoutGobbler.start();
+ stderrGobbler.start();
+ }
+
+ /**
+
+ try {
+ for (String write : commands) {
+ stdin.write((write + " &\n").getBytes("UTF-8"));
+ stdin.flush();
+ }
+
+ if (waitFor)
+ stdin.write("exit\n".getBytes("UTF-8"));
+
+ stdin.flush();
+ } catch (IOException e) {
+ //noinspection StatementWithEmptyBody
+ if (e.getMessage().contains("EPIPE")) {
+ // method most horrid to catch broken pipe, in which case we do nothing. the command is not a shell, the
+ // shell closed stdin, the script already contained the exit command, etc. these cases we want the output
+ // instead of returning null
+ } else {
+ // other issues we don't know how to handle, leads to returning null
+ throw e;
+ }
+ }**/
+
+ // wait for our process to finish, while we gobble away in the background
+ if (waitFor)
+ exitCode = process.waitFor();
+ else
+ exitCode = 0;
+
+ // make sure our threads are done gobbling, our streams are closed, and the process is destroyed - while the
+ // latter two shouldn't be needed in theory, and may even produce warnings, in "normal" Java they are required
+ // for guaranteed cleanup of resources, so lets be safe and do this on Android as well
+ /**
+ try {
+ stdin.close();
+ } catch (IOException e) {
+ // might be closed already
+ }**/
+
+ if (waitFor) {
+ stdoutGobbler.join();
+ stderrGobbler.join();
+ }
+
+ } catch (InterruptedException e) {
+ exitCode = ShellExitCode.WATCHDOG_EXIT;
+ } catch (IOException e) {
+ exitCode = ShellExitCode.SHELL_WRONG_UID;
+ }
+
+ return new CommandResult(stdout, stderr, exitCode);
+ }
+}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
new file mode 100644
index 00000000..043987e2
--- /dev/null
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
@@ -0,0 +1,244 @@
+package org.torproject.android.service.util;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.util.Log;
+
+import org.torproject.android.binary.NativeLoader;
+import org.torproject.android.binary.TorServiceConstants;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.concurrent.TimeoutException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+
+public class CustomTorResourceInstaller implements TorServiceConstants {
+
+
+ File installFolder;
+ Context context;
+
+ File fileTorrc;
+ File fileTor;
+
+ public CustomTorResourceInstaller (Context context, File installFolder)
+ {
+ this.installFolder = installFolder;
+ this.context = context;
+ }
+
+ public File getTorrcFile ()
+ {
+ return fileTorrc;
+ }
+
+ public File getTorFile ()
+ {
+ return fileTor;
+ }
+
+ /**
+ private void deleteDirectory(File file) {
+ if( file.exists() ) {
+ if (file.isDirectory()) {
+ File[] files = file.listFiles();
+ for(int i=0; i<files.length; i++) {
+ if(files[i].isDirectory()) {
+ deleteDirectory(files[i]);
+ }
+ else {
+ files[i].delete();
+ }
+ }
+ }
+
+ file.delete();
+ }
+ }**/
+
+ //
+ /*
+ * Extract the Tor resources from the APK file using ZIP
+ *
+ * @File path to the Tor executable
+ */
+ public File installResources () throws IOException, TimeoutException
+ {
+
+ fileTor = new File(installFolder, TOR_ASSET_KEY);
+
+ if (!installFolder.exists())
+ installFolder.mkdirs();
+
+ installGeoIP();
+ fileTorrc = assetToFile(COMMON_ASSET_KEY + TORRC_ASSET_KEY, TORRC_ASSET_KEY, false, false);
+
+ File fileNativeDir = new File(getNativeLibraryDir(context));
+ fileTor = new File(fileNativeDir,TOR_ASSET_KEY + ".so");
+
+ if (fileTor.exists())
+ {
+ if (fileTor.canExecute())
+ return fileTor;
+ else
+ {
+ setExecutable(fileTor);
+
+ if (fileTor.canExecute())
+ return fileTor;
+ }
+ }
+
+ if (fileTor.exists()) {
+ InputStream is = new FileInputStream(fileTor);
+ streamToFile(is, fileTor, false, true);
+ setExecutable(fileTor);
+
+ if (fileTor.exists() && fileTor.canExecute())
+ return fileTor;
+ }
+
+ //let's try another approach
+ fileTor = new File(installFolder, TOR_ASSET_KEY);
+ //fileTor = NativeLoader.initNativeLibs(context,fileTor);
+ CustomNativeLoader.initNativeLibs(context,fileTor);
+
+ setExecutable(fileTor);
+
+ if (fileTor != null && fileTor.exists() && fileTor.canExecute())
+ return fileTor;
+
+ return null;
+ }
+
+
+ // Return Full path to the directory where native JNI libraries are stored.
+ private static String getNativeLibraryDir(Context context) {
+ ApplicationInfo appInfo = context.getApplicationInfo();
+ return appInfo.nativeLibraryDir;
+ }
+
+
+ public boolean updateTorConfigCustom (File fileTorRcCustom, String extraLines) throws IOException, FileNotFoundException, TimeoutException
+ {
+ if (fileTorRcCustom.exists())
+ {
+ fileTorRcCustom.delete();
+ Log.d("torResources","deleting existing torrc.custom");
+ }
+ else
+ fileTorRcCustom.createNewFile();
+
+ FileOutputStream fos = new FileOutputStream(fileTorRcCustom, false);
+ PrintStream ps = new PrintStream(fos);
+ ps.print(extraLines);
+ ps.close();
+
+ return true;
+ }
+
+ /*
+ * Extract the Tor binary from the APK file using ZIP
+ */
+
+ private boolean installGeoIP () throws IOException
+ {
+
+ assetToFile(COMMON_ASSET_KEY + GEOIP_ASSET_KEY, GEOIP_ASSET_KEY, false, false);
+
+ assetToFile(COMMON_ASSET_KEY + GEOIP6_ASSET_KEY, GEOIP6_ASSET_KEY, false, false);
+
+ return true;
+ }
+
+ /*
+ * Reads file from assetPath/assetKey writes it to the install folder
+ */
+ private File assetToFile(String assetPath, String assetKey, boolean isZipped, boolean isExecutable) throws IOException {
+ InputStream is = context.getAssets().open(assetPath);
+ File outFile = new File(installFolder, assetKey);
+ streamToFile(is, outFile, false, isZipped);
+ if (isExecutable) {
+ setExecutable(outFile);
+ }
+ return outFile;
+ }
+
+
+ /*
+ * Write the inputstream contents to the file
+ */
+ private static boolean streamToFile(InputStream stm, File outFile, boolean append, boolean zip) throws IOException
+
+ {
+ byte[] buffer = new byte[FILE_WRITE_BUFFER_SIZE];
+
+ int bytecount;
+
+ OutputStream stmOut = new FileOutputStream(outFile.getAbsolutePath(), append);
+ ZipInputStream zis = null;
+
+ if (zip)
+ {
+ zis = new ZipInputStream(stm);
+ ZipEntry ze = zis.getNextEntry();
+ stm = zis;
+
+ }
+
+ while ((bytecount = stm.read(buffer)) > 0)
+ {
+
+ stmOut.write(buffer, 0, bytecount);
+
+ }
+
+ stmOut.close();
+ stm.close();
+
+ if (zis != null)
+ zis.close();
+
+
+ return true;
+
+ }
+
+
+
+ private void setExecutable(File fileBin) {
+ fileBin.setReadable(true);
+ fileBin.setExecutable(true);
+ fileBin.setWritable(false);
+ fileBin.setWritable(true, true);
+ }
+
+ private static File[] listf(String directoryName) {
+
+ // .............list file
+ File directory = new File(directoryName);
+
+ // get all the files from a directory
+ File[] fList = directory.listFiles();
+
+ if (fList != null)
+ for (File file : fList) {
+ if (file.isFile()) {
+ Log.d(TAG,file.getAbsolutePath());
+ } else if (file.isDirectory()) {
+ listf(file.getAbsolutePath());
+ }
+ }
+
+ return fList;
+ }
+}
+
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/NativeLoader.java b/orbotservice/src/main/java/org/torproject/android/service/util/NativeLoader.java
index 4ad10bb1..8621add2 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/NativeLoader.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/NativeLoader.java
@@ -9,6 +9,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
@@ -24,8 +25,20 @@ public class NativeLoader {
InputStream stream = null;
try {
zipFile = new ZipFile(context.getApplicationInfo().sourceDir);
+
+ /**
+ Enumeration<? extends ZipEntry> entries = zipFile.entries();
+ while (entries.hasMoreElements())
+ {
+ ZipEntry entry = entries.nextElement();
+ Log.d("Zip","entry: " + entry.getName());
+ }
+ **/
+
ZipEntry entry = zipFile.getEntry("lib/" + folder + "/" + libName + ".so");
if (entry == null) {
+ entry = zipFile.getEntry("lib/" + folder + "/" + libName);
+ if (entry == null)
throw new Exception("Unable to find file in apk:" + "lib/" + folder + "/" + libName);
}
stream = zipFile.getInputStream(entry);
@@ -68,27 +81,7 @@ public class NativeLoader {
public static synchronized boolean initNativeLibs(Context context, String binaryName, File destLocalFile) {
try {
- String folder = null;
-
- try {
-
- if (Build.CPU_ABI.equalsIgnoreCase("armeabi-v7a")) {
- folder = "armeabi-v7a";
- } else if (Build.CPU_ABI.startsWith("armeabi")) {
- folder = "armeabi";
- } else if (Build.CPU_ABI.equalsIgnoreCase("x86")) {
- folder = "x86";
- } else if (Build.CPU_ABI.equalsIgnoreCase("mips")) {
- folder = "mips";
- } else {
- folder = "armeabi";
- }
- } catch (Exception e) {
- // FileLog.e("tmessages", e);
- Log.e(TAG, e.getMessage());
- folder = "armeabi";
- }
-
+ String folder = Build.CPU_ABI;
String javaArch = System.getProperty("os.arch");
if (javaArch != null && javaArch.contains("686")) {
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java
index 309f7e58..241f6c7e 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java
@@ -70,12 +70,12 @@ public class OtherResourceInstaller implements TorServiceConstants {
if (!installFolder.exists())
installFolder.mkdirs();
- outFile = new File(installFolder, OBFSCLIENT_ASSET_KEY);
- NativeLoader.initNativeLibs(context,OBFSCLIENT_ASSET_KEY,outFile);
-
outFile = new File(installFolder, PDNSD_ASSET_KEY);
NativeLoader.initNativeLibs(context,PDNSD_ASSET_KEY,outFile);
+// outFile = new File(installFolder, OBFSCLIENT_ASSET_KEY);
+ // NativeLoader.initNativeLibs(context,OBFSCLIENT_ASSET_KEY,outFile);
+
return true;
}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/PortForwarder.java b/orbotservice/src/main/java/org/torproject/android/service/util/PortForwarder.java
new file mode 100644
index 00000000..d487fb43
--- /dev/null
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/PortForwarder.java
@@ -0,0 +1,80 @@
+package org.torproject.android.service.util;
+
+import android.util.Log;
+
+import com.offbynull.portmapper.PortMapperFactory;
+import com.offbynull.portmapper.gateway.Bus;
+import com.offbynull.portmapper.gateway.Gateway;
+import com.offbynull.portmapper.gateways.network.NetworkGateway;
+import com.offbynull.portmapper.gateways.network.internalmessages.KillNetworkRequest;
+import com.offbynull.portmapper.gateways.process.ProcessGateway;
+import com.offbynull.portmapper.gateways.process.internalmessages.KillProcessRequest;
+import com.offbynull.portmapper.mapper.MappedPort;
+import com.offbynull.portmapper.mapper.PortMapper;
+import com.offbynull.portmapper.mapper.PortType;
+
+import java.util.List;
+
+public class PortForwarder {
+
+ private boolean shutdown = false;
+ private Thread mThread = null;
+
+ public void shutdown ()
+ {
+ shutdown = true;
+ }
+
+ public void forward (final int internalPort, final int externalPort, final long lifetime) throws InterruptedException {
+
+ mThread = new Thread ()
+ {
+ public void run ()
+ {
+ try {
+ forwardSync(internalPort, externalPort, lifetime);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ };
+
+ mThread.start();
+ }
+
+
+ public void forwardSync (int internalPort, int externalPort, long lifetime) throws InterruptedException {
+ // Start gateways
+ Gateway network = NetworkGateway.create();
+ Gateway process = ProcessGateway.create();
+ Bus networkBus = network.getBus();
+ Bus processBus = process.getBus();
+
+// Discover port forwarding devices and take the first one found
+ List<PortMapper> mappers = PortMapperFactory.discover(networkBus, processBus);
+ PortMapper mapper = mappers.get(0);
+
+// Map internal port 12345 to some external port (55555 preferred)
+//
+// IMPORTANT NOTE: Many devices prevent you from mapping ports that are <= 1024
+// (both internal and external ports). Be mindful of this when choosing which
+// ports you want to map.
+ MappedPort mappedPort = mapper.mapPort(PortType.TCP, internalPort, externalPort, lifetime);
+ Log.d(getClass().getName(),"Port mapping added: " + mappedPort);
+
+// Refresh mapping half-way through the lifetime of the mapping (for example,
+// if the mapping is available for 40 seconds, refresh it every 20 seconds)
+ while(!shutdown) {
+ mappedPort = mapper.refreshPort(mappedPort, mappedPort.getLifetime() / 2L);
+ Log.d(getClass().getName(),"Port mapping refreshed: " + mappedPort);
+ Thread.sleep(mappedPort.getLifetime() * 1000L);
+ }
+
+// Unmap port 12345
+ mapper.unmapPort(mappedPort);
+
+// Stop gateways
+ networkBus.send(new KillNetworkRequest());
+ processBus.send(new KillProcessRequest()); // can kill this after discovery
+ }
+}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
index e5419f3c..5ca4505c 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
@@ -37,6 +37,7 @@ import com.runjva.sourceforge.jsocks.protocol.ProxyServer;
import com.runjva.sourceforge.jsocks.server.ServerAuthenticatorNone;
import org.torproject.android.service.R;
+import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.TorServiceUtils;
@@ -73,12 +74,15 @@ public class OrbotVpnManager implements Handler.Callback {
private final static boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
//this is the actual DNS server we talk to over UDP or TCP (now using Tor's DNS port)
- private final static String DEFAULT_ACTUAL_DNS_HOST = "127.0.0.1";
- private final static int DEFAULT_ACTUAL_DNS_PORT = TorServiceConstants.TOR_DNS_PORT_DEFAULT;
+ //private final static String DEFAULT_ACTUAL_DNS_HOST = "127.0.0.1";
+ //private final static int DEFAULT_ACTUAL_DNS_PORT = TorServiceConstants.TOR_DNS_PORT_DEFAULT;
+
File filePdnsd = null;
+ private final static int PDNSD_PORT = 8091;
+
private boolean isRestart = false;
private VpnService mService;
@@ -88,7 +92,7 @@ public class OrbotVpnManager implements Handler.Callback {
{
mService = service;
- File fileBinHome = mService.getDir(TorServiceConstants.DIRECTORY_TOR_BINARY, Application.MODE_PRIVATE);
+ File fileBinHome = service.getFilesDir();//mService.getDir(TorServiceConstants.DIRECTORY_TOR_BINARY, Application.MODE_PRIVATE);
filePdnsd = new File(fileBinHome,TorServiceConstants.PDNSD_ASSET_KEY);
Tun2Socks.init();
@@ -276,6 +280,8 @@ public class OrbotVpnManager implements Handler.Callback {
isRestart = true;
Tun2Socks.Stop();
}
+
+ final int localDns = TorService.mPortDns;
mThreadVPN = new Thread ()
{
@@ -290,10 +296,7 @@ public class OrbotVpnManager implements Handler.Callback {
Log.d(TAG,"is a restart... let's wait for a few seconds");
Thread.sleep(3000);
}
-
- //start PDNSD daemon pointing to actual DNS
- startDNS(DEFAULT_ACTUAL_DNS_HOST,DEFAULT_ACTUAL_DNS_PORT);
-
+
final String vpnName = "OrbotVPN";
final String localhost = "127.0.0.1";
@@ -306,8 +309,8 @@ public class OrbotVpnManager implements Handler.Callback {
final String localSocks = localhost + ':'
+ String.valueOf(mTorSocks);
- final String localDNS = virtualGateway + ':' + "8091";//String.valueOf(TorServiceConstants.TOR_DNS_PORT_DEFAULT);
- //final String localDNS = virtualGateway + ":" + DEFAULT_ACTUAL_DNS_PORT;
+ final String localDNS = virtualGateway + ':' + PDNSD_PORT;
+
final boolean localDnsTransparentProxy = true;
builder.setMtu(VPN_MTU);
@@ -345,8 +348,12 @@ public class OrbotVpnManager implements Handler.Callback {
Tun2Socks.Start(mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks , localDNS , localDnsTransparentProxy);
isRestart = false;
-
- }
+
+ //start PDNSD daemon pointing to actual DNS
+ startDNS("127.0.0.1",localDns);
+
+
+ }
catch (Exception e)
{
Log.d(TAG,"tun2Socks has stopped",e);
diff --git a/orbotservice/src/main/jni/Application.mk b/orbotservice/src/main/jni/Application.mk
index d35e1e9c..58e4e08f 100644
--- a/orbotservice/src/main/jni/Application.mk
+++ b/orbotservice/src/main/jni/Application.mk
@@ -1,3 +1,3 @@
-APP_ABI := armeabi armeabi-v7a x86
+APP_ABI := armeabi armeabi-v7a x86 arm64-v8a x86_64
APP_PLATFORM := android-16
APP_STL := c++_static
1
0
commit 9257b66fe4c18ac2cce24643097e007c6b2bd882
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Tue Mar 26 14:35:35 2019 -0400
don't shrink or minify for now
---
app/build.gradle | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 4994f51e..726979c6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -16,8 +16,8 @@ android {
}
buildTypes {
release {
- minifyEnabled true
- shrinkResources true
+ minifyEnabled false
+ shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
1
0
commit a5d5c99fe29e318286cf06e0d5cd1fd9078512b8
Author: n8fr8 <nathan(a)guardianproject.info>
Date: Tue Mar 26 15:29:23 2019 -0400
remove unused launcher art
---
app/src/main/ic_launcher-web.png | Bin 23371 -> 0 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png
deleted file mode 100644
index d28872f5..00000000
Binary files a/app/src/main/ic_launcher-web.png and /dev/null differ
1
0