Commit 654776f7 by 陶腾飞

2022/07/22 v2.6.0

parent c29b95e2
...@@ -104,8 +104,9 @@ ...@@ -104,8 +104,9 @@
- 2022/04/29 v2.5.5 ci工具 自我升级 - 2022/04/29 v2.5.5 ci工具 自我升级
- 2022/05/26 v2.5.6 更新主要计算机功能bug修复 - 2022/05/26 v2.5.6 更新主要计算机功能bug修复
- 2022/06/14 v2.5.7 更新日志输出、删除情报一二三部 - 2022/06/14 v2.5.7 更新日志输出、删除情报一二三部
- 2022/07/6 v2.5.8 增加抖音组,解决walk的反射问题,优化软件安装的下载速度 - 2022/07/06 v2.5.8 增加抖音组,解决walk的反射问题,优化软件安装的下载速度
- 2022/07/7 v2.5.9 隐藏下载软件的窗口, - 2022/07/07 v2.5.9 隐藏下载软件的窗口
- 2022/07/22 v2.6.0 使用企业微信作为注册个人账号的验证方式
## 四、其他说明 ## 四、其他说明
......
package main package main
import ( import (
pub "git.zhiweidata.top/taotengfei/AD-Control-Golang/public" "log"
"encoding/json" "encoding/json"
"flag" "flag"
"fmt" "fmt"
"os" "os"
"strings" "strings"
pub "git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
. "github.com/lxn/walk/declarative"
) )
const INFO = pub.INFO const INFO = pub.INFO
...@@ -66,7 +69,10 @@ func main() { ...@@ -66,7 +69,10 @@ func main() {
} else if *wolPartText != "" { } else if *wolPartText != "" {
pub.DomainCotroller() pub.DomainCotroller()
wolPart(*wolPartText) wolPart(*wolPartText)
} else {
gui()
} }
} }
func loglevelSet(l string) { func loglevelSet(l string) {
switch l { switch l {
...@@ -157,3 +163,22 @@ func wolALL() { ...@@ -157,3 +163,22 @@ func wolALL() {
func wolPart(p string) { func wolPart(p string) {
pub.SendADMsg(pub.Msg_Wake, pub.GJwakeList(p)) pub.SendADMsg(pub.Msg_Wake, pub.GJwakeList(p))
} }
func gui() {
if _, err := (MainWindow{
Title: "软件安装",
MinSize: Size{Width: 150, Height: 100},
Size: Size{Width: 150, Height: 100},
Layout: VBox{MarginsZero: true}, // 请勿删除
Children: []Widget{
PushButton{
Text: "初始化域计算机",
OnClicked: guiInitDC,
},
},
}.Run()); err != nil {
log.Fatal(err)
}
}
func guiInitDC() {
}
module adct module adct
go 1.18 go 1.17
require git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0
replace git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0 => ..\public replace git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0 => ..\public
require ( require (
git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0
github.com/lxn/walk v0.0.0-20210112085537-c389da54e794
)
require (
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect
github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect
github.com/go-ldap/ldap/v3 v3.4.2 // indirect github.com/go-ldap/ldap/v3 v3.4.2 // indirect
github.com/gookit/color v1.5.0 // indirect github.com/gookit/color v1.5.0 // indirect
github.com/lxn/win v0.0.0-20210218163916-a377121e959e // indirect
github.com/mozillazg/go-pinyin v0.19.0 // indirect github.com/mozillazg/go-pinyin v0.19.0 // indirect
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 // indirect golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 // indirect
golang.org/x/text v0.3.7 // indirect golang.org/x/text v0.3.7 // indirect
gopkg.in/Knetic/govaluate.v3 v3.0.0 // indirect
) )
github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ=
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
...@@ -10,6 +12,10 @@ github.com/go-ldap/ldap/v3 v3.4.2 h1:zFZKcXKLqZpFMrMQGHeHWKXbDTdNCmhGY9AK41zPh+8 ...@@ -10,6 +12,10 @@ github.com/go-ldap/ldap/v3 v3.4.2 h1:zFZKcXKLqZpFMrMQGHeHWKXbDTdNCmhGY9AK41zPh+8
github.com/go-ldap/ldap/v3 v3.4.2/go.mod h1:iYS1MdmrmceOJ1QOTnRXrIs7i3kloqtmGQjRvjKpyMg= github.com/go-ldap/ldap/v3 v3.4.2/go.mod h1:iYS1MdmrmceOJ1QOTnRXrIs7i3kloqtmGQjRvjKpyMg=
github.com/gookit/color v1.5.0 h1:1Opow3+BWDwqor78DcJkJCIwnkviFi+rrOANki9BUFw= github.com/gookit/color v1.5.0 h1:1Opow3+BWDwqor78DcJkJCIwnkviFi+rrOANki9BUFw=
github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo=
github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 h1:NVRJ0Uy0SOFcXSKLsS65OmI1sgCCfiDUPj+cwnH7GZw=
github.com/lxn/walk v0.0.0-20210112085537-c389da54e794/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ=
github.com/lxn/win v0.0.0-20210218163916-a377121e959e h1:H+t6A/QJMbhCSEH5rAuRxh+CtW96g0Or0Fxa9IKr4uc=
github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk=
github.com/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2uUVN8c= github.com/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2uUVN8c=
github.com/mozillazg/go-pinyin v0.19.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc= github.com/mozillazg/go-pinyin v0.19.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
...@@ -24,14 +30,25 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPh ...@@ -24,14 +30,25 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o=
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 h1:PgUUmg0gNMIPY2WafhL/oLyQGw+kdTNPlVWOjltpp3w= golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 h1:PgUUmg0gNMIPY2WafhL/oLyQGw+kdTNPlVWOjltpp3w=
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/Knetic/govaluate.v3 v3.0.0 h1:18mUyIt4ZlRlFZAAfVetz4/rzlJs9yhN+U02F4u1AOc=
gopkg.in/Knetic/govaluate.v3 v3.0.0/go.mod h1:csKLBORsPbafmSCGTEh3U7Ozmsuq8ZSIlKk1bcqph0E=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<asmv1:assemblyIdentity name="adct..exe" version="1.10.2.0" publicKeyToken="0000000000000000" language="非特定语言" processorArchitecture="msil" type="win32" />
<description asmv2:publisher="知微" asmv2:product="域控制中心" xmlns="urn:schemas-microsoft-com:asm.v1" />
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
</windowsSettings>
</application>
</assembly>
\ No newline at end of file
...@@ -16,15 +16,19 @@ func messionloop() { ...@@ -16,15 +16,19 @@ func messionloop() {
// 若通道为空,则阻塞 // 若通道为空,则阻塞
// 若通道有数据,则读取 // 若通道有数据,则读取
// 若通道关闭,则退出 // 若通道关闭,则退出
// 获取cmdb的token
if !setCMDBToken() { if !setCMDBToken() {
os.Exit(-1) os.Exit(-1)
} }
pub.Opt_UserActivitydetection_state = getOption(pub.Opt_UserActivitydetection) // 获取企业微信的token
pub.Opt_SendWX_state = getOption(pub.Opt_SendWX) setWXWorkToken()
pub.Opt_UserActivitydetection_state = reg.Query_DC(pub.Opt_UserActivitydetection)
pub.Opt_SendWX_state = reg.Query_DC(pub.Opt_SendWX)
go func() { go func() {
onehour := time.NewTicker(1 * time.Minute) onehour := time.NewTicker(10 * time.Minute)
defer onehour.Stop() defer onehour.Stop()
for range onehour.C { for range onehour.C {
setCMDBToken() setCMDBToken()
...@@ -34,11 +38,17 @@ func messionloop() { ...@@ -34,11 +38,17 @@ func messionloop() {
oneminute := time.NewTicker(1 * time.Minute) oneminute := time.NewTicker(1 * time.Minute)
defer oneminute.Stop() defer oneminute.Stop()
for range oneminute.C { for range oneminute.C {
pub.Opt_UserActivitydetection_state = getOption(pub.Opt_UserActivitydetection) pub.Opt_UserActivitydetection_state = reg.Query_DC(pub.Opt_UserActivitydetection)
pub.Opt_SendWX_state = getOption(pub.Opt_SendWX) pub.Opt_SendWX_state = reg.Query_DC(pub.Opt_SendWX)
}
}()
go func() {
sk := time.NewTicker(100 * time.Minute)
defer sk.Stop()
for range sk.C {
setWXWorkToken()
} }
}() }()
} }
func setCMDBToken() bool { func setCMDBToken() bool {
...@@ -68,6 +78,23 @@ func setCMDBToken() bool { ...@@ -68,6 +78,23 @@ func setCMDBToken() bool {
pub.Cmdb_token = string(r.Token) pub.Cmdb_token = string(r.Token)
return true return true
} }
func getOption(opt string) string {
return reg.Query_DC(opt) // https://developer.work.weixin.qq.com/document/path/91039
func setWXWorkToken() {
link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s", pub.WxworkCorid, pub.WxworkCorpSecret)
data, err := pub.SendGetRequest(&link)
if err != nil {
pub.LOG(ERROR, "automatic", err)
}
var wt pub.WxToken
if pub.ParseJson(data, &wt); err != nil {
pub.LOG(ERROR, "automatic", err)
}
if wt.Errcode == 0 {
reg.Write_DC(pub.Reg_Key_WxworkToken, wt.Access_token)
} else {
pub.LOG(ERROR, "automatic", wt.Errmsg)
}
pub.WxWorkToken = wt.Access_token
} }
module AD-Control-Golang/daemon module AD-Control-Golang/daemon
go 1.18 go 1.17
require git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0 require git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0
...@@ -8,12 +8,15 @@ require git.zhiweidata.top/taotengfei/AD-Control-Golang/registry v0.0.0 ...@@ -8,12 +8,15 @@ require git.zhiweidata.top/taotengfei/AD-Control-Golang/registry v0.0.0
require ( require (
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect
github.com/PuerkitoBio/goquery v1.8.0 // indirect
github.com/andybalholm/cascadia v1.3.1 // indirect
github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect
github.com/go-ldap/ldap/v3 v3.4.2 // indirect github.com/go-ldap/ldap/v3 v3.4.2 // indirect
github.com/gookit/color v1.5.0 // indirect github.com/gookit/color v1.5.0 // indirect
github.com/mozillazg/go-pinyin v0.19.0 // indirect github.com/mozillazg/go-pinyin v0.19.0 // indirect
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 // indirect golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 // indirect
golang.org/x/text v0.3.7 // indirect golang.org/x/text v0.3.7 // indirect
) )
......
github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ=
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
...@@ -24,14 +28,23 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPh ...@@ -24,14 +28,23 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o=
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 h1:PgUUmg0gNMIPY2WafhL/oLyQGw+kdTNPlVWOjltpp3w= golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 h1:PgUUmg0gNMIPY2WafhL/oLyQGw+kdTNPlVWOjltpp3w=
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
...@@ -187,29 +187,29 @@ func (cir *CIRecordStartup) GetDept() (string, error) { ...@@ -187,29 +187,29 @@ func (cir *CIRecordStartup) GetDept() (string, error) {
} }
switch hostnameSplit[1] { switch hostnameSplit[1] {
case "JL": case "JL":
result = Dept_zw_qbmb_jl_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_jl_string + Dept_zw_qbbm_unit
case "ZJ": case "ZJ":
result = Dept_zw_qbmb_zj_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_zj_string + Dept_zw_qbbm_unit
case "MT": case "MT":
result = Dept_zw_qbmb_mt_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_mt_string + Dept_zw_qbbm_unit
case "DD": case "DD":
result = Dept_zw_qbmb_dd_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_dd_string + Dept_zw_qbbm_unit
case "JR": case "JR":
result = Dept_zw_qbmb_jr_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_jr_string + Dept_zw_qbbm_unit
case "TXHD": case "TXHD":
result = Dept_zw_qbmb_txhd_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_txhd_string + Dept_zw_qbbm_unit
case "TXWJ": case "TXWJ":
result = Dept_zw_qbmb_txwj_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_txwj_string + Dept_zw_qbbm_unit
case "JS": case "JS":
result = Dept_zw_qbmb_js_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_js_string + Dept_zw_qbbm_unit
case "JD": case "JD":
result = Dept_zw_qbmb_jd_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_jd_string + Dept_zw_qbbm_unit
case "HW": case "HW":
result = Dept_zw_qbmb_hw_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_hw_string + Dept_zw_qbbm_unit
case "DY": case "DY":
result = Dept_zw_qbmb_dy_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_dy_string + Dept_zw_qbbm_unit
case "BGYJ": case "BGYJ":
result = Dept_zw_qbmb_bgyj_string + Dept_zw_qbbm_unit result = Dept_zw_qbbm_bgyj_string + Dept_zw_qbbm_unit
default: default:
result = ERROR result = ERROR
} }
......
...@@ -15,21 +15,40 @@ const Dept_zw_peixun = "培训" ...@@ -15,21 +15,40 @@ const Dept_zw_peixun = "培训"
const Dept_zw_chaiwu = "财务" const Dept_zw_chaiwu = "财务"
const Dept_zw_jishu = "技术" const Dept_zw_jishu = "技术"
const Dept_zw_qbmb = "情报部门" const Dept_zw_qbbm = "情报部门"
const Dept_zw_qbmb_jl_string = "巨量" const Dept_zw_qbbm_jl_string = "巨量"
const Dept_zw_qbmb_zj_string = "字节" const Dept_zw_qbbm_zj_string = "字节"
const Dept_zw_qbmb_mt_string = "美团" const Dept_zw_qbbm_mt_string = "美团"
const Dept_zw_qbmb_dd_string = "滴滴" const Dept_zw_qbbm_dd_string = "滴滴"
const Dept_zw_qbmb_jr_string = "金融" const Dept_zw_qbbm_jr_string = "金融"
const Dept_zw_qbmb_txhd_string = "腾讯互动" const Dept_zw_qbbm_txhd_string = "腾讯互动"
const Dept_zw_qbmb_txwj_string = "腾讯危机" const Dept_zw_qbbm_txwj_string = "腾讯危机"
const Dept_zw_qbmb_js_string = "技术" const Dept_zw_qbbm_js_string = "技术"
const Dept_zw_qbmb_jd_string = "京东" const Dept_zw_qbbm_jd_string = "京东"
const Dept_zw_qbmb_hw_string = "华为" const Dept_zw_qbbm_hw_string = "华为"
const Dept_zw_qbmb_dy_string = "抖音" const Dept_zw_qbbm_dy_string = "抖音"
const Dept_zw_qbmb_bgyj_string = "报告研究中心" const Dept_zw_qbbm_bgyj_string = "报告研究中心"
const Dept_zw_qbbm_xmglwyh_string = "项目管理委员会"
const Dept_zw_zztd = "郑州团队"
const Dept_ldap_nb_12 = "宁波-12"
const Dept_ldap_nb_7 = "宁波-704"
const Dept_ldap_zz_1613 = "郑州-1613"
var Dept_zw_qbbm_map map[string]string = map[string]string{
"波塞冬Poseidon(华)": Dept_zw_qbbm_hw_string,
"盖娅Gaia(美)": Dept_zw_qbbm_mt_string,
"格劳克斯Glaucus(危)": Dept_zw_qbbm_txwj_string,
"哈迪斯Hades(互)": Dept_zw_qbbm_txhd_string,
"赫尔墨斯Hermes(京)": Dept_zw_qbbm_jd_string,
"克洛里斯Chloris(字)": Dept_zw_qbbm_zj_string,
"美杜莎Medusa(滴)": Dept_zw_qbbm_dd_string,
"普罗米修斯Prometheus": Dept_zw_qbbm_dy_string,
"雅典娜Athena(巨)": Dept_zw_qbbm_jl_string,
"赫斯提亚Hestia(研)": Dept_zw_qbbm_bgyj_string,
"宙斯Zeus": Dept_zw_jishu,
}
var Dept_zw_region_array = []string{Region_nb, Region_zz} var Dept_zw_region_array = []string{Region_nb, Region_zz}
var Dept_zw_noqbmm_array = []string{Dept_zw_changpin, Dept_zw_renshi, Dept_zw_peixun, Dept_zw_chaiwu, Dept_zw_jishu} var Dept_zw_noqbmm_array = []string{Dept_zw_changpin, Dept_zw_renshi, Dept_zw_peixun, Dept_zw_chaiwu, Dept_zw_jishu}
...@@ -81,3 +100,23 @@ func GetPostationFromHostname(hostname string) (string, error) { ...@@ -81,3 +100,23 @@ func GetPostationFromHostname(hostname string) (string, error) {
} }
} }
func GetQBBMdeptFromHostname(host, region string) (string, error) {
pop, err := GetPostationFromHostname(host)
if err != nil {
return "", err
}
var r string
switch region {
case Region_nb:
switch pop {
case Cmdb_Position_12:
r = Dept_ldap_nb_12
case Cmdb_Position_7:
r = Dept_ldap_nb_7
}
case Region_zz:
r = Dept_ldap_zz_1613
}
return r, err
}
...@@ -9,6 +9,8 @@ var Active bool = true ...@@ -9,6 +9,8 @@ var Active bool = true
const SymbolHostname = "-" const SymbolHostname = "-"
const SymbolSplit = "," const SymbolSplit = ","
const SymbolUrl = "_"
const SymbolDH = "、"
// AD-Control // // AD-Control //
...@@ -72,6 +74,7 @@ const ( ...@@ -72,6 +74,7 @@ const (
) )
const Reg_Key_cmdbtoken string = "cmdb_token" const Reg_Key_cmdbtoken string = "cmdb_token"
const Reg_Key_WxworkToken string = "WxworkToken"
const Reg_Value_ON string = "ON" const Reg_Value_ON string = "ON"
const Reg_Value_OFF string = "OFF" const Reg_Value_OFF string = "OFF"
...@@ -81,10 +84,6 @@ const Cmd_c string = "cmd /c " ...@@ -81,10 +84,6 @@ const Cmd_c string = "cmd /c "
const Cmd_k string = "cmd /k " const Cmd_k string = "cmd /k "
const Cmd_K_Start string = "cmd /k start " const Cmd_K_Start string = "cmd /k start "
//
const Msg_file = "file"
const Msg_softlike = "softlike"
// wxwork key // // wxwork key //
var WxworkBotLink string var WxworkBotLink string
...@@ -94,6 +93,7 @@ var WxworkReceiverId string ...@@ -94,6 +93,7 @@ var WxworkReceiverId string
var WxworkCorid string var WxworkCorid string
var WxworkCorpSecret string var WxworkCorpSecret string
var WxWorkAgentID string var WxWorkAgentID string
var WxWorkToken string
const WxWorkInteraction_RemoteTerminal = "请求远程终端" const WxWorkInteraction_RemoteTerminal = "请求远程终端"
const WxWorkInteraction_SignUP = "申请个人账号" const WxWorkInteraction_SignUP = "申请个人账号"
......
module git.zhiweidata.top/taotengfei/AD-Control-Golang/public module git.zhiweidata.top/taotengfei/AD-Control-Golang/public
go 1.18 go 1.17
require ( require (
github.com/PuerkitoBio/goquery v1.8.0
github.com/go-ldap/ldap/v3 v3.4.2 github.com/go-ldap/ldap/v3 v3.4.2
github.com/gookit/color v1.5.0 github.com/gookit/color v1.5.0
github.com/mozillazg/go-pinyin v0.19.0 github.com/mozillazg/go-pinyin v0.19.0
...@@ -11,8 +12,11 @@ require ( ...@@ -11,8 +12,11 @@ require (
require ( require (
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect
github.com/andybalholm/cascadia v1.3.1 // indirect
github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 // indirect golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 // indirect
) )
replace git.zhiweidata.top/taotengfei/AD-Control-Golang/registry v0.0.0 => ..\registry
\ No newline at end of file
github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ=
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
...@@ -24,14 +28,23 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPh ...@@ -24,14 +28,23 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o=
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 h1:PgUUmg0gNMIPY2WafhL/oLyQGw+kdTNPlVWOjltpp3w= golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 h1:PgUUmg0gNMIPY2WafhL/oLyQGw+kdTNPlVWOjltpp3w=
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
...@@ -14,10 +14,11 @@ import ( ...@@ -14,10 +14,11 @@ import (
// } // }
// 解析Json 并放到变量中 // 解析Json 并放到变量中
func ParseJson(unmsg []byte, v interface{}) { func ParseJson(unmsg []byte, v interface{}) error {
if err := json.Unmarshal(unmsg, v); err != nil { if err := json.Unmarshal(unmsg, v); err != nil {
LOG(ERROR, "Parse Json Error", fmt.Sprintf("%v %v", err, v)) return fmt.Errorf("%v %v", err, v)
} }
return nil
} }
// Json 转 Byte // Json 转 Byte
......
...@@ -31,7 +31,7 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) { ...@@ -31,7 +31,7 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) {
var ret []byte var ret []byte
switch msgtype { switch msgtype {
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 = ioutil.ReadFile(Dir_application + file)
...@@ -40,7 +40,7 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) { ...@@ -40,7 +40,7 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
return nil, err return nil, err
} }
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 = ioutil.ReadFile(Dir_softlike + file)
...@@ -48,6 +48,10 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) { ...@@ -48,6 +48,10 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
return nil, err return nil, err
} }
case Msg_WXAuth:
return []byte(WXAuth(query)), nil
// 报告 消息 // 报告 消息
case Msg_Report: case Msg_Report:
var msg MJreport var msg MJreport
...@@ -76,6 +80,7 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) { ...@@ -76,6 +80,7 @@ func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) {
ice := msg.MsgDeal() ice := msg.MsgDeal()
ret = ReParseJson(&ice) ret = ReParseJson(&ice)
// 将包含关于知微运维平台的人员、权限变化的任何消息
default: default:
msg := ParseWX(query, &unmsg) msg := ParseWX(query, &unmsg)
go msg.MsgDealSend() go msg.MsgDealSend()
...@@ -106,6 +111,7 @@ func (rep *MJreport) MsgDeal() interface{} { ...@@ -106,6 +111,7 @@ func (rep *MJreport) MsgDeal() interface{} {
LOG(ERROR, rep.Instruction, err) LOG(ERROR, rep.Instruction, err)
} else { } else {
LOG(INFO, rep.Instruction, rep.Computername+" 关机") LOG(INFO, rep.Instruction, rep.Computername+" 关机")
SendWXWrokTextToChatAccountManager(rep.Computername + " 关机")
} }
} }
// 客户端 // 客户端
...@@ -127,6 +133,8 @@ func (rep *MJreport) MsgDeal() interface{} { ...@@ -127,6 +133,8 @@ func (rep *MJreport) MsgDeal() interface{} {
} }
} }
LOG(INFO, rep.Instruction, rep.Computername+" 开机") LOG(INFO, rep.Instruction, rep.Computername+" 开机")
SendWXWrokTextToChatAccountManager(rep.Computername + " 开机")
// 客户端 // 客户端
case Msg_status_deal: case Msg_status_deal:
return nil return nil
...@@ -135,11 +143,12 @@ func (rep *MJreport) MsgDeal() interface{} { ...@@ -135,11 +143,12 @@ func (rep *MJreport) MsgDeal() interface{} {
case Msg_Report_WillLogInUser: case Msg_Report_WillLogInUser:
l := fmt.Sprintf("%s 在 %s 登陆", rep.DataStr, rep.Computername) l := fmt.Sprintf("%s 在 %s 登陆", rep.DataStr, rep.Computername)
LOG(INFO, rep.Instruction, l) LOG(INFO, rep.Instruction, l)
SendWxworkTextToAdmins(l) SendWXWrokTextToChatAccountManager(l)
case Msg_Report_WillLogOutUser: case Msg_Report_WillLogOutUser:
l := fmt.Sprintf("%s 在 %s 注销", rep.DataStr, rep.Computername) l := fmt.Sprintf("%s 在 %s 注销", rep.DataStr, rep.Computername)
LOG(INFO, rep.Instruction, l) LOG(INFO, rep.Instruction, l)
SendWxworkTextToAdmins(l) SendWXWrokTextToChatAccountManager(l)
// 更新主要计算机 // 更新主要计算机
case Msg_Report_UpdatePrimaryHost: case Msg_Report_UpdatePrimaryHost:
...@@ -166,7 +175,10 @@ func (rep *MJreport) MsgDeal() interface{} { ...@@ -166,7 +175,10 @@ func (rep *MJreport) MsgDeal() interface{} {
LOG(ERROR, rep.Instruction, err) LOG(ERROR, rep.Instruction, err)
break break
} }
LOG(INFO, rep.Instruction, fmt.Sprintf("%s is %s's PrimryComputer", rep.Computername, rep.Username)) l := fmt.Sprintf("%s is %s's PrimryComputer", rep.Computername, rep.Username)
LOG(INFO, rep.Instruction, l)
SendWXWrokTextToChatAccountManager(l)
rep.DataStr = Sccessful_CMDB_UPDATE_REQ rep.DataStr = Sccessful_CMDB_UPDATE_REQ
// 客户端 // 客户端
...@@ -179,21 +191,25 @@ func (rep *MJreport) MsgDeal() interface{} { ...@@ -179,21 +191,25 @@ func (rep *MJreport) MsgDeal() interface{} {
// 注册账号 // 注册账号
case Msg_Report_SignUPUser: case Msg_Report_SignUPUser:
switch rep.Status { switch rep.Status {
case Msg_status_commit: case Msg_status_commit:
// 先打印日志
LOG(INFO, rep.Instruction, rep.DataStr) LOG(INFO, rep.Instruction, rep.DataStr)
//SendWxworkTextToHR(rep.DataStr)
SendWxworkTextToAdmins(rep.DataStr)
case Msg_status_deal:
msg := strings.Split(rep.DataStr, "\n") msg := strings.Split(rep.DataStr, "\n")
//region := strings.Split(msg[1], "\n")[1] // 第0行是消息标题
region := strings.Split(msg[1], ":")[1]
dept := strings.Split(msg[2], ":")[1] dept := strings.Split(msg[2], ":")[1]
name := strings.Split(msg[3], ":")[1] name := strings.Split(msg[3], ":")[1]
host := strings.Split(msg[4], ":")[1] host := strings.Split(msg[4], ":")[1]
pinyin := NameToPinyin(name) pinyin := NameToPinyin(name)
LOG(INFO, rep.Instruction, rep.DataStr) ldap_dept, err := GetQBBMdeptFromHostname(host, region)
if err != nil {
LOG(ERROR, rep.Instruction, err)
break
}
searchbase := fmt.Sprintf("-SearchBase 'OU=%s,OU=情报部门,DC=zhiweireach,DC=com'", ldap_dept)
// 判断 用户是否在离职目录中 // 判断 用户是否在离职目录中
dismission, err := LDAP_ExistAccount_dimission(name) dismission, err := LDAP_ExistAccount_dimission(name)
...@@ -235,44 +251,59 @@ func (rep *MJreport) MsgDeal() interface{} { ...@@ -235,44 +251,59 @@ func (rep *MJreport) MsgDeal() interface{} {
} }
// 创建用户 // 创建用户
out, err := PSCommandOutput(fmt.Sprintf(`New-ADUser -Enabled $True -Name "%s" -DisplayName "%s" -SamAccountName "%s" -ChangePasswordAtLogon $True -AccountPassword (ConvertTo-SecureString "%s" -AsPlainText -Force) -Path ((Get-ADOrganizationalUnit -Filter "Name -eq '%s'" ).DistinguishedName) -UserPrincipalName %s@zhiweireach.com`, name, name, pinyin, Defult_user_key, dept, pinyin)) out, err := PSCommandOutput(fmt.Sprintf(`New-ADUser -Enabled $True -Name "%s" -DisplayName "%s" -SamAccountName "%s" -ChangePasswordAtLogon $True -AccountPassword (ConvertTo-SecureString "%s" -AsPlainText -Force) -Path ((Get-ADOrganizationalUnit -Filter "Name -eq '%s'" %s).DistinguishedName) -UserPrincipalName %s@zhiweireach.com`, name, name, pinyin, Defult_user_key, dept, searchbase, pinyin))
if err != nil { if err != nil {
LOG(ERROR, rep.Instruction, fmt.Sprintf("%v\n%s", err, out)) LOG(ERROR, rep.Instruction, fmt.Sprintf("%v\n%s", err, out))
rep.SendWXwork(Error_WXWork_Fail_ReTry) rep.SendWXwork(Error_WXWork_Fail_ReTry)
break break
} }
// 如果创建完成 reply := `您的账号创建好了!
rep.SendWXwork(name + "创建完成") 账号名:姓名拼音小写
初始密码:1Q2W3e4r
登录后需要重置密码,密码规则大小写+数字+至少8位,不能包含用户名
个人账号支持通过“知微运维平台”唤醒主机
该账号在登录时,从左下角的“切换用户”按钮进行登录。
使用时,需要从旧账号手动迁移到个人文件到新账号。`
// 发送给创建对象
SendWxworkTextToAUser(name, reply)
// 命令行记录
LOG(INFO, rep.Instruction, name+"创建完成") LOG(INFO, rep.Instruction, name+"创建完成")
SendWxworkTextToAUser(name, name+"创建完成") // 发送给HR和admin
SendWxworkTextToHR(name + "创建完成")
} }
// 停用账号
case Msg_Report_Dimission: case Msg_Report_Dimission:
switch rep.Status { switch rep.Status {
case Msg_status_commit: case Msg_status_commit:
// 先打印日志
LOG(INFO, rep.Instruction, rep.DataStr)
// 第0行是消息标题
msg := strings.Split(rep.DataStr, "\n") msg := strings.Split(rep.DataStr, "\n")
//region := strings.Split(msg[1], "\n")[1] region := strings.Split(msg[1], ":")[1]
dept := strings.Split(msg[2], ":")[1] dept := strings.Split(msg[2], ":")[1]
name := strings.Split(msg[3], ":")[1] name := strings.Split(msg[3], ":")[1]
if out, err := PSCommandOutput(fmt.Sprintf(`Get-ADUser -Filter 'Name -eq "%s"' -SearchBase ((Get-ADOrganizationalUnit -Filter "Name -eq '%s'" ).DistinguishedName) | disable-ADAccount`, name, dept)); err != nil { // 停用账号
if out, err := PSCommandOutput(fmt.Sprintf(`Get-ADUser -Filter 'Name -eq "%s"' -SearchBase ((Get-ADOrganizationalUnit -Filter "Name -eq '%s'" | Where-Object -filter {$_.DistinguishedName -like "*%s*"}).DistinguishedName) | disable-ADAccount`, name, dept, region)); err != nil {
LOG(ERROR, rep.Instruction, fmt.Sprintf("%v\n%s", err, out)) LOG(ERROR, rep.Instruction, fmt.Sprintf("%v\n%s", err, out))
rep.SendWXwork(Error_WXWork_Fail_ReTry) rep.SendWXwork(Error_WXWork_Fail_ReTry)
break break
} }
if out, err := PSCommandOutput(fmt.Sprintf(`Get-ADUser -Filter 'Name -eq "%s"' -SearchBase ((Get-ADOrganizationalUnit -Filter "Name -eq '%s'" ).DistinguishedName) | Move-ADObject -TargetPath ((Get-ADOrganizationalUnit -Filter "Name -eq '%s'" ).DistinguishedName)`, name, dept, ldap_lz)); err != nil { // 移动到离职目录中
if out, err := PSCommandOutput(fmt.Sprintf(`Get-ADUser -Filter 'Name -eq "%s"' -SearchBase ((Get-ADOrganizationalUnit -Filter "Name -eq '%s'" | Where-Object -filter {$_.DistinguishedName -like "*%s*"}).DistinguishedName ) | Move-ADObject -TargetPath ((Get-ADOrganizationalUnit -Filter "Name -eq '%s'" ).DistinguishedName)`, name, dept, region, ldap_lz)); err != nil {
LOG(ERROR, rep.Instruction, fmt.Sprintf("%v\n%s", err, out)) LOG(ERROR, rep.Instruction, fmt.Sprintf("%v\n%s", err, out))
rep.SendWXwork(Error_WXWork_Fail_ReTry) rep.SendWXwork(Error_WXWork_Fail_ReTry)
break break
} }
LOG(INFO, rep.Instruction, dept+name+" 移动成功") LOG(INFO, rep.Instruction, dept+name+" 个人账号注销完成")
rep.SendWXwork("个人账号创建完成\n" + rep.SendWXwork("个人账号注销完成")
"账号名:姓名拼音小写\n" +
"初始密码:1Q2W3e4r\n" +
"首次登录后需要重置密码,密码规则大小写+数字+至少8位,不包含用户名\n" +
"个人账号支持通过“知微运维平台”远程唤醒主机!")
} }
// 获取软件文件名
case Msg_Report_GetSoftlike: case Msg_Report_GetSoftlike:
switch rep.Status { switch rep.Status {
case Msg_status_commit: case Msg_status_commit:
...@@ -286,6 +317,19 @@ func (rep *MJreport) MsgDeal() interface{} { ...@@ -286,6 +317,19 @@ func (rep *MJreport) MsgDeal() interface{} {
MS.S = rep.DataStr MS.S = rep.DataStr
} }
// 获取URL
case Msg_Report_GetURL:
switch rep.Status {
case Msg_status_commit:
switch rep.DataStr {
case URL_WXWork_QRCode_Login:
rep.Explain = fmt.Sprintf("https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=%s&agentid=%s&redirect_uri=%s&state=%s", WxworkCorid, WxWorkAgentID, URL_Wxwork_QrCode_Redirect, fmt.Sprintf("%s%s%s", rep.PlusStr, SymbolUrl, rep.Computername))
LOG(INFO, rep.Instruction, rep.Computername+"获取企业微信登录二维码")
}
case Msg_status_deal:
MS.S = rep.Explain
}
default: default:
LOG(ERROR, "Default Report Json", rep.Instruction) LOG(ERROR, "Default Report Json", rep.Instruction)
} }
...@@ -773,3 +817,74 @@ func (wxwork *MJwxwork) MsgDealSend() { ...@@ -773,3 +817,74 @@ func (wxwork *MJwxwork) MsgDealSend() {
} }
wxwork.SendResult() wxwork.SendResult()
} }
// /wxauth的企业微信登录后 的 消息处理
func WXAuth(query string) string {
s := strings.Split(query, "&")
q := make(map[string]string, len(s))
for _, j := range s {
t := strings.Split(j, "=")
q[t[0]] = t[1]
}
state := strings.Split(q["state"], SymbolUrl)
msg_type := state[0]
appid := q["appid"]
if appid != WxworkCorid {
LOG(ERROR, "wxauth", "不是预设的appid")
return "不是预设的信息"
}
switch msg_type {
case Msg_Report_SignUPUser:
logtype := "wx_auth_signup_user"
code := q["code"]
if code == "" {
LOG(ERROR, "wxauth", "用户禁止授权")
return "用户禁止授权"
}
hostname := state[1]
// 根据二维码登录后获得的code获取userid
userid, err := GetWXworktUserID(code)
if err != nil {
LOG(ERROR, "wxauth", "获取企业微信token失败")
return "获取企业微信token失败"
}
// 根据userid获取同事的信息
wi, err := GetWxworkWorkerInfo(userid)
if err != nil {
LOG(ERROR, "wxauth", "获取信息失败")
return "获取信息失败"
}
deptlist := make([]string, len(wi.Department))
var dept_output string
for i, j := range wi.Department {
// 根据部门ID,获取部门古希腊名
dept, err := GetWxworkWorkerDepartmentName(j)
if err != nil {
LOG(ERROR, "wxauth", "获取部门信息失败")
return "获取部门信息失败"
}
// 古希腊转现代
if Dept_zw_qbbm_map[dept] != "" {
dept = Dept_zw_qbbm_map[dept]
}
dept_output = dept
deptlist[i] = dept
}
LOG(INFO, logtype, fmt.Sprintf("%s 所属 %s", wi.Name, strings.Join(deptlist, SymbolDH)))
region := Region_nb
for _, j := range deptlist {
if j == Dept_zw_zztd {
region = Region_zz
}
}
l := fmt.Sprintf("%s\n地区:%s\n部门:%s\n姓名:%s\n主机名:%s", WxWorkInteraction_SignUP, region, dept_output, wi.Name, hostname)
LOG(INFO, logtype, l)
SendADMsg(Msg_Report, GJreportPlusString(Msg_Report_SignUPUser, l, wi.Userid))
}
return "请在企业微信中获取处理结果!"
}
...@@ -15,6 +15,9 @@ const Msg_status_deal string = "deal" ...@@ -15,6 +15,9 @@ const Msg_status_deal string = "deal"
// msg type //////////////////////////////////////////////////////////////// // msg type ////////////////////////////////////////////////////////////////
const Msg_File string = "file"
const Msg_Softlike string = "softlike"
const Msg_WXAuth string = "wxauth"
const Msg_Report string = "report" const Msg_Report string = "report"
const Msg_Exec string = "exec" const Msg_Exec string = "exec"
const Msg_Wake string = "wake" const Msg_Wake string = "wake"
...@@ -35,6 +38,7 @@ const Msg_Report_UpdatePrimaryHost string = "UpdatePrimaryHost" ...@@ -35,6 +38,7 @@ const Msg_Report_UpdatePrimaryHost string = "UpdatePrimaryHost"
const Msg_Report_SignUPUser string = "SignUPUser" const Msg_Report_SignUPUser string = "SignUPUser"
const Msg_Report_Dimission string = "Dimission" const Msg_Report_Dimission string = "Dimission"
const Msg_Report_GetSoftlike string = "GetSoftlike" const Msg_Report_GetSoftlike string = "GetSoftlike"
const Msg_Report_GetURL string = "GetURL"
// msg exec type //////////////////////////////////////////////////////////////// // msg exec type ////////////////////////////////////////////////////////////////
...@@ -71,6 +75,12 @@ const WXEK_zwDevopsHostGetinfo string = "zwdevops_host_getinfo" ...@@ -71,6 +75,12 @@ 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 WXWORK_zwDevopsChatAccountManager string = "zwDevopsChatAccountManager"
// URL
const URL_Wxwork_QrCode_Redirect string = "http://zhiweiadserver.xunyang.site:16823/wxauth"
const URL_WXWork_QRCode_Login string = "URL_WXWork_QRCode_Login"
// Registry Root // Registry Root
const ( const (
Msg_Reg_Query = iota Msg_Reg_Query = iota
...@@ -99,6 +109,7 @@ type MJbase struct { ...@@ -99,6 +109,7 @@ type MJbase struct {
Timestamp int64 `json:"timestamp"` Timestamp int64 `json:"timestamp"`
DataBool bool `json:"databool"` DataBool bool `json:"databool"`
DataStr string `json:"datastr"` DataStr string `json:"datastr"`
PlusStr string `json:"plusstr"`
Instruction string `json:"instruction"` Instruction string `json:"instruction"`
Version string `json:"version"` Version string `json:"version"`
} }
...@@ -159,6 +170,14 @@ func GJreportString(s string, d string) interface{} { ...@@ -159,6 +170,14 @@ func GJreportString(s string, d string) interface{} {
rep.DataStr = d rep.DataStr = d
return rep return rep
} }
func GJreportPlusString(s string, d string, p string) interface{} {
var rep MJreport
rep.Init(s)
rep.DataStr = d
rep.PlusStr = p
return rep
}
func GJreportUsernameString(s string, n string, d string) interface{} { func GJreportUsernameString(s string, n string, d string) interface{} {
var rep MJreport var rep MJreport
rep.Init(s) rep.Init(s)
......
...@@ -24,7 +24,7 @@ func Telnet(ip, port string) bool { ...@@ -24,7 +24,7 @@ func Telnet(ip, port string) bool {
var initServer = false var initServer = false
func DownloadFile(url, saveFile string) error { func DownloadFileInside(url, saveFile string) error {
if !initServer { if !initServer {
if Telnet(Host_adserver_wan, DaemonListen[1:]) { if Telnet(Host_adserver_wan, DaemonListen[1:]) {
Host_server_download = Host_adserver_wan + DaemonListen Host_server_download = Host_adserver_wan + DaemonListen
...@@ -46,7 +46,21 @@ func DownloadFile(url, saveFile string) error { ...@@ -46,7 +46,21 @@ func DownloadFile(url, saveFile string) error {
if err := PSCommandWait(cmd); err != nil { if err := PSCommandWait(cmd); err != nil {
return err return err
} }
default:
return fmt.Errorf("不支持该操作系统的下载方式")
} }
return nil return nil
} }
func DownlaodFileOutSide(url, saveFile string) error {
switch OS_Type {
case OS_Type_Windows:
cmd := fmt.Sprintf(`Invoke-WebRequest -uri "%s" -OutFile "%s"`, url, saveFile)
if err := PSCommandWait(cmd); err != nil {
return err
}
default:
return fmt.Errorf("不支持该操作系统的下载方式")
}
return nil
}
...@@ -106,8 +106,7 @@ func SendGetRequest(link *string) ([]byte, error) { ...@@ -106,8 +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)
} }
body, err := ioutil.ReadAll(resp.Body) return ioutil.ReadAll(resp.Body)
return body, err
} }
// 发送 带Data的Post请求 // 发送 带Data的Post请求
...@@ -144,24 +143,19 @@ func SendWX(Content string) { ...@@ -144,24 +143,19 @@ func SendWX(Content string) {
} }
}`) }`)
http.Post(WxworkBotLink, "application/json; charset=utf-8", bytes.NewBuffer(w)) http.Post(WxworkBotLink, "application/json; charset=utf-8", bytes.NewBuffer(w))
} }
// 发送应用消息( // 发送应用消息(
// https://developer.work.weixin.qq.com/document/path/90236 // https://developer.work.weixin.qq.com/document/path/90236
func SendWxworkTextToAUser(nameOrID, text string) error { func SendWxworkTextToAUser(nameOrID, text string) error {
// 获取 最新 token
t, err := GetWXWorkToken()
if err != nil {
return err
}
// 初始化 消息推送 结构体 // 初始化 消息推送 结构体
var wsmt WxSendMsgText var wsmt WxSendMsgText
wsmt.Init() wsmt.Init()
wsmt.Touser = nameOrID wsmt.Touser = nameOrID
wsmt.Text.Content = text wsmt.Text.Content = text
link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s&debug=1", t) link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s&debug=1", WxWorkToken)
// 发送 Post 请求 // 发送 Post 请求
res, err := SendPostRequestWithData(&link, &wsmt) res, err := SendPostRequestWithData(&link, &wsmt)
...@@ -180,12 +174,40 @@ func SendWxworkTextToAUser(nameOrID, text string) error { ...@@ -180,12 +174,40 @@ func SendWxworkTextToAUser(nameOrID, text string) error {
} }
return nil return nil
} }
func SendWXWrokTextToChat(chatid string, Content string) error {
if DomainCotroller() {
if Opt_SendWX_state == "0" {
LOG(WARN, "opt_deny", "取消微信发送")
return fmt.Errorf("取消微信发送")
}
}
// Content不支持发送Json,
w := []byte(`
{
"chatid": ` + chatid + `",
"msgtype":"text",
"text":{
"content" : "` + Content + `"
},
"safe":0
}`)
_, err := http.Post(fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=%s", WxWorkToken), "application/json; charset=utf-8", bytes.NewBuffer(w))
if err != nil {
LOG(ERROR, "send_chat_account_manager", err)
return err
}
return nil
}
func SendWxworkTextToAdmins(nameOrID string) error { func SendWxworkTextToAdmins(nameOrID string) error {
return SendWxworkTextToAUser("TaoTengFei", nameOrID) return SendWxworkTextToAUser("TaoTengFei|BaoJiaQi", nameOrID)
} }
func SendWxworkTextToHR(nameOrID string) error { func SendWxworkTextToHR(nameOrID string) error {
return SendWxworkTextToAUser("BianShuang", nameOrID) return SendWxworkTextToAUser("TaoTengFei|BaoJiaQi|BianShuang", nameOrID)
}
func SendWXWrokTextToChatAccountManager(Conentstring string) error {
return SendWXWrokTextToChat(WXWORK_zwDevopsChatAccountManager, Conentstring)
} }
// 根据主机位置定义发送的服务器 // 根据主机位置定义发送的服务器
......
...@@ -52,6 +52,7 @@ func execcmd_base(cmdargs string) (string, []string, error) { ...@@ -52,6 +52,7 @@ func execcmd_base(cmdargs string) (string, []string, error) {
app = cmdargs app = cmdargs
appargs[0] = "" appargs[0] = ""
} }
fmt.Println(cmdargs)
LOG(INFO, "CMD", cmdargs) LOG(INFO, "CMD", cmdargs)
return app, appargs, nil return app, appargs, nil
} }
...@@ -118,6 +119,12 @@ func Execcmd_waitOutput(cmdargs string) ([]byte, error) { ...@@ -118,6 +119,12 @@ func Execcmd_waitOutput(cmdargs string) ([]byte, error) {
} }
return cmd.CombinedOutput() return cmd.CombinedOutput()
} }
func Execcmd_two_nowait(cmd, cmdargs string) error {
if err := exec.Command(cmd, cmdargs).Start(); err != nil {
return err
}
return nil
}
// 包含标准错误的结果输出 // 包含标准错误的结果输出
func Execcmd_output(cmdargs string) []byte { func Execcmd_output(cmdargs string) []byte {
...@@ -239,7 +246,7 @@ func PSTest_Connection(host string) (bool, error) { ...@@ -239,7 +246,7 @@ func PSTest_Connection(host string) (bool, error) {
// local // local
func OpenWindow(s string) { func OpenWindow(s string) {
Execcmd_nowait("explorer " + s) Execcmd_nowait(fmt.Sprintf(`msedge "%s"`, s))
} }
// //
......
...@@ -28,7 +28,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork { ...@@ -28,7 +28,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
// fmt.Fprintf(w,string(res)) // fmt.Fprintf(w,string(res))
// return // return
// 解密html // 解密query
msg, cerr := wxcpt.DecryptMsg( msg, cerr := wxcpt.DecryptMsg(
m["msg_signature"][0], m["msg_signature"][0],
m["timestamp"][0], m["timestamp"][0],
...@@ -47,16 +47,8 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork { ...@@ -47,16 +47,8 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
return w return w
} }
// 获取 查阅同事的token
wtBricklayer, err := GetWXWorkToken()
if err != nil {
LOG(ERROR, NULL, err)
w.Result = Error_WXWork_Fail_ReTry
return w
}
// 查询 姓名 // 查询 姓名
name, err := GetBricklayerName(wtBricklayer, wxmsg.FromUsername) wi, err := GetWxworkWorkerInfo(wxmsg.FromUsername)
if err != nil { if err != nil {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
w.Result = Error_WXWork_Fail_ReTry w.Result = Error_WXWork_Fail_ReTry
...@@ -68,7 +60,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork { ...@@ -68,7 +60,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
// wxmsg.EventKey是菜单事件 // wxmsg.EventKey是菜单事件
w.Instruction = wxmsg.EventKey w.Instruction = wxmsg.EventKey
w.UserID = wxmsg.FromUsername w.UserID = wxmsg.FromUsername
w.Name = name w.Name = wi.Name
w.Content = wxmsg.Content w.Content = wxmsg.Content
// 先回复空,再异步发送处理结果 // 先回复空,再异步发送处理结果
...@@ -102,35 +94,64 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork { ...@@ -102,35 +94,64 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
// return string(cryptMsg) // return string(cryptMsg)
} }
// 读取企业通讯录的成员信息(需要管理员登录) // https://developer.work.weixin.qq.com/document/path/91437
// https://work.weixin.qq.com/api/doc/90000/90135/90196 func GetWXworktUserID(code string) (string, error) {
func GetBricklayerName(token, userid string) (string, error) { type wxUserID struct {
link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s", token, userid) Errcode int `json:"errcode"`
ErrMsg string `json:"errmsg"`
UserID string `json:"userid"`
}
link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=%s&code=%s", WxWorkToken, code)
data, err := SendGetRequest(&link) data, err := SendGetRequest(&link)
if err != nil { if err != nil {
LOG(ERROR, NULL, err) return "", err
return "", Error_WXWork_Down }
var wxuid wxUserID
if err := ParseJson(data, &wxuid); err != nil {
return "", err
} }
var bi wxJsonBricklayerInfo if wxuid.Errcode != 0 {
ParseJson(data, &bi) return "", fmt.Errorf(wxuid.ErrMsg)
if bi.Errcode != 0 {
LOG(ERROR, NULL, bi.Errmsg)
return "", Error_WXWork_Down
} }
return bi.Name, nil return wxuid.UserID, nil
}
// 读取企业通讯录的成员信息
// https://developer.work.weixin.qq.com/document/path/90196
func GetWxworkWorkerInfo(userid string) (wxJsonWorkerInfo, error) {
var wi wxJsonWorkerInfo
link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s", WxWorkToken, userid)
data, err := SendGetRequest(&link)
if err != nil {
return wxJsonWorkerInfo{}, err
}
if err := ParseJson(data, &wi); err != nil {
return wxJsonWorkerInfo{}, err
}
if wi.Errcode != 0 {
return wxJsonWorkerInfo{}, fmt.Errorf(wi.Errmsg)
}
return wi, nil
} }
func GetWXWorkToken() (string, error) {
link := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s", WxworkCorid, WxworkCorpSecret)
// 根据部门ID获取部门名称
// 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) data, err := SendGetRequest(&link)
if err != nil { if err != nil {
return "", err return "", err
} }
var wt WxToken if err := ParseJson(data, &wd); err != nil {
ParseJson(data, &wt) return "", err
if wt.Errcode == 0 { }
return wt.Access_token, nil if wd.Errcode != 0 {
} else { return "", fmt.Errorf(wd.Errmsg)
return "", Error_Fail_File_Write
} }
return wd.Department.Name, nil
} }
package public package public
// JSON:token返回格式 // JSON:token返回格式
// https://open.work.weixin.qq.com/api/doc/90000/90135/91039 // https://open.work.weixin.qq.com/api/doc/90000/90135/91039
type WxToken struct { type WxToken struct {
...@@ -10,7 +9,6 @@ type WxToken struct { ...@@ -10,7 +9,6 @@ type WxToken struct {
Expires_in int `json:"expires_in"` Expires_in int `json:"expires_in"`
} }
type WxSendMsgRec struct { type WxSendMsgRec struct {
ErrCode int `json:"errcode"` ErrCode int `json:"errcode"`
ErrMsg string `json:"errmsg"` ErrMsg string `json:"errmsg"`
...@@ -37,7 +35,7 @@ type WxSendMsgTextContent struct { ...@@ -37,7 +35,7 @@ type WxSendMsgTextContent struct {
Content string `json:"content"` Content string `json:"content"`
} }
func(wsmt * WxSendMsgText) Init(){ func (wsmt *WxSendMsgText) Init() {
wsmt.Msgtype = "text" wsmt.Msgtype = "text"
wsmt.Agentid = 1000014 wsmt.Agentid = 1000014
wsmt.Safe = 0 wsmt.Safe = 0
...@@ -48,7 +46,7 @@ func(wsmt * WxSendMsgText) Init(){ ...@@ -48,7 +46,7 @@ func(wsmt * WxSendMsgText) Init(){
// 获取 同事个人信息的Json // 获取 同事个人信息的Json
// https://open.work.weixin.qq.com/api/doc/90000/90135/90196 // https://open.work.weixin.qq.com/api/doc/90000/90135/90196
type wxJsonBricklayerInfo struct { type wxJsonWorkerInfo struct {
Errcode int `json:"errcode"` Errcode int `json:"errcode"`
Errmsg string `json:"errmsg"` Errmsg string `json:"errmsg"`
Userid string `json:"userid"` Userid string `json:"userid"`
...@@ -67,31 +65,31 @@ type wxJsonBricklayerInfo struct { ...@@ -67,31 +65,31 @@ type wxJsonBricklayerInfo struct {
Address string `json:"address"` Address string `json:"address"`
Open_userid string `json:"open_userid"` Open_userid string `json:"open_userid"`
Main_department int `json:"main_department"` Main_department int `json:"main_department"`
Extattr wxJsonBricklayerInfoExtattr `json:"extattr"` Extattr wxJsonWorkerInfoExtattr `json:"extattr"`
Status int `json:"status"` Status int `json:"status"`
Qr_code string `json:"qr_code"` Qr_code string `json:"qr_code"`
External_position string `json:"external_position"` External_position string `json:"external_position"`
External_profile wxJsonBricklayerInfoExtattr `json:"external_profile"` External_profile wxJsonWorkerInfoExtattr `json:"external_profile"`
} }
type wxJsonBricklayerInfoExtattr struct { type wxJsonWorkerInfoExtattr struct {
Attrs [] wxJsonBricklayerInfoExtattrValue `json:"attrs"` Attrs []wxJsonWorkerInfoExtattrValue `json:"attrs"`
} }
type wxJsonBricklayerInfoExtattrValue struct { type wxJsonWorkerInfoExtattrValue struct {
Type int `json:"type"` Type int `json:"type"`
Name string `json:"name"` Name string `json:"name"`
Text wxJsonBricklayerInfoExtattrValueText `json:"text"` Text wxJsonWorkerInfoExtattrValueText `json:"text"`
Web wxJsonBricklayerInfoExtattrValueWeb `json:"value"` Web wxJsonWorkerInfoExtattrValueWeb `json:"value"`
MiniProgram wxJsonBricklayerInfoExtattrValueMinProgram `json:"miniProgram"` MiniProgram wxJsonWorkerInfoExtattrValueMinProgram `json:"miniProgram"`
} }
type wxJsonBricklayerInfoExtattrValueText struct { type wxJsonWorkerInfoExtattrValueText struct {
Value string `json:"value"` Value string `json:"value"`
} }
type wxJsonBricklayerInfoExtattrValueWeb struct { type wxJsonWorkerInfoExtattrValueWeb struct {
Url string `json:"url"` Url string `json:"url"`
Title string `json:"title"` Title string `json:"title"`
} }
type wxJsonBricklayerInfoExtattrValueMinProgram struct { type wxJsonWorkerInfoExtattrValueMinProgram struct {
Appid string `json:"appid"` Appid string `json:"appid"`
Pagepath string `json:"pagepath"` Pagepath string `json:"pagepath"`
Title string `json:"title"` Title string `json:"title"`
...@@ -108,3 +106,17 @@ type wxXml struct { ...@@ -108,3 +106,17 @@ type wxXml struct {
Event string `xml:"Event"` Event string `xml:"Event"`
EventKey string `xml:"EventKey"` EventKey string `xml:"EventKey"`
} }
type wxJsonWorkerDepartment struct {
Errcode int `json:"errcode"`
Errmsg string `json:"errmsg"`
Department wxJsonWorkerDepartmentExtattrDept `json:"department"`
}
type wxJsonWorkerDepartmentExtattrDept struct {
Id int `json:"id"`
Name string `json:"name"`
Name_en string `json:"name_en"`
Department_leader []string `json:"department_leader"`
Parentid int `json:"parentid"`
Order int `json:"order"`
}
...@@ -12,6 +12,7 @@ const ( ...@@ -12,6 +12,7 @@ const (
HKCU = iota HKCU = iota
HKLM HKLM
HKU HKU
HKCR
) )
var Error_Null_Reg_Query = errors.New("not found reg query result") var Error_Null_Reg_Query = errors.New("not found reg query result")
...@@ -115,6 +116,8 @@ func prase(root *int) registry.Key { ...@@ -115,6 +116,8 @@ func prase(root *int) registry.Key {
return registry.USERS return registry.USERS
case HKLM: case HKLM:
return registry.LOCAL_MACHINE return registry.LOCAL_MACHINE
case HKCR:
return registry.CLASSES_ROOT
} }
return registry.LOCAL_MACHINE return registry.LOCAL_MACHINE
} }
module AD-Control-Golang/users module AD-Control-Golang/users
go 1.18 go 1.17
require git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0 require git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0
...@@ -13,6 +13,8 @@ require ( ...@@ -13,6 +13,8 @@ require (
require ( require (
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect
github.com/PuerkitoBio/goquery v1.8.0 // indirect
github.com/andybalholm/cascadia v1.3.1 // indirect
github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect
github.com/go-ldap/ldap/v3 v3.4.2 // indirect github.com/go-ldap/ldap/v3 v3.4.2 // indirect
github.com/gookit/color v1.5.0 // indirect github.com/gookit/color v1.5.0 // indirect
...@@ -20,6 +22,7 @@ require ( ...@@ -20,6 +22,7 @@ require (
github.com/mozillazg/go-pinyin v0.19.0 // indirect github.com/mozillazg/go-pinyin v0.19.0 // indirect
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 // indirect golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 // indirect
golang.org/x/text v0.3.7 // indirect golang.org/x/text v0.3.7 // indirect
gopkg.in/Knetic/govaluate.v3 v3.0.0 // indirect gopkg.in/Knetic/govaluate.v3 v3.0.0 // indirect
......
github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ=
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
...@@ -28,15 +32,24 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPh ...@@ -28,15 +32,24 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o=
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 h1:PgUUmg0gNMIPY2WafhL/oLyQGw+kdTNPlVWOjltpp3w= golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 h1:PgUUmg0gNMIPY2WafhL/oLyQGw+kdTNPlVWOjltpp3w=
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/Knetic/govaluate.v3 v3.0.0 h1:18mUyIt4ZlRlFZAAfVetz4/rzlJs9yhN+U02F4u1AOc= gopkg.in/Knetic/govaluate.v3 v3.0.0 h1:18mUyIt4ZlRlFZAAfVetz4/rzlJs9yhN+U02F4u1AOc=
gopkg.in/Knetic/govaluate.v3 v3.0.0/go.mod h1:csKLBORsPbafmSCGTEh3U7Ozmsuq8ZSIlKk1bcqph0E= gopkg.in/Knetic/govaluate.v3 v3.0.0/go.mod h1:csKLBORsPbafmSCGTEh3U7Ozmsuq8ZSIlKk1bcqph0E=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
......
...@@ -19,7 +19,7 @@ const timeout int = 30 ...@@ -19,7 +19,7 @@ const timeout int = 30
func menuInitName(ni *walk.NotifyIcon) { func menuInitName(ni *walk.NotifyIcon) {
text := fmt.Sprintf("姓名: %s", pub.User_name_display) text := fmt.Sprintf("系统账号: %s", pub.User_name_display)
na := walk.NewAction() na := walk.NewAction()
if err := na.SetText(text); err != nil { if err := na.SetText(text); err != nil {
pub.LOG(pub.ERROR, NULL, err) pub.LOG(pub.ERROR, NULL, err)
...@@ -125,99 +125,23 @@ func menuInitAccountManager(ni *walk.NotifyIcon) { ...@@ -125,99 +125,23 @@ func menuInitAccountManager(ni *walk.NotifyIcon) {
sysmenu.SetEnabled(true) sysmenu.SetEnabled(true)
} }
type signUpStruct struct {
Name *walk.LineEdit
Dept *walk.ComboBox
}
// 账号管理 申请个人账号 // 账号管理 申请个人账号
func tAccountManagerSignUP() { func tAccountManagerSignUP() {
if !pub.PublicUser() { // 仅仅公共用户可使用“申请个人账号”功能
Msg("您已经正在使用个人账号!") // if !pub.PublicUser() {
return // go Msg("您已经正在使用个人账号!")
} // return
var signUp signUpStruct // }
if _, err := (MainWindow{
Title: "申请个人账号", // 获取登录地址
MinSize: Size{Width: 300, Height: 400}, pub.SendADMsg(pub.Msg_Report, pub.GJreportPlusString(pub.Msg_Report_GetURL, pub.URL_WXWork_QRCode_Login, pub.Msg_Report_SignUPUser))
Size: Size{Width: 300, Height: 400}, default_explorer := reg.Query_key_one(reg.HKCR, `http\shell\open\command`, ``)
Layout: VBox{}, default_explorer = default_explorer[1 : len(default_explorer)-4]
Children: []Widget{ if err := pub.Execcmd_two_nowait(default_explorer, pub.MS.S); err != nil {
VSplitter{ pub.LOG(ERROR, NULL, err)
Children: []Widget{
GroupBox{
Layout: HBox{},
Children: []Widget{
Label{
Text: "姓名",
},
LineEdit{
MinSize: Size{Width: 40, Height: 0},
AssignTo: &signUp.Name,
},
},
},
GroupBox{
Layout: HBox{},
Children: []Widget{
Label{
Text: "部门",
},
ComboBox{
AssignTo: &signUp.Dept,
Model: []string{pub.Dept_zw_qbmb_jl_string, pub.Dept_zw_qbmb_zj_string, pub.Dept_zw_qbmb_mt_string, pub.Dept_zw_qbmb_dd_string, pub.Dept_zw_qbmb_jr_string, pub.Dept_zw_qbmb_txhd_string, pub.Dept_zw_qbmb_txwj_string, pub.Dept_zw_qbmb_jd_string, pub.Dept_zw_qbmb_hw_string, pub.Dept_zw_qbmb_bgyj_string},
CurrentIndex: 0, // 默认选中第一个
},
},
},
PushButton{
Text: "提交",
OnClicked: signUp.signUpPush,
},
},
},
},
}.Run()); err != nil {
pub.LOG(ERROR, "", err)
}
}
func (signUp *signUpStruct) signUpPush() {
var Reg_target string = Reg_Signup
var exec bool
name := signUp.Name.Text()
dept := signUp.Dept.Text()
if name == "" {
Msg("请输入姓名")
}
host, _ := pub.GetHostnamePart(pub.User_computername)
var region string
switch host[0] {
case pub.HOST_Region_NB:
region = pub.Region_nb
case pub.HOST_Region_ZZ:
region = pub.Region_zz
}
if reg_t := reg.Query_ADPC(Reg_target); reg_t == "" {
exec = true
} else {
exec = pub.IfBeforeMin(pub.UnixTimeParseTimeFromString(reg_t), timeout)
}
if !exec {
Msg(`暂时无法使用,稍后重试!`)
return return
} }
l := fmt.Sprintf("地区:%s\n部门:%s\n姓名:%s", region, dept, name)
if Msg_YesNo(l + "\n\n是否确定消息无误?") {
l = fmt.Sprintf("%s\n%s\n主机名:%s", pub.WxWorkInteraction_SignUP, l, pub.User_computername)
pub.SendADMsg(pub.Msg_Report, pub.GJreportString(pub.Msg_Report_SignUPUser, l))
reg.Write_ADPC(Reg_target, pub.NowTimestampString())
}
} }
// 主机管理 // 主机管理
...@@ -451,9 +375,9 @@ func (mw *siMainWindow) siInstall() { ...@@ -451,9 +375,9 @@ func (mw *siMainWindow) siInstall() {
app := (&mw.siM.items[mw.siLB.CurrentIndex()]).name app := (&mw.siM.items[mw.siLB.CurrentIndex()]).name
go Msg("下载文件中,请等待,请勿重复点击") go Msg("下载文件中,请等待,请勿重复点击")
pub.LOG(INFO, "SoftwareInstall", "下载"+app) pub.LOG(INFO, "SoftwareInstall", "下载"+app)
url := fmt.Sprintf("%s/%s", pub.Msg_softlike, app) url := fmt.Sprintf("%s/%s", pub.Msg_Softlike, app)
fullapp := fmt.Sprintf(`%s\%s`, pub.Dir_tmp, app) fullapp := fmt.Sprintf(`%s\%s`, pub.Dir_tmp, app)
err := pub.DownloadFile(url, fullapp) err := pub.DownloadFileInside(url, fullapp)
if err != nil { if err != nil {
go Msg("下载文件失败") go Msg("下载文件失败")
pub.LOG(ERROR, "SoftwareInstall", "下载文件失败"+err.Error()) pub.LOG(ERROR, "SoftwareInstall", "下载文件失败"+err.Error())
......
...@@ -107,12 +107,14 @@ func userEnvInit() { ...@@ -107,12 +107,14 @@ func userEnvInit() {
} }
func main() { func main() {
if !pub.Windows() { if !pub.Windows() {
os.Exit(-1) os.Exit(-1)
} }
if pub.DomainCotroller() {
os.Exit(-1) // if pub.DomainCotroller() {
} // os.Exit(-1)
// }
// 用户 初始化 // 用户 初始化
icodir := userInit() icodir := userInit()
userEnvInit() userEnvInit()
......
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