Commit 1502af8b by 陶腾飞

添加openvpn的处理逻辑

parent aa2ef175
......@@ -161,6 +161,8 @@ func GetLDAPDeptFromHostnameP2(part string, groupname bool) string {
result = Dept_zw_qbbm_hw_string + unit
case "DY":
result = Dept_zw_qbbm_dy_string + unit
case "BD":
result = Dept_zw_qbbm_bd_string + unit
case "BGYJ":
result = Dept_zw_qbbm_bgyj_string + unit
}
......
......@@ -61,7 +61,6 @@ var Dir_tmp string = GetEnv("tmp")
const Dir_softlike string = `D:\software\softlike\`
const Dir_application string = `D:\software\application\`
const Dir_otherFile string = `D:\file\`
// application //
const App_MultiSplit string = SMB_ADSoftOthTool + "win_MultiSplit.exe"
......@@ -100,6 +99,7 @@ var WxWorkToken string
const WxWorkInteraction_RemoteTerminal = "请求远程终端"
const WxWorkInteraction_SignUP = "申请个人账号"
const WxWorkInteraction_Dimission = "停用个人账号"
const WxWorkInteraction_OpenVPN = "申请OpenVPN"
// log level //
var Loglevel string = INFO
......
......@@ -2,8 +2,9 @@ package public
import (
"fmt"
"io/ioutil"
"io"
"net/http"
"os"
"strings"
)
......@@ -13,7 +14,7 @@ func DealMsgEnter(w http.ResponseWriter, r *http.Request) {
url := strings.Split(r.URL.Path, "/")
query := r.URL.RawQuery
unmsg, err := ioutil.ReadAll(r.Body)
unmsg, err := io.ReadAll(r.Body)
if err != nil {
LOG(ERROR, NULL, err)
w.Write([]byte(""))
......@@ -35,7 +36,7 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) {
case Msg_File:
var err error
file := url[2]
ret, err = ioutil.ReadFile(Dir_application + file)
ret, err = os.ReadFile(Dir_application + file)
if err != nil {
LOG(ERROR, NULL, err)
......@@ -46,20 +47,11 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) {
case Msg_Softlike:
var err error
file := url[2]
ret, err = ioutil.ReadFile(Dir_softlike + file)
ret, err = os.ReadFile(Dir_softlike + file)
if err != nil {
LOG(ERROR, NULL, 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:
LOG(INFO, "", query)
return []byte(WXAuth(query)), nil
......@@ -615,7 +607,7 @@ func (ci *MJCmdbInfo) MsgDeal() interface{} {
return ci
}
// 关于 wxwork 企业微信 的 消息处理
// 关于 企业微信菜单 的 消息处理
func (wxwork *MJwxwork) MsgDealSend() {
// 创建菜单调用工具:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10786
// 创建菜单官方说明:https://work.weixin.qq.com/api/doc/90000/90135/90231
......@@ -800,6 +792,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
}
}(wxwork.Name, wxwork.UserID)
wxwork.Result = "开始关机,请等待~"
// 电源管理 电源状态
case WXEK_zwDevopsPowerStatus:
wxwork.SendText("收到查询指令,正在处理!")
......@@ -877,20 +870,61 @@ func (wxwork *MJwxwork) MsgDealSend() {
return
}
wxwork.Result = fmt.Sprintf("您的主机IP地址为%s", ip)
// 账号管理 获取个人账号
// 账号管理 获取主机个人账号
case WXEK_zwDevopsAccountSelf:
LOG(INFO, wxwork.Instruction, fmt.Sprintf("%s 获取个人账号", wxwork.Name))
wxwork.Result = "登录名:姓名拼音小写\n" +
"完整登录名:姓名拼音小写@zhiweireach.com"
// 账号管理 获取公共账号
// 账号管理 获取主机公共账号
case WXEK_zwDevopsAccountPublic:
LOG(INFO, wxwork.Instruction, fmt.Sprintf("%s 获取公共账号", wxwork.Name))
wxwork.Result = "登录名:组名首字母小写zhiwei\n" +
"完整登录名:组名首字母小写zhiwei@zhiweireach.com\n" +
"例,巨量:jlzhiwei,报告研究中心:bgyjzxzhiwei\n" +
"密码: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:
if wxwork.Name == "陶腾飞" || wxwork.Name == "边爽" {
if wxwork.Name == "陶腾飞" || wxwork.Name == "边爽" || wxwork.Name == "包佳琪" {
if strings.Contains(wxwork.Content, "\n") {
msgtype := strings.Split(wxwork.Content, "\n")[0]
......@@ -916,6 +950,16 @@ func (wxwork *MJwxwork) MsgDealSend() {
rep.WxUser = wxwork.UserID
rep.DataStr = wxwork.Content
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:
wxwork.Result = fmt.Sprintf("%s 不是有效的", msgtype)
......
......@@ -81,6 +81,8 @@ const WXEK_zwDevopsPowerStatus string = "zwdevops_power_status"
const WXEK_zwDevopsHostGetinfo string = "zwdevops_host_getinfo"
const WXEK_zwDevopsAccountSelf string = "zwdevops_account_self"
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"
......@@ -179,6 +181,14 @@ type MJBoom struct {
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
......@@ -325,3 +335,13 @@ func GJBoom(i, s string) MJBoom {
boom.DataStr = s
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 (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"io"
"net"
"net/http"
"net/url"
......@@ -61,7 +61,7 @@ func SendMsg(server, msgtype string, v interface{}) {
query := url_link.RawQuery
// 读取数据
body, err := ioutil.ReadAll(resp.Body)
body, err := io.ReadAll(resp.Body)
if err != nil {
LOG(ERROR, NULL, err)
}
......@@ -106,7 +106,7 @@ func SendGetRequest(link *string) ([]byte, error) {
if resp.StatusCode != 200 {
return nil, fmt.Errorf("url:%s,StatusCode:%d", *link, resp.StatusCode)
}
return ioutil.ReadAll(resp.Body)
return io.ReadAll(resp.Body)
}
// 发送 带Data的Post请求
......@@ -121,7 +121,7 @@ func SendPostRequestWithData(link *string, data interface{}) ([]byte, error) {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
body, err := io.ReadAll(resp.Body)
return body, err
}
......@@ -249,3 +249,12 @@ func GetSendServer(hostname string) func(msgtype string, v interface{}) {
}
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
import (
"fmt"
"io/ioutil"
"os"
"gopkg.in/yaml.v3"
)
......@@ -10,7 +10,7 @@ import (
var key_time int = 0
func getYAML(file string) (map[string][]string, error) {
yamlFile, err := ioutil.ReadFile(file)
yamlFile, err := os.ReadFile(file)
if err != nil {
return nil, err
}
......
......@@ -141,7 +141,6 @@ func GetWxworkWorkerInfo(userid string) (wxJsonWorkerInfo, error) {
// https://developer.work.weixin.qq.com/document/path/95351
func GetWxworkWorkerDepartmentName(deptID int) (string, error) {
var wd wxJsonWorkerDepartment
link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=%s&id=%d", WxWorkToken, deptID)
data, err := SendGetRequest(&link)
if err != nil {
......@@ -155,3 +154,20 @@ func GetWxworkWorkerDepartmentName(deptID int) (string, error) {
}
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 {
Parentid int `json:"parentid"`
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