code:
= Project History

This project was started by Shiro ( @shiromarieke@birdsite ) CryptoParty Berlin ( @cryptopartybln@birdsite ).  Shiro handed over support to the greater internet in summer 2016.

It was a text list on okfn.org text pad: ( https://pad.okfn.org/p/cloudflare-tor / https://pad.okfn.org/p/noncloudflare-torblocks )

However it was pointed out that this website itself was on cloudflare, and cloudflare broke tor users access to it.

So it was moved to systemli.org : ( https://pad.systemli.org/p/noncloudflare-torblocks )
and an onion service ( HTTP://j7652k4sod2azfu6.onion/p/noncloudflare-torblocks / http://j7652k4sod2azfu6.onion/p/cloudflare-tor / http://j7652k4sod2azfu6.onion/p/cloudflare-philosophy )

These systemli pads needed to be updated once in every while (week? month?) or the whole list was scrubbed.
This happened a few times, and there were some attempts at vandalism up to and including june 2016

A fork was made during a multi-day outage at http://git.vola7ileiax4ueow.onion/fuckcloudflare/cloudflare-tor/ (new, not GitHub repo)

However vola7ileiax4ueow's git service went down, so it was moved to github

There used to also be a list of websites that *were* on cloudflare but are no longer. This list has been lost
( it was on https://pad.systemli.org/p/ex-cloudflare-tor )


code:
# Instructions for manual input

1) If the webpage served you "Attention Required! Cloudflare" webpage

Check if the blocked page says "one more step" as the title, and has something like
"Ray ID CloudFlare: xxxxxxxxxxxxxxx      • Your IP: xxx.xxx.xxx.xxx • Performance & Safety by CloudFlare "
at the bottom of the page.
If it does, add to "[cloudflare-list.txt](cloudflare-list.txt)". See #6 for format.

2) Some sites use custom page CloudFlare unit.
The only way to detect it is to find CloudFlare JavaScript, or Ray ID as a CAPTCHA in its source code.

3) Some websites use other companies with the CloudFlare business model

add them to non-cloudflare-list.txt ( formerly TorBlocker Hall of Shame Part I)

This is a collection of websites that ban Tor exits, other than through Cloudflare (e.g. showing access denied pages, systematic timing out connections, ...).

(See #6 for format)

4) Find a website that has been removed from Cloudflare(possibly due to our
protest?)  Remove it from the list it is on and add it to ex-cloudflare-tor.txt

However!  Please sample different exits before doing this.  It might have
merely whitelisted a single exit node.  ( It is slightly more difficult to
control which exit you use - if there are tickets in bug trackers to
enable making this easier please mention them here )

(See #6 for format)

5) Find a website that outright blocks tor users and is confirmed Cloudflare?

Add to cloudflare-tor-hostile-list.txt

(See #6 for format)

6) List format:

(A domain should only ever be on one of the lists on this project.  If you find
it on two, please help keep list accurate by removing it from one of the two
lists.)

   {base domain} [<- elegant comment (s) ] [ tags ]

Tags:

( helpful to group sites, if we assume that this project is aimed to the black list to make any actions that get results.
For example, free software projects w / ClownFucked web pages can be viewed similarly by "anti-function" tags on various free software directories )

    * NEEDSREVIEWp = someone should review the comments/go to this website and report back to us

    * FLOSSp = free libre software project with open source

    * CFA(action) = action is one of "boycott", "discouragedonations", "petition", "legalaction" followed by a URL if possible

    * INSTANTp = service denial is instant/deferred

    * COMMERCIALp(type) = type is one of "true", "false"

repo_name: ts/cloudflare

license: mit


code:
Freenode IRC servers (all exits, can result in auto kline)
abebooks.com (403)
aboutdebian.com (Access denied. Your IP address [185.62.188.14] is blacklisted. If you feel this is in error please contact your hosting providers abuse department.)
adidas.de (Access Denied You don't have permission to access "http://www.adidas.de/" on this server.) / 2016-04-29
Akamai's "An error occurred while processing your request. Reference #97.654e1502.1463601822.94b341" is that Tor specific?
adsabs.harvard.edu (We are sorry to inform you that your access to the ADS services has been denied.)
aidspolicyproject.org (some IPs)
airbnb.com - cannot search, gives 504 error
altcoins.com
amazon.com ("Sorry, we just need to make sure you're not a robot" - easy CAPTCHA, but doesn't work without js)  (Service Unavailable - Oops! - http 500)
anarchism.pageabode.com
angel.co (Blank page, won't load anything)
ansible.com (Access denied. You don't have permission ...)
apa.org ("Access to Website Blocked") 2016/07/31 still blocked
apartments.com ("Access Denied")
apps.fcc.gov ("Security Violation INCIDENT ID:()")
army.mil
astrolog.org (The requested URL was rejected. If you think this is an error, please contact the webmaster. Your support ID is: [..])
asos.com (Access Denied. You don't have permission....)
austlii.edu.au
axs.com ("Pardon Our Interruption...As you were browsing, something about your browser made us think you were a bot. There are a few reasons this might happen: ")
bayesian.org ("greylisted", block gets lifted after form sep 24 )
bestbuy.com (Access Denied You don't have permission to access "http://www.bestbuy.com/" on this server. Reference #...)
bet.com ("Access Denied You don't have permission to access ..."
bitbean.org ("Proxy access not allowed")
bitstamp.net (Error code 15)
bitvps.com (403 Forbidden)
blender.org (times out)
bloglovin.com ("One more step")
bloomberg.com ("Terms of Service Violation")
bodhizazen.net (very enlightened policy ...)
forums.bunsenlabs.org
captaintrain.com (403 Forbidden)
cessfull.com (reCAPTCHA)
chronicle.com ("Pardon Our Interruption... As you were browsing www.chronicle.com something about your browser made us think you were a bot. There are a few reasons this might happen:...")
civicrm.org ("Your IP address (46.183.221.231) has been identified as a possible source of suspicious, robotic traffic and has been greylisted by Project Honeypot. If you are an actual human visitor who can read simple instructions, you may try getting whitelisted on https://civicrm.org/httpbl/whitelist. Should you have any further problems, please contact us at info@civicrm.org)
clonezilla.org/ (Access denied. Your IP address [185.62.188.14] is blacklisted. If you feel this is in error please contact your hosting providers abuse department.) Not all exits are blocked.
cmc-math.org
codecogs.com ("... This is because your IP address is listed as a source of suspicious behaviour. ...")
codeexperts.com ("if you feel this is in error ...")
coinatmradar.com ("This request has been denied for security reasons. If you believe this was in error, please contact support.")
cryptocurrencytalk.com ("SpamFireWall is activated for your IP")
cycleworld.com ( "You are receiving this error message because your ip (212.117.180.21) is listed in the StopForumSpam.com database" / 2016-08-15)
collegereadiness.collegeboard.org/sat-subject-tests/subjects/languages/french
cordless-phone-update.com (Access denied. Your IP address [171.25.193.131] is blacklisted. If you feel this is in error please contact your hosting providers abuse department.)
coverhunt.com
craigslist.ca  ("This IP has been automatically blocked")
creativebeacon.com ("if you feel this is in error ... ")
crunchbase.com ("Access to Website Blocked") << crunchbase uses http://www.distilnetworks.com/ to block tor >>
csounds.com ("Access denied. Your IP address [185.220.100.252] is blacklisted. If you feel this is in error please contact your hosting providers abuse department")
cubawiki.com.ar Access denied.  Your IP address is blacklisted.  If you feel this is in error please contact your hosting provider's abuse department.
curbed.com ("Forbidden")
croplife.ca (on POST- "Access denied.  Your IP address is blacklisted.  If you feel this is in error please contact your hosting provider's abuse department.")
davidmburke.com
dcleak.com
delivery.acm.org (Who cares. Just treat their URLs as resource identifiers to be used with SCIHUB. Serves them right for defining Privatizing as Publishing and Ignorance as Strength ...)
dl.acm.org
demorgen.be (Access denied. You don't have permission ...)
digicert.com (Connection timeout. I'm running a non-exit relay)
digitalenvelopes.email <- sites promoter denies being tor-hostile in emaildiscussions.com <- don't call people tor-hostile - explain why they shouldn't block tor :)
www.distilnetworks.com (which of course is also available).  This "bot detection" equipment. Page Block says that "anomaly detected" and asks for the name and email address / distorted.  "The anomaly is detected." Brave New World . made inaccesible by indigogo?
districtsentinel.com ("Access denied.  Your IP address [37.130.227.133] is blacklisted.  If you feel this is in error please contact your hosting providers abuse department.")
docs.google.com "We're sorry..... but your computer or network may be sending automated queries. To protect our users, we can't process your request right now."
docsis.org
donmontalvo.com (Access denied. Your IP address [...] is blacklisted. If you feel this is in error please contact your hosting providers abuse department.)
discussions.apple.com (most exit nodes)
support.apple.com (Access Denied - You don't have permission to access "http://support.apple.com/" on this server.)
dluat.com ("You don't have permission to access /on this server. Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.")
drbl.org/ (Access denied. Your IP address [5.9.36.66] is blacklisted. If you feel this is in error please contact your hosting providers abuse department.)
dslreports.com
element14.com
foro.elhacker.net (reCAPTCHA)
ello.co ("Your recent actions have triggered our force field to protect Ello from online attacks. ")
entomologicalphilosopher.com ( Access denied.  Your IP address [35.0.127.52] is blacklisted. )
emeraldinsight.com ( The IP address of 5.135.158.101 has not been recognised to access this page.)
ericerfanian.com
ethereum.org (" Prove You're Human ")
ethicalhacking.com
europa.eu ("HTTP status code: 403")
expedia.de ("Access Denied") (probably some nodes only)
expedia.com ("access denied")
expedia.fr ("You don't have permission to access ..." 2017-03-17)
experts-exchange.com
expo2015.org (403, text about "security rules") <-- wow, accessible from all? exits as of 2016/01/25!!!
ezinearticles.com ("It appears that you are using Tor anonymizing software.  No problem! We just need you to enter a Captcha so we can confirm that you're not a person and not a bot") (need to enable javascript or captcha won't work)
fahrkarten.bahn.de (connection interrupted) <-- was glauben die bringt denen das? ist das die neue service-offensive?
fbi.gov (This site has determined a security issue with your request.)
ff3dp.com (Access denied. Your IP address [94.242.228.187] is blacklisted. If you feel this is in error please contact your hosting providers abuse department.)
firefoxfacts.com ("security reasons")
fizzicseducation.com.au ("Sorry but we've blocked you")
flif.info (Access denied. Your IP address [192.42.116.16] is blacklisted. If you feel this is in error please contact your hosting providers abuse department.)
forums.freebsd.org/ (Almost all exit nodes, main page is available, but reading a thread results in 403.)
forum.pfsense.org/ (Almost all exit nodes, main page is available, but reading a thread results in 403.) Example: forum.pfsense.org/index.php?topic=99128.0
forums.whirlpool.net.au/ (Access to whirlpool.net.au from this location has been restricted due to suspicious activity)defectivebydesign.org
foxnews.com (blocks all exits, as well as archive.is. you can use archive.org/web/ to take a snapshot if you really want to read foxnews )
cc.gatech.edu (timeout. baseline?)
gchq.gov.uk (timeout)
geizhals.at ("Sorry - 429 Too Fast, you are temporarily banned An automated system has detected atypical patterns in traffic originating from from you or the network you are using. To be able to provide our service to all users, your access will be temporarily denied." / 2017-04-15)
gemal.dk ("Access denied.  Your IP address is blacklisted.  If you feel this is in error please contact your hosting provider's abuse department.")
geocaching.com ( Works fine for viewing the main site, but if you try to log a cache: "403.6 - Forbidden          IP address of the client has been rejected.")
geohot.com ("Access denied.  Your IP address [77.247.181.162] is blacklisted.  If you feel this is in error please contact your hosting providers abuse department.")
godlikeproductions.com ("your ip address is banned from this website")
google.com (some exits sometimes, sometimes with solvable captchas, sometimes with unsolvable captchas) <= also more disclosure required for signups (e.g. mobile number submission cannot be skipped)
images.google.com (when doing a reverse image search)
gregor.us ("Access denied. Your IP address is blacklisted. If you feel this is in error please contact your hosting provider's abuse department.")
gutenberg.org ("Error 403 ... Don't use anonymizers, open proxies, VPNs, or TOR to access Project Gutenberg") loop this insane, wilful stupidity goes on 2016/06. I can only imagine good old Gutenberg rotating in his grave
hackedbellini.org
harbin.org ("blacklisted" sep 24)
adsabs.harvard.edu (project Honeytrap)
hot-topic.co.nz (403 on tor "You do not have permission to access this server. Before trying again, run anti-virus and anti-spyware software and remove any viruses and spyware from your computer." 2015-09-15)
hotel.de ("You don't have permission to access "http://www.hotel.de/" on this server." / 2017-04-07)
hrs.de (You don't have permission to access "http://www.hrs.de/" on this server. / 2016-08-11)
hubpages.com/ ("403 Forbidden" / 2015-09-10)
ietf.org/ (Error 1006 Ray ID: 2323edfb980c23d2 • 2015-10-08 18:32:38 UTCAccess denied \r What happened? The owner of this website (www.ietf.org) has banned your IP address (209.66.119.150).) (This IS cloudflare, but not the usual CAPTCHA wielding block. seems to work as of 10/23) still happens as of 2016/02/24 from 158.130.0.242 in this instance
indiatimes.com ("Access Denied")
ioerror.us
informationclearinghouse.info
interactivebrokers.com <= directly and deliberately blocks tor (and apparently anything that looks like an anonymizer)
imgur.com/memegen (uploading from tor disabled)
www.indiegogo.com
internetslang.com/ (some exits only)
ioerror.us/bb2-support-key?key=6da3-ea02-2b02-1b1f
ipetitions.com (Forbidden You don't have permission to access /on this server.)
islam-universe.com (Access denied.  Your IP address is blacklisted.  If you feel this is in error please contact your hosting provider's abuse department.)
iswwwup.com
keyweb.de <- noticed this as a customer. complained to support because they host some of my Tor nodes and suddenly, the FAQ was inaccessible ... and this sends a very mixed signal. they failed to understand that Tor blocks are Not Done & unprofessional but reassured me that the other services are unaffected.
killswitch.pk (this one is about internet censorship ...)
knotplot.com ("[...] is blacklisted. If you feel this is in error [...]")
koelnspd.de (timeout)
lastword.at ("403 Forbidden" / 2015-12-29)
leblogdebetty.com/
lenovo.com (Dell it is, then ...)
libertygb.org.uk (Access denied.  Your IP address [xxx.yyy.zzz.xxx] is blacklisted.  If you feel this is in error please contact your hosting providers abuse department.)
online.liebertpub.com (client IP is blocked because: This IP was identified as infiltrated and is being used by sci-hub as a proxy. Blocked IPs: 077.247.181.165 - 077.247.181.165 --- good luck trying to contact them, the CAPTCHA on their 'contact us' form is impossible)
forums.linuxmint.com (You have been permanently banned from this board. Please contact the Board Administrator for more information. A ban has been issued on your IP address.)
linuxquestions.org (some exits all, in my experience. following the "you can use this key to fix the problem yourself"  http://ioerror.us/bb2-support-key?key=... 2016/09/03 unblocked link gets you to "ioerror.us", which otherwise serves the same "Technical Support, you can use this key to fix the problem yourself" shit. according to the "you can use ..." page, blacklisting is from "Project Honey Pot", whatever that is supposed to be. one more link shows that their justification for the block is forum-spam that originated from the exit.)
--Project Honey Pot is a CloudFlare, crowdsourced list of IP addresses that contribute problematic traffic.
lifewire.com ("Error 405 Not allowed. Guru Mediation: Details: cache-pao17431-PAO 1537134593 1379325143")
livejournal.com (only sometimes: "Access Denied     Either you are trying to access a page you do no not have permission to view or your ip address is banned.")
loebner.net some exits ("if you feel this in error")
loophole-berlin.com
looselipsmag.com ("Access denied. Your IP address is blacklisted. If you feel this is in error please contact your hosting provider's abuse department.")
louis.de ("You don't have permission to access "(...)louis.de/" on this server." / 2015-09-09)
lovehoney.co.uk
lowtechmagazine.com ("404 page not found" / 2016-05-19)
lufthansa.com ("Access Denied") <-- great if you need to confirm a flight online and have only tails. fuck that
mafgani.net (IP blacklisted)
manta.com (Access To Website Blocked)
meaningness.com ("You have been blocked from accessing this page, because you previously did something that looked evil, or maybe what you are doing now looks evil")
midtnmusic.com ("Access denied. Your IP address [109.201.133.100] is blacklisted. If you feel this is in error please contact your hosting providers abuse department")
mixcloud.com ("Please complete the security check to access mixcloud.com. There was an issue communicating with the captcha provider. More information may be available below.")
moodle.org (ReCaptcha)
mottweilerstudio.com ("Access denied.  Your IP address [....] is blacklisted.  If you feel..." / 2016-01-15)
motorcyclecruiser.com ( "You are receiving this error message because your ip (212.117.180.21) is listed in the StopForumSpam.com database" / 2016-08-15)
nakedcapitalism.com
nbnco.com.au (Infinite Redirect)
content.nejm.org - Your IP (185.038.014.215) is blocked.
nepalmonitor.org (timeout)
netbank.com.au
networktools.nl (You don't have permission to access (...) on this server because you are currently blacklisted by a DNSBL server at: sbl-xbl.spamhaus.org)
newark.com  (Access Denied You don't have permission to access ...)
newgrounds.com ("Security Validation - Completing this captcha proves you are a human and helps keepNewgrounds free of spam and abuse!")
njea.org
novaecomic.com ("Access denied. Your IP address [185.220.101.30] is blacklisted. If you feel this is in error please contact your hosting providers abuse department.")
www.ncbi.nlm.nih.gov ("Your access to PubMed Central has been blocked because your Internet connection (IP address) was used to download content in bulk, in violation of the terms of the PMC Copyright Notice.")
no2nsa.x10.bz (http-code 403)
nsa.gov (timeout)
nuggetwheat.org
nytimes.com (times out  -201601: The requested URL "/", is invalid.)
oftc.net (IRC Access via TOR is not allowed)
olympic.org ("Access Denied ...Reference #18.14f50717.1453660368.134e271e")
opanal.org ("Acceso denegado. Su direcciÃ³n IP estÃ¡ listada en una blacklist.")
openstudy.com Your IP address appears to have been banned by one of the moderators due to usage policy violation
orbitz.com
peacock-panache.com ( "if you feel this is in error..." )
planetary.org ("Not Implemented  Tor IP not allowed" (well fuck you ...))
phdcomics.com ("The requested URL was rejected." Hosted through carrierzone.com)
poleconanalysis.org
popsci.com (ip listed in the StopForumSpam.com database) 2016-10-28 block still active
Porsche Com ("You don't have permission to access "(...)porsche.com/" on this server." |  (...)porsche.de redirects to porsche.com/germany) / 2015-09-09) works 2016/03 Nope. Still blocked 2016-04-03 -10-28
preposterousuniverse.com ("Access denied. Your IP address [217.182.168.178] is blacklisted.")
producthandling.com
qantas.com.au still blocked 2016-10-28
republicbuzz.com (" 403 forbidden - WHAT? Why am I seeing this? Your access to this site was blocked by Wordfence  ")
rightswatch.ca ("Access denied. Your IP address is blacklisted. If you feel this is in error please contact your hosting provider's abuse department.")
rijksoverheid.nl (403 Forbidden. But not on all exit nodes.)
rockabilly-radio.net ("Access denied.  Your IP address is blacklisted.  If you feel this is in error please contact your hosting provider's abuse department."; some exits, streaming OK though / 2016-11-26)
sabaheats.com
safeco.com ("We're sorry, we cannot service your request at this time.  If you feel this is an error, call 800...") <= assholes keep it vague, waste our time.  Note it's an insurance company, thus interested in keeping track of where you are so they can increase rates when you move to a region w/higher premiums.
samsung.com ("Access denied. You don't have permission to access "http://www.samsung.com/"" / 2016-10-20)
saskatchewanherald.com ("Access denied. Your IP address is blacklisted.")
sciencedirect.com ("A problem was encountered providing the content you requested Reference Number: 18.1c367a5c.1489330818.2078284")
scottaaronson.com  ("Access denied.  Your IP address [85.24.215.117] is blacklisted.")
sensis.com.au ("We have detected unusual traffic activity originating from your IP address." with Google ReCAPTCHA version 1)
sethbaum.com ("Access denied.  Your IP address is blacklisted.  If you feel this is in error please contact your hosting provider's abuse department.")
shuttleworthfoundation.org (75% of the time outright blocks any access)
sinfest.net ("The requested URL was rejected."  Hosted through carrierzone.com)
singpolyma.net ("Error 403")
slashdot.org ("banned")
sncb.be (timeout) <= Belgian rail system recently started blocking Tor in the most hostile manner possible. They make no statement and just drop packets, leaving tor users to wait forever until they give up. <rant>great. so in the brave new world "public utilities" now start to silently and as a matter of course discriminate against privacy conscious users on the net. Deutsche Bahn interrupts connection once you go to the ticket reservation page - the love story between railways and surveillance runs deep: the data collection and most of all the execrable CCTV infestation, even inside new trains. all of this would make a great headline: privacy gets thrown under the train as formerly free societies submit to total surveillance.</rant>
state.gov ("Access Denied")
statuspage.io/ (Your IP address 149.202.98.160 has been flagged as a scanner. Scanners are not permitted. If you are seeing this message in error, please contact security@statuspage.io.)
study.com ("403 forbidden")
snowbirds.org/ (The requested URL was rejected. Your support ID is: 10851284974681727906w)
sony.de (You don't have permission to access "http://www.sony.de/" on this server. Reference # ... / same story with different exit nodes)
spamhaus.org (reCaptcha)
stefanv.com/electronics/ (Error 403; We're sorry, but we could not fulfill your request for /electronics/usb_charger.html on this server.; You do not have permission to access this server. Before trying again, run anti-virus and anti-spyware software and remove any viruses and spyware from your computer. ;  Your technical support key is: ab19-c14e-2b02-1b1f; You can use this key to fix this problem yourself.; If you are unable to fix the problem yourself, please contact stefan at capable.ca and be sure to provide the technical support key shown above. -> same as linuxquestions.org and ioerror.us)
stepstone.de ("You don't have permission to access "..." on this server." / some exits / 2017-02-18)
sueddeutsche.de ("The connection was refused when attempting to contact www.sueddeutsche.de" / 2016-04-03) accessible from 3/3 exits 04-22
support.apple.com (Also blocks Tor non-exit relay IPs)
svictor.net
sydneypadua.com ("Access denied.  Your IP address [188.138.9.49] is blacklisted.  If you feel this is in error please contact your hosting providers abuse department.")
forum.synology.com/enu/ ("You have been permanently banned from this board" some exits / 2016-12-22)
talk.maemo.org
talkingpointsmemo.com
techerator.com
technologyreview.com ("We noticed you're browsing in private or incognito mode.  To continue reading this article, please exit incognito mode or log in.")
thecultureblend.com
thegrommet.com
theislamicseminary.org ("Access denied.  Your IP address [171.25.193.131] is blacklisted.  If you feel this is in error please contact your hosting providers abuse department.")
ti.com (Access Denied You don't have permission to access "http://www.ti.com/..." on this server.)
tineye.com/search
tocloud.com ("Access denied.  Your IP address is blacklisted.  If you feel this is in error please contact your hosting provider's abuse department." / 2016-12-04)
torjo.com <- "406 Not Acceptable". dunno if it's a tor block but the status code (taken in a self-referential way) is a pretty appropriate comment on Tor blocks ...
torrentfreak.com (reCaptcha on most exits)
www.travelweekly.com
tweakblogs.net (some exits)
tweakers.net (times out)
twirpx.com
twitter.com <= access granted, but more disclosure required for signups (e.g. mobile number submission cannot be skipped). Accounts that escaped the mobile number submission at reg. are sometimes forced to enter a phone number later if accessed from tor (these accounts are effectively locked until a phone number is supplied) -> too bad for them, everyone with something to say is welcome to join GNUSocial. apparently there's even a twitter bridge in operation
typepad.fr
typepad.co.uk
usnews.com (access denied)
usps.com (access denied)
usa.gov
www.veteranstoday.com/ (SpamFireWall is activated for your IP 77.247.181.163)
videotrazilica.com
ricarica.vodafone.it (only that subdomain; also from relays!?)
unc.edu ("The request was rejected. ")
vpforums.org/  ("As of March 8th, 2011, VPForums.org is blocking the use of proxies." / reading OK but account creation is not)
walmart.com (Access Denied You don't have permission to access "http://www.walmart.com/" on this server. Reference #...) <= sometimes.  If you get lucky, and place an order over tor, the bastards later silently cancel the order without notice or reason.  Be sure to report "false advertising" to consumer protection orgs when that happens. WHAT! that's a new low. another reason to curse their nonexistent souls that's "security" of the brave new world for you. if you don't meet expectation of normalcy, you can be quietly discarded.
wayfair.com ("Access denied. You don't have permission to access 'http://www.wayfair.com'" / 2017-01-03)
wbai.org (this seems to have been a one-time thing, maybe they are only blocking one exit	 )
whatthefuckshouldimakefordinner.com/index.php (Access denied. Your IP address [163.172.223.200] is blacklisted. If you feel this is in error please contact your hosting providers abuse department)
wigle.net/ (403 Forbidden / (nginx) 2016-12-04)
wiki.debian.org (Forbidden <p>You are not allowed to access this!</p>)
wikidevi.com (Error 403 (451 more like ...). Your technical support key is: ...)
witopia.net (error 403) <= we shouldn't care, this is a nanny VPN anyway
weforum.org (Access Denied You don't have permission to access ...)
whiterose.samizdata.net
whoismcafee.com/
wikipedia.org (allows reading but blocks edits,)
woz.ch (worrying & ironic trend? newspapers censoring their content for viewers who use censorship circumvention tools ~ remedy: use archive.is)
www.csebanking.it (Connection timeout. I'm running a non-exit relay)
www.csebo.it (Connection timeout. I'm running a non-exit relay)
xmodulo.com ("Malicious activity has been detected from your computer or another computer on your network" / 2016-08-14)
news.ycombinator.com (reCaptcha - some exits only)
yelp.com (all exits)
davidmburke.com
youbetrayedus.org
philosophybasics.com (oddly philosophybasics.com works)
verge.com ("forbidden")
whatthefuckshouldimakefordinner.com/index.php (Access denied. Your IP address [163.172.223.200] is blacklisted. If you feel this is in error please contact your hosting providers abuse department)
forums.whirlpool.net.au (“Access to whirlpool.net.au from this location has been restricted due to suspicious activity.” which is the only response even if you just try to GET/read something there.)
zara.com
NetZone AG whole address range blocked 212.243.197.0 - 212.243.197.127
woz.ch (timed out, firewalled)


code:
##### What you can do to resist Cloudflare?

######  Website consumer

- If the website you like is using Cloudflare, tell them not to use Cloudflare.

> You are just helping corporate censorship and mass surveillance.
>
> https://trac.torproject.org/projects/tor/ticket/24351

- Try not to use their service. Remember you are being watched by Cloudflare.

- Search for other website. There are many alternatives and opportunites on the internet!

- If your browser is Firefox, use one of these add-ons.

| Name | Can Block | Can Notify |
| -------- | -------- | -------- |
| [Block Cloudflare MITM Attack II](https://addons.mozilla.org/en-US/firefox/addon/bcma/)     | **Yes**     | **Yes**     |
| [Block Cloudflare MITM Attack](https://trac.torproject.org/projects/tor/attachment/ticket/24351/block_cloudflare_mitm_attack-1.0.14.1-an%2Bfx.xpi)     | **Yes**     | **Yes**     |
| [Searxes' Third-party Request Blocker](https://addons.mozilla.org/en-US/firefox/addon/stprb/)     | **Yes**     | **Yes**     |
| [Detect Cloudflare](https://addons.mozilla.org/en-US/firefox/addon/detect-cloudflare/)     | No     | **Yes**     |

- Convince your friends to use [Tor Browser](https://www.torproject.org/) on the daily basis. Anonymity should be the standard of the open internet!

######  Website owner / Web developer

- Do not use Cloudflare solution. You are loser if you fall to that easy solution. You can do better than that, right?

- Install Web Application Firewall (such as OWASP) and Fail2Ban on _your_ server and configure it _properly_.

- Set up [Tor Onion Service](https://www.torproject.org/docs/onion-services.html.en) or I2P insite if you believe in freedom and welcome anonymous users.

- Ask for advice from other [Clearnet/Tor dual website operators](https://trac.torproject.org/projects/tor/wiki/org/projects/WeSupportTor) and make anonymous friends! :)

######  Software user

- If you use Debian GNU/Linux, or any derivative, subscribe to [bug #831835](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=831835). And if you can, help verify the patch, and help the maintainer come to the right conclusion on whether it should be accepted.

- Always recommend [Tor Browser](https://www.torproject.org/) for desktop and [Orfox](https://guardianproject.info/apps/orfox/) for smartphone. Other software's privacy is imperfect. This doesn't mean Tor browser is "perfect". There is no 100% secure nor 100% private on the internet and technology.

Let's talk about _other software's privacy_...

- If you really need to use Firefox, pick "[Firefox ESR](https://www.mozilla.org/en-US/firefox/organizations/)". ESR is developed for company and organizations, thus _some_ spyware code is disabled by default. Portable version is [here](https://portableapps.com/apps/internet/firefox-portable-esr).

- Remember, Mozilla is [using Cloudflare service](https://www.robtex.com/dns-lookup/www.mozilla.org). They're also using [Cloudflare's DNS service on their product](https://www.theregister.co.uk/2018/03/21/mozilla_testing_dns_encryption/) D'oh!

- Mozilla officially [rejected this ticket](https://bugzilla.mozilla.org/show_bug.cgi?id=1426618).

- PaleMoon developer [likes Cloudflare](https://github.com/mozilla-mobile/focus-android/issues/1743#issuecomment-345993097).

- Chrome is a [spyware](https://www.gnu.org/proprietary/malware-google.en.html).

######  Action

- Tell others around you about the dangers of Cloudflare. But don't talk with NSA employee; you'll be _definitely_ marked... just kidding!

- Help improve this repository, both the lists, the arguments against it and the details.

- Document and make very public where things go wrong with Cloudflare (and similar companies), making sure to mention this repository when you do so

- Get more people using Tor by default so they can experience the web from the perspective of different parts of the world.

- Start groups, in social media and meatspace, dedicated to liberating the world from Cloudflare.

- Where appropriate, link to these groups on this repository - this can be a place for coordinating working together as groups.

- Start a coop that can provide a meaningful non corporate alternative to Cloudflare.

- Let us know of any alternatives to help at least provide multiple layered defence against Cloudflare.

- Try using [globalist](globalist.txt) to maintain this list.

- If you are in the **United States of America** and the website in question is a bank or an accountant, try to bring legal pressure under the [Gramm–Leach–Bliley Act](https://en.wikipedia.org/wiki/Gramm%E2%80%93Leach%E2%80%93Bliley_Act), or the [Americans with DIsabilities Act](https://www.ada.gov/cguide.htm) and report back to us how far you get.

- If the website is a government site, try to bring legal pressure under the [1st Amendment of the US Constitution](https://en.wikipedia.org/wiki/First_Amendment_to_the_United_States_Constitution).

- If you are EU citizen, contact the website to send your personal information under the [General Data Protection Regulation](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation). If they refuse to give you your information, that's a violation of the law.

- For companies that claim to _offer service on their website_ try reporting them as "_false advertising_" to consumer protection organizations and BBB. Cloudflare websites are served by Cloudflare servers.


code:
name: Android CI

on:
  push:
    branches: [ master ]
  schedule:
    - cron:  '10 19 * * *'

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: 11
    - name: Build with Gradle
      run: ./gradlew clean assembleDebug test

repo_name: BadStarOne/ffupdater


code:
# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex
# Iml files
*.iml

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# IntelliJ
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
.idea/caches
.idea

# Keystore files
# Uncomment the following line if you do not want to check your keystore files in.
#*.jks

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# Google Services (e.g. APIs or Firebase)
google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md
/ffupdater/release/output-metadata.json
/ffupdater/release/ffupdater-release.zip

path: .gitignore


code:
# 2022-01-02 Version 75.0.0 (91)

* Remove Styx because it is not longer maintained (Tobi823/ffupdater#101).
* Improve version comparison with G00fY2/version-compare (Tobi823/ffupdater#98).
* Fix opt-out of apps from background update check ("Excluded applications") for Firefox Release, Firefox Beta and Firefox Nightly (Tobi823/ffupdater#97).
* Don't crash during app installation/update when no or only very little storage is available (Tobi823/ffupdater#96).
* When app update is unsuccessful, show more detailed error message.
* Update dependencies

# 2021-12-05 Version 74.5.3 (90)

* Fix Brave update check

# 2021-11-08 Version 74.5.2 (89)

* Update warning for Vivaldi (thanks gnuhead-chieb - Tobi823/ffupdater#92)
* Make links in dialogs clickable

# 2021-11-07 Version 74.5.1 (88)

* Add Vivaldi (Tobiwan/ffupdater#89)
* Add Ungoogled Chromium (Tobi823/ffupdater#50)
* Update description of Firefox Klar (thanks cosify - Tobi823/ffupdater#91)
* Crash report can partially selected and copied
* Cleanup build scripts

# 2021-11-01 Version 74.5.0 (87)

* Improve internet check. (Tobi823/ffupdater#87)
    * Use the old network check API for Android 10 and below.
    * Handle network errors better in the app.
* Reduce storage usage for devices with low internal memory. (Tobiwan/ffupdater#88)
    * If an app update fails, keep the cached app update (APK file).
    * If an app update is successful or a critical error (wrong certificate fingerprint) occurs, delete the
      cached app update (APK file).
    * Download and keep the APK file in the Android/data/de.marmaro.krt.ffupdater/files/Download folder and
      use this folder as a cache folder.
    * Do not copy the downloaded APK file to a official cache folder which is invisible to the user.
    * User can delete the downloaded app updates (APK files) in the Android app settings > Storage > Manage
      Space.
    * If an app update fails, show buttons for:
        * deleting the app update in the cache folder.
        * opening the cache folder with a file manager app.
    * When migrating to this version, the app will delete old cache files.
* Update dependencies:
    * androidx.core:core-ktx to 1.7.0
    * androidx.lifecycle:lifecycle-runtime-ktx to 2.4.0

# 2021-10-20 Version 74.4.7 (86)

* Fix "Permission Denial" bug on Android devices (Tobiwan/ffupdater#86)
* Speed-up app installation/update by not requiring to press a button
* Improve crash report styling and add important device information to the crash report
* Improve internal condition checks and add improved error messages
* Remove unused dependencies androidx.fragment:fragment-ktx and org.jetbrains.kotlin:kotlin-stdlib-jdk7

# 2021-10-25 Version 74.4.6 (85)

* Download only "Firefox Focus/Klar" and not "Firefox Focus/Klar Beta" (Tobi823/ffupdater#89)
* Try out the Android 12 "silent update" feature when user manual updates an app (Tobi823/ffupdater#88)

# 2021-10-07 Version 74.4.5 (84)

* Small mistake, I forget to add important changes to 74.4.4
* Improve handling of Kotlin coroutine errors (Tobiwan/ffupdater#85 Tobi823/ffupdater#86)
* Improve and speed up internet check
* Handle disabled "Download Manager" better
* Improve translation
* Update dependencies

# 2021-10-07 Version 74.4.4 (83)

* Improve handling of Kotlin coroutine errors (Tobiwan/ffupdater#85 Tobi823/ffupdater#86)
* Improve and speed up internet check
* Handle disabled "Download Manager" better
* Improve translation
* Update dependencies

# 2021-09-29 Version 74.4.3 (82)

* Improve handling of concurrent code
* Fix crash when starting app (NetworkOnMainThreadException) ()
* Fix missing icon (in repomaker and maybe F-Droid)
* Improve translation files
* Cleanup and refactor code

# Version 74.4.2 (81)

* Skip version

# 2021-09-24 Version 74.4.1 (80)

* Fix crash when canceling a download (Tobi823/ffupdater#77)
* Ignore error and retry background update (with exponential increasing waiting time) for
  CancellationException, GithubRateLimitExceededException and UnknownHostException (Tobi823/ffupdater#74)
* Improve error handling
* Fix download error for Focus/Klar by switching to the GitHub API (Tobiwan/ffupdater#81)

# 2021-08-30 Version 74.4.0 (79)

* Update Brazilian Portuguese translation (thanks mezysinc; Tobiwan/ffupdater#78)
* Abort background update check if airplane mode is enabled (Tobi823/ffupdater#74)
* Prevent simultaneous download by the background job and the user (Tobiwan/ffupdater#80)
* Reduce app permission (remove WRITE_EXTERNAL_STORAGE permission)

# 2021-08-04 Version 74.3.5 (78)

* Fix update check for "Firefox Focus" and "Firefox Klar" (By removing everything after the dash + the dash
  itself from the version name of the installed app. "8.18.0-rc.1" will be converted to
  "8.18.0"; Tobi823/ffupdater#69)

# 2021-07-30 Version 74.3.4 (77)

* Make update check more robust for "Firefox Release", "Firefox Beta", "Firefox Focus" and "Firefox Klar"

# 2021-07-26 Version 74.3.3 (76)

* Fix crash when checking for "Firefox Focus" or "Firefox Klar"
* Update Firefox Focus/Klar icon

# 2021-07-22 Version 74.3.2 (75)

* Fix crash when checking for "Firefox Beta" (Tobi823/ffupdater#60)

# 2021-07-19 Version 74.3.1 (74)

* Fix crash when checking for "Firefox Release" or "Firefox Beta" (Tobi823/ffupdater#57)

# 2021-07-06 Version 74.3.0 (73)

* Add Polish language (thanks Eryk Michalak, Tobiwan/ffupdater_gitlab#11)
* Fix crash when checking for "Firefox Release" updates (Tobi823/ffupdater#52)

# 2021-06-22 Version 74.2.0 (72)

* Add Japanese language (thanks gnuhead-chieb Tobi823/ffupdater#47)

# 2021-06-03 Version 74.1.1 (71)

* Fix Firefox Beta by adapting to the new structure of the chain_of_trust.log (Tobi823/ffupdater#44)

# 2021-05-29 Version 74.1.0 (70)

* Add Brave Browser because the APK files are published on GitHub
  again. (https://github.com/brave/brave-browser/issues/15878)

# 2021-05-18 Version 74.0.0 (69)

* Remove Brave Browser because the APK files are no longer published on
  GitHub. (https://github.com/brave/brave-browser/issues/15878)

# 2021-05-18 Version 73.1.4 (68)

* Instruct user if app installation is aborted by "MIUI Optimization" (Tobi823/ffupdater#41)

# 2021-05-07 Version 73.1.3 (67)

* Fix crash caused by the new Firefox Nightly version name schema (Tobi823/ffupdater#40 Tobi823/ffupdater#66)

# 2021-04-25 Version 73.1.2 (66)

* If it is likely that it is just a network error during manual update search, then display "No network
  connection" instead of crashing (Tobi823/ffupdater#38)

# 2021-04-18 Version 73.1.1 (65)

* Fix wrong warning for Bromite (thanks mpeter, Tobiwan/ffupdater#64)

# 2021-04-18 Version 73.1.0 (64)

* Trust user certificates when checking for updates and downloading updates (for AdGuard,
  Tobi823/ffupdater#37)
* Prevent automatic backup of failed downloads by Google's "Auto Backup for Apps"

# 2021-04-17 Version 73.0.1 (63)

* There has been a discussion on Github if the Kiwi browser is
  spyware: https://github.com/Tobi823/ffupdater/issues/35 (Tobi823/ffupdater#35)
  I think that Kiwi is not spyware but stays removed because FFUpdater is about privacy and Kiwi has no
  additional privacy features. F-Droid users can use other stores (like Aurora Store) to install the Kiwi
  browser.
* Bug fix: automatically download app updates after disabling airplane mode
* Bug fix: catch the JobCancellationException correctly (occurs when changing the network during background
  update check)

# 2021-04-17 Version 73.0.0 (62)

* Remove Kiwi Browser because it is at least not privacy friendly and in the worst case a spyware (thanks
  nyanpasu64 Tobi823/ffupdater#35)

# 2021-04-13 Version 72.1.0 (61)

* Add support for Bromite https://github.com/bromite/bromite (Tobiwan/ffupdater#59 Tobi823/ffupdater#22)
* Add support for Kiwi Browser https://github.com/kiwibrowser/src (Tobi823/ffupdater#22)
* Automatically download app updates in the background if the current network is unmetered and the device has
  enough storage (Tobi823/ffupdater#34)
* Cache already downloaded updates (Tobi823/ffupdater#33)
* Keep the last version of an app in the folder "/sdcard/Android/data/de.marmaro.krt.ffupdater/cache/Download"
  for manual downgrading. These cached versions can be deleted by using the "CLEAR CACHE" button in the
  settings (Tobiwan/ffupdater#62)
* Decrease the number of false positives "background network exception" error notifications (thanks
  bershanskiy Tobi823/ffupdater#31)
* Improve Brazilian Portuguese translation (thanks mezysinc; Tobiwan/ffupdater#58)
* Improve Russian translation (thanks DeenHyper74; Tobiwan/ffupdater#56)
* Make download status translatable (Tobiwan/ffupdater#57)
* Ask for confirmation when the user wants to update an app but the latest app version is already installed (
  Tobiwan/ffupdater#60)
* Generate UI partially programmatically (and don't use a static UI)

# 2021-03-14 Version 72.0.0 (60)

* !!! Remove support for Firefox Light because updates are no longer signed and therefore pose a security
  risk (thanks opened and mega-stoffel)
* User can disable the background update check on metered networks (thanks williamtheaker)
* By clicking on the "i"-Icon, you can see the time of the last successful background update check.
* Fix Brazilian Portuguese translation (thanks mezysinc)
* Fix Bulgarian translation (thanks StoyanDimitrov)
* Fix spelling (thanks ku)
* Fix crash when rotating device (thanks floringolintchi)
* Distinguish the morning and evening version of Firefox Nightly (thanks DctrBnsttr)

# 2021-02-26 Version 71.0.3 (59)

* Fix crash when installing app on Android 8 (thanks bershanskiy)
* Show the correct notification if the background check failed due to a network exception (thanks Average_User
  and Diridibindy)
* If it's likely that the user has enabled 'MIUI Optimization', instruct him to disable it (thanks Rafa ML)

# 2021-02-21 Version 71.0.2 (58)

* Fix double download (thanks Redpillbug)
* Fix crash when rotating in the settings view (thanks DeenHyper74)

# 2021-02-18 Version 71.0.1 (57)

* Improve error message when the background update check failed (thanks duck-rh)

# 2021-02-15 Version 71.0.0 (56)

* Add Iceraven browser
* Display the real available versions for Release, Beta, Nightly, Focus and Klar
* Reduce likeliness of background errors
* Fix installation problems on older devices
* Migrate from Java to Kotlin for better concurrency
* Thanks StoyanDimitrov for updating the Bulgarian translation
* Bug fixes and many more
* Thanks mega-stoffel, Iey4iej3, Redpillbug, NANASHI0X74, StoyanDimitrov, lucker999, codingepaduli, borisovg,
  H-Sachse, mpeter, DeenHyper74, duck-rh, mikeklem and darkludao for bug reports
* Thanks CharmCityCrab, TheOneWithTheBraid, codingepaduli and User1l0 for feature requests

# 2020-11-13 Version 70.0.1 (55)

* Check if system download app is installed (thanks Quantumrider)
* Fix crash during downloading (thanks hsol)

# 2020-11-02 Version 70.0.0 (54)

* Add Bulgarian translation (thanks StoyanDimitrov)
* Fix short description in F-Droid (thanks linsui)
* Fix typo (thanks GPery and DeenHyper74)
* A different notification for each installed app will be displayed
* Clicking on notification will update the app
* Better detect ABI of device - Firefox Focus can be installed on Android emulators
* Use Crasher (https://github.com/fennifith/Crasher) for crash reports
* Delete old downloaded APK files more reliable
* Drop permission READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE because they should not be necessary
* Check and fail if external storage is not available
* Query GitHub API with less network traffic
* Cleanup code

# 2020-09-23 Version 69.0.5 (53)

* Disable error when the already installed app has a different signature (because Android won't install an
  update with a different signature) - thanks pheki for reporting this bug
* Add translations for this bug
* Make the installation activity a little big more resilient

# 2020-09-08 Version 69.0.4 (52)

* Fix old download urls / update check urls for Firefox Release and Firefox Beta - thanks DctrBnsttr for
  reporting this bug
* Add tests to ensure that FFUpdater is always using the latest download urls

# 2020-08-17 Version 69.0.3 (51)

* Fix broken Firefox Nightly installation/update - thanks 132ikl for reporting this bug

# 2020-08-13 Version 69.0.2 (50)

* Thanks aevw for adding brazilian portuguese translation

# 2020-08-12 Version 69.0.1 (49)

* Thanks DeenHyper74 for updating the russian translation

# 2020-08-05 Version 69.0.0 (48)

* Remove Fennec Release because it's no longer supported by Mozilla
* Rename Fenix Release, Fenix Beta and Fenix Nightly to Firefox Release, Firefox Beta, Firefox Nightly
* Fix download URLs for Firefox Release, Firefox Beta, Firefox Nightly
* Use the more reliable PackageInstaller-method for installing the apps (instead of the old
  ACTION_INSTALL_PACKAGE-method)
* Increase minimum SDK for FFUpdater to Lollipop/21 (because PackageInstaller needs 21 and all Firefox
  browsers need at least 21)
* Fix bug "empty installed text field"
* Thanks trymeout, guysoft, rantpalas and RomainL972 for reporting bugs

# 2020-07-02 Version 68.4.1 (47)

* Fix broken Fenix download - if the download is still broken for you, wait 10 minutes or delete the storage
  of the app
* Check for enough free space and display warning if < 100MB

# 2020-06-07 Version 68.4.0 (46)

* Add Fenix Beta, Fenix Nightly and Lockwise
* Download Fenix Release/Beta/Nightly, Focus and Klar from Mozilla's Taskcluster (continuous integration
  server)
* Fix "Light theme is always shown at first run"
* Thanks Rail Aliiev and Johan Lorenzo from Mozilla for their
  support <https://bugzilla.mozilla.org/show_bug.cgi?id=1627518>
* Thanks KarlHeinz and DeenHyper74 for their error reporting and support

# 2020-05-20 Version 68.3.7 (42)

* Add simple crash reporter (by opening the mail app with the error message)
* Fix crash by asking for WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE permissions
* Show progress bar when verifying the downloaded APK
* Download APK to the public download directory of the app (for example:
  /storage/sdcard0/Android/data/de.marmaro.krt.ffupdater/files/Download)
* Remove old debug messages
* Thanks yhoyhoj, UltraBlackLinux, rvandegrift, vikajon, wchen342, Ulfschaper, prox and danceswithcats for
  your error reporting

# 2020-05-18 Version 68.3 (35)

* Try to fix error "Failed to check certificate hash" by switching from apksig-library to
  PackageManager#getPackageArchiveInfo (thanks rvandegrift). This will reduce the size of FFUpdater and
  improve the maintenance for future releases.
* Color of collapsed title will be always white (thanks DeenHyper74)

# 2020-05-13 Version 68.2 (34)

* Fix Fenix download from Github (thanks yhoyhoj)
* Show correct download progress when downloading an app

# 2020-05-13 Version 68.1 (33)

* Thanks DeenHyper74 for the Russian translation
* Add support for Dark Theme (thanks DeenHyper74 for the tip)
* Add setting for switching between Dark and Light Theme

# 2020-05-06 Version 68.0 (32)

* Really big update
* Add support for Firefox Klar, Firefox Focus, Firefox Lite and Fenix
* Download and install the app inside FFUpdater (thanks wolfgang42 for the groundwork)
* Improve UI
* Verify the certificate of the downloaded and installed app
* Many improvements
* Thanks DeenHyper74 and xin for translations
* Remove Fennec Beta and Fennec Nightly because their are not developed
  anymore https://bugzilla.mozilla.org/show_bug.cgi?id=1627518

# 2019-06-28 Version 67.4 (31)

* Fix warning dialogue disappears after screen rotation (thanks DeenHyper74)

# 2019-06-28 Version 67.3 (30)

* Fix crash when selecting an entry after rotating the channel dialog (thanks DeenHyper74)

# 2019-06-28 Version 67.2 (29)

* Fix crash when rotating on channel dialog (thanks DeenHyper74)

# 2019-06-28 Version 67.1 (28)

* Update Russian translation (thanks DeenHyper74)

# 2019-06-28 Version 67.0 (27)

* Fix broken nightly download (thanks dannycolin for the info)
* Display warning when switching from 'Release' channel to the 'Nightly' or 'Beta' channel (thanks
  DeenHyper74)
* Interval between update checks is now configurable (thanks aplufr, wah6Me1l and DeenHyper74)

# 2019-04-25 Version 66.2 (26)

* Improve french translation (thanks xinxinxinxinxin)
* Fix "update notification will be shown every 5 minutes" (bug discovered by aplufr)

# 2019-04-25 Version 66.1 (25)

* Add grammar fixes (thanks DeenHyper74)

# 2019-04-25 Version 66.0 (24)

* Notification (for a Firefox update) now works on Android 9
* Replace BackgroundService with WorkManager (AndroidX) for requesting Mozilla's API
* Clean up code (thanks DeenHyper74)
* Fix some minor bugs (thanks DeenHyper74)
* App requires API level 18 because Firefox requires API level 18
* Update translation

# 2019-04-01 Version 65.0 (23)

* Added support for beta and nightly channels
* Switched to light theme
* Update russian translation
* Handover maintainership to https://notabug.org/Tobiwan/ffupdater

# 2018-01-07 Version 57.0 (22)

* Add some translations

# 2017-06-13 Version 54.0 (21)

* Add license report
* Update icon
* Add some translations

# 2017-05-20 Version 53.0 (20)

* Update to 53.0
* Use new Mozilla API to det version information
* Remove a lot of unused code.
* Add icon
* Fix crash with SDK < 17
* Enable smaller builds

# 2017-01-22 Version 51.0 (18)

* Update to 51.0
* Remove a lot of unused code.
* Re-implement actual checking.

# 2016-04-29 Version 46.0 (16)

* No changes, just bump to remind people

# 2016-04-06 Version 45.0.1 (15)

* Remove everything but URL generator and download button.

# 2016-03-09 Version 45.0a (14)

* Really, really quickfix Android6 issues..
* Remove version check since it's broken: Just download the APK.

# 2016-03-06 Version 45.0 (13)

* Use lower target to quickfix Android6 permissions

# 2016-01-26 Version 44.0 (12)

* Update to reflect new Firefox version, but no change in architecture. Mozilla "-latest" URL still works...

# 2015-12-31 Version 43.0.x (11)

* Mozilla removed /latest/* downloads from archive. As recommended in
  https://archive.mozilla.org/pub/mobile/releases/latest/README.txt
  we use https://download.mozilla.org/?product=fennec-latest now.

# 2015-12-25 Version 43.0 (10)

* Update to 43.0
* Mozilla does not populate /latest/ anymore, see
  https://bugzilla.mozilla.org/show_bug.cgi?id=1233399

# 2015-12-24 Version 42.0.2 (9)

* Update to 42.0.2

# 2015-11-23 Version 42.0.1 (8)

* Update to 42.0.1

# 2015-11-02 Version 42.0 (7)

* Update to 42.0

# 2015-09-23 Version 41.0 (6)

* Bump to 41.0 (6)

# 2015-09-01 Version 40.0.3 (5)

* Mark background setting as non-functional for now.
* Update to 40.0.3

# 2015-08-10 Version 40.0 (3)

* Remove FTP lookup since Mozilla is shutting down the servers.
* Handle both request type by a single button.
* "I am feeling lucky" now gets the next release, not the latest.
* Add preferences to restrict connections: WiFi-only, metered, roaming.
* Use actionbar.

# 2015-07-08 Version 39.0 (1)

* Select download uri based on arch and api.
* Check filename via FTP.
* Download update file via HTTPS and DownloadManager.
* Log errors and status.
* Toast on updates.
* Prompt for update (if necessary).
* Option to use fixed/tested download location.
* Add proper LICENSE (GPLv3+).


code:
# My motivation

[Inspiration](https://kodimensional.dev/goalkeeper)

 - Support the use of degoogled Android devices.
 - Support the use of privacy-friendly browsers.
 - Improve my experience in Android development.
 - Learn to manage a small open-source project.

# Project goals

[Inspiration](https://kodimensional.dev/goalkeeper)

 - Simplicity
   - Easy to use for the end-user, simple design, no hidden features
   - Reasonable to develop and to test the app
   - Source code must be understandable for new developers
 - Security - Using FFUpdater must be more secure than downloading the APK file from the Internet


code:
# Add new translations

## Beginners

 - Download the `values.xml` file from
 [ffupdater/ffupdater/src/main/res/values/values.xml](https://notabug.org/Tobiwan/ffupdater/src/master/ffupdater/src/main/res/values/strings.xml)
 - Translate the English words and sentences
   - Don't translate the entries with `translatable="false"` like `<string name="empty" translatable="false"/>` or `<string name="github" translatable="false">GitHub</string>`
   - `%1$s` and `%1$d` are placeholder for real values.
   - For reference: the other translations are stored in
   `ffupdater/ffupdater/src/main/res/values-XX/values.xml`.
   XX is current bg (Bulgarian), de (German), fr (French),
   pt-rBR (Portuguese Brazilian), ru (Russian) or uk (Ukrainian).
 - Send me the translated `values.xml` as an issue on [notabug.org](https://notabug.org/Tobiwan/ffupdater/issues),
 [GitHub](https://github.com/Tobi823/ffupdater/issues) or [GitLab](https://gitlab.com/Tobiwan/ffupdater_gitlab/-/issues)

## Advanced developers

Same as above but with forking + pull request / merge requests on [notabug.org](https://notabug.org/Tobiwan/ffupdater/pulls),
[GitHub](https://github.com/Tobi823/ffupdater/pulls) or [GitLab](https://gitlab.com/Tobiwan/ffupdater_gitlab/-/merge_requests)

## Regular check

I'm only a German native speaker with DeepL and Google Translate - expect to check every six months for bad translations.


code:
[](https://f-droid.org/app/de.marmaro.krt.ffupdater)

# Firefox-Updater

Download, install and update these privacy friendly browsers:

- [Brave Private Browser](https://play.google.com/store/apps/details?id=com.brave.browser&hl=en_US) [GitHub Repository](https://github.com/brave/brave-browser)
- [Bromite](https://github.com/bromite/bromite)
- [Firefox Browser](https://play.google.com/store/apps/details?id=org.mozilla.firefox) [GitHub Repository](https://github.com/mozilla-mobile/fenix)
- [Firefox Focus](https://play.google.com/store/apps/details?id=org.mozilla.focus) [GitHub Repository](https://github.com/mozilla-mobile/focus-android)
- [Firefox Klar](https://play.google.com/store/apps/details?id=org.mozilla.klar) [GitHub Repository](https://github.com/mozilla-mobile/focus-android)
- [Firefox Nightly](https://play.google.com/store/apps/details?id=org.mozilla.firefox) [GitHub Repository](https://github.com/mozilla-mobile/fenix)
- [Firefox for Android Beta](https://play.google.com/store/apps/details?id=org.mozilla.firefox_beta) [GitHub Repository](https://github.com/mozilla-mobile/fenix)
- [Iceraven](https://github.com/fork-maintainers/iceraven-browser)
- [Ungoogled Chromium](https://github.com/ungoogled-software/ungoogled-chromium-android)
- [Vivaldi](https://vivaldi.com/download/) [Source Code](https://vivaldi.com/source/)

and:

- [Firefox Lockwise](https://play.google.com/store/apps/details?id=mozilla.lockbox)

FFUpdater will check periodically for updates and will display a notification when an update is available.
This feature itself can be disabled and the check frequency can be changed.

FFUpdater will also automatically download the app updates in the background if the current network is
unmetered and the device has enough storage.

## Security:

- only HTTPS connections
- check certificate fingerprint of the downloaded file and installed app
- user certificates are supported for AdGuard

You can find the APK certificate fingerprints on multiple website - e.g. apkmirror.com I did my best to make
the app as secure as possible - feel free to double-check it in the source code.

## Download server:

The applications are downloaded from these locations:

- Brave Private Browser: <https://api.github.com/repos/brave/brave-browser/releases/latest>
- Bromite: <https://api.github.com/repos/bromite/bromite/releases/latest>
- Firefox Browser: <https://firefox-ci-tc.services.mozilla.com/tasks/index/mobile.v2.fenix.release.latest>
- Firefox Focus: <https://firefox-ci-tc.services.mozilla.com/tasks/index/project.mobile.focus.release/latest>
- Firefox Klar: <https://firefox-ci-tc.services.mozilla.com/tasks/index/project.mobile.focus.release/latest>
- Firefox Lockwise: <https://api.github.com/repos/mozilla-lockwise/lockwise-android/releases/latest>
- Firefox Nightly: <https://firefox-ci-tc.services.mozilla.com/tasks/index/mobile.v2.fenix.nightly.latest>
- Firefox for Android
  Beta: <https://firefox-ci-tc.services.mozilla.com/tasks/index/mobile.v2.fenix.beta.latest>
- Iceraven: <https://api.github.com/repos/fork-maintainers/iceraven-browser/releases/latest>
- Ungoogled Chromium: <https://api.github.com/repos/ungoogled-software/ungoogled-chromium-android/releases>
- Vivaldi: <https://vivaldi.com/download/>

## Other distribution channels

The main distribution method of FFUpdater remains F-Droid - this will not change. But you can use the APK
files or the F-Droid repository to quickly install fixed versions.

You need to uninstall FFUpdater every time you switch between F-Droid version and my version.

I don't know if F-Droid shows an update notification when you have my version installed. Maybe you need to
manually check for updates in the F-Droid app.

My versions will be signed with:

```
DN: CN=Tobi823, O=FFUpdater, ST=Germany, C=DE
SHA-256 digest: f4e642bb85cbbcfd7302b2cbcbd346993a41067c27d995df492c9d0d38747e62
SHA-1 digest: b432e9eb74512c0fa58c1ec45912a670f8dfa8e9
MD5 digest: 78a34e36cedd844954726f1e2076642c
```

The official F-Droid Android client sometimes has problems accessing the APK file from my F-Droid repository.
But other clients like "Foxy Droid" work fine. Does anyone know the reason for this? Does the official F-Droid
client has an internal cache and therefore needs more time before it can access a new version from my
repository?

### APK files on GitHub

The APK files are available on [GitHub](https://github.com/Tobi823/ffupdater/releases) and
[GitLab](https://gitlab.com/Tobiwan/ffupdater_gitlab/-/tags).

### F-Droid repository

Click here to add the FFUpdater repository to your F-Droid client.

If the link is not clickable, you can use this help
website [https://tobi823.github.io/ffupdaterrepo.html](https://tobi823.github.io/ffupdaterrepo.html).

Repository address: `https://raw.githubusercontent.com/Tobi823/ffupdaterrepo/master/fdroid/repo`

Fingerprint: `6E4E6A597D289CB2D4D4F0E4B792E14CCE070BDA6C47AF4918B342FA51F2DC89`

[](https://raw.githubusercontent.com/Tobi823/ffupdaterrepo/master/fdroid/repo/assets/qrcode.png)

[How to Add a Repo to F-Droid](https://f-droid.org/en/tutorials/add-repo/)

It seems that this F-Droid repository is sometimes a little buggy. If F-Droid fails to download FFUpdater, try
to install the version from the official F-Droid repository first.

On the app page under the item "Versions" you can see from which repository (my *FFUpdater*
repository or the official *F-Droid* repository) the app version was installed

## FAQ:

- By clicking on the "i"-Icon, you can see the time of the last successful background update check.
- Firefox Nightly: Replace the minutes with 'xx' because FFUpdater can only access the start time of the build
  and not the version name of the app update (finish time). The builds always starts at 5:00 and 17:00 and
  usually takes a few minutes.
- I don't optimize the APK file with minifyEnabled and shrinkResources because it makes the app harder to
  debug
- Tor Browser / Orbot: I will not support them because they can be installed with F-Droid.
  (Go to Settings > Repositories > Enable "Guardian Project Official Releases".)
  I don't feel confident enough that I can install and update the Tor Browser / Orbot securely
  (because I think there is much more at stake than with other browsers).
- Please reopen FFUpdater after moving it to the internal/external storage.

## Git repositories:

- Main repository: https://notabug.org/Tobiwan/ffupdater
- Mirror repository on Github: https://github.com/Tobi823/ffupdater
- Mirror repository on Gitlab: https://gitlab.com/Tobiwan/ffupdater_gitlab

## 3rd-party libraries:

- [AndroidX](https://developer.android.com/jetpack/androidx) by Google for UI
- [Material Components](https://github.com/material-components/material-components-android) by Google for UI (
  Apache 2.0)
- [Gson](https://github.com/google/gson) by Google for parsing API responses (Apache 2.0)
- [Shared Preferences Mock](https://github.com/IvanShafran/shared-preferences-mock) by Ivan Shafran for
  testing SharedPreferences (MIT)
- [Kotlin](https://github.com/JetBrains/kotlin) by Jetbrains for programming language Kotlin
- [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) by Jetbrains for concurrency (Apache 2.0)
- [JUnit 4](https://github.com/junit-team/junit4) for testing (EPL-1.0)
- [MockK](https://mockk.io/) for testing (Apache 2.0)
- [Hamcrest](https://github.com/hamcrest/JavaHamcrest) by Joe Walnes, Nat Pryce and Steve Freeman for
  testing (BSD)
- [Hamcrest Date](https://github.com/eXparity/hamcrest-date) by Stewart Bissett for testing with java.time (
  BSD-3)
- Partially copy and modify [Crasher by James Fenn (Apache 2.0)](https://github.com/fennifith/Crasher) to the
  FFUpdater code base for crash reports
- [G00fY2/version-compare](https://github.com/G00fY2/version-compare) for comparing versions of installed and
  available apps (Apache 2.0)

## My motivation / Project goals

[Goals](GOALS.md)

## How to contribute

[How to contribute](HOW_TO_CONTRIBUTE.md)

## Deprecated browsers#

### Styx Browser

02.01.2022 https://github.com/Tobi823/ffupdater/issues/101

Styx is only temporarily removed from Google Play:

> Sorry for the premature end of Styx.
But in the future the Styx browser will appear again.
Currently styx is migrated to Fulguris base. When this is completed then Styx will return as well as in the Play Store.

30.12.2021: https://github.com/Tobi823/ffupdater/issues/101

It seems that @jamal2362 does not maintain the Styx browser any longer:

- The GitHub repository (https://github.com/jamal2362/Styx) is deleted or private.
- Styx is removed from Google Play (https://play.google.com/store/apps/details?id=com.jamal2367.styx).

Due to the deleted GitHub repository, Styx cannot be downloaded by FFUpdater. And even if - end users should
not use a browser that is no longer updated.

### Kiwi Browser

17.04.2021: https://github.com/Tobi823/ffupdater/issues/35
Answer from the Kiwi developer:

> It's actually quite simple, Kiwi earns money for every search it forwards to Yahoo or Microsoft Bing.

It seems that the developers have to forward search requests to their servers and then to the search engine in
order to get paid by the search engine.

> The parameters and integration method are defined by the search engines themselves, we don't have our words at all how the integration is done.

> They [Yahoo or Microsoft Bing] have a standard guide on how to integrate, either you follow this guide, or you don't work with them.

I guess it's fine. Although i don't like it, i understand that the money for the app development has to come
from somewhere (even Firefox is paid to use "Google" as the default search engine).

But I think that Kiwi should not be managed by FFUpdater because this browser has additional usability
features and no additional privacy features. FFUpdater is about privacy and not usability.

### Firefox Lite

02.12.2021: End of support for Firefox
Lockwise https://support.mozilla.org/en-US/kb/end-of-support-firefox-lockwise
> Mozilla will end support for the Firefox Lockwise app on Android and iOS, effective December 13, 2021.

14.03.2021: The latest release of Firefox Lite is not longer signed and thereby can't be used to upgrade an
existing Firefox Lite installation. Moreover the developers haven't responded to the Github issue "[BUG]
Unsigned apk ?" from 30.01.2021
https://github.com/mozilla-mobile/FirefoxLite/issues/5353. And Firefox Lite will only receive bug fixes in the
future:
> Firefox Lite is currently in Maintenance Mode. No active feature is being done on the product.
> Older Pull Requests and Issues have been marked with the archived label and have been closed.
> However, if you feel an issue is critical enough to be re-opened, please leave a note on the issue
> with an explanation.

These are the reasons why I will remove Firefox Lite.

### Fennec

16.05.2020: Mozilla wants to migrate from Fennec to Fenix. Fennec Beta and Fennec Nightly are already
end-of-life and Fennec Release will be soon.

> Fennec is being replaced by our new state-of-the-art mobile browser codenamed "Fenix". We're slowly migrating users in order to make sure the experience is as painless and as enjoyable as possible. We started to migrate users who were using Fennec Nightly in January (bug 1608882). It took us several weeks to be sure of the result and to finally offer Fenix Nightly to all users using Fennec Nightly. Another few weeks later, we repeated the same process with Fennec Beta (bug 1614287). Fenix Beta has been offered to the whole Fennec Beta population on April 22nd. We're planning to do the same with Fennec Release sometimes this year. The schedule is still to be determined.

> The Google Play Store[1] has a lot of nice features, but it's still pretty basic whenever a software publisher wants to slowly migrate users. Once a migration is started, we can't provide any Fennec updates to the population who wasn't offered Fenix, yet. I can say this restriction is painful to manage for Android developers, Mozilla included. Because of it, we had to stop shipping Fennec Nightly/Beta APKs at the beginning of each migration. This explains the dates of the last builds. At the same time, we stopped building Fennec Nightly/Beta because it enabled us to save technical resources[2] as well as people's time[3].

https://bugzilla.mozilla.org/show_bug.cgi?id=1627518

## Build app

Use Android Studio to clone and run the app. Nothing special needs to be done.

## Maintainer:

### Tobiwan (now)

### Boris Kraut (https://gitlab.com/krt/ffupdater, until April 2019)

> Since I left F-Droid (and Android/Smartphones) about a year ago, I am looking for a new maintainer to take over. Unfortunately the upstream issue I opened years ago is still not solved in 2019. While Fennec F-Droid is back in the mainline repo and other binary repos do serve Firefox, some might still prefer this updater. So as I said: Maintainers welcome. The main task should be to test the last few merge requests (especially the background update stuff) and release a new version.
> **New Maintainer: https://notabug.org/Tobiwan/ffupdater**

## License

````
FFUpdater -- Updater for privacy friendly browser
Copyright (C) 2019-2021 Tobias Hellmann https://github.com/Tobi823
Copyright (C) 2015-2019 Boris Kraut <krt@nurfuerspam.de>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
````


code:
buildscript {
    repositories {
        mavenCentral()
        google()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.4'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"
    }
}


code:
values of Build.SUPPORTED_ABIS

Android 5 Emulator x86:
0 = "x86_64"
1 = "x86"

Android 11 Emulator x86:
0 = "x86"
1 = "armeabi-v7a"
2 = "armeabi"

Android 11 Emulator x86_64:
0 = "x86_64"
1 = "x86"
2 = "arm64-v8a"
3 = "armeabi-v7a"
4 = "armeabi"

Google Pixel 3a (Android 11):
0 = "arm64-v8a"
1 = "armeabi-v7a"
2 = "armeabi"

Google Nexus 7 (custom Android 10):
0 = "armeabi-v7a"
1 = "armeabi"

Fire Tablet 7 - 5. Generation (Android 5.1)
0 = "armeabi-v7a"
1 = "armeabi"

Lockwise has libs for all ABIs


code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output
    method="xml"
    version="1.0"
    encoding="UTF-8"
    indent="yes"
    omit-xml-declaration="yes"/>

<xsl:template match="/resources">
<resources>

<xsl:for-each select="string">
<xsl:sort select="@name"/>
<string name="{@name}">
    <xsl:copy-of select="@* | node()"/>
</string>
</xsl:for-each>

</resources>
</xsl:template>

</xsl:stylesheet>


code:
# Checklist for adding new apps:
- download icon (ic_launcher)
- add new class in de.marmaro.krt.ffupdater.app.impl
- add entry in de.marmaro.krt.ffupdater.app.App
- add entry in the arrays disabledAppEntries + disabledAppEntryValues in src/main/res/values/arrays.xml
- are the entries in disabledAppEntryValues correct?
- add entry in AndroidManifest.xml <queries>
- update README.md
- update fastlane/metadata/android/en-US/{full_description.txt,short_description.txt}
  - update description in repomaker
- update/add unit tests
- resolved all TODOs?
- add it to CHANGELOG.md?

Extract certificate hash with: `keytool -printcert -jarfile *.apk`


code:
# when the git tag was created by the web-frontend, you have to do:
git fetch --tags

# release new version
 - are you on the master branch?
 - optional: `./gradlew wrapper --gradle-version=6.8.2` https://gradle.org/releases/
 - optional: `./gradlew clean adviceRelease`
 - fix/add unit tests
 - check translations
 - edit build.gradle to increase `versionCode` and `versionName`
 - add changelog to CHANGELOG.md
 - add supporter to CHANGELOG.md
 - copy entry from CHANGELOG.md to fastlane/metadata/android/en-US/changelogs/VERSION_CODE.txt
 - commit changes with references to the issues/pull requests
   - `Tobiwan/ffupdater#XXX` for issues/pull requests from notabug.org
   - `Tobi823/ffupdater#XXX` for issues/pull requests from Github
   - `Tobiwan/ffupdater_gitlab#XXX` for issues/merge requests from Gitlab
 - create tag for release
   ````bash
   TAG="XXXXXX"
   git tag "$TAG"
   git pushall
   git push origin "$TAG"
   git push github "$TAG"
   git push gitlab "$TAG"
   git push gitea "$TAG"

   ````
 - push tag to notabug.org, Github and Gitlab
   ````bash
   git config --global alias.pushall '!git remote | xargs -L1 git push --all'
   git pushall
   ````
 - build signed APK file
 - upload signed APK file to GitHub and GitLab
 - start repomaker with Docker
 - upload signed APK to repomaker
 - test release with "Foxy Droid"

# delete all remote branches except master
````
REMOTE_NAME="XXXXX"
git branch -r | grep "$REMOTE_NAME/" | grep -v 'master$' | grep -v HEAD| cut -d/ -f2 | while read line; do git push "$REMOTE_NAME" :$line; done;
````

You can either wait for the official F-Droid release, install the APK file from GitHub/GitLab or try my personal F-Droid repository (see https://github.com/Tobi823/ffupdater#f-droid-repository).


code:
# Android Studio Plugins
 - AndroidXmlSorter for sorting strings*.xml

# Commands
get certificate hash

`keytool -list -printcert -jarfile *.apk`

# F-Droid build updates
https://monitor.f-droid.org/builds


code:
- On LineageOS 18.1, the DownloadManager could forget to add the file suffix (".apk") to the downloaded file (
  notabug.org#79)
- On some Amazon devices, an APK file must be downloaded to the "ExternalFilesDir" or FFUpdater is not able to
  access the
  file `Permission Denial: reading com.android.providers.downloads.DownloadProvider uri ... requires android.permission.ACCESS_ALL_DOWNLOADS, or grantUriPermission()` (
  GitHub#86)
- `packageManager.getPackageArchiveInfo(path, GET_SIGNING_CERTIFICATES)` does not work on Android 9/10, but on
  Android 11/12


code:
#!/bin/sh

set -eu

type xsltproc > /dev/null
type xmllint > /dev/null

sort_xml_file() {
  xsltproc --output "$1" android_strings_format.xslt "$1"
  export XMLLINT_INDENT="    "
  xmllint --format --encode "utf-8" --output "$1" "$1"
}

sort_xml_file "../ffupdater/src/main/res/values/strings.xml"
sort_xml_file "../ffupdater/src/main/res/values-bg/strings.xml"
sort_xml_file "../ffupdater/src/main/res/values-de/strings.xml"
sort_xml_file "../ffupdater/src/main/res/values-fr/strings.xml"
sort_xml_file "../ffupdater/src/main/res/values-ja/strings.xml"
sort_xml_file "../ffupdater/src/main/res/values-pl/strings.xml"
sort_xml_file "../ffupdater/src/main/res/values-pt-rBR/strings.xml"
sort_xml_file "../ffupdater/src/main/res/values-ru/strings.xml"
sort_xml_file "../ffupdater/src/main/res/values-uk/strings.xml"


code:
# list of scheduled WorkManager works
`` adb shell dumpsys jobscheduler`` for API 23+
https://stackoverflow.com/questions/55879642/adb-command-to-list-all-scheduled-work-using-workmanager

"force stop" the app will cancel the scheduled update check.
But it will reinitialise after WorkManager is reinitialise (when calling WorkManager.getInstance(context))
Some OS will heavily force-stop apps.

A period work returned "failed" (instead of "success") will not be executed again.


code:
 * Select download uri based on arch and api.
 * Check filename via FTP.
 * Download update file via HTTPS and DownloadManager.
 * Log errors and status.
 * Toast on updates.
 * Prompt for update (if necessary).
 * Option to use fixed/tested download location.
 * Add proper LICENSE (GPLv3+).


code:
 * Update to 43.0
 * Mozilla does not populate /latest/ anymore, see
   https://bugzilla.mozilla.org/show_bug.cgi?id=1233399


code:
 * Mozilla removed /latest/* downloads from archive. As recommended in
   https://archive.mozilla.org/pub/mobile/releases/latest/README.txt
   we use https://download.mozilla.org/?product=fennec-latest now.


code:
 * Update to reflect new Firefox version, but no change in
   architecture. Mozilla "-latest" URL still works...


code: * Use lower target to quickfix Android6 permissions


code:
 * Really, really quickfix Android6 issues..
 * Remove version check since it's broken: Just download the APK.


code: * Remove everything but URL generator and download button.


code: * No changes, just bump to remind people


code:
 * Update to 51.0
 * Remove a lot of unused code.
 * Re-implement actual checking.


code:
 * Update to 53.0
 * Use new Mozilla API to det version information
 * Remove a lot of unused code.
 * Add icon
 * Fix crash with SDK < 17
 * Enable smaller builds


code:
 * Add license report
 * Update icon
 * Add some translations


code: * Add some translations


code:
 * Added support for beta and nightly channels
 * Switched to light theme
 * Update russian translation
 * Handover maintainership to https://notabug.org/Tobiwan/ffupdater


code:
 * Notification (for a Firefox update) now works on Android 9
 * Replace BackgroundService with WorkManager (AndroidX) for requesting Mozilla's API
 * Clean up code (thanks DeenHyper74)
 * Fix some minor bugs (thanks DeenHyper74)
 * App requires API level 18 because Firefox requires API level 18
 * Update translation


code: * Add grammar fixes (thanks DeenHyper74)


code:
 * Improve french translation (thanks xinxinxinxinxin)
 * Fix "update notification will be shown every 5 minutes" (bug discovered by aplufr)


code:
 * Fix broken nightly download (thanks dannycolin for the info)
 * Display warning when switching from 'Release' channel to the 'Nightly' or 'Beta' channel (thanks DeenHyper74)
 * Interval between update checks is now configurable (thanks aplufr, wah6Me1l and DeenHyper74)


code: * Update Russian translation (thanks DeenHyper74)


code: * Fix crash when rotating on channel dialog (thanks DeenHyper74)


code:
 * Remove FTP lookup since Mozilla is shutting down the servers.
 * Handle both request type by a single button.
 * "I am feeling lucky" now gets the next release, not the latest.
 * Add preferences to restrict connections: WiFi-only, metered, roaming.
 * Use actionbar.


code: * Fix crash when selecting an entry after rotating the channel dialog (thanks DeenHyper74)


code: * Fix warning dialogue disappears after screen rotation (thanks DeenHyper74)


code:
 * Really big update
 * Add support for Firefox Klar, Firefox Focus, Firefox Lite and Fenix
 * Download and install the app inside FFUpdater (thanks wolfgang42 for the groundwork)
 * Improve UI
 * Verify the certificate of the downloaded and installed app
 * Many improvements
 * Thanks DeenHyper74 and xin for translations
 * Remove Fennec Beta and Fennec Nightly because their are not developed anymore https://bugzilla.mozilla.org/show_bug.cgi?id=1627518


code:
 * Thanks DeenHyper74 for the Russian translation
 * Add support for Dark Theme (thanks DeenHyper74 for the tip)
 * Add setting for switching between Dark and Light Theme


code:
 * Fix Fenix download from Github (thanks yhoyhoj)
 * Show correct download progress when downloading an app


code:
 * Try to fix error "Failed to check certificate hash" by switching from apksig-library to PackageManager#getPackageArchiveInfo (thanks rvandegrift). This will reduce the size of FFUpdater and improve the maintenance for future releases.
 * Color of collapsed title will be always white (thanks DeenHyper74)


code:
 * Add simple crash reporter (by opening the mail app with the error message)
 * Fix crash by asking for WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE permissions
 * Show progress bar when verifying the downloaded APK
 * Download APK to the public download directory of the app (for example: /storage/sdcard0/Android/data/de.marmaro.krt.ffupdater/files/Download)
 * Remove old debug messages
 * Thanks yhoyhoj, UltraBlackLinux, rvandegrift, vikajon, wchen342, Ulfschaper, prox and danceswithcats for your error reporting


code:
 * Improve description of setting "disableApps"
 * After accepting or denying the external storage permission request, the app will continue to download/install the app
 * The app explains after the first denial why the external storage permission is necessary
 * Show progress bar when verify certificate fingerprint of an installed app
 * Implement a cache for fetched metadata like latest version name and latest download url


code:
 * Add Fenix Beta, Fenix Nightly and Lockwise
 * Download Fenix Release/Beta/Nightly, Focus and Klar from Mozilla's Taskcluster (continuous integration server)
 * Fix "Light theme is always shown at first run"
 * Thanks Rail Aliiev and Johan Lorenzo from Mozilla for their support <https://bugzilla.mozilla.org/show_bug.cgi?id=1627518>
 * Thanks KarlHeinz and DeenHyper74 for their error reporting and support


code:
 * Fix broken Fenix download - if the download is still broken for you, wait 10 minutes or delete the storage of the app
 * Check for enough free space and display warning if < 100MB


code:
 * Remove Fennec Release because it's no longer supported by Mozilla
 * Rename Fenix Release, Fenix Beta and Fenix Nightly to Firefox Release, Firefox Beta, Firefox Nightly
 * Fix download URLs for Firefox Release, Firefox Beta, Firefox Nightly
 * Use the more reliable PackageInstaller-method for installing the apps (instead of the old ACTION_INSTALL_PACKAGE-method)
 * Increase minimum SDK for FFUpdater to Lollipop/21 (because PackageInstaller needs 21 and all Firefox browsers need at least 21)
 * Fix bug "empty installed text field"
 * Thanks trymeout, guysoft, rantpalas and RomainL972 for reporting bugs


code: * Thanks DeenHyper74 for updating the russian translation


code:
 * Mark background setting as non-functional for now.
 * Update to 40.0.3


code: * Thanks aevw for adding brazilian portuguese translation


code: * Fix broken Firefox Nightly installation/update - thanks 132ikl for reporting this bug


code:
 * Fix old download urls for Firefox Release and Firefox Beta - thanks DctrBnsttr for reporting this bug
 * Add tests to ensure that FFUpdater is always using the latest download urls


code:
 * Disable error when the already installed app has a different signature (because Android won't install an update with a different signature) - thanks pheki for reporting this bug
 * Add translations for this bug
 * Make the installation activity a little big more resilient


code:
 * Add Bulgarian translation (thanks StoyanDimitrov)
 * Fix short description in F-Droid (thanks linsui)
 * Fix typo (thanks GPery and DeenHyper74)
 * A different notification for each installed app will be displayed
 * Clicking on notification will update the app
 * Better detect ABI of device - Firefox Focus can be installed on Android emulators
 * Use Crasher (https://github.com/fennifith/Crasher) for crash reports
 * Delete old downloaded APK files more reliable
 * Drop permission READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE because they should not be necessary
 * Check and fail if external storage is not available
 * Query GitHub API with less network traffic
 * Cleanup code


code:
 * Check if system download app is installed (thanks Quantumrider)
 * Fix crash during downloading (thanks hsol)


code:
 * Add Iceraven browser
 * Display the real available versions for Release, Beta, Nightly, Focus and Klar
 * Reduce likeliness of background errors
 * Fix installation problems on older devices
 * Migrate from Java to Kotlin for better concurrency
 * Thanks StoyanDimitrov for updating the Bulgarian translation
 * Bug fixes and many more
 * Thanks mega-stoffel, Iey4iej3, Redpillbug, NANASHI0X74, StoyanDimitrov, lucker999, codingepaduli, borisovg, H-Sachse, mpeter, DeenHyper74, duck-rh, mikeklem and darkludao for bug reports
 * Thanks CharmCityCrab, TheOneWithTheBraid, codingepaduli and User1l0 for feature requests


code: * Improve error message when the background update check failed (thanks duck-rh)


code:
 * Fix double download (thanks Redpillbug)
 * Fix crash when rotating in the settings view (thanks DeenHyper74)


code:
 * Fix crash when installing app on Android 8 (thanks bershanskiy)
 * Show the correct notification if the background check failed due to a network exception (thanks Average_User and Diridibindy)
 * If it's likely that the user has enabled 'MIUI Optimization', instruct him to disable it (thanks Rafa ML)


code:
 * !!! Remove support for Firefox Light because updates are no longer signed and therefore pose a security risk (thanks opened and mega-stoffel)
 * User can disable the background update check on metered networks (thanks williamtheaker)
 * By clicking on the "i"-Icon, you can see the time of the last successful background update check.
 * Fix Brazilian Portuguese translation (thanks mezysinc)
 * Fix Bulgarian translation (thanks StoyanDimitrov)
 * Fix spelling (thanks ku)
 * Fix crash when rotating device (thanks floringolintchi)
 * Distinguish the morning and evening version of Firefox Nightly (thanks DctrBnsttr)


code:
 * Add support for Bromite https://github.com/bromite/bromite (Tobiwan/ffupdater#59 Tobi823/ffupdater#22)
 * Add support for Kiwi Browser https://github.com/kiwibrowser/src (Tobi823/ffupdater#22)
 * Automatically download app updates in the background if the current network is unmetered and the device has enough storage (Tobi823/ffupdater#34)
 * Cache already downloaded updates (Tobi823/ffupdater#33)
 * Keep the last version of an app in the folder "/sdcard/Android/data/de.marmaro.krt.ffupdater/cache/Download" for manual downgrading. These cached versions can be deleted by using the "CLEAR CACHE" button in the settings (Tobiwan/ffupdater#62)
 * Decrease the number of false positives "background network exception" error notifications (thanks bershanskiy Tobi823/ffupdater#31)
 * Improve Brazilian Portuguese translation (thanks mezysinc; Tobiwan/ffupdater#58)
 * Improve Russian translation (thanks DeenHyper74; Tobiwan/ffupdater#56)
 * Make download status translatable (Tobiwan/ffupdater#57)
 * Ask for confirmation when the user wants to update an app but the latest app version is already installed (Tobiwan/ffupdater#60)
 * Generate UI partially programmatically (and don't use a static UI)


code: PLEASE UNINSTALL THE KIWI BROWSER! It is at least not privacy friendly and in the worst case a spyware. https://github.com/Tobi823/ffupdater/issues/35


code:
 * There has been a discussion on Github if the Kiwi browser is spyware: https://github.com/Tobi823/ffupdater/issues/35 (Tobi823/ffupdater#35)
   I think that Kiwi is not spyware but stays removed because FFUpdater is about privacy and Kiwi has no additional privacy features.
   F-Droid users can use other stores (like Aurora Store) to install the Kiwi browser.
 * Bug fix: automatically download app updates after disabling airplane mode
 * Bug fix: catch the JobCancellationException correctly (occurs when changing the network during background update check)


code:
 * Trust user certificates when checking for updates and downloading updates (for AdGuard, Tobi823/ffupdater#37)
 * Prevent automatic backup of failed downloads by Google's "Auto Backup for Apps"


code: * Fix wrong warning for Bromite (thanks mpeter, Tobiwan/ffupdater#64)


code: * If it is likely that it is just a network error during manual update search, then display "No network connection" instead of crashing (Tobi823/ffupdater#38)


code: * fix crash caused by the new Firefox Nightly version name schema (Tobiwan/ffupdater#40 Tobiwan/ffupdater#66)


code: * Instruct user if app installation is aborted by "MIUI Optimization" (Tobi823/ffupdater#41)


code: * Remove Brave Browser because the APK files are no longer published on GitHub. (https://github.com/brave/brave-browser/issues/15878)


code: * Add Brave Browser because the APK files are published on GitHub again. (https://github.com/brave/brave-browser/issues/15878)


code: * Fix Firefox Beta by adapting to the new structure of the chain_of_trust.log (Tobi823/ffupdater#44)


code: * Add Japanese language (thanks gnuhead-chieb Tobi823/ffupdater#47)


code:
 * Add Polish language (thanks Eryk Michalak, Tobiwan/ffupdater_gitlab#11)
 * Fix crash when checking for "Firefox Release" updates (Tobi823/ffupdater#52)


code: * Fix crash when checking for "Firefox Release" or "Firefox Beta" (Tobi823/ffupdater#57)


code: * Fix crash when checking for "Firefox Beta" (Tobi823/ffupdater#60)


code:
 * Fix crash when checking for "Firefox Focus" or "Firefox Klar"
 * Update Firefox Focus/Klar icon


code: * Make update check more robust for "Firefox Release", "Firefox Beta", "Firefox Focus" and "Firefox Klar"


code:
 * Fix update check for "Firefox Focus" and "Firefox Klar" (By removing everything after the dash +
   the dash itself from the version name of the installed app. "8.18.0-rc.1" will be converted to
   "8.18.0"; Tobi823/ffupdater#69)


code:
 * Update Brazilian Portuguese translation (thanks mezysinc; Tobiwan/ffupdater#78)
 * Abort background update check if airplane mode is enabled (Tobi823/ffupdater#74)
 * Prevent simultaneous download by the background job and the user (Tobiwan/ffupdater#80)
 * Reduce app permission (remove WRITE_EXTERNAL_STORAGE permission)


code: * Update to 42.0.1


code:
 * Fix crash when canceling a download (Tobi823/ffupdater#77)
 * Ignore error and retry background update (with exponential increasing waiting time) for CancellationException, GithubRateLimitExceededException and UnknownHostException (Tobi823/ffupdater#74)
 * Improve error handling
 * Fix download error for Focus/Klar by switching to the GitHub API (Tobiwan/ffupdater#81)


code:
 * Improve handling of concurrent code
 * Fix crash when starting app (NetworkOnMainThreadException) ()
 * Fix missing icon (in repomaker and maybe F-Droid)
 * Improve translation files
 * Cleanup and refactor code


code:
 * Improve handling of Kotlin coroutine errors (Tobiwan/ffupdater#85 Tobi823/ffupdater#86)
 * Improve and speed up internet check
 * Handle disabled "Download Manager" better
 * Improve translation
 * Update dependencies


code:
 * Small mistake, I forget to add important changes to 74.4.4
 * Improve handling of Kotlin coroutine errors (Tobiwan/ffupdater#85 Tobi823/ffupdater#86)
 * Improve and speed up internet check
 * Handle disabled "Download Manager" better
 * Improve translation
 * Update dependencies


code:
 * Download only "Firefox Focus/Klar" and not "Firefox Focus/Klar Beta" (Tobi823/ffupdater#89)
 * Try out the Android 12 "silent update" feature when user manual updates an app (Tobi823/ffupdater#88)


code:
 * Fix "Permission Denial" bug on Android devices (Tobiwan/ffupdater#86)
 * Speed-up app installation/update by not requiring to press a button
 * Improve crash report styling and add important device information to the crash report
 * Improve internal condition checks and add improved error messages
 * Remove unused dependencies androidx.fragment:fragment-ktx and org.jetbrains.kotlin:kotlin-stdlib-jdk7


code:
 * Improve internet check. (Tobi823/ffupdater#87)
   * Use the old network check API for Android 10 and below.
   * Handle network errors better in the app.
 * Reduce storage usage for devices with low internal memory. (Tobiwan/ffupdater#88)
   * If an app update fails, keep the cached app update (APK file).
   * If an app update is successful or a critical error (wrong certificate fingerprint) occurs, delete the cached app update (APK file).
   * Download and keep the APK file in the Android/data/de.marmaro.krt.ffupdater/files/Download folder and use this folder as a cache folder.
   * Do not copy the downloaded APK file to a official cache folder which is invisible to the user.
   * User can delete the downloaded app updates (APK files) in the Android app settings > Storage > Manage Space.
   * If an app update fails, show buttons for:
     * deleting the app update in the cache folder.
     * opening the cache folder with a file manager app.
   * When migrating to this version, the app will delete old cache files.
 * Update dependencies:
   * androidx.core:core-ktx to 1.7.0
   * androidx.lifecycle:lifecycle-runtime-ktx to 2.4.0


code:
* Add Vivaldi (Tobiwan/ffupdater#89)
* Add Styx (Tobi823/ffupdater#48)
* Add Ungoogled Chromium (Tobi823/ffupdater#50)
* Update description of Firefox Klar (thanks cosify - Tobi823/ffupdater#91)
* Crash report can partially selected and copied
* Cleanup build scripts


code:
* Update warning for Vivaldi (thanks gnuhead-chieb - Tobi823/ffupdater#92)
* Make links in dialogs clickable


code: * Update to 42.0.2


code: * Fix Brave update check


code:
* Remove Styx because it is not longer maintained (Tobi823/ffupdater#101).
* Improve version comparison with G00fY2/version-compare (Tobi823/ffupdater#98).
* Fix opt-out of apps from background update check ("Excluded applications") for Firefox Release, Firefox Beta and Firefox Nightly (Tobi823/ffupdater#97).
* Don't crash during app installation/update when no or only very little storage is available (Tobi823/ffupdater#96).
* When app update is unsuccessful, show more detailed error message.
* Update dependencies


code:
Download, install and update these privacy friendly browsers:
- Bromite
- Firefox Browser
- Firefox Focus
- Firefox Klar
- Firefox Nightly
- Firefox for Android Beta
- Iceraven
- Ungoogled Chromium
- Vivaldi

and:
- Firefox Lockwise

FFUpdater will check periodically for updates and will display a notification when an update is available. This feature itself can be disabled and the check frequency can be changed.

FFUpdater will also automatically download the app updates in the background if the current network is unmetered and the device has enough storage.

Please reopen FFUpdater after moving it to the internal/external storage.

Visit https://notabug.org/Tobiwan/ffupdater/src/master/README.md or use the "Source Code" link below to see more information about security measurements, other distribution channels, limitations, bugs, FAQ, build instructions, used 3rd-party libraries, technical details etc.


code: Updater for privacy friendly browsers


code:
これらのプライバシーを重視したブラウザやアプリをインストールやアップデートできます:
 - Bromite
 - Firefox Browser
 - Firefox Focus
 - Firefox for Android Beta
 - Firefox Klar
 - Firefox Nightly
 - Iceraven

 - Firefox Lockwise

FFUpdaterは定期的にアップデートをチェックし、アップデートがある場合は通知を表示します。この機能自体を無効にしたり、チェックの頻度を変更することも可能です。

また、FFUpdaterは、現在のネットワークが定額制通信を利用しており、デバイスに十分なストレージがある場合、バックグラウンドで自動的にアプリのアップデートをダウンロードします。

セキュリティ対策、制限事項、バグ、FAQ、ビルド方法、使用しているサードパーティライブラリ、技術的な詳細などの情報は、https://notabug.org/Tobiwan/ffupdater/src/master/README.md をご覧いただくか、以下の「ソースコード」リンクをクリックしてください。


code: プライバシーを重視したブラウザ用のアップデータ


code:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

repositories {
    mavenCentral()
    google()
    maven {
        url 'https://jitpack.io'
        content {
            includeModule('com.github.IvanShafran', 'shared-preferences-mock')
        }
    }
}

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'

    implementation 'androidx.appcompat:appcompat:1.4.0'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
    implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.preference:preference-ktx:1.1.1'
    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
    implementation 'androidx.work:work-runtime-ktx:2.7.1'
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2'

    implementation 'com.google.android.material:material:1.4.0'
    implementation 'com.google.code.gson:gson:2.8.8'
    implementation 'io.github.g00fy2:versioncompare:1.4.1'

    testImplementation 'junit:junit:4.13.2'
    testImplementation 'io.mockk:mockk:1.10.5'
    testImplementation 'org.hamcrest:hamcrest:2.2'
    testImplementation 'org.exparity:hamcrest-date:2.0.7'
    testImplementation 'com.github.IvanShafran:shared-preferences-mock:1.1'
}

android {
    compileSdkVersion 31

    defaultConfig {
        //Given a version number MAJOR.MINOR.PATCH, increment the:
        //
        //MAJOR version when you make incompatible API changes,
        //MINOR version when you add functionality in a backwards compatible manner, and
        //PATCH version when you make backwards compatible bug fixes.
        //
        //Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
        versionCode 91
        versionName "75.0.0"
        minSdkVersion 21
        targetSdkVersion 31
        vectorDrawables.useSupportLibrary = true
    }

    compileOptions {
        encoding = "UTF-8"
        coreLibraryDesugaringEnabled true
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }

    packagingOptions {
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/README'
        exclude 'META-INF/README.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
    }

    testOptions {
        // workaround for the error "Method i in android.util.Log not mocked" (http://tools.android.com/tech-docs/unit-testing-support#TOC-Method-...-not-mocked.-)
        // without PowerMockito it is impossible to mock Log.
        unitTests.returnDefaultValues = true
        unitTests.includeAndroidResources = true
        unitTests.all {
            // All the usual Gradle options.
            testLogging {
                events "passed", "skipped", "failed", "standardOut", "standardError"
                outputs.upToDateWhen {false}
                showStandardStreams = true
            }
        }
    }

    lintOptions {
        abortOnError false
    }
}