Skip to content

Commit

Permalink
add luci-app-dogcom
Browse files Browse the repository at this point in the history
  • Loading branch information
coolsnowwolf committed Oct 27, 2017
1 parent d27dad8 commit 73db9ba
Show file tree
Hide file tree
Showing 11 changed files with 1,078 additions and 0 deletions.
661 changes: 661 additions & 0 deletions package/lean/luci-app-dogcom/LICENSE

Large diffs are not rendered by default.

68 changes: 68 additions & 0 deletions package/lean/luci-app-dogcom/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
include $(TOPDIR)/rules.mk

PKG_NAME:=luci-app-dogcom
PKG_VERSION:=1.0.2
PKG_RELEASE:=1

PKG_MAINTAINER:=fuyumi <280604399@qq.com>
PKG_LICENSE:=AGPLv3
PKG_LICENSE_FILES:=LICENSE

PKG_SOURCE_SUBDIR:=$(PKG_NAME)
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
PKG_BUILD_PARALLEL:=1

include $(INCLUDE_DIR)/package.mk

define Package/luci-app-dogcom
SECTION:=luci
CATEGORY:=LuCI
SUBMENU:=3. Applications
TITLE:=LuCI app for openwrt-dogcom
DEPENDS:=+dogcom
PKGARCH:=all
MAINTAINER:=fuyumi
endef

define Package/luci-app-dogcom/description
This package contains LuCI configuration pages for openwrt-dogcom.
endef

define Build/Prepare
endef

define Build/Configure
endef

define Build/Compile
endef

define Package/luci-app-dogcom/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
( . /etc/uci-defaults/luci-app-dogcom ) && rm -f /etc/uci-defaults/luci-app-dogcom
rm -f /tmp/luci-indexcache
fi
exit 0
endef

define Package/luci-app-dogcom/install
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/view/dogcom
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/etc/init.d

$(INSTALL_BIN) ./files/root/etc/uci-defaults/40_luci-dogcom $(1)/etc/uci-defaults/luci-app-dogcom
$(INSTALL_DATA) ./files/luci/controller/dogcom.lua $(1)/usr/lib/lua/luci/controller/dogcom.lua
$(INSTALL_DATA) ./files/luci/model/cbi/dogcom.lua $(1)/usr/lib/lua/luci/model/cbi/dogcom.lua
$(INSTALL_DATA) ./files/luci/view/dogcom/auto_configure.htm $(1)/usr/lib/lua/luci/view/dogcom/auto_configure.htm
$(INSTALL_DATA) ./files/luci/i18n/dogcom_zh-cn.lmo $(1)/usr/lib/lua/luci/i18n/dogcom.zh-cn.lmo
$(INSTALL_CONF) ./files/root/etc/config/dogcom $(1)/etc/config/dogcom
$(INSTALL_BIN) ./files/root/etc/init.d/dogcom $(1)/etc/init.d/dogcom
endef

