Commit 1502af8b by 陶腾飞

添加openvpn的处理逻辑

parent aa2ef175
...@@ -161,6 +161,8 @@ func GetLDAPDeptFromHostnameP2(part string, groupname bool) string { ...@@ -161,6 +161,8 @@ func GetLDAPDeptFromHostnameP2(part string, groupname bool) string {
result = Dept_zw_qbbm_hw_string + unit result = Dept_zw_qbbm_hw_string + unit
case "DY": case "DY":
result = Dept_zw_qbbm_dy_string + unit result = Dept_zw_qbbm_dy_string + unit
case "BD":
result = Dept_zw_qbbm_bd_string + unit
case "BGYJ": case "BGYJ":
result = Dept_zw_qbbm_bgyj_string + unit result = Dept_zw_qbbm_bgyj_string + unit
} }
......
...@@ -61,7 +61,6 @@ var Dir_tmp string = GetEnv("tmp") ...@@ -61,7 +61,6 @@ var Dir_tmp string = GetEnv("tmp")
const Dir_softlike string = `D:\software\softlike\` const Dir_softlike string = `D:\software\softlike\`
const Dir_application string = `D:\software\application\` const Dir_application string = `D:\software\application\`
const Dir_otherFile string = `D:\file\`
// application // // application //
const App_MultiSplit string = SMB_ADSoftOthTool + "win_MultiSplit.exe" const App_MultiSplit string = SMB_ADSoftOthTool + "win_MultiSplit.exe"
...@@ -100,6 +99,7 @@ var WxWorkToken string ...@@ -100,6 +99,7 @@ var WxWorkToken string
const WxWorkInteraction_RemoteTerminal = "请求远程终端" const WxWorkInteraction_RemoteTerminal = "请求远程终端"
const WxWorkInteraction_SignUP = "申请个人账号" const WxWorkInteraction_SignUP = "申请个人账号"
const WxWorkInteraction_Dimission = "停用个人账号" const WxWorkInteraction_Dimission = "停用个人账号"
const WxWorkInteraction_OpenVPN = "申请OpenVPN"
// log level // // log level //
var Loglevel string = INFO var Loglevel string = INFO
......
...@@ -2,8 +2,9 @@ package public ...@@ -2,8 +2,9 @@ package public
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"net/http" "net/http"
"os"
"strings" "strings"
) )
...@@ -13,7 +14,7 @@ func DealMsgEnter(w http.ResponseWriter, r *http.Request) { ...@@ -13,7 +14,7 @@ func DealMsgEnter(w http.ResponseWriter, r *http.Request) {
url := strings.Split(r.URL.Path, "/") url := strings.Split(r.URL.Path, "/")
query := r.URL.RawQuery query := r.URL.RawQuery
unmsg, err := ioutil.ReadAll(r.Body) unmsg, err := io.ReadAll(r.Body)
if err != nil { if err != nil {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
w.Write([]byte("")) w.Write([]byte(""))
...@@ -35,7 +36,7 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) { ...@@ -35,7 +36,7 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) {
case Msg_File: case Msg_File:
var err error var err error
file := url[2] file := url[2]
ret, err = ioutil.ReadFile(Dir_application + file) ret, err = os.ReadFile(Dir_application + file)
if err != nil { if err != nil {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
...@@ -46,20 +47,11 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) { ...@@ -46,20 +47,11 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) {
case Msg_Softlike: case Msg_Softlike:
var err error var err error
file := url[2] file := url[2]
ret, err = ioutil.ReadFile(Dir_softlike + file) ret, err = os.ReadFile(Dir_softlike + file)
if err != nil { if err != nil {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
return nil, err return nil, err
} }
case Msg_OthFile:
var err error
file := url[2]
ret, err = ioutil.ReadFile(Dir_otherFile + file)
if err != nil {
LOG(ERROR, NULL, err)
return nil, err
}
case Msg_WXAuth: case Msg_WXAuth:
LOG(INFO, "", query) LOG(INFO, "", query)
return []byte(WXAuth(query)), nil return []byte(WXAuth(query)), nil
...@@ -615,7 +607,7 @@ func (ci *MJCmdbInfo) MsgDeal() interface{} { ...@@ -615,7 +607,7 @@ func (ci *MJCmdbInfo) MsgDeal() interface{} {
return ci return ci
} }
// 关于 wxwork 企业微信 的 消息处理 // 关于 企业微信菜单 的 消息处理
func (wxwork *MJwxwork) MsgDealSend() { func (wxwork *MJwxwork) MsgDealSend() {
// 创建菜单调用工具:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10786 // 创建菜单调用工具:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10786
// 创建菜单官方说明:https://work.weixin.qq.com/api/doc/90000/90135/90231 // 创建菜单官方说明:https://work.weixin.qq.com/api/doc/90000/90135/90231
...@@ -800,6 +792,7 @@ func (wxwork *MJwxwork) MsgDealSend() { ...@@ -800,6 +792,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
} }
}(wxwork.Name, wxwork.UserID) }(wxwork.Name, wxwork.UserID)
wxwork.Result = "开始关机,请等待~" wxwork.Result = "开始关机,请等待~"
// 电源管理 电源状态 // 电源管理 电源状态
case WXEK_zwDevopsPowerStatus: case WXEK_zwDevopsPowerStatus:
wxwork.SendText("收到查询指令,正在处理!") wxwork.SendText("收到查询指令,正在处理!")
...@@ -877,20 +870,61 @@ func (wxwork *MJwxwork) MsgDealSend() { ...@@ -877,20 +870,61 @@ func (wxwork *MJwxwork) MsgDealSend() {
return return
} }
wxwork.Result = fmt.Sprintf("您的主机IP地址为%s", ip) wxwork.Result = fmt.Sprintf("您的主机IP地址为%s", ip)
// 账号管理 获取个人账号
// 账号管理 获取主机个人账号
case WXEK_zwDevopsAccountSelf: case WXEK_zwDevopsAccountSelf:
LOG(INFO, wxwork.Instruction, fmt.Sprintf("%s 获取个人账号", wxwork.Name)) LOG(INFO, wxwork.Instruction, fmt.Sprintf("%s 获取个人账号", wxwork.Name))
wxwork.Result = "登录名:姓名拼音小写\n" + wxwork.Result = "登录名:姓名拼音小写\n" +
"完整登录名:姓名拼音小写@zhiweireach.com" "完整登录名:姓名拼音小写@zhiweireach.com"
// 账号管理 获取公共账号
// 账号管理 获取主机公共账号
case WXEK_zwDevopsAccountPublic: case WXEK_zwDevopsAccountPublic:
LOG(INFO, wxwork.Instruction, fmt.Sprintf("%s 获取公共账号", wxwork.Name)) LOG(INFO, wxwork.Instruction, fmt.Sprintf("%s 获取公共账号", wxwork.Name))
wxwork.Result = "登录名:组名首字母小写zhiwei\n" + wxwork.Result = "登录名:组名首字母小写zhiwei\n" +
"完整登录名:组名首字母小写zhiwei@zhiweireach.com\n" +
"例,巨量:jlzhiwei,报告研究中心:bgyjzxzhiwei\n" + "例,巨量:jlzhiwei,报告研究中心:bgyjzxzhiwei\n" +
"密码:1Q2W3e4r" "密码:1Q2W3e4r"
// 账号管理 申请OpenVPN账号
case WXEK_zwDevopsOpenvpn:
wxwork.Result = "请求已经提交审核,处理人:陶腾飞,包佳琪"
info, err := GetWxworkWorkerInfo(wxwork.UserID)
if err != nil {
LOG(ERROR, wxwork.Instruction, err)
return
}
if len(info.Department) == 0 {
wxwork.Result = "您似乎不属于任何一部门,无法申请openvpn"
break
}
department, err := GetWxworkWorkerDepartmentName(info.Department[0])
var msg string
if err != nil {
msg = "获取错误"
} else {
msg = fmt.Sprintf("%s\n姓名:%s\nID:%s\n部门:%s", WxWorkInteraction_OpenVPN, wxwork.Name, wxwork.UserID, department)
}
SendWxworkTextToAdmins(msg)
// 账号管理 获取OpenVPN账号
case WXEK_zwDevopsOpenvpn_get:
info, err := GetWxworkWorkerInfo(wxwork.UserID)
if err != nil {
LOG(ERROR, wxwork.Instruction, err)
return
}
department, err := GetWxworkWorkerDepartmentName(info.Department[0])
if err != nil {
wxwork.Result = "获取错误"
break
}
g := GJOpenVPN(wxwork.Name, wxwork.UserID, department)
wxwork.Result = SendOpenVPNMsg(g)
default: default:
if wxwork.Name == "陶腾飞" || wxwork.Name == "边爽" { if wxwork.Name == "陶腾飞" || wxwork.Name == "边爽" || wxwork.Name == "包佳琪" {
if strings.Contains(wxwork.Content, "\n") { if strings.Contains(wxwork.Content, "\n") {
msgtype := strings.Split(wxwork.Content, "\n")[0] msgtype := strings.Split(wxwork.Content, "\n")[0]
...@@ -916,6 +950,16 @@ func (wxwork *MJwxwork) MsgDealSend() { ...@@ -916,6 +950,16 @@ func (wxwork *MJwxwork) MsgDealSend() {
rep.WxUser = wxwork.UserID rep.WxUser = wxwork.UserID
rep.DataStr = wxwork.Content rep.DataStr = wxwork.Content
SendADMsg(Msg_Report, rep) SendADMsg(Msg_Report, rep)
case WxWorkInteraction_OpenVPN:
m := strings.Split(wxwork.Content, "\n")
id := strings.Split(m[2], ":")[1]
g := GJOpenVPN(strings.Split(m[1], ":")[1], id, strings.Split(m[3], ":")[1])
wxwork.Result = SendOpenVPNMsg(g)
LOG(INFO, wxwork.Instruction, wxwork.Result)
SendWxworkTextToAdmins(wxwork.Result)
SendWxworkTextToAUser(id, wxwork.Result)
wxwork.Result = ""
default: default:
wxwork.Result = fmt.Sprintf("%s 不是有效的", msgtype) wxwork.Result = fmt.Sprintf("%s 不是有效的", msgtype)
......
...@@ -81,6 +81,8 @@ const WXEK_zwDevopsPowerStatus string = "zwdevops_power_status" ...@@ -81,6 +81,8 @@ const WXEK_zwDevopsPowerStatus string = "zwdevops_power_status"
const WXEK_zwDevopsHostGetinfo string = "zwdevops_host_getinfo" const WXEK_zwDevopsHostGetinfo string = "zwdevops_host_getinfo"
const WXEK_zwDevopsAccountSelf string = "zwdevops_account_self" const WXEK_zwDevopsAccountSelf string = "zwdevops_account_self"
const WXEK_zwDevopsAccountPublic string = "zwdevops_account_public" const WXEK_zwDevopsAccountPublic string = "zwdevops_account_public"
const WXEK_zwDevopsOpenvpn string = "zwdevops_openvpn"
const WXEK_zwDevopsOpenvpn_get string = "zwdevops_openvpn_get"
const WXWORK_zwDevopsChatAccountManager string = "zwDevopsChatAccountManager" const WXWORK_zwDevopsChatAccountManager string = "zwDevopsChatAccountManager"
...@@ -179,6 +181,14 @@ type MJBoom struct { ...@@ -179,6 +181,14 @@ type MJBoom struct {
Errmsg string `json:"errmsg"` Errmsg string `json:"errmsg"`
} }
type MJopenvpn struct {
MsgType string `json:"msgtype"`
Name string `json:"name"`
Dept string `json:"dept"`
UserID string `json:"userid"`
Msg string `json:"msg"`
}
// //
// //
// quickly Get & Set Json // quickly Get & Set Json
...@@ -325,3 +335,13 @@ func GJBoom(i, s string) MJBoom { ...@@ -325,3 +335,13 @@ func GJBoom(i, s string) MJBoom {
boom.DataStr = s boom.DataStr = s
return boom return boom
} }
// openvpn
func GJOpenVPN(name, id, dept string) MJopenvpn {
var ovpn MJopenvpn
ovpn.MsgType = WxWorkInteraction_OpenVPN
ovpn.Name = name
ovpn.UserID = id
ovpn.Dept = dept
return ovpn
}
...@@ -4,7 +4,7 @@ import ( ...@@ -4,7 +4,7 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil" "io"
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
...@@ -61,7 +61,7 @@ func SendMsg(server, msgtype string, v interface{}) { ...@@ -61,7 +61,7 @@ func SendMsg(server, msgtype string, v interface{}) {
query := url_link.RawQuery query := url_link.RawQuery
// 读取数据 // 读取数据
body, err := ioutil.ReadAll(resp.Body) body, err := io.ReadAll(resp.Body)
if err != nil { if err != nil {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
} }
...@@ -106,7 +106,7 @@ func SendGetRequest(link *string) ([]byte, error) { ...@@ -106,7 +106,7 @@ func SendGetRequest(link *string) ([]byte, error) {
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
return nil, fmt.Errorf("url:%s,StatusCode:%d", *link, resp.StatusCode) return nil, fmt.Errorf("url:%s,StatusCode:%d", *link, resp.StatusCode)
} }
return ioutil.ReadAll(resp.Body) return io.ReadAll(resp.Body)
} }
// 发送 带Data的Post请求 // 发送 带Data的Post请求
...@@ -121,7 +121,7 @@ func SendPostRequestWithData(link *string, data interface{}) ([]byte, error) { ...@@ -121,7 +121,7 @@ func SendPostRequestWithData(link *string, data interface{}) ([]byte, error) {
return nil, err return nil, err
} }
defer resp.Body.Close() defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body) body, err := io.ReadAll(resp.Body)
return body, err return body, err
} }
...@@ -249,3 +249,12 @@ func GetSendServer(hostname string) func(msgtype string, v interface{}) { ...@@ -249,3 +249,12 @@ func GetSendServer(hostname string) func(msgtype string, v interface{}) {
} }
return sendserver return sendserver
} }
func SendOpenVPNMsg(v interface{}) string {
openvpn_server := "http://192.168.0.11:16825/api"
b, err := SendPostRequestWithData(&openvpn_server, v)
if err != nil {
return err.Error()
}
return string(b)
}
...@@ -2,7 +2,7 @@ package public ...@@ -2,7 +2,7 @@ package public
import ( import (
"fmt" "fmt"
"io/ioutil" "os"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
...@@ -10,7 +10,7 @@ import ( ...@@ -10,7 +10,7 @@ import (
var key_time int = 0 var key_time int = 0
func getYAML(file string) (map[string][]string, error) { func getYAML(file string) (map[string][]string, error) {
yamlFile, err := ioutil.ReadFile(file) yamlFile, err := os.ReadFile(file)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -141,7 +141,6 @@ func GetWxworkWorkerInfo(userid string) (wxJsonWorkerInfo, error) { ...@@ -141,7 +141,6 @@ func GetWxworkWorkerInfo(userid string) (wxJsonWorkerInfo, error) {
// https://developer.work.weixin.qq.com/document/path/95351 // https://developer.work.weixin.qq.com/document/path/95351
func GetWxworkWorkerDepartmentName(deptID int) (string, error) { func GetWxworkWorkerDepartmentName(deptID int) (string, error) {
var wd wxJsonWorkerDepartment var wd wxJsonWorkerDepartment
link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=%s&id=%d", WxWorkToken, deptID) link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=%s&id=%d", WxWorkToken, deptID)
data, err := SendGetRequest(&link) data, err := SendGetRequest(&link)
if err != nil { if err != nil {
...@@ -155,3 +154,20 @@ func GetWxworkWorkerDepartmentName(deptID int) (string, error) { ...@@ -155,3 +154,20 @@ func GetWxworkWorkerDepartmentName(deptID int) (string, error) {
} }
return wd.Department.Name, nil return wd.Department.Name, nil
} }
// func GetWxworkDepartmentList() {
// var wd wxDepartmentList
// link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%s", WxWorkToken)
// data, err := SendGetRequest(&link)
// if err != nil {
// return "", err
// }
// if err := ParseJson(data, &wd); err != nil {
// return "", err
// }
// if wd.Errcode != 0 {
// return "", fmt.Errorf(wd.Errmsg)
// }
// return wd.Department.Name, nil
// }
...@@ -120,3 +120,23 @@ type wxJsonWorkerDepartmentExtattrDept struct { ...@@ -120,3 +120,23 @@ type wxJsonWorkerDepartmentExtattrDept struct {
Parentid int `json:"parentid"` Parentid int `json:"parentid"`
Order int `json:"order"` Order int `json:"order"`
} }
type wxDepartmentList struct {
Errcode int `json:"errcode"`
Errmsg string `json:"errmsg"`
Department []wxDepartmentListData `json:"department"`
}
type wxDepartmentListData struct {
ID int `json:"id"`
Name string `json:"name"`
Parentid int `json:"parentid"`
Order int `json:"order"`
DepartmentLeader []interface{} `json:"department_leader"`
}
type wxDepartmentListAllName struct {
Department []wxDepartmentListData `json:"department"`
}
type wxDepartmentListAllNameData struct {
ID int `json:"id"`
Name string `json:"name"`
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment