first commit

main
Ben 1 year ago
commit a6cae546f6

@ -0,0 +1,16 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for whoogle
LUCI_PKGARCH:=all
LUCI_DEPENDS:=+lsblk +docker +luci-lib-taskd
define Package/luci-app-whoogle/conffiles
/etc/config/whoogle
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

@ -0,0 +1,15 @@
module("luci.controller.whoogle", package.seeall)
function index()
entry({"admin", "apps"}, firstchild(), _("Apps") , 45).dependent = false
if not nixio.fs.access("/etc/config/whoogle") then
return
end
local page = entry({"admin", "apps", "whoogle"}, cbi("whoogle"), _("whoogle"))
page.order = 10
page.dependent = true
page.acl_depends = { "luci-app-whoogle" }
entry({"admin","apps","whoogle","status"},call("act_status")).leaf=true
end

@ -0,0 +1,47 @@
--[[
LuCI - Lua Configuration Interface
]]--
local taskd = require "luci.model.tasks"
local whoogle_model = require "luci.model.whoogle"
local m, s, o
m = taskd.docker_map("whoogle", "whoogle", "/usr/libexec/apps/whoogle/whoogle.sh",
translate("whoogle"),
translate("Whoogle is a free open-source self-hosted metasearch engine that allows you to search and get your Google results without ads, JavaScript trackers, or AMP links. It also ignores cookies, and does not perform any IP address tracking.")
.. translate("Official website:") .. ' <a href=\"https://hub.docker.com/r/benbusby/whoogle-search/\" target=\"_blank\">https://hub.docker.com/r/benbusby/whoogle-search/</a>')
s = m:section(SimpleSection, translate("Service Status"), translate("whoogle status:"))
s:append(Template("whoogle/status"))
s = m:section(TypedSection, "whoogle", translate("Setup"), translate("The following parameters will only take effect during installation or upgrade:"))
s.addremove=false
s.anonymous=true
o = s:option(Value, "port", translate("Port").."<b>*</b>")
o.rmempty = false
o.default = "5000"
o.datatype = "port"
o = s:option(Value, "image_name", translate("Image").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
o:value("benbusby/whoogle-search", "benbusby/whoogle-search")
o.default = "benbusby/whoogle-search"
local blocks = whoogle_model.blocks()
local home = whoogle_model.home()
o = s:option(Value, "config_path", translate("Config path").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
o:value("/opt/docker2/compose/Config", "/opt/docker2/compose/Config")
o.default = "/opt/docker2/compose/Config"
local paths, default_path = whoogle_model.find_paths(blocks, home, "Configs")
for _, val in pairs(paths) do
o:value(val, val)
end
o.default = default_path
return m

@ -0,0 +1,55 @@
local util = require "luci.util"
local jsonc = require "luci.jsonc"
local whoogle = {}
whoogle.blocks = function()
local f = io.popen("lsblk -s -f -b -o NAME,FSSIZE,MOUNTPOINT --json", "r")
local vals = {}
if f then
local ret = f:read("*all")
f:close()
local obj = jsonc.parse(ret)
for _, val in pairs(obj["blockdevices"]) do
local fsize = val["fssize"]
if fsize ~= nil and string.len(fsize) > 10 and val["mountpoint"] then
-- fsize > 1G
vals[#vals+1] = val["mountpoint"]
end
end
end
return vals
end
whoogle.home = function()
local uci = require "luci.model.uci".cursor()
local home_dirs = {}
home_dirs["main_dir"] = uci:get_first("quickstart", "main", "main_dir", "/root")
home_dirs["Configs"] = uci:get_first("quickstart", "main", "conf_dir", home_dirs["main_dir"].."/Configs")
home_dirs["Public"] = uci:get_first("quickstart", "main", "pub_dir", home_dirs["main_dir"].."/Public")
home_dirs["Downloads"] = uci:get_first("quickstart", "main", "dl_dir", home_dirs["Public"].."/Downloads")
home_dirs["Caches"] = uci:get_first("quickstart", "main", "tmp_dir", home_dirs["main_dir"].."/Caches")
return home_dirs
end
whoogle.find_paths = function(blocks, home_dirs, path_name)
local default_path = ''
local configs = {}
default_path = home_dirs[path_name] .. "/whoogle"
if #blocks == 0 then
table.insert(configs, default_path)
else
for _, val in pairs(blocks) do
table.insert(configs, val .. "/" .. path_name .. "/whoogle")
end
local without_conf_dir = "/root/" .. path_name .. "/whoogle"
if default_path == without_conf_dir then
default_path = configs[1]
end
end
return configs, default_path
end
return whoogle

@ -0,0 +1,31 @@
<%
local util = require "luci.util"
local container_status = util.trim(util.exec("/usr/libexec/apps/whoogle/whoogle.sh status"))
local container_install = (string.len(container_status) > 0)
local container_running = container_status == "running"
-%>
<div class="cbi-value">
<label class="cbi-value-title"><%:Status%></label>
<div class="cbi-value-field">
<% if container_running then %>
<button class="cbi-button cbi-button-success" disabled="true"><%:whoogle is running%></button>
<% else %>
<button class="cbi-button cbi-button-negative" disabled="true"><%:whoogle is not running%></button>
<% end %>
</div>
</div>
<%
if container_running then
local port=util.trim(util.exec("/usr/libexec/apps/whoogle/whoogle.sh port"))
if port == "" then
port="5000"
end
-%>
<div class="cbi-value cbi-value-last">
<label class="cbi-value-title">&nbsp;</label>
<div class="cbi-value-field">
<input type="button" class="btn cbi-button cbi-button-apply" name="start" value="<%:Open whoogle%>" onclick="window.open('http://'+location.hostname+':<%=port%>/', '_blank')">
</div>
</div>
<% end %>

@ -0,0 +1,4 @@
config whoogle
option 'port' '5000'
option 'config_path' '/opt/docker2/config'
option 'image_name' 'benbusby/whoogle-search'

@ -0,0 +1,14 @@
#!/bin/sh
config_dir=`uci -q get whoogle.@whoogle[0].config_path`
data_dir=`docker inspect --format '{{.Mounts}}' whoogle | grep -Eom1 '[^ ]+/_data /var/www/html local true ' | cut -d' ' -f1`
if [ -n "$data_dir" -a "$data_dir" != "$config_dir" ]; then
uci -q batch <<-EOF >/dev/null
set whoogle.@whoogle[0].config_path="$data_dir"
commit whoogle
EOF
fi
exit 0

@ -0,0 +1,138 @@
#!/bin/sh
ACTION=${1}
shift 1
get_image() {
IMAGE_NAME="benbusby/whoogle-search"
}
do_install_detail() {
local config=`uci get whoogle.@whoogle[0].config_path 2>/dev/null`
local port=`uci get whoogle.@whoogle[0].port 2>/dev/null`
local IMAGE_NAME=`uci get whoogle.@whoogle[0].image_name 2>/dev/null`
#Generate the generic environment variables for the docker-compose
GEN_PASS=$(< /dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c14; echo)
GEN_PASS2=$(< /dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c14; echo)
# Get our local LAN IP Address
LAN_IP=$(uci get network.lan.ipaddr)
# Strip trailing network mask
LAN_IP="${LAN_IP%/*}"
if [ -z "$config" ]; then
echo "config path is empty!"
exit 1
fi
[ -z "$port" ] && port=5000
[ -z "$IMAGE_NAME" ] && IMAGE_NAME=benbusby/whoogle-search
# Create Docker Compose file with custom variables
# Create Docker Compose file with custom variables
touch docker-compose.yml
cat > docker-compose.yml <<EOF
version: "2.4"
services:
whoogle-search:
image: ${IMAGE_NAME}
container_name: whoogle-search
restart: unless-stopped
pids_limit: 50
mem_limit: 256mb
memswap_limit: 256mb
# user debian-tor from tor package
user: whoogle
security_opt:
- no-new-privileges
cap_drop:
- ALL
tmpfs:
- /config/:size=10M,uid=927,gid=927,mode=1700
- /var/lib/tor/:size=15M,uid=927,gid=927,mode=1700
- /run/tor/:size=1M,uid=927,gid=927,mode=1700
#environment: # Uncomment to configure environment variables
# Basic auth configuration, uncomment to enable
#- WHOOGLE_USER=<auth username>
#- WHOOGLE_PASS=<auth password>
# Proxy configuration, uncomment to enable
#- WHOOGLE_PROXY_USER=<proxy username>
#- WHOOGLE_PROXY_PASS=<proxy password>
#- WHOOGLE_PROXY_TYPE=<proxy type (http|https|socks4|socks5)
#- WHOOGLE_PROXY_LOC=<proxy host/ip>
# Site alternative configurations, uncomment to enable
# Note: If not set, the feature will still be available
# with default values.
#- WHOOGLE_ALT_TW=farside.link/nitter
#- WHOOGLE_ALT_YT=farside.link/invidious
#- WHOOGLE_ALT_IG=farside.link/bibliogram/u
#- WHOOGLE_ALT_RD=farside.link/libreddit
#- WHOOGLE_ALT_MD=farside.link/scribe
#- WHOOGLE_ALT_TL=farside.link/lingva
#- WHOOGLE_ALT_IMG=farside.link/rimgo
#- WHOOGLE_ALT_WIKI=farside.link/wikiless
#- WHOOGLE_ALT_IMDB=farside.link/libremdb
#- WHOOGLE_ALT_QUORA=farside.link/quetre
#env_file: # Alternatively, load variables from whoogle.env
#- whoogle.env
ports:
- ${port}:5000
labels:
plugsy.name: "Whoogle"
plugsy.category: "Home"
plugsy.icon: "@styled-icons/boxicons-logos/Google"
plugsy.link: "http://${LAN_IP}:${port}"
EOF
docker-compose up -d
# Add a new list option to the "shortcutmenu" configuration file
uci add shortcutmenu lists
uci set shortcutmenu.@lists[-1].webname="$IMAGE_NAME"
uci set shortcutmenu.@lists[-1].weburl="$LAN_IP:$port"
uci set shortcutmenu.@lists[-1].webpath="/"
uci commit shortcutmenu
}
usage() {
echo "usage: $0 sub-command"
echo "where sub-command is one of:"
echo " install Install whoogle"
echo " upgrade Upgrade whoogle"
echo " rm/start/stop/restart Remove/Start/Stop/Restart whoogle"
echo " status whoogle status"
echo " port whoogle port"
}
case ${ACTION} in
"install")
get_image
do_install_detail
;;
"upgrade")
get_image
do_install_detail
;;
"rm")
docker rm -f whoogle
;;
"start" | "stop" | "restart")
docker ${ACTION} whoogle
;;
"status")
docker ps --all -f 'name=whoogle' --format '{{.State}}'
;;
"port")
docker ps --all -f 'name=whoogle' --format '{{.Ports}}' | grep -om1 '0.0.0.0:[0-9]*' | sed 's/0.0.0.0://'
;;
*)
usage
exit 1
;;
esac

@ -0,0 +1,11 @@
{
"luci-app-whoogle": {
"description": "Grant UCI access for luci-app-whoogle",
"read": {
"uci": [ "whoogle" ]
},
"write": {
"uci": [ "whoogle" ]
}
}
}
Loading…
Cancel
Save