更新了大量API
This commit is contained in:
70
server/APP/Package.py.old
Normal file
70
server/APP/Package.py.old
Normal file
@@ -0,0 +1,70 @@
|
||||
# coding=utf-8
|
||||
#!/bin/python
|
||||
#cding=utf-8
|
||||
# encoding=utf8
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
name = "APP"
|
||||
Version = "V0.2"
|
||||
|
||||
def install(new_client_socket,post,Versino,Headers,info,prin):
|
||||
pkg=""
|
||||
try:
|
||||
fs = open("server/server.ini", "rb")
|
||||
pkg = fs.read().decode("utf-8").split('\n')
|
||||
except Exception as e:
|
||||
prin(new_client_socket,(e.args).encode("utf-8"))
|
||||
inpkg = "install"
|
||||
for i in pkg:
|
||||
if i.split('\r')[0] == name:
|
||||
inpkg = ""
|
||||
prin(new_client_socket,("install " + name + " " + Version + "\n\r").encode("utf-8"))
|
||||
os.system("cp -rf .out/" + name + "_" + Version + ".pkg/.out/* ./")
|
||||
|
||||
if inpkg == "install":
|
||||
os.system("echo " + name + ">>server/server.ini")
|
||||
# prin(new_client_socket,("END\n\r").encode("utf-8"))
|
||||
os.system("rm -rf .out/" + name + "_" + Version + ".pkg")
|
||||
def remove():
|
||||
os.system("rm -rf server/" + name)
|
||||
os.system("rm -rf web/" + name)
|
||||
def out():
|
||||
#os.system("cp -rf web/" + name + " .out/web/")
|
||||
os.system("cp -rf web/Ace_Admin/" + name + " .out/web/Ace_Admin/")
|
||||
os.system("rm -rf .out/web/APP/info.json")
|
||||
os.system("cp -rf server/" + name + " .out/server/")
|
||||
|
||||
rm('.out/server/','__pycache__')
|
||||
|
||||
# os.system("find .out/ -name __pycache__")
|
||||
def rm(dir,name):
|
||||
path = os.listdir(dir)
|
||||
for p in path:
|
||||
if os.path.isdir(dir + p):
|
||||
if p == name:
|
||||
os.system("rm -rf " + dir + name)
|
||||
else:
|
||||
rm(dir + p + '/',name)
|
||||
def info():
|
||||
print("Package:" + name)
|
||||
print("name:应用商店")
|
||||
print("Version:" + Version)
|
||||
print("Depends:main")
|
||||
print("License:GPL-2.0")
|
||||
print("Description:软件的应用商店")
|
||||
print("issued:pkg")
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) == 1:
|
||||
sys.argv = sys.argv[0],"install"
|
||||
|
||||
if sys.argv[1] == "install":
|
||||
install('','','','','')
|
||||
elif sys.argv[1] == "remove":
|
||||
remove()
|
||||
elif sys.argv[1] == "out":
|
||||
out()
|
||||
else:
|
||||
info()
|
||||
@@ -9,10 +9,11 @@ import imp
|
||||
import hashlib
|
||||
import socket
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = '{}'
|
||||
post = RUL_CS
|
||||
for i in post:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
@@ -33,8 +34,8 @@ def main(new_client_socket,post,Headers,info,user):
|
||||
yuan = os.listdir(".config/APP/data/")
|
||||
yuan.sort(reverse=True)
|
||||
for y in yuan:
|
||||
fs = open(".config/APP/data/" + y,'r')
|
||||
yrul = fs.read().split('\n')[1:-1]
|
||||
fs = open(".config/APP/data/" + y,'rb')
|
||||
yrul = fs.read().decode("utf-8").split('\n')[1:-1]
|
||||
for i in yrul:
|
||||
i = i.split(',')
|
||||
name = i[0].split('"')[3]
|
||||
|
||||
@@ -52,8 +52,8 @@ def install(new_client_socket,post,Versino,Headers,info):
|
||||
yuan = os.listdir(".config/APP/data/")
|
||||
yuan.sort(reverse=True)
|
||||
for y in yuan:
|
||||
fs = open(".config/APP/data/" + y,'r')
|
||||
yrul = fs.read().split('\n')[1:-1]
|
||||
fs = open(".config/APP/data/" + y,'rb')
|
||||
yrul = fs.read().decode("utf-8").split('\n')[1:-1]
|
||||
for i in yrul:
|
||||
i = i.split(',')
|
||||
name = i[0].split('"')[3]
|
||||
@@ -443,8 +443,8 @@ def update(new_client_socket,post,Versino,Headers,info):
|
||||
if os.path.isdir(".config/APP/pkg/" + y):
|
||||
for i in range(len(os.listdir(".config/APP/pkg/" + y))):
|
||||
if os.path.exists(".config/APP/pkg/" + y + '/' + str(i)):
|
||||
fs = open(".config/APP/pkg/" + y + '/' + str(i),'r')
|
||||
yrul = fs.read().split('\n')
|
||||
fs = open(".config/APP/pkg/" + y + '/' + str(i),'rb')
|
||||
yrul = fs.read().decode("utf-8").split('\n')
|
||||
for yyrul in yrul:
|
||||
if yyrul != '':
|
||||
prin(new_client_socket,(y + '[' + str(i)+ ']\t').encode("utf-8"))
|
||||
@@ -493,8 +493,8 @@ def update(new_client_socket,post,Versino,Headers,info):
|
||||
fs.close()
|
||||
break
|
||||
else:
|
||||
fs = open(".config/APP/pkg/" + y,'r')
|
||||
yrul = fs.read().split('\n')
|
||||
fs = open(".config/APP/pkg/" + y,'rb')
|
||||
yrul = fs.read().decode("utf-8").split('\n')
|
||||
for yyrul in yrul:
|
||||
if yyrul != '':
|
||||
prin(new_client_socket,(y + '\t').encode("utf-8"))
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
import imp
|
||||
import traceback
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
Versino = "V1.0"
|
||||
post = RUL_CS
|
||||
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
||||
httpserver.websockinit(new_client_socket,Headers,info)
|
||||
data = httpserver.websockrx(new_client_socket)
|
||||
|
||||
@@ -84,7 +84,7 @@ def remove():
|
||||
def out():
|
||||
os.system("cp -rf web/Ace_Admin/" + name + " .out/web/Ace_Admin/")
|
||||
os.system("cp -rf server/" + name + " .out/server/")
|
||||
os.system("#cp -rf lib/frp .out/server/frpc/lib")
|
||||
os.system("cp -rf lib/frp .out/server/frpc/lib")
|
||||
|
||||
rm('.out/server/','__pycache__')
|
||||
|
||||
@@ -99,17 +99,25 @@ def rm(dir,name):
|
||||
rm(dir + p + '/',name)
|
||||
def info():
|
||||
data = {}
|
||||
#文件夹名称
|
||||
data["Package"] = name
|
||||
#首选名称
|
||||
data["names"] = "frpc"
|
||||
#多国语言翻译
|
||||
data["namei"] = {}
|
||||
data["namei"]["zh-CN"] = "frpc".encode("utf-8")
|
||||
|
||||
#版本
|
||||
data["Version"] = Version
|
||||
#依赖
|
||||
data["Depends"] = "main"
|
||||
#License
|
||||
data["License"] = "GPL-2.0"
|
||||
#首选解释
|
||||
data["Description"] = "frp内网穿透客户端"
|
||||
#多国语言翻译
|
||||
data["Descriptions"] = {}
|
||||
data["Descriptions"]["zh-CN"] = "frp内网穿透客户端".encode("utf-8")
|
||||
#库名称
|
||||
data["issued"] = "pkg"
|
||||
|
||||
return data
|
||||
|
||||
@@ -30,9 +30,10 @@ def setinfo(conf,section,option,value):
|
||||
conf.set(section, option, value)
|
||||
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
type = ""
|
||||
res = ""
|
||||
post = RUL_CS
|
||||
for i in post:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'type':
|
||||
|
||||
@@ -7,6 +7,29 @@ import sys
|
||||
import time
|
||||
import psutil
|
||||
import imp
|
||||
import time
|
||||
import locale
|
||||
|
||||
iftext = {}
|
||||
iftext["Charging"] = "Charging"
|
||||
iftext["Discharging"] = "Discharging"
|
||||
iftext["Full"] = "Full"
|
||||
#加载语言文件
|
||||
try:
|
||||
language = locale.getdefaultlocale()
|
||||
language = language[0]
|
||||
#language = "zh_CN"
|
||||
if os.path.exists("language/server/info/info/" + language + ".py"):
|
||||
run = imp.load_source('run',"language/server/info/info/" + language + ".py")
|
||||
for textname in iftext.keys():
|
||||
try:
|
||||
textval = run.iftext[textname]
|
||||
iftext[textname] = textval
|
||||
except Exception as e:
|
||||
print(e.args)
|
||||
except Exception as e:
|
||||
print(e.args)
|
||||
|
||||
|
||||
def rom(info):
|
||||
OS = info['OS']
|
||||
@@ -15,7 +38,7 @@ def rom(info):
|
||||
rom=0
|
||||
romname = ""
|
||||
disks=1
|
||||
if OS == "Linux":
|
||||
'''if OS == "Linux":
|
||||
romsh = os.popen("LANG=en_US df -h")
|
||||
list = romsh.read().split("\n")
|
||||
ilen = len(list)
|
||||
@@ -45,18 +68,21 @@ def rom(info):
|
||||
romname = list[i].split(" ")[0]
|
||||
i=i+1
|
||||
disks += 1
|
||||
else:
|
||||
list = psutil.disk_partitions()
|
||||
else:'''
|
||||
if True:
|
||||
list = psutil.disk_partitions(False)
|
||||
ilen = len(list)
|
||||
while i < ilen:
|
||||
if list[i].mountpoint == "/boot":
|
||||
i += 1
|
||||
elif list[i].device == "/dev/zram1":
|
||||
i += 1
|
||||
else:
|
||||
try:
|
||||
diskinfo = psutil.disk_usage(list[i].mountpoint)
|
||||
if rom < diskinfo.percent:
|
||||
rom = diskinfo.percent
|
||||
romname = list[i].mountpoint
|
||||
romname = list[i].device
|
||||
except Exception as e:
|
||||
if(len(e.args) == 2):
|
||||
if e.args[1] != '设备未就绪。':
|
||||
@@ -97,6 +123,8 @@ def catdisk(OS):
|
||||
ii += 1
|
||||
fo = ii
|
||||
res = res + (('"diskfo":"' + str(fo) + '","disk":[\r\n').encode("utf-8"))
|
||||
fo = len(diskfo)
|
||||
iii = 0
|
||||
for i in range(fo):
|
||||
device = diskfo[i].mountpoint
|
||||
if diskfo[i].device[:len("/dev/loop")] != "/dev/loop":
|
||||
@@ -134,10 +162,11 @@ def catdisk(OS):
|
||||
diskinfo = " " + diskfo[i].fstype + ' ' + rams + ' / ' + ramall
|
||||
else:
|
||||
name = diskfo[i].device
|
||||
if i == (fo - 1):
|
||||
if iii == (ii - 1):
|
||||
res = res + (('{"name":"' + name + '","minidiskinfo":"' + rams + ' / ' + ramall + '","diskinfo":"' + diskinfo + '","disk":"' + str(ram.percent)[:-2] + '"}\r\n').encode("utf-8"))
|
||||
else:
|
||||
res = res + (('{"name":"' + name + '","minidiskinfo":"' + rams + ' / ' + ramall + '","diskinfo":"' + diskinfo + '","disk":"' + str(ram.percent)[:-2] + '"},\r\n').encode("utf-8"))
|
||||
iii = iii + 1
|
||||
fo = os.popen('ls /sys/kernel/debug/mmc*/mmc*/ext_csd 2>/dev/null').read()
|
||||
#fo = os.popen('ls .tmp/mmc*/mmc*/ext_csd 2>/dev/null').read().split('\n')
|
||||
res = res + (('],\r\n').encode("utf-8"))
|
||||
@@ -194,7 +223,7 @@ def catcpu(OS):
|
||||
res = b''
|
||||
fo = psutil.cpu_count()
|
||||
if OS == "Windows":
|
||||
shell = os.popen(bin + "wmic cpu get Name")
|
||||
shell = os.popen("wmic cpu get Name")
|
||||
bash = shell.read().split('\n')
|
||||
cpuname = bash[2]#.split(')')[-1][1:]
|
||||
|
||||
@@ -227,10 +256,36 @@ def catcpu(OS):
|
||||
bash = shell.read().split('\n')
|
||||
if len(bash) == 2:
|
||||
cputemp = bash[0][:-3]
|
||||
elif OS == "Windows":
|
||||
import clr
|
||||
clr.AddReference(os.getcwd() + '/Tools/openhardwaremonitor/OpenHardwareMonitor/OpenHardwareMonitorLib.dll') # 填写绝对路径
|
||||
import OpenHardwareMonitor as ohm
|
||||
from OpenHardwareMonitor.Hardware import Computer, HardwareType, SensorType
|
||||
computer = Computer()
|
||||
computer.CPUEnabled = True
|
||||
computer.MainboardEnabled = True
|
||||
computer.FanControllerEnabled = True
|
||||
|
||||
hardwareType = ohm.Hardware.HardwareType
|
||||
sensorType = ohm.Hardware.SensorType
|
||||
|
||||
computer.Open()
|
||||
computer.Open()
|
||||
for hardware in computer.Hardware:
|
||||
hardware.Update()
|
||||
for sensor in hardware.Sensors:
|
||||
rr = str(sensor.Identifier)
|
||||
print(rr)
|
||||
print(sensor.get_Value())
|
||||
if "/temperature" in str(sensor.Identifier):
|
||||
cputemp = str(sensor.get_Value())
|
||||
print(sensor.get_Value())
|
||||
|
||||
res = res + (('"cputemp":"' + cputemp + '","cpufo":"' + str(fo) + '","cpu":[\r\n').encode("utf-8"))
|
||||
#if len(cpuname) > 20:
|
||||
# cpunam = cpuname.split('CPU')
|
||||
# cpuname = cpunam[-1][1:]
|
||||
time.sleep(0.1)
|
||||
freq = psutil.cpu_freq(percpu=True)
|
||||
cpu = psutil.cpu_percent(percpu=True)
|
||||
if len(freq) != len(cpu):
|
||||
@@ -305,7 +360,7 @@ def catram():
|
||||
res = res + (('{"name":"交换空间","raminfo":"' + rams + ' / ' + ramall + '","ram":"' + str(ram.percent) + '"}\r\n').encode("utf-8"))
|
||||
return res
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
|
||||
OS = info['OS']
|
||||
bin = ''
|
||||
@@ -318,14 +373,27 @@ def main(new_client_socket,post,Headers,info,user):
|
||||
res = res + (('"rommain": "'+rr+'",\r\n').encode("utf-8"))
|
||||
res = res + (('"romnamemain": "'+rrr+'",\r\n').encode("utf-8"))
|
||||
bat = '0'
|
||||
cat = "0"
|
||||
try:
|
||||
bat = str(psutil.sensors_battery().percent)
|
||||
except Exception as e:
|
||||
bat = '0'
|
||||
if os.path.exists("/sys/class/power_supply"):
|
||||
dirn = os.listdir("/sys/class/power_supply/")
|
||||
for d in dirn:
|
||||
if os.path.exists("/sys/class/power_supply/" + d + "/type"):
|
||||
if os.path.exists("/sys/class/power_supply/" + d + "/capacity"):
|
||||
cat = os.popen("cat /sys/class/power_supply/" + d + "/type").read().split('\n')[0]
|
||||
if os.path.exists("/sys/class/power_supply/" + d + "/status"):
|
||||
cat = os.popen("cat /sys/class/power_supply/" + d + "/status").read().split('\n')[0]
|
||||
bat = os.popen("cat /sys/class/power_supply/" + d + "/capacity").read().split('\n')[0]
|
||||
res = res + (('"bat": "'+bat+'",\r\n').encode("utf-8"))
|
||||
try:
|
||||
cat = iftext[cat]
|
||||
except Exception as e:
|
||||
bat = bat
|
||||
if cat == "0":
|
||||
cat = bat
|
||||
res = res + (('"cat": "'+cat+'",\r\n').encode("utf-8"))
|
||||
# break
|
||||
|
||||
res = res + catcpu(OS)
|
||||
|
||||
@@ -89,7 +89,7 @@ def dpkginstall(name):
|
||||
pkg = ''
|
||||
if os.path.exists("/bin/apt"):
|
||||
if name == "update":
|
||||
os.system("apt update")
|
||||
os.system("#apt update")
|
||||
pkg = "apt install -y "
|
||||
elif os.path.exists("/bin/yum"):
|
||||
pkg = "yum install -y "
|
||||
@@ -103,7 +103,7 @@ def dpkginstall(name):
|
||||
elif name == "update":
|
||||
print()
|
||||
elif name == (python.split('/')[-1] + "-dev"):
|
||||
if pkg == "yum":
|
||||
if pkg == "yum install -y ":
|
||||
os.system(pkg + " " + python.split('/')[-1] + "-devel")
|
||||
else:
|
||||
os.system(pkg + " " + name)
|
||||
@@ -121,6 +121,8 @@ def pip(name):
|
||||
print('pip ' + name)
|
||||
while run == 1:
|
||||
run = pipinstall(name," ")
|
||||
if run == 1:
|
||||
run = pipinstall(name," --break-system-packages ")
|
||||
if run == 1:
|
||||
run = pipinstall(name,"https://pypi.tuna.tsinghua.edu.cn/simple")
|
||||
if run == 1:
|
||||
@@ -133,16 +135,16 @@ def pip(name):
|
||||
|
||||
def pipinstall(name,link):
|
||||
sh = os.popen("" + python + " -m pip list | " + bash + "grep '" + name + "'")
|
||||
shell = sh.read().split(' ')
|
||||
shell = sh.read().split("\n")[0].split(' ')
|
||||
if shell[0] != name:
|
||||
if link[0] == 'h':
|
||||
link = ' -i ' + link
|
||||
os.system(bin + "" + python + " -m pip install --break-system-packages " + name + link)
|
||||
os.system(bin + "" + python + " -m pip install " + name + link)
|
||||
sh = os.popen("" + python + " -m pip list | " + bash + "grep '" + name + "'")
|
||||
shell = sh.read().split(' ')
|
||||
shell = sh.read().split("\n")[0].split(' ')
|
||||
if shell[0] == name:
|
||||
pr = ''
|
||||
for p in shell[:-1]:
|
||||
for p in shell:
|
||||
pr = pr + p
|
||||
if pr == name:
|
||||
pr = pr + ' '
|
||||
@@ -152,7 +154,7 @@ def pipinstall(name,link):
|
||||
return 0
|
||||
else:
|
||||
pr = ''
|
||||
for p in shell[:-1]:
|
||||
for p in shell:
|
||||
pr = pr + p
|
||||
if pr == name:
|
||||
pr = pr + ' '
|
||||
@@ -238,23 +240,23 @@ if os.path.exists(".config/main/user") == False:
|
||||
os.mkdir(".config/main")
|
||||
print(text["init"])
|
||||
user = ''
|
||||
if os.path.exists("/usr/bin/bashio"):
|
||||
user = os.popen("bashio api.sh config user").read().split("\n")[0]
|
||||
print(text["user"] + user)
|
||||
user = user.encode("utf-8")
|
||||
if len(sys.argv) == 5:
|
||||
if sys.argv[1] == "hass":
|
||||
print(sys.argv)
|
||||
user = sys.argv[3].encode("utf-8")
|
||||
else:
|
||||
user = input(text["user"]).encode("utf-8")
|
||||
password = ''
|
||||
if os.path.exists("/usr/bin/bashio"):
|
||||
password = os.popen("bashio api.sh config password").read().split("\n")[0]
|
||||
print(text["passwor"] + password)
|
||||
password = password.encode("utf-8")
|
||||
if len(sys.argv) == 5:
|
||||
if sys.argv[1] == "hass":
|
||||
print(sys.argv)
|
||||
password = sys.argv[4].encode("utf-8")
|
||||
else:
|
||||
password = input(text["passwor"]).encode("utf-8")
|
||||
tools = imp.load_source('tools',"Tools/Tools.py")
|
||||
tools.newuser(user,password,b"0")
|
||||
if OS_ == "Linux":
|
||||
install = "L"
|
||||
#if OS_ == "Linux":
|
||||
install = "L"
|
||||
|
||||
if os.path.exists(".config/main/port"):
|
||||
fs = open(".config/main/port", "rb")
|
||||
@@ -272,6 +274,8 @@ OSS = OS.split(' ')
|
||||
if OS_ == "Windows":
|
||||
pip("psutil")
|
||||
pip("pywin32")
|
||||
pip("requests")
|
||||
pip("pythonnet")
|
||||
elif OS == "DSM":
|
||||
if os.path.exists("server/psutil.py") == False:
|
||||
os.system('cp lib/psutil.py ./server/')
|
||||
@@ -284,11 +288,12 @@ elif OS_ == "Linux":
|
||||
t = 1
|
||||
if t == 0:
|
||||
dpkginstall("update")
|
||||
dpkginstall(python.split('/')[-1] + "-pip ")
|
||||
dpkginstall(python.split('/')[-1] + "-dev")
|
||||
dpkginstall("python3" + "-pip ")
|
||||
dpkginstall("python3" + "-dev")
|
||||
dpkginstall("gcc")
|
||||
dpkginstall("curl")
|
||||
pip("psutil")
|
||||
pip("requests")
|
||||
|
||||
OS_ = os.popen('if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then echo "chroot"; else echo "Linux"; fi').read().split('\r')[0].split('\n')[0]
|
||||
|
||||
@@ -316,8 +321,17 @@ print("OS: " + OS)
|
||||
print("OS: " + OS_)
|
||||
print("port: " + str(port))
|
||||
print("theme: " + theme)
|
||||
for iipp in ipaddr.split('\r'):
|
||||
print(iipp)
|
||||
try:
|
||||
import psutil
|
||||
print("Net: ")
|
||||
net = psutil.net_if_addrs()
|
||||
for i in net:
|
||||
addrees = net[i]
|
||||
addrees = addrees[0]
|
||||
addrees = addrees.address
|
||||
print('\t' + i + '\t' + addrees)
|
||||
except Exception as e:
|
||||
print(e.args)
|
||||
|
||||
info = {}
|
||||
info["Versino"] = Versino
|
||||
@@ -329,7 +343,6 @@ info["port"] = port
|
||||
info["dev_name"] = dev_name
|
||||
info["theme"] = theme
|
||||
info["Headers"] = "Server: JCM/1.0\r\n"
|
||||
info["ip"] = iipp
|
||||
info['debug'] = False
|
||||
info['tmp'] = '/tmp/jcm'
|
||||
|
||||
@@ -347,6 +360,9 @@ if info['debug']:
|
||||
|
||||
run = imp.load_source('run',"server/run.py")
|
||||
if install == "L":
|
||||
if OS_ == "Linux":
|
||||
os.system("systemctl start jcm.service")
|
||||
else:
|
||||
os.system("dist/boot/boot.exe start")
|
||||
run.main(info)
|
||||
print("end")
|
||||
@@ -7,7 +7,58 @@ import os
|
||||
import sys
|
||||
|
||||
name = "main"
|
||||
Version = "V0.2"
|
||||
Version = "V0.3"
|
||||
|
||||
rul = "https://jiang144.i234.me/data/jcm"
|
||||
|
||||
def progress_bar( nb_traits,name,d,prin,new_client_socket):
|
||||
prin(new_client_socket,('\r' + name + d + ' : Downloading [').encode("utf-8"))
|
||||
for i in range(0, nb_traits):
|
||||
if i == nb_traits - 1:
|
||||
prin(new_client_socket,'>'.encode("utf-8"))
|
||||
else:
|
||||
prin(new_client_socket,'='.encode("utf-8"))
|
||||
for i in range(0, 49 - nb_traits):
|
||||
prin(new_client_socket,' '.encode("utf-8"))
|
||||
prin(new_client_socket,']'.encode("utf-8"))
|
||||
|
||||
def down(rul,dir,d,prin,new_client_socket):
|
||||
import requests
|
||||
prin(new_client_socket,(dir.split('/')[-1] + d + ' : Downloading...').encode("utf-8"))
|
||||
|
||||
bresp = requests.get(rul, stream=True, verify=False)
|
||||
if (bresp.status_code != 200): # When the layer is located at a custom URL
|
||||
if(bresp.status_code == 404):
|
||||
prin(new_client_socket,('\rERROR: Cannot download layer {} [HTTP {}]'.format(dir.split('/')[-1], bresp.status_code, "")).encode("utf-8"))
|
||||
prin(new_client_socket,(str(bresp.content)).encode("utf-8"))
|
||||
return
|
||||
bresp = requests.get(layer['urls'][0], headers=auth_head, stream=True, verify=False)
|
||||
if (bresp.status_code != 200):
|
||||
prin(new_client_socket,('\rERROR: Cannot download layer {} [HTTP {}]'.format(dir.split('/')[-1], bresp.status_code, bresp.headers['Content-Length'])).encode("utf-8"))
|
||||
prin(new_client_socket,(str(bresp.content)).encode("utf-8"))
|
||||
return
|
||||
#exit(1)
|
||||
# Stream download and follow the progress
|
||||
bresp.raise_for_status()
|
||||
unit = int(bresp.headers['Content-Length']) / 50
|
||||
acc = 0
|
||||
nb_traits = 0
|
||||
progress_bar( nb_traits,dir.split('/')[-1],d,prin,new_client_socket)
|
||||
with open(".out/" + name + "_V0.2.pkg/" + dir.split("/")[-1], "wb") as file:
|
||||
for chunk in bresp.iter_content(chunk_size=8192):
|
||||
if chunk:
|
||||
file.write(chunk)
|
||||
acc = acc + 8192
|
||||
if acc > unit:
|
||||
nb_traits = nb_traits + 1
|
||||
progress_bar( nb_traits,dir.split('/')[-1],d,prin,new_client_socket)
|
||||
acc = 0
|
||||
prin(new_client_socket,("\r{}".format(dir.split('/')[-1]) + d + " : Extracting...{}".format(" "*50)).encode("utf-8")) # Ugly but works everywhere
|
||||
os.rename(".out/" + name + "_V0.2.pkg/" + dir.split("/")[-1],dir)
|
||||
|
||||
prin(new_client_socket,("\r{}".format(dir.split('/')[-1]) + d + " : Pull complete [{}]".format(bresp.headers['Content-Length'])).encode("utf-8"))
|
||||
|
||||
|
||||
|
||||
def install(new_client_socket,post,Versino,Headers,info,prin):
|
||||
import imp
|
||||
@@ -21,6 +72,14 @@ def install(new_client_socket,post,Versino,Headers,info,prin):
|
||||
for i in pkg:
|
||||
if i.split('\r')[0] == name:
|
||||
inpkg = ""
|
||||
if os.path.exists("Tools/.python") == True:
|
||||
if os.path.exists("lib/openhardwaremonitor-v0.9.6.zip") == False:
|
||||
#sh = os.popen("Tools\\.python\\python.exe -m pip install requests").read()
|
||||
#prin(new_client_socket,(sh.encode("utf-8")))
|
||||
down(rul + "/lib/openhardwaremonitor-v0.9.6.zip","lib/openhardwaremonitor-v0.9.6.zip","\t",prin,new_client_socket)
|
||||
prin(new_client_socket,("\n\r").encode("utf-8"))
|
||||
if os.path.exists("Tools/openhardwaremonitor") == False:
|
||||
os.system("Tools\\7z\\7z.exe x lib\\openhardwaremonitor-v0.9.6.zip -r -oTools\\openhardwaremonitor -aoa")
|
||||
prin(new_client_socket,("install " + name + " V0.2\n\r").encode("utf-8"))
|
||||
os.system("cp -rf .out/" + name + "_V0.2.pkg/.out/* ./")
|
||||
|
||||
@@ -38,6 +97,12 @@ def install(new_client_socket,post,Versino,Headers,info,prin):
|
||||
inpkg = ""
|
||||
if inpkg == "install":
|
||||
os.system("echo " + 'setup' + ">>server/server.ini")
|
||||
inpkg = "install"
|
||||
for i in pkg:
|
||||
if i.split('\r')[0] == 'APP':
|
||||
inpkg = ""
|
||||
if inpkg == "install":
|
||||
os.system("echo " + 'APP' + ">>server/server.ini")
|
||||
prin(new_client_socket,("重启服务\n\r").encode("utf-8"))
|
||||
if new_client_socket != "":
|
||||
#os.system("sh run.sh &")
|
||||
@@ -55,6 +120,7 @@ def out():
|
||||
os.system("cp -rf server/" + name + " .out/server/")
|
||||
os.system("cp -rf web/Ace_Admin/" + 'info' + " .out/web/Ace_Admin/")
|
||||
os.system("cp -rf server/" + 'info' + " .out/server/")
|
||||
os.system("cp -rf language/server/" + 'info' + " .out/language/server/")
|
||||
os.system("cp -rf web/Ace_Admin/" + 'setup' + " .out/web/Ace_Admin/")
|
||||
os.system("cp -rf server/" + 'setup' + " .out/server/")
|
||||
#os.system("cp -rf web/" + "info" + " .out/web/")
|
||||
@@ -74,6 +140,10 @@ def out():
|
||||
os.system("cp -rf Tools/install.bat .out/Tools/")
|
||||
os.system("cp -rf Tools/install.sh .out/Tools/")
|
||||
os.system("cp -rf Tools/install.py .out/Tools/")
|
||||
os.system("cp -rf web/Ace_Admin/" + "APP" + " .out/web/Ace_Admin/")
|
||||
os.system("rm -rf .out/web/APP/info.json")
|
||||
os.system("cp -rf server/" + "APP" + " .out/server/")
|
||||
|
||||
|
||||
rm('.out/server/','__pycache__')
|
||||
|
||||
|
||||
@@ -9,6 +9,16 @@ import hashlib
|
||||
import binascii
|
||||
import socket
|
||||
|
||||
# 加密
|
||||
def enctry(k,s):
|
||||
#k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
|
||||
encry_str = ""
|
||||
for i,j in zip(s,k):
|
||||
# i为字符,j为秘钥字符
|
||||
temp = str(ord(i)+ord(j))+'_' # 加密字符 = 字符的Unicode码 + 秘钥的Unicode码
|
||||
encry_str = encry_str + temp
|
||||
return encry_str
|
||||
|
||||
def Client(ip,dk,dir,post):
|
||||
try:
|
||||
if dk == "":
|
||||
@@ -58,7 +68,9 @@ def Client(ip,dk,dir,post):
|
||||
hhhh = hhh[1].split(b';')
|
||||
fs = open(".config/main/cookie","ab")
|
||||
fs.write(ip.encode('utf-8'))
|
||||
fs.write(b':')
|
||||
fs.write(b'\t')
|
||||
fs.write(str(dk).encode('utf-8'))
|
||||
fs.write(b'\t')
|
||||
fs.write(hhhh[0])
|
||||
fs.write(b'\n')
|
||||
fs.close()
|
||||
@@ -74,13 +86,14 @@ def Client(ip,dk,dir,post):
|
||||
return "404",e.args[-1].encode("utf-8")
|
||||
socket.setdefaulttimeout(0)
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
res = ''
|
||||
devname = ''
|
||||
devrul = ''
|
||||
devuser = ''
|
||||
devpassword = ''
|
||||
devport = ''
|
||||
post = post_data.decode("utf-8").split("&")
|
||||
for i in post:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'devname':
|
||||
@@ -97,23 +110,44 @@ def main(new_client_socket,post,Headers,info,user):
|
||||
|
||||
obj = hashlib.md5()
|
||||
md = devuser
|
||||
md += time.strftime("I %Y-%m-%d %H:%M ", time.localtime())
|
||||
md += time.strftime(" %Y-%m-%d %H:%M ", time.localtime())
|
||||
obj.update((md).encode('utf-8'))
|
||||
a = obj.hexdigest()
|
||||
a = enctry("djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd",enctry(time.strftime(" %Y-%m-%d %H:%M ", time.localtime()),devuser))
|
||||
if info['debug']:
|
||||
print(md)
|
||||
print(a)
|
||||
obj = hashlib.md5()
|
||||
md = binascii.hexlify(hashlib.pbkdf2_hmac("sha256",devpassword.encode("utf-8"),b"jcm",1000)).decode()
|
||||
md += time.strftime("I %Y-%m-%d %H:%M ", time.localtime())
|
||||
md += time.strftime(" %Y-%m-%d %H:%M ", time.localtime())
|
||||
obj.update((md).encode('utf-8'))
|
||||
b = obj.hexdigest()
|
||||
b = enctry("djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd",enctry(time.strftime(" %Y-%m-%d %H:%M ", time.localtime()),devpassword))
|
||||
if info['debug']:
|
||||
print(md)
|
||||
print(b)
|
||||
cat,cdata = Client(devrul,int(devport),'/login/dev','a=' + a + '&b=' + b)
|
||||
c = enctry("djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd",enctry(time.strftime(" %Y-%m-%d %H:%M ", time.localtime()),devname))
|
||||
cat,cdata = Client(devrul,int(devport),'/login/dev','a=' + a + '&b=' + b + '&c=' + c)
|
||||
if cat == '200':
|
||||
cdata = cdata.decode('utf-8')
|
||||
if cdata == '{"data":"login"}':
|
||||
cdata = '{"name": "'
|
||||
cdata += devname
|
||||
cdata += '","host": "'
|
||||
cdata += devrul
|
||||
cdata += '","user": "'
|
||||
cdata += devuser
|
||||
cdata += '","password": "'
|
||||
cdata += enctry(devname,devpassword)
|
||||
cdata += '","port": "'
|
||||
cdata += devport
|
||||
cdata += '"},\n'
|
||||
fs = open(".config/main/lits.json","ab")
|
||||
fs.write(cdata.encode("utf-8"))
|
||||
fs.close()
|
||||
res += "{\"data\":\"添加成功\"}"
|
||||
elif cat == '401':
|
||||
res += "{\"data\":\"用户名或密码错误\"}"
|
||||
elif cat == '404':
|
||||
data = os.popen('ping ' + devrul + ' -c 1 | grep icmp_seq').read()
|
||||
if len(data.split('icmp_seq=1 ttl=64')) == 2:
|
||||
@@ -124,7 +158,7 @@ def main(new_client_socket,post,Headers,info,user):
|
||||
cdata += '","user": "'
|
||||
cdata += devuser
|
||||
cdata += '","password": "'
|
||||
cdata += binascii.hexlify(hashlib.pbkdf2_hmac("sha256",devpassword.encode("utf-8"),b"jcm",1000)).decode()
|
||||
cdata += enctry(devname,devpassword)
|
||||
cdata += '","port": "'
|
||||
cdata += devport
|
||||
cdata += '"},\n'
|
||||
@@ -139,13 +173,32 @@ def main(new_client_socket,post,Headers,info,user):
|
||||
res += "{\"data\":\"连接超时\"}"
|
||||
else:
|
||||
res += "{\"data\":\"" + cdata + "\"}"
|
||||
|
||||
else:
|
||||
if cdata == b'getaddrinfo failed':
|
||||
res += "{\"data\":\"找不到主机\"}"
|
||||
elif cdata == b'timed out':
|
||||
res += "{\"data\":\"连接超时\"}"
|
||||
data = os.popen('ping ' + devrul + ' -c 1 | grep icmp_seq').read()
|
||||
if len(data.split('icmp_seq=1 ttl=64')) == 2:
|
||||
cdata = '{"name": "'
|
||||
cdata += devname
|
||||
cdata += '","host": "'
|
||||
cdata += devrul
|
||||
cdata += '","user": "'
|
||||
cdata += devuser
|
||||
cdata += '","password": "'
|
||||
cdata += enctry(devname,devpassword)
|
||||
cdata += '","port": "'
|
||||
cdata += devport
|
||||
cdata += '"},\n'
|
||||
fs = open(".config/main/lits.json","ab")
|
||||
fs.write(cdata.encode("utf-8"))
|
||||
fs.close()
|
||||
res += "{\"data\":\"添加成功\"}"
|
||||
else:
|
||||
res += "{\"data\":\"" + cdata.decode("utf-8") + "\"}"
|
||||
if cdata == b'getaddrinfo failed':
|
||||
res += "{\"data\":\"找不到主机\"}"
|
||||
elif cdata == b'timed out':
|
||||
res += "{\"data\":\"连接超时\"}"
|
||||
else:
|
||||
res += "{\"data\":\"" + cdata + "\"}"
|
||||
|
||||
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
||||
httpserver.httppostchar(new_client_socket,"200",res.encode("utf-8"),"application/json",Headers,info)
|
||||
@@ -9,10 +9,11 @@ import imp
|
||||
import hashlib
|
||||
import socket
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = ''
|
||||
post = RUL_CS
|
||||
for i in post:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
@@ -51,71 +52,57 @@ def main(new_client_socket,post,Headers,info,user):
|
||||
sh = imp.load_source("server/main/httpclient","server/main/httpclient.py")
|
||||
#cat,cdata = sh.Client(ii[7],int(ii[19]),"/main/biao/dev")
|
||||
cat,cdata = sh.Client(ii[7],int(ii[19]),'/main/biao/dev','')
|
||||
if cdata == b'Connection refused':
|
||||
res += '{\n "name":"Connection refused",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
if cdata == b'timed out':
|
||||
res += '{\n "name":"timed out",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
elif cdata == b'Connection refused':
|
||||
res += '{\n "name":"Connection refused",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
else:
|
||||
if cat == "404":
|
||||
res += '{\n "name":"404",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"404",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
elif cat == "502":
|
||||
res += '{\n "name":"无响应",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"无响应",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
elif cat == '401':
|
||||
|
||||
obj = hashlib.md5()
|
||||
md = ii[11]
|
||||
md += time.strftime("I %Y-%m-%d %H:%M ", time.localtime())
|
||||
obj.update((md).encode('utf-8'))
|
||||
a = obj.hexdigest()
|
||||
if info['debug']:
|
||||
print(md)
|
||||
print(a)
|
||||
obj = hashlib.md5()
|
||||
md = ii[15]
|
||||
md += time.strftime("I %Y-%m-%d %H:%M ", time.localtime())
|
||||
obj.update((md).encode('utf-8'))
|
||||
b = obj.hexdigest()
|
||||
if info['debug']:
|
||||
print(md)
|
||||
print(b)
|
||||
cat,cdata = sh.Client(ii[7],int(ii[19]),'/login/dev','a=' + a + '&b=' + b)
|
||||
data = sh.logindev(ii[3])
|
||||
cat = data[0]
|
||||
if cat == '200':
|
||||
cdata = cdata.decode("utf-8")
|
||||
if cdata == '{"data":"login"}\r\n\r\n':
|
||||
cat,cdata = sh.Client(ii[7],int(ii[19]),"/main/biao/dev")
|
||||
#cdata = cdata.decode("utf-8")
|
||||
#if cdata == '{"data":"login"}\r\n\r\n':
|
||||
cat,cdata = sh.Client(ii[7],int(ii[19]),'/main/biao/dev','')
|
||||
if cat == "404":
|
||||
res += '{\n "name":"404",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"404",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
elif cat == '502':
|
||||
res += '{\n "name":"无响应",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"无响应",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
elif cat == '401':
|
||||
res += '{\n "name":"登录失败",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"登录失败",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
elif cdata == '<!DOCTYPE html>':
|
||||
res += '{\n "name":"响应错误",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"响应错误",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
else:
|
||||
cdata = cdata.decode("utf-8")[9:]
|
||||
res += cdata
|
||||
res += '{}]} \r\n'
|
||||
else:
|
||||
cdata = cdata.split('":"')
|
||||
cdata = cdata[1].split('","')
|
||||
#else:
|
||||
#cdata = cdata.split('":"')
|
||||
#cdata = cdata[1].split('","')
|
||||
else:
|
||||
if cat == "404":
|
||||
res += '{\n "name":"404",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"404",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
elif cat == '502':
|
||||
res += '{\n "name":"无响应",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"无响应",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
elif cat == '401':
|
||||
res += '{\n "name":"登录失败",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"登录失败",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
elif cdata == '<!DOCTYPE html>':
|
||||
res += '{\n "name":"响应错误",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"响应错误",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
else:
|
||||
cdata = cdata.decode("utf-8")[9:]
|
||||
res += cdata
|
||||
res += '{}]} \r\n'
|
||||
elif cdata == '<!DOCTYPE html>':
|
||||
res += '{\n "name":"响应错误",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
res += '{\n "name":"响应错误",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n'
|
||||
else:
|
||||
cdata = cdata.decode("utf-8")[9:]
|
||||
res += cdata
|
||||
res += '{}]} \r\n'
|
||||
#new_client_socket.send('{\n "name":"无响应",\n "link":"",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n').encode("utf-8"))
|
||||
#new_client_socket.send('{\n "name":"无响应",\n "link":"info?",\n "fa":"fa-tachometer"\n},' + '{}]} \r\n').encode("utf-8"))
|
||||
res += ']} \r\n'
|
||||
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
||||
httpserver.httppostchar(new_client_socket,"200",res.encode("utf-8"),"application/json",Headers,info)
|
||||
45
server/main/biao/dev/api.py
Normal file
45
server/main/biao/dev/api.py
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
# coding=utf-8
|
||||
#!/bin/python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import imp
|
||||
import hashlib
|
||||
import socket
|
||||
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = ''
|
||||
post = RUL_CS
|
||||
for i in post:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
if tmp[0] == 'path':
|
||||
path = tmp[1]
|
||||
fs = open(".config/main/lits.json", "rb")
|
||||
hosts = fs.read().decode("utf-8").split('\n')
|
||||
|
||||
fs = open("./server/server.ini", "rb")
|
||||
pat = fs.read().decode("utf-8")
|
||||
path = pat.split('\n')
|
||||
biao = ''
|
||||
fo = 0
|
||||
for p in path:
|
||||
p = "server/" + p.split('\r')[0]
|
||||
#print(p)
|
||||
if os.path.isdir(p):
|
||||
if os.path.isfile(p + "/biao.json"):
|
||||
fs = open(p + "/biao.json", "rb")
|
||||
fo += 1
|
||||
bbt = fs.read().decode("utf-8")
|
||||
bb = bbt.split('\"')
|
||||
biao = biao + bbt + ","
|
||||
#res += biao + '{}]} \r\n'
|
||||
|
||||
|
||||
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
||||
httpserver.httppostchar(new_client_socket,"200",res.encode("utf-8"),"application/json",Headers,info)
|
||||
89
server/main/filesql.py
Normal file
89
server/main/filesql.py
Normal file
@@ -0,0 +1,89 @@
|
||||
# coding=utf-8
|
||||
#!/bin/python
|
||||
|
||||
import imp
|
||||
import os
|
||||
|
||||
def new(file,data):
|
||||
if os.path.exists(file) == False:
|
||||
fs = open(file,"wb")
|
||||
fs.write(b"filesql V1.0\r\n")
|
||||
for i in data:
|
||||
fs.write(data[i].encode('utf-8'))
|
||||
fs.write(b"\t")
|
||||
fs.write(b"\r\n")
|
||||
fs.close()
|
||||
|
||||
def catlen(file):
|
||||
if os.path.exists(file):
|
||||
fs = open(file,"rb")
|
||||
fsdata = fs.read()
|
||||
fsdata = fsdata.split(b'\r\n')
|
||||
lens = len(fsdata[2:])
|
||||
lens = lens - 1
|
||||
fs.close()
|
||||
return lens
|
||||
else:
|
||||
return 0
|
||||
def catall(file):
|
||||
if os.path.exists(file):
|
||||
fs = open(file,"rb")
|
||||
fsdata = fs.read()
|
||||
fsdata = fsdata.split(b'\r\n')
|
||||
fs.close()
|
||||
return fsdata[2:-1]
|
||||
else:
|
||||
return b''
|
||||
def cat(file,data,i):
|
||||
if os.path.exists(file):
|
||||
fs = open(file,"rb")
|
||||
fsdata = fs.read()
|
||||
fsdata = fsdata.split(b'\r\n')
|
||||
for x in fsdata[2:-1]:
|
||||
x = x.split(b'\t')
|
||||
try:
|
||||
if x[i] == data.encode('utf-8'):
|
||||
return x
|
||||
except Exception as e:
|
||||
x = x
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
def prin(file,data):
|
||||
if os.path.exists(file):
|
||||
fs = open(file,"ab")
|
||||
for i in data:
|
||||
fs.write(data[i].encode('utf-8'))
|
||||
fs.write(b'\t')
|
||||
fs.write(b'\r\n')
|
||||
fs.close()
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
def rmt(file,name,i):
|
||||
if os.path.exists(file):
|
||||
fs = open(file,"rb")
|
||||
fsw = open(file + '.tmp',"wb")
|
||||
fsdata = fs.read()
|
||||
fsdata = fsdata.split(b'\r\n')
|
||||
fsw.write(fsdata[0])
|
||||
fsw.write(b'\r\n')
|
||||
fsw.write(fsdata[1])
|
||||
fsw.write(b'\r\n')
|
||||
for xx in fsdata[2:-1]:
|
||||
x = xx.split(b'\t')
|
||||
try:
|
||||
if x[i] != name.encode('utf-8'):
|
||||
fsw.write(xx)
|
||||
fsw.write(b'\r\n')
|
||||
except Exception as e:
|
||||
fsw.write(xx)
|
||||
fsw.write(b'\r\n')
|
||||
fs.close()
|
||||
fsw.close()
|
||||
os.remove(file)
|
||||
os.rename(file + ".tmp",file)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
@@ -10,6 +10,28 @@ import binascii
|
||||
import socket
|
||||
|
||||
|
||||
# 加密
|
||||
def enctry(k,s):
|
||||
#k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
|
||||
encry_str = ""
|
||||
for i,j in zip(s,k):
|
||||
# i为字符,j为秘钥字符
|
||||
temp = str(ord(i)+ord(j))+'_' # 加密字符 = 字符的Unicode码 + 秘钥的Unicode码
|
||||
encry_str = encry_str + temp
|
||||
return encry_str
|
||||
|
||||
def dectry(k,p):
|
||||
#k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
|
||||
dec_str = ""
|
||||
for i,j in zip(p.split("_")[:-1],k):
|
||||
# i 为加密字符,j为秘钥字符
|
||||
ttemp = ord(j)
|
||||
temp = int(i)
|
||||
temp = temp - ttemp
|
||||
temp = chr(temp) # 解密字符 = (加密Unicode码字符 - 秘钥字符的Unicode码)的单字节字符
|
||||
dec_str = dec_str+temp
|
||||
return dec_str
|
||||
|
||||
def Client(ip,dk,dir,post):
|
||||
try:
|
||||
if dk == "":
|
||||
@@ -21,13 +43,84 @@ def Client(ip,dk,dir,post):
|
||||
fsdata = fsdata + 'Host: ' + ip + ':' + str(dk) + '\r\n'
|
||||
fs = open(".config/main/cookie","rb")
|
||||
for c in fs.read().decode("utf-8").split('\n'):
|
||||
if c.split(':')[0] == ip:
|
||||
fsdata = fsdata + 'Cookie: ' + c.split(':')[1] + '\r\n'
|
||||
if c.split('\t')[0] == ip:
|
||||
fsdata = fsdata + 'Cookie: ' + c.split('\t')[2] + '\r\n'
|
||||
client.connect((ip,dk))
|
||||
client.send((fsdata + '\r\n' + post).encode("utf-8"))
|
||||
data = b''
|
||||
run = 0
|
||||
d = ''
|
||||
while run == 0:
|
||||
try:
|
||||
d = client.recv(1024)
|
||||
except Exception as e:
|
||||
#print(e.args)
|
||||
#if len(d) != 1024:
|
||||
# run = 1
|
||||
return "502",e.args[-1].encode("utf-8")
|
||||
if data == b'':
|
||||
data = b"404\r\n\r\n404"
|
||||
else:
|
||||
run = 1
|
||||
if e.args[0] == 'timed out':
|
||||
d = False
|
||||
#break
|
||||
if d:
|
||||
data = data + d
|
||||
if dir == '/assets/info':
|
||||
if data[-1] == '}':
|
||||
run = 1
|
||||
else:
|
||||
run = 1
|
||||
#print(data)
|
||||
client.close()
|
||||
if data[:len(b'HTTP/1.1 200')] == b'HTTP/1.1 200':
|
||||
catdatah = data.split(b'\r\n\r\n')[0].split(b'\r\n')
|
||||
for hh in catdatah[1:]:
|
||||
hhh = hh.split(b': ')
|
||||
if hhh[0] == b'set-Cookie':
|
||||
hhhh = hhh[1].split(b';')
|
||||
fs = open(".config/main/cookie","ab")
|
||||
fs.write(ip.encode('utf-8'))
|
||||
fs.write(b'\t')
|
||||
fs.write(str(dk).encode('utf-8'))
|
||||
fs.write(b'\t')
|
||||
fs.write(hhhh[0])
|
||||
fs.write(b'\n')
|
||||
fs.close()
|
||||
#print(hhh)
|
||||
datad = b''
|
||||
for ddd in data.split(b'\r\n\r\n')[1:]:
|
||||
datad = datad + b'\r\n\r\n' + ddd
|
||||
return '200',datad[4:]
|
||||
if data[:len(b'HTTP/1.1 ')] == b'HTTP/1.1 ':
|
||||
return data[len(b'HTTP/1.1 '):len(b'HTTP/1.1 ') + 3].decode('utf-8'),data[len(b'HTTP/1.1 '):len(b'HTTP/1.1 ') + 3]
|
||||
except Exception as e:
|
||||
#print(e.args)
|
||||
return "404",e.args[-1].encode("utf-8")
|
||||
socket.setdefaulttimeout(0)
|
||||
return "502","502".encode("utf-8")
|
||||
|
||||
def Clientchar(ip,dk,dir,post):
|
||||
try:
|
||||
if dk == "":
|
||||
dk = 80
|
||||
socket.setdefaulttimeout(5)
|
||||
client = socket.socket() #定义协议类型,相当于生命socket类型,同时生成socket连接对象
|
||||
#client.connect(('openwrt.lan',80))
|
||||
fsdata = 'POST ' + dir + ' HTTP/1.1\r\n'
|
||||
if post == b'':
|
||||
fsdata = 'GET ' + dir + ' HTTP/1.1\r\n'
|
||||
fsdata = fsdata + 'Host: ' + ip + ':' + str(dk) + '\r\n'
|
||||
fs = open(".config/main/cookie","rb")
|
||||
for c in fs.read().decode("utf-8").split('\n'):
|
||||
if c.split('\t')[0] == ip:
|
||||
fsdata = fsdata + 'Cookie: ' + c.split('\t')[2] + '\r\n'
|
||||
client.connect((ip,dk))
|
||||
client.send((fsdata + '\r\n').encode("utf-8") + post)
|
||||
data = b''
|
||||
run = 0
|
||||
d = ''
|
||||
while run == 0:
|
||||
try:
|
||||
d = client.recv(1024)
|
||||
@@ -59,18 +152,49 @@ def Client(ip,dk,dir,post):
|
||||
hhhh = hhh[1].split(b';')
|
||||
fs = open(".config/main/cookie","ab")
|
||||
fs.write(ip.encode('utf-8'))
|
||||
fs.write(b':')
|
||||
fs.write(b'\t')
|
||||
fs.write(str(dk).encode('utf-8'))
|
||||
fs.write(b'\t')
|
||||
fs.write(hhhh[0])
|
||||
fs.write(b'\n')
|
||||
fs.close()
|
||||
print(hhh)
|
||||
datad = b''
|
||||
for ddd in data.split(b'\r\n\r\n')[1:]:
|
||||
datad = datad + b'\r\n\r\n' + ddd
|
||||
return '200',datad[4:]
|
||||
ma = data[len(b'HTTP/1.1 '):len(b'HTTP/1.1 ') + 3].decode('utf-8')
|
||||
dat = data[len(data.split(b'\r\n\r\n')[0]) + 4:]
|
||||
jvav = '6'
|
||||
h = data.split(b'\r\n\r\n')[0].split(b'\r\n')
|
||||
for i in h:
|
||||
i = i.split(b':')
|
||||
if i[0] == b'Content-Type':
|
||||
jvav = i[1]
|
||||
return ma,dat,jvav.decode('utf-8')
|
||||
if data[:len(b'HTTP/1.1 ')] == b'HTTP/1.1 ':
|
||||
return data[len(b'HTTP/1.1 '):len(b'HTTP/1.1 ') + 3].decode('utf-8'),data[len(b'HTTP/1.1 '):len(b'HTTP/1.1 ') + 3]
|
||||
ma = data[len(b'HTTP/1.1 '):len(b'HTTP/1.1 ') + 3].decode('utf-8')
|
||||
dat = data[len(data.split(b'\r\n\r\n')[0]) + 4:]
|
||||
jvav = '6'
|
||||
h = data.split(b'\r\n\r\n')[0].split(b'\r\n')
|
||||
for i in h:
|
||||
i = i.split(b':')
|
||||
if i[0] == b'Content-Type':
|
||||
jvav = i[1]
|
||||
return ma,dat,jvav.decode('utf-8')
|
||||
except Exception as e:
|
||||
#print(e.args)
|
||||
return "404",e.args[-1].encode("utf-8")
|
||||
return "500",e.args[-1].encode("utf-8"),'text/html'
|
||||
socket.setdefaulttimeout(0)
|
||||
return "502",b"502",'text/html'
|
||||
|
||||
def logindev(devname):
|
||||
fs = open(".config/main/lits.json", "rb")
|
||||
hosts = fs.read().decode("utf-8").split('\n')
|
||||
for i in range(len(hosts)-1):
|
||||
ii = hosts[i].split('"')
|
||||
if ii[3] == devname:
|
||||
dd = ''
|
||||
a = ii[11]
|
||||
b = ii[15]
|
||||
b = dectry(ii[3],b)
|
||||
a = enctry("djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd",enctry(time.strftime(" %Y-%m-%d %H:%M ", time.localtime()),a))
|
||||
b = enctry("djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd",enctry(time.strftime(" %Y-%m-%d %H:%M ", time.localtime()),b))
|
||||
cdata = Client(ii[7],int(ii[19]),'/login/dev','a=' + a + '&b=' + b)
|
||||
return cdata
|
||||
@@ -53,7 +53,12 @@ def websockrx(new_client_socket):
|
||||
return datas,Opcode
|
||||
def websockfs(new_client_socket,data):
|
||||
data = b'' + data
|
||||
if len(data.decode("utf-8")) > 101:
|
||||
lens = 0
|
||||
try:
|
||||
lens = len(data.decode("utf-8"))
|
||||
except Exception as e:
|
||||
lens = len(data)
|
||||
if lens > 101:
|
||||
data = data.decode("utf-8")
|
||||
cd = 0
|
||||
while cd != len(data):
|
||||
@@ -79,6 +84,42 @@ def websockfs(new_client_socket,data):
|
||||
datab += bytes.fromhex(len_)
|
||||
new_client_socket.send(datab)
|
||||
new_client_socket.send(data)
|
||||
def websockfsstr(new_client_socket,data):
|
||||
data = b'' + data
|
||||
datalen = len(data)
|
||||
if datalen > 101:
|
||||
data = data.decode("utf-8")
|
||||
datalen = ''
|
||||
for i in data:
|
||||
datalen += i
|
||||
if len(datalen.encode("utf-8")) > 90:
|
||||
websockfsstr(new_client_socket,datalen.encode("utf-8"))
|
||||
datalen = ''
|
||||
websockfsstr(new_client_socket,datalen.encode("utf-8"))
|
||||
#cd = 0
|
||||
#while cd != len(data):
|
||||
# if len(data) < (cd + 100):
|
||||
# if cd == 0:
|
||||
# websockfsstr(new_client_socket,data[cd:cd + 100].encode("utf-8"))
|
||||
# else:
|
||||
# websockfsstr(new_client_socket,b'' + data[cd:cd + 100].encode("utf-8"))
|
||||
# cd = len(data)
|
||||
# else:
|
||||
# if cd == 0:
|
||||
# websockfsstr(new_client_socket,data[cd:cd + 100].encode("utf-8"))
|
||||
# else:
|
||||
# websockfsstr(new_client_socket,b'' + data[cd:cd + 100].encode("utf-8"))
|
||||
# cd = cd + 100
|
||||
else:
|
||||
datab = b'12'
|
||||
if len(data) < 126:
|
||||
datab = bytes.fromhex('81')
|
||||
len_ = hex(len(data))[2:]
|
||||
if len(len_) == 1:
|
||||
len_ = '0' + len_
|
||||
datab += bytes.fromhex(len_)
|
||||
new_client_socket.send(datab)
|
||||
new_client_socket.send(data)
|
||||
def websockend(new_client_socket,data):
|
||||
#websockfs(new_client_socket,b'2{"d":"disableLeaveAlert"}')
|
||||
data = b'0' + data
|
||||
@@ -111,11 +152,44 @@ def websockend(new_client_socket,data):
|
||||
datab += bytes.fromhex('E8')
|
||||
new_client_socket.send(datab)
|
||||
time.sleep(0.05)
|
||||
new_client_socket.close()
|
||||
def websockendstr(new_client_socket,data):
|
||||
#websockfs(new_client_socket,b'2{"d":"disableLeaveAlert"}')
|
||||
data = b'' + data
|
||||
if len(data.decode("utf-8")) > 101:
|
||||
data = data.decode("utf-8")
|
||||
cd = 0
|
||||
while cd != len(data):
|
||||
websockfsstr(new_client_socket,data[cd:cd + 100].encode("utf-8"))
|
||||
if len(data) < (cd + 100):
|
||||
cd = len(data)
|
||||
else:
|
||||
cd = cd + 100
|
||||
else:
|
||||
datab = b'12'
|
||||
if len(data) < 126:
|
||||
datab = bytes.fromhex('81')
|
||||
#datab += bytes.fromhex('03')
|
||||
#datab += bytes.fromhex('30')
|
||||
#datab += bytes.fromhex('0D')
|
||||
#datab += bytes.fromhex('0A')
|
||||
len_ = hex(len(data))[2:]
|
||||
if len(len_) == 1:
|
||||
len_ = '0' + len_
|
||||
datab += bytes.fromhex(len_)
|
||||
new_client_socket.send(datab)
|
||||
new_client_socket.send(data)
|
||||
datab = bytes.fromhex('88')
|
||||
datab += bytes.fromhex('02')
|
||||
datab += bytes.fromhex('03')
|
||||
datab += bytes.fromhex('E8')
|
||||
new_client_socket.send(datab)
|
||||
time.sleep(0.05)
|
||||
def websocktime(new_client_socket):
|
||||
datab = bytes.fromhex('89')
|
||||
datab += bytes.fromhex('00')
|
||||
new_client_socket.send(datab)
|
||||
time.sleep(0.2)
|
||||
time.sleep(0.01)
|
||||
return websockrx(new_client_socket)
|
||||
|
||||
def websockinit(new_client_socket,Headers,info):
|
||||
@@ -143,11 +217,12 @@ def websockinit(new_client_socket,Headers,info):
|
||||
he = info["Headers"]
|
||||
he += "Upgrade: websocket\r\n"
|
||||
he += "Connection: Upgrade\r\n"
|
||||
he += "Connection: close\r\n"
|
||||
he += "Sec-WebSocket-Accept: " + SecWebSocketAccept + "\r\n"
|
||||
if SecWebSocketProtocol != '':
|
||||
he += "Sec-Websocket-Protocol: " + SecWebSocketProtocol + "\r\n"
|
||||
he = he + '\r\n'
|
||||
he = "HTTP/1.1 101 Switching Protocols \r\n" + he
|
||||
he = "HTTP/1.0 101 Switching Protocols \r\n" + he
|
||||
new_client_socket.send(he.encode("utf-8"))
|
||||
if SecWebSocketProtocol != '':
|
||||
#time.sleep(0.5)
|
||||
@@ -219,11 +294,11 @@ def tcplink(sock, addr , logs, info,void):
|
||||
l = len(l)
|
||||
if recv_tcp[:4] == b'POST':
|
||||
if l > 1:
|
||||
os.system("./error.sh '" + "POST" + "'")
|
||||
#os.system("./error.sh '" + "POST" + "'")
|
||||
recv_data = recv_tcp.split(b'\r\n\r\n')
|
||||
Headers = recv_data[0].decode("utf-8")
|
||||
Headers = Headers.split('\r\n')
|
||||
os.system("./error.sh '" + catHeaders("Content-Type",Headers) + "'")
|
||||
#os.system("./error.sh '" + catHeaders("Content-Type",Headers) + "'")
|
||||
if catHeaders("Content-Type",Headers)[:len("application/x-www-form-urlencoded")] == "application/x-www-form-urlencoded":
|
||||
os.system("./error.sh '" + catHeaders("Transfer-Encoding",Headers) + "'")
|
||||
if catHeaders("Transfer-Encoding",Headers)[:len("Transfer-Encoding")] == "chunked":
|
||||
@@ -268,9 +343,9 @@ def tcplink(sock, addr , logs, info,void):
|
||||
break
|
||||
|
||||
|
||||
#36\r\n
|
||||
#name=admin password=admin type=username checkbox=false
|
||||
#\r\n0\r\n\r\n
|
||||
#36\r\n
|
||||
#name=admin password=admin type=username checkbox=false
|
||||
#\r\n0\r\n\r\n
|
||||
else:
|
||||
recv_tcp += new_client_socket.recv(8192)
|
||||
else:
|
||||
@@ -298,9 +373,13 @@ def tcplink(sock, addr , logs, info,void):
|
||||
RUL_CS = Headers[0].split(' ')
|
||||
RUL_CS = RUL_CS[1].split('?')
|
||||
if len(RUL_CS) == 1:
|
||||
RUL_CS = ''
|
||||
RUL_CS = 'link=',''
|
||||
else:
|
||||
RUL_CS = http_to_char(RUL_CS[1])
|
||||
RUL_CS = RUL_CS[1]
|
||||
RUL_CS = RUL_CS.split("&")
|
||||
for i in range(0,len(RUL_CS)):
|
||||
RUL_CS[i] = http_to_char(RUL_CS[i])
|
||||
#RUL_CS = http_to_char(RUL_CS[1])
|
||||
pr = (time.strftime("I %Y-%m-%d %H:%M:%S ", time.localtime()).encode("utf-8"))
|
||||
pr += ((str(client_addr) + ' ' + '' + Headers[0].split(' ')[1]).encode("utf-8"))
|
||||
logs("info",info,pr + b"\r\n")
|
||||
|
||||
@@ -6,7 +6,8 @@ import os
|
||||
import imp
|
||||
import hashlib
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
post = RUL_CS
|
||||
if len(post) == 3:
|
||||
link = ''
|
||||
sw = ''
|
||||
|
||||
295
server/run.py
295
server/run.py
@@ -12,12 +12,24 @@ import psutil
|
||||
import traceback
|
||||
import threading
|
||||
|
||||
def dectry(k,p):
|
||||
#k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
|
||||
dec_str = ""
|
||||
for i,j in zip(p.split("_")[:-1],k):
|
||||
# i 为加密字符,j为秘钥字符
|
||||
ttemp = ord(j)
|
||||
temp = int(i)
|
||||
temp = temp - ttemp
|
||||
temp = chr(temp) # 解密字符 = (加密Unicode码字符 - 秘钥字符的Unicode码)的单字节字符
|
||||
dec_str = dec_str+temp
|
||||
return dec_str
|
||||
|
||||
def rom(info):
|
||||
i=0
|
||||
retlist1=[]
|
||||
rom=0
|
||||
disks=1
|
||||
if info['OS'] == "Linux":
|
||||
'''if info['OS'] == "Linux":
|
||||
romsh = os.popen("LANG=en_US df -h")
|
||||
list = romsh.read().split("\n")
|
||||
ilen = len(list)
|
||||
@@ -46,12 +58,15 @@ def rom(info):
|
||||
rom = diskinfo
|
||||
i=i+1
|
||||
disks += 1
|
||||
else:
|
||||
list = psutil.disk_partitions()
|
||||
else:'''
|
||||
if True:
|
||||
list = psutil.disk_partitions(False)
|
||||
ilen = len(list)
|
||||
while i < ilen:
|
||||
if list[i].mountpoint == "/boot":
|
||||
i += 1
|
||||
elif list[i].device == "/dev/zram1":
|
||||
i += 1
|
||||
else:
|
||||
try:
|
||||
diskinfo = psutil.disk_usage(list[i].mountpoint)
|
||||
@@ -92,7 +107,7 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
user = tmp5[1]
|
||||
if RUL == "/favicon.ico":
|
||||
if post_data == b'':
|
||||
post = RUL_CS.split('&')
|
||||
post = RUL_CS
|
||||
else:
|
||||
post = post_data.decode("utf-8").split('&')
|
||||
httpserver.httppostfile(new_client_socket,"200","./web" + RUL,True,Headers,info)
|
||||
@@ -101,6 +116,7 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
ma = "200"
|
||||
if RUL == "/login":
|
||||
if Headers[0][:4] == "POST":
|
||||
import datetime
|
||||
post = post_data.decode("utf-8").split('&')
|
||||
name = ""
|
||||
password = ""
|
||||
@@ -130,9 +146,15 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
if fs_ == "":
|
||||
fs_ = fs_
|
||||
else:
|
||||
session_ = session_ + fs_ + ("\n")
|
||||
fs__ = fs_.split(',')
|
||||
import datetime
|
||||
ifstr = (datetime.datetime.now()).strftime("%a, %d %b %Y %H:%M:%S GMT")
|
||||
ifstr = (datetime.datetime.now()).strftime(" %d %b %Y ")
|
||||
fistr = fs__[3][:0-len("23:40:54 GMT")]
|
||||
if fistr == ifstr:
|
||||
session_ = session_ + fs_ + ("\n")
|
||||
ifstr = (datetime.datetime.now()+datetime.timedelta(days=1)).strftime(" %d %b %Y ")
|
||||
if fistr == ifstr:
|
||||
session_ = session_ + fs_ + ("\n")
|
||||
cookie_date = (datetime.datetime.now()+datetime.timedelta(days=1)).strftime("%a, %d %b %Y %H:%M:%S GMT")
|
||||
#time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.localtime(time.strptime("1","%d")))
|
||||
|
||||
@@ -146,15 +168,24 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
user_write = ''
|
||||
for fs_ in fs_session:
|
||||
if fs_ == "sessinon":
|
||||
fs_ = fs_
|
||||
fs_rr = fs_rr
|
||||
else:
|
||||
if fs_ == "":
|
||||
fs_ = fs_
|
||||
else:
|
||||
fs__ = fs_.split(",")
|
||||
fs__ = fs_.split(',')
|
||||
ifstr = (datetime.datetime.now()).strftime("%a, %d %b %Y %H:%M:%S GMT")
|
||||
ifstr = (datetime.datetime.now()).strftime(" %d %b %Y ")
|
||||
fistr = fs__[3][:0-len("23:40:54 GMT")]
|
||||
if fistr == ifstr:
|
||||
session_ = session_ + fs_ + ("\n")
|
||||
ifstr = (datetime.datetime.now()+datetime.timedelta(days=1)).strftime(" %d %b %Y ")
|
||||
if fistr == ifstr:
|
||||
session_ = session_ + fs_ + ("\n")
|
||||
res = res + "set-Cookie: Cluster_management_Jiang=" + cok + "; SameSite=Lax; Expires=" + cookie_date
|
||||
fs_user = open(".config/sessino","a")
|
||||
fs_user.write(cok + "," + name + "," + cookie_date + "\n")
|
||||
fs_user = open(".config/sessino","wb")
|
||||
fs_user.write(fs_rr.decode('utf-8'))
|
||||
fs_user.write((cok + "," + name + "," + cookie_date + "\n").decode('utf-8'))
|
||||
fs_user.close()
|
||||
else:
|
||||
res = res + "set-Cookie: Cluster_management_Jiang=" + cok + "; SameSite=Lax;"# Expires=" + cookie_date + "\r\n"
|
||||
@@ -163,7 +194,97 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
else:
|
||||
res = "application/json" + res
|
||||
httpserver.httppostchar(new_client_socket,"200","{\"data\":\"用户名或密码错误\"}".encode("utf-8"),res,Headers,info)
|
||||
|
||||
return 0
|
||||
elif RUL == "/login/dev":
|
||||
if Headers[0][:4] == "POST":
|
||||
post = post_data.decode("utf-8").split('&')
|
||||
a = ''
|
||||
b = ''
|
||||
c = ''
|
||||
for p in post:
|
||||
pp = p.split("=")
|
||||
if pp[0] == "a":
|
||||
a = pp[1]
|
||||
if pp[0] == "b":
|
||||
b = pp[1]
|
||||
if pp[0] == "c":
|
||||
c = pp[1]
|
||||
b = dectry("djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd",b)
|
||||
b = dectry(time.strftime(" %Y-%m-%d %H:%M ", time.localtime()),b)
|
||||
a = dectry("djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd",a)
|
||||
a = dectry(time.strftime(" %Y-%m-%d %H:%M ", time.localtime()),a)
|
||||
|
||||
tools = imp.load_source("Tools/Tools.py","Tools/Tools.py")
|
||||
tools = tools.ifuser(a,b)
|
||||
|
||||
res = ""
|
||||
if tools == "yes":
|
||||
import datetime
|
||||
cok = ''
|
||||
for x in range(32):
|
||||
cok = cok + random.choice("0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLLZXCVBNM")
|
||||
fs_rr = session_
|
||||
fs_session = fs_rr.split('\n')
|
||||
for fs_ in fs_session:
|
||||
if fs_ == "sessinon":
|
||||
session_ = (fs_)
|
||||
session_ = session_ + ("\n")
|
||||
else:
|
||||
if fs_ == "":
|
||||
fs_ = fs_
|
||||
else:
|
||||
|
||||
fs__ = fs_.split(',')
|
||||
ifstr = (datetime.datetime.now()).strftime("%a, %d %b %Y %H:%M:%S GMT")
|
||||
ifstr = (datetime.datetime.now()).strftime(" %d %b %Y ")
|
||||
fistr = fs__[3][:0-len("23:40:54 GMT")]
|
||||
if fistr == ifstr:
|
||||
session_ = session_ + fs_ + ("\n")
|
||||
ifstr = (datetime.datetime.now()+datetime.timedelta(days=1)).strftime(" %d %b %Y ")
|
||||
if fistr == ifstr:
|
||||
session_ = session_ + fs_ + ("\n")
|
||||
cookie_date = (datetime.datetime.now()+datetime.timedelta(days=1)).strftime("%a, %d %b %Y %H:%M:%S GMT")
|
||||
#time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.localtime(time.strptime("1","%d")))
|
||||
|
||||
session_ = session_ + cok + "," + a + "," + cookie_date + "\n"
|
||||
res = res + "set-Cookie: Cluster_management_Jiang=" + cok + "; SameSite=Lax;"# Expires=" + cookie_date + "\r\n"
|
||||
res = "application/json\r\n" + res
|
||||
httpserver.httppostchar(new_client_socket,"200",b"{\"data\":\"login\"}",res,Headers,info)
|
||||
return 0
|
||||
elif RUL == "/assets/info":
|
||||
res = ''
|
||||
sent_now = psutil.net_io_counters().bytes_sent
|
||||
recv_now = psutil.net_io_counters().bytes_recv
|
||||
sent = (sent_now - sent_before)/1024/(time.time()-ttime) # 算出1秒后的差值
|
||||
recv = (recv_now - recv_before)/1024/(time.time()-ttime)
|
||||
ttime=time.time()
|
||||
sent_before=sent_now
|
||||
recv_before=recv_now
|
||||
res += '"api": "1",'
|
||||
if info['OS'] == "Linux":
|
||||
res += '"safe": "--",'
|
||||
else:
|
||||
res += '"safe": "--",'
|
||||
res += '"cpu": "'+str(psutil.cpu_percent(None))+'",'
|
||||
res += '"ram": "'+str(psutil.virtual_memory().percent)+'",'
|
||||
res += '"rom": "'+rom(info)+'",'
|
||||
tx = ""
|
||||
rx = ""
|
||||
if sent < 1000:
|
||||
tx = '{0}KB/s'.format("%.2f"%sent)
|
||||
else:
|
||||
sent = sent / 1024
|
||||
tx = '{0}MB/s'.format("%.2f"%sent)
|
||||
if recv < 1000:
|
||||
rx = '{0}KB/s'.format("%.2f"%recv)
|
||||
else:
|
||||
recv = recv / 1024
|
||||
rx = '{0}MB/s'.format("%.2f"%recv)
|
||||
res += '"tx": "'+tx+'",'
|
||||
res += '"rx": "'+rx+'"'
|
||||
res += '}'
|
||||
httpserver.httppostchar(new_client_socket,"200",res.encode('utf-8'),"application/json",Headers,info)
|
||||
return 0
|
||||
if RUL[:len("/assets")] != "/assets":
|
||||
RUL = "/login.html"
|
||||
for h in Headers:
|
||||
@@ -176,10 +297,67 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
else:
|
||||
my_file = "./web/" + info["theme"] + RUL
|
||||
link = ''
|
||||
for i in RUL_CS.split('&'):
|
||||
_link = ''
|
||||
__link = ''
|
||||
for i in RUL_CS:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
else:
|
||||
if tmp[0] == '_link':
|
||||
__link = tmp[1]
|
||||
_link += "link=" + tmp[1] + '\n'
|
||||
else:
|
||||
_link += i + '\n'
|
||||
if (link != '') and (link != '127.0.0.1'):
|
||||
httpclient = imp.load_source("server/main/httpclient","server/main/httpclient.py")
|
||||
#httpclient.Client(ii[7],int(ii[19]),'/login/dev','')
|
||||
fs = open(".config/main/lits.json", "rb")
|
||||
hosts = fs.read().decode("utf-8").split('\n')
|
||||
for i in range(len(hosts)-1):
|
||||
ii = hosts[i].split('"')
|
||||
if ii[3] == link:
|
||||
dd = ''
|
||||
for ddd in RUL_CS:
|
||||
tmp = ddd.split('=')
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
dd += '&_' + ddd
|
||||
else:
|
||||
dd += '&' + ddd
|
||||
data = httpclient.Clientchar(ii[7],int(ii[19]),RUL + "?link=127.0.0.1" + dd,post_data)
|
||||
if data[0] == "401":
|
||||
httpclient.logindev(ii[3])
|
||||
data = httpclient.Clientchar(ii[7],int(ii[19]),RUL + "?link=127.0.0.1" + dd,post_data)
|
||||
if data[0] == "401":
|
||||
strr = {}
|
||||
strr["err"] = data[1].decode('utf-8')
|
||||
|
||||
php = imp.load_source("server/main/php.py","server/main/php.py")
|
||||
data = php.php(new_client_socket,"post","/blink.php",user,Headers,info,strr)
|
||||
httpserver.httppostchar(new_client_socket,"401",data.encode("utf-8"),"text/html;charset=UTF-8",Headers,info)
|
||||
return 0
|
||||
if data[0] == "500":
|
||||
strr = {}
|
||||
strr["err"] = data[1].decode('utf-8')
|
||||
|
||||
php = imp.load_source("server/main/php.py","server/main/php.py")
|
||||
data = php.php(new_client_socket,"post","/500.php",user,Headers,info,strr)
|
||||
httpserver.httppostchar(new_client_socket,"500",data.encode("utf-8"),"text/html;charset=UTF-8",Headers,info)
|
||||
return 0
|
||||
if data[0] == "502":
|
||||
strr = {}
|
||||
strr["err"] = data[1].decode('utf-8')
|
||||
|
||||
php = imp.load_source("server/main/php.py","server/main/php.py")
|
||||
data = php.php(new_client_socket,"post","/500.php",user,Headers,info,strr)
|
||||
httpserver.httppostchar(new_client_socket,"500",data.encode("utf-8"),"text/html;charset=UTF-8",Headers,info)
|
||||
return 0
|
||||
httpserver.httppostchar(new_client_socket,data[0],data[1],data[2],Headers,info)
|
||||
return 0
|
||||
#link = _link
|
||||
if __link != '':
|
||||
RUL_CS = _link.split('\n')[:-1]
|
||||
if os.path.isdir(my_file):
|
||||
if os.path.isfile("./web/" + info["theme"] + RUL + "/index.php"):
|
||||
RUL = RUL + "/index.php"
|
||||
@@ -192,7 +370,7 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
if tmp2[-1] == 'php':
|
||||
php = imp.load_source("server/main/php.py","server/main/php.py")
|
||||
if post_data == b'':
|
||||
post = RUL_CS.split('&')
|
||||
post = RUL_CS
|
||||
else:
|
||||
post = post_data.decode("utf-8").split('&')
|
||||
data = php.php(new_client_socket,post,RUL,user,Headers,info,strr)
|
||||
@@ -203,8 +381,43 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
else:
|
||||
if RUL == "/login":
|
||||
httpserver.httppostchar(new_client_socket,"200",b"{\"data\":\"login\"}","application/json",Headers,info)
|
||||
elif RUL == "/login/dev":
|
||||
httpserver.httppostchar(new_client_socket,"200",b"{\"data\":\"login\"}","application/json",Headers,info)
|
||||
elif RUL == "/token":
|
||||
httpserver.httppostchar(new_client_socket,"200",b"{\"token\":\"\"}","application/json",Headers,info)
|
||||
elif RUL == "/assets/info":
|
||||
res = ''
|
||||
sent_now = psutil.net_io_counters().bytes_sent
|
||||
recv_now = psutil.net_io_counters().bytes_recv
|
||||
sent = (sent_now - sent_before)/1024/(time.time()-ttime) # 算出1秒后的差值
|
||||
recv = (recv_now - recv_before)/1024/(time.time()-ttime)
|
||||
ttime=time.time()
|
||||
sent_before=sent_now
|
||||
recv_before=recv_now
|
||||
res += '"api": "1",'
|
||||
if info['OS'] == "Linux":
|
||||
res += '"safe": "--",'
|
||||
else:
|
||||
res += '"safe": "--",'
|
||||
res += '"cpu": "'+str(psutil.cpu_percent(None))+'",'
|
||||
res += '"ram": "'+str(psutil.virtual_memory().percent)+'",'
|
||||
res += '"rom": "'+rom(info)+'",'
|
||||
tx = ""
|
||||
rx = ""
|
||||
if sent < 1000:
|
||||
tx = '{0}KB/s'.format("%.2f"%sent)
|
||||
else:
|
||||
sent = sent / 1024
|
||||
tx = '{0}MB/s'.format("%.2f"%sent)
|
||||
if recv < 1000:
|
||||
rx = '{0}KB/s'.format("%.2f"%recv)
|
||||
else:
|
||||
recv = recv / 1024
|
||||
rx = '{0}MB/s'.format("%.2f"%recv)
|
||||
res += '"tx": "'+tx+'",'
|
||||
res += '"rx": "'+rx+'"'
|
||||
res += '}'
|
||||
httpserver.httppostchar(new_client_socket,"200",res.encode("utf-8"),"application/json",Headers,info)
|
||||
elif RUL == "/main/info":
|
||||
res = ''
|
||||
if os.path.isfile(".config/main/lits.json"):
|
||||
@@ -248,11 +461,12 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
res += '"tx": "'+tx+'",'
|
||||
res += '"rx": "'+rx+'"'
|
||||
res += '}'
|
||||
#httpserver.httppostchar(new_client_socket,"200",res.encode('utf-8'),"application/json",Headers,info)
|
||||
else:
|
||||
url = "http://" + ii[7] + ":8889/assets/info"
|
||||
sh = imp.load_source("server/main/httpclient","server/main/httpclient.py")
|
||||
#cat,cdata = sh.Client(ii[7],int(ii[19]),"/assets/info")
|
||||
cat,cdata = sh.Client(ii[7],int(ii[19]),'/login/dev','')
|
||||
cat,cdata = sh.Client(ii[7],int(ii[19]),'/assets/info','')
|
||||
if cat == "200":
|
||||
try:
|
||||
#response = urllib.request.urlopen(url, timeout=1)
|
||||
@@ -260,12 +474,12 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
#html = sh.Client("pi.lan",8889,"/assets/info")
|
||||
res += '"api": "1",'
|
||||
data = cdata.decode("utf-8").split('"')
|
||||
res += '"safe": "'+data[3]+'",'
|
||||
res += '"cpu": "'+data[7]+'",'
|
||||
res += '"ram": "'+data[11]+'",'
|
||||
res += '"rom": "'+data[15]+'",'
|
||||
res += '"tx": "'+data[19]+'",'
|
||||
res += '"rx": "'+data[23]+'"'
|
||||
res += '"safe": "'+data[7]+'",'
|
||||
res += '"cpu": "'+data[11]+'",'
|
||||
res += '"ram": "'+data[15]+'",'
|
||||
res += '"rom": "'+data[19]+'",'
|
||||
res += '"tx": "'+data[23]+'",'
|
||||
res += '"rx": "'+data[27]+'"'
|
||||
res += '}'
|
||||
except:
|
||||
res += '"api": "0",'
|
||||
@@ -320,27 +534,17 @@ def httpserver_void(new_client_socket,RUL,RUL_CS,post_data,Headers,logs,info):
|
||||
else:
|
||||
my_file = "./server" + RUL + "/api.py"
|
||||
if os.path.isfile(my_file):
|
||||
if post_data == b'':
|
||||
post = RUL_CS.split('&')
|
||||
else:
|
||||
rul_ = post_data.decode("utf-8").split('%')
|
||||
post_data = b''
|
||||
for y in range(len(rul_)):
|
||||
if y == 0:
|
||||
post_data = rul_[y].encode("utf-8")
|
||||
elif y == (len(rul_)+1):
|
||||
y=y
|
||||
else:
|
||||
hex = rul_[y][:2]
|
||||
charb = bytes.fromhex(hex)
|
||||
post_data = post_data + charb
|
||||
if len(rul_[y]) > 2:
|
||||
post_data = post_data + rul_[y][2:].encode("utf-8")
|
||||
#RUL_CS = RUL_CS.decode("utf-8")
|
||||
post = post_data.decode("utf-8").split('&')
|
||||
|
||||
#if post_data == b'':
|
||||
# post = RUL_CS
|
||||
#else:
|
||||
#post_data = post_data.split(b'&')
|
||||
#for i in range(0,len(post_data)):
|
||||
# post_data[i] = httpserver.http_to_char(post_data[i].decode("utf-8"))
|
||||
# for i in
|
||||
|
||||
#post = post_data
|
||||
sh = imp.load_source(RUL + "/api.py",my_file)
|
||||
sh.main(new_client_socket,post,Headers,info,user)
|
||||
sh.main(new_client_socket,RUL_CS,post_data,Headers,info,user)
|
||||
else:
|
||||
strr = {}
|
||||
strr["err"] = '404'
|
||||
@@ -399,9 +603,9 @@ def logsprnts(live,info,data):
|
||||
os.system("./error.sh '" + data.decode("utf-8") + "'")
|
||||
except Exception as e:
|
||||
print()
|
||||
print(live,end=' ')
|
||||
print("\033[31m " + live,end=' ')
|
||||
print(data,end='')
|
||||
print('')
|
||||
print('\033[0m')
|
||||
lock.release()
|
||||
def logsprnt(live,info,data):
|
||||
t = threading.Thread(target=logsprnts, args=(live,info,data))
|
||||
@@ -477,4 +681,5 @@ def main(info):
|
||||
if res == -9:
|
||||
tcp_server_socket.close()
|
||||
run = imp.load_source('run',"server/run.py")
|
||||
run.main(info)
|
||||
run.main(info)
|
||||
#os.system("run.sh || run.bat")
|
||||
@@ -103,10 +103,11 @@ function sysexit(){\r\n\
|
||||
</p>'
|
||||
res += poskuan("系统控制",data,"4")
|
||||
return res
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = '{}'
|
||||
post = RUL_CS
|
||||
for i in post:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
@@ -154,6 +155,13 @@ function jcmexit(){\r\n\
|
||||
</p>'
|
||||
res = poskuan("重启面板",data,"3")
|
||||
res = resys(res,info)
|
||||
if info['debug']:
|
||||
res += poskuan("DEBUG",'<p>\r\n\
|
||||
<button class="btn btn-sm btn-success" onclick="jcmreset();return false;">DEBUG</button>\r\n\
|
||||
<script type="text/javascript">\r\n\
|
||||
\
|
||||
</script>\
|
||||
</p>',"2")
|
||||
strr = {}
|
||||
strr["data"] = res
|
||||
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
||||
|
||||
@@ -9,11 +9,11 @@ import imp
|
||||
import hashlib
|
||||
import socket
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = '{}'
|
||||
for i in post:
|
||||
for i in RUL_CS:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
|
||||
@@ -9,11 +9,11 @@ import imp
|
||||
import hashlib
|
||||
import socket
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = '{}'
|
||||
for i in post:
|
||||
for i in RUL_CS:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
|
||||
@@ -8,20 +8,25 @@ import time
|
||||
import imp
|
||||
import hashlib
|
||||
import socket
|
||||
import threading
|
||||
|
||||
def run(info):
|
||||
os.system("sleep 30 && poweroff")
|
||||
def run(info,no):
|
||||
if os.path.exists("/sbin/poweroff"):
|
||||
time.sleep(30)
|
||||
os.system('/sbin/poweroff')
|
||||
else:
|
||||
os.system("shutdown -s -t 30")
|
||||
|
||||
def poweroff(info):
|
||||
t = threading.Thread(target=run, args=(info))
|
||||
t = threading.Thread(target=run, args=(info,""))
|
||||
t.start()
|
||||
return "30S poweroff"
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = '{}'
|
||||
for i in post:
|
||||
for i in RUL_CS:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
|
||||
@@ -8,20 +8,25 @@ import time
|
||||
import imp
|
||||
import hashlib
|
||||
import socket
|
||||
import threading
|
||||
|
||||
def run(info):
|
||||
os.system("sleep 30 && reboot")
|
||||
def run(info,no):
|
||||
if os.path.exists("/sbin/reboot"):
|
||||
time.sleep(30)
|
||||
os.system('/sbin/reboot')
|
||||
else:
|
||||
os.system("shutdown -r -t 30")
|
||||
|
||||
def reboot(info):
|
||||
t = threading.Thread(target=run, args=(info))
|
||||
t = threading.Thread(target=run, args=(info,""))
|
||||
t.start()
|
||||
return "30S reboot"
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = '{}'
|
||||
for i in post:
|
||||
for i in RUL_CS:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
|
||||
@@ -10,19 +10,19 @@ import hashlib
|
||||
import socket
|
||||
import threading
|
||||
|
||||
def run(info):
|
||||
def run(info,no):
|
||||
os.system("timeout /t 30 && shutdown -h")
|
||||
|
||||
def poweroff(info):
|
||||
t = threading.Thread(target=run, args=(info))
|
||||
t = threading.Thread(target=run, args=(info,""))
|
||||
t.start()
|
||||
return "30S shutdown -h"
|
||||
|
||||
def main(new_client_socket,post,Headers,info,user):
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = '{}'
|
||||
for i in post:
|
||||
for i in RUL_CS:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
|
||||
40
server/setup/sys/stop/api.py
Normal file
40
server/setup/sys/stop/api.py
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
# coding=utf-8
|
||||
#!/bin/python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import imp
|
||||
import hashlib
|
||||
import socket
|
||||
import threading
|
||||
|
||||
def run(info,no):
|
||||
if os.path.exists("/sbin/halt"):
|
||||
time.sleep(30)
|
||||
os.system('/sbin/halt')
|
||||
else:
|
||||
os.system("sleep 30 && halt")
|
||||
|
||||
def poweroff(info):
|
||||
t = threading.Thread(target=run, args=(info,""))
|
||||
t.start()
|
||||
return "30S halt"
|
||||
|
||||
def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
||||
link = ''
|
||||
path = ''
|
||||
res = '{}'
|
||||
for i in RUL_CS:
|
||||
tmp = i.split('=')
|
||||
if tmp[0] == 'link':
|
||||
link = tmp[1]
|
||||
if tmp[0] == 'path':
|
||||
path = tmp[1]
|
||||
|
||||
res = '{"data":"' + poweroff(info) + '"}'
|
||||
|
||||
|
||||
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
||||
httpserver.httppostchar(new_client_socket,"200",res.encode("utf-8"),"application/json",Headers,info)
|
||||
Reference in New Issue
Block a user