mirror of
https://github.com/Dichgrem/luci-app-nyn.git
synced 2025-12-16 13:42:00 -05:00
start:hello_world
This commit is contained in:
9
luci-app-nyn/Makefile
Normal file
9
luci-app-nyn/Makefile
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
LUCI_TITLE:=LuCI support for NYN 802.1x Authentication Client
|
||||||
|
LUCI_DEPENDS:=+nyn +luci-base
|
||||||
|
|
||||||
|
include $(TOPDIR)/feeds/luci/luci.mk
|
||||||
|
|
||||||
|
# call BuildPackage - OpenWrt buildroot signature
|
||||||
|
|
||||||
44
luci-app-nyn/luasrc/controller/nyn.lua
Normal file
44
luci-app-nyn/luasrc/controller/nyn.lua
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
-- /usr/lib/lua/luci/controller/nyn.lua
|
||||||
|
module("luci.controller.nyn", package.seeall)
|
||||||
|
|
||||||
|
function index()
|
||||||
|
if not nixio.fs.access("/etc/config/nyn") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Menu
|
||||||
|
entry({"admin", "network", "nyn"}, firstchild(), _("NyN-Client"), 60).dependent = false
|
||||||
|
|
||||||
|
-- Settings
|
||||||
|
entry({"admin", "network", "nyn", "config"}, cbi("nyn"), _("Settings"), 1).leaf = true
|
||||||
|
|
||||||
|
-- Status API
|
||||||
|
entry({"admin", "network", "nyn", "get_status"}, call("act_status")).leaf = true
|
||||||
|
end
|
||||||
|
|
||||||
|
function act_status()
|
||||||
|
local sys = require "luci.sys"
|
||||||
|
local util = require "luci.util"
|
||||||
|
local status = {}
|
||||||
|
|
||||||
|
-- Get status
|
||||||
|
status.running = (sys.call("pgrep -f nyn >/dev/null") == 0)
|
||||||
|
|
||||||
|
-- Get process info
|
||||||
|
if status.running then
|
||||||
|
status.process_info = util.trim(sys.exec("ps | grep -v grep | grep nyn"))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Get log
|
||||||
|
local log_file = "/tmp/nyn.log"
|
||||||
|
if nixio.fs.access(log_file) then
|
||||||
|
status.log = util.trim(sys.exec("tail -20 " .. log_file))
|
||||||
|
else
|
||||||
|
status.log = util.trim(sys.exec("logread | grep nyn | tail -10"))
|
||||||
|
end
|
||||||
|
|
||||||
|
luci.http.prepare_content("application/json")
|
||||||
|
luci.http.write_json(status)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
56
luci-app-nyn/luasrc/model/cbi/nyn.lua
Normal file
56
luci-app-nyn/luasrc/model/cbi/nyn.lua
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
-- /usr/lib/lua/luci/model/cbi/nyn.lua
|
||||||
|
|
||||||
|
local m, s, o
|
||||||
|
local sys = require "luci.sys"
|
||||||
|
|
||||||
|
m = Map("nyn", translate("NYN 802.1x Authentication Client"),
|
||||||
|
translate("Configure 802.1x authentication for network access using NYN client"))
|
||||||
|
|
||||||
|
-- Authentication Settings
|
||||||
|
s = m:section(TypedSection, "auth", translate("Authentication Settings"))
|
||||||
|
s.anonymous = true
|
||||||
|
s.addremove = false
|
||||||
|
|
||||||
|
-- Service Status
|
||||||
|
o = s:option(DummyValue, "_status", translate("Current Status"))
|
||||||
|
o.rawhtml = true
|
||||||
|
o.cfgvalue = function()
|
||||||
|
local sys = require "luci.sys"
|
||||||
|
local running = sys.call("pgrep nyn >/dev/null") == 0
|
||||||
|
|
||||||
|
if running then
|
||||||
|
return "<span style='color:green;font-weight:bold'>✔ 正在运行中</span>"
|
||||||
|
else
|
||||||
|
return "<span style='color:red;font-weight:bold'>✘ 未运行</span>"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Enable/Disable
|
||||||
|
o = s:option(Flag, "enabled", translate("Enable Service"))
|
||||||
|
o.rmempty = false
|
||||||
|
|
||||||
|
-- Username
|
||||||
|
o = s:option(Value, "user", translate("Username"), translate("802.1x authentication username"))
|
||||||
|
o.rmempty = false
|
||||||
|
|
||||||
|
-- Password
|
||||||
|
o = s:option(Value, "password", translate("Password"), translate("802.1x authentication password"))
|
||||||
|
o.password = true
|
||||||
|
o.rmempty = false
|
||||||
|
|
||||||
|
-- Network Device
|
||||||
|
o = s:option(ListValue, "device", translate("Network Device"), translate("Network device to use for authentication"))
|
||||||
|
o.rmempty = false
|
||||||
|
o:value("eth0", "eth0")
|
||||||
|
o:value("eth1", "eth1")
|
||||||
|
o:value("wan", "WAN")
|
||||||
|
|
||||||
|
-- Add network interface
|
||||||
|
local interfaces = sys.net.devices()
|
||||||
|
for _, iface in ipairs(interfaces) do
|
||||||
|
if iface ~= "lo" then
|
||||||
|
o:value(iface, iface)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return m
|
||||||
66
nyn/Makefile
Normal file
66
nyn/Makefile
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=nyn
|
||||||
|
PKG_VERSION:=0.0.3
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_MAINTAINER:=Dichgrem <brcefy@gmail.com>
|
||||||
|
PKG_LICENSE:=MIT
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
define Package/nyn
|
||||||
|
SECTION:=net
|
||||||
|
CATEGORY:=Network
|
||||||
|
TITLE:=NYN 802.1x Authentication Client
|
||||||
|
URL:=https://github.com/diredocks/nyn
|
||||||
|
DEPENDS:=+libpcap
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/nyn/description
|
||||||
|
A 802.1x authentication client for OpenWrt routers.
|
||||||
|
Cross-compiled with musl toolchain for optimal compatibility.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/nyn/conffiles
|
||||||
|
/etc/config/nyn
|
||||||
|
/etc/nyn/config.toml
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/nyn/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
|
$(INSTALL_DIR) $(1)/etc/config
|
||||||
|
$(INSTALL_DIR) $(1)/etc/init.d
|
||||||
|
$(INSTALL_DIR) $(1)/etc/nyn
|
||||||
|
|
||||||
|
# Install precompiled binary based on architecture
|
||||||
|
$(if $(CONFIG_TARGET_x86_64),$(INSTALL_BIN) ./files/bin/nyn-x86_64 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(CONFIG_TARGET_armvirt_64),$(INSTALL_BIN) ./files/bin/nyn-aarch64 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(CONFIG_TARGET_bcm27xx_bcm2711),$(INSTALL_BIN) ./files/bin/nyn-aarch64 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(CONFIG_TARGET_ath79_generic),$(INSTALL_BIN) ./files/bin/nyn-mips64 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(CONFIG_TARGET_ramips_mt7621),$(INSTALL_BIN) ./files/bin/nyn-mips64 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(CONFIG_TARGET_mediatek_mt7622),$(INSTALL_BIN) ./files/bin/nyn-aarch64 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(CONFIG_TARGET_rockchip_armv8),$(INSTALL_BIN) ./files/bin/nyn-aarch64 $(1)/usr/bin/nyn)
|
||||||
|
# Fallback - try to detect architecture
|
||||||
|
$(if $(findstring arm,$(ARCH)),$(INSTALL_BIN) ./files/bin/nyn-armv7 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(findstring aarch64,$(ARCH)),$(INSTALL_BIN) ./files/bin/nyn-aarch64 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(findstring mips,$(ARCH)),$(INSTALL_BIN) ./files/bin/nyn-mips64 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(findstring x86_64,$(ARCH)),$(INSTALL_BIN) ./files/bin/nyn-x86_64 $(1)/usr/bin/nyn)
|
||||||
|
$(if $(findstring i386,$(ARCH)),$(INSTALL_BIN) ./files/bin/nyn-i686 $(1)/usr/bin/nyn)
|
||||||
|
|
||||||
|
$(INSTALL_BIN) ./files/usr/bin/nyn-device-info $(1)/usr/bin/
|
||||||
|
$(INSTALL_CONF) ./files/etc/config/nyn $(1)/etc/config/
|
||||||
|
$(INSTALL_CONF) ./files/etc/nyn/config.toml $(1)/etc/nyn/
|
||||||
|
$(INSTALL_BIN) ./files/etc/init.d/nyn $(1)/etc/init.d/
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,nyn))
|
||||||
BIN
nyn/files/bin/nyn-aarch64
Normal file
BIN
nyn/files/bin/nyn-aarch64
Normal file
Binary file not shown.
BIN
nyn/files/bin/nyn-armv7
Normal file
BIN
nyn/files/bin/nyn-armv7
Normal file
Binary file not shown.
BIN
nyn/files/bin/nyn-i686
Normal file
BIN
nyn/files/bin/nyn-i686
Normal file
Binary file not shown.
BIN
nyn/files/bin/nyn-mips64
Normal file
BIN
nyn/files/bin/nyn-mips64
Normal file
Binary file not shown.
BIN
nyn/files/bin/nyn-riscv64
Normal file
BIN
nyn/files/bin/nyn-riscv64
Normal file
Binary file not shown.
BIN
nyn/files/bin/nyn-x86_64
Normal file
BIN
nyn/files/bin/nyn-x86_64
Normal file
Binary file not shown.
16
nyn/files/etc/config/nyn
Normal file
16
nyn/files/etc/config/nyn
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
config general 'general'
|
||||||
|
option enabled '0'
|
||||||
|
option timeout '1'
|
||||||
|
option retry '5'
|
||||||
|
option schedule_callback '0'
|
||||||
|
|
||||||
|
config crypto 'crypto'
|
||||||
|
option win_ver 'r70393861'
|
||||||
|
option client_key 'Oly5D62FaE94W7'
|
||||||
|
option client_version ''
|
||||||
|
|
||||||
|
config auth 'auth'
|
||||||
|
option user ''
|
||||||
|
option password ''
|
||||||
|
option device 'eth0'
|
||||||
|
option hardware_description ''
|
||||||
41
nyn/files/etc/init.d/nyn
Normal file
41
nyn/files/etc/init.d/nyn
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
|
||||||
|
START=99
|
||||||
|
USE_PROCD=1
|
||||||
|
|
||||||
|
CONFIG=/etc/nyn/config.toml
|
||||||
|
|
||||||
|
start_service() {
|
||||||
|
generate_config
|
||||||
|
|
||||||
|
procd_open_instance
|
||||||
|
procd_set_param command /usr/bin/nyn -config "$CONFIG"
|
||||||
|
procd_set_param respawn
|
||||||
|
procd_close_instance
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_service() {
|
||||||
|
procd_kill nyn
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_config() {
|
||||||
|
mkdir -p /etc/nyn
|
||||||
|
|
||||||
|
cat >"$CONFIG" <<EOF
|
||||||
|
# Auto-generated by UCI
|
||||||
|
|
||||||
|
[general]
|
||||||
|
timeout = $(uci -q get nyn.general.timeout)
|
||||||
|
retry = $(uci -q get nyn.general.retry)
|
||||||
|
schedule_callback = $([ "$(uci -q get nyn.general.schedule_callback)" = "1" ] && echo "true" || echo "false")
|
||||||
|
|
||||||
|
[crypto]
|
||||||
|
win_ver = "$(uci -q get nyn.crypto.win_ver)"
|
||||||
|
client_key = "$(uci -q get nyn.crypto.client_key)"
|
||||||
|
|
||||||
|
[[auth]]
|
||||||
|
user = "$(uci -q get nyn.auth.user)"
|
||||||
|
password = "$(uci -q get nyn.auth.password)"
|
||||||
|
device = "$(uci -q get nyn.auth.device)"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
18
nyn/files/etc/nyn/config.toml
Normal file
18
nyn/files/etc/nyn/config.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Default configuration for NYN 802.1x client
|
||||||
|
# This file will be generated by UCI system
|
||||||
|
|
||||||
|
[general]
|
||||||
|
timeout = 1
|
||||||
|
retry = 5
|
||||||
|
schedule_callback = false
|
||||||
|
|
||||||
|
[crypto]
|
||||||
|
win_ver = "r70393861"
|
||||||
|
client_key = "Oly5D62FaE94W7"
|
||||||
|
# client_version = ""
|
||||||
|
|
||||||
|
[[auth]]
|
||||||
|
user = ""
|
||||||
|
password = ""
|
||||||
|
device = "eth0"
|
||||||
|
# hardware_description = ""
|
||||||
29
nyn/files/usr/bin/nyn-device-info
Normal file
29
nyn/files/usr/bin/nyn-device-info
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# /usr/bin/nyn-device-info
|
||||||
|
# Helper script to get device information for NYN configuration
|
||||||
|
|
||||||
|
echo "Available network devices:"
|
||||||
|
echo "=========================="
|
||||||
|
|
||||||
|
if command -v nyn >/dev/null 2>&1; then
|
||||||
|
nyn -mode info 2>/dev/null | grep -E "(Found|device|hardware_description)" | while read line; do
|
||||||
|
echo "$line"
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "NYN binary not found. Showing available network interfaces:"
|
||||||
|
for dev in /sys/class/net/*; do
|
||||||
|
if [ -d "$dev" ]; then
|
||||||
|
iface=$(basename "$dev")
|
||||||
|
if [ "$iface" != "lo" ]; then
|
||||||
|
echo "Device: $iface"
|
||||||
|
if [ -f "$dev/address" ]; then
|
||||||
|
echo " MAC: $(cat "$dev/address")"
|
||||||
|
fi
|
||||||
|
if [ -f "$dev/operstate" ]; then
|
||||||
|
echo " State: $(cat "$dev/operstate")"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user