$(eval $(call BuildPackage,luci-app-dogcom))
2 changes: 2 additions & 0 deletions package/lean/luci-app-dogcom/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# luci-app-dogcom
LuCI app for [openwrt-dogcom](https://github.com/mchome/openwrt-dogcom "")
14 changes: 14 additions & 0 deletions package/lean/luci-app-dogcom/files/luci/controller/dogcom.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
-- Copyright (C) 2017 fuyumi <280604399@qq.com>
-- Licensed to the public under the GNU Affero General Public License v3.

module("luci.controller.dogcom", package.seeall)

function index()
if not nixio.fs.access("/etc/config/dogcom") then
return
end
local page
page = entry({"admin", "network", "dogcom"}, cbi("dogcom"), _("dogcom"), 100)
page.i18n = "dogcom"
page.dependent = true
end
Binary file not shown.
46 changes: 46 additions & 0 deletions package/lean/luci-app-dogcom/files/luci/i18n/dogcom_zh-cn.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
msgid ""
msgstr ""
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

msgid "Dogcom config"
msgstr "Dogcom 设置"

msgid "Dogcom is running."
msgstr "Dogcom 运行中。"

msgid "Dogcom is not running."
msgstr "Dogcom 未运行。"

msgid "Basic Settings"
msgstr "基本设置"

msgid "Enable"
msgstr "启用"

msgid "Version"
msgstr "版本"

msgid "dhcp"
msgstr "dhcp(D版)"

msgid "pppoe"
msgstr "pppoe(P版)"

msgid "Patch the escape problem"
msgstr "P版转义字符补丁"

msgid "configfile"
msgstr "配置文件"

msgid "This file is /etc/dogcom.conf."
msgstr "这个文件是/etc/dogcom.conf。"

msgid "Generate Configuration"
msgstr "生成配置"

msgid "Please upload your packet file. Then change password and copy to basic settings."
msgstr "请上传你的数据包,然后修改密码并复制到基本设置配置文件中。"
72 changes: 72 additions & 0 deletions package/lean/luci-app-dogcom/files/luci/model/cbi/dogcom.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
-- Copyright (C) 2017 fuyumi <280604399@qq.com>
-- Licensed to the public under the GNU Affero General Public License v3.

local m, s

local running = (luci.sys.call("pidof dogcom > /dev/null") == 0)
if running then
m = Map("dogcom", translate("Dogcom config"), translate("Dogcom is running."))
else
m = Map("dogcom", translate("Dogcom config"), translate("Dogcom is not running."))
end

s = m:section(TypedSection, "dogcom", "")
s.addremove = false
s.anonymous = true

-- Basic Settings --
s:tab("basic", translate("Basic Settings"))

enable = s:taboption("basic", Flag, "enabled", translate("Enable"))
enable.rmempty = false
function enable.cfgvalue(self, section)
return luci.sys.init.enabled("dogcom") and self.enabled or self.disabled
end

version = s:taboption("basic", ListValue, "version", translate("Version"))
version:value("dhcp", translate("dhcp"))
version:value("pppoe", translate("pppoe"))
version.value = "dhcp"

escpatch = s:taboption("basic", Button, "esc", translate("Patch the escape problem"))
function escpatch.write()
luci.sys.call("sed -i '/proto_run_command/i username=`echo -e \"$username\"`' /lib/netifd/proto/ppp.sh")
luci.sys.call("sed -i '/proto_run_command/i password=`echo -e \"$password\"`' /lib/netifd/proto/ppp.sh")
end

config = s:taboption("basic", Value, "config", translate("configfile"), translate("This file is /etc/dogcom.conf."), "")
config.template = "cbi/tvalue"
config.rows = 15
config.wrap = "off"

function config.cfgvalue(self, section)
return nixio.fs.readfile("/etc/dogcom.conf")
end

function config.write(self, section, value)
value = value:gsub("\r\n?", "\n")
nixio.fs.writefile("/etc/dogcom.conf", value)
end

-- Generate Configuration --
s:tab("generator", translate("Generate Configuration"))

msg = s:taboption("generator", DummyValue, "", translate(""),
translate("Please upload your packet file. Then change password and copy to basic settings."))

autoconfig = s:taboption("generator", DummyValue, "autoconfig")
autoconfig.template = "dogcom/auto_configure"

-- Save Configuration --
function enable.write(self, section, value)
if value == "1" then
luci.sys.call("/etc/init.d/dogcom enable >/dev/null")
luci.sys.call("/etc/init.d/dogcom start >/dev/null")
else
luci.sys.call("/etc/init.d/dogcom stop >/dev/null")
luci.sys.call("/etc/init.d/dogcom disable >/dev/null")
end
Flag.write(self, section, value)
end

return m
167 changes: 167 additions & 0 deletions package/lean/luci-app-dogcom/files/luci/view/dogcom/auto_configure.htm
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
<%#
Copyright (C) 2017 fuyumi <280604399@qq.com>
Licensed to the public under the GNU Affero General Public License v3.
%>

<%+cbi/valueheader%>
<style>
.generator textarea {
display: block;
width: auto;
font-family: Arial;
}
.lb {
display: inline-block;
background-color: #ddd;
padding: 4px 11px;
font-size: 16px;
font-family: Arial;
}
.generator input {
display: inline-block;
visibility: hidden;
width: 0 !important;
margin: 1rem;
}
</style>

<div class="generator">
<input class="file-upload" type="file" id="file-upload-d" accept=".pcapng"><label class="lb" for="file-upload-d">Version D</label>
<input class="file-upload" type="file" id="file-upload-p" accept=".pcapng"><label class="lb" for="file-upload-p">Version P</label>
<textarea id="display" rows="15" style="min-width: 300px;">
</textarea>
</div>

<script type="text/javascript">
var params;

window.onload = function () {
var el = document.querySelectorAll(".file-upload");
for (var i = 0, len = el.length; i < len; i++) {
el[i].addEventListener('click', function () {
fileupload(function (file, method) {
if (file) {
var reader = new FileReader();
reader.onload = function (e) {
var data = e.target.result;
if (method === 'd') {
params = re_d(data);
display();
} else if (method === 'p') {
params = re_p(data);
display();
};
}
reader.readAsArrayBuffer(file);
}
}, '.pcapng', this);
})
}
};

function fileupload (callback, accept, fileSelector) {
var method = fileSelector.getAttribute('id').slice(-1);
fileSelector.addEventListener('change', function () {
var files = fileSelector.files;
if (files.length) {
callback(files[0], method);
} else {
callback(null, null);
}
});
}

function display() {
var print = '';
for (var i = 0; i < params[0].length; i++) {
if (params[0][i] == 'mac' || params[0][i] == 'ror_version'){
print += (params[0][i] + ' = ' + params[1][i] + '\'\n');
} else {
print += (params[0][i] + ' = \'' + params[1][i] + '\'\n');
}
};
print = print.slice(0, -1);
document.querySelector("#display").value = print;
}

function hexEncode(array) {
return array.map(function (byte) {
return ('0' + (byte & 0xFF).toString(16)).slice(-2);
}).join('')
}

String.prototype.hex2a = function () {
var str = '';
for (var i = 0; i < this.length; i += 2)
str += String.fromCharCode(parseInt(this.substr(i, 2), 16));
return str
}

String.prototype.hex2o = function () {
var str = '';
for (var i = 0; i < this.length; i += 2)
str += (parseInt(this.substr(i, 2), 16) + '.');
return str
}

function re_d (text) {
var int8array = new Uint8Array(text);
var textarray = Array.from(int8array);
text = hexEncode(textarray);
var re1 = /f000f000[00-ff]{8}0[37]01/;
var r1 = text.match(re1);
var offset = text.indexOf(r1) + 16;
var re2 = /0000[00-ff]{4}/;
var r2 = text.substring(offset + 668, offset + 676).match(re2);
if (r2 !== null) {
var ror_version = true;
} else {
var ror_version = false;
}
var username_len = (parseInt(text.substring(offset + 6, offset + 8), 16) - 20)*2;
var username = text.substring(offset + 40, offset + 40 + username_len).hex2a();
var server = text.substring(offset - 24, offset -16).hex2o().slice(0, -1);
var password = 'CHANGEME!!!';
var CONTROLCHECKSTATUS = '\\x' + text.substring(offset + 112, offset + 114);
var ADAPTERNUM = '\\x' + text.substring(offset + 114, offset + 116);
var host_ip = text.substring(offset + 162, offset + 170).hex2o().slice(0, -1);
var IPDOG = '\\x' + text.substring(offset + 210, offset + 212);
var host_name = 'fuyumi';
var PRIMARY_DNS = text.substring(offset + 284, offset + 292).hex2o().slice(0, -1);
var dhcp_server = text.substring(offset + 292, offset + 300).hex2o().slice(0, -1);
var AUTH_VERSION = '\\x' + text.substring(offset + 620, offset + 622) + '\\x' + text.substring(offset + 622, offset + 624);
if (ror_version) {
var mac = '0x' + text.substring(offset + 656, offset + 668);
} else {
var mac = '0x' + text.substring(offset + 640, offset + 652);
}
var host_os = 'Windows 10';
var re3 = /f000f000.{8}07..28000b01..../g;
var r3 = text.match(re3);
for (var i = r3.length - 1; i >= 0; i--) {
if(r3[i].slice(-4)!='0f27')
var KEEP_ALIVE_VERSION = r3[i].slice(-4).replace(/../ig, function (s) {return '\\x' + s});
};
var params1 = ['server','username','password','CONTROLCHECKSTATUS','ADAPTERNUM','host_ip','IPDOG','host_name','PRIMARY_DNS','dhcp_server','AUTH_VERSION','mac','host_os','KEEP_ALIVE_VERSION', 'ror_version']
var params2 = [server,username,password,CONTROLCHECKSTATUS,ADAPTERNUM,host_ip,IPDOG,host_name,PRIMARY_DNS,dhcp_server,AUTH_VERSION,mac,host_os,KEEP_ALIVE_VERSION, String(ror_version).charAt(0).toUpperCase() + String(ror_version).slice(1)]
return [params1, params2]
}

function re_p (text) {
var int8array = new Uint8Array(text);
var textarray = Array.from(int8array);
text = hexEncode(textarray);
var re1 = /07[00-ff]{2}60000300/;
var r1 = text.match(re1);
var offset = text.indexOf(r1);
var server = text.substring(offset - 24, offset -16).hex2o().slice(0, -1);
var pppoe_flag = '\\x' + text.substring(offset + 38, offset + 40);
var re2 = /07.{2}28000b..(..)02/;
var keep_alive2_flag = '\\x' + text.match(re2)[1];
var params1 = ['server','pppoe_flag','keep_alive2_flag'];
var params2 = [server,pppoe_flag,keep_alive2_flag]
return [params1,params2]
}
</script>

<%+cbi/valuefooter%>
3 changes: 3 additions & 0 deletions package/lean/luci-app-dogcom/files/root/etc/config/dogcom
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
config dogcom 'config'
option enabled '0'
option version 'dhcp'
Loading

0 comments on commit 73db9ba

Please sign in to comment.