
commit 5004d8ec41f3f5c13b8a29dfbe8170db6ac0f6af Author: Arturo Filastò <art@fuffa.org> Date: Fri Apr 3 15:25:46 2015 +0200 Delete unneeded files and reorganise existing files --- .gitmodules | 9 - README.rst | 2 +- apt.key | Bin 6624 -> 0 bytes bin/ooniprobe-dev | 6 + debian/README | 5 - debian/changelog | 41 - debian/compat | 1 - debian/control | 53 -- debian/copyright | 51 -- debian/rules | 6 - debian/source/format | 1 - example_inputs/README | 2 - example_inputs/alexa-top-1k.txt | 1000 ---------------------- example_inputs/daph3_yaml_file.txt | 2 - example_inputs/dns_tamper_file.txt | 3 - example_inputs/dns_tamper_test_resolvers.txt | 2 - example_inputs/http_host_file.txt | 2 - example_inputs/keyword_filtering_file.txt | 2 - example_inputs/tcpconnect_host_file.txt | 3 - example_inputs/url_lists_file.txt | 2 - fabfile.py | 100 --- ooniprobe-dev | 6 - scripts/fabfile.py | 100 +++ scripts/setup-dependencies.sh | 992 +++++++++++++++++++++ setup-dependencies.sh | 992 --------------------- var/example_inputs/README | 2 + var/example_inputs/alexa-head.txt | 10 + var/example_inputs/alexa-top-1k.txt | 1000 ++++++++++++++++++++++ var/example_inputs/bad_input.txt | 1 + var/example_inputs/bridges.txt | 4 + var/example_inputs/daph3_yaml_file.txt | 2 + var/example_inputs/dns_tamper_file.txt | 3 + var/example_inputs/dns_tamper_test_resolvers.txt | 2 + var/example_inputs/domains.txt | 3 + var/example_inputs/http_host_file.txt | 2 + var/example_inputs/keyword_filtering_file.txt | 2 + var/example_inputs/tcpconnect_host_file.txt | 3 + var/example_inputs/url_lists_file.txt | 2 + 38 files changed, 2135 insertions(+), 2284 deletions(-) diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index daddf8f..0000000 --- a/.gitmodules +++ /dev/null @@ -1,9 +0,0 @@ -[submodule "ooni/lib/txscapy"] - path = ooni/lib/txscapy - url = https://github.com/isislovecruft/txscapy.git -[submodule "ooni/lib/txtraceroute"] - path = ooni/lib/txtraceroute - url = https://github.com/isislovecruft/txtraceroute.git -[submodule "ooni/lib/txtorcon"] - path = ooni/lib/txtorcon - url = https://github.com/isislovecruft/txtorcon.git diff --git a/README.rst b/README.rst index f4ce39f..92cc532 100644 --- a/README.rst +++ b/README.rst @@ -126,7 +126,7 @@ without installing it is supported with the following commands:: git clone https://git.torproject.org/ooni-probe.git cd ooni-probe - ./setup-dependencies.sh + ./scripts/setup-dependencies.sh python setup.py install OSX diff --git a/apt.key b/apt.key deleted file mode 100644 index 2ce2110..0000000 Binary files a/apt.key and /dev/null differ diff --git a/bin/ooniprobe-dev b/bin/ooniprobe-dev new file mode 100755 index 0000000..e0d5abb --- /dev/null +++ b/bin/ooniprobe-dev @@ -0,0 +1,6 @@ +#!/bin/sh +# Developer script for running ooniprobe directly from the repository. +# We don't automatically add "$PWD" to PYTHONPATH as that is a security risk +# when run as /usr/bin/ooniprobe on an end user's computer. +cd "$(realpath "$(dirname "$0")")" +PYTHONPATH="$PWD" exec ./bin/ooniprobe diff --git a/debian/README b/debian/README deleted file mode 100644 index a816b35..0000000 --- a/debian/README +++ /dev/null @@ -1,5 +0,0 @@ -Debian package for ooni-probe -============================= - -The Debian package is currently missing the graphical user interface as it -needs several JavaScript libraries that are currently not available in Debian. diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 45128cc..0000000 --- a/debian/changelog +++ /dev/null @@ -1,41 +0,0 @@ -ooniprobe (1.2.2-1) stable; urgency=low - - * ooniprobe 1.2.2 - - -- OONI Developers (signing key) <ooni-dev@lists.torproject.org> Fri, 17 Oct 2014 16:07:00 +0200 - -ooniprobe (1.2.0-1) stable; urgency=low - - * ooniprobe 1.2.0 - - -- OONI Developers (signing key) <ooni-dev@lists.torproject.org> Wed, 1 Oct 2014 16:07:00 +0200 - -ooniprobe (1.1.1-1) stable; urgency=low - - * ooniprobe 1.1.1 - - -- OONI Developers (signing key) <ooni-dev@lists.torproject.org> Sun, 24 Aug 2014 20:01:46 +0200 - -ooniprobe (1.1.0-1) stable; urgency=low - - * ooniprobe 1.1.0 - - -- OONI Developers (signing key) <ooni-dev@lists.torproject.org> Tue, 19 Aug 2014 15:14:46 +0200 - -ooniprobe (1.0.2-1) stable; urgency=low - - * ooniprobe 1.0.2 - - -- OONI Developers (signing key) <ooni-dev@lists.torproject.org> Fri, 9 May 2014 10:14:46 +0200 - -ooniprobe (1.0.1-1) stable; urgency=low - - * ooniprobe 1.0.1 - - -- OONI Developers (signing key) <ooni-dev@lists.torproject.org> Fri, 14 Mar 2014 17:14:46 +0200 - -ooniprobe (1.0.0-rc6-1) stable; urgency=low - - * ooniprobe 1.0.0-rc6 - - -- OONI Developers (signing key) <ooni-dev@lists.torproject.org> Mon, 13 Jan 2014 14:14:46 +0200 diff --git a/debian/compat b/debian/compat deleted file mode 100644 index 45a4fb7..0000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -8 diff --git a/debian/control b/debian/control deleted file mode 100644 index 9bdf641..0000000 --- a/debian/control +++ /dev/null @@ -1,53 +0,0 @@ -Source: ooniprobe -Maintainer: Open Observatory of Network Interference <ooni-dev@torproject.org> -Section: net -Priority: extra -Build-Depends: debhelper (>= 8), - python-all (>= 2.6.6-3~), - python-dnspython, - python-dumbnet, - python-docutils (>= 0.9.1), - python-ipaddr (>= 2.1.10), - python-openssl, - python-pypcap, - python-scapy (>= 2.2), - python-setuptools, - python-twisted (>= 12.2.0), - python-txsocksx, - python-txtorcon (>= 0.7), - python-yaml (>= 3.10), - python-zope.interface (>= 3.6), -Standards-Version: 3.9.4 -X-Python-Version: >= 2.7 -Vcs-Git: git://anonscm.debian.org/git/collab-maint/ooni-probe.git -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/ooni-probe.git -Homepage: https://ooni.torproject.org/ - -Package: ooniprobe -Architecture: all -Depends: ${misc:Depends}, ${python:Depends}, - tcpdump, - tor, - python-all (>= 2.6.6-3~), - python-dumbnet, - python-geoip (>= 0.2.5), - python-ipaddr (>= 2.1.10), - python-openssl, - python-pypcap, - python-scapy (>= 2.2), - python-setuptools, - python-twisted (>= 12.2.0), - python-txsocksx, - python-txtorcon (>= 0.7), - python-yaml (>= 3.10), - python-zope.interface (>= 3.6), -Suggests: obfsproxy -Description: probe for the Open Observatory of Network Interference (OONI) - OONI, the Open Observatory of Network Interference, is a global observation - network which aims is to collect high quality data using open methodologies - and free software to share observations and data about the various types, - methods, and amounts of network tampering in the world. - . - ooniprobe is a program to probe a network and collect data for the OONI - project. It will test the current network for signs of surveillance and - censorship. diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index cbe2380..0000000 --- a/debian/copyright +++ /dev/null @@ -1,51 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: ooniprobe -Source: https://gitweb.torproject.org/ooni-probe.git - -Files: * -Copyright: 2012-2013 Jacob Appelbaum, Arturo Filastò, Isis Lovecruft, - Aaron Gibson -License: BSD-2-clause - -Files: data/nettests/experimental/tls_handshake.py -Copyright: 2013 Isis Lovecruft, The Tor Project Inc. -License: BSD-2-clause - -Files: ooni/utils/onion.py -Copyright: 2012 The Tor Project, Inc. -License: BSD-2-clause - -Files: debian/* -Copyright: 2013 Jerémy Bobbio <lunar@debian.org> -License: permissive - Copying and distribution of this package, with or without - modification, are permitted in any medium without royalty - provided the copyright notice and this notice are - preserved. - -Files: data/Geo*.dat -Copyright: 2013 MaxMind -License: CC BY-SA - This product includes GeoLite data created by MaxMind, available from - <a href="http://www.maxmind.com">http://www.maxmind.com</a>. - -License: BSD-2-clause - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - . - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 9f48e79..0000000 --- a/debian/rules +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/make -f - -%: - dh $@ --buildsystem=python_distutils --with=python2 -override_dh_python2: - dh_python2 --no-guessing-deps diff --git a/debian/source/format b/debian/source/format deleted file mode 100644 index 163aaf8..0000000 --- a/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/example_inputs/README b/example_inputs/README deleted file mode 100644 index cbf0782..0000000 --- a/example_inputs/README +++ /dev/null @@ -1,2 +0,0 @@ -These inputs are here to assist the running of before_i_commit.sh that is used to verify proper functioning of ooniprobe. - diff --git a/example_inputs/alexa-top-1k.txt b/example_inputs/alexa-top-1k.txt deleted file mode 100644 index d101505..0000000 --- a/example_inputs/alexa-top-1k.txt +++ /dev/null @@ -1,1000 +0,0 @@ -http://google.com/ -http://facebook.com/ -http://youtube.com/ -http://yahoo.com/ -http://baidu.com/ -http://wikipedia.org/ -http://live.com/ -http://twitter.com/ -http://qq.com/ -http://amazon.com/ -http://blogspot.com/ -http://linkedin.com/ -http://taobao.com/ -http://google.co.in/ -http://yahoo.co.jp/ -http://sina.com.cn/ -http://msn.com/ -http://google.com.hk/ -http://google.de/ -http://bing.com/ -http://yandex.ru/ -http://wordpress.com/ -http://ebay.com/ -http://babylon.com/ -http://google.co.jp/ -http://google.co.uk/ -http://google.fr/ -http://vk.com/ -http://apple.com/ -http://163.com/ -http://googleusercontent.com/ -http://soso.com/ -http://microsoft.com/ -http://mail.ru/ -http://weibo.com/ -http://google.com.br/ -http://tumblr.com/ -http://pinterest.com/ -http://google.es/ -http://paypal.com/ -http://craigslist.org/ -http://ask.com/ -http://google.it/ -http://google.ru/ -http://xhamster.com/ -http://blogger.com/ -http://sohu.com/ -http://go.com/ -http://bbc.co.uk/ -http://xvideos.com/ -http://avg.com/ -http://imdb.com/ -http://fc2.com/ -http://google.com.mx/ -http://youku.com/ -http://ifeng.com/ -http://flickr.com/ -http://google.ca/ -http://tudou.com/ -http://t.co/ -http://hao123.com/ -http://tmall.com/ -http://conduit.com/ -http://adobe.com/ -http://odnoklassniki.ru/ -http://aol.com/ -http://espn.go.com/ -http://pornhub.com/ -http://ebay.de/ -http://cnn.com/ -http://blogspot.in/ -http://google.co.id/ -http://mywebsearch.com/ -http://livejasmin.com/ -http://amazon.de/ -http://zedo.com/ -http://huffingtonpost.com/ -http://redtube.com/ -http://thepiratebay.se/ -http://google.com.tr/ -http://rakuten.co.jp/ -http://stackoverflow.com/ -http://sogou.com/ -http://google.com.au/ -http://alibaba.com/ -http://about.com/ -http://godaddy.com/ -http://ebay.co.uk/ -http://adf.ly/ -http://amazon.co.jp/ -http://wordpress.org/ -http://google.pl/ -http://uol.com.br/ -http://mediafire.com/ -http://imgur.com/ -http://dailymotion.com/ -http://instagram.com/ -http://amazon.co.uk/ -http://cnet.com/ -http://netflix.com/ -http://youporn.com/ -http://ameblo.jp/ -http://360buy.com/ -http://alipay.com/ -http://chinaz.com/ -http://globo.com/ -http://livedoor.com/ -http://bp.blogspot.com/ -http://360.cn/ -http://nytimes.com/ -http://4shared.com/ -http://doubleclick.com/ -http://xnxx.com/ -http://adcash.com/ -http://torrentz.eu/ -http://google.nl/ -http://incredibar.com/ -http://neobux.com/ -http://google.com.sa/ -http://searchnu.com/ -http://vimeo.com/ -http://ehow.com/ -http://livejournal.com/ -http://dropbox.com/ -http://google.com.ar/ -http://bankofamerica.com/ -http://dailymail.co.uk/ -http://douban.com/ -http://search-results.com/ -http://warriorforum.com/ -http://renren.com/ -http://reddit.com/ -http://weather.com/ -http://tube8.com/ -http://badoo.com/ -http://pconline.com.cn/ -http://chase.com/ -http://secureserver.net/ -http://wigetmedia.com/ -http://tianya.cn/ -http://deviantart.com/ -http://indiatimes.com/ -http://aweber.com/ -http://cnzz.com/ -http://google.com.pk/ -http://stumbleupon.com/ -http://kat.ph/ -http://google.cn/ -http://spiegel.de/ -http://google.com.eg/ -http://blogspot.com.br/ -http://blogfa.com/ -http://56.com/ -http://letv.com/ -http://mozilla.org/ -http://amazonaws.com/ -http://google.co.th/ -http://google.co.za/ -http://espncricinfo.com/ -http://answers.com/ -http://goo.ne.jp/ -http://sourceforge.net/ -http://foxnews.com/ -http://clicksor.com/ -http://softonic.com/ -http://addthis.com/ -http://walmart.com/ -http://etsy.com/ -http://wellsfargo.com/ -http://comcast.net/ -http://reference.com/ -http://wikimedia.org/ -http://slideshare.net/ -http://liveinternet.ru/ -http://salesforce.com/ -http://booking.com/ -http://squidoo.com/ -http://photobucket.com/ -http://google.co.ve/ -http://allegro.pl/ -http://fiverr.com/ -http://onet.pl/ -http://depositfiles.com/ -http://skype.com/ -http://wikia.com/ -http://themeforest.net/ -http://statcounter.com/ -http://myspace.com/ -http://hootsuite.com/ -http://funmoods.com/ -http://xinhuanet.com/ -http://fbcdn.net/ -http://google.com.my/ -http://bild.de/ -http://guardian.co.uk/ -http://ucoz.ru/ -http://outbrain.com/ -http://people.com.cn/ -http://nbcnews.com/ -http://scribd.com/ -http://google.com.co/ -http://pengyou.com/ -http://mgid.com/ -http://soundcloud.com/ -http://google.com.vn/ -http://free.fr/ -http://google.gr/ -http://optmd.com/ -http://nicovideo.jp/ -http://rediff.com/ -http://leboncoin.fr/ -http://it168.com/ -http://zol.com.cn/ -http://google.be/ -http://download.com/ -http://w3schools.com/ -http://china.com/ -http://adultfriendfinder.com/ -http://domaintools.com/ -http://xunlei.com/ -http://naver.com/ -http://archive.org/ -http://sweetim.com/ -http://rapidshare.com/ -http://youjizz.com/ -http://58.com/ -http://files.wordpress.com/ -http://nfl.com/ -http://wsj.com/ -http://yelp.com/ -http://profitclicking.com/ -http://iqiyi.com/ -http://blogspot.com.es/ -http://hostgator.com/ -http://orange.fr/ -http://google.com.tw/ -http://isohunt.com/ -http://hudong.com/ -http://google.com.ua/ -http://google.se/ -http://soku.com/ -http://tagged.com/ -http://google.at/ -http://jqw.com/ -http://reuters.com/ -http://telegraph.co.uk/ -http://indeed.com/ -http://4399.com/ -http://uploaded.net/ -http://filestube.com/ -http://ups.com/ -http://flipkart.com/ -http://wp.pl/ -http://kaixin001.com/ -http://tripadvisor.com/ -http://taringa.net/ -http://samsung.com/ -http://rutracker.org/ -http://google.ro/ -http://rambler.ru/ -http://libero.it/ -http://cam4.com/ -http://paipai.com/ -http://yieldmanager.com/ -http://web.de/ -http://google.com.ph/ -http://gmx.net/ -http://imageshack.us/ -http://xing.com/ -http://2345.com/ -http://dianxin.cn/ -http://php.net/ -http://hp.com/ -http://mashable.com/ -http://yesky.com/ -http://att.com/ -http://csdn.net/ -http://ikea.com/ -http://washingtonpost.com/ -http://ameba.jp/ -http://pandora.com/ -http://github.com/ -http://google.com.pe/ -http://forbes.com/ -http://hatena.ne.jp/ -http://wordreference.com/ -http://pof.com/ -http://google.com.ng/ -http://aliexpress.com/ -http://google.ch/ -http://hardsextube.com/ -http://thefreedictionary.com/ -http://clickbank.com/ -http://iminent.com/ -http://narod.ru/ -http://etao.com/ -http://bet365.com/ -http://google.cl/ -http://ilivid.com/ -http://google.com.sg/ -http://weebly.com/ -http://amazon.cn/ -http://ero-advertising.com/ -http://rapidgator.net/ -http://youdao.com/ -http://mercadolivre.com.br/ -http://yourlust.com/ -http://constantcontact.com/ -http://xcar.com.cn/ -http://groupon.com/ -http://target.com/ -http://hurriyet.com.tr/ -http://media.tumblr.com/ -http://businessinsider.com/ -http://5000pk.com/ -http://9gag.com/ -http://kakaku.com/ -http://akamaihd.net/ -http://putlocker.com/ -http://shutterstock.com/ -http://kaskus.co.id/ -http://ebay.it/ -http://bitauto.com/ -http://goal.com/ -http://usps.com/ -http://milliyet.com.tr/ -http://techcrunch.com/ -http://amazon.fr/ -http://ku6.com/ -http://typepad.com/ -http://dell.com/ -http://terra.com.br/ -http://huanqiu.com/ -http://digitalpoint.com/ -http://tlbb8.com/ -http://ebay.com.au/ -http://engadget.com/ -http://twimg.com/ -http://blogspot.de/ -http://soufun.com/ -http://t-online.de/ -http://hulu.com/ -http://popads.net/ -http://xe.com/ -http://cj.com/ -http://in.com/ -http://nih.gov/ -http://joomla.org/ -http://battle.net/ -http://americanexpress.com/ -http://kooora.com/ -http://drtuber.com/ -http://marca.com/ -http://gsmarena.com/ -http://movie2k.to/ -http://mlb.com/ -http://elpais.com/ -http://gazeta.pl/ -http://blogspot.jp/ -http://bestbuy.com/ -http://agoda.com/ -http://uimserv.net/ -http://ig.com.br/ -http://mailchimp.com/ -http://seznam.cz/ -http://siteadvisor.com/ -http://linkbucks.com/ -http://zimbio.com/ -http://match.com/ -http://extratorrent.com/ -http://tlbb2.com/ -http://google.pt/ -http://verizonwireless.com/ -http://fedex.com/ -http://angege.com/ -http://infusionsoft.com/ -http://peyvandha.ir/ -http://ezinearticles.com/ -http://zanox.com/ -http://elmundo.es/ -http://google.co.hu/ -http://bluehost.com/ -http://detik.com/ -http://adserverplus.com/ -http://4dsply.com/ -http://aili.com/ -http://istockphoto.com/ -http://leo.org/ -http://autohome.com.cn/ -http://hubpages.com/ -http://google.ie/ -http://gutefrage.net/ -http://usatoday.com/ -http://mycalendarbook.com/ -http://ebay.fr/ -http://51.com/ -http://freelancer.com/ -http://speedtest.net/ -http://google.cz/ -http://aizhan.com/ -http://drudgereport.com/ -http://webs.com/ -http://w3.org/ -http://seomoz.org/ -http://vnexpress.net/ -http://homeway.com.cn/ -http://google.dk/ -http://ganji.com/ -http://alimama.com/ -http://google.ae/ -http://twoo.com/ -http://mpnrs.com/ -http://naver.jp/ -http://mixi.jp/ -http://nifty.com/ -http://12306.cn/ -http://analyrics.com/ -http://adnxs.com/ -http://pcauto.com.cn/ -http://tlbbsifu.com/ -http://cntv.cn/ -http://yandex.ua/ -http://seesaa.net/ -http://2ch.net/ -http://cbssports.com/ -http://ask.fm/ -http://y8.com/ -http://bloomberg.com/ -http://360tl.com/ -http://pch.com/ -http://ebay.in/ -http://chip.de/ -http://abcnews.go.com/ -http://bannersbroker.com/ -http://dangdang.com/ -http://over-blog.com/ -http://naukri.com/ -http://varzesh3.com/ -http://turbobit.net/ -http://letitbit.net/ -http://jobrapido.com/ -http://ign.com/ -http://pchome.net/ -http://126.com/ -http://maktoob.com/ -http://lemonde.fr/ -http://hdfcbank.com/ -http://chinanews.com/ -http://dianping.com/ -http://meetup.com/ -http://abril.com.br/ -http://google.no/ -http://capitalone.com/ -http://tmz.com/ -http://wix.com/ -http://google.dz/ -http://goodreads.com/ -http://51.la/ -http://histats.com/ -http://surveymonkey.com/ -http://51job.com/ -http://repubblica.it/ -http://fotolia.com/ -http://vancl.com/ -http://imesh.com/ -http://ning.com/ -http://informer.com/ -http://java.com/ -http://buzzfeed.com/ -http://jimdo.com/ -http://beeg.com/ -http://gmw.cn/ -http://ndtv.com/ -http://1channel.ch/ -http://bravotube.net/ -http://expedia.com/ -http://pcgames.com.cn/ -http://admin5.com/ -http://monster.com/ -http://daum.net/ -http://mop.com/ -http://multiply.com/ -http://qunar.com/ -http://google.co.il/ -http://dmm.co.jp/ -http://latimes.com/ -http://avito.ru/ -http://rr.com/ -http://commentcamarche.net/ -http://sape.ru/ -http://clixsense.com/ -http://enet.com.cn/ -http://viadeo.com/ -http://mihanblog.com/ -http://bitly.com/ -http://lefigaro.fr/ -http://rbc.ru/ -http://adsupply.com/ -http://microsoftonline.com/ -http://drupal.org/ -http://mynet.com/ -http://twitpic.com/ -http://google.co.kr/ -http://adultadworld.com/ -http://newegg.com/ -http://google.fi/ -http://kijiji.ca/ -http://wikihow.com/ -http://10086.cn/ -http://zillow.com/ -http://livescore.com/ -http://blogspot.it/ -http://webmd.com/ -http://xda-developers.com/ -http://nokia.com/ -http://wretch.cc/ -http://odesk.com/ -http://kuxun.cn/ -http://bleacherreport.com/ -http://myfreecams.com/ -http://outlook.com/ -http://livedoor.biz/ -http://linkwithin.com/ -http://tradedoubler.com/ -http://empowernetwork.com/ -http://delicious.com/ -http://ovh.net/ -http://nikkei.com/ -http://gotomeeting.com/ -http://39.net/ -http://largeporntube.com/ -http://tinyurl.com/ -http://ya.ru/ -http://spankwire.com/ -http://website-unavailable.com/ -http://sahibinden.com/ -http://nuvid.com/ -http://zing.vn/ -http://123rf.com/ -http://blackhatworld.com/ -http://icicibank.com/ -http://irctc.co.in/ -http://warriorplus.com/ -http://mobile.de/ -http://189.cn/ -http://ibm.com/ -http://yomiuri.co.jp/ -http://tabelog.com/ -http://softpedia.com/ -http://retailmenot.com/ -http://virgilio.it/ -http://livestrong.com/ -http://mercadolibre.com.ar/ -http://webmoney.ru/ -http://elance.com/ -http://oracle.com/ -http://swagbucks.com/ -http://searchqu.com/ -http://jiayuan.com/ -http://itau.com.br/ -http://mapquest.com/ -http://sakura.ne.jp/ -http://youm7.com/ -http://digg.com/ -http://biglobe.ne.jp/ -http://news.com.au/ -http://taleo.net/ -http://backpage.com/ -http://keezmovies.com/ -http://lzjl.com/ -http://stackexchange.com/ -http://gi-akademie.com/ -http://thesun.co.uk/ -http://pornhublive.com/ -http://immobilienscout24.de/ -http://jquery.com/ -http://homedepot.com/ -http://alphaporno.com/ -http://pclady.com.cn/ -http://duowan.com/ -http://hi5.com/ -http://allrecipes.com/ -http://corriere.it/ -http://foxsports.com/ -http://china.com.cn/ -http://folha.uol.com.br/ -http://ultimatepowerprofits.com/ -http://altervista.org/ -http://cnblogs.com/ -http://olx.in/ -http://verizon.com/ -http://macys.com/ -http://heise.de/ -http://xyxy.net/ -http://mercadolibre.com.mx/ -http://habrahabr.ru/ -http://persianblog.ir/ -http://quora.com/ -http://exoclick.com/ -http://issuu.com/ -http://google.sk/ -http://tribalfusion.com/ -http://gc.ca/ -http://eastmoney.com/ -http://examiner.com/ -http://zynga.com/ -http://lenta.ru/ -http://21cn.com/ -http://livingsocial.com/ -http://codecanyon.net/ -http://accuweather.com/ -http://xtube.com/ -http://7k7k.com/ -http://force.com/ -http://sergey-mavrodi.com/ -http://people.com/ -http://google.co.ma/ -http://feedburner.com/ -http://114so.cn/ -http://moneycontrol.com/ -http://quikr.com/ -http://cbsnews.com/ -http://sapo.pt/ -http://adscale.de/ -http://excite.co.jp/ -http://yxlady.com/ -http://tabnak.ir/ -http://gi-backoffice.com/ -http://templatemonster.com/ -http://ancestry.com/ -http://careerbuilder.com/ -http://yellowpages.com/ -http://timeanddate.com/ -http://orkut.com/ -http://list-manage.com/ -http://oneindia.in/ -http://suning.com/ -http://pogo.com/ -http://nhk.or.jp/ -http://wiktionary.org/ -http://haberturk.com/ -http://msn.com.cn/ -http://kickstarter.com/ -http://inbox.com/ -http://mybrowserbar.com/ -http://porn.com/ -http://hidemyass.com/ -http://nikkeibp.co.jp/ -http://kohls.com/ -http://blog.163.com/ -http://dh818.com/ -http://kinopoisk.ru/ -http://zippyshare.com/ -http://netlog.com/ -http://pixnet.net/ -http://gap.com/ -http://custhelp.com/ -http://4tube.com/ -http://cheezburger.com/ -http://nu.nl/ -http://v9.com/ -http://interia.pl/ -http://so-net.ne.jp/ -http://blog.com/ -http://getresponse.com/ -http://alnaddy.com/ -http://impress.co.jp/ -http://justdial.com/ -http://gizmodo.com/ -http://time.com/ -http://hotfile.com/ -http://who.is/ -http://wunderground.com/ -http://kankan.com/ -http://miniclip.com/ -http://welt.de/ -http://zhaopin.com/ -http://filehippo.com/ -http://qidian.com/ -http://shopathome.com/ -http://lifehacker.com/ -http://klicktrek.com/ -http://wired.com/ -http://888.com/ -http://mp3skull.com/ -http://okcupid.com/ -http://namecheap.com/ -http://porntube.com/ -http://twcczhu.com/ -http://doorblog.jp/ -http://makeuseof.com/ -http://infolinks.com/ -http://ccb.com/ -http://blekko.com/ -http://google.az/ -http://userapi.com/ -http://cbslocal.com/ -http://hubspot.com/ -http://zendesk.com/ -http://lequipe.fr/ -http://tutsplus.com/ -http://exblog.jp/ -http://video-one.com/ -http://118114.cn/ -http://macrumors.com/ -http://ggmm777.com/ -http://bitshare.com/ -http://hupu.com/ -http://trulia.com/ -http://hotels.com/ -http://sulekha.com/ -http://1uuc.com/ -http://google.co.nz/ -http://acesse.com/ -http://citibank.com/ -http://imagevenue.com/ -http://roulettebotplus.com/ -http://coupons.com/ -http://politico.com/ -http://anonym.to/ -http://gawker.com/ -http://searchengines.ru/ -http://cnbc.com/ -http://as.com/ -http://icbc.com.cn/ -http://1und1.de/ -http://sears.com/ -http://adfoc.us/ -http://sj-tl.com/ -http://blogimg.jp/ -http://bodybuilding.com/ -http://tinypic.com/ -http://imagebam.com/ -http://manta.com/ -http://marketwatch.com/ -http://zwaar.net/ -http://kompas.com/ -http://mangareader.net/ -http://eventbrite.com/ -http://businessweek.com/ -http://pagesjaunes.fr/ -http://amung.us/ -http://sitesell.com/ -http://babycenter.com/ -http://ctrip.com/ -http://orkut.com.br/ -http://linksynergy.com/ -http://dict.cc/ -http://shareasale.com/ -http://wcarev.com/ -http://okwave.jp/ -http://ustream.tv/ -http://watchseries.eu/ -http://intuit.com/ -http://snapdeal.com/ -http://td.com/ -http://nasa.gov/ -http://slickdeals.net/ -http://dpreview.com/ -http://tom.com/ -http://usbank.com/ -http://nydailynews.com/ -http://sanjesh.org/ -http://51buy.com/ -http://xhamstercams.com/ -http://968tl.com/ -http://myegy.com/ -http://cocolog-nifty.com/ -http://whitepages.com/ -http://disney.go.com/ -http://howstuffworks.com/ -http://barnesandnoble.com/ -http://klikbca.com/ -http://metacafe.com/ -http://lenovo.com/ -http://yandex.kz/ -http://pornerbros.com/ -http://aftonbladet.se/ -http://52tlbb.com/ -http://smashingmagazine.com/ -http://europa.eu/ -http://google.lk/ -http://18andabused.com/ -http://fatakat.com/ -http://tnaflix.com/ -http://woot.com/ -http://dantri.com.vn/ -http://itmedia.co.jp/ -http://focus.de/ -http://rednet.cn/ -http://asahi.com/ -http://sfr.fr/ -http://ca.gov/ -http://ocn.ne.jp/ -http://idnes.cz/ -http://pixiv.net/ -http://24h.com.vn/ -http://priceline.com/ -http://urbandictionary.com/ -http://shaadi.com/ -http://blogspot.com.ar/ -http://6.cn/ -http://magentocommerce.com/ -http://cloob.com/ -http://52pk.net/ -http://realclearpolitics.com/ -http://alarabiya.net/ -http://hsbc.co.uk/ -http://discreethearts.com/ -http://ucoz.com/ -http://earthlink.net/ -http://novinky.cz/ -http://citrixonline.com/ -http://orf.at/ -http://masrawy.com/ -http://smh.com.au/ -http://way2sms.com/ -http://cmbchina.com/ -http://yihaodian.com/ -http://zappos.com/ -http://blackberry.com/ -http://fotostrana.ru/ -http://verycd.com/ -http://farsnews.com/ -http://gumtree.com/ -http://rightmove.co.uk/ -http://patch.com/ -http://ppstream.com/ -http://vente-privee.com/ -http://google.com.kw/ -http://nudevista.com/ -http://forgeofempires.com/ -http://hypergames.net/ -http://alot.com/ -http://softlayer.com/ -http://slutload.com/ -http://overstock.com/ -http://google.bg/ -http://geocities.jp/ -http://foursquare.com/ -http://bbc.com/ -http://statscrop.com/ -http://freakshare.com/ -http://lowes.com/ -http://h2porn.com/ -http://subito.it/ -http://japanpost.jp/ -http://quickmeme.com/ -http://npr.org/ -http://mercadolibre.com.ve/ -http://onlylady.com/ -http://ebay.ca/ -http://bahn.de/ -http://bartarinha.ir/ -http://xici.net/ -http://egotastic.com/ -http://yoka.com/ -http://google.com.ec/ -http://indianrail.gov.in/ -http://dmoz.org/ -http://gamespot.com/ -http://jabong.com/ -http://ci123.com/ -http://southwest.com/ -http://tenpay.com/ -http://baixing.com/ -http://scoop.it/ -http://telegraaf.nl/ -http://18schoolgirlz.com/ -http://adult-empire.com/ -http://eastday.com/ -http://tubegalore.com/ -http://posterous.com/ -http://cloudfront.net/ -http://rakuten.ne.jp/ -http://sky.com/ -http://linternaute.com/ -http://mysql.com/ -http://baomihua.com/ -http://goo.gl/ -http://perfectgirls.net/ -http://logmein.com/ -http://classmates.com/ -http://udn.com/ -http://akhbarak.net/ -http://115.com/ -http://allocine.fr/ -http://onlinesbi.com/ -http://payza.com/ -http://google.com.do/ -http://marktplaats.nl/ -http://pcmag.com/ -http://discuz.net/ -http://foodnetwork.com/ -http://www.net.cn/ -http://kdnet.net/ -http://rottentomatoes.com/ -http://cheshi.com.cn/ -http://zoho.com/ -http://skycn.com/ -http://subscene.com/ -http://google.com.qa/ -http://skyrock.com/ -http://easyhits4u.com/ -http://motherless.com/ -http://free-tv-video-online.me/ -http://steampowered.com/ -http://idealo.de/ -http://mail.com/ -http://friv.com/ -http://kayak.com/ -http://wetter.com/ -http://bankmellat.ir/ -http://zoosk.com/ -http://opensiteexplorer.org/ -http://streamate.com/ -http://dreamstime.com/ -http://logsoku.com/ -http://theblaze.com/ -http://filecrop.com/ -http://icontact.com/ -http://tjosurveys.com/ -http://weather.com.cn/ -http://grindtv.com/ -http://ahram.org.eg/ -http://crsky.com/ -http://meilishuo.com/ -http://legacy.com/ -http://lady8844.com/ -http://jeuxvideo.com/ -http://partypoker.com/ -http://sanook.com/ -http://nikkansports.com/ -http://semrush.com/ -http://babytree.com/ -http://cracked.com/ -http://m-w.com/ -http://bigpoint.com/ -http://asos.com/ -http://mediaset.it/ -http://hc360.com/ -http://cocoren.com/ -http://bhaskar.com/ -http://last.fm/ -http://88db.com/ -http://weblio.jp/ -http://onlinedown.net/ -http://sponichi.co.jp/ -http://realtor.com/ -http://ce.cn/ -http://sbrf.ru/ -http://meetcheap.com/ -http://hm.com/ -http://homeshop18.com/ -http://ticketmaster.com/ -http://slate.com/ -http://prestashop.com/ -http://boston.com/ -http://traidnt.net/ -http://grooveshark.com/ -http://justin.tv/ -http://biblegateway.com/ -http://speedbit.com/ -http://twitch.tv/ -http://clarin.com/ -http://brazzers.com/ -http://dhl.de/ -http://pornoxo.com/ -http://gismeteo.ru/ -http://accountonline.com/ -http://cnr.cn/ -http://yimg.com/ -http://r7.com/ -http://xgo.com.cn/ -http://qip.ru/ -http://19lou.com/ -http://subscribe.ru/ -http://meituan.com/ -http://esporte.uol.com.br/ -http://arpg2.com/ -http://jxliu.com/ -http://admagnet.net/ -http://freeones.com/ -http://lacaixa.es/ -http://mtime.com/ -http://shutterfly.com/ -http://piriform.com/ -http://flippa.com/ -http://rt.com/ -http://reverso.net/ -http://liveperson.net/ -http://eyny.com/ -http://eonline.com/ -http://beemp3.com/ -http://commbank.com.au/ -http://caixa.gov.br/ -http://android.com/ -http://sendspace.com/ -http://xbox.com/ -http://liveleak.com/ diff --git a/example_inputs/daph3_yaml_file.txt b/example_inputs/daph3_yaml_file.txt deleted file mode 100644 index 2412a08..0000000 --- a/example_inputs/daph3_yaml_file.txt +++ /dev/null @@ -1,2 +0,0 @@ -{client: antani, server: sblinda} - diff --git a/example_inputs/dns_tamper_file.txt b/example_inputs/dns_tamper_file.txt deleted file mode 100644 index 25f365c..0000000 --- a/example_inputs/dns_tamper_file.txt +++ /dev/null @@ -1,3 +0,0 @@ -torproject.org -google.com -measurementlab.net diff --git a/example_inputs/dns_tamper_test_resolvers.txt b/example_inputs/dns_tamper_test_resolvers.txt deleted file mode 100644 index 14c77e0..0000000 --- a/example_inputs/dns_tamper_test_resolvers.txt +++ /dev/null @@ -1,2 +0,0 @@ -8.8.8.8 -8.8.4.4 diff --git a/example_inputs/http_host_file.txt b/example_inputs/http_host_file.txt deleted file mode 100644 index 12afb18..0000000 --- a/example_inputs/http_host_file.txt +++ /dev/null @@ -1,2 +0,0 @@ -torproject.org -ooni.nu diff --git a/example_inputs/keyword_filtering_file.txt b/example_inputs/keyword_filtering_file.txt deleted file mode 100644 index 4583bae..0000000 --- a/example_inputs/keyword_filtering_file.txt +++ /dev/null @@ -1,2 +0,0 @@ -antani -sblinda diff --git a/example_inputs/tcpconnect_host_file.txt b/example_inputs/tcpconnect_host_file.txt deleted file mode 100644 index a1e876b..0000000 --- a/example_inputs/tcpconnect_host_file.txt +++ /dev/null @@ -1,3 +0,0 @@ -86.59.30.40:80 -207.97.227.239:22 -173.194.35.160:443 diff --git a/example_inputs/url_lists_file.txt b/example_inputs/url_lists_file.txt deleted file mode 100644 index 16a4f58..0000000 --- a/example_inputs/url_lists_file.txt +++ /dev/null @@ -1,2 +0,0 @@ -http://ooni.nu/test -http://torproject.org/ diff --git a/fabfile.py b/fabfile.py deleted file mode 100644 index f97f6df..0000000 --- a/fabfile.py +++ /dev/null @@ -1,100 +0,0 @@ -#-*- coding: utf-8 -*- -# -# :authors: Arturo Filastò, Isis Lovecruft -# :license: see included LICENSE file -import os -import sys -import yaml -import xmlrpclib -from StringIO import StringIO - -from fabric.operations import get -from fabric.api import run, cd, sudo, env - -api_auth = {} -# Set these values -api_auth['Username'] = "you@example.com" -api_auth['AuthString'] = "your_password" -slice_name = "your_slice_name" - -### Do not change this -api_auth['AuthMethod'] = "password" - -env.user = 'root' -def set_hosts(host_file): - with open(host_file) as f: - for host in f: - env.hosts.append(host) - -def search_node(nfilter="*.cert.org.cn"): - api_server = xmlrpclib.ServerProxy('https://www.planet-lab.org/PLCAPI/') - if api_server.AuthCheck(api_auth): - print "We are authenticated" - else: - print "We are not authenticated" - node_filter = {'hostname': nfilter} - return_fields = ['hostname', 'site_id'] - all_nodes = api_server.GetNodes(api_auth, node_filter, return_fields) - print all_nodes - -def add_node(nodeid): - node_id = int(nodeid) - api_server = xmlrpclib.ServerProxy('https://www.planet-lab.org/PLCAPI/') - node_filter = {'node_id': node_id} - return_fields = ['hostname', 'site_id'] - nodes = api_server.GetNodes(api_auth, node_filter, return_fields) - print 'Adding nodes %s' % nodes - api_server.AddNode(api_auth, node_id, slice_name) - -def deployooniprobe(distro="debian"): - """ - This is used to deploy ooni-probe on debian based systems. - """ - run("git clone https://git.torproject.org/ooni-probe.git ooni-probe") - cd("ooni-probe") - if distro == "debian": - sudo("apt-get install git-core python python-pip python-dev") - else: - print "The selected distro is not supported" - print "The following commands may fail" - run("virtualenv env") - run("source env/bin/activate") - run("pip install https://hg.secdev.org/scapy/archive/tip.zip") - run("pip install -r requirements.txt") - -def generate_bouncer_file(install_directory='/data/oonib/', bouncer_file="bouncer.yaml"): - output = StringIO() - get(os.path.join(install_directory, 'oonib.conf'), output) - output.seek(0) - oonib_configuration = yaml.safe_load(output) - - output.truncate(0) - get(os.path.join(oonib_configuration['main']['tor_datadir'], 'collector', 'hostname'), - output) - output.seek(0) - collector_hidden_service = output.readlines()[0].strip() - - address = env.host - test_helpers = { - 'dns': address + ':' + str(oonib_configuration['helpers']['dns']['tcp_port']), - 'ssl': 'https://' + address, - 'traceroute': address, - } - if oonib_configuration['helpers']['tcp-echo']['port'] == 80: - test_helpers['tcp-echo'] = address - else: - test_helpers['http-return-json-headers'] = 'http://' + address - - bouncer_data = { - 'collector': - { - 'httpo://'+collector_hidden_service: {'test-helper': test_helpers} - } - } - with open(bouncer_file) as f: - old_bouncer_data = yaml.safe_load(f) - - with open(bouncer_file, 'w+') as f: - old_bouncer_data['collector']['httpo://'+collector_hidden_service] = {} - old_bouncer_data['collector']['httpo://'+collector_hidden_service]['test-helper'] = test_helpers - yaml.dump(old_bouncer_data, f) diff --git a/ooniprobe-dev b/ooniprobe-dev deleted file mode 100755 index e0d5abb..0000000 --- a/ooniprobe-dev +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# Developer script for running ooniprobe directly from the repository. -# We don't automatically add "$PWD" to PYTHONPATH as that is a security risk -# when run as /usr/bin/ooniprobe on an end user's computer. -cd "$(realpath "$(dirname "$0")")" -PYTHONPATH="$PWD" exec ./bin/ooniprobe diff --git a/scripts/fabfile.py b/scripts/fabfile.py new file mode 100644 index 0000000..f97f6df --- /dev/null +++ b/scripts/fabfile.py @@ -0,0 +1,100 @@ +#-*- coding: utf-8 -*- +# +# :authors: Arturo Filastò, Isis Lovecruft +# :license: see included LICENSE file +import os +import sys +import yaml +import xmlrpclib +from StringIO import StringIO + +from fabric.operations import get +from fabric.api import run, cd, sudo, env + +api_auth = {} +# Set these values +api_auth['Username'] = "you@example.com" +api_auth['AuthString'] = "your_password" +slice_name = "your_slice_name" + +### Do not change this +api_auth['AuthMethod'] = "password" + +env.user = 'root' +def set_hosts(host_file): + with open(host_file) as f: + for host in f: + env.hosts.append(host) + +def search_node(nfilter="*.cert.org.cn"): + api_server = xmlrpclib.ServerProxy('https://www.planet-lab.org/PLCAPI/') + if api_server.AuthCheck(api_auth): + print "We are authenticated" + else: + print "We are not authenticated" + node_filter = {'hostname': nfilter} + return_fields = ['hostname', 'site_id'] + all_nodes = api_server.GetNodes(api_auth, node_filter, return_fields) + print all_nodes + +def add_node(nodeid): + node_id = int(nodeid) + api_server = xmlrpclib.ServerProxy('https://www.planet-lab.org/PLCAPI/') + node_filter = {'node_id': node_id} + return_fields = ['hostname', 'site_id'] + nodes = api_server.GetNodes(api_auth, node_filter, return_fields) + print 'Adding nodes %s' % nodes + api_server.AddNode(api_auth, node_id, slice_name) + +def deployooniprobe(distro="debian"): + """ + This is used to deploy ooni-probe on debian based systems. + """ + run("git clone https://git.torproject.org/ooni-probe.git ooni-probe") + cd("ooni-probe") + if distro == "debian": + sudo("apt-get install git-core python python-pip python-dev") + else: + print "The selected distro is not supported" + print "The following commands may fail" + run("virtualenv env") + run("source env/bin/activate") + run("pip install https://hg.secdev.org/scapy/archive/tip.zip") + run("pip install -r requirements.txt") + +def generate_bouncer_file(install_directory='/data/oonib/', bouncer_file="bouncer.yaml"): + output = StringIO() + get(os.path.join(install_directory, 'oonib.conf'), output) + output.seek(0) + oonib_configuration = yaml.safe_load(output) + + output.truncate(0) + get(os.path.join(oonib_configuration['main']['tor_datadir'], 'collector', 'hostname'), + output) + output.seek(0) + collector_hidden_service = output.readlines()[0].strip() + + address = env.host + test_helpers = { + 'dns': address + ':' + str(oonib_configuration['helpers']['dns']['tcp_port']), + 'ssl': 'https://' + address, + 'traceroute': address, + } + if oonib_configuration['helpers']['tcp-echo']['port'] == 80: + test_helpers['tcp-echo'] = address + else: + test_helpers['http-return-json-headers'] = 'http://' + address + + bouncer_data = { + 'collector': + { + 'httpo://'+collector_hidden_service: {'test-helper': test_helpers} + } + } + with open(bouncer_file) as f: + old_bouncer_data = yaml.safe_load(f) + + with open(bouncer_file, 'w+') as f: + old_bouncer_data['collector']['httpo://'+collector_hidden_service] = {} + old_bouncer_data['collector']['httpo://'+collector_hidden_service]['test-helper'] = test_helpers + yaml.dump(old_bouncer_data, f) diff --git a/scripts/setup-dependencies.sh b/scripts/setup-dependencies.sh new file mode 100755 index 0000000..d96f2cf --- /dev/null +++ b/scripts/setup-dependencies.sh @@ -0,0 +1,992 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +BUILD_DIR=/tmp/oonibuilding.$RANDOM +BUILD_LOG=${BUILD_DIR}.log +TMP_KEYRING=${BUILD_DIR}/tmpkeyring.gpg +DISTRO='unknown' +DISTRO_VERSION='unknown' +REPO_ROOT="$(pwd)" +MINT_RELEASE_VARS="/etc/os-release" + +# Discover our Distro release +if [ -f /etc/redhat-release ]; then + DISTRO="fedora" +# Debian/Ubuntu +elif [ -r /lib/lsb/init-functions ]; then + DISTRO_VERSION="$( lsb_release -cs )" + if [ "$( lsb_release -is )" == "Ubuntu" ]; then + DISTRO="ubuntu" + elif [ "$( lsb_release -is )" == "LinuxMint" ]; then + source $MINT_RELEASE_VARS + DISTRO="$ID" + DISTRO_VERSION="$( echo $VERSION | cut -d' ' -f3 | tr [:upper:] [:lower:] )" + else + DISTRO="debian" + fi +fi + +TOR_DEB_REPO="http://deb.torproject.org/torproject.org"; + +usage() +{ +cat << EOF +usage: ./${SCRIPTNAME} options + +OPTIONS: + -h Show this message + -y To assume yes to all queries +ONE MODE SPECIFICATION REQUIRED: + -p Privileged mode - install all dependencies system wide + -u Unprivileged mode - install most dependencies in a virtualenv +EOF +} + +ASSUME_YES=0 +PRIV_MODE=3 +while getopts “hypu” OPTION +do + case $OPTION in + h) + usage + exit 1 + ;; + y) + ASSUME_YES=1 + ;; + u) + PRIV_MODE=0 + ;; + p) + PRIV_MODE=1 + ;; + ?) + usage + exit + ;; + esac +done + +# make sure a privilege mode was specified +if [[ $PRIV_MODE -eq 3 ]]; then + usage + exit +fi + +# make sure we are not root when in unprivileged mode +if [[ $PRIV_MODE -eq 0 ]]; then + if [[ $EUID -eq 0 ]]; then + echo "operator error: non-privilege mode must be run as non-root user with sudo privileges" + exit + fi +fi + +# make sure we are root when in privileged mode +if [[ $PRIV_MODE -eq 1 ]]; then + if [[ $EUID -ne 0 ]]; then + echo "operator error: privileged-mode must be run as root" + exit + fi +fi + +DO () { + if [ -z "$2" ]; then + RET=0 + else + RET=$2 + fi + if [ -z "$3" ]; then + CMD=$1 + else + CMD=$3 + fi + echo "Running: " + echo " $CMD" + $1 &>${BUILD_LOG} + if [[ "$?" -eq "$2" ]]; then + echo "SUCCESS" + else + echo "FAIL" + echo "COMBINED STDOUT/STDERR OUTPUT OF FAILED COMMAND:" + cat ${BUILD_LOG} + exit 1 + fi +} + +vercomp () { + # Returnned values: + # 0: version are equals + # 1: $1 is bigger than $2 + # 2: $2 is bigger than $1 + if [[ $1 == $2 ]] + then + return 0 + fi + local IFS=. + local i ver1=($1) ver2=($2) + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) + do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)) + do + if [[ -z ${ver2[i]} ]] + then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})) + then + return 1 + fi + if ((10#${ver1[i]} < 10#${ver2[i]})) + then + return 2 + fi + done + return 0 +} + +install_pkg_from_pypi() { + local PKG_NAME=$1 + local NEEDED_VERSION=$2 + local KEY_FILE=$3 + + echo "install_pkg_from_pypi $1 $2 $3" + + if which $PKG_NAME >/dev/null 2>&1; then + INSTALLED_PKG=$($PKG_NAME --version | cut -d" " -f2) + vercomp ${INSTALLED_PKG} ${NEEDED_VERSION} + if [ "$?" -ne "2" ]; then + echo "$PKG_NAME already installed" + return + fi + fi + + local PKG="${PKG_NAME}-${NEEDED_VERSION}.tar.gz" + local PKG_VERIFY=${BUILD_DIR}/${PKG}.asc + initial="$(echo $PKG_NAME | head -c 1)" + local PKG_URL="https://pypi.python.org/packages/source/${initial}/${PKG_NAME}/${PKG}" + local SIG_URL="${PKG_URL}.asc" + + DO "curl -o ${BUILD_DIR}/${PKG} ${PKG_URL}" "0" + DO "curl -o ${BUILD_DIR}/${PKG}.asc ${SIG_URL}" "0" + + echo "[+] Verifying PGP signature of $PKG_NAME" + DO "sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --import $KEY_FILE" "0" + DO "sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --verify $PKG_VERIFY" "0" + + DO "tar xz --directory ${BUILD_DIR}/ -f ${BUILD_DIR}/${PKG}" "0" + DO "cd ${BUILD_DIR}/${PKG_NAME}-*" "0" + + echo "[+] Installing the latest ${PKG_NAME}" + if [ "${ASSUME_YES}" -eq "0" ]; then + echo "WARNING this will overwrite the ${PKG_NAME} that you currently have installed." + ANSWER='' + until [[ $ANSWER = [yn] ]]; do + read -r -p "Do you wish to continue? [y/n]" ANSWER + echo + done + if [[ $ANSWER != 'y' ]]; then + echo "Cannot proceed" + exit + fi + fi + DO "sudo python setup.py install" "0" +} + +DSTUFFT_PUB_KEY=" +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +dCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABk +ZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5 +NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGlu +IElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAA +E6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dt +ZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBj +dXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQA +WQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA +0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkB +YAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQC +HQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwAD +CwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAE +LQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcF +hgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcH +GQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII +5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK +8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYN +QA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MP +zw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQS +oxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsV +vRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZ +IBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMc +zBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJgg +xCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNol +CSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWsp +nSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwu +gi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38z +uDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5 +Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/ +IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJF +VUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL +4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxS +x1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbha +B1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h +omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNp +mmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx +8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6 +pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eD +uoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqN +MY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+X +Cpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNih +R6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr +6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm2 +8Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePC +X8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXO +Ns62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHa +dtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbn +H+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0 +NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////hAJhF +eGlmAABNTQAqAAAACAAGAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAARoABQAAAAEA +AABWARsABQAAAAEAAABeASgAAwAAAAEAAgAAh2kABAAAAAEAAABmAAAAAAAAAEgA +AAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAyKADAAQAAAABAAAA +zQAAAAD/2wBDAAICAgICAQICAgICAgIDAwYEAwMDAwcFBQQGCAcICAgHCAgJCg0L +CQkMCggICw8LDA0ODg4OCQsQEQ8OEQ0ODg7/2wBDAQICAgMDAwYEBAYOCQgJDg4O +Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg7/ +wAARCADNAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI +CQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEI +I0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZ +WmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2 +t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA +AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 +AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRom +JygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaH +iImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna +4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDyfw7Pqmo2kN15EQlt1Zo0 +jG3cCMZ2/pXqSXNxY+H7Ga1t7m8vpyTKkgCpGp6Aepyfp1NeQ+FNcK+IlQSRpbuC +JzvyzL2AHqT0r1q11C+u7iazjtAkEWFQzchfc+v0oA3nXWbDWYptVtUWS7ttsWxt +wQdwPQ16NaatF4avoU1TTTPApiEktvOBEFJHyMTj2BH4VheJtP1PUfCOlalZgXl1 +aoBKANuU29APXv8AhWKmtaDrPw3m0bxFNZWN+EW809bmQqCYnAO4dgTxz60Afelz +4y+HOs/E74e+DPD9/NqHgmOQ/wBtrFIWt1upATChyckh8sQucELnivOPj/8AALw9 +4N8OzeKIdTvbSwijEccJKu99dyPhB1GDzzgehzXxVpXxO/sXVrLTW0u3tbFtWGo3 +EtpIA9wwK4jQ/wACADAPvmvqH4zfHvQ/Hmk3j6fApWSWA6W17JuFmIwA+wA/eZur +HPANAHiujNqh0q40qyieOO4ulV0YANJIg4yc9Bz9OTXoug+Kbqz08Wl5cSieCCaO +CwuXzGC68nHQ+ufpW18ItI8AeJtS1W48WateXOnqIvs0dm7K5nbBcZXnb2x3zX0N +qHwb+FUH7TGj31td382jzRvFcQeaHt4R5ZAG49txzk/3QKAPl/w/8QddTw/e6DLc +GLThlIIM5AkcgZx3fHAPYGvafgp498dQ/EiLQ9Jdb9rqbyZLeYbo1ABw2R0AznIr +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 +=1NFB +-----END PGP PUBLIC KEY BLOCK----- +" + +install_pip_securely() { + NEEDED_VERSION_PIP=1.5.2 + install_pkg_from_pypi "pip" ${NEEDED_VERSION_PIP} ${DSTUFFT_KEY_FILE} +} + +install_virtualenv_securely() { + NEEDED_VERSION_VIRTUALENV=1.11.2 + install_pkg_from_pypi "virtualenv" ${NEEDED_VERSION_VIRTUALENV} ${DSTUFFT_KEY_FILE} +} + +case $DISTRO_VERSION in + lucid|natty|jessie|wheezy|squeeze|precise|n/a|raring|saucy|trusty) + + # Create the build directories + DO "mkdir -p ${BUILD_DIR}" "0" + DO "chmod 700 ${BUILD_DIR}" "0" + + DSTUFFT_KEY_FILE=${BUILD_DIR}/dstufft-pub-key.gpg + echo "${DSTUFFT_PUB_KEY}" > ${DSTUFFT_KEY_FILE} + + # Import the Tor public key + DO "sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --keyserver x-hkp://pool.sks-keyservers.net --recv-keys 0x886DDD89" "0" + sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add - + + HAVE_TOR_REPO="`grep deb.torproject.org/torproject.org /etc/apt/sources.list /etc/apt/sources.list.d/* 2>&1|grep torproject|head -n 1`"; + if [ -z "$HAVE_TOR_REPO" ]; then + echo "[-] It appears that you do not have the torproject.org Debian repository installed; installing it..."; + if which apt-add-repository >/dev/null 2>&1; then + sudo apt-add-repository "deb $TOR_DEB_REPO $DISTRO_VERSION main" + else + echo -e "deb $TOR_DEB_REPO $DISTRO_VERSION main\ndeb-src $TOR_DEB_REPO $DISTRO_VERSION main" | sudo tee -a /etc/apt/sources.list + fi + else + echo "[.] It appears that you have the torproject.org Debian repository installed!"; + fi + + if [[ $DISTRO_VERSION == "lucid" ]]; then + HAVE_UNIVERSE_REPO="`grep -x 'deb http://archive.ubuntu.com/ubuntu lucid universe' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>&1|grep universe|head -n 1`"; + if [ -z "$HAVE_UNIVERSE_REPO" ]; then + echo "[-] It appears that you do not have the Ubuntu universe repository; installing it..."; + sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $DISTRO_VERSION universe" + else + echo "[.] It appears that you have the Ubuntu universe repository installed!"; + fi + fi + + # Install the basic packages to get pip ready to roll + echo "[+] Updating OS package list..."; + sudo sudo apt-get update 2>&1 > /dev/null; + echo "[+] Installing packages for your system..."; + DO "sudo apt-get -y install curl git-core python python-dev python-setuptools + build-essential libdumbnet1 python-dumbnet python-libpcap tor tor-geoipdb + libgeoip-dev libpcap0.8-dev libssl-dev libffi-dev libdumbnet-dev" "0" + + if [ "$PRIV_MODE" -eq "0" ]; then + echo "[+] Using virtualenvironment..." + + install_virtualenv_securely + + if [[ $DISTRO_VERSION == "lucid" ]]; then + DO "sudo apt-get -y install python-virtualenv" "0" + else + DO "sudo apt-get -y install virtualenvwrapper" "0" + fi + + if [ ! -f $HOME/.virtualenvs/ooniprobe/bin/activate ]; then + # Set up the virtual environment + DO "mkdir -p $HOME/.virtualenvs" "0" + DO "virtualenv $HOME/.virtualenvs/ooniprobe" "0" + source $HOME/.virtualenvs/ooniprobe/bin/activate + else + source $HOME/.virtualenvs/ooniprobe/bin/activate + fi + echo "[+] Installing all of the Python dependency requirements with pip in your virtualenv!"; + fi + + if [[ $PRIV_MODE -eq 1 ]]; then + echo "[+] Installing pip securely" + install_pip_securely + + echo "[+] Installing all of the Python dependency requirements with pip system wide!"; + # pip 1.5 needs this + DO "sudo pip install setuptools --no-use-wheel --upgrade" + fi + + + # First install pyasn1 and pyasn1-modules to avoid bugs + DO "pip install -v --timeout 60 pyasn1 pyasn1-modules" "0" + # Install all of the out of package manager dependencies + DO "pip install -v --timeout 60 -r ${REPO_ROOT}/requirements.txt" "0" + + # Install lucid required pip dependencies + if [[ $DISTRO_VERSION == "lucid" ]]; then + DO "pip install -v --timeout 60 pygeoip service-identity" "0" + fi + + if [ $? != 0 ]; then + echo "[+] It appears that pip is having issues installing our Python dependency requirements, we'll try again!"; + DO "pip install -v --timeout 60 -r ${REPO_ROOT}/requirements.txt" "0" + if [ $? != 0 ]; then + echo "[+] It appears that pip is unable to satisfy our requirements - please run the following command:"; + echo " pip install -v --timeout 60 -r ${REPO_ROOT}/requirements.txt "; + exit 1; + fi + fi + + echo "" + echo "You can now install ooniprobe with: " + echo "" + + if [[ $PRIV_MODE -eq 0 ]]; then + echo "source $HOME/.virtualenvs/ooniprobe/bin/activate" + fi + + echo "python setup.py install" + + echo "" + echo "You should also be sure to edit your configuration appropriately by doing:" + echo "" + echo "cp ${DIR}/data/ooniprobe.conf.sample ~/.ooni/ooniprobe.conf" + echo "" + + + ;; +*) + echo "It appears that you are using an unsupported OS - please tell us"; + echo "by filing a bug: https://trac.torproject.org/projects/tor/newticket"; + ;; +esac diff --git a/setup-dependencies.sh b/setup-dependencies.sh deleted file mode 100755 index d96f2cf..0000000 --- a/setup-dependencies.sh +++ /dev/null @@ -1,992 +0,0 @@ -#!/bin/bash - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -BUILD_DIR=/tmp/oonibuilding.$RANDOM -BUILD_LOG=${BUILD_DIR}.log -TMP_KEYRING=${BUILD_DIR}/tmpkeyring.gpg -DISTRO='unknown' -DISTRO_VERSION='unknown' -REPO_ROOT="$(pwd)" -MINT_RELEASE_VARS="/etc/os-release" - -# Discover our Distro release -if [ -f /etc/redhat-release ]; then - DISTRO="fedora" -# Debian/Ubuntu -elif [ -r /lib/lsb/init-functions ]; then - DISTRO_VERSION="$( lsb_release -cs )" - if [ "$( lsb_release -is )" == "Ubuntu" ]; then - DISTRO="ubuntu" - elif [ "$( lsb_release -is )" == "LinuxMint" ]; then - source $MINT_RELEASE_VARS - DISTRO="$ID" - DISTRO_VERSION="$( echo $VERSION | cut -d' ' -f3 | tr [:upper:] [:lower:] )" - else - DISTRO="debian" - fi -fi - -TOR_DEB_REPO="http://deb.torproject.org/torproject.org"; - -usage() -{ -cat << EOF -usage: ./${SCRIPTNAME} options - -OPTIONS: - -h Show this message - -y To assume yes to all queries -ONE MODE SPECIFICATION REQUIRED: - -p Privileged mode - install all dependencies system wide - -u Unprivileged mode - install most dependencies in a virtualenv -EOF -} - -ASSUME_YES=0 -PRIV_MODE=3 -while getopts “hypu” OPTION -do - case $OPTION in - h) - usage - exit 1 - ;; - y) - ASSUME_YES=1 - ;; - u) - PRIV_MODE=0 - ;; - p) - PRIV_MODE=1 - ;; - ?) - usage - exit - ;; - esac -done - -# make sure a privilege mode was specified -if [[ $PRIV_MODE -eq 3 ]]; then - usage - exit -fi - -# make sure we are not root when in unprivileged mode -if [[ $PRIV_MODE -eq 0 ]]; then - if [[ $EUID -eq 0 ]]; then - echo "operator error: non-privilege mode must be run as non-root user with sudo privileges" - exit - fi -fi - -# make sure we are root when in privileged mode -if [[ $PRIV_MODE -eq 1 ]]; then - if [[ $EUID -ne 0 ]]; then - echo "operator error: privileged-mode must be run as root" - exit - fi -fi - -DO () { - if [ -z "$2" ]; then - RET=0 - else - RET=$2 - fi - if [ -z "$3" ]; then - CMD=$1 - else - CMD=$3 - fi - echo "Running: " - echo " $CMD" - $1 &>${BUILD_LOG} - if [[ "$?" -eq "$2" ]]; then - echo "SUCCESS" - else - echo "FAIL" - echo "COMBINED STDOUT/STDERR OUTPUT OF FAILED COMMAND:" - cat ${BUILD_LOG} - exit 1 - fi -} - -vercomp () { - # Returnned values: - # 0: version are equals - # 1: $1 is bigger than $2 - # 2: $2 is bigger than $1 - if [[ $1 == $2 ]] - then - return 0 - fi - local IFS=. - local i ver1=($1) ver2=($2) - # fill empty fields in ver1 with zeros - for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) - do - ver1[i]=0 - done - for ((i=0; i<${#ver1[@]}; i++)) - do - if [[ -z ${ver2[i]} ]] - then - # fill empty fields in ver2 with zeros - ver2[i]=0 - fi - if ((10#${ver1[i]} > 10#${ver2[i]})) - then - return 1 - fi - if ((10#${ver1[i]} < 10#${ver2[i]})) - then - return 2 - fi - done - return 0 -} - -install_pkg_from_pypi() { - local PKG_NAME=$1 - local NEEDED_VERSION=$2 - local KEY_FILE=$3 - - echo "install_pkg_from_pypi $1 $2 $3" - - if which $PKG_NAME >/dev/null 2>&1; then - INSTALLED_PKG=$($PKG_NAME --version | cut -d" " -f2) - vercomp ${INSTALLED_PKG} ${NEEDED_VERSION} - if [ "$?" -ne "2" ]; then - echo "$PKG_NAME already installed" - return - fi - fi - - local PKG="${PKG_NAME}-${NEEDED_VERSION}.tar.gz" - local PKG_VERIFY=${BUILD_DIR}/${PKG}.asc - initial="$(echo $PKG_NAME | head -c 1)" - local PKG_URL="https://pypi.python.org/packages/source/${initial}/${PKG_NAME}/${PKG}" - local SIG_URL="${PKG_URL}.asc" - - DO "curl -o ${BUILD_DIR}/${PKG} ${PKG_URL}" "0" - DO "curl -o ${BUILD_DIR}/${PKG}.asc ${SIG_URL}" "0" - - echo "[+] Verifying PGP signature of $PKG_NAME" - DO "sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --import $KEY_FILE" "0" - DO "sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --verify $PKG_VERIFY" "0" - - DO "tar xz --directory ${BUILD_DIR}/ -f ${BUILD_DIR}/${PKG}" "0" - DO "cd ${BUILD_DIR}/${PKG_NAME}-*" "0" - - echo "[+] Installing the latest ${PKG_NAME}" - if [ "${ASSUME_YES}" -eq "0" ]; then - echo "WARNING this will overwrite the ${PKG_NAME} that you currently have installed." - ANSWER='' - until [[ $ANSWER = [yn] ]]; do - read -r -p "Do you wish to continue? [y/n]" ANSWER - echo - done - if [[ $ANSWER != 'y' ]]; then - echo "Cannot proceed" - exit - fi - fi - DO "sudo python setup.py install" "0" -} - -DSTUFFT_PUB_KEY=" ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -dCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABk -ZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5 -NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGlu -IElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAA -E6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dt -ZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBj -dXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQA -WQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA -0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkB -YAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQC -HQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwAD -CwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAE -LQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcF -hgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcH -GQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII -5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK -8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYN -QA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MP -zw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQS -oxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsV -vRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZ -IBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMc -zBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJgg -xCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNol -CSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWsp -nSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwu -gi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38z -uDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5 -Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/ -IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJF -VUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL -4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxS -x1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbha -B1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h -omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNp -mmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx -8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6 -pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eD -uoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqN -MY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+X -Cpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNih -R6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr -6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm2 -8Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePC -X8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXO -Ns62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHa -dtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbn -H+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0 -NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////hAJhF -eGlmAABNTQAqAAAACAAGAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAARoABQAAAAEA -AABWARsABQAAAAEAAABeASgAAwAAAAEAAgAAh2kABAAAAAEAAABmAAAAAAAAAEgA -AAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAyKADAAQAAAABAAAA -zQAAAAD/2wBDAAICAgICAQICAgICAgIDAwYEAwMDAwcFBQQGCAcICAgHCAgJCg0L -CQkMCggICw8LDA0ODg4OCQsQEQ8OEQ0ODg7/2wBDAQICAgMDAwYEBAYOCQgJDg4O -Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg7/ -wAARCADNAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI -CQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEI -I0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZ -WmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2 -t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA -AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 -AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRom -JygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaH -iImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna -4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDyfw7Pqmo2kN15EQlt1Zo0 -jG3cCMZ2/pXqSXNxY+H7Ga1t7m8vpyTKkgCpGp6Aepyfp1NeQ+FNcK+IlQSRpbuC -JzvyzL2AHqT0r1q11C+u7iazjtAkEWFQzchfc+v0oA3nXWbDWYptVtUWS7ttsWxt -wQdwPQ16NaatF4avoU1TTTPApiEktvOBEFJHyMTj2BH4VheJtP1PUfCOlalZgXl1 -aoBKANuU29APXv8AhWKmtaDrPw3m0bxFNZWN+EW809bmQqCYnAO4dgTxz60Afelz -4y+HOs/E74e+DPD9/NqHgmOQ/wBtrFIWt1upATChyckh8sQucELnivOPj/8AALw9 -4N8OzeKIdTvbSwijEccJKu99dyPhB1GDzzgehzXxVpXxO/sXVrLTW0u3tbFtWGo3 -EtpIA9wwK4jQ/wACADAPvmvqH4zfHvQ/Hmk3j6fApWSWA6W17JuFmIwA+wA/eZur -HPANAHiujNqh0q40qyieOO4ulV0YANJIg4yc9Bz9OTXoug+Kbqz08Wl5cSieCCaO -CwuXzGC68nHQ+ufpW18ItI8AeJtS1W48WateXOnqIvs0dm7K5nbBcZXnb2x3zX0N -qHwb+FUH7TGj31td382jzRvFcQeaHt4R5ZAG49txzk/3QKAPl/w/8QddTw/e6DLc -GLThlIIM5AkcgZx3fHAPYGvafgp498dQ/EiLQ9Jdb9rqbyZLeYbo1ABw2R0AznIr -Z8a/BPwPoXgS4TwzrVnqGt3d6q2s7SApZ2w5ZmAPL9QDxnNN+Fz6X8JfFkurS3km -uXk1o1s8e0IMkhhhu3Tn1oA++bBrxtHtzqKRR32wCcRHK7u5HsetXK+U7j9ouea+ -Mdlo1qkSJ87PKXIbsO1Ubv8AaR1Bpxb2Wjacsq8PI0jOAfTjvQB9Q+INHg17wpd6 -ZM7QmRQ0MyfehkU7kkX3VgDVDwprNxq3h6SHUoxBrlhKbXUogMASqPvr/sOMMD6G -vlSf49eI2uTOt5bIEIJjWEBPp71gXHx/1RNauNRS5WC7ZVWTykARwOgIPXvQB95U -V8laL+0ohMP9rWUM8XSSSH5W+vpXqXhj40+GPEGoR2c5bT7mR9sbMcoxJ457UAex -0VHHLFKm6KRJFzjKsCM1JQAUUUUAfNXxElGmfGK4tGeVhqVok0BbJ2uCVZQewwMg -eua811S01ZNLu7nQNx1eAfaLQKu5iUIfAHcjbnHtXs3xe0l73WbG5tnEV4lpmFz0 -3K5I/wAPxrivDM7P4x0O6BMEglAljzzG3Rhj2yaAPpLRL++v/D+mT3Vusc0tnFLc -uD8m9kBKr69eT0+tbefmx7V5d8MdI8SeF/DWuaF4lnW5trPUpH0u6MxcvbOdyg/3 -dvI29q9EgNzLqL3DFEszEBFGVIcnOSzeg6YH1oAvUUUUAfyWeEtQvre8sriKV7qW -2l80y+ZhRgYya+nND8dW7alJbXT+eGYMki/wkr0J6GvmPwnq+kT313pC6fNJDcTk -2rnCmOMDB3Y7k9B2Fet2tvo1j4h07TWlmR9SlENjGpPDkZLY7AAdaAO/8W/FLxJp -PizzdAW8uNJsLTddx+UWt4hwPMdu2M8k+orMsfElpqVpFq4jsr3VRvktJZxuitnY -EFyvO5wC21emSOOKd4n8J/EPQvF2tR+GdOTV7PVtJjsZdNjjUhAAQJySPnk++SWI -GdnXArn/AIe+AfF+peBtY1YaDfWGh2XnQ2ilo1mnvIz/AKpEbqBgkt02gkGgDUtL -nTbG/ttGmsftF/Mscflqu4ozDOzd3PIB7dfevXfCXwzbx3cWK+bdaVZwFlvBIMdD -90frXF/DBdV8VeKJZbizgt7OBGa/1foIlxj92T1Y8gH619i+H7nTdMsY7PSlWKxh -g3l5M/MD0Jbvn0oA7rRtO0TwnoC2Wj2cdrZwYIZQAXbGMnuxJrlvFfj9tMZ0e6KT -bPkgQ8HPrjvXnHiz4hJYahDC17bROD/o8cjYLHHDEdh3z6V82eJvGra38STb6YGu -7WCQIrrnfORgvJ9Cc49qAPqvQPHM+qeFtWvUOY7HHmTbdwP0Hdj0Fbjass/hiznu -HuEZoxNcs0gJDk/d3dMgdhXlngcKngqW3iPkQtHI1yo5JkI4x9P51rajpl3faJ4f -0ewjuLe2t4A0wHO45zknufWgDYuvGUYdLK3eJJJJc/KOTzjJ9TU41kIUnlmSK2ll -2QxIMyXDdMnHQZ/xrU034Yu9tHc3J+bGdpXB/Oqmq6Tb6fq2ku8KqLIuF54Abvmg -B88zNBNNJMk0aj5Y4hgDtyfY1lSW9tLpy3bblAz5YbOD6kn61WmuAk5toHhliktT -tXOVV89D+HP41nNco2nwCZ8osihELE4HfjoaAOyt7hYQIZCT8gAZRyWx6dxRHqTx -MtxaybHQYIDcEg9a5a2voTd3cxMrFm+TPQeoHtXRpqGnyQCOKKIM3OAeN1AH0F8J -vizqdl4jgttRupXsmlw4kbpuxuPt0r7D0Px7pOveNLnSLIs3lpuSQ4w2Ov59vxr8 -wBqLS3qy2QRJduMAccdRntXsnwv8XtoHjg6tMonaOIoFLcFiO/0yfzoA/RWiuO8G -eK/+Et0CW+Wze2jSUoGJypI6gHuR3+tdjQB5f8S0Cafp90eib1Y+i8E/yr508N+I -9KuvEEmtadPJJYXV95XlsmNk6Hgj0DgdPUV9PfEOAS+DYpD91J+ffIIr5li8P6cu -j3ulWttHAGuTIDGdhEmdwfjoQe9AHvGrfEvSNP8Ajra+F9V26fbx232iWeVvlbKb -kc46IMMMnvis/wCFHjjxZ448WeLr2+isZPB9vdvDpN3BCUEhVsYUk5cbcEtjGTiv -m/WNaXWPjZb654jCw2U4j0vU47Z9rpCFAZOeu7HPTIOBX3bpMltJoFsbRIY4AgCr -EoVQMcYA6DGKANKiiigD+OzwpBqeo6XdXGixlTp9obieVjhFRCASxPU8gBRyecZ5 -r3P4a6JrWufEzQtT1VwlxYSHULm4uATDZwxoWaR/7q8AdhyO9Urv9mD9pLTviLc/ -D5Phz4js9YiijuruC2KzQywb8C4jdSFkjD7tu7axYfcGRn7R+EH7EHxF8QfsVeKb -qDxJdDW/ETC2v4dVTyo7qyVsy27qRlPnDD/aAIbPFAHL/D7x/rHxw+DninSvCcGp -2viy3LI+o2sBAjiWXBuQM/dI+6p7MNwyCKx9J+GHjy7u7jTtU8U6npWmQCeG2gUk -ymKRgZC3VcuANx98Divc/hx4Q0v4KaN4o0vSdljfTslvJNG5LThSScg8hdxJpNY8 -Zta6VKJWWCMA5OBumPYH2FAGFrD2ugeFdN0SzgMFs3lQxW64VnQEDLD3649KS/8A -F1tYadqF1FIGl3HbH/fYDao+grzG88S29xr41e9kbEMTMk0hJ5rw3xT4yaXQkstN -ld5rligkU4MaE8ke7UAX/FHi9r/xFNa2h+0XTMfNkUbmbnJy3cewr1b4ZeHXjmtt -UvLRmnKsh3jI5I6fQda4r4d+A5bhrO5uoXwArfMuCvfHvX2p4b8NRWtihG05HJxk -LjrQBl6Zon2fV7yZAv2e4IwoHJGPTtXtPg3SII7VfPiQyE5XdwcdMVk2mlobyFI1 -3KmCR0AOfvV6Tptstu0bIEUqRg9aANxoFjtBGigYyckcV5N4t02CWJ5EUsyHJAHH -XPNetyXCraNggjHJB4rzvXHfDyKoEfU47+1AHiF3ZWtu9x+68uSVN33eVb2Fci9m -6WJMZkMhB4kzhQTXql1Et5udAFKfN06c54rKe0jM+UcHedpjfnP+etAHnsMdyuIk -+WAJg5H61Nbh1voCmGVWHLE8Y649a6aSzaO1kCt92TaeM4A/+vWdPEsIUblXcRhR -2Pr+VAHQxSeTcrJHJEiuu7y1HBHU89q3Yi1pqS3UDFUyGlQrnAPSuT0+VlKfaORu -xllz9a76zhEsAjgcPtGDG/VloA+rvgV4wtGvhokqTGedMQuZMrGoydoX3JJLV9U1 -+Y+iO+i+KdLv4XZIoblTMqsQWwwO047HvX6W2F5DqGi2l9byLLBPCskbr0IIzkUA -YPjKLzfAN2cf6tlf8mFfFdoLnw58RvFFxc38slpfXIeFGyxTjtntX3L4htlu/BOq -W7AkNbNwPYZ/pXx1r9m17NJBG6o04Cu3l79oB5/GgDyzxo1xZfEafU44Rd6VqElo -zbV4DAYD/mAPxr798EaXBpHgPS4bOea4s5rVJA0jbirEA4+nOPwr5T17TbSWfR45 -I0eCSDy3XtlGH5Gvpr4b6pDc/C6007k32lxiCaLGCQM7GHqGUdfUH0oA9FoqC2uI -ruxiuYGDxSKGUiigD8T7T/gp1rXjX4bHQF0fw78M/io+oFf7Skd7zTYNNiQzTXJZ -hGzE4EKwr85kYMBt+avofw3+2/YaL+ztCfEvhG6tblLQRwzx3SsrPK4jhEw+8ksj -ElkAO3nk4Jr8yPGmpfAz4aftYpD8NLXRR4MfTYfDHie/WxFxK9pColu7nKgh728k -CRSSbThEGCCM102h+IvBPijwxfeILOS0m02O8kla2mGRaOcsu4dN4B7dKAPfdWvW -8Q6vLr1rd2r3VwGkkWGQtGrfX6/oK+fPFtxf22uI11db4lHzCMng+2eMV7hdy26/ -Cqy1nSIIY7G7t0MUkONvzYAAx37mvnbxBe6RBfW8d7fi4vJZ9q7nGGJ5x6E4HTsB -mgDzLXvFF7fQ3Vl5DmSVQqRqcKAWwF9Tnue9eq+C/hg91e2V7qMe/bGu4Ed6870h -dK8R/tKeH/D6RK88tzucNz8ifNzj6V+hNhocVraKwgVFVeoXAUY/LNADPDXh+K1t -YS8Q2IQF4znivTrCBliaH7hIwADxWbY2rC3iCKDuACAnABIruLOyjWKNdgXHBbtn -2oAdpsU1uAJwmeDnHX3rp4pGkcfxAkZxVZIYlIO8H/gOatAxqWxtC4zzxz70APmZ -/JKbj5fIAzXJanbSPLKm9isg6cda6uRxszvGWH3CelZk0Xy+YqSOQDgY6n2NAHAv -4XuNrSwzGNmGFQDrisW60K+ieO6jiIePnpgV6W+q2cKD7XNHZ5GDvcLj9aV9a0WO -BnlvYGjC5BXLZ/IcmgDxyeRWEzxqockFefuN1/HvXO3aJNbxHykxt3Mc8Adwa67x -FbpNqj3emQakbOQEgx2rKB6tzivOLm5vbZJkGm38rqMEvtVWYjjPPQ9KANW0kHlv -5bLKgO5V/vL04rpNNvVt9VtlZ2TfgDDZ57DFfP8AaD4gnVpBb2MVlDIxKtPL9w+n -0/wr2P4djUbS5uNQ8SSwXU9uxW0VFwFPcnPf0oA9/Hh7UrjQ5bg2shU/Mm1gr9Ou -K+pPgX4wTWvh5/YM8m6+0wYXPVos459weK+AdS8d+Jp7nztNaSLTY3/1seSz4Pr2 -HpX0T8EPFtsPibp+qTz29oL1Gs9Q3cDzDgofYkjr0oA+4L5ZJNFu44gjSNCwUMcA -kg9a+Sb+RNpZFwYjhj0xivr84K89K+QNTVU13UrfAKmeRFOMjqcHNAHn3jbUxYLo -2sjU7PT7ZJmgJuD+7Z3wwHXg8V9FfCzV7rUvh7p2prZR3v2aZ4vtNhcq6Swv8xzn -klTg7fyr4/8Ai5pupeIvg7p2g6Ho99rOpz38Rhgsk3yFhnJCj1HFfRn7O/wk8ZfD -z4H3cHiLWbjRbnULwXraTZlJTapsC7GkIIDkDJCcA45NAH0To0lpb6nqWmW91HKE -nMyxbvmh3/MyEdsE5x2DCishPC2k6Tbx6vpEN2txHePqV0UkZ5dQdotjbyTlmKgY -B4BUcUUAfyQ6br+leO7/AMRDSdO+wtbTiaOFCY4Y4XOTgE5bnIGeSQW71m6l4s/4 -QXw5dW9vM8tpczm3uFjO1RLsLHOO+3mrXw48JQtYR6n4nsNXtbTUNklo0Euw3ATJ -VVAPAGCSTz2HWvTtLtvCPiP4MePPBGp6PYjWL/UGvPDupX4VhayGPy1k56soyffO -KAPEvD37UXjbTfgLcfDJZk/sddMWys75nKz2kan5pV4Pz4PHviuOuPi/f6t8UNKv -7pBDp1g/+jQqeEGOSfc45Ne/aj+z74b8T+H/AA34T8C38Ub2sTzXV1I4+06nMykK -gYjAJPOeQBjA9PjDxL4Q1vwd8StT8L65bx2erWc5inj80MPqp43DtuxjINAH3x+z -hrFt4k/bH0PxAjq0AtrldgH3HGwAflmv1pQC4jjWMhVyDjHJ45z2r8MP2Tbm4039 -tXwRbiUm0uTcwTKWwoZo9yjGeT8hr93YLeNNAikSQI+Ac46nv+NAGxaRRRxmbqvH -lg8YHvVa88RQwXn2eORVK8uxPyrXG+IvEa2K7ITsIGMDqox0r4y+KHxc1Ox1X7Ha -bFi3YkctjI/rzQB9e+KPjNoPhWxle61KCScJ8saNlnJ6cV4bdftA63rV262QNnb9 -SHJLexAr4O1HxFqOseIZru4eVYzJvOW3sxz056V0lprbWQEkkyRq2MMZMY9qAPtS -b4reNJ9e0u0tr63sLOQst1egeZKrY+UKp4X3J9a6O7+KyQWYi1TV9R1SaOPYrTzH -PByRtGAK+DJfiXaWl6PKvPPli6bTkhh6V22l6hqfj3xBpc+k2E0kt1GVvG/hVhj5 -j6ZFAH2D4d8bxavfmWxjhyGxkpz9DXvWgw+ftuLkKwZc4bkLjvXi/wAOPhhcaZbR -TXDuynDE4xj2r6Y0uxit7LyiI9gG1VHBoAvmSO90IiNllUqSGUYB/OvAtakI8SPE -x8tUhf5ccgg8fWvoJ9sdiY1QLt4I6AV83+O5prXXbqWFFllJAdwfurjlh/hQBt6X -odz4m0l5IJFNxABv5xk+tZ2teXpHh7Uo7iQ2Jit8ySMcAAnGfxz1rR+FuueV4uCu -6GGchmyvVcYGO3PWvXfiR4b0PVPAd9ZXISCWe2cxzdMr1Kk+hoA8U8FeKvD7W/8A -Z05W5tJgEJzyD0r03T7SLQLnUYbeQSWctuLm1lTrhTn86+dNB8BSzRmbRpLi5O4M -FRScfl0r6Y01I0s9P055I5rmGykEu052hgOKAPs/4TfEODxZ4Ot7C/uoW1iGMAHp -56Y4P+9jqK8K+LkWrad47caLeLZW9vqnm3UKxhvNiI+5/sjnrXmnw28Wx+FvjDpU -16mbaOcxlBxtBGK9p+K8Iv8Ax095pxZo7iJJVYYw4K459qAM74Y+f/wuHR0E01u4 -d3jbqHBQ5U/7J6GvsOzuku7FZkV05KsjjDIwOCp9wa+L/CTT6f8AEjw/dzLsWK7j -GEPHJ2/1r7IuJZRP5NnHHLIWHnnzNvlqR16fe9BQBla/qv8AYHgzUrmGS0FzBA01 -tHc7gkmDxHkckknaMZOSODRXLav4Z/4THWRo/iPwtNDo9jNFe2GsjWczi6iYFGRV -5Ujnk8H0NFAH8etn4z8QaloSLDK8clpA/wAkrbRHGvBAB6AenWrOn2Gt3tlpuqXc -skRWVJoJrhvkYD+8PQ+g61wFzr/hL7Cg0eLVYp5IgL157gs1zIFJZwrZ2l3OSPug -DjBNXdY8Uzan4fs7WAyD7JDHuy5VI1J5PHJbHAoA+kvAfxJ157+9sP7Xspr6OWKW -0YQ7TCN2W2gfl7Cuy+Lmlat8Q/hN4/12fwN4fSHS9K0+4k1xnKzT3lzO0NvDa7VJ -ad2HKDgAqW+8K+NLe7+xaS90+pPp+4rJAbfIlcZx16gHp+de6eEfiVaCHTdE/s66 -1G2l1mPU1eORsTSxII1yB1wqhAewoA4z4V+D/G3hT4//AA58Q3WkyxQW3iqO2mJG -NpJaMydeVIY89q/a/wAReJ5NK08xyt5UYPLEdK+F08Z+G72+sprmzN+Ir+C5kwFW -FXVgQFHcKe/XisH9o3446lffESDRfDBeO3WNWZ4yORjkk9h7mgD6o1XxjaXGmXJ8 -6OS4KngNlv8A9dfGfj2W4uvF7S3CO8IXMZI4znJ/ICvNbD4rX2mSC91W48y1jw1x -h8/L7/h6dhX2x8QvgJqt58J7DxXYTyreSWaXEUMwyXVl3Yx0XI7fnQB8D3mpPb3z -SozSIp4VlwMe/rz3rK/tO41XW4YZ5jFIWwVAPyZ/+t3rfudI1GHxsthLbuzMx8yJ -12sn+PtXeaJ8PLy+mWW1tY/JY/MzjqevWgDi/CfhR77xiPOd5YFl+ZjnpnIPv9K/ -S/4QeEotM0u3mlthZwM+/BjAZz7/AOFeU/Dz4YJaXlvdvALuaHkRqp2Kfc9OK+n7 -DT9Zjt0MjKic4QDvQB7PYanaiNIVcD2xzxWmNSj5O4KV5614413LY24WUhm4LMp4 -Jq9BrCgTmTiNcHKnI/P3oA9Dv9Va20+VmlLOqltzdx2r5v8AFuuJmeSWVGR22urN -j5TxjP1ra8R+KBHZTM8paPyxtKPzXyp4i8VXdxqW2QrJbKZAF25MhPTPv9KAPoLw -3rlvY6hH5Ug+zxzIIVRhn8O+OOlfZ15p/wDwmfwkhjjuFSd4hiQ88dxX5m/DoTal -eWf2g/Jv81lY5KnOBn1xxX6K/C/Wre48HpYeavnB2UqT6HB/CgDa8PaC3h/Rjp6r -GlqyESEcM5P8XHSpNI8J6dp93PNZXc12k7N5hlILIf7v05ryLxlqnjbR/iBeadAz -TafJGbi1dM52A4Kn3BOB7V6t4Ea6l0KCS7ZjNINzjrQBwPi3RbvRtYi1CESMhlAk -OM8dsfTivZfD+p3eqfDqxuZ2kmaOPCSOu3K9h/8AWqfU7S11PTLiwmVZNy44H3TT -fD8P9mfCpLJoZTcwXLxSFjlSc8bfwIoAu2QlTUbOW4fG2VZCF6YDZx+Yr7B0K3mg -8OwPdTC4vbj9/cSgYDO3PHsBhR7AV8ZLNcNehSqLGxKF1HTmvsLwlqCal8PdLuFY -M6wiOQA52sowQfyoA6OiiigD+A5LplLHy0LH7px93nPFbVpqd7PfRRWluJJ2O3as -ZdnOO4HJ9QBXN9G4P41uaBr154d1tr/T/KS6MEkSStGGeEOu1nQn7r4yA3bJoA61 -5Li38U6TZ2V9HqN9PhWwAfKycKvHGev0r2Xw1rWmaFqeh/b55A8OpwnU7OI+WHsk -nQyxJNjKM8QcbxwCw7818+6LYvquo3X2aRbJba2NwZCT8oXAVARySxIAxzk16Tq9 -3aNY+GLa5WG0DqYxco2Qvlt87MB6HjtnpQB9beIvF3h/W/FHj7xZF4dXwtoN5qRv -dK0bT7YRWdpCqxpDbp2CAIC5B+d2cjG7A8b1m7HifVLjWz5dvBdN5lwEXGOcANjt -x0HArn9T8Q6/qnwQ+y77268LWV9BazzooQCZz5kQPfLcNjp0zWF4eup9N1KytLyV -k025kjV548uBCZB5nHrs3YH97B9aAOq8K6KPGH7S/gP4f2ECXI1XxDZWlwrnIMRl -EkuR3/do/wCdfvj8RyrwppVsirbQKIkUA4AUAflgV+Vn7J/wqi1r/gpl4V8baR9o -h8H6Xa3Wu2SXEokm8ox+Rb+aMZDM0kjAcHgelfrLrq2000xmYPKWYEY7euaAPmPW -vh/4a1kvPqOm2ruEyrqArKe/NV9E8D+CdNmJEbPsIJjklJX8s8103ijRtYurMxW1 -yFaVjz0P6dBXyn471bXvh/4kgea+keKWTDRJyig8dTQB9pQ6zpVjbLbWUCRxoOEQ -ADHQVVm8Up5jYUgbuATkn8K+S9N+Iz35G1nRPLBLM4yT6AenvTrjx3Kt3cRtMu9l -yF29fbPWgD6IuPF9sszozPGEy21wDkd8GsqTxVbpay3C3EYifl0B+U181XXjG9lZ -pPldD/yzY8ge1ZEHipCktlLcOGflcjIPcCgD2vUdSluPD8l2swaYxtE6DoFJwBj3 -6188alqc7ayssUsW4B1dTzx/jWvqPiddPuJoxM7zqmQC5GM9BivJNU1NH1t5IJjG -s7fNuGQGPBoA960DxadKs4ZLUiOWBfKkiPUk4ycdya+tvhD4zD/EW6tknzG6CTnu -CMscdufzr85p717TUbaOOUyCcJiTnH3sZ/n+Ve8+ANbvdP8AF6yxb457hdhkc4VY -l4JJoA/WyNdP1nTJHuI4nlNsRG5XJxjP5UlpHa6Zo8aswCpFksDj/IryPwl4qS9s -VAmRZVgCrtbIIA61f8Rax9qt7LRrN3aa7m8p2Q8qmN0h/Lj8aAO+0zUxd2jXwZAJ -H3KrHjGeCa69HWfQZpIzIXYhmUjGT6gV5kktvaWSOsLGGMH5I+rYH612Ol6sh0+F -1HlbkD7ZBgqCM4PpQBXeYrqChZTIrkbgvC8dxX1h8OrhR8N9OuIlLQyyNFORjCOG -OGP14B/Cvk3W1RY49Rtw6rngRjgNjhcentX0D8K9f0+L4KSW2r3sVlNJeCELzu8y -YBVVR1J3elAHvdFZmn3kcumRrJdQzXEZMMzBurodrfqKKAP4Fu9XLWZILlZJIllj -ycoT94elU80UAdRpMto3ieEyt9gtZMea442Ad1Pr71s6dpmg6h4vWHU767ttGR5N -8kZBmMahmRUBBG9iV/2RkmuEV2eQbmJJ4ya9E8KRzPBf6gsGkNBZKZHN7NtJAXLb -eDnAxx3LACgDrNE1i41Hw1N4dldbDw1LeC9lDzZ/0ncI4cH+NgNoP047VrXvhXxH -ouqzadrAazS23SSGaNghUDJ2jryOB3GeawovEKeGfiJpGqWdjZzta3kF3HahMqZF -fzFOOh+YKcf7PNfbXgXU/CGvfB74a6T8TfAOoXXiPx7res6/L4w1S8TdZ6cJDEkN -vtYTJAX2tkgb22BMryoB6F+wT4i0jStK+Lfi68njt5PNtbZVlf50jSIPg9hguRx6 -V7R4s/af0HSjeGR0nl5MUIbk898dq/Pn4b65DdfGrxR8OPDd9b6Ja6hbStayEM7z -SxOwRXJxg7FG5f4TlcnGa8/8X+DvGug+KrhtZ8i4O75ZYZSdwPsRx+ZoA+j/ABX+ -2ldW/id1s7CaVw2AsWGVBXm2rfFHVPibqVpaXNvIHlnWRsHO1Qckn+Q+tfMd7bDT -9ZQyWslujtk+YNxOeSc9+a91+Gix295FcR25cgYLKpY5H8R9BQB7j9mS00PzFEi8 -5AH30Pt+FWdDurHU9TeGeXC5GHZyWrG8TeLYdP8ADafabm3gCx/MsjgEe/HNeB6b -4+8RSa5c32n6TJeWELBluEQopA/hDY5470Afbd/4ZtvsEW+QzRFC6lV6DOOvYV4x -4hdbO2eO2+RIskl+CT2/HivRPCnj5Na8GQw3EcyMw5WQjenHI96848ZqL2xuWXYo -ZWUKGOCP73qDQByd5qMl/C0kreasy7GyfmJUZz/OuWtL6Rr0W0rSTWgkUYxyoPf/ -AD6VhHVZFmRZgkZLAyLv6EcZ+p61YRVubiOe2dwxJL4/SgD1m1Npc6YriQJJDOAy -HJAAJ24z2rrfC3iua4sEiZhNcQO6S4J3EBuT+WOK8fXW/s8S3M1tF5cgAkRsjcV9 -vc1FYeL4INaNxYRQ280xCzqWxk5xlfc0Afoj4R8e2Wl6bB50pEQVlklTnb0OMdRx -Xu/wv8Q23izxRqWsQXYks7NRbQr3LHksfqMV+V9vrOpvbx/ab59NspjtSNQfMIx1 -29j7mvQ9B+IEnhzw22kaTqt5FBPJvnMczBpGI4yw7UAfr6b2zsjvkuYYwBlg0orl -YvF9nquvvbxaxpumaXC2Jru5mGS391F749TwK/LH/hY2pz27CXU7ojdkbpGYMO/P -5VnTeORcXpFxeMAoyFZuFP09PagD9ln+LHww0bQTaXniezv8AFkRvNZu27jvmtzw -f+038LfC739vNd3Vw115bxOLTeYtpIJx+PHvX4gzeLrh7ZYknG8AgBjt3d8/T2qu -viu9Uq5uWTnkdCfx9KAP6B7X9rD4CJ4purqGfUGnuEAu7ltOJYuuAO/PHXHoKK/A -ZfF9xNCSsq71G3yg2PTrRQB+X4Vj0BPOPxpSjh9rKynuCMV9FeB9V8AXVjHHqWiQ -2+oRhhbSo3PszE9fxrg/EngnWHvtR1QXOnXHzNIY4X+7H/D7Zx29aAPPrawuri4g -W3t5rmR9zLHHGXZwo3McAE4ABJ9gTV2zVbu7VY7N5boy7iIkLDBICqFA9T+taHhb -U7q31u5t11lNEtb2wmtL27aMPtt2GZFUHu20KMc84qz4a1u50TxCNS0q3QamoCwh -lyiDH3mHf1/AUAV5pdTikv8ARzZTpqb3Ad1KFZIsc/h2r74+BWm/CBv2OvEPiD42 -/FXVtC8ZWOp2kPhOxgmEl8IbeJXW1hRgS0LM6oUwEXc465avhx/Ed5Nr0kzTrLqd -3JuuLlVyzueMf/WFdFdaSZ/BOoXt5mO8WFo7cMmXOMkjd1AJJ4zjk0APufiBqtt+ -1pD44nms/wC1I9VSSYWg/cIvCNEuAMoqfL7lWPevrPx3rFtr19pV7YPDc29wm+M5 -yCGPB+ma+HZPA+pTeHINS0qWLVSse68WFsG3OM4564HU16B8OvH4ijsdC1NIzBCy -JbSZ5UD+dAHtGv8Aguxu7e1uPEt8LO1I5MOPMcDsvpn17CrfhDQte8aXRsfCLx+G -vCVuTbvqOw4bbwY0b/lo/qemepzxVjxJ9i1T49fD6x1UxSeGLqVRcRhiEeKON5OW -9CyjI7jjvV7xl8Xb/XvEH9ifD7To9N0WzbyxJFGFSIHjjHTOKAPXdL+CXgizuo21 -GS58SaogUvJez7+P9wcCvRv+EK8PfZUs49Ni+yD5mVE4A6YwOleNeCdQu7COBJ5p -bi8cjzGJ3bz3PPT6V9I+GYZtRv4YXSSR+C/ylQO49vxoA8S8f6Lpmg6bHc2Ua2RY -hcjI2469PyryG+1iV/DRklVHRgdkir1GO/pX0z8TrS2a4ksr5rZYWRiD1ZcdPxzX -xRqOuW9pbXMNxIr2xlYRgtzjpQBzs9rBf2TTRjbIMna/G7Jxj3qXT2RI3tpQF2nP -mFdxA/DpXHx+JI1nlhOBEFKgMTjPY4710YvbJbKB7nc5VDyhwxHofrQB0NtHeXt7 -KjkS6eBl3lfCAY+9UUGp6ZpabNKg+0zj/WX8qbsc9Ix2z69a4a98Qb547S43w2bO -BDZQNtZ/cnsKj+2zTXMcCyG3duTGvyooz6/40Adtb6pd3N29y0rBWUgGQkkj1x71 -sDU5mjBikWPjkScFhjtnp3rzqXWbe12xRB7iVPuleUHHb9abb393etJLJh0Iy2M5 -Pvj0H+NAHoC6nKY8faicfNGVHBHfj36U43spbKSrGVPyhuSTXE+bIrBsFV3YD9Bt -I/WrMdw0S5JK5bpnvjqfQYoA7R9RYIkjYmc9JEOMfh1q6b8ifcHOdxLMwyynHpXC -pK8YAURzSbgN5bse2OuKkN2NrI6NFKRuG08sAeg9KAO6TWHSXazIxJBZsbR/+qiv -PDf7dqQLvj6kSDJ//XRQB84RTGKFHDYZWG0evvXS3Ws37aCJre5Lxs2LkbuTxgBh -6VyK5PuB15oJyxCk7T2oAcmMlgcMOQK1dCtrnUPFtnZWzsklxJ5ZKnHBBz+gNQWN -8LIXgFnZ3ZntXgzcRB/K3dXT0cY4btk8V1HgfxHqPhbxH/aOlwWA1GRDHa3NzD5v -kHqWVc43dBk9MCgCGXSFtvtGpWZuBZxXYhgfbgh15LHPTBHAPenXniXU4tdWaSf7 -VZMoH2Z/9WAB0x685zVhNaW60qy0jUDMsFnPLc3UqyF3ncklnYnq/br3PeuMuLoT -RGNYwqCVnj9VB/h+lAH0R4K8SeF7qKbQrmCRLDV4vJnt1mxOoXkqp7BuffHvXkfj -vR9P8PfFLUbbQnuDpayA2zsxbbwCyB/4tpOPXselcWkkiXCSxuySqwZXBwQR0INW -Lm+urvd9omklLSF2yeCx6t9TQB9k/B7X7Lxx4e8P6RqSpLqui3W5gRkywscA/wBD -XpHiHw5PF4umsPD2mpZxSXILQxJwecY4718G+DfFV94Q8fWWs2LuGiceYgbG9e4/ -w96/Y7wBaaJ4g8Iad8RIpLZ7W5tBNH8wPlsQAR9RQBxXg34baylzb3Wpf8fb/OUH -O32/CvehLaeFdAkuLi8QyKuSrH7wHp65Nchq3xCstP0K8nMyxJDtEShunJ5P+eK+ -T/jB8XInzBA/lyINroDnBI7c96AJ/i/8RkbxOxlYsk8eAVI+uOO9fD2seJDPrs6t -u8nziQFPb0zVzxZ4pfUQ0ImeWJxvVieQa4O0CyytNckm0jOZPVj2A9zQB12moqSH -Ub0ssYY+Sh/iPrirV9rLQ4abM0rE+Tb9eexOOtc6L7zAt5JGoiQ7YYwevoKqC8Md -19obabxm4yMiMdOPf+VAHQ200lrLLdXcvn304ILEAiL2Hv6ig6pdXDyDOVb5Tt4J -x6n0rm5bktF8+Wcjue9XbW6y8axKERRguT0J4oA63T0cKsrmPysgc9R9K6Q3LuGi -UrtPynB4X2rkrJDHeRbp4gC2SIzkH6mrABhnc7izFiWyMkk/zoA6UPIoDBjLg4Pt -/hQbt/nZlXBHXqPrmsNbhViGXYuq/OAOntVUzTzTPMXTHIAY8Y9KAOp+1wRqrxyi -Odukh5JPpVa6u5UZ5Wl+YcKzHJx/hWB56CVgzrk9Rxt68cHpSfaXMjglBnkBskED -09qAN4amWw0wRlBHzDqOOP0orl5bne0pQKjAfMG/iooA85milhuGinRo5VxuVhgj -jvXX+APC0Hi/4q+H9CvdWstCsL7U4LW51G7dVitY3YmSVixAwiK7Y7kAd65CaaW4 -u5Z5naSaRy7u3VmJySfxq3pk0dvrNrPPa/breKUSPblsLIF5Kng8Hv7UAb/jnTNA -0b4oa7pvhjVJ9a0K31CaKwv5oBE91CrlUmKA/LvALBeMKV9a5ZGdZN43bgQcjtTp -5xPqM1x5UUHmSM/lxLtRMnOFHYDoBXovhu18Pn4N+Ob++0S61PWY47WLTrpg4t9P -8yUiSZyCAXYDYiscZBJoA5dbGPVb24ezuI4Ay5CSNy5GM5/Hk/WsCaGW2umimQxy -ocFWHSu10bWtR8D/ABIe6udHVruNSPsd3EY9pdcpkMu4YBBwQMgj2NdF4xufD2sf -2rqN1uj8RRxRr5NrxECR1we2TzQB5GCQD059qDyc09WHmLuXfGp+70z7V6/L4O8J -601m1r4p0nQtTeBDdWBLTqjEcgNxyoBLc8UAePKcSA5wc9fSv05+D3xS02H9i7St -ChMFpdW6Ou1fn2orYXJ7sep9zivh/wAWeCPDGkwaWvh/xDPql2bjyr77ZB5NvtID -CVHwMR44OeeuOnOPZ3OraB4ea6sNY0y60+O6Mc1raXRMg5OJCMfc44P0oA+qfGfj -a0k8N3UAuQ1/xLKHfIB54x/dHT65r5G8TeIrjV9TmlaRm3vuck5y2MflisK+1i8v -Z2aSeQgjGC3bPf1rKJJ6nNAC5ZjgmrAbzJo40ACL0x39SardB71KpCR7jyT2oAty -3ChBgHcOI/RR/jUVujuxdRlh/EfWocEne/c8KKlNw4UbcJgYAXjH/wBegC06r5oX -zNzL94npj0pyTBQSS2AeqtgYqiJm2tuxtJyRTWlVkwEIPc5oA1/7QbcNvAB9MZ/w -rSS+d0Uyux6f/Wx71y8Yywy2Ez8wq7G5DEqVT1B9O1AHSJfRqjFhI2D90ng1E14C -hyfmAAUev4VjebgFfkd+zDoKhLsh3YwwyMqc0AbbXJmbdNsLFeFHGaEupPKZQdq9 -gevvWN5wXHTdjjcKmSTzQQwJIGfTFAGk0pjBeOUkHlwh6UVivNtbjA4wcUUAZVTC -V/sphAzGW3MMdcDj8ufzqGrNpcvaXqzoFJXsy5B9qAJrZIf7OumltpppWCpAQDtU -k8tx1PGAPc+ld7oXxGv9A8APoEdtbXFkNUhvjYXEO62uJYk2Brhc5lAAG1OFBG45 -Nc2/iq+N3bSW0dpZLbSiSCOKIbQQCBn16n862YYJfGsV0YrZpNYiJceSgAKAcD2H -uaAOf8T+J9Y8YeP9U8S69eS3urX9wZ7mZupbAAAHYAAADsAB2otLszW0i3KT3Epk -3lsj5hjGCfrWDJG8Vw8Ug2ujFWGehHWlWRwQAxAxjrxQBrSzRx29xbmNNhbIViMq -fY16BZanCPCGh3A02ztZIgLUy+bl5gT8zMuPlHt0IGTXkxyX/vHNakF08sVvbAx2 -yoG3yjILA/3v5CgD2vSF0fxAup/2r4itNP075vPLxGSWcdlUg5xngcd6811/QIbG -VZdP8/ybgnZHvzhcZI3d/es+z1JreyexsbVI57grGbjOWOSOP/1Vcvkkudft7LU9 -QihjtpCk3ltkRjGS2ehJ6Z/woAw9OOlvexRajDcLARh5oWyyns2O4Hp1qHULEWcq -MkqywSgtEeQ23JALDHBPWtG4u7Cz1eEacGltlQCSRkAMhz2B6DtVfWNVGp3EbJD5 -KqOeclj/APWoAxu9PVc8npmmjrzQSfwoAlLsuQCM9CaiycUlFAC8k+tA6/SkooAn -DANlmAHtQXQnJLn1qCigCx5iZ6uM9c0ea2Sd+eO9V6KALBcFfSlEjK4IJ9xnrVfJ -Hel3ev6UAXvMWZDztYD5VPSiqXuDRQAgXIzkCk42jjmjqM0lAE8AgLOJyyrtO0qO -c9q7zwH4sk8C+KpdZGntdiS32xI7bQ2T1ziuBhIFyrMquFy21uhwM4PtXpfj5tMi -0/w3pem6LYaabLQrX7ZdRAmXUJ5QZWmkPTI+6BjgZ5OaAPPNRnN3rV3eeWkIuJ3l -EanhdzE4HsM4qa3017nQdT1BJVEdmI96kcsXbAx9OappOVmR2SOXac4cZB9jXXx3 -MS/COe0W2VWnu/tM0gbk7TsRB6KMk98k0AcdHDJKx2I7FRuOFJwM4zx9akSINuBk -VHHY96+lPhb4rn0z4VeJbO303SzHpaxzebJbhpp5JC2WL9QABgDt7169d6T4Z8bf -BTTrvXdAjku1gN2s9vOYXMjAcsVALYBxigD4XD4sYkh3+fu3M/dcen+NUCDt3bsk -nkE8133xD8JxeE/FiWtvey3cMqCRN8YVkzzgkHn64FcDt/eqD6UAWcqmngKCGYnc -3X8KpVNMNm1RnGM1DQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//ZiEYE -ExECAAYFAlKiLiAACgkQA9fEp2eRsU8h8ACg3oxwTqXXqDA3tR3PjE8i4pwOzJ0A -n2bmVySBihj7rePnHaPNVaj+00beiQEcBBIBAgAGBQJSkwu8AAoJEB111GTvaF1I -eqMIAJLZm8XP0Fj3vZs2AB8Z6OqdgMZ5aG4PN7hz2maaUvLrTDQp0sbSnp28PpzX -HDRTfM5jw/1hPH6RCOTFOd2+udbyVtpR+hU8uR8EAgcmyDmuP1VkAn7q5KrqTAM1 -KXVB0TbHKdBS8HvlZZYFUgQnjkpbC6hO0XJMZ+ypOl/dppCRD1/9vGFKwN600Ztc -t1KnBzivk81YJ5gLTN5xMNjD1vISrgk689tc2M+RRmOraqLWck/I/6recbjlnhbC -HiSOfcbfT0KNfZtMeNjotdSVnfXL4Ix75cNB4tRrMKxuIpBj6Q/VvnAj9hcxeNN9 -PjBbOe5acR5+HVFlFeD5KO95GQ2JAjkEEwECACMFAlE2FJsCGwMHCwkIBwMCAQYV -CAIJCgsEFgIDAQIeAQIXgAAKCRBuPLzpM3Lc+rBsD/wKBXDVQd4AHPlCJfBcGfJj -GpIjF8ow6+0Fj9SLxBHPdIKrQTVPUjJxo6iW0ViucVkUQAqCfkM2tq0HIpvywu5P -SHvScpaGPYCbA/7FTW27n6sXS3yfBtAZU+jBYGWyc24EC3CLYov6aF+JDaII59Ht -qcnZ1jlNasA6vpssdLssn7Hjq32Dj4AQ4kU7VJHNRQ2HJxRQunQw3JtWoMnhgY7c -7CkuNbB2EiCmMt3ZbnXrGQEhkAYBL0Ncq32OL9peRBgA9Gd24wlwx6hPWPRhTh+l -YO7VlDd5xyYWe1lNbpLGzUryAAPihGXtxvy5Lu9E17B6ljgAqh59hL/oVrVlu9Lg -aeW0f3Ja9M/PKD+5RZB+Xi4ym8mXPF/c886+5GN9/qu/mYxjfLNUNCg0mFobqIeA -JuLK0rSroxM+5OkI0VLCf22erQlmtHyEtIb9zj/wU3CzXW9ruty33YvJpDhwpL38 -pOdyqHxTEK27IG93c4q0703Ixs8lQAPfFjATOq+1av2CtAgxOVayb9lWddB8RvQn -uqOutxzZAA8/TVdWxEWKgMtLmgM8/GD+TxSZlVATFuivusVAftENck789prXHHO3 -dFBOr/sLHAimQiXzkaNYNuU9+0mflkj9j19aJz4h+c9wqLJ6QV6yYQrHUsvQJTsO -WH24OQZdygSMClXon0lbwrkCDQROhSR+ARAAwtRQ7897VJ+/xyrTbT8kOvXrot1Q -ZMs4+KkYrAn3IvIBNNThQoOiKEtvDxPloMC/vcCeNfVgliqfkp7rAFF5eU0x4GNm -UjDdlw35kBV/niSVLUIRmX81fEjlaY42xTiKdqGC9uu9kDaOXG1EWLpu+EKJXqan -KzGB6lekjnSexAB/CcPbC9sZS1YBNocRS1OU1gQVOV3X2MdDNdqGgDq8ZKwOSy58 -hBfb4oXHTiBA3Ct7jQWn/xBN6a57WH5sor1dUQzbPNbz0gZxOiTse06IUUXOzhBS -3wfL2HGkQQfdBnvR3D3y6viy8CVnasm3qE+1VTetQDvkZtE/OwdGAo+lCurroCIn -hds0M/e5EsMXdIKSI7b+uwxfpDfkoHmLkddHe8uOjiViPxVFTORQ5+J2RLDt0G/x -/U6wgyh2MopZKGBgbdGFLEchUcOFIuMkaYW+kkUoCJTe9iBjxWaBPM22AytWHfk0 -IlpdZzipH2VPSblZ/C4i8e2gnmEoozl4Z6VzQkKE7sYLe4r+WeW5mzz6oyaDZhud -hEKVvbqQdbT7//BLoYHh4Kumjd3P6ih4MIt858RKBD6Qaksxds9Dv+2qvW6c/h+l -hLmI/dXtkRIusOLFZ0zkP1KHHjXtMI72mM6SNxulHdpzB4msmJdtHTwyNECStLoi -EFpv7ORaJ7lKdtsAEQEAAYkCHwQYAQIACQUCToUkfgIbDAAKCRBuPLzpM3Lc+vxm -D/9+dGm2/UlePdEWACWN9/e5aDnzBfVAWD4TPwgpjnLyOQxqH7bifOa0ETekFTDE -stMVpgAJnM27f5ivUubkAsjIt115MwAsNNQFNVyQXleGx7C79X8zsWZbrri0uI15 -3Z2FYZ638idnPsD0RuSeq74T/OiaP7azT7mOwvMnHqOvLBw9nzC705hlq5W1QSMI -X4WnjkoHY7iLW4Fb7wyNVDpX1QE20rkjREt3SNKEsJx6Oef6mPEMVcpmYfFPRoT4 -CFYfegfPHm4VJozjxiz6pFsBWkDJHq3HN4PXnsTKZ5HS0ePNy54L0tgH82qUrrSo -B061imjBCmTMrlWdlRB08fu2h23uX0WQt0nUGsVkMwnJSwc0SWT66YKIW1nwLw0q -LxWZJt61sspkXFpOlem4/6RsLvAXw4BFJDprPT3R4kTEDfGzl8x3Kie7QCEpG40j -X+wrljr+1p5v9jdiuf7jFrBQvhIJSIY/gRJjrml3bEdeL+QKV40lTX/X+lUwdKiy -QMxkWSOOGaphcO8arNx7zInSOIGPN5fUnM7Bco9c8NYUUMpfjGndYSGpO5SQohnR -pPOEHdbYFa0zU9RkvueQqdpKitirzaCUvysPylksdpQRWWP6DoPKfUhylzq6FMGD -p50Ey4/FI/T4zjAVeqdBysR08T3mZv3SHOy0qOq/kDiK2Q== -=1NFB ------END PGP PUBLIC KEY BLOCK----- -" - -install_pip_securely() { - NEEDED_VERSION_PIP=1.5.2 - install_pkg_from_pypi "pip" ${NEEDED_VERSION_PIP} ${DSTUFFT_KEY_FILE} -} - -install_virtualenv_securely() { - NEEDED_VERSION_VIRTUALENV=1.11.2 - install_pkg_from_pypi "virtualenv" ${NEEDED_VERSION_VIRTUALENV} ${DSTUFFT_KEY_FILE} -} - -case $DISTRO_VERSION in - lucid|natty|jessie|wheezy|squeeze|precise|n/a|raring|saucy|trusty) - - # Create the build directories - DO "mkdir -p ${BUILD_DIR}" "0" - DO "chmod 700 ${BUILD_DIR}" "0" - - DSTUFFT_KEY_FILE=${BUILD_DIR}/dstufft-pub-key.gpg - echo "${DSTUFFT_PUB_KEY}" > ${DSTUFFT_KEY_FILE} - - # Import the Tor public key - DO "sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --keyserver x-hkp://pool.sks-keyservers.net --recv-keys 0x886DDD89" "0" - sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add - - - HAVE_TOR_REPO="`grep deb.torproject.org/torproject.org /etc/apt/sources.list /etc/apt/sources.list.d/* 2>&1|grep torproject|head -n 1`"; - if [ -z "$HAVE_TOR_REPO" ]; then - echo "[-] It appears that you do not have the torproject.org Debian repository installed; installing it..."; - if which apt-add-repository >/dev/null 2>&1; then - sudo apt-add-repository "deb $TOR_DEB_REPO $DISTRO_VERSION main" - else - echo -e "deb $TOR_DEB_REPO $DISTRO_VERSION main\ndeb-src $TOR_DEB_REPO $DISTRO_VERSION main" | sudo tee -a /etc/apt/sources.list - fi - else - echo "[.] It appears that you have the torproject.org Debian repository installed!"; - fi - - if [[ $DISTRO_VERSION == "lucid" ]]; then - HAVE_UNIVERSE_REPO="`grep -x 'deb http://archive.ubuntu.com/ubuntu lucid universe' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>&1|grep universe|head -n 1`"; - if [ -z "$HAVE_UNIVERSE_REPO" ]; then - echo "[-] It appears that you do not have the Ubuntu universe repository; installing it..."; - sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $DISTRO_VERSION universe" - else - echo "[.] It appears that you have the Ubuntu universe repository installed!"; - fi - fi - - # Install the basic packages to get pip ready to roll - echo "[+] Updating OS package list..."; - sudo sudo apt-get update 2>&1 > /dev/null; - echo "[+] Installing packages for your system..."; - DO "sudo apt-get -y install curl git-core python python-dev python-setuptools - build-essential libdumbnet1 python-dumbnet python-libpcap tor tor-geoipdb - libgeoip-dev libpcap0.8-dev libssl-dev libffi-dev libdumbnet-dev" "0" - - if [ "$PRIV_MODE" -eq "0" ]; then - echo "[+] Using virtualenvironment..." - - install_virtualenv_securely - - if [[ $DISTRO_VERSION == "lucid" ]]; then - DO "sudo apt-get -y install python-virtualenv" "0" - else - DO "sudo apt-get -y install virtualenvwrapper" "0" - fi - - if [ ! -f $HOME/.virtualenvs/ooniprobe/bin/activate ]; then - # Set up the virtual environment - DO "mkdir -p $HOME/.virtualenvs" "0" - DO "virtualenv $HOME/.virtualenvs/ooniprobe" "0" - source $HOME/.virtualenvs/ooniprobe/bin/activate - else - source $HOME/.virtualenvs/ooniprobe/bin/activate - fi - echo "[+] Installing all of the Python dependency requirements with pip in your virtualenv!"; - fi - - if [[ $PRIV_MODE -eq 1 ]]; then - echo "[+] Installing pip securely" - install_pip_securely - - echo "[+] Installing all of the Python dependency requirements with pip system wide!"; - # pip 1.5 needs this - DO "sudo pip install setuptools --no-use-wheel --upgrade" - fi - - - # First install pyasn1 and pyasn1-modules to avoid bugs - DO "pip install -v --timeout 60 pyasn1 pyasn1-modules" "0" - # Install all of the out of package manager dependencies - DO "pip install -v --timeout 60 -r ${REPO_ROOT}/requirements.txt" "0" - - # Install lucid required pip dependencies - if [[ $DISTRO_VERSION == "lucid" ]]; then - DO "pip install -v --timeout 60 pygeoip service-identity" "0" - fi - - if [ $? != 0 ]; then - echo "[+] It appears that pip is having issues installing our Python dependency requirements, we'll try again!"; - DO "pip install -v --timeout 60 -r ${REPO_ROOT}/requirements.txt" "0" - if [ $? != 0 ]; then - echo "[+] It appears that pip is unable to satisfy our requirements - please run the following command:"; - echo " pip install -v --timeout 60 -r ${REPO_ROOT}/requirements.txt "; - exit 1; - fi - fi - - echo "" - echo "You can now install ooniprobe with: " - echo "" - - if [[ $PRIV_MODE -eq 0 ]]; then - echo "source $HOME/.virtualenvs/ooniprobe/bin/activate" - fi - - echo "python setup.py install" - - echo "" - echo "You should also be sure to edit your configuration appropriately by doing:" - echo "" - echo "cp ${DIR}/data/ooniprobe.conf.sample ~/.ooni/ooniprobe.conf" - echo "" - - - ;; -*) - echo "It appears that you are using an unsupported OS - please tell us"; - echo "by filing a bug: https://trac.torproject.org/projects/tor/newticket"; - ;; -esac diff --git a/var/example_inputs/README b/var/example_inputs/README new file mode 100644 index 0000000..cbf0782 --- /dev/null +++ b/var/example_inputs/README @@ -0,0 +1,2 @@ +These inputs are here to assist the running of before_i_commit.sh that is used to verify proper functioning of ooniprobe. + diff --git a/var/example_inputs/alexa-head.txt b/var/example_inputs/alexa-head.txt new file mode 100644 index 0000000..1ddf982 --- /dev/null +++ b/var/example_inputs/alexa-head.txt @@ -0,0 +1,10 @@ +http://google.com/ +http://facebook.com/ +http://youtube.com/ +http://yahoo.com/ +http://baidu.com/ +http://wikipedia.org/ +http://live.com/ +http://twitter.com/ +http://qq.com/ +http://amazon.com/ diff --git a/var/example_inputs/alexa-top-1k.txt b/var/example_inputs/alexa-top-1k.txt new file mode 100644 index 0000000..d101505 --- /dev/null +++ b/var/example_inputs/alexa-top-1k.txt @@ -0,0 +1,1000 @@ +http://google.com/ +http://facebook.com/ +http://youtube.com/ +http://yahoo.com/ +http://baidu.com/ +http://wikipedia.org/ +http://live.com/ +http://twitter.com/ +http://qq.com/ +http://amazon.com/ +http://blogspot.com/ +http://linkedin.com/ +http://taobao.com/ +http://google.co.in/ +http://yahoo.co.jp/ +http://sina.com.cn/ +http://msn.com/ +http://google.com.hk/ +http://google.de/ +http://bing.com/ +http://yandex.ru/ +http://wordpress.com/ +http://ebay.com/ +http://babylon.com/ +http://google.co.jp/ +http://google.co.uk/ +http://google.fr/ +http://vk.com/ +http://apple.com/ +http://163.com/ +http://googleusercontent.com/ +http://soso.com/ +http://microsoft.com/ +http://mail.ru/ +http://weibo.com/ +http://google.com.br/ +http://tumblr.com/ +http://pinterest.com/ +http://google.es/ +http://paypal.com/ +http://craigslist.org/ +http://ask.com/ +http://google.it/ +http://google.ru/ +http://xhamster.com/ +http://blogger.com/ +http://sohu.com/ +http://go.com/ +http://bbc.co.uk/ +http://xvideos.com/ +http://avg.com/ +http://imdb.com/ +http://fc2.com/ +http://google.com.mx/ +http://youku.com/ +http://ifeng.com/ +http://flickr.com/ +http://google.ca/ +http://tudou.com/ +http://t.co/ +http://hao123.com/ +http://tmall.com/ +http://conduit.com/ +http://adobe.com/ +http://odnoklassniki.ru/ +http://aol.com/ +http://espn.go.com/ +http://pornhub.com/ +http://ebay.de/ +http://cnn.com/ +http://blogspot.in/ +http://google.co.id/ +http://mywebsearch.com/ +http://livejasmin.com/ +http://amazon.de/ +http://zedo.com/ +http://huffingtonpost.com/ +http://redtube.com/ +http://thepiratebay.se/ +http://google.com.tr/ +http://rakuten.co.jp/ +http://stackoverflow.com/ +http://sogou.com/ +http://google.com.au/ +http://alibaba.com/ +http://about.com/ +http://godaddy.com/ +http://ebay.co.uk/ +http://adf.ly/ +http://amazon.co.jp/ +http://wordpress.org/ +http://google.pl/ +http://uol.com.br/ +http://mediafire.com/ +http://imgur.com/ +http://dailymotion.com/ +http://instagram.com/ +http://amazon.co.uk/ +http://cnet.com/ +http://netflix.com/ +http://youporn.com/ +http://ameblo.jp/ +http://360buy.com/ +http://alipay.com/ +http://chinaz.com/ +http://globo.com/ +http://livedoor.com/ +http://bp.blogspot.com/ +http://360.cn/ +http://nytimes.com/ +http://4shared.com/ +http://doubleclick.com/ +http://xnxx.com/ +http://adcash.com/ +http://torrentz.eu/ +http://google.nl/ +http://incredibar.com/ +http://neobux.com/ +http://google.com.sa/ +http://searchnu.com/ +http://vimeo.com/ +http://ehow.com/ +http://livejournal.com/ +http://dropbox.com/ +http://google.com.ar/ +http://bankofamerica.com/ +http://dailymail.co.uk/ +http://douban.com/ +http://search-results.com/ +http://warriorforum.com/ +http://renren.com/ +http://reddit.com/ +http://weather.com/ +http://tube8.com/ +http://badoo.com/ +http://pconline.com.cn/ +http://chase.com/ +http://secureserver.net/ +http://wigetmedia.com/ +http://tianya.cn/ +http://deviantart.com/ +http://indiatimes.com/ +http://aweber.com/ +http://cnzz.com/ +http://google.com.pk/ +http://stumbleupon.com/ +http://kat.ph/ +http://google.cn/ +http://spiegel.de/ +http://google.com.eg/ +http://blogspot.com.br/ +http://blogfa.com/ +http://56.com/ +http://letv.com/ +http://mozilla.org/ +http://amazonaws.com/ +http://google.co.th/ +http://google.co.za/ +http://espncricinfo.com/ +http://answers.com/ +http://goo.ne.jp/ +http://sourceforge.net/ +http://foxnews.com/ +http://clicksor.com/ +http://softonic.com/ +http://addthis.com/ +http://walmart.com/ +http://etsy.com/ +http://wellsfargo.com/ +http://comcast.net/ +http://reference.com/ +http://wikimedia.org/ +http://slideshare.net/ +http://liveinternet.ru/ +http://salesforce.com/ +http://booking.com/ +http://squidoo.com/ +http://photobucket.com/ +http://google.co.ve/ +http://allegro.pl/ +http://fiverr.com/ +http://onet.pl/ +http://depositfiles.com/ +http://skype.com/ +http://wikia.com/ +http://themeforest.net/ +http://statcounter.com/ +http://myspace.com/ +http://hootsuite.com/ +http://funmoods.com/ +http://xinhuanet.com/ +http://fbcdn.net/ +http://google.com.my/ +http://bild.de/ +http://guardian.co.uk/ +http://ucoz.ru/ +http://outbrain.com/ +http://people.com.cn/ +http://nbcnews.com/ +http://scribd.com/ +http://google.com.co/ +http://pengyou.com/ +http://mgid.com/ +http://soundcloud.com/ +http://google.com.vn/ +http://free.fr/ +http://google.gr/ +http://optmd.com/ +http://nicovideo.jp/ +http://rediff.com/ +http://leboncoin.fr/ +http://it168.com/ +http://zol.com.cn/ +http://google.be/ +http://download.com/ +http://w3schools.com/ +http://china.com/ +http://adultfriendfinder.com/ +http://domaintools.com/ +http://xunlei.com/ +http://naver.com/ +http://archive.org/ +http://sweetim.com/ +http://rapidshare.com/ +http://youjizz.com/ +http://58.com/ +http://files.wordpress.com/ +http://nfl.com/ +http://wsj.com/ +http://yelp.com/ +http://profitclicking.com/ +http://iqiyi.com/ +http://blogspot.com.es/ +http://hostgator.com/ +http://orange.fr/ +http://google.com.tw/ +http://isohunt.com/ +http://hudong.com/ +http://google.com.ua/ +http://google.se/ +http://soku.com/ +http://tagged.com/ +http://google.at/ +http://jqw.com/ +http://reuters.com/ +http://telegraph.co.uk/ +http://indeed.com/ +http://4399.com/ +http://uploaded.net/ +http://filestube.com/ +http://ups.com/ +http://flipkart.com/ +http://wp.pl/ +http://kaixin001.com/ +http://tripadvisor.com/ +http://taringa.net/ +http://samsung.com/ +http://rutracker.org/ +http://google.ro/ +http://rambler.ru/ +http://libero.it/ +http://cam4.com/ +http://paipai.com/ +http://yieldmanager.com/ +http://web.de/ +http://google.com.ph/ +http://gmx.net/ +http://imageshack.us/ +http://xing.com/ +http://2345.com/ +http://dianxin.cn/ +http://php.net/ +http://hp.com/ +http://mashable.com/ +http://yesky.com/ +http://att.com/ +http://csdn.net/ +http://ikea.com/ +http://washingtonpost.com/ +http://ameba.jp/ +http://pandora.com/ +http://github.com/ +http://google.com.pe/ +http://forbes.com/ +http://hatena.ne.jp/ +http://wordreference.com/ +http://pof.com/ +http://google.com.ng/ +http://aliexpress.com/ +http://google.ch/ +http://hardsextube.com/ +http://thefreedictionary.com/ +http://clickbank.com/ +http://iminent.com/ +http://narod.ru/ +http://etao.com/ +http://bet365.com/ +http://google.cl/ +http://ilivid.com/ +http://google.com.sg/ +http://weebly.com/ +http://amazon.cn/ +http://ero-advertising.com/ +http://rapidgator.net/ +http://youdao.com/ +http://mercadolivre.com.br/ +http://yourlust.com/ +http://constantcontact.com/ +http://xcar.com.cn/ +http://groupon.com/ +http://target.com/ +http://hurriyet.com.tr/ +http://media.tumblr.com/ +http://businessinsider.com/ +http://5000pk.com/ +http://9gag.com/ +http://kakaku.com/ +http://akamaihd.net/ +http://putlocker.com/ +http://shutterstock.com/ +http://kaskus.co.id/ +http://ebay.it/ +http://bitauto.com/ +http://goal.com/ +http://usps.com/ +http://milliyet.com.tr/ +http://techcrunch.com/ +http://amazon.fr/ +http://ku6.com/ +http://typepad.com/ +http://dell.com/ +http://terra.com.br/ +http://huanqiu.com/ +http://digitalpoint.com/ +http://tlbb8.com/ +http://ebay.com.au/ +http://engadget.com/ +http://twimg.com/ +http://blogspot.de/ +http://soufun.com/ +http://t-online.de/ +http://hulu.com/ +http://popads.net/ +http://xe.com/ +http://cj.com/ +http://in.com/ +http://nih.gov/ +http://joomla.org/ +http://battle.net/ +http://americanexpress.com/ +http://kooora.com/ +http://drtuber.com/ +http://marca.com/ +http://gsmarena.com/ +http://movie2k.to/ +http://mlb.com/ +http://elpais.com/ +http://gazeta.pl/ +http://blogspot.jp/ +http://bestbuy.com/ +http://agoda.com/ +http://uimserv.net/ +http://ig.com.br/ +http://mailchimp.com/ +http://seznam.cz/ +http://siteadvisor.com/ +http://linkbucks.com/ +http://zimbio.com/ +http://match.com/ +http://extratorrent.com/ +http://tlbb2.com/ +http://google.pt/ +http://verizonwireless.com/ +http://fedex.com/ +http://angege.com/ +http://infusionsoft.com/ +http://peyvandha.ir/ +http://ezinearticles.com/ +http://zanox.com/ +http://elmundo.es/ +http://google.co.hu/ +http://bluehost.com/ +http://detik.com/ +http://adserverplus.com/ +http://4dsply.com/ +http://aili.com/ +http://istockphoto.com/ +http://leo.org/ +http://autohome.com.cn/ +http://hubpages.com/ +http://google.ie/ +http://gutefrage.net/ +http://usatoday.com/ +http://mycalendarbook.com/ +http://ebay.fr/ +http://51.com/ +http://freelancer.com/ +http://speedtest.net/ +http://google.cz/ +http://aizhan.com/ +http://drudgereport.com/ +http://webs.com/ +http://w3.org/ +http://seomoz.org/ +http://vnexpress.net/ +http://homeway.com.cn/ +http://google.dk/ +http://ganji.com/ +http://alimama.com/ +http://google.ae/ +http://twoo.com/ +http://mpnrs.com/ +http://naver.jp/ +http://mixi.jp/ +http://nifty.com/ +http://12306.cn/ +http://analyrics.com/ +http://adnxs.com/ +http://pcauto.com.cn/ +http://tlbbsifu.com/ +http://cntv.cn/ +http://yandex.ua/ +http://seesaa.net/ +http://2ch.net/ +http://cbssports.com/ +http://ask.fm/ +http://y8.com/ +http://bloomberg.com/ +http://360tl.com/ +http://pch.com/ +http://ebay.in/ +http://chip.de/ +http://abcnews.go.com/ +http://bannersbroker.com/ +http://dangdang.com/ +http://over-blog.com/ +http://naukri.com/ +http://varzesh3.com/ +http://turbobit.net/ +http://letitbit.net/ +http://jobrapido.com/ +http://ign.com/ +http://pchome.net/ +http://126.com/ +http://maktoob.com/ +http://lemonde.fr/ +http://hdfcbank.com/ +http://chinanews.com/ +http://dianping.com/ +http://meetup.com/ +http://abril.com.br/ +http://google.no/ +http://capitalone.com/ +http://tmz.com/ +http://wix.com/ +http://google.dz/ +http://goodreads.com/ +http://51.la/ +http://histats.com/ +http://surveymonkey.com/ +http://51job.com/ +http://repubblica.it/ +http://fotolia.com/ +http://vancl.com/ +http://imesh.com/ +http://ning.com/ +http://informer.com/ +http://java.com/ +http://buzzfeed.com/ +http://jimdo.com/ +http://beeg.com/ +http://gmw.cn/ +http://ndtv.com/ +http://1channel.ch/ +http://bravotube.net/ +http://expedia.com/ +http://pcgames.com.cn/ +http://admin5.com/ +http://monster.com/ +http://daum.net/ +http://mop.com/ +http://multiply.com/ +http://qunar.com/ +http://google.co.il/ +http://dmm.co.jp/ +http://latimes.com/ +http://avito.ru/ +http://rr.com/ +http://commentcamarche.net/ +http://sape.ru/ +http://clixsense.com/ +http://enet.com.cn/ +http://viadeo.com/ +http://mihanblog.com/ +http://bitly.com/ +http://lefigaro.fr/ +http://rbc.ru/ +http://adsupply.com/ +http://microsoftonline.com/ +http://drupal.org/ +http://mynet.com/ +http://twitpic.com/ +http://google.co.kr/ +http://adultadworld.com/ +http://newegg.com/ +http://google.fi/ +http://kijiji.ca/ +http://wikihow.com/ +http://10086.cn/ +http://zillow.com/ +http://livescore.com/ +http://blogspot.it/ +http://webmd.com/ +http://xda-developers.com/ +http://nokia.com/ +http://wretch.cc/ +http://odesk.com/ +http://kuxun.cn/ +http://bleacherreport.com/ +http://myfreecams.com/ +http://outlook.com/ +http://livedoor.biz/ +http://linkwithin.com/ +http://tradedoubler.com/ +http://empowernetwork.com/ +http://delicious.com/ +http://ovh.net/ +http://nikkei.com/ +http://gotomeeting.com/ +http://39.net/ +http://largeporntube.com/ +http://tinyurl.com/ +http://ya.ru/ +http://spankwire.com/ +http://website-unavailable.com/ +http://sahibinden.com/ +http://nuvid.com/ +http://zing.vn/ +http://123rf.com/ +http://blackhatworld.com/ +http://icicibank.com/ +http://irctc.co.in/ +http://warriorplus.com/ +http://mobile.de/ +http://189.cn/ +http://ibm.com/ +http://yomiuri.co.jp/ +http://tabelog.com/ +http://softpedia.com/ +http://retailmenot.com/ +http://virgilio.it/ +http://livestrong.com/ +http://mercadolibre.com.ar/ +http://webmoney.ru/ +http://elance.com/ +http://oracle.com/ +http://swagbucks.com/ +http://searchqu.com/ +http://jiayuan.com/ +http://itau.com.br/ +http://mapquest.com/ +http://sakura.ne.jp/ +http://youm7.com/ +http://digg.com/ +http://biglobe.ne.jp/ +http://news.com.au/ +http://taleo.net/ +http://backpage.com/ +http://keezmovies.com/ +http://lzjl.com/ +http://stackexchange.com/ +http://gi-akademie.com/ +http://thesun.co.uk/ +http://pornhublive.com/ +http://immobilienscout24.de/ +http://jquery.com/ +http://homedepot.com/ +http://alphaporno.com/ +http://pclady.com.cn/ +http://duowan.com/ +http://hi5.com/ +http://allrecipes.com/ +http://corriere.it/ +http://foxsports.com/ +http://china.com.cn/ +http://folha.uol.com.br/ +http://ultimatepowerprofits.com/ +http://altervista.org/ +http://cnblogs.com/ +http://olx.in/ +http://verizon.com/ +http://macys.com/ +http://heise.de/ +http://xyxy.net/ +http://mercadolibre.com.mx/ +http://habrahabr.ru/ +http://persianblog.ir/ +http://quora.com/ +http://exoclick.com/ +http://issuu.com/ +http://google.sk/ +http://tribalfusion.com/ +http://gc.ca/ +http://eastmoney.com/ +http://examiner.com/ +http://zynga.com/ +http://lenta.ru/ +http://21cn.com/ +http://livingsocial.com/ +http://codecanyon.net/ +http://accuweather.com/ +http://xtube.com/ +http://7k7k.com/ +http://force.com/ +http://sergey-mavrodi.com/ +http://people.com/ +http://google.co.ma/ +http://feedburner.com/ +http://114so.cn/ +http://moneycontrol.com/ +http://quikr.com/ +http://cbsnews.com/ +http://sapo.pt/ +http://adscale.de/ +http://excite.co.jp/ +http://yxlady.com/ +http://tabnak.ir/ +http://gi-backoffice.com/ +http://templatemonster.com/ +http://ancestry.com/ +http://careerbuilder.com/ +http://yellowpages.com/ +http://timeanddate.com/ +http://orkut.com/ +http://list-manage.com/ +http://oneindia.in/ +http://suning.com/ +http://pogo.com/ +http://nhk.or.jp/ +http://wiktionary.org/ +http://haberturk.com/ +http://msn.com.cn/ +http://kickstarter.com/ +http://inbox.com/ +http://mybrowserbar.com/ +http://porn.com/ +http://hidemyass.com/ +http://nikkeibp.co.jp/ +http://kohls.com/ +http://blog.163.com/ +http://dh818.com/ +http://kinopoisk.ru/ +http://zippyshare.com/ +http://netlog.com/ +http://pixnet.net/ +http://gap.com/ +http://custhelp.com/ +http://4tube.com/ +http://cheezburger.com/ +http://nu.nl/ +http://v9.com/ +http://interia.pl/ +http://so-net.ne.jp/ +http://blog.com/ +http://getresponse.com/ +http://alnaddy.com/ +http://impress.co.jp/ +http://justdial.com/ +http://gizmodo.com/ +http://time.com/ +http://hotfile.com/ +http://who.is/ +http://wunderground.com/ +http://kankan.com/ +http://miniclip.com/ +http://welt.de/ +http://zhaopin.com/ +http://filehippo.com/ +http://qidian.com/ +http://shopathome.com/ +http://lifehacker.com/ +http://klicktrek.com/ +http://wired.com/ +http://888.com/ +http://mp3skull.com/ +http://okcupid.com/ +http://namecheap.com/ +http://porntube.com/ +http://twcczhu.com/ +http://doorblog.jp/ +http://makeuseof.com/ +http://infolinks.com/ +http://ccb.com/ +http://blekko.com/ +http://google.az/ +http://userapi.com/ +http://cbslocal.com/ +http://hubspot.com/ +http://zendesk.com/ +http://lequipe.fr/ +http://tutsplus.com/ +http://exblog.jp/ +http://video-one.com/ +http://118114.cn/ +http://macrumors.com/ +http://ggmm777.com/ +http://bitshare.com/ +http://hupu.com/ +http://trulia.com/ +http://hotels.com/ +http://sulekha.com/ +http://1uuc.com/ +http://google.co.nz/ +http://acesse.com/ +http://citibank.com/ +http://imagevenue.com/ +http://roulettebotplus.com/ +http://coupons.com/ +http://politico.com/ +http://anonym.to/ +http://gawker.com/ +http://searchengines.ru/ +http://cnbc.com/ +http://as.com/ +http://icbc.com.cn/ +http://1und1.de/ +http://sears.com/ +http://adfoc.us/ +http://sj-tl.com/ +http://blogimg.jp/ +http://bodybuilding.com/ +http://tinypic.com/ +http://imagebam.com/ +http://manta.com/ +http://marketwatch.com/ +http://zwaar.net/ +http://kompas.com/ +http://mangareader.net/ +http://eventbrite.com/ +http://businessweek.com/ +http://pagesjaunes.fr/ +http://amung.us/ +http://sitesell.com/ +http://babycenter.com/ +http://ctrip.com/ +http://orkut.com.br/ +http://linksynergy.com/ +http://dict.cc/ +http://shareasale.com/ +http://wcarev.com/ +http://okwave.jp/ +http://ustream.tv/ +http://watchseries.eu/ +http://intuit.com/ +http://snapdeal.com/ +http://td.com/ +http://nasa.gov/ +http://slickdeals.net/ +http://dpreview.com/ +http://tom.com/ +http://usbank.com/ +http://nydailynews.com/ +http://sanjesh.org/ +http://51buy.com/ +http://xhamstercams.com/ +http://968tl.com/ +http://myegy.com/ +http://cocolog-nifty.com/ +http://whitepages.com/ +http://disney.go.com/ +http://howstuffworks.com/ +http://barnesandnoble.com/ +http://klikbca.com/ +http://metacafe.com/ +http://lenovo.com/ +http://yandex.kz/ +http://pornerbros.com/ +http://aftonbladet.se/ +http://52tlbb.com/ +http://smashingmagazine.com/ +http://europa.eu/ +http://google.lk/ +http://18andabused.com/ +http://fatakat.com/ +http://tnaflix.com/ +http://woot.com/ +http://dantri.com.vn/ +http://itmedia.co.jp/ +http://focus.de/ +http://rednet.cn/ +http://asahi.com/ +http://sfr.fr/ +http://ca.gov/ +http://ocn.ne.jp/ +http://idnes.cz/ +http://pixiv.net/ +http://24h.com.vn/ +http://priceline.com/ +http://urbandictionary.com/ +http://shaadi.com/ +http://blogspot.com.ar/ +http://6.cn/ +http://magentocommerce.com/ +http://cloob.com/ +http://52pk.net/ +http://realclearpolitics.com/ +http://alarabiya.net/ +http://hsbc.co.uk/ +http://discreethearts.com/ +http://ucoz.com/ +http://earthlink.net/ +http://novinky.cz/ +http://citrixonline.com/ +http://orf.at/ +http://masrawy.com/ +http://smh.com.au/ +http://way2sms.com/ +http://cmbchina.com/ +http://yihaodian.com/ +http://zappos.com/ +http://blackberry.com/ +http://fotostrana.ru/ +http://verycd.com/ +http://farsnews.com/ +http://gumtree.com/ +http://rightmove.co.uk/ +http://patch.com/ +http://ppstream.com/ +http://vente-privee.com/ +http://google.com.kw/ +http://nudevista.com/ +http://forgeofempires.com/ +http://hypergames.net/ +http://alot.com/ +http://softlayer.com/ +http://slutload.com/ +http://overstock.com/ +http://google.bg/ +http://geocities.jp/ +http://foursquare.com/ +http://bbc.com/ +http://statscrop.com/ +http://freakshare.com/ +http://lowes.com/ +http://h2porn.com/ +http://subito.it/ +http://japanpost.jp/ +http://quickmeme.com/ +http://npr.org/ +http://mercadolibre.com.ve/ +http://onlylady.com/ +http://ebay.ca/ +http://bahn.de/ +http://bartarinha.ir/ +http://xici.net/ +http://egotastic.com/ +http://yoka.com/ +http://google.com.ec/ +http://indianrail.gov.in/ +http://dmoz.org/ +http://gamespot.com/ +http://jabong.com/ +http://ci123.com/ +http://southwest.com/ +http://tenpay.com/ +http://baixing.com/ +http://scoop.it/ +http://telegraaf.nl/ +http://18schoolgirlz.com/ +http://adult-empire.com/ +http://eastday.com/ +http://tubegalore.com/ +http://posterous.com/ +http://cloudfront.net/ +http://rakuten.ne.jp/ +http://sky.com/ +http://linternaute.com/ +http://mysql.com/ +http://baomihua.com/ +http://goo.gl/ +http://perfectgirls.net/ +http://logmein.com/ +http://classmates.com/ +http://udn.com/ +http://akhbarak.net/ +http://115.com/ +http://allocine.fr/ +http://onlinesbi.com/ +http://payza.com/ +http://google.com.do/ +http://marktplaats.nl/ +http://pcmag.com/ +http://discuz.net/ +http://foodnetwork.com/ +http://www.net.cn/ +http://kdnet.net/ +http://rottentomatoes.com/ +http://cheshi.com.cn/ +http://zoho.com/ +http://skycn.com/ +http://subscene.com/ +http://google.com.qa/ +http://skyrock.com/ +http://easyhits4u.com/ +http://motherless.com/ +http://free-tv-video-online.me/ +http://steampowered.com/ +http://idealo.de/ +http://mail.com/ +http://friv.com/ +http://kayak.com/ +http://wetter.com/ +http://bankmellat.ir/ +http://zoosk.com/ +http://opensiteexplorer.org/ +http://streamate.com/ +http://dreamstime.com/ +http://logsoku.com/ +http://theblaze.com/ +http://filecrop.com/ +http://icontact.com/ +http://tjosurveys.com/ +http://weather.com.cn/ +http://grindtv.com/ +http://ahram.org.eg/ +http://crsky.com/ +http://meilishuo.com/ +http://legacy.com/ +http://lady8844.com/ +http://jeuxvideo.com/ +http://partypoker.com/ +http://sanook.com/ +http://nikkansports.com/ +http://semrush.com/ +http://babytree.com/ +http://cracked.com/ +http://m-w.com/ +http://bigpoint.com/ +http://asos.com/ +http://mediaset.it/ +http://hc360.com/ +http://cocoren.com/ +http://bhaskar.com/ +http://last.fm/ +http://88db.com/ +http://weblio.jp/ +http://onlinedown.net/ +http://sponichi.co.jp/ +http://realtor.com/ +http://ce.cn/ +http://sbrf.ru/ +http://meetcheap.com/ +http://hm.com/ +http://homeshop18.com/ +http://ticketmaster.com/ +http://slate.com/ +http://prestashop.com/ +http://boston.com/ +http://traidnt.net/ +http://grooveshark.com/ +http://justin.tv/ +http://biblegateway.com/ +http://speedbit.com/ +http://twitch.tv/ +http://clarin.com/ +http://brazzers.com/ +http://dhl.de/ +http://pornoxo.com/ +http://gismeteo.ru/ +http://accountonline.com/ +http://cnr.cn/ +http://yimg.com/ +http://r7.com/ +http://xgo.com.cn/ +http://qip.ru/ +http://19lou.com/ +http://subscribe.ru/ +http://meituan.com/ +http://esporte.uol.com.br/ +http://arpg2.com/ +http://jxliu.com/ +http://admagnet.net/ +http://freeones.com/ +http://lacaixa.es/ +http://mtime.com/ +http://shutterfly.com/ +http://piriform.com/ +http://flippa.com/ +http://rt.com/ +http://reverso.net/ +http://liveperson.net/ +http://eyny.com/ +http://eonline.com/ +http://beemp3.com/ +http://commbank.com.au/ +http://caixa.gov.br/ +http://android.com/ +http://sendspace.com/ +http://xbox.com/ +http://liveleak.com/ diff --git a/var/example_inputs/bad_input.txt b/var/example_inputs/bad_input.txt new file mode 100644 index 0000000..45a981a --- /dev/null +++ b/var/example_inputs/bad_input.txt @@ -0,0 +1 @@ +http://zimbio.com/ diff --git a/var/example_inputs/bridges.txt b/var/example_inputs/bridges.txt new file mode 100644 index 0000000..4a7fa88 --- /dev/null +++ b/var/example_inputs/bridges.txt @@ -0,0 +1,4 @@ +obfs4 178.209.52.110:443 67E72FF33D7D41BF11C569646A0A7B4B188340DF cert=Z+cv8z19Qb8RxWlkagp7SxiDQN++b7D2Tntowhf+j4D15/kLuj3EoSSGvuREGPc3h60Ofw iat-mode=0 +obfs4 83.212.101.3:41213 A09D536DD1752D542E1FBB3C9CE4449D51298239 cert=lPRQ/MXdD1t5SRZ9MquYQNT9m5DV757jtdXdlePmRCudUU9CFUOX1Tm7/meFSyPOsud7Cw iat-mode=0 +obfs3 83.212.101.3:80 A09D536DD1752D542E1FBB3C9CE4449D51298239 +obfs3 109.105.109.163:38980 1E05F577A0EC0213F971D81BF4D86A9E4E8229ED diff --git a/var/example_inputs/daph3_yaml_file.txt b/var/example_inputs/daph3_yaml_file.txt new file mode 100644 index 0000000..2412a08 --- /dev/null +++ b/var/example_inputs/daph3_yaml_file.txt @@ -0,0 +1,2 @@ +{client: antani, server: sblinda} + diff --git a/var/example_inputs/dns_tamper_file.txt b/var/example_inputs/dns_tamper_file.txt new file mode 100644 index 0000000..25f365c --- /dev/null +++ b/var/example_inputs/dns_tamper_file.txt @@ -0,0 +1,3 @@ +torproject.org +google.com +measurementlab.net diff --git a/var/example_inputs/dns_tamper_test_resolvers.txt b/var/example_inputs/dns_tamper_test_resolvers.txt new file mode 100644 index 0000000..14c77e0 --- /dev/null +++ b/var/example_inputs/dns_tamper_test_resolvers.txt @@ -0,0 +1,2 @@ +8.8.8.8 +8.8.4.4 diff --git a/var/example_inputs/domains.txt b/var/example_inputs/domains.txt new file mode 100644 index 0000000..cdeaad1 --- /dev/null +++ b/var/example_inputs/domains.txt @@ -0,0 +1,3 @@ +www.twitter.com +facebook.com +youtube.com diff --git a/var/example_inputs/http_host_file.txt b/var/example_inputs/http_host_file.txt new file mode 100644 index 0000000..12afb18 --- /dev/null +++ b/var/example_inputs/http_host_file.txt @@ -0,0 +1,2 @@ +torproject.org +ooni.nu diff --git a/var/example_inputs/keyword_filtering_file.txt b/var/example_inputs/keyword_filtering_file.txt new file mode 100644 index 0000000..4583bae --- /dev/null +++ b/var/example_inputs/keyword_filtering_file.txt @@ -0,0 +1,2 @@ +antani +sblinda diff --git a/var/example_inputs/tcpconnect_host_file.txt b/var/example_inputs/tcpconnect_host_file.txt new file mode 100644 index 0000000..a1e876b --- /dev/null +++ b/var/example_inputs/tcpconnect_host_file.txt @@ -0,0 +1,3 @@ +86.59.30.40:80 +207.97.227.239:22 +173.194.35.160:443 diff --git a/var/example_inputs/url_lists_file.txt b/var/example_inputs/url_lists_file.txt new file mode 100644 index 0000000..16a4f58 --- /dev/null +++ b/var/example_inputs/url_lists_file.txt @@ -0,0 +1,2 @@ +http://ooni.nu/test +http://torproject.org/