mirror of https://github.com/midoks/mdserver-web
parent
5588976f95
commit
c91928c55f
@ -0,0 +1,87 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* MW API接口示例Demo |
||||||
|
* 仅供参考,请根据实际项目需求开发,并做好安全处理 |
||||||
|
* date 2022-11-28 |
||||||
|
* author midoks |
||||||
|
*/ |
||||||
|
class mwApi { |
||||||
|
private $MW_PANEL = "http://127.0.0.1:64307"; //面板地址 |
||||||
|
private $MW_APP_ID = 'hC6XArWzRY'; |
||||||
|
private $MW_APP_SERECT = 'NSGaFhMWyaN5Yi3ftTkZ'; |
||||||
|
|
||||||
|
//如果希望多台面板,可以在实例化对象时,将面板地址与密钥传入 |
||||||
|
public function __construct($mw_panel = null, $app_id = null, $app_secret = null) { |
||||||
|
if ($mw_panel) { |
||||||
|
$this->MW_PANEL = $mw_panel; |
||||||
|
} |
||||||
|
|
||||||
|
if ($app_id) { |
||||||
|
$this->MW_APP_ID = $app_id; |
||||||
|
} |
||||||
|
|
||||||
|
if ($app_secret) { |
||||||
|
$this->MW_APP_SERECT = $app_secret; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 发起POST请求 |
||||||
|
* @param String $url 目标网填,带http:// |
||||||
|
* @param Array|String $data 欲提交的数据 |
||||||
|
* @return string |
||||||
|
*/ |
||||||
|
private function httpPost($url, $data, $timeout = 60) { |
||||||
|
|
||||||
|
$ch = curl_init(); |
||||||
|
// 设置头部信息 |
||||||
|
$headers = [ |
||||||
|
'app-id: ' . $this->MW_APP_ID, |
||||||
|
'app-secret: ' . $this->MW_APP_SERECT, |
||||||
|
]; |
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); |
||||||
|
curl_setopt($ch, CURLOPT_URL, $url); |
||||||
|
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); |
||||||
|
curl_setopt($ch, CURLOPT_POST, 1); |
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); |
||||||
|
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); |
||||||
|
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); |
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
||||||
|
curl_setopt($ch, CURLOPT_HEADER, 0); |
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); |
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); |
||||||
|
$output = curl_exec($ch); |
||||||
|
curl_close($ch); |
||||||
|
return $output; |
||||||
|
} |
||||||
|
|
||||||
|
public function panel($endpoint, $data) { |
||||||
|
$url = $this->MW_PANEL . $endpoint; |
||||||
|
return $this->httpPost($url, $data); |
||||||
|
} |
||||||
|
|
||||||
|
//示例取面板日志 |
||||||
|
public function getLogsList() { |
||||||
|
$post_data['p'] = '1'; |
||||||
|
$post_data['limit'] = 10; |
||||||
|
|
||||||
|
//请求面板接口 |
||||||
|
$data = $this->panel('/logs/get_log_list', $post_data); |
||||||
|
|
||||||
|
//解析JSON数据 |
||||||
|
// $data = json_decode($result, true); |
||||||
|
return $data; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
//实例化对象 |
||||||
|
$api = new mwApi(); |
||||||
|
//获取面板日志 |
||||||
|
$rdata = $api->getLogsList(); |
||||||
|
|
||||||
|
// var_dump($rdata); |
||||||
|
//输出JSON数据到浏览器 |
||||||
|
echo json_encode($rdata); |
||||||
|
|
||||||
|
?> |
@ -0,0 +1,57 @@ |
|||||||
|
# coding: utf-8 |
||||||
|
# +----------------------------------------------------------------------------------- |
||||||
|
# | MW Linux面板 |
||||||
|
# +----------------------------------------------------------------------------------- |
||||||
|
# | Copyright (c) 2015-2099 MW(http://github.com/midoks/mdserver) All rights reserved. |
||||||
|
# +----------------------------------------------------------------------------------- |
||||||
|
# | Author: midoks |
||||||
|
# +----------------------------------------------------------------------------------- |
||||||
|
|
||||||
|
#------------------------------ |
||||||
|
# API-Demo of Python |
||||||
|
#------------------------------ |
||||||
|
import time |
||||||
|
import hashlib |
||||||
|
import sys |
||||||
|
import os |
||||||
|
import json |
||||||
|
|
||||||
|
|
||||||
|
class mwApi: |
||||||
|
__MW_PANEL = 'http://127.0.0.1:64307' |
||||||
|
__MW_APP_ID = 'hC6XArWzRY' |
||||||
|
__MW_APP_SERECT = 'NSGaFhMWyaN5Yi3ftTkZ' |
||||||
|
|
||||||
|
# 如果希望多台面板,可以在实例化对象时,将面板地址与密钥传入 |
||||||
|
def __init__(self, panel_url=None, app_id=None, app_serect=None): |
||||||
|
if panel_url: |
||||||
|
self.__MW_PANEL = panel_url |
||||||
|
self.__MW_APP_ID = app_id |
||||||
|
self.__MW_APP_SERECT = app_serect |
||||||
|
|
||||||
|
def post(self, endpoint, request_data): |
||||||
|
import requests |
||||||
|
url = self.__MW_PANEL + endpoint |
||||||
|
post_data = requests.post(url, data=request_data, headers={ |
||||||
|
'app-id':self.__MW_APP_ID, |
||||||
|
'app-secret':self.__MW_APP_SERECT |
||||||
|
}) |
||||||
|
try: |
||||||
|
return post_data.json() |
||||||
|
except Exception as e: |
||||||
|
return post_data.text |
||||||
|
# 取面板日志 |
||||||
|
def getLogs(self): |
||||||
|
result = self.post('/logs/get_log_list',{'limit':10,'p':1}) |
||||||
|
return result |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
# 实例化MW-API对象 |
||||||
|
api = mwApi() |
||||||
|
|
||||||
|
# 调用get_logs方法 |
||||||
|
rdata = api.getLogs() |
||||||
|
|
||||||
|
# 打印响应数据 |
||||||
|
print(rdata) |
@ -1,94 +0,0 @@ |
|||||||
<?php |
|
||||||
/** |
|
||||||
* MW API接口示例Demo |
|
||||||
* 仅供参考,请根据实际项目需求开发,并做好安全处理 |
|
||||||
* date 2022-11-28 |
|
||||||
* author midoks |
|
||||||
*/ |
|
||||||
class mwApi { |
|
||||||
private $MW_KEY = "j7GQhzNcBV4KU9QKYPXvtjSzCcmfkc0e"; //接口密钥 |
|
||||||
private $MW_PANEL = "http://127.0.0.1:7200"; //面板地址 |
|
||||||
|
|
||||||
//如果希望多台面板,可以在实例化对象时,将面板地址与密钥传入 |
|
||||||
public function __construct($mw_panel = null, $mw_key = null) { |
|
||||||
if ($mw_panel) { |
|
||||||
$this->MW_PANEL = $mw_panel; |
|
||||||
} |
|
||||||
|
|
||||||
if ($mw_key) { |
|
||||||
$this->MW_KEY = $mw_key; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 发起POST请求 |
|
||||||
* @param String $url 目标网填,带http:// |
|
||||||
* @param Array|String $data 欲提交的数据 |
|
||||||
* @return string |
|
||||||
*/ |
|
||||||
private function httpPostCookie($url, $data, $timeout = 60) { |
|
||||||
//定义cookie保存位置 |
|
||||||
$cookie_file = './' . md5($this->MW_PANEL) . '.cookie'; |
|
||||||
if (!file_exists($cookie_file)) { |
|
||||||
$fp = fopen($cookie_file, 'w+'); |
|
||||||
fclose($fp); |
|
||||||
} |
|
||||||
|
|
||||||
$ch = curl_init(); |
|
||||||
curl_setopt($ch, CURLOPT_URL, $url); |
|
||||||
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); |
|
||||||
curl_setopt($ch, CURLOPT_POST, 1); |
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); |
|
||||||
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); |
|
||||||
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); |
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
|
||||||
curl_setopt($ch, CURLOPT_HEADER, 0); |
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); |
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); |
|
||||||
$output = curl_exec($ch); |
|
||||||
curl_close($ch); |
|
||||||
return $output; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 构造带有签名的关联数组 |
|
||||||
*/ |
|
||||||
private function getKeyData() { |
|
||||||
$now_time = time(); |
|
||||||
$ready_data = array( |
|
||||||
'request_token' => md5($now_time . '' . md5($this->MW_KEY)), |
|
||||||
'request_time' => $now_time, |
|
||||||
); |
|
||||||
return $ready_data; |
|
||||||
} |
|
||||||
|
|
||||||
//示例取面板日志 |
|
||||||
public function getLogsList() { |
|
||||||
//拼接URL地址 |
|
||||||
$url = $this->MW_PANEL . '/api/firewall/get_log_list'; |
|
||||||
|
|
||||||
//准备POST数据 |
|
||||||
$post_data = $this->getKeyData(); //取签名 |
|
||||||
$post_data['p'] = '1'; |
|
||||||
$post_data['limit'] = 10; |
|
||||||
|
|
||||||
//请求面板接口 |
|
||||||
$result = $this->httpPostCookie($url, $post_data); |
|
||||||
|
|
||||||
//解析JSON数据 |
|
||||||
$data = json_decode($result, true); |
|
||||||
return $data; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
//实例化对象 |
|
||||||
$api = new mwApi(); |
|
||||||
//获取面板日志 |
|
||||||
$rdata = $api->getLogsList(); |
|
||||||
|
|
||||||
// var_dump($rdata); |
|
||||||
//输出JSON数据到浏览器 |
|
||||||
echo json_encode($rdata); |
|
||||||
|
|
||||||
?> |
|
@ -1,125 +0,0 @@ |
|||||||
# coding: utf-8 |
|
||||||
# +----------------------------------------------------------------------------------- |
|
||||||
# | MW Linux面板 |
|
||||||
# +----------------------------------------------------------------------------------- |
|
||||||
# | Copyright (c) 2015-2099 MW(http://github.com/midoks/mdserver) All rights reserved. |
|
||||||
# +----------------------------------------------------------------------------------- |
|
||||||
# | Author: midoks |
|
||||||
# +----------------------------------------------------------------------------------- |
|
||||||
|
|
||||||
#------------------------------ |
|
||||||
# API-Demo of Python |
|
||||||
#------------------------------ |
|
||||||
import time |
|
||||||
import hashlib |
|
||||||
import sys |
|
||||||
import os |
|
||||||
import json |
|
||||||
|
|
||||||
|
|
||||||
class mwApi: |
|
||||||
__MW_KEY = 'uATE5NrKDWIlZuDcYpvLVhoUo1c7A1Pk' |
|
||||||
__MW_PANEL = 'http://127.0.0.1:7200' |
|
||||||
|
|
||||||
# 如果希望多台面板,可以在实例化对象时,将面板地址与密钥传入 |
|
||||||
def __init__(self, mw_panel=None, mw_key=None): |
|
||||||
if mw_panel: |
|
||||||
self.__MW_PANEL = mw_panel |
|
||||||
self.__MW_KEY = mw_key |
|
||||||
|
|
||||||
# 计算MD5 |
|
||||||
def __get_md5(self, s): |
|
||||||
m = hashlib.md5() |
|
||||||
m.update(s.encode('utf-8')) |
|
||||||
return m.hexdigest() |
|
||||||
|
|
||||||
# 构造带有签名的关联数组 |
|
||||||
def __get_key_data(self): |
|
||||||
now_time = int(time.time()) |
|
||||||
ready_data = { |
|
||||||
'request_token': self.__get_md5(str(now_time) + '' + self.__get_md5(self.__MW_KEY)), |
|
||||||
'request_time': now_time |
|
||||||
} |
|
||||||
return ready_data |
|
||||||
|
|
||||||
# 发送POST请求并保存Cookie |
|
||||||
#@url 被请求的URL地址(必需) |
|
||||||
#@data POST参数,可以是字符串或字典(必需) |
|
||||||
#@timeout 超时时间默认1800秒 |
|
||||||
# return string |
|
||||||
def __http_post_cookie(self, url, p_data, timeout=1800): |
|
||||||
cookie_file = '/tmp/' + self.__get_md5(self.__MW_PANEL) + '.cookie' |
|
||||||
if sys.version_info[0] == 2: |
|
||||||
# Python2 |
|
||||||
import urllib |
|
||||||
import urllib2 |
|
||||||
import ssl |
|
||||||
import cookielib |
|
||||||
|
|
||||||
# 创建cookie对象 |
|
||||||
cookie_obj = cookielib.MozillaCookieJar(cookie_file) |
|
||||||
|
|
||||||
# 加载已保存的cookie |
|
||||||
if os.path.exists(cookie_file): |
|
||||||
cookie_obj.load(cookie_file, ignore_discard=True, |
|
||||||
ignore_expires=True) |
|
||||||
|
|
||||||
ssl._create_default_https_context = ssl._create_unverified_context |
|
||||||
|
|
||||||
data = urllib.urlencode(p_data) |
|
||||||
req = urllib2.Request(url, data) |
|
||||||
opener = urllib2.build_opener( |
|
||||||
urllib2.HTTPCookieProcessor(cookie_obj)) |
|
||||||
response = opener.open(req, timeout=timeout) |
|
||||||
|
|
||||||
# 保存cookie |
|
||||||
cookie_obj.save(ignore_discard=True, ignore_expires=True) |
|
||||||
return response.read() |
|
||||||
else: |
|
||||||
# Python3 |
|
||||||
import urllib.request |
|
||||||
import ssl |
|
||||||
import http.cookiejar |
|
||||||
cookie_obj = http.cookiejar.MozillaCookieJar(cookie_file) |
|
||||||
# 加载已保存的cookie |
|
||||||
if os.path.exists(cookie_file): |
|
||||||
cookie_obj.load(cookie_file, ignore_discard=True, |
|
||||||
ignore_expires=True) |
|
||||||
|
|
||||||
handler = urllib.request.HTTPCookieProcessor(cookie_obj) |
|
||||||
data = urllib.parse.urlencode(p_data).encode('utf-8') |
|
||||||
req = urllib.request.Request(url, data) |
|
||||||
opener = urllib.request.build_opener(handler) |
|
||||||
response = opener.open(req, timeout=timeout) |
|
||||||
cookie_obj.save(ignore_discard=True, ignore_expires=True) |
|
||||||
result = response.read() |
|
||||||
if type(result) == bytes: |
|
||||||
result = result.decode('utf-8') |
|
||||||
return result |
|
||||||
|
|
||||||
# 取面板日志 |
|
||||||
def getLogs(self): |
|
||||||
# 拼接URL地址 |
|
||||||
url = self.__MW_PANEL + '/api/logs/get_log_list' |
|
||||||
|
|
||||||
# 准备POST数据 |
|
||||||
post_data = self.__get_key_data() # 取签名 |
|
||||||
post_data['limit'] = 10 |
|
||||||
post_data['p'] = '1' |
|
||||||
|
|
||||||
# 请求面板接口 |
|
||||||
result = self.__http_post_cookie(url, post_data) |
|
||||||
|
|
||||||
# 解析JSON数据 |
|
||||||
return json.loads(result) |
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__': |
|
||||||
# 实例化MW-API对象 |
|
||||||
api = mwApi() |
|
||||||
|
|
||||||
# 调用get_logs方法 |
|
||||||
rdata = api.getLogs() |
|
||||||
|
|
||||||
# 打印响应数据 |
|
||||||
print(rdata) |
|
@ -1,22 +0,0 @@ |
|||||||
[ |
|
||||||
{ |
|
||||||
"version": "0.9.9", |
|
||||||
"content": "* 目标版本。", |
|
||||||
}, |
|
||||||
{ |
|
||||||
"version": "0.9.2", |
|
||||||
"content": "* 批量域名添加修复。<br/> * 常用命令说明。", |
|
||||||
"path": "https://github.com/midoks/mdserver-web/releases/download/0.9.2/mdserver-web.zip" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"version": "0.9.1", |
|
||||||
"content": "* 菜单修复。<br/> * 更新修复", |
|
||||||
"path": "https://github.com/midoks/mdserver-web/releases/download/0.9.1/mdserver-web.zip", |
|
||||||
"purge":"https://purge.jsdelivr.net/gh/midoks/mdserver-web@latest/scripts/update.sh" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"version": "0.9.0", |
|
||||||
"content": "* 主流系统支持。<br/> * 插件支持更多参数。<br/>* MySQL主从支持GTID和经典模式。<br/>* MariaDB主从支持GTID和经典模式。<br/>* Rsyncd更新。<br/>* 添加网站统计的插件。<br/>* 添加varnish插件。", |
|
||||||
"path": "https://github.com/midoks/mdserver-web/releases/download/0.9.0/mdserver-web.zip" |
|
||||||
} |
|
||||||
] |
|
Loading…
Reference in new issue