2015-03-04 19:39:02 -08:00
package DDG::Goodie::OnionAddress ;
# ABSTRACT: Provide quick access to HTTP onion services.
use strict ;
use DDG::Goodie ;
zci is_cached = > 1 ;
zci answer_type = > "onion_address" ;
primary_example_queries 'https://3g2upl4pq6kufc4m.onion' ;
secondary_example_queries 'How do I access https://3g2upl4pq6kufc4m.onion:81/?q=dont+track+us?' ;
description 'Provide quick access to HTTP onion services' ;
name 'OnionAddress' ;
code_url 'https://github.com/duckduckgo/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/OnionAddress.pm' ;
category 'reference' ;
topics 'special_interest' , 'cryptography' ;
attribution email = > 'ilv@torproject.org' ;
# regex to detect an onion address
# this cover several cases, including addresses with ports and/or paths
# e.g. https://3g2upl4pq6kufc4m.onion:5000/?q=dont+track+us
2015-03-04 19:43:31 -08:00
my $ onion_address_qr = qr/\bhttps?:\/ \ /([a-z0-9]{16})\.onion[:\d+]?[\/.*]?\b/ ;
2015-03-04 19:39:02 -08:00
# add an optional question mark in case it's at the end of a question sentence
# e.g. How do I access https://0123456789abcdef.onion?
2015-03-04 19:43:31 -08:00
triggers query_lc = > qr/$onion_address_qr[\?]?/ ;
2015-03-04 19:39:02 -08:00
handle query_lc = > sub {
2015-03-04 21:28:21 -08:00
return unless $ 1 ;
return $ 1 , html = > "<div class='zci__caption'>Access $1.onion using the <a href='https://www.torproject.org/projects/torbrowser.html.en'>Tor Browser</a> or via <a href='https://$1.tor2web.org'>Tor2web</a>.</div>" ;
2015-03-04 19:39:02 -08:00
} ;
1 ;