Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
AD-Control-Golang
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陶腾飞
AD-Control-Golang
Commits
654776f7
Commit
654776f7
authored
Jul 12, 2022
by
陶腾飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2022/07/22 v2.6.0
parent
c29b95e2
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
611 additions
and
290 deletions
+611
-290
README.MD
+3
-2
adct/adct.exe.syso
+0
-0
adct/adct.go
+26
-1
adct/go.mod
+8
-3
adct/go.sum
+17
-0
adct/users.exe.manifest
+17
-0
daemon/automatic.go
+35
-8
daemon/go.mod
+4
-1
daemon/go.sum
+13
-0
public/cmdbjson.go
+12
-12
public/dept.go
+52
-13
public/env.go
+4
-4
public/go.mod
+6
-1
public/go.sum
+13
-0
public/json.go
+3
-2
public/msg_deal.go
+140
-25
public/msg_init.go
+19
-0
public/network.go
+15
-1
public/send.go
+33
-11
public/win.go
+8
-1
public/wxmsg.go
+52
-31
public/wxstruct.go
+91
-79
public/wxwork_lib.go
+0
-0
registry/registry.go
+3
-0
users/go.mod
+4
-1
users/go.sum
+13
-0
users/menu.go
+15
-91
users/users.go
+5
-3
No files found.
README.MD
View file @
654776f7
...
@@ -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 使用企业微信作为注册个人账号的验证方式
## 四、其他说明
## 四、其他说明
...
...
adct/adct.exe.syso
0 → 100644
View file @
654776f7
File added
adct/adct.go
View file @
654776f7
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
()
{
}
adct/go.mod
View file @
654776f7
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
)
)
adct/go.sum
View file @
654776f7
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=
adct/users.exe.manifest
0 → 100644
View file @
654776f7
<?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
daemon/automatic.go
View file @
654776f7
...
@@ -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
(
1
0
*
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
}
}
daemon/go.mod
View file @
654776f7
module AD-Control-Golang/daemon
module AD-Control-Golang/daemon
go 1.1
8
go 1.1
7
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
)
)
...
...
daemon/go.sum
View file @
654776f7
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=
public/cmdbjson.go
View file @
654776f7
...
@@ -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_qb
mb
_jl_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_jl_string
+
Dept_zw_qbbm_unit
case
"ZJ"
:
case
"ZJ"
:
result
=
Dept_zw_qb
mb
_zj_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_zj_string
+
Dept_zw_qbbm_unit
case
"MT"
:
case
"MT"
:
result
=
Dept_zw_qb
mb
_mt_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_mt_string
+
Dept_zw_qbbm_unit
case
"DD"
:
case
"DD"
:
result
=
Dept_zw_qb
mb
_dd_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_dd_string
+
Dept_zw_qbbm_unit
case
"JR"
:
case
"JR"
:
result
=
Dept_zw_qb
mb
_jr_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_jr_string
+
Dept_zw_qbbm_unit
case
"TXHD"
:
case
"TXHD"
:
result
=
Dept_zw_qb
mb
_txhd_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_txhd_string
+
Dept_zw_qbbm_unit
case
"TXWJ"
:
case
"TXWJ"
:
result
=
Dept_zw_qb
mb
_txwj_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_txwj_string
+
Dept_zw_qbbm_unit
case
"JS"
:
case
"JS"
:
result
=
Dept_zw_qb
mb
_js_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_js_string
+
Dept_zw_qbbm_unit
case
"JD"
:
case
"JD"
:
result
=
Dept_zw_qb
mb
_jd_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_jd_string
+
Dept_zw_qbbm_unit
case
"HW"
:
case
"HW"
:
result
=
Dept_zw_qb
mb
_hw_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_hw_string
+
Dept_zw_qbbm_unit
case
"DY"
:
case
"DY"
:
result
=
Dept_zw_qb
mb
_dy_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_dy_string
+
Dept_zw_qbbm_unit
case
"BGYJ"
:
case
"BGYJ"
:
result
=
Dept_zw_qb
mb
_bgyj_string
+
Dept_zw_qbbm_unit
result
=
Dept_zw_qb
bm
_bgyj_string
+
Dept_zw_qbbm_unit
default
:
default
:
result
=
ERROR
result
=
ERROR
}
}
...
...
public/dept.go
View file @
654776f7
...
@@ -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_qb
mb
=
"情报部门"
const
Dept_zw_qb
bm
=
"情报部门"
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
}
public/env.go
View file @
654776f7
...
@@ -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
=
"申请个人账号"
...
...
public/go.mod
View file @
654776f7
module git.zhiweidata.top/taotengfei/AD-Control-Golang/public
module git.zhiweidata.top/taotengfei/AD-Control-Golang/public
go 1.1
8
go 1.1
7
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
public/go.sum
View file @
654776f7
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=
public/json.go
View file @
654776f7
...
@@ -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
...
...
public/msg_deal.go
View file @
654776f7
...
@@ -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_
f
ile
:
case
Msg_
F
ile
:
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_
s
oftlike
:
case
Msg_
S
oftlike
:
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
)
SendW
xworkTextToAdmins
(
l
)
SendW
XWrokTextToChatAccountManager
(
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
"请在企业微信中获取处理结果!"
}
public/msg_init.go
View file @
654776f7
...
@@ -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
)
...
...
public/network.go
View file @
654776f7
...
@@ -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
DownloadFile
Inside
(
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
}
public/send.go
View file @
654776f7
...
@@ -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
)
}
}
// 根据主机位置定义发送的服务器
// 根据主机位置定义发送的服务器
...
...
public/win.go
View file @
654776f7
...
@@ -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
)
)
}
}
//
//
...
...
public/wxmsg.go
View file @
654776f7
...
@@ -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
=
n
ame
w
.
Name
=
wi
.
N
ame
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
}
}
public/wxstruct.go
View file @
654776f7
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
{
Errcode
int
`json:"errcode"`
Errcode
int
`json:"errcode"`
Errmsg
string
`json:"errmsg"`
Errmsg
string
`json:"errmsg"`
Access_token
string
`json:"access_token"`
Access_token
string
`json:"access_token"`
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"`
Invaliduser
string
`json:"invaliduser"`
Invaliduser
string
`json:"invaliduser"`
Invalidparty
string
`json:"invalidparty"`
Invalidparty
string
`json:"invalidparty"`
Invalidtag
string
`json:"invalidtag"`
Invalidtag
string
`json:"invalidtag"`
}
}
// JSON:消息发送格式
// JSON:消息发送格式
// https://work.weixin.qq.com/api/doc/90000/90135/90236#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF
// https://work.weixin.qq.com/api/doc/90000/90135/90236#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF
type
WxSendMsgText
struct
{
type
WxSendMsgText
struct
{
Touser
string
`json:"touser"`
Touser
string
`json:"touser"`
Toparty
string
`json:"toparty"`
Toparty
string
`json:"toparty"`
Totag
string
`json:"totag"`
Totag
string
`json:"totag"`
Msgtype
string
`json:"msgtype"`
Msgtype
string
`json:"msgtype"`
Agentid
int
`json:"agentid"`
Agentid
int
`json:"agentid"`
Text
WxSendMsgTextContent
`json:"text"`
Text
WxSendMsgTextContent
`json:"text"`
Safe
int
`json:"safe"`
Safe
int
`json:"safe"`
Enable_id_trans
int
`json:"enable_id_trans"`
Enable_id_trans
int
`json:"enable_id_trans"`
Enable_duplicate_check
int
`json:"enable_duplicate_check"`
Enable_duplicate_check
int
`json:"enable_duplicate_check"`
Duplicate_check_interval
int
`json:"duplicate_check_interval"`
Duplicate_check_interval
int
`json:"duplicate_check_interval"`
}
}
type
WxSendMsgTextContent
struct
{
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
wsmt
.
Enable_id_trans
=
0
wsmt
.
Enable_id_trans
=
0
wsmt
.
Enable_duplicate_check
=
0
wsmt
.
Enable_duplicate_check
=
0
wsmt
.
Duplicate_check_interval
=
1800
wsmt
.
Duplicate_check_interval
=
1800
}
}
// 获取 同事个人信息的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
wxJson
BricklayerInfo
struct
{
type
wxJson
WorkerInfo
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"`
Name
string
`json:"name"`
Name
string
`json:"name"`
Department
[]
int
`json:"department"`
Department
[]
int
`json:"department"`
Order
[]
int
`json:"order"`
Order
[]
int
`json:"order"`
Position
string
`json:"position"`
Position
string
`json:"position"`
Mobile
string
`json:"mobile"`
Mobile
string
`json:"mobile"`
Gender
string
`json:"gender"`
Gender
string
`json:"gender"`
Email
string
`json:"email"`
Email
string
`json:"email"`
Is_leader_in_dept
[]
int
`json:"is_leader_in_dept"`
Is_leader_in_dept
[]
int
`json:"is_leader_in_dept"`
Avatar
string
`json:"avatar"`
Avatar
string
`json:"avatar"`
Thumb_avatar
string
`json:"thumb_avatar"`
Thumb_avatar
string
`json:"thumb_avatar"`
Telephone
string
`json:"telephone"`
Telephone
string
`json:"telephone"`
Alias
string
`json:"alias"`
Alias
string
`json:"alias"`
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
wxJson
Bricklay
erInfoExtattr
struct
{
type
wxJson
Work
erInfoExtattr
struct
{
Attrs
[]
wxJsonBricklay
erInfoExtattrValue
`json:"attrs"`
Attrs
[]
wxJsonWork
erInfoExtattrValue
`json:"attrs"`
}
}
type
wxJson
Bricklay
erInfoExtattrValue
struct
{
type
wxJson
Work
erInfoExtattrValue
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
wxJsonBricklay
erInfoExtattrValueMinProgram
`json:"miniProgram"`
MiniProgram
wxJsonWork
erInfoExtattrValueMinProgram
`json:"miniProgram"`
}
}
type
wxJson
Bricklay
erInfoExtattrValueText
struct
{
type
wxJson
Work
erInfoExtattrValueText
struct
{
Value
string
`json:"value"`
Value
string
`json:"value"`
}
}
type
wxJson
Bricklay
erInfoExtattrValueWeb
struct
{
type
wxJson
Work
erInfoExtattrValueWeb
struct
{
Url
string
`json:"url"`
Url
string
`json:"url"`
Title
string
`json:"title"`
Title
string
`json:"title"`
}
}
type
wxJson
Bricklay
erInfoExtattrValueMinProgram
struct
{
type
wxJson
Work
erInfoExtattrValueMinProgram
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"`
}
}
type
wxXml
struct
{
type
wxXml
struct
{
ToUsername
string
`xml:"ToUserName"`
ToUsername
string
`xml:"ToUserName"`
FromUsername
string
`xml:"FromUserName"`
FromUsername
string
`xml:"FromUserName"`
CreateTime
uint32
`xml:"CreateTime"`
CreateTime
uint32
`xml:"CreateTime"`
MsgType
string
`xml:"MsgType"`
MsgType
string
`xml:"MsgType"`
Content
string
`xml:"Content"`
Content
string
`xml:"Content"`
Msgid
string
`xml:"MsgId"`
Msgid
string
`xml:"MsgId"`
Agentid
uint32
`xml:"AgentId"`
Agentid
uint32
`xml:"AgentId"`
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"`
}
}
public/wxwork.go
→
public/wxwork
_lib
.go
View file @
654776f7
File moved
registry/registry.go
View file @
654776f7
...
@@ -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
}
}
users/go.mod
View file @
654776f7
module AD-Control-Golang/users
module AD-Control-Golang/users
go 1.1
8
go 1.1
7
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
...
...
users/go.sum
View file @
654776f7
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=
...
...
users/menu.go
View file @
654776f7
...
@@ -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_
s
oftlike
,
app
)
url
:=
fmt
.
Sprintf
(
"%s/%s"
,
pub
.
Msg_
S
oftlike
,
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
.
DownloadFile
Inside
(
url
,
fullapp
)
if
err
!=
nil
{
if
err
!=
nil
{
go
Msg
(
"下载文件失败"
)
go
Msg
(
"下载文件失败"
)
pub
.
LOG
(
ERROR
,
"SoftwareInstall"
,
"下载文件失败"
+
err
.
Error
())
pub
.
LOG
(
ERROR
,
"SoftwareInstall"
,
"下载文件失败"
+
err
.
Error
())
...
...
users/users.go
View file @
654776f7
...
@@ -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
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment