diff --git a/c5_ciyon.sql b/c5_ciyon.sql
index 0fa4a76..2fc75e7 100644
--- a/c5_ciyon.sql
+++ b/c5_ciyon.sql
@@ -282,7 +282,7 @@ CREATE TABLE `ap_log` (
`ip` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'IP,IP',
`logs` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '详情',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 3449 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '日志表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 3449 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '应用日志表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ap_log
@@ -290,7 +290,7 @@ CREATE TABLE `ap_log` (
-- ----------------------------
-- Table structure for ap_luser
-- ----------------------------
-DROP TABLE IF EXISTS `ap_luser`;
+DROP TABLE IF EXISTS `ap_lug`;
CREATE TABLE `ap_luser` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`isinout` int(11) NOT NULL COMMENT '|登录|,BOOL,登入.登出',
@@ -299,10 +299,10 @@ CREATE TABLE `ap_luser` (
`ip` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'IP,IP',
`model` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '设备指纹',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 3437 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '日志表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 3437 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '登录日志表' ROW_FORMAT = Dynamic;
-- ----------------------------
--- Records of ap_luser
+-- Records of ap_lug
-- ----------------------------
-- ----------------------------
@@ -1628,7 +1628,7 @@ CREATE TABLE `zc_log` (
`ip` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'IP,IP',
`logs` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '详情',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 147 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '日志表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 147 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '总控日志表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of zc_log
@@ -1703,17 +1703,20 @@ INSERT INTO `zc_menu` VALUES (231, 61, '待审批事项', '!MSGmatternotice 需
INSERT INTO `zc_menu` VALUES (232, 61, '知会事项', '!MSGmattertell 待处理、处理中、已处理', '', 10, 1);
INSERT INTO `zc_menu` VALUES (233, 61, '我已批事项', '!MSGmatterapproval 非我审批[有代理人]', '', 10, 1);
INSERT INTO `zc_menu` VALUES (234, 61, '指派代理人', '!MSGmatteragent 指派中,已指派历史', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (250, 62, '模版维护', '!MSG在线编辑源码', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (251, 62, '栏目管理', '!MSG发布计划。关键词管理,ABCDE,按组合方式生成关键词。|主题管理[内容方向提示词]。|AI规则管理[绑定知识组]', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (252, 62, '文章管理', '', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (253, 62, '落地页管理', '!MSG单页面图文内容', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (254, 62, '锚内关键词', '!MSGSEO用', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (255, 62, '用户管理', '!MSG用户注册的资源', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (256, 62, '咨询线索管理', '!MSG网站表单留下的联系方式', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (257, 62, '远程监管设置', '!MSG新用户、新线索、待发库存预警等数据上报中心', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (270, 252, '已发文章', '!MSG网站上显示的文章管理', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (271, 252, '待发文章', '!MSG按计划准备自动发的文章,库存重要', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (272, 252, 'AI生成文章', '!MSG生成的文章,需要人工过一遍,再到待发', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (250, 62, '用户线索', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (251, 62, '文章管理', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (252, 62, '文章生成', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (253, 62, '栏目管理', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (254, 62, '锚内关键词', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (255, 62, '单页管理', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (260, 251, '文章草稿', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (261, 251, '文章待发', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (262, 251, '已发文章', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (263, 251, '热门调优', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (270, 252, '关键词库', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (271, 252, '浓缩知识', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (272, 252, '文章模版', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (273, 252, 'SEO规划', '', '', 10, 1);
INSERT INTO `zc_menu` VALUES (300, 63, '私域平台账号', '!MSG添加企业微信、个人微信、QQ号等', '', 10, 1);
INSERT INTO `zc_menu` VALUES (301, 63, '线索客户', '!MSG导入手机号,自动分配平台账号,加人。加好后按标签策略,主动跟客户聊天。', '', 10, 1);
INSERT INTO `zc_menu` VALUES (302, 63, '线索待聊', '!MSG每次回复生成后,根据数字量,延迟1-几分钟。这期间可以人工介入。', '', 10, 1);
@@ -1769,7 +1772,8 @@ INSERT INTO `zc_menu` VALUES (602, 82, '自动化任务', 'rigger/autotask.html'
INSERT INTO `zc_menu` VALUES (603, 82, '表单设计器', '!MSGtabbase 字段设计tabfield', '', 10, 1);
INSERT INTO `zc_menu` VALUES (604, 82, '流程设计器', '!MSGmattertemplate 流程设置matterflow', '', 10, 1);
INSERT INTO `zc_menu` VALUES (610, 82, '数据计算', 'datasse/index.html', 'r=执行', 10, 1);
-INSERT INTO `zc_menu` VALUES (621, 82, '文档短链', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (611, 82, '总控API', 'rigger/tokapi.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (612, 82, '三方接入', 'rigger/tokthd.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (900, 99, '软件设置', '', '', 10, 1);
INSERT INTO `zc_menu` VALUES (901, 99, '示例代码', '', 'u=管理|n=使用', 10, 1);
INSERT INTO `zc_menu` VALUES (902, 99, '开发工具', '', '', 10, 1);
@@ -1982,10 +1986,10 @@ CREATE TABLE `zc_stats` (
-- ----------------------------
-- ----------------------------
--- Table structure for zc_token
+-- Table structure for zc_tokthd
-- ----------------------------
-DROP TABLE IF EXISTS `zc_token`;
-CREATE TABLE `zc_token` (
+DROP TABLE IF EXISTS `zc_tokthd`;
+CREATE TABLE `zc_tokthd` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '三方平台名称',
`cfgtoken` varchar(180) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'ConfigData',
@@ -1996,7 +2000,26 @@ CREATE TABLE `zc_token` (
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'API配置表' ROW_FORMAT = Dynamic;
-- ----------------------------
--- Records of zc_token
+-- Records of zc_tokthd
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for zc_tokapi
+-- ----------------------------
+DROP TABLE IF EXISTS `zc_tokapi`;
+CREATE TABLE `zc_tokapi` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '|appid|',
+ `vuser` int(11) NOT NULL COMMENT '用户,CATA,adminuser',
+ `apisecret` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',appkey',
+ `ips` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '白名单IP,BR',
+ `addtimes` bigint(20) NOT NULL COMMENT '创建时间,DATE',
+ `uptimes` bigint(20) NOT NULL COMMENT '活跃时间,DATE',
+ `pubkey` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '|证书|',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 215699 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'API接口授权' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of zc_tokapi
-- ----------------------------
-- ----------------------------
@@ -2018,7 +2041,7 @@ CREATE TABLE `zc_ymock` (
-- ----------------------------
-- Records of zc_ymock
-- ----------------------------
-INSERT INTO `zc_ymock` VALUES (6, '', '', 'admin/rigger/mock.testmock', '{\"code\":1,\"data\":12344321}', '/z/?func=admin/rigger/mock.testmock
{\"abc\":\"def\",\"_pf\":\"PC\"}', 1754001371, 1722713211);
+INSERT INTO `zc_ymock` VALUES (6, '', '', '/admin/rigger/mock.testmock', '{\"code\":1,\"data\":12344321}', '/z/?func=admin/rigger/mock.testmock
{\"abc\":\"def\",\"_pf\":\"PC\"}', 1754001371, 1722713211);
-- ----------------------------
-- Table structure for zc_zmem_var
diff --git a/fapp/ciyon_ap/App.vue b/fapp/ciyon_ap/App.vue
index 09979f2..575a15d 100644
--- a/fapp/ciyon_ap/App.vue
+++ b/fapp/ciyon_ap/App.vue
@@ -55,7 +55,7 @@
app.globalData.mqfunc = [];
app.globalData.srv = 't';
- app.globalData.jsnajax = 'z/?func=ambap/';
+ app.globalData.jsnajax = 'ambap/';
app.globalData.jsnurl = {};
app.globalData.jsnurl.t = 'https://ciyon.ciy.cn/';
app.globalData.demourl = 'https://i.qiboc.cn/app.goc'; //原型图地址
diff --git a/main.go b/main.go
index b539303..69c1863 100644
--- a/main.go
+++ b/main.go
@@ -20,7 +20,7 @@ import (
func main() {
//nohup ./zgo &
//nohup /data/go/ciyon/zgo > /dev/null 2>&1 &
- c.CiyVars.Version = "1.0.1"
+ c.CiyVars.Version = "1.0.2"
c.Clog("---=========================Ciyon=========================---")
c.Clog("Version:", c.CiyVars.Version, " WorkDir:", c.CiyWebDir)
//读取配置文件ini
@@ -131,7 +131,7 @@ func main() {
web.SetMockFile() //在web/ud/mock目录下建立对应的json文件。
} else if mock != "" {
web.SetMockFn(func(w http.ResponseWriter, r *http.Request) error {
- funname := c.GetQuery("func", r)
+ funname := r.URL.Path
funs := strings.Split(funname, ".")
if len(funs) < 2 {
return fmt.Errorf("func fmterr func=%v", funname)
diff --git a/route_adm.go b/route_adm.go
index 80e6fcd..2b9c171 100644
--- a/route_adm.go
+++ b/route_adm.go
@@ -8,6 +8,7 @@ import (
"ciyon/web/admin/autotask"
"ciyon/web/admin/datasse"
"ciyon/web/admin/demo"
+ "ciyon/web/admin/demo/dyn"
"ciyon/web/admin/rigger"
"ciyon/web/admin/wsdemo"
c "ciyon/zciyon"
@@ -17,14 +18,11 @@ import (
本文件由node生成
*/
func setWebRoute_adm(web *c.CiyWebServer) {
- web.RouterFunc("admin/rigger", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
+ web.RouterFunc("/admin/rigger", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"logfile": {
"init": rigger.Logfile_init,
"viewlog": rigger.Logfile_viewlog,
},
- "datasse": {
- "demo": datasse.DataSSE_demo,
- },
"statsfunc": {
"init": rigger.Statsfunc_init,
"del": rigger.Statsfunc_del,
@@ -134,7 +132,7 @@ func setWebRoute_adm(web *c.CiyWebServer) {
"update": rigger.Role_u_update,
},
})
- web.RouterFunc("admin/ap", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
+ web.RouterFunc("/admin/ap", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"paper": {
"init": ap.Paper_init,
"update": ap.Paper_update,
@@ -142,7 +140,7 @@ func setWebRoute_adm(web *c.CiyWebServer) {
"del": ap.Paper_del,
},
})
- web.RouterFunc("admin/demo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
+ web.RouterFunc("/admin/demo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"normal": {
"list": demo.Normal_list,
"del": demo.Normal_del,
@@ -154,17 +152,28 @@ func setWebRoute_adm(web *c.CiyWebServer) {
"importxls_data": demo.Normal_importxls_data,
},
})
- web.RouterFunc("admin/autotask", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
+ web.RouterFunc("/admin/demo/dyn", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
+ "sse": {
+ "get": dyn.SSE_get,
+ "post": dyn.SSE_get,
+ },
+ })
+ web.RouterFunc("/admin/autotask", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"task": {
"main": autotask.Task_main,
},
})
- web.RouterFunc("admin/wsdemo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
+ web.RouterFunc("/admin/datasse", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
+ "index": {
+ "demo": datasse.Index_demo,
+ },
+ })
+ web.RouterFunc("/admin/wsdemo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"go": {
"demo": wsdemo.Wsdemo, //需nginx转发upgrade为websocket协议
},
})
- web.RouterFunc("admin", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
+ web.RouterFunc("/admin", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"welcome": {
"init": admin.Welcome_init,
},
diff --git a/web/admin/ap/cash_out_apply.php b/web/admin/ap/cash_out_apply.php
index 0cb1c87..6869b58 100644
--- a/web/admin/ap/cash_out_apply.php
+++ b/web/admin/ap/cash_out_apply.php
@@ -95,7 +95,7 @@ class cash_out_apply {
if ($row['cashstatus'] != 10)
continue;
if ($act == 2) { //退余额
- \web\cweb_ap::usercashoe($db, 11, $row['vuser'], $row['cashmoney'], '提现审核拒绝');
+ \web\cwebcomon::usercashoe($db, 11, $row['vuser'], $row['cashmoney'], '提现审核拒绝');
}
$id = $row['id'];
$updata = array();
diff --git a/web/admin/ap/cash_out_inv.php b/web/admin/ap/cash_out_inv.php
index 39dbca6..b104c3f 100644
--- a/web/admin/ap/cash_out_inv.php
+++ b/web/admin/ap/cash_out_inv.php
@@ -100,7 +100,7 @@ class cash_out_inv {
if ($row['cashstatus'] != 30)
continue;
if ($act == 2) { //退余额
- \web\cweb_ap::usercashoe($db, 11, $row['vuser'], $row['cashmoney'], '提现发票拒绝');
+ \web\cwebcomon::usercashoe($db, 11, $row['vuser'], $row['cashmoney'], '提现发票拒绝');
}
$id = $row['id'];
$updata = array();
diff --git a/web/admin/ap/cash_out_transfer.php b/web/admin/ap/cash_out_transfer.php
index 6ced100..2a8c14e 100644
--- a/web/admin/ap/cash_out_transfer.php
+++ b/web/admin/ap/cash_out_transfer.php
@@ -103,7 +103,7 @@ class cash_out_transfer {
$db->begin();
if ($auditstatus == 90) { //退余额
$updata = array();
- \web\cweb_ap::usercashoe($db, 11, $row['vuser'], $row['cashmoney'], '提现支付拒绝');
+ \web\cwebcomon::usercashoe($db, 11, $row['vuser'], $row['cashmoney'], '提现支付拒绝');
}
$id = $row['id'];
$updata = array();
diff --git a/web/admin/common.php b/web/admin/common.php
index 1b71991..c03ea3e 100644
--- a/web/admin/common.php
+++ b/web/admin/common.php
@@ -33,9 +33,10 @@ function verifyfast() {
function verifyuser() {
global $db;
global $_token;
+ $ciyauth = '';
if ($_token['type'] == 'cookie')
- $ciyauth = $_COOKIE[$_token['field']];
- else
+ $ciyauth = @$_COOKIE[$_token['field']];
+ if (!$ciyauth)
$ciyauth = @$_SERVER['HTTP_CIYAUTH'];
if (!$ciyauth)
$ciyauth = get('_ciyauth');
@@ -84,6 +85,20 @@ function verifyuser() {
}
return $auth;
}
+function verifysign($pubkey, $data, $pairsign) {
+ $signbin = hex2bin($pairsign);
+ if ($signbin === false)
+ return '签名格式错误';
+ $hashbin = hex2bin(hash('sha256', $data));
+ if (strpos($pubkey, '-----BEGIN RSA PUBLIC KEY-----') === false && strpos($pubkey, '-----BEGIN PUBLIC KEY-----') === false)
+ $pubkey = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($pubkey, 64, "\n") . "\n-----END PUBLIC KEY-----";
+ $result = openssl_verify($hashbin, $signbin, $pubkey, OPENSSL_ALGO_SHA256);
+ if ($result === 0)
+ return '数字证书验签失败';
+ if ($result !== 1)
+ return '数字证书验签错误:' . openssl_error_string();
+ return true;
+}
//true无权限,false有权限
function nopower($db, $userid, $chkpower) {
$csql = new \ciy\sql('zc_admin');
diff --git a/web/admin/datasse/index.go b/web/admin/datasse/index.go
index 719d57e..8bc3827 100644
--- a/web/admin/datasse/index.go
+++ b/web/admin/datasse/index.go
@@ -7,7 +7,7 @@ import (
"time"
)
-func DataSSE_demo(w http.ResponseWriter, r *http.Request) bool {
+func Index_demo(w http.ResponseWriter, r *http.Request) bool {
if !c.SSEInit(w) {
w.Write([]byte("不支持SSE Flush"))
return false
@@ -22,11 +22,11 @@ func DataSSE_demo(w http.ResponseWriter, r *http.Request) bool {
c.SSESend_event(w, "您未被授权操作")
return false
}
- param := post.Get("param")
+ param := post.Get("bb")
c.SSESend_data(w, param)
for i := 0; i < 100; i++ {
if i%10 == 1 {
- c.SSESend_data(w, "ssr: "+c.Tostr(i), i)
+ c.SSESend_data(w, "sse: "+c.Tostr(i), i)
}
if !c.SSESend_event(w, c.Tostr(i)) {
return true
diff --git a/web/admin/datasse/index.php b/web/admin/datasse/index.php
index 027a15c..18b7662 100644
--- a/web/admin/datasse/index.php
+++ b/web/admin/datasse/index.php
@@ -14,7 +14,7 @@ class index {
$senddata('param: ' . $param);
for ($i = 0; $i < 100; $i++) {
if ($i % 10 == 1)
- $senddata('ssr: ' . $i . "\n\n" . 'ddd', $i);
+ $senddata('ssr: ' . $i . "\n\n", $i);
$sendevent($i);
usleep(50000);
}
diff --git a/web/admin/demo/dyn/callapi.html b/web/admin/demo/dyn/callapi.html
new file mode 100644
index 0000000..e56f2b8
--- /dev/null
+++ b/web/admin/demo/dyn/callapi.html
@@ -0,0 +1,61 @@
+
+
+
+
获取token+
业务调用+