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
b22648bb
Commit
b22648bb
authored
Apr 22, 2022
by
陶腾飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2022/04/22 v2.5.0
parent
ba72a573
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
451 additions
and
113 deletions
+451
-113
README.MD
+1
-0
daemon/daemon.go
+1
-1
daemon/go.mod
+1
-0
daemon/go.sum
+2
-0
public/cmdb.go
+28
-0
public/cmdbjson.go
+11
-11
public/dept.go
+18
-2
public/env.go
+8
-5
public/go.mod
+1
-0
public/go.sum
+2
-0
public/json.go
+6
-7
public/ldap.go
+31
-2
public/msg_deal.go
+129
-13
public/msg_init.go
+23
-9
public/send.go
+16
-7
public/time.go
+26
-17
public/user.go
+6
-1
public/win.go
+3
-4
public/wxmsg.go
+2
-4
registry/registry.go
+11
-12
users/go.mod
+1
-0
users/go.sum
+2
-0
users/menu.go
+115
-12
users/users.go
+5
-4
users/walk.go
+2
-2
No files found.
README.MD
View file @
b22648bb
...
@@ -96,6 +96,7 @@
...
@@ -96,6 +96,7 @@
-
2022/04/11 v2.3.2 添加对用户注销、登录时log记录与转发
-
2022/04/11 v2.3.2 添加对用户注销、登录时log记录与转发
-
2022/04/11 v2.3.3 修复用户注销的值错误、企业微信唤醒704局域网失败修复
-
2022/04/11 v2.3.3 修复用户注销的值错误、企业微信唤醒704局域网失败修复
-
2022/04/20 v2.4.0 添加知微运维平台的"远程登录"的获取远程信息功能
-
2022/04/20 v2.4.0 添加知微运维平台的"远程登录"的获取远程信息功能
-
2022/04/22 v2.5.0 添加人事账号管理功能
## 四、其他说明
## 四、其他说明
...
...
daemon/daemon.go
View file @
b22648bb
...
@@ -33,7 +33,7 @@ func mainInit() {
...
@@ -33,7 +33,7 @@ func mainInit() {
pub
.
AD_User_ADControl
=
reg
.
Query_DC
(
"ADControl"
)
pub
.
AD_User_ADControl
=
reg
.
Query_DC
(
"ADControl"
)
pub
.
AD_User_ADControl_key
=
reg
.
Query_DC
(
"ADControl_key"
)
pub
.
AD_User_ADControl_key
=
reg
.
Query_DC
(
"ADControl_key"
)
pub
.
CmdbUrl
=
reg
.
Query_DC
(
"cmdb_url"
)
pub
.
CmdbUrl
=
reg
.
Query_DC
(
"cmdb_url"
)
pub
.
Defult_user_key
=
reg
.
Query_DC
(
"ad_default_user_key"
)
messionloop
()
messionloop
()
}
}
func
main
()
{
func
main
()
{
...
...
daemon/go.mod
View file @
b22648bb
...
@@ -11,6 +11,7 @@ require (
...
@@ -11,6 +11,7 @@ require (
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/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
...
...
daemon/go.sum
View file @
b22648bb
...
@@ -10,6 +10,8 @@ github.com/go-ldap/ldap/v3 v3.4.2 h1:zFZKcXKLqZpFMrMQGHeHWKXbDTdNCmhGY9AK41zPh+8
...
@@ -10,6 +10,8 @@ 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/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2uUVN8c=
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=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
...
...
public/cmdb.go
View file @
b22648bb
...
@@ -62,6 +62,34 @@ func cmdbKVtoJSON(k, v string) (string, error) {
...
@@ -62,6 +62,34 @@ func cmdbKVtoJSON(k, v string) (string, error) {
return
string
(
b
),
err
return
string
(
b
),
err
}
}
func
CmdbCheckOneRecord
(
k
,
v
string
)
(
bool
,
error
)
{
var
count
string
=
"1"
var
cmdbPath
string
=
"api/v0.1/ci/s?q="
v
=
cmdbChineseURL
(
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s&count=%s"
,
CmdbUrl
,
cmdbPath
,
CmdbCITypeComputer
,
search
,
count
)
LOG
(
DEBUG
,
CMDB
,
url
)
var
cir
CIRecordReq
data
,
err
:=
cmdbGET
(
url
)
if
err
!=
nil
{
LOG
(
ERROR
,
CMDB
,
err
)
return
false
,
err
}
if
err
:=
json
.
Unmarshal
(
data
,
&
cir
);
err
!=
nil
{
LOG
(
ERROR
,
CMDB
,
err
)
return
false
,
err
}
LOG
(
DEBUG
,
"CMDB_EXITE"
,
string
(
data
))
switch
cir
.
Numfound
{
case
0
:
return
false
,
nil
case
1
:
return
true
,
nil
default
:
return
false
,
Error_CMDB_Many_Record
}
}
// 键值将上传到cmdb,如果存在返回ci,不存在将添加记录
// 键值将上传到cmdb,如果存在返回ci,不存在将添加记录
func
cmdbExistRecord
(
k
,
v
string
)
(
int
,
bool
)
{
func
cmdbExistRecord
(
k
,
v
string
)
(
int
,
bool
)
{
...
...
public/cmdbjson.go
View file @
b22648bb
...
@@ -187,27 +187,27 @@ func (cir *CIRecordStartup) GetDept() (string, error) {
...
@@ -187,27 +187,27 @@ func (cir *CIRecordStartup) GetDept() (string, error) {
}
}
switch
hostnameSplit
[
1
]
{
switch
hostnameSplit
[
1
]
{
case
"JL"
:
case
"JL"
:
result
=
"巨量组"
result
=
Dept_zw_qbmb_jl_string
+
Dept_group
case
"ZJ"
:
case
"ZJ"
:
result
=
"字节组"
result
=
Dept_zw_qbmb_zj_string
+
Dept_group
case
"MT"
:
case
"MT"
:
result
=
"美团组"
result
=
Dept_zw_qbmb_mt_string
+
Dept_group
case
"DD"
:
case
"DD"
:
result
=
"滴滴组"
result
=
Dept_zw_qbmb_dd_string
+
Dept_group
case
"JR"
:
case
"JR"
:
result
=
"金融组"
result
=
Dept_zw_qbmb_jr_string
+
Dept_group
case
"TXHD"
:
case
"TXHD"
:
result
=
"腾讯互动组"
result
=
Dept_zw_qbmb_txhd_string
+
Dept_group
case
"TXWJ"
:
case
"TXWJ"
:
result
=
"腾讯危机组"
result
=
Dept_zw_qbmb_txwj_string
+
Dept_group
case
"JS"
:
case
"JS"
:
result
=
"技术组"
result
=
Dept_zw_qbmb_js_string
+
Dept_group
case
"JD"
:
case
"JD"
:
result
=
"京东组"
result
=
Dept_zw_qbmb_jd_string
+
Dept_group
case
"HW"
:
case
"HW"
:
result
=
"华为组"
result
=
Dept_zw_qbmb_hw_string
+
Dept_group
case
"BGYJ"
:
case
"BGYJ"
:
result
=
"报告研究中心"
result
=
Dept_zw_qbmb_bgyj_string
+
Dept_group
default
:
default
:
result
=
ERROR
result
=
ERROR
}
}
...
...
public/dept.go
View file @
b22648bb
...
@@ -4,8 +4,24 @@ import "fmt"
...
@@ -4,8 +4,24 @@ import "fmt"
const
Region_nb
=
"宁波"
const
Region_nb
=
"宁波"
const
Region_zz
=
"郑州"
const
Region_zz
=
"郑州"
const
Dept_jishu
=
"技术部门"
const
Dept_group
=
"组"
const
Dept_chanpin
=
"产品部门"
const
Dept_zw_jishu
=
"技术部门"
const
Dept_zw_chanpin
=
"产品部门"
const
Dept_zw_qbmb
=
"情报部门"
const
Dept_zw_qbmb_1
=
"情报一部"
const
Dept_zw_qbmb_2
=
"情报二部"
const
Dept_zw_qbmb_3
=
"情报三部"
const
Dept_zw_qbmb_jl_string
=
"巨量"
const
Dept_zw_qbmb_zj_string
=
"字节"
const
Dept_zw_qbmb_mt_string
=
"美团"
const
Dept_zw_qbmb_dd_string
=
"滴滴"
const
Dept_zw_qbmb_jr_string
=
"金融"
const
Dept_zw_qbmb_txhd_string
=
"腾讯互动"
const
Dept_zw_qbmb_txwj_string
=
"腾讯危机"
const
Dept_zw_qbmb_js_string
=
"技术"
const
Dept_zw_qbmb_jd_string
=
"京东"
const
Dept_zw_qbmb_hw_string
=
"华为"
const
Dept_zw_qbmb_bgyj_string
=
"报告研究中心"
func
GetPostationFromHostname
(
hostname
string
)
(
string
,
error
)
{
func
GetPostationFromHostname
(
hostname
string
)
(
string
,
error
)
{
switch
hostname
{
switch
hostname
{
...
...
public/env.go
View file @
b22648bb
...
@@ -11,7 +11,7 @@ const SymbolHostname = "-"
...
@@ -11,7 +11,7 @@ const SymbolHostname = "-"
// AD-Control //
// AD-Control //
const
Version
string
=
"2.
4
.0"
const
Version
string
=
"2.
5
.0"
const
Host_adserver
string
=
"ADSERVER"
const
Host_adserver
string
=
"ADSERVER"
const
Host_adserver_ip
string
=
"192.168.0.20"
const
Host_adserver_ip
string
=
"192.168.0.20"
const
Host_thserver
string
=
"THSERVER"
const
Host_thserver
string
=
"THSERVER"
...
@@ -28,8 +28,6 @@ var ZZServerLogDaemon string = Host_zzserver + DaemonLogListen
...
@@ -28,8 +28,6 @@ var ZZServerLogDaemon string = Host_zzserver + DaemonLogListen
// users //
// users //
const
Users_Timeout
int
=
3
// user //
// user //
var
User_computername
string
=
GetEnv
(
"COMPUTERNAME"
)
var
User_computername
string
=
GetEnv
(
"COMPUTERNAME"
)
...
@@ -89,6 +87,10 @@ var WxworkCorid string
...
@@ -89,6 +87,10 @@ var WxworkCorid string
var
WxworkCorpSecret
string
var
WxworkCorpSecret
string
var
WxWorkAgentID
string
var
WxWorkAgentID
string
const
WxWorkInteraction_RemoteTerminal
=
"请求远程终端"
const
WxWorkInteraction_SignUP
=
"申请个人账号"
const
WxWorkInteraction_Dimission
=
"停用个人账号"
// log level //
// log level //
var
Loglevel
string
=
INFO
var
Loglevel
string
=
INFO
...
@@ -106,10 +108,11 @@ var CmdbUrl string
...
@@ -106,10 +108,11 @@ var CmdbUrl string
var
CmdbCITypeComputer
string
var
CmdbCITypeComputer
string
var
AD_User_ADControl
string
var
AD_User_ADControl
string
var
AD_User_ADControl_key
string
var
AD_User_ADControl_key
string
var
Defult_user_key
string
// RealTimeEnv //
// RealTimeEnv //
const
Opt_UserActivitydetection
=
"
ADControl
_UserActivitydetection"
const
Opt_UserActivitydetection
=
"
option
_UserActivitydetection"
const
Opt_SendWX
=
"
ADControl
_SendWX"
const
Opt_SendWX
=
"
option
_SendWX"
var
Opt_UserActivitydetection_state
string
var
Opt_UserActivitydetection_state
string
var
Opt_SendWX_state
string
var
Opt_SendWX_state
string
public/go.mod
View file @
b22648bb
...
@@ -5,6 +5,7 @@ go 1.18
...
@@ -5,6 +5,7 @@ go 1.18
require (
require (
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
golang.org/x/text v0.3.7
golang.org/x/text v0.3.7
)
)
...
...
public/go.sum
View file @
b22648bb
...
@@ -10,6 +10,8 @@ github.com/go-ldap/ldap/v3 v3.4.2 h1:zFZKcXKLqZpFMrMQGHeHWKXbDTdNCmhGY9AK41zPh+8
...
@@ -10,6 +10,8 @@ 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/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2uUVN8c=
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=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
...
...
public/json.go
View file @
b22648bb
package
public
package
public
import
(
import
(
"bytes"
"encoding/json"
"encoding/json"
"fmt"
"fmt"
)
)
// 获取 消息类型
// 获取 消息类型
func
GetMsgType
(
b
[]
byte
)
string
{
//
func GetMsgType(b []byte) string {
//{"msgtype":"report","...":"..."}
//
//{"msgtype":"report","...":"..."}
// 提取第一个冒号后的第二位和第一个逗号的前一位
//
// 提取第一个冒号后的第二位和第一个逗号的前一位
// 也就是msgtype的内容
//
// 也就是msgtype的内容
return
string
(
b
[
bytes
.
IndexByte
(
b
,
':'
)
+
2
:
bytes
.
IndexByte
(
b
,
','
)
-
1
])
//
return string(b[bytes.IndexByte(b, ':')+2 : bytes.IndexByte(b, ',')-1])
}
//
}
// 解析Json 并放到变量中
// 解析Json 并放到变量中
func
ParseJson
(
unmsg
[]
byte
,
v
interface
{})
{
func
ParseJson
(
unmsg
[]
byte
,
v
interface
{})
{
...
...
public/ldap.go
View file @
b22648bb
package
public
package
public
import
(
import
(
"fmt"
ldap
"github.com/go-ldap/ldap/v3"
ldap
"github.com/go-ldap/ldap/v3"
)
)
//const ldap_qbbm string = "情报部门"
const
ldap_lz
string
=
"离职"
func
ldapBase
()
(
*
ldap
.
Conn
,
error
)
{
func
ldapBase
()
(
*
ldap
.
Conn
,
error
)
{
l
,
err
:=
ldap
.
DialURL
(
"ldap://127.0.0.1:389"
)
l
,
err
:=
ldap
.
DialURL
(
"ldap://127.0.0.1:389"
)
if
err
!=
nil
{
if
err
!=
nil
{
LOG
(
ERROR
,
NULL
,
err
)
LOG
(
ERROR
,
NULL
,
err
)
return
nil
,
err
return
nil
,
err
}
}
if
err
=
l
.
Bind
(
AD_User_ADControl
,
AD_User_ADControl_key
);
err
!=
nil
{
if
err
=
l
.
Bind
(
AD_User_ADControl
,
AD_User_ADControl_key
);
err
!=
nil
{
...
@@ -72,7 +76,32 @@ func LDAP_nameTopinyin(name string) string {
...
@@ -72,7 +76,32 @@ func LDAP_nameTopinyin(name string) string {
}
}
func
LDAP_CheckExistName
(
name
string
)
(
bool
,
error
)
{
func
LDAP_ExistAccount_dimission
(
name
string
)
(
bool
,
error
)
{
var
r
bool
l
,
_
:=
ldapBase
()
defer
l
.
Close
()
searchRequest
:=
ldap
.
NewSearchRequest
(
fmt
.
Sprintf
(
"ou=%s,dc=zhiweireach,dc=com"
,
ldap_lz
),
ldap
.
ScopeWholeSubtree
,
ldap
.
NeverDerefAliases
,
0
,
0
,
false
,
"(cn="
+
name
+
")"
,
[]
string
{
"cn"
},
nil
,
)
sr
,
err
:=
l
.
Search
(
searchRequest
)
if
err
!=
nil
{
return
false
,
err
}
if
len
(
sr
.
Entries
)
==
0
{
r
=
false
}
else
{
r
=
true
}
return
r
,
err
}
func
LDAP_ExistAccount
(
name
string
)
(
bool
,
error
)
{
var
r
bool
var
r
bool
l
,
_
:=
ldapBase
()
l
,
_
:=
ldapBase
()
defer
l
.
Close
()
defer
l
.
Close
()
...
...
public/msg_deal.go
View file @
b22648bb
...
@@ -64,6 +64,8 @@ func DealMsg(msgtype, url string, unmsg []byte) []byte {
...
@@ -64,6 +64,8 @@ func DealMsg(msgtype, url string, unmsg []byte) []byte {
func
(
rep
*
MJreport
)
MsgDeal
()
interface
{}
{
func
(
rep
*
MJreport
)
MsgDeal
()
interface
{}
{
// 创建菜单调用工具:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10786
// 创建菜单官方说明:https://work.weixin.qq.com/api/doc/90000/90135/90231
switch
rep
.
Instruction
{
switch
rep
.
Instruction
{
case
Msg_Report_WillTurnOffPC
:
case
Msg_Report_WillTurnOffPC
:
...
@@ -145,8 +147,97 @@ func (rep *MJreport) MsgDeal() interface{} {
...
@@ -145,8 +147,97 @@ func (rep *MJreport) MsgDeal() interface{} {
MsgBox
(
rep
.
DataStr
)
MsgBox
(
rep
.
DataStr
)
}
}
}
}
// 注册账号
case
Msg_Report_SignUPUser
:
switch
rep
.
Status
{
case
Msg_status_commit
:
SendWxworkTextToAdmins
(
rep
.
DataStr
)
case
Msg_status_deal
:
msg
:=
strings
.
Split
(
rep
.
DataStr
,
"
\n
"
)
//region := strings.Split(msg[1], "\n")[1]
dept
:=
strings
.
Split
(
msg
[
2
],
":"
)[
1
]
name
:=
strings
.
Split
(
msg
[
3
],
":"
)[
1
]
host
:=
strings
.
Split
(
msg
[
4
],
":"
)[
1
]
pinyin
:=
NameToPinyin
(
name
)
LOG
(
INFO
,
rep
.
Instruction
,
rep
.
DataStr
)
// 判断 用户是否在离职目录中
dismission
,
err
:=
LDAP_ExistAccount_dimission
(
name
)
if
err
!=
nil
{
LOG
(
ERROR
,
rep
.
Instruction
,
err
)
rep
.
SendWXwork
(
Error_WXWork_Fail_ReTry
)
break
}
if
dismission
{
LOG
(
ERROR
,
rep
.
Instruction
,
name
+
"存在于离职目录中"
)
rep
.
SendWXwork
(
name
+
"存在于离职目录中"
)
break
}
// 判断用户是否在其他目录中
b
,
err
:=
LDAP_ExistAccount
(
name
)
if
err
!=
nil
{
LOG
(
ERROR
,
rep
.
Instruction
,
err
)
rep
.
SendWXwork
(
Error_WXWork_Fail_ReTry
)
break
}
if
b
{
LOG
(
ERROR
,
rep
.
Instruction
,
name
+
"已存在"
)
rep
.
SendWXwork
(
name
+
"已存在"
)
break
}
// 判断主机名是否在CMDB中
r
,
err
:=
CmdbCheckOneRecord
(
Cmdb_Product_name
,
host
)
if
err
!=
nil
{
LOG
(
ERROR
,
rep
.
Instruction
,
err
)
rep
.
SendWXwork
(
Error_WXWork_Fail_ReTry
)
break
}
if
!
r
{
LOG
(
ERROR
,
rep
.
Instruction
,
host
+
"不存在记录"
)
rep
.
SendWXwork
(
host
+
"不存在记录"
)
break
}
// 创建用户
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
))
if
err
!=
nil
{
LOG
(
ERROR
,
rep
.
Instruction
,
fmt
.
Sprintf
(
"%v
\n
%s"
,
err
,
out
))
rep
.
SendWXwork
(
Error_WXWork_Fail_ReTry
)
break
}
// 如果创建完成,
rep
.
SendWXwork
(
name
+
"创建完成"
)
SendWxworkTextToAUser
(
rep
.
Username
,
name
+
"创建完成"
)
}
case
Msg_Report_Dimission
:
switch
rep
.
Status
{
case
Msg_status_commit
:
msg
:=
strings
.
Split
(
rep
.
DataStr
,
"
\n
"
)
//region := strings.Split(msg[1], "\n")[1]
dept
:=
strings
.
Split
(
msg
[
2
],
":"
)[
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
{
LOG
(
ERROR
,
rep
.
Instruction
,
fmt
.
Sprintf
(
"%v
\n
%s"
,
err
,
out
))
rep
.
SendWXwork
(
Error_WXWork_Fail_ReTry
)
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
{
LOG
(
ERROR
,
rep
.
Instruction
,
fmt
.
Sprintf
(
"%v
\n
%s"
,
err
,
out
))
rep
.
SendWXwork
(
Error_WXWork_Fail_ReTry
)
break
}
LOG
(
INFO
,
rep
.
Instruction
,
dept
+
name
+
" 移动成功"
)
rep
.
SendWXwork
(
"处理完成"
)
}
default
:
default
:
LOG
(
ERROR
,
"Default Report Json
"
,
rep
.
Instruction
)
LOG
(
ERROR
,
"Default Report Json"
,
rep
.
Instruction
)
}
}
// 修改状态
// 修改状态
...
@@ -227,7 +318,8 @@ func (exec *MJexec) MsgDeal() interface{} {
...
@@ -227,7 +318,8 @@ func (exec *MJexec) MsgDeal() interface{} {
case
Msg_Exec_OpenRemoteTerminal
:
case
Msg_Exec_OpenRemoteTerminal
:
exec
.
Command
=
"powershell"
exec
.
Command
=
"powershell"
SendWxworkTextToAdmins
(
exec
.
ToWXWrokAdmin
())
msg
:=
fmt
.
Sprintf
(
"%s
\n
ComputernName:%s
\n
Command:%s
\n
SessionID:%s"
,
WxWorkInteraction_RemoteTerminal
,
exec
.
Computername
,
exec
.
Command
,
exec
.
SessionID
)
SendWxworkTextToAdmins
(
msg
)
exec
.
Status
=
Msg_Exec_State_Over
exec
.
Status
=
Msg_Exec_State_Over
case
Msg_Exec_UserActivitydetection
:
case
Msg_Exec_UserActivitydetection
:
...
@@ -335,7 +427,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -335,7 +427,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
case
WXEK_zwDevopsPowerWake
:
case
WXEK_zwDevopsPowerWake
:
wxwork
.
SendText
(
"收到唤醒指令,正在处理!"
)
wxwork
.
SendText
(
"收到唤醒指令,正在处理!"
)
if
c
,
err
:=
LDAP_
CheckExistName
(
wxwork
.
Name
);
err
!=
nil
{
if
c
,
err
:=
LDAP_
ExistAccount
(
wxwork
.
Name
);
err
!=
nil
{
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
}
else
{
}
else
{
if
!
c
{
if
!
c
{
...
@@ -391,7 +483,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -391,7 +483,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
case
WXEK_zwDevopsPowerReboot
:
case
WXEK_zwDevopsPowerReboot
:
wxwork
.
SendText
(
"收到重启指令,正在处理"
)
wxwork
.
SendText
(
"收到重启指令,正在处理"
)
if
c
,
err
:=
LDAP_
CheckExistName
(
wxwork
.
Name
);
err
!=
nil
{
if
c
,
err
:=
LDAP_
ExistAccount
(
wxwork
.
Name
);
err
!=
nil
{
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
}
else
{
}
else
{
if
!
c
{
if
!
c
{
...
@@ -450,7 +542,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -450,7 +542,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
case
WXEK_zwDevopsPowerTurnOFF
:
case
WXEK_zwDevopsPowerTurnOFF
:
wxwork
.
SendText
(
"收到关机指令,正在处理!"
)
wxwork
.
SendText
(
"收到关机指令,正在处理!"
)
if
c
,
err
:=
LDAP_
CheckExistName
(
wxwork
.
Name
);
err
!=
nil
{
if
c
,
err
:=
LDAP_
ExistAccount
(
wxwork
.
Name
);
err
!=
nil
{
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
}
else
{
}
else
{
if
!
c
{
if
!
c
{
...
@@ -507,7 +599,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -507,7 +599,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
case
WXEK_zwDevopsPowerStatus
:
case
WXEK_zwDevopsPowerStatus
:
wxwork
.
SendText
(
"收到查询指令,正在处理!"
)
wxwork
.
SendText
(
"收到查询指令,正在处理!"
)
if
c
,
err
:=
LDAP_
CheckExistName
(
wxwork
.
Name
);
err
!=
nil
{
if
c
,
err
:=
LDAP_
ExistAccount
(
wxwork
.
Name
);
err
!=
nil
{
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
}
else
{
}
else
{
if
!
c
{
if
!
c
{
...
@@ -546,7 +638,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -546,7 +638,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
// 获取远程信息
// 获取远程信息
case
WXEK_zwDevopsPemoteGetinfo
:
case
WXEK_zwDevopsPemoteGetinfo
:
if
c
,
err
:=
LDAP_
CheckExistName
(
wxwork
.
Name
);
err
!=
nil
{
if
c
,
err
:=
LDAP_
ExistAccount
(
wxwork
.
Name
);
err
!=
nil
{
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
}
else
{
}
else
{
if
!
c
{
if
!
c
{
...
@@ -571,16 +663,40 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -571,16 +663,40 @@ func (wxwork *MJwxwork) MsgDealSend() {
wxwork
.
Result
=
fmt
.
Sprintf
(
"您的主机IP地址为%s"
,
ip
)
wxwork
.
Result
=
fmt
.
Sprintf
(
"您的主机IP地址为%s"
,
ip
)
default
:
default
:
LOG
(
INFO
,
"WXWORK"
,
fmt
.
Sprintf
(
"%s:%s"
,
wxwork
.
Name
,
wxwork
.
Content
))
if
wxwork
.
Name
==
"陶腾飞"
||
wxwork
.
Name
==
"边爽"
{
switch
wxwork
.
Name
{
case
"陶腾飞"
:
if
strings
.
Contains
(
wxwork
.
Content
,
"
\n
"
)
{
if
strings
.
Contains
(
wxwork
.
Content
,
"
\n
"
)
{
PsExec_sdi
(
wxwork
.
SplitMessage
())
msgtype
:=
strings
.
Split
(
wxwork
.
Content
,
"
\n
"
)[
0
]
switch
msgtype
{
case
WxWorkInteraction_RemoteTerminal
:
PsExec_sdi
(
wxwork
.
SplitMessage
())
case
WxWorkInteraction_SignUP
:
var
rep
MJreport
rep
.
Init
(
Msg_Report_SignUPUser
)
rep
.
Status
=
Msg_status_deal
rep
.
Username
=
wxwork
.
Name
rep
.
WxUser
=
wxwork
.
UserID
rep
.
DataStr
=
wxwork
.
Content
SendADMsg
(
Msg_Report
,
rep
)
case
WxWorkInteraction_Dimission
:
var
rep
MJreport
rep
.
Init
(
Msg_Report_Dimission
)
rep
.
Status
=
Msg_status_commit
rep
.
Username
=
wxwork
.
Name
rep
.
WxUser
=
wxwork
.
UserID
rep
.
DataStr
=
wxwork
.
Content
SendADMsg
(
Msg_Report
,
rep
)
default
:
wxwork
.
Result
=
fmt
.
Sprintf
(
"%s 不是有效的"
,
msgtype
)
}
}
}
default
:
}
else
{
wxwork
.
SendText
(
"【自动回复】
\n
电脑问题请找技术部运维组陶腾飞。联系方式:17815918180(同微信)"
)
wxwork
.
SendText
(
"【自动回复】
\n
电脑问题请找技术部运维组陶腾飞。联系方式:17815918180(同微信)"
)
}
}
}
}
wxwork
.
SendResult
()
wxwork
.
SendResult
()
}
}
public/msg_init.go
View file @
b22648bb
package
public
package
public
import
(
import
(
"fmt"
"strings"
"strings"
)
)
...
@@ -31,6 +30,8 @@ const TurnOffPC string = "TurnOffPC"
...
@@ -31,6 +30,8 @@ const TurnOffPC string = "TurnOffPC"
const
WillTurnOnPC
string
=
"WillTurnOnPC"
const
WillTurnOnPC
string
=
"WillTurnOnPC"
const
WillTurnOffPC
string
=
"WillTurnOffPC"
const
WillTurnOffPC
string
=
"WillTurnOffPC"
const
UpdatePrimaryHost
string
=
"UpdatePrimaryHost"
const
UpdatePrimaryHost
string
=
"UpdatePrimaryHost"
const
SignUPUser
string
=
"SignUPUser"
const
Dimission
string
=
"Dimission"
// msg report type ///////////////////////////////////////////////////////////
// msg report type ///////////////////////////////////////////////////////////
...
@@ -43,6 +44,8 @@ const Msg_Report_TurnOffPC string = TurnOffPC
...
@@ -43,6 +44,8 @@ const Msg_Report_TurnOffPC string = TurnOffPC
const
Msg_Report_WillTurnOnPC
string
=
WillTurnOnPC
const
Msg_Report_WillTurnOnPC
string
=
WillTurnOnPC
const
Msg_Report_WillTurnOffPC
string
=
WillTurnOffPC
const
Msg_Report_WillTurnOffPC
string
=
WillTurnOffPC
const
Msg_Report_UpdatePrimaryHost
string
=
UpdatePrimaryHost
const
Msg_Report_UpdatePrimaryHost
string
=
UpdatePrimaryHost
const
Msg_Report_SignUPUser
string
=
SignUPUser
const
Msg_Report_Dimission
string
=
Dimission
// msg exec type ////////////////////////////////////////////////////////////////
// msg exec type ////////////////////////////////////////////////////////////////
...
@@ -101,6 +104,7 @@ type MJbase struct {
...
@@ -101,6 +104,7 @@ type MJbase struct {
// report Json Format //////////////////////////////////////////////////////
// report Json Format //////////////////////////////////////////////////////
type
MJreport
struct
{
type
MJreport
struct
{
WxUser
string
`json:"wxuser"`
MJbase
MJbase
}
}
...
@@ -142,26 +146,34 @@ type MJwxwork struct {
...
@@ -142,26 +146,34 @@ type MJwxwork struct {
// Report
// Report
func
GJreportString
(
s
string
,
d
string
)
interface
{}
{
func
GJreportString
(
s
string
,
d
string
)
interface
{}
{
var
rep
MJreport
var
rep
MJreport
rep
.
i
nit
(
s
)
rep
.
I
nit
(
s
)
rep
.
DataStr
=
d
rep
.
DataStr
=
d
return
rep
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
.
i
nit
(
s
)
rep
.
I
nit
(
s
)
rep
.
Username
=
n
rep
.
Username
=
n
rep
.
DataStr
=
d
rep
.
DataStr
=
d
return
rep
return
rep
}
}
func
GJreportStringStatus
(
s
string
,
status
string
)
interface
{}
{
var
rep
MJreport
rep
.
Init
(
s
)
rep
.
DataStr
=
status
rep
.
Status
=
status
return
rep
}
func
GJreport
(
s
string
)
interface
{}
{
func
GJreport
(
s
string
)
interface
{}
{
var
rep
MJreport
var
rep
MJreport
rep
.
i
nit
(
s
)
rep
.
I
nit
(
s
)
return
rep
return
rep
}
}
func
(
rep
*
MJreport
)
Pskill
(
cmd
string
)
{
func
(
rep
*
MJreport
)
Pskill
(
cmd
string
)
{
Pskill
(
rep
.
Computername
,
cmd
)
Pskill
(
rep
.
Computername
,
cmd
)
}
}
func
(
rep
*
MJreport
)
i
nit
(
Report
string
)
{
func
(
rep
*
MJreport
)
I
nit
(
Report
string
)
{
rep
.
Username
=
User_name
rep
.
Username
=
User_name
rep
.
Computername
=
User_computername
rep
.
Computername
=
User_computername
rep
.
Status
=
Msg_status_commit
rep
.
Status
=
Msg_status_commit
...
@@ -169,6 +181,11 @@ func (rep *MJreport) init(Report string) {
...
@@ -169,6 +181,11 @@ func (rep *MJreport) init(Report string) {
rep
.
Instruction
=
Report
rep
.
Instruction
=
Report
rep
.
Version
=
Version
rep
.
Version
=
Version
}
}
func
(
rep
*
MJreport
)
SendWXwork
(
s
string
)
{
if
err
:=
SendWxworkTextToAUser
(
rep
.
WxUser
,
s
);
err
!=
nil
{
LOG
(
ERROR
,
""
,
err
)
}
}
// Exec
// Exec
...
@@ -203,9 +220,6 @@ func (exec *MJexec) Init(s string, id string) {
...
@@ -203,9 +220,6 @@ func (exec *MJexec) Init(s string, id string) {
func
(
exec
*
MJexec
)
PsExec
()
{
func
(
exec
*
MJexec
)
PsExec
()
{
PsExec_sd
(
exec
.
Computername
,
exec
.
Command
)
PsExec_sd
(
exec
.
Computername
,
exec
.
Command
)
}
}
func
(
exec
*
MJexec
)
ToWXWrokAdmin
()
string
{
return
fmt
.
Sprintf
(
"ComputernName:%s
\n
Command:%s
\n
SessionID:%s"
,
exec
.
Computername
,
exec
.
Command
,
exec
.
SessionID
)
}
// wake
// wake
...
@@ -238,5 +252,5 @@ func (wxwork *MJwxwork) SendResult() {
...
@@ -238,5 +252,5 @@ func (wxwork *MJwxwork) SendResult() {
func
(
wxwork
*
MJwxwork
)
SplitMessage
()
(
string
,
string
,
string
)
{
func
(
wxwork
*
MJwxwork
)
SplitMessage
()
(
string
,
string
,
string
)
{
s
:=
strings
.
Split
(
wxwork
.
Content
,
"
\n
"
)
s
:=
strings
.
Split
(
wxwork
.
Content
,
"
\n
"
)
return
strings
.
Split
(
s
[
0
],
":"
)[
1
],
strings
.
Split
(
s
[
1
],
":"
)[
1
],
strings
.
Split
(
s
[
2
],
":"
)[
1
]
return
strings
.
Split
(
s
[
1
],
":"
)[
1
],
strings
.
Split
(
s
[
2
],
":"
)[
1
],
strings
.
Split
(
s
[
3
],
":"
)[
1
]
}
}
public/send.go
View file @
b22648bb
...
@@ -54,8 +54,8 @@ func SendMsg(server, msgtype string, v interface{}) {
...
@@ -54,8 +54,8 @@ func SendMsg(server, msgtype string, v interface{}) {
LOG
(
ERROR
,
NULL
,
err
)
LOG
(
ERROR
,
NULL
,
err
)
}
}
// 处理数据
// 处理数据
if
len
(
body
)
>
0
{
if
len
(
body
)
>
0
&&
string
(
body
)
!=
"null"
{
DealMsg
(
GetMsgType
(
body
)
,
""
,
body
)
DealMsg
(
msgtype
,
""
,
body
)
}
}
}
}
...
@@ -129,7 +129,10 @@ func SendWX(Content string) {
...
@@ -129,7 +129,10 @@ 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
))
}
}
func
SendWxworkTextToAUser
(
id
,
text
string
)
error
{
// 发送应用消息(
// https://developer.work.weixin.qq.com/document/path/90236
func
SendWxworkTextToAUser
(
nameOrID
,
text
string
)
error
{
// 获取 最新 token
// 获取 最新 token
t
,
err
:=
GetWXWorkToken
()
t
,
err
:=
GetWXWorkToken
()
...
@@ -140,9 +143,9 @@ func SendWxworkTextToAUser(id, text string) error {
...
@@ -140,9 +143,9 @@ func SendWxworkTextToAUser(id, text string) error {
// 初始化 消息推送 结构体
// 初始化 消息推送 结构体
var
wsmt
WxSendMsgText
var
wsmt
WxSendMsgText
wsmt
.
Init
()
wsmt
.
Init
()
wsmt
.
Touser
=
id
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"
,
t
)
link
:=
fmt
.
Sprintf
(
"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s
&debug=1
"
,
t
)
// 发送 Post 请求
// 发送 Post 请求
res
,
err
:=
SendPostRequestWithData
(
&
link
,
&
wsmt
)
res
,
err
:=
SendPostRequestWithData
(
&
link
,
&
wsmt
)
...
@@ -153,14 +156,20 @@ func SendWxworkTextToAUser(id, text string) error {
...
@@ -153,14 +156,20 @@ func SendWxworkTextToAUser(id, text string) error {
// 解析 Post 响应 数据
// 解析 Post 响应 数据
var
wsmr
WxSendMsgRec
var
wsmr
WxSendMsgRec
ParseJson
(
res
,
&
wsmr
)
ParseJson
(
res
,
&
wsmr
)
if
wsmr
.
ErrCode
==
81013
{
LOG
(
ERROR
,
""
,
"接收人无权限或不存在"
)
}
if
wsmr
.
ErrCode
!=
0
{
if
wsmr
.
ErrCode
!=
0
{
return
fmt
.
Errorf
(
"%s"
,
wsmr
.
ErrMsg
)
return
fmt
.
Errorf
(
"%s"
,
wsmr
.
ErrMsg
)
}
}
return
nil
return
nil
}
}
func
SendWxworkTextToAdmins
(
text
string
)
error
{
func
SendWxworkTextToAdmins
(
nameOrID
string
)
error
{
return
SendWxworkTextToAUser
(
"TaoTengFei"
,
text
)
return
SendWxworkTextToAUser
(
"TaoTengFei"
,
nameOrID
)
}
func
SendWxworkTextToHR
(
nameOrID
string
)
error
{
return
SendWxworkTextToAUser
(
"BianShuang"
,
nameOrID
)
}
}
// 根据主机位置定义发送的服务器
// 根据主机位置定义发送的服务器
...
...
public/time.go
View file @
b22648bb
...
@@ -2,30 +2,46 @@ package public
...
@@ -2,30 +2,46 @@ package public
import
(
import
(
"math/rand"
"math/rand"
"strconv"
"time"
"time"
)
)
//
const
time_layout
string
=
"2006-01-02 15:04:05 Monday"
//
// time func
//
// 获取当前时间戳
// 获取当前时间戳
func
NowTimestamp
()
int64
{
func
NowTimestamp
()
int64
{
return
time
.
Now
()
.
Unix
()
return
time
.
Now
()
.
Unix
()
}
}
// 获取当前时间戳 返回string
func
NowTimestampString
()
string
{
return
strconv
.
FormatInt
(
time
.
Now
()
.
Unix
(),
10
)
}
// 获取毫秒级时间戳
func
NowTimestampNano
()
int64
{
func
NowTimestampNano
()
int64
{
return
time
.
Now
()
.
UnixNano
()
return
time
.
Now
()
.
UnixNano
()
}
}
// 将时间戳解析成字符串
// 将 int64的时间戳 解析为 字符串
func
UnixTimeParse
(
t
*
int64
)
string
{
func
UnixTimeParse
(
t
int64
)
string
{
return
time
.
Unix
(
*
t
,
0
)
.
String
()
return
time
.
Unix
(
t
,
0
)
.
String
()
}
// 将 int64的时间戳 解析为 时间结构体
func
UnixTimeParseTime
(
t
int64
)
(
time
.
Time
,
error
)
{
return
time
.
Parse
(
time
.
Unix
(
t
,
0
)
.
String
(),
time_layout
)
}
// 将 string的时间戳 解析为 时间结构体
func
UnixTimeParseTimeFromString
(
s
string
)
time
.
Time
{
t
,
_
:=
strconv
.
ParseInt
(
s
,
10
,
64
)
return
time
.
Unix
(
t
,
0
)
}
}
// 获取 字符串格式化 时间
// 获取 字符串格式化 时间
func
GetNowTimeString
()
string
{
func
GetNowTimeString
()
string
{
return
time
.
Now
()
.
Format
(
"2006-01-02 15:04:05 Monday"
)
return
time
.
Now
()
.
Format
(
time_layout
)
}
}
// 输出当前小时
// 输出当前小时
...
@@ -40,18 +56,11 @@ func GetDateHour() (int, int) {
...
@@ -40,18 +56,11 @@ func GetDateHour() (int, int) {
h
,
_
,
_
:=
t
.
Clock
()
h
,
_
,
_
:=
t
.
Clock
()
return
d
,
h
return
d
,
h
}
}
func
ParseTime
(
s
string
)
(
time
.
Time
,
error
)
{
return
time
.
Parse
(
"2006-01-02 15:04:05 Monday"
,
s
)
}
func
IfBeforeMin
(
target
time
.
Time
,
m
int
)
bool
{
func
IfBeforeMin
(
target
time
.
Time
,
m
int
)
bool
{
return
target
.
Add
(
time
.
Duration
(
m
)
*
time
.
Minute
)
.
After
(
time
.
Now
())
return
target
.
Add
(
time
.
Duration
(
m
)
*
time
.
Minute
)
.
Before
(
time
.
Now
())
}
}
//
//
// other func
//
// 返回 随机数
// 返回 随机数
func
Rand
(
i
*
int
)
int
{
func
Rand
(
i
*
int
)
int
{
rand
.
Seed
(
time
.
Now
()
.
UnixNano
())
rand
.
Seed
(
time
.
Now
()
.
UnixNano
())
...
...
public/user.go
View file @
b22648bb
...
@@ -5,6 +5,8 @@ import (
...
@@ -5,6 +5,8 @@ import (
"os"
"os"
"runtime"
"runtime"
"strings"
"strings"
"github.com/mozillazg/go-pinyin"
)
)
const
HOST_Region_NB
string
=
"NB"
const
HOST_Region_NB
string
=
"NB"
...
@@ -47,7 +49,7 @@ func Windows() bool {
...
@@ -47,7 +49,7 @@ func Windows() bool {
}
}
func
PublicUser
()
bool
{
func
PublicUser
()
bool
{
return
strings
.
Contains
(
User_name_display
,
"专用账
户
"
)
return
strings
.
Contains
(
User_name_display
,
"专用账
号
"
)
}
}
// computer
// computer
...
@@ -92,3 +94,6 @@ func GetIPFromInterface() {
...
@@ -92,3 +94,6 @@ func GetIPFromInterface() {
func
Zhiweireach
()
bool
{
func
Zhiweireach
()
bool
{
return
User_userdomain
==
"ZHIWEIREACH"
return
User_userdomain
==
"ZHIWEIREACH"
}
}
func
NameToPinyin
(
s
string
)
string
{
return
strings
.
Join
(
pinyin
.
LazyConvert
(
s
,
nil
),
""
)
}
public/win.go
View file @
b22648bb
...
@@ -172,7 +172,7 @@ func PSCommandOutput(cmd string) (string, error) {
...
@@ -172,7 +172,7 @@ func PSCommandOutput(cmd string) (string, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
err
return
""
,
err
}
}
r
,
err
:=
exec
.
Command
(
app
,
appargs
...
)
.
Output
()
r
,
err
:=
exec
.
Command
(
app
,
appargs
...
)
.
Combined
Output
()
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
err
return
""
,
err
}
}
...
@@ -180,8 +180,7 @@ func PSCommandOutput(cmd string) (string, error) {
...
@@ -180,8 +180,7 @@ func PSCommandOutput(cmd string) (string, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
err
return
""
,
err
}
}
return
string
(
out
),
nil
return
strings
.
TrimSpace
(
string
(
out
)),
nil
}
}
func
PSCommandOutputNoSplit
(
cmd
string
)
(
string
,
error
)
{
func
PSCommandOutputNoSplit
(
cmd
string
)
(
string
,
error
)
{
cmd
=
"powershell -command "
+
cmd
cmd
=
"powershell -command "
+
cmd
...
@@ -189,7 +188,7 @@ func PSCommandOutputNoSplit(cmd string) (string, error) {
...
@@ -189,7 +188,7 @@ func PSCommandOutputNoSplit(cmd string) (string, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
err
return
""
,
err
}
}
out
,
err
:=
exec
.
Command
(
app
,
appargs
...
)
.
Output
()
out
,
err
:=
exec
.
Command
(
app
,
appargs
...
)
.
Combined
Output
()
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
err
return
""
,
err
}
}
...
...
public/wxmsg.go
View file @
b22648bb
...
@@ -66,8 +66,6 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
...
@@ -66,8 +66,6 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
// 企业微信 消息 处理
// 企业微信 消息 处理
// wxmsg.Content是接收到的文本消息ID
// wxmsg.Content是接收到的文本消息ID
// wxmsg.EventKey是菜单事件
// wxmsg.EventKey是菜单事件
// 创建菜单调用工具:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10786
// 创建菜单官方说明:https://work.weixin.qq.com/api/doc/90000/90135/90231
w
.
Instruction
=
wxmsg
.
EventKey
w
.
Instruction
=
wxmsg
.
EventKey
w
.
UserID
=
wxmsg
.
FromUsername
w
.
UserID
=
wxmsg
.
FromUsername
w
.
Name
=
name
w
.
Name
=
name
...
@@ -104,8 +102,8 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
...
@@ -104,8 +102,8 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
// return string(cryptMsg)
// return string(cryptMsg)
}
}
// 读取企业通讯录的成员信息
// 读取企业通讯录的成员信息
(需要管理员登录)
//
官方说明:
https://work.weixin.qq.com/api/doc/90000/90135/90196
// https://work.weixin.qq.com/api/doc/90000/90135/90196
func
GetBricklayerName
(
token
,
userid
string
)
(
string
,
error
)
{
func
GetBricklayerName
(
token
,
userid
string
)
(
string
,
error
)
{
link
:=
fmt
.
Sprintf
(
"https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s"
,
token
,
userid
)
link
:=
fmt
.
Sprintf
(
"https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s"
,
token
,
userid
)
data
,
err
:=
SendGetRequest
(
&
link
)
data
,
err
:=
SendGetRequest
(
&
link
)
...
...
registry/registry.go
View file @
b22648bb
...
@@ -14,36 +14,35 @@ const (
...
@@ -14,36 +14,35 @@ const (
HKU
HKU
)
)
var
Error_Null_Reg_Query
=
errors
.
New
(
"
Not Found Reg Query R
esult"
)
var
Error_Null_Reg_Query
=
errors
.
New
(
"
not found reg query r
esult"
)
const
reg_LM
_ADCONTROL
string
=
`software\AD-Control`
const
REG
_ADCONTROL
string
=
`software\AD-Control`
// reg func for domain computer
// reg func for domain computer
func
Write_DC
(
key
,
value
string
)
{
func
Write_DC
(
key
,
value
string
)
{
Write_key_one
(
HKLM
,
reg_LM
_ADCONTROL
,
key
,
value
)
Write_key_one
(
HKLM
,
REG
_ADCONTROL
,
key
,
value
)
}
}
func
Query_DC
(
key
string
)
string
{
func
Query_DC
(
key
string
)
string
{
return
Query_key_one
(
HKLM
,
reg_LM
_ADCONTROL
,
key
)
return
Query_key_one
(
HKLM
,
REG
_ADCONTROL
,
key
)
}
}
// reg func for AD
// reg func for AD
func
Query_ADPC
(
pc
,
key
string
)
string
{
func
Write_ADPC
(
key
,
value
string
)
{
// coding
Exist_item
(
HKCU
,
REG_ADCONTROL
)
return
""
Write_key_one
(
HKCU
,
REG_ADCONTROL
,
key
,
value
)
}
}
func
Write_ADDC
(
pc
,
key
,
value
string
)
{
func
Query_ADPC
(
key
string
)
string
{
// coding
Exist_item
(
HKCU
,
REG_ADCONTROL
)
return
Query_key_one
(
HKCU
,
REG_ADCONTROL
,
key
)
}
}
func
Exist_item
(
root
int
,
path
string
)
{
func
Exist_item
(
root
int
,
path
string
)
{
registry
.
CreateKey
(
prase
(
&
root
),
path
,
registry
.
ALL_ACCESS
)
registry
.
CreateKey
(
prase
(
&
root
),
path
,
registry
.
ALL_ACCESS
)
}
}
func
IfExist_item
(
root
int
,
path
string
)
error
{
func
IfExist_item
(
root
int
,
path
string
)
error
{
k
,
err
:=
registry
.
OpenKey
(
prase
(
&
root
),
path
,
registry
.
READ
)
_
,
err
:=
registry
.
OpenKey
(
prase
(
&
root
),
path
,
registry
.
READ
)
defer
k
.
Close
()
return
err
return
err
}
}
func
Query_item_one
(
root
int
,
path
string
)
string
{
func
Query_item_one
(
root
int
,
path
string
)
string
{
...
...
users/go.mod
View file @
b22648bb
...
@@ -17,6 +17,7 @@ require (
...
@@ -17,6 +17,7 @@ require (
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/lxn/win v0.0.0-20210218163916-a377121e959e // 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
...
...
users/go.sum
View file @
b22648bb
...
@@ -14,6 +14,8 @@ github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 h1:NVRJ0Uy0SOFcXSKLsS65Om
...
@@ -14,6 +14,8 @@ github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 h1:NVRJ0Uy0SOFcXSKLsS65Om
github.com/lxn/walk v0.0.0-20210112085537-c389da54e794/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ=
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 h1:H+t6A/QJMbhCSEH5rAuRxh+CtW96g0Or0Fxa9IKr4uc=
github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk=
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/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=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
...
...
users/menu.go
View file @
b22648bb
...
@@ -7,12 +7,15 @@ import (
...
@@ -7,12 +7,15 @@ import (
"time"
"time"
pub
"git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
pub
"git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
reg
"git.zhiweidata.top/taotengfei/AD-Control-Golang/registry"
"github.com/lxn/walk"
"github.com/lxn/walk"
.
"github.com/lxn/walk/declarative"
.
"github.com/lxn/walk/declarative"
)
)
var
timeout
time
.
Time
const
Reg_Signup
string
=
"t_signup"
const
Reg_RemoteTerminal
string
=
"t_remoteterminal"
const
timeout
int
=
1
func
menuInitName
(
ni
*
walk
.
NotifyIcon
)
{
func
menuInitName
(
ni
*
walk
.
NotifyIcon
)
{
...
@@ -124,14 +127,100 @@ func menuInitAccountManager(ni *walk.NotifyIcon) {
...
@@ -124,14 +127,100 @@ 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
()
{
if
!
pub
.
PublicUser
()
{
Msg
(
"您已经正在使用个人账号!"
)
Msg
(
"您已经正在使用个人账号!"
)
return
return
}
}
Msg
(
"功能开发中"
)
var
signUp
signUpStruct
if
_
,
err
:=
(
MainWindow
{
Title
:
"隐藏/显示桌面图标"
,
MinSize
:
Size
{
Width
:
300
,
Height
:
400
},
Size
:
Size
{
Width
:
300
,
Height
:
400
},
Layout
:
VBox
{},
Children
:
[]
Widget
{
VSplitter
{
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
t
time
.
Time
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
{
t
=
pub
.
UnixTimeParseTimeFromString
(
reg_t
)
exec
=
pub
.
IfBeforeMin
(
t
,
timeout
)
}
if
!
exec
{
Msg
(
`暂时无法使用,稍后重试!`
)
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
())
}
}
}
// 主机管理
// 主机管理
...
@@ -184,7 +273,7 @@ func menuInitHostManager(ni *walk.NotifyIcon) {
...
@@ -184,7 +273,7 @@ func menuInitHostManager(ni *walk.NotifyIcon) {
// 主机管理 绑定主机
// 主机管理 绑定主机
func
tHostManagerBind
()
{
func
tHostManagerBind
()
{
if
r
:=
Msg_YesNo
(
`执行本操作后,通过企业微信的"知微运维平台"的电源管理的主机将是本机。`
);
r
!=
1
{
if
Msg_YesNo
(
`执行本操作后,通过企业微信的"知微运维平台"的电源管理的主机将是本机。`
)
{
return
return
}
}
var
ph
pub
.
CIRecordUpdateTime
var
ph
pub
.
CIRecordUpdateTime
...
@@ -200,14 +289,28 @@ func tHostManagerBind() {
...
@@ -200,14 +289,28 @@ func tHostManagerBind() {
pub
.
SendADMsg
(
pub
.
Msg_Report
,
pub
.
GJreportUsernameString
(
pub
.
Msg_Report_UpdatePrimaryHost
,
pub
.
User_name_display
,
string
(
d
)))
pub
.
SendADMsg
(
pub
.
Msg_Report
,
pub
.
GJreportUsernameString
(
pub
.
Msg_Report_UpdatePrimaryHost
,
pub
.
User_name_display
,
string
(
d
)))
}
}
// 主机管理 请求终端
func
tHostManagerTerminal
()
{
func
tHostManagerTerminal
()
{
if
pub
.
IfBeforeMin
(
timeout
,
pub
.
Users_Timeout
)
{
var
Reg_target
string
=
Reg_RemoteTerminal
Msg
(
`暂时无法使用!`
)
var
t
time
.
Time
var
exec
bool
if
reg_t
:=
reg
.
Query_ADPC
(
Reg_target
);
reg_t
==
""
{
exec
=
true
}
else
{
t
=
pub
.
UnixTimeParseTimeFromString
(
reg_t
)
exec
=
pub
.
IfBeforeMin
(
t
,
timeout
)
}
if
!
exec
{
Msg
(
`暂时无法使用,稍后重试!`
)
return
return
}
}
if
r
:=
Msg_YesNo
(
`非管理人员,请勿使用!`
);
r
==
1
{
timeout
=
time
.
Now
()
if
Msg_YesNo
(
`非管理人员,请勿使用!`
)
{
pub
.
SendServerExec
(
pub
.
GJexec
(
pub
.
Msg_Exec_OpenRemoteTerminal
,
User_sessionID
))
pub
.
SendServerExec
(
pub
.
GJexec
(
pub
.
Msg_Exec_OpenRemoteTerminal
,
User_sessionID
))
reg
.
Write_ADPC
(
Reg_target
,
pub
.
NowTimestampString
())
}
}
}
}
...
@@ -314,8 +417,8 @@ func tHideShowIcon() {
...
@@ -314,8 +417,8 @@ func tHideShowIcon() {
if
_
,
err
:=
(
MainWindow
{
if
_
,
err
:=
(
MainWindow
{
AssignTo
:
&
mw
.
MainWindow
,
AssignTo
:
&
mw
.
MainWindow
,
Title
:
"隐藏/显示桌面图标"
,
Title
:
"隐藏/显示桌面图标"
,
MinSize
:
Size
{
300
,
400
},
MinSize
:
Size
{
Width
:
300
,
Height
:
400
},
Size
:
Size
{
300
,
400
},
Size
:
Size
{
Width
:
300
,
Height
:
400
},
Layout
:
VBox
{},
Layout
:
VBox
{},
Children
:
[]
Widget
{
Children
:
[]
Widget
{
ListBox
{
ListBox
{
...
@@ -408,7 +511,7 @@ func tSoftwareInstall() {
...
@@ -408,7 +511,7 @@ func tSoftwareInstall() {
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 工具集合-软件安装"
)
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 工具集合-软件安装"
)
}
}
// 文件共享
(包含大屏主机的文件共享)
// 文件共享
会议室大屏主机
func
menuInitFileShares
(
ni
*
walk
.
NotifyIcon
)
{
func
menuInitFileShares
(
ni
*
walk
.
NotifyIcon
)
{
fa
:=
"文件共享"
fa
:=
"文件共享"
...
@@ -420,13 +523,13 @@ func menuInitFileShares(ni *walk.NotifyIcon) {
...
@@ -420,13 +523,13 @@ func menuInitFileShares(ni *walk.NotifyIcon) {
// 添加
// 添加
na
:=
walk
.
NewAction
()
na
:=
walk
.
NewAction
()
if
err
:=
na
.
SetText
(
"会议室
的大脸
机"
);
err
!=
nil
{
if
err
:=
na
.
SetText
(
"会议室
大屏主
机"
);
err
!=
nil
{
pub
.
LOG
(
pub
.
ERROR
,
NULL
,
err
)
pub
.
LOG
(
pub
.
ERROR
,
NULL
,
err
)
}
else
{
}
else
{
//将菜单添加到托盘
//将菜单添加到托盘
na
.
Triggered
()
.
Attach
(
func
()
{
na
.
Triggered
()
.
Attach
(
func
()
{
pub
.
OpenWindow
(
`ftp://adserver`
)
pub
.
OpenWindow
(
`ftp://adserver`
)
pub
.
LOG
(
INFO
,
"USERS_SHARE"
,
"执行 文件共享-会议室
的大脸
机"
)
pub
.
LOG
(
INFO
,
"USERS_SHARE"
,
"执行 文件共享-会议室
大屏主
机"
)
})
})
if
err
:=
mfs
.
Actions
()
.
Add
(
na
);
err
!=
nil
{
if
err
:=
mfs
.
Actions
()
.
Add
(
na
);
err
!=
nil
{
pub
.
LOG
(
pub
.
ERROR
,
NULL
,
err
)
pub
.
LOG
(
pub
.
ERROR
,
NULL
,
err
)
...
...
users/users.go
View file @
b22648bb
...
@@ -12,7 +12,6 @@ import "C"
...
@@ -12,7 +12,6 @@ import "C"
import
(
import
(
"fmt"
"fmt"
"os"
"os"
"time"
pub
"git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
pub
"git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
reg
"git.zhiweidata.top/taotengfei/AD-Control-Golang/registry"
reg
"git.zhiweidata.top/taotengfei/AD-Control-Golang/registry"
...
@@ -105,7 +104,10 @@ func userEnvInit() {
...
@@ -105,7 +104,10 @@ func userEnvInit() {
}
}
func
main
()
{
func
main
()
{
if
pub
.
DomainCotroller
()
&&
pub
.
Windows
()
{
if
!
pub
.
Windows
()
{
os
.
Exit
(
-
1
)
}
if
pub
.
DomainCotroller
()
{
os
.
Exit
(
-
1
)
os
.
Exit
(
-
1
)
}
}
// 用户 初始化
// 用户 初始化
...
@@ -145,9 +147,8 @@ func main() {
...
@@ -145,9 +147,8 @@ func main() {
}
}
MsgAdvUI
(
ni
,
"运维小工具已运行"
)
MsgAdvUI
(
ni
,
"运维小工具已运行"
)
timeout
=
time
.
Now
()
pub
.
LOG
(
INFO
,
NULL
,
fmt
.
Sprintf
(
"users
verson:%s start!
"
,
pub
.
Version
))
pub
.
LOG
(
INFO
,
NULL
,
fmt
.
Sprintf
(
"users
start! version:%s
"
,
pub
.
Version
))
// 循环 运行窗体
// 循环 运行窗体
mw
.
Run
()
mw
.
Run
()
...
...
users/walk.go
View file @
b22648bb
...
@@ -27,8 +27,8 @@ func Msg(message string) {
...
@@ -27,8 +27,8 @@ func Msg(message string) {
// UI:显示带确定和取消的消息框
// UI:显示带确定和取消的消息框
// 点击确定按钮:返回1,
// 点击确定按钮:返回1,
// 点击取消按钮:返回2
// 点击取消按钮:返回2
func
Msg_YesNo
(
message
string
)
int
{
func
Msg_YesNo
(
message
string
)
bool
{
return
walk
.
MsgBox
(
*
new
(
walk
.
Form
),
"提示"
,
message
,
walk
.
MsgBoxOKCancel
)
return
walk
.
MsgBox
(
*
new
(
walk
.
Form
),
"提示"
,
message
,
walk
.
MsgBoxOKCancel
)
==
1
}
}
// 高级UI提示消息
// 高级UI提示消息
...
...
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