forked from Archives/searxng
Merge branch 'master' into uwsgi_static
commit
0f4dbc4eca
@ -0,0 +1,63 @@
|
|||||||
|
==================================
|
||||||
|
Limit access to your searx engines
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Administrators might find themselves wanting to limit access to some of the
|
||||||
|
enabled engines on their instances. It might be because they do not want to
|
||||||
|
expose some private information through an offline engine. Or they
|
||||||
|
would rather share engines only with their trusted friends or colleagues.
|
||||||
|
|
||||||
|
Private engines
|
||||||
|
===============
|
||||||
|
|
||||||
|
To solve this issue private engines were introduced in :pull:`1823`.
|
||||||
|
A new option was added to engines named `tokens`. It expects a list
|
||||||
|
of strings. If the user making a request presents one of the tokens
|
||||||
|
of an engine, he/she is able to access information about the engine
|
||||||
|
and make search requests.
|
||||||
|
|
||||||
|
Example configuration to restrict access to the Arch Linux Wiki engine:
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
- name : arch linux wiki
|
||||||
|
engine : archlinux
|
||||||
|
shortcut : al
|
||||||
|
tokens : [ 'my-secret-token' ]
|
||||||
|
|
||||||
|
|
||||||
|
Unless a user has configured the right token, the engine is going
|
||||||
|
to be hidden from him/her. It is not going to be included in the
|
||||||
|
list of engines on the Preferences page and in the output of
|
||||||
|
`/config` REST API call.
|
||||||
|
|
||||||
|
Tokens can be added to one's configuration on the Preferences page
|
||||||
|
under "Engine tokens". The input expects a comma separated list of
|
||||||
|
strings.
|
||||||
|
|
||||||
|
The distribution of the tokens from the administrator to the users
|
||||||
|
is not carved in stone. As providing access to such engines
|
||||||
|
implies that the admin knows and trusts the user, we do not see
|
||||||
|
necessary to come up with a strict process. Instead,
|
||||||
|
we would like to add guidelines to the documentation of the feature.
|
||||||
|
|
||||||
|
Next steps
|
||||||
|
==========
|
||||||
|
|
||||||
|
Now that searx has support for both offline engines and private engines,
|
||||||
|
it is possible to add concrete engines which benefit from these features.
|
||||||
|
For example engines which search on the local host running the instance.
|
||||||
|
Be it searching your file system or querying a private database. Be creative
|
||||||
|
and come up with new solutions which fit your use case.
|
||||||
|
|
||||||
|
Acknowledgement
|
||||||
|
===============
|
||||||
|
|
||||||
|
This development was sponsored by `Search and Discovery Fund`_ of `NLnet Foundation`_ .
|
||||||
|
|
||||||
|
.. _Search and Discovery Fund: https://nlnet.nl/discovery
|
||||||
|
.. _NLnet Foundation: https://nlnet.nl/
|
||||||
|
|
||||||
|
|
||||||
|
| Happy hacking.
|
||||||
|
| kvch // 2020.02.28 22:26
|
@ -1,12 +1,12 @@
|
|||||||
certifi==2019.3.9
|
certifi==2020.4.5.1
|
||||||
babel==2.7.0
|
babel==2.7.0
|
||||||
flask-babel==1.0.0
|
flask-babel==1.0.0
|
||||||
flask==1.0.2
|
flask==1.1.2
|
||||||
idna==2.8
|
idna==2.9
|
||||||
jinja2==2.10.1
|
jinja2==2.11.1
|
||||||
lxml==4.3.3
|
lxml==4.5.0
|
||||||
pygments==2.1.3
|
pygments==2.1.3
|
||||||
pyopenssl==19.0.0
|
pyopenssl==19.1.0
|
||||||
python-dateutil==2.8.0
|
python-dateutil==2.8.0
|
||||||
pyyaml==5.1
|
pyyaml==5.3.1
|
||||||
requests[socks]==2.22.0
|
requests[socks]==2.23.0
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
GIT_URL = 'https://github.com/asciimoo/searx'
|
||||||
|
ISSUE_URL = 'https://github.com/asciimoo/searx/issues'
|
||||||
|
SEARX_URL = 'https://searx.me'
|
||||||
|
DOCS_URL = 'https://asciimoo.github.io/searx'
|
||||||
|
PUBLIC_INSTANCES = 'https://searx.space'
|
File diff suppressed because it is too large
Load Diff
@ -1,15 +1,12 @@
|
|||||||
{
|
{
|
||||||
"versions": [
|
"versions": [
|
||||||
"70.0.1",
|
"75.0",
|
||||||
"70.0",
|
"74.0.1",
|
||||||
"69.0.3",
|
"74.0"
|
||||||
"69.0.2",
|
|
||||||
"69.0.1",
|
|
||||||
"69.0"
|
|
||||||
],
|
],
|
||||||
"os": [
|
"os": [
|
||||||
"Windows NT 10; WOW64",
|
"Windows NT 10.0; WOW64",
|
||||||
"X11; Linux x86_64"
|
"X11; Linux x86_64"
|
||||||
],
|
],
|
||||||
"ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}"
|
"ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}"
|
||||||
}
|
}
|
||||||
|
@ -1,96 +0,0 @@
|
|||||||
"""
|
|
||||||
Faroo (Web, News)
|
|
||||||
|
|
||||||
@website http://www.faroo.com
|
|
||||||
@provide-api yes (http://www.faroo.com/hp/api/api.html), require API-key
|
|
||||||
|
|
||||||
@using-api no
|
|
||||||
@results JSON
|
|
||||||
@stable yes
|
|
||||||
@parse url, title, content, publishedDate, img_src
|
|
||||||
"""
|
|
||||||
|
|
||||||
from json import loads
|
|
||||||
import datetime
|
|
||||||
from searx.utils import searx_useragent
|
|
||||||
from searx.url_utils import urlencode
|
|
||||||
|
|
||||||
# engine dependent config
|
|
||||||
categories = ['general', 'news']
|
|
||||||
paging = True
|
|
||||||
language_support = True
|
|
||||||
number_of_results = 10
|
|
||||||
|
|
||||||
# search-url
|
|
||||||
url = 'http://www.faroo.com/'
|
|
||||||
search_url = url + 'instant.json?{query}'\
|
|
||||||
'&start={offset}'\
|
|
||||||
'&length={number_of_results}'\
|
|
||||||
'&l={language}'\
|
|
||||||
'&src={categorie}'\
|
|
||||||
'&i=false'\
|
|
||||||
'&c=false'
|
|
||||||
|
|
||||||
search_category = {'general': 'web',
|
|
||||||
'news': 'news'}
|
|
||||||
|
|
||||||
|
|
||||||
# do search-request
|
|
||||||
def request(query, params):
|
|
||||||
offset = (params['pageno'] - 1) * number_of_results + 1
|
|
||||||
categorie = search_category.get(params['category'], 'web')
|
|
||||||
|
|
||||||
if params['language'] == 'all':
|
|
||||||
language = 'en'
|
|
||||||
else:
|
|
||||||
language = params['language'].split('-')[0]
|
|
||||||
|
|
||||||
# if language is not supported, put it in english
|
|
||||||
if language != 'en' and\
|
|
||||||
language != 'de' and\
|
|
||||||
language != 'zh':
|
|
||||||
language = 'en'
|
|
||||||
|
|
||||||
params['url'] = search_url.format(offset=offset,
|
|
||||||
number_of_results=number_of_results,
|
|
||||||
query=urlencode({'q': query}),
|
|
||||||
language=language,
|
|
||||||
categorie=categorie)
|
|
||||||
|
|
||||||
params['headers']['Referer'] = url
|
|
||||||
|
|
||||||
return params
|
|
||||||
|
|
||||||
|
|
||||||
# get response from search-request
|
|
||||||
def response(resp):
|
|
||||||
# HTTP-Code 429: rate limit exceeded
|
|
||||||
if resp.status_code == 429:
|
|
||||||
raise Exception("rate limit has been exceeded!")
|
|
||||||
|
|
||||||
results = []
|
|
||||||
|
|
||||||
search_res = loads(resp.text)
|
|
||||||
|
|
||||||
# return empty array if there are no results
|
|
||||||
if not search_res.get('results', {}):
|
|
||||||
return []
|
|
||||||
|
|
||||||
# parse results
|
|
||||||
for result in search_res['results']:
|
|
||||||
publishedDate = None
|
|
||||||
result_json = {'url': result['url'], 'title': result['title'],
|
|
||||||
'content': result['kwic']}
|
|
||||||
if result['news']:
|
|
||||||
result_json['publishedDate'] = \
|
|
||||||
datetime.datetime.fromtimestamp(result['date'] / 1000.0)
|
|
||||||
|
|
||||||
# append image result if image url is set
|
|
||||||
if result['iurl']:
|
|
||||||
result_json['template'] = 'videos.html'
|
|
||||||
result_json['thumbnail'] = result['iurl']
|
|
||||||
|
|
||||||
results.append(result_json)
|
|
||||||
|
|
||||||
# return results
|
|
||||||
return results
|
|
@ -1,24 +1,40 @@
|
|||||||
|
function hasScrollbar() {
|
||||||
|
var root = document.compatMode=='BackCompat'? document.body : document.documentElement;
|
||||||
|
return root.scrollHeight>root.clientHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadNextPage() {
|
||||||
|
var formData = $('#pagination form:last').serialize();
|
||||||
|
if (formData) {
|
||||||
|
$('#pagination').html('<div class="loading-spinner"></div>');
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: './',
|
||||||
|
data: formData,
|
||||||
|
dataType: 'html',
|
||||||
|
success: function(data) {
|
||||||
|
var body = $(data);
|
||||||
|
$('#pagination').remove();
|
||||||
|
$('#main_results').append('<hr/>');
|
||||||
|
$('#main_results').append(body.find('.result'));
|
||||||
|
$('#main_results').append(body.find('#pagination'));
|
||||||
|
if(!hasScrollbar()) {
|
||||||
|
loadNextPage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
var win = $(window);
|
var win = $(window);
|
||||||
|
if(!hasScrollbar()) {
|
||||||
|
loadNextPage();
|
||||||
|
}
|
||||||
win.scroll(function() {
|
win.scroll(function() {
|
||||||
|
$("#pagination button").css("visibility", "hidden");
|
||||||
if ($(document).height() - win.height() - win.scrollTop() < 150) {
|
if ($(document).height() - win.height() - win.scrollTop() < 150) {
|
||||||
var formData = $('#pagination form:last').serialize();
|
loadNextPage();
|
||||||
if (formData) {
|
|
||||||
$('#pagination').html('<div class="loading-spinner"></div>');
|
|
||||||
$.ajax({
|
|
||||||
type: "POST",
|
|
||||||
url: './',
|
|
||||||
data: formData,
|
|
||||||
dataType: 'html',
|
|
||||||
success: function(data) {
|
|
||||||
var body = $(data);
|
|
||||||
$('#pagination').remove();
|
|
||||||
$('#main_results').append('<hr/>');
|
|
||||||
$('#main_results').append(body.find('.result'));
|
|
||||||
$('#main_results').append(body.find('#pagination'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1 +1 @@
|
|||||||
node_modules/
|
/node_modules
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
/*! oscar/searx.min.js | 06-08-2019 | https://github.com/asciimoo/searx */
|
/*! oscar/searx.min.js | 23-03-2020 | https://github.com/asciimoo/searx */
|
||||||
requirejs.config({baseUrl:"./static/themes/oscar/js",paths:{app:"../app"}}),window.searx=function(a){"use strict";var b=a.currentScript||function(){var b=a.getElementsByTagName("script");return b[b.length-1]}();return{autocompleter:"true"===b.getAttribute("data-autocompleter"),method:b.getAttribute("data-method")}}(document),searx.autocompleter&&(searx.searchResults=new Bloodhound({datumTokenizer:Bloodhound.tokenizers.obj.whitespace("value"),queryTokenizer:Bloodhound.tokenizers.whitespace,remote:"./autocompleter?q=%QUERY"}),searx.searchResults.initialize()),$(document).ready(function(){searx.autocompleter&&$("#q").typeahead(null,{name:"search-results",displayKey:function(a){return a},source:searx.searchResults.ttAdapter()})}),$(document).ready(function(){$("#q.autofocus").focus(),$(".select-all-on-click").click(function(){$(this).select()}),$(".btn-collapse").click(function(){var a=$(this).data("btn-text-collapsed"),b=$(this).data("btn-text-not-collapsed");""!==a&&""!==b&&($(this).hasClass("collapsed")?new_html=$(this).html().replace(a,b):new_html=$(this).html().replace(b,a),$(this).html(new_html))}),$(".btn-toggle .btn").click(function(){var a="btn-"+$(this).data("btn-class"),b=$(this).data("btn-label-default"),c=$(this).data("btn-label-toggled");""!==c&&($(this).hasClass("btn-default")?new_html=$(this).html().replace(b,c):new_html=$(this).html().replace(c,b),$(this).html(new_html)),$(this).toggleClass(a),$(this).toggleClass("btn-default")}),$(".media-loader").click(function(){var a=$(this).data("target"),b=$(a+" > iframe"),c=b.attr("src");void 0!==c&&!1!==c||b.attr("src",b.data("src"))}),$(".btn-sm").dblclick(function(){var a="btn-"+$(this).data("btn-class");$(this).hasClass("btn-default")?($(".btn-sm > input").attr("checked","checked"),$(".btn-sm > input").prop("checked",!0),$(".btn-sm").addClass(a),$(".btn-sm").addClass("active"),$(".btn-sm").removeClass("btn-default")):($(".btn-sm > input").attr("checked",""),$(".btn-sm > input").removeAttr("checked"),$(".btn-sm > input").checked=!1,$(".btn-sm").removeClass(a),$(".btn-sm").removeClass("active"),$(".btn-sm").addClass("btn-default"))})}),$(document).ready(function(){$(".searx_overpass_request").on("click",function(a){var b="https://overpass-api.de/api/interpreter?data=",c=b+"[out:json][timeout:25];(",d=");out meta;",e=$(this).data("osm-id"),f=$(this).data("osm-type"),g=$(this).data("result-table"),h="#"+$(this).data("result-table-loadicon"),i=["addr:city","addr:country","addr:housenumber","addr:postcode","addr:street"];if(e&&f&&g){g="#"+g;var j=null;switch(f){case"node":j=c+"node("+e+");"+d;break;case"way":j=c+"way("+e+");"+d;break;case"relation":j=c+"relation("+e+");"+d}if(j){$.ajax(j).done(function(a){if(a&&a.elements&&a.elements[0]){var b=a.elements[0],c=$(g).html();for(var d in b.tags)if(null===b.tags.name||-1==i.indexOf(d)){switch(c+="<tr><td>"+d+"</td><td>",d){case"phone":case"fax":c+='<a href="tel:'+b.tags[d].replace(/ /g,"")+'">'+b.tags[d]+"</a>";break;case"email":c+='<a href="mailto:'+b.tags[d]+'">'+b.tags[d]+"</a>";break;case"website":case"url":c+='<a href="'+b.tags[d]+'">'+b.tags[d]+"</a>";break;case"wikidata":c+='<a href="https://www.wikidata.org/wiki/'+b.tags[d]+'">'+b.tags[d]+"</a>";break;case"wikipedia":if(-1!=b.tags[d].indexOf(":")){c+='<a href="https://'+b.tags[d].substring(0,b.tags[d].indexOf(":"))+".wikipedia.org/wiki/"+b.tags[d].substring(b.tags[d].indexOf(":")+1)+'">'+b.tags[d]+"</a>";break}default:c+=b.tags[d]}c+="</td></tr>"}$(g).html(c),$(g).removeClass("hidden"),$(h).addClass("hidden")}}).fail(function(){$(h).html($(h).html()+'<p class="text-muted">could not load data!</p>')})}}$(this).off(a)}),$(".searx_init_map").on("click",function(a){var b=$(this).data("leaflet-target"),c=$(this).data("map-lon"),d=$(this).data("map-lat"),e=$(this).data("map-zoom"),f=$(this).data("map-boundingbox"),g=$(this).data("map-geojson");require(["leaflet-0.7.3.min"],function(a){f&&(southWest=L.latLng(f[0],f[2]),northEast=L.latLng(f[1],f[3]),map_bounds=L.latLngBounds(southWest,northEast)),L.Icon.Default.imagePath="./static/themes/oscar/img/map";var h=L.map(b),i="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",j='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors',k=new L.TileLayer(i,{minZoom:1,maxZoom:19,attribution:j}),l="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",m='Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors';new L.TileLayer(l,{minZoom:1,maxZoom:19,attribution:m});map_bounds?setTimeout(function(){h.fitBounds(map_bounds,{maxZoom:17})},0):c&&d&&(e?h.setView(new L.LatLng(d,c),e):h.setView(new L.LatLng(d,c),8)),h.addLayer(k);var n={"OSM Mapnik":k};L.control.layers(n).addTo(h),g&&L.geoJson(g).addTo(h)}),$(this).off(a)})});
|
requirejs.config({baseUrl:"./static/themes/oscar/js",paths:{app:"../app"}}),window.searx=function(a){"use strict";var b=a.currentScript||function(){var b=a.getElementsByTagName("script");return b[b.length-1]}();return{autocompleter:"true"===b.getAttribute("data-autocompleter"),method:b.getAttribute("data-method")}}(document),searx.autocompleter&&(searx.searchResults=new Bloodhound({datumTokenizer:Bloodhound.tokenizers.obj.whitespace("value"),queryTokenizer:Bloodhound.tokenizers.whitespace,remote:"./autocompleter?q=%QUERY"}),searx.searchResults.initialize()),$(document).ready(function(){searx.autocompleter&&($("#q").typeahead(null,{name:"search-results",displayKey:function(a){return a},source:searx.searchResults.ttAdapter()}),$("#q").bind("typeahead:selected",function(a,b){$("#search_form").submit()}))}),$(document).ready(function(){$("#q.autofocus").focus(),$(".select-all-on-click").click(function(){$(this).select()}),$(".btn-collapse").click(function(){var a=$(this).data("btn-text-collapsed"),b=$(this).data("btn-text-not-collapsed");""!==a&&""!==b&&($(this).hasClass("collapsed")?new_html=$(this).html().replace(a,b):new_html=$(this).html().replace(b,a),$(this).html(new_html))}),$(".btn-toggle .btn").click(function(){var a="btn-"+$(this).data("btn-class"),b=$(this).data("btn-label-default"),c=$(this).data("btn-label-toggled");""!==c&&($(this).hasClass("btn-default")?new_html=$(this).html().replace(b,c):new_html=$(this).html().replace(c,b),$(this).html(new_html)),$(this).toggleClass(a),$(this).toggleClass("btn-default")}),$(".media-loader").click(function(){var a=$(this).data("target"),b=$(a+" > iframe"),c=b.attr("src");void 0!==c&&c!==!1||b.attr("src",b.data("src"))}),$(".btn-sm").dblclick(function(){var a="btn-"+$(this).data("btn-class");$(this).hasClass("btn-default")?($(".btn-sm > input").attr("checked","checked"),$(".btn-sm > input").prop("checked",!0),$(".btn-sm").addClass(a),$(".btn-sm").addClass("active"),$(".btn-sm").removeClass("btn-default")):($(".btn-sm > input").attr("checked",""),$(".btn-sm > input").removeAttr("checked"),$(".btn-sm > input").checked=!1,$(".btn-sm").removeClass(a),$(".btn-sm").removeClass("active"),$(".btn-sm").addClass("btn-default"))})}),$(document).ready(function(){$(".searx_overpass_request").on("click",function(a){var b="https://overpass-api.de/api/interpreter?data=",c=b+"[out:json][timeout:25];(",d=");out meta;",e=$(this).data("osm-id"),f=$(this).data("osm-type"),g=$(this).data("result-table"),h="#"+$(this).data("result-table-loadicon"),i=["addr:city","addr:country","addr:housenumber","addr:postcode","addr:street"];if(e&&f&&g){g="#"+g;var j=null;switch(f){case"node":j=c+"node("+e+");"+d;break;case"way":j=c+"way("+e+");"+d;break;case"relation":j=c+"relation("+e+");"+d}if(j){$.ajax(j).done(function(a){if(a&&a.elements&&a.elements[0]){var b=a.elements[0],c=$(g).html();for(var d in b.tags)if(null===b.tags.name||i.indexOf(d)==-1){switch(c+="<tr><td>"+d+"</td><td>",d){case"phone":case"fax":c+='<a href="tel:'+b.tags[d].replace(/ /g,"")+'">'+b.tags[d]+"</a>";break;case"email":c+='<a href="mailto:'+b.tags[d]+'">'+b.tags[d]+"</a>";break;case"website":case"url":c+='<a href="'+b.tags[d]+'">'+b.tags[d]+"</a>";break;case"wikidata":c+='<a href="https://www.wikidata.org/wiki/'+b.tags[d]+'">'+b.tags[d]+"</a>";break;case"wikipedia":if(b.tags[d].indexOf(":")!=-1){c+='<a href="https://'+b.tags[d].substring(0,b.tags[d].indexOf(":"))+".wikipedia.org/wiki/"+b.tags[d].substring(b.tags[d].indexOf(":")+1)+'">'+b.tags[d]+"</a>";break}default:c+=b.tags[d]}c+="</td></tr>"}$(g).html(c),$(g).removeClass("hidden"),$(h).addClass("hidden")}}).fail(function(){$(h).html($(h).html()+'<p class="text-muted">could not load data!</p>')})}}$(this).off(a)}),$(".searx_init_map").on("click",function(a){var b=$(this).data("leaflet-target"),c=$(this).data("map-lon"),d=$(this).data("map-lat"),e=$(this).data("map-zoom"),f=$(this).data("map-boundingbox"),g=$(this).data("map-geojson");require(["leaflet-0.7.3.min"],function(a){f&&(southWest=L.latLng(f[0],f[2]),northEast=L.latLng(f[1],f[3]),map_bounds=L.latLngBounds(southWest,northEast)),L.Icon.Default.imagePath="./static/themes/oscar/img/map";var h=L.map(b),i="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",j='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors',k=new L.TileLayer(i,{minZoom:1,maxZoom:19,attribution:j}),l="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",m='Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors';new L.TileLayer(l,{minZoom:1,maxZoom:19,attribution:m});map_bounds?setTimeout(function(){h.fitBounds(map_bounds,{maxZoom:17})},0):c&&d&&(e?h.setView(new L.LatLng(d,c),e):h.setView(new L.LatLng(d,c),8)),h.addLayer(k);var n={"OSM Mapnik":k};L.control.layers(n).addTo(h),g&&L.geoJson(g).addTo(h)}),$(this).off(a)})});
|
@ -0,0 +1 @@
|
|||||||
|
/node_modules
|
@ -1,3 +1,3 @@
|
|||||||
<a href="https://github.com/asciimoo/searx" class="github">
|
<a href="https://github.com/asciimoo/searx" class="github">
|
||||||
<img style="position: absolute; top: 0; right: 0; border: 0;" src="{{ url_for('static', filename='img/github_ribbon.png') }}" alt="Fork me on GitHub" class="github"/>
|
<img style="position: absolute; top: 0; right: 0; border: 0;" src="{{ url_for('static', filename='img/github_ribbon.png') }}" alt="Fork me on GitHub" class="github"/>
|
||||||
</a>
|
</a>
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
export GIT_URL='https://github.com/asciimoo/searx'
|
||||||
|
export ISSUE_URL='https://github.com/asciimoo/searx/issues'
|
||||||
|
export SEARX_URL='https://searx.me'
|
||||||
|
export DOCS_URL='https://asciimoo.github.io/searx'
|
||||||
|
export PUBLIC_INSTANCES='https://searx.space'
|
Loading…
Reference in New Issue