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
46ab9836
Commit
46ab9836
authored
Jul 20, 2020
by
陶腾飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
42060ed5
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
652 additions
and
116 deletions
+652
-116
adct/adct.go
+8
-4
daemon/daemon.go
+10
-38
public/env.go
+24
-9
public/error.go
+15
-2
public/msg_deal.go
+72
-13
public/msg_init.go
+50
-7
public/print.go
+42
-9
public/public.go
+25
-7
public/send.go
+80
-22
public/win.go
+36
-4
public/wxjson.go
+48
-0
users/menu.go
+1
-1
wxwork/json.go
+55
-0
wxwork/wxwork.go
+186
-0
No files found.
adct/adct.go
View file @
46ab9836
...
@@ -8,13 +8,17 @@ import (
...
@@ -8,13 +8,17 @@ import (
func
main
(){
func
main
(){
var
logpath
string
var
logpath
string
if
pub
.
Adserver
()
{
if
pub
.
Adserver
()
{
logpath
=
`F:\logs\`
logpath
=
pub
.
Dir_AD_log
}
else
{
}
else
{
logpath
=
pub
.
Dir_userprofile
if
pub
.
RunAsPC
(
pub
.
User_computername
){
logpath
=
`C:\windows\system32\`
}
else
{
logpath
=
pub
.
Dir_userprofile
+
`\`
}
//pub.AutoFillInWeDriveDir()
//pub.AutoFillInWeDriveDir()
}
}
pub
.
Loger
=
pub
.
NewLoger
(
logpath
+
`
\
adct.log`
)
pub
.
Loger
=
pub
.
NewLoger
(
logpath
+
`adct.log`
)
//pub.PrintLog("start adct")
//pub.PrintLog("start adct")
var
backupText
=
flag
.
String
(
pub
.
Msg_Backup
,
""
,
"backup status to AD"
)
var
backupText
=
flag
.
String
(
pub
.
Msg_Backup
,
""
,
"backup status to AD"
)
...
@@ -118,7 +122,7 @@ func flag_wolall(pass * string){
...
@@ -118,7 +122,7 @@ func flag_wolall(pass * string){
continue
continue
}
else
{
}
else
{
if
limit
<=
10
{
if
limit
<=
10
{
pub
.
Delay
(
6
0
)
pub
.
Delay
(
1
0
)
limit
=
0
limit
=
0
}
}
pub
.
PrintLog
(
i
,
pc
,
mac
)
pub
.
PrintLog
(
i
,
pc
,
mac
)
...
...
daemon/daemon.go
View file @
46ab9836
...
@@ -3,47 +3,21 @@ package main
...
@@ -3,47 +3,21 @@ package main
import
(
import
(
pub
"AD-Control/public"
pub
"AD-Control/public"
"net"
"net"
"io"
"bufio"
"bufio"
)
)
// 守护进程 初始化
// 守护进程 初始化
func
daemonInit
(){
func
daemonInit
(){
// 1 创建文件夹
if
!
pub
.
Adserver
(){
pub
.
Exit
()}
for
_
,
i
:=
range
pub
.
Dir_Be
{
if
pub
.
NotExist
(
i
){
pub
.
Mkdir
(
i
)
}
}
var
logpath
string
if
pub
.
Adserver
()
{
// 2 初始化 微盘复制状态
pub
.
CopyStatusWeDrive
=
make
(
map
[
string
]
bool
)
pub
.
CopyStatusWeDrive
[
pub
.
Zhiwei_Dept_HB
]
=
true
pub
.
CopyStatusWeDrive
[
pub
.
Zhiwei_Dept_LP
]
=
true
pub
.
CopyStatusWeDrive
[
pub
.
Zhiwei_Dept_JR
]
=
true
pub
.
CopyStatusWeDrive
[
pub
.
Zhiwei_Dept_JD
]
=
true
pub
.
CopyStatusWeDrive
[
pub
.
Zhiwei_Dept_TXHD
]
=
true
pub
.
CopyStatusWeDrive
[
pub
.
Zhiwei_Dept_TXWJ
]
=
true
pub
.
CopyStatusWeDrive
[
pub
.
Zhiwei_Dept_BGYJZX
]
=
true
pub
.
CopyStatusWeDrive
[
pub
.
Zhiwei_Dept_TECH
]
=
true
// 日志文件位置:主控源文件的源文件目录
logpath
=
`F:\logs\daemon.log`
}
else
{
// 日志文件位置:域计算机的备份目录:C:\windows\temp
logpath
=
pub
.
Dir_tmp
+
`\daemon.log`
}
//
3
写入日志
// 写入日志
pub
.
Loger
=
pub
.
NewLoger
(
logpath
)
pub
.
Loger
=
pub
.
NewLoger
(
pub
.
Dir_AD_log
+
`daemon.log`
)
}
}
// 守护进程 运行
// 守护进程 运行
func
deamonRun
(){
func
deamonRun
(){
daemonHost
:=
pub
.
User_computername
listener
,
err
:=
net
.
Listen
(
"tcp"
,
pub
.
DaemonListen
)
listener
,
err
:=
net
.
Listen
(
"tcp"
,
pub
.
DaemonListen
)
if
err
!=
nil
{
if
err
!=
nil
{
pub
.
PntError
(
"Listen Error "
,
err
)
pub
.
PntError
(
"Listen Error "
,
err
)
return
return
...
@@ -53,29 +27,27 @@ func deamonRun(){
...
@@ -53,29 +27,27 @@ func deamonRun(){
for
{
for
{
if
conn
,
err
:=
listener
.
Accept
();
err
==
nil
{
if
conn
,
err
:=
listener
.
Accept
();
err
==
nil
{
// 新建 读取流
// 新建 读取流
if
bmsg
,
cerr
:=
bufio
.
NewReader
(
conn
)
.
ReadBytes
(
pub
.
EndSign
)
;
cerr
!=
io
.
EOF
{
bmsg
,
_
:=
bufio
.
NewReader
(
conn
)
.
ReadBytes
(
pub
.
EndSign
)
// 获取ip
// 获取ip
ip
:=
pub
.
GetConnIP
(
conn
.
RemoteAddr
())
ip
:=
pub
.
GetConnIP
(
conn
.
RemoteAddr
())
// 获取消息类型
// 获取消息类型
msgtype
:=
pub
.
ParseJsonHead
(
bmsg
)
msgtype
:=
pub
.
GetMsgType
(
bmsg
[
0
:
30
]
)
// 处理消息
// 处理消息
rec
:=
pub
.
DealMsgEnter
(
ip
,
msgtype
,
bmsg
)
rec
:=
pub
.
DealMsgEnter
(
ip
,
msgtype
,
bmsg
)
// 写入连接
// 写入连接
conn
.
Write
(
rec
)
conn
.
Write
(
rec
)
}
else
{
pub
.
PntError
(
daemonHost
,
" Conn Read Error "
,
cerr
)
}
// 关闭连接
// 关闭连接
if
err
:=
conn
.
Close
()
;
err
!=
nil
{
if
err
:=
conn
.
Close
()
;
err
!=
nil
{
pub
.
PntInfo
(
err
)
pub
.
PntInfo
(
err
)
}
}
continue
continue
}
else
{
}
else
{
pub
.
PntError
(
daemonHost
,
" Listen Error
"
,
err
)
pub
.
PntError
(
" Listen Error
"
,
err
)
}
}
}
}
...
@@ -85,4 +57,3 @@ func main() {
...
@@ -85,4 +57,3 @@ func main() {
daemonInit
()
daemonInit
()
deamonRun
()
deamonRun
()
}
}
\ No newline at end of file
public/env.go
View file @
46ab9836
package
public
package
public
// AD-Control //
// AD-Control //
const
Host_adserver
string
=
"ADSERVER"
const
Host_adserver
string
=
"ADSERVER"
const
DaemonPort
string
=
"1682
3
"
const
DaemonPort
string
=
"1682
4
"
const
DaemonListen
string
=
":"
+
DaemonPort
const
DaemonListen
string
=
":"
+
DaemonPort
const
ADServerDaemon
string
=
Host_adserver
+
DaemonListen
const
ADServerDaemon
string
=
Host_adserver
+
DaemonListen
var
LocalDaemon
string
=
User_computername
+
DaemonListen
const
WxwrokDaemon
string
=
":16823"
const
RandMax
int
=
60
const
RandMax
int
=
60
const
Version
string
=
"1.
2
.0"
const
Version
string
=
"1.
3
.0"
// user //
// user //
...
@@ -45,13 +44,14 @@ var Dir_appdata string = GetEnv("appdata")
...
@@ -45,13 +44,14 @@ var Dir_appdata string = GetEnv("appdata")
var
Dir_tmp
string
=
GetEnv
(
"tmp"
)
var
Dir_tmp
string
=
GetEnv
(
"tmp"
)
var
Dir_Windows
string
=
GetEnv
(
"windir"
)
+
`\`
var
Dir_Windows
string
=
GetEnv
(
"windir"
)
+
`\`
const
Dir_DocuBase
string
=
`C:\Users\Public\Documents\AD-Control\`
const
Dir_DocuBase
string
=
`C:\Users\Public\Documents\AD-Control\`
const
Dir_ADsoftware_local
string
=
`
F
:\software\softlike\`
const
Dir_ADsoftware_local
string
=
`
H
:\software\softlike\`
const
Dir_dept_share
string
=
"办公室部门内部共享"
const
Dir_dept_share
string
=
"办公室部门内部共享"
var
Dir_dept_share_full
string
=
Reg_Value_WeDriveDir
+
`\`
+
Dir_dept_share
var
Dir_dept_share_full
string
=
Reg_Value_WeDriveDir
+
`\`
+
Dir_dept_share
const
Dir_DCSave
string
=
`D:\DomainUserBackupV2`
const
Dir_DCSave
string
=
`D:\DomainUserBackupV2`
var
Dir_WeDrive
=
[
2
]
string
{
Dir_appdata
+
`\Tencent\WXWork\Data`
,
Dir_userprofile
+
`\Documents\WXWork`
}
var
Dir_WeDrive
=
[
2
]
string
{
Dir_appdata
+
`\Tencent\WXWork\Data`
,
Dir_userprofile
+
`\Documents\WXWork`
}
var
Dir_Be
=
[]
string
{
Dir_DocuBase
}
var
Dir_Be
=
[]
string
{
Dir_DocuBase
}
var
Dir_Sync_Config
string
=
Dir_appdata
+
`\Sync App Settings\_SYNCAPP\`
var
Dir_Sync_Config
string
=
Dir_appdata
+
`\Sync App Settings\_SYNCAPP\`
var
Dir_AD_log
string
=
`H:\logs\`
// Local File //
// Local File //
...
@@ -73,7 +73,7 @@ const App_Sync_dir string = `C:\Progra~1\zhiwei\AllWay_Sync\Bin\syncappw.exe
...
@@ -73,7 +73,7 @@ const App_Sync_dir string = `C:\Progra~1\zhiwei\AllWay_Sync\Bin\syncappw.exe
// backup //
// backup //
var
Bak_Version
string
=
"07
09
"
var
Bak_Version
string
=
"07
10
"
// reg info //
// reg info //
...
@@ -87,6 +87,7 @@ const Reg_Root_ac int = HKLM
...
@@ -87,6 +87,7 @@ const Reg_Root_ac int = HKLM
const
Reg_Root_dc
int
=
HKCU
const
Reg_Root_dc
int
=
HKCU
const
Reg_Path_home
string
=
`SOFTWARE\ADControl`
const
Reg_Path_home
string
=
`SOFTWARE\ADControl`
const
Reg_Path_home_ac
string
=
Reg_Path_home
+
`\DomainComputer\`
// use for adserver,not for dc
const
Reg_Path_home_ac
string
=
Reg_Path_home
+
`\DomainComputer\`
// use for adserver,not for dc
const
Reg_Path_home_du
string
=
Reg_Path_home
+
`\DomainUsers\`
// use for adserver,not for dc
const
Reg_Name_TurnOnTime
string
=
"TurnOnTime"
const
Reg_Name_TurnOnTime
string
=
"TurnOnTime"
const
Reg_Name_TurnOffTime
string
=
"TurnOffTime"
const
Reg_Name_TurnOffTime
string
=
"TurnOffTime"
const
Reg_Name_LoginUserName
string
=
"loginUser"
const
Reg_Name_LoginUserName
string
=
"loginUser"
...
@@ -95,16 +96,18 @@ const Reg_Name_LogOffTime string = "LogOffTime"
...
@@ -95,16 +96,18 @@ const Reg_Name_LogOffTime string = "LogOffTime"
const
Reg_Name_BackupOverTime
string
=
"BackupOverTime"
const
Reg_Name_BackupOverTime
string
=
"BackupOverTime"
const
Reg_Name_WeDriveDir
string
=
"WeDriveDir"
const
Reg_Name_WeDriveDir
string
=
"WeDriveDir"
const
Reg_Name_MACaddress
string
=
"MACaddress"
const
Reg_Name_MACaddress
string
=
"MACaddress"
const
Reg_Name_MACAddress
string
=
"MACAddress"
const
Reg_Name_PrimaryUser
string
=
"PrimaryUser"
const
Reg_Name_PrimaryUser
string
=
"PrimaryUser"
const
Reg_Name_PowerStatus
string
=
"PowerStatus"
const
Reg_Name_PowerStatus
string
=
"PowerStatus"
const
Reg_Name_LogStatus
string
=
"LogStatus"
const
Reg_Name_LogStatus
string
=
"LogStatus"
const
Reg_Name_BackupVersion
string
=
"BackupVersion"
const
Reg_Name_BackupVersion
string
=
"BackupVersion"
const
Reg_Name_PrimayComputerName
string
=
"PrimayComputerName"
const
Reg_Name_BeWakedID
string
=
"BeWakedID"
// reg value //
// reg value //
var
Reg_Value_WeDriveDir
string
=
Reg_query_key_one
(
HKCU
,
Reg_Path_home
,
Reg_Name_WeDriveDir
)
var
Reg_Value_WeDriveDir
string
=
Reg_query_key_one
(
HKCU
,
Reg_Path_home
,
Reg_Name_WeDriveDir
)
var
Reg_Value_
PowerStatus_ON
string
=
"ON"
var
Reg_Value_
ON
string
=
"ON"
var
Reg_Value_
PowerStatus_OFF
string
=
"OFF"
var
Reg_Value_
OFF
string
=
"OFF"
var
Reg_Value_LogStatus_IN
string
=
"IN"
var
Reg_Value_LogStatus_IN
string
=
"IN"
var
Reg_Value_LogStatus_OUT
string
=
"OUT"
var
Reg_Value_LogStatus_OUT
string
=
"OUT"
...
@@ -116,3 +119,14 @@ const Cmd_k string = "cmd /k "
...
@@ -116,3 +119,14 @@ const Cmd_k string = "cmd /k "
const
Cmd_K_Start
string
=
"cmd /k start "
const
Cmd_K_Start
string
=
"cmd /k start "
var
CopyStatusWeDrive
map
[
string
]
bool
var
CopyStatusWeDrive
map
[
string
]
bool
// wxwork key //
const
WXTokenMsgSend
string
=
"AvAQlFNxy1UQB3CjRml3GfKf7Y"
const
WxworkEncodingAseKey
string
=
"AwLPVXc1MxPmqo7dzw8CYbbWku0nZlDwWDVCSknqEFy"
const
WxworkReceiverId
string
=
"ww49cfd580625083c9"
const
WxworkCorid
string
=
"ww49cfd580625083c9"
const
WxworkCorpSecret
string
=
"ckANI7SsRh0v_zu2uN7gitRHvTwqRAh8oG1a20xJo_I"
// wxwork answaer //
const
WXRec_WakeSuccess
string
=
"主机已启动!"
\ No newline at end of file
public/error.go
View file @
46ab9836
...
@@ -2,15 +2,27 @@ package public
...
@@ -2,15 +2,27 @@ package public
import
(
import
(
"errors"
"errors"
)
)
var
Error_NullCommand
=
errors
.
New
(
"NULL COMMAND "
)
var
Error_Lost_Parameter
=
errors
.
New
(
"Lost Paramter"
)
var
Error_NullRegQuery
=
errors
.
New
(
"Null Reg Query"
)
var
Error_Null_Command
=
errors
.
New
(
"NULL COMMAND"
)
var
Error_Null_RegQuery
=
errors
.
New
(
"Null Reg Query"
)
var
Error_Null_Folder_WeDrive
=
errors
.
New
(
"Not Find Folder WxDrive "
)
var
Error_Null_Folder_WeDrive
=
errors
.
New
(
"Not Find Folder WxDrive "
)
var
Error_Null_App_Sync
=
errors
.
New
(
"Not Find Application AllWay Sync"
)
var
Error_Null_App_Sync
=
errors
.
New
(
"Not Find Application AllWay Sync"
)
var
Error_Null_File
=
errors
.
New
(
"Not Find File"
)
var
Error_Null_File
=
errors
.
New
(
"Not Find File"
)
var
Error_Null_Folder
=
errors
.
New
(
"Not File Folder"
)
var
Error_Null_Folder
=
errors
.
New
(
"Not File Folder"
)
var
Error_Null_Icon_File
=
errors
.
New
(
"Not File Icon File"
)
var
Error_Null_Icon_File
=
errors
.
New
(
"Not File Icon File"
)
var
Error_Fail_File_Open
=
errors
.
New
(
"Fail File Open"
)
var
Error_Fail_File_Open
=
errors
.
New
(
"Fail File Open"
)
var
Error_Fail_Token
=
errors
.
New
(
"Get Token Fail"
)
var
Error_Fail_File_Write
=
errors
.
New
(
"Fail File Write"
)
var
Error_Fail_File_Write
=
errors
.
New
(
"Fail File Write"
)
var
Error_Fail_TCP_STR
=
"ERROR"
var
Error_Not_Msg
=
errors
.
New
(
"isn't defined msg"
)
var
Error_Not_Msg
=
errors
.
New
(
"isn't defined msg"
)
var
Error_WXWork_Down
=
errors
.
New
(
Error_WXWork_Down_STR
)
var
Error_WXWork_Down_STR
=
"后台错误"
func
NewError
(
s
string
)
error
{
return
errors
.
New
(
s
)
}
\ No newline at end of file
public/msg_deal.go
View file @
46ab9836
...
@@ -6,6 +6,7 @@ package public
...
@@ -6,6 +6,7 @@ package public
//
//
func
DealMsgEnter
(
ip
string
,
msgtype
string
,
unmsg
[]
byte
)
[]
byte
{
func
DealMsgEnter
(
ip
string
,
msgtype
string
,
unmsg
[]
byte
)
[]
byte
{
var
ret
interface
{}
var
ret
interface
{}
switch
msgtype
{
switch
msgtype
{
// 报告 消息
// 报告 消息
...
@@ -43,12 +44,17 @@ func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte {
...
@@ -43,12 +44,17 @@ func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte {
ParseJsonBody
(
unmsg
,
&
pmsg
)
ParseJsonBody
(
unmsg
,
&
pmsg
)
ret
=
pmsg
.
Msg_Deal
()
ret
=
pmsg
.
Msg_Deal
()
return
nil
return
nil
case
Msg_Wxwork
:
var
pmsg
MJwxwork
ParseJsonBody
(
unmsg
,
&
pmsg
)
ret
=
pmsg
.
Msg_Deal
()
}
}
return
JsonToByte
(
&
ret
)
return
JsonToByte
(
&
ret
)
}
}
//
//
//
//
// 具体消息实现
// 具体消息实现
...
@@ -93,46 +99,55 @@ func (rep *MJreport)Msg_Deal() interface{} {
...
@@ -93,46 +99,55 @@ func (rep *MJreport)Msg_Deal() interface{} {
return
GJbackup
()
return
GJbackup
()
case
Msg_Report_OverBak
:
case
Msg_Report_OverBak
:
rep
.
Reg_Write_AC
(
Reg_Name_BackupOverTime
,
UnixTimeParse
(
&
rep
.
Timestamp
))
rep
.
Reg_Write_A
DD
C
(
Reg_Name_BackupOverTime
,
UnixTimeParse
(
&
rep
.
Timestamp
))
rep
.
Pskill
(
App_Sync
)
rep
.
Pskill
(
App_Sync
)
SysMsgBox
(
rep
.
Computername
,
`备份完成,即将关机,如需取消关机,运行Z:\tools\【工具】取消关机.bat或在小工具-电源管理-取消自动关机`
)
SysMsgBox
(
rep
.
Computername
,
`备份完成,即将关机,如需取消关机,运行Z:\tools\【工具】取消关机.bat或在小工具-电源管理-取消自动关机`
)
return
GJexecAck
(
Msg_Exec_TurnOffPC
)
return
GJexecAck
(
Msg_Exec_TurnOffPC
)
case
Msg_Report_WillTurnOffPC
:
case
Msg_Report_WillTurnOffPC
:
rep
.
Reg_Write_AC
(
rep
.
Reg_Write_A
DD
C
(
Reg_Name_TurnOffTime
,
Reg_Name_TurnOffTime
,
UnixTimeParse
(
&
rep
.
Timestamp
))
UnixTimeParse
(
&
rep
.
Timestamp
))
rep
.
Reg_Write_AC
(
rep
.
Reg_Write_A
DD
C
(
Reg_Name_PowerStatus
,
Reg_Name_PowerStatus
,
Reg_Value_
PowerStatus_
OFF
)
Reg_Value_OFF
)
case
Msg_Report_WillTurnOnPC
:
case
Msg_Report_WillTurnOnPC
:
rep
.
Reg_Write_AC
(
// 如果是被开机唤醒o
id
:=
rep
.
Reg_Query_ADDC
(
Reg_Name_BeWakedID
)
if
id
!=
""
{
SendWxworkTextToAUser
(
id
,
WXRec_WakeSuccess
)
rep
.
Reg_Write_ADDC
(
Reg_Name_BeWakedID
,
""
)
}
// 记录 开机 时间
rep
.
Reg_Write_ADDC
(
Reg_Name_TurnOnTime
,
Reg_Name_TurnOnTime
,
UnixTimeParse
(
&
rep
.
Timestamp
))
UnixTimeParse
(
&
rep
.
Timestamp
))
rep
.
Reg_Write_AC
(
//记录 电源状态
rep
.
Reg_Write_ADDC
(
Reg_Name_PowerStatus
,
Reg_Name_PowerStatus
,
Reg_Value_
PowerStatus_
ON
)
Reg_Value_ON
)
case
Msg_Report_WillLogInUser
:
case
Msg_Report_WillLogInUser
:
rep
.
Reg_Write_AC
(
rep
.
Reg_Write_A
DD
C
(
Reg_Name_LoginUserName
,
Reg_Name_LoginUserName
,
rep
.
Username
)
rep
.
Username
)
rep
.
Reg_Write_AC
(
rep
.
Reg_Write_A
DD
C
(
Reg_Name_LoginTime
,
Reg_Name_LoginTime
,
UnixTimeParse
(
&
rep
.
Timestamp
))
UnixTimeParse
(
&
rep
.
Timestamp
))
rep
.
Reg_Write_AC
(
rep
.
Reg_Write_A
DD
C
(
Reg_Name_LogStatus
,
Reg_Name_LogStatus
,
Reg_Value_LogStatus_IN
)
Reg_Value_LogStatus_IN
)
case
Msg_Report_WillLogOutUser
:
case
Msg_Report_WillLogOutUser
:
rep
.
Reg_Write_AC
(
rep
.
Reg_Write_A
DD
C
(
Reg_Name_LoginUserName
,
Reg_Name_LoginUserName
,
rep
.
Username
)
rep
.
Username
)
rep
.
Reg_Write_AC
(
rep
.
Reg_Write_A
DD
C
(
Reg_Name_LogOffTime
,
Reg_Name_LogOffTime
,
UnixTimeParse
(
&
rep
.
Timestamp
))
UnixTimeParse
(
&
rep
.
Timestamp
))
rep
.
Reg_Write_AC
(
rep
.
Reg_Write_A
DD
C
(
Reg_Name_LogStatus
,
Reg_Name_LogStatus
,
Reg_Value_LogStatus_OUT
)
Reg_Value_LogStatus_OUT
)
...
@@ -330,3 +345,47 @@ func (err * MJerror)Msg_Deal() interface{}{
...
@@ -330,3 +345,47 @@ func (err * MJerror)Msg_Deal() interface{}{
//SendWX(err.Instruction)
//SendWX(err.Instruction)
return
nil
return
nil
}
}
// 关于 wxwork 企业微信 的 消息处理
func
(
wxwork
*
MJwxwork
)
Msg_Deal
()
interface
{}{
switch
(
wxwork
.
Instruction
){
case
Msg_Wxwork_UserWake
:
// 在注册表中查询记录
pc
:=
wxwork
.
Reg_Query_ADUsers
(
Reg_Name_PrimayComputerName
)
mac
:=
wxwork
.
Reg_Query_ADUsers
(
Reg_Name_MACAddress
)
if
pc
==
""
||
mac
==
""
{
wxwork
.
Text
=
"如果你不是情报部门,那么暂时还不支持该功能"
return
wxwork
}
// 查看电源状态
status
,
err
:=
PSTest_Connection
(
pc
)
PrintLog
(
pc
,
mac
,
wxwork
.
Name
,
Msg_Wxwork_UserWake
,
status
)
if
err
!=
nil
{
wxwork
.
Text
=
Error_WXWork_Down_STR
return
wxwork
}
if
status
{
wxwork
.
Text
=
"已经开机了哦~"
return
wxwork
}
// 写入被唤醒的ID用于判断是否是被企业微信唤醒
Reg_Write_ADDC
(
pc
,
Reg_Name_BeWakedID
,
wxwork
.
UserID
)
// 由于不能在5秒内回复消息,需要使用go关键词
go
Wol
(
mac
)
wxwork
.
Text
=
"开始唤醒,请等待~"
default
:
wxwork
.
Text
=
""
}
return
wxwork
}
public/msg_init.go
View file @
46ab9836
package
public
package
public
//
//
// msg env ////////////////////////////////////////////////////////////////
// msg env ////////////////////////////////////////////////////////////////
//
const
EndSign
byte
=
125
const
EndSign
byte
=
125
const
msgerror
string
=
"error"
const
msgerror
string
=
"error"
// msg type ////////////////////////////////////////////////////////////////
// msg type ////////////////////////////////////////////////////////////////
const
Msg_Report
string
=
"report"
const
Msg_Report
string
=
"report"
...
@@ -16,9 +15,12 @@ const Msg_Exec string = "exec"
...
@@ -16,9 +15,12 @@ const Msg_Exec string = "exec"
const
Msg_Backup
string
=
"backup"
const
Msg_Backup
string
=
"backup"
const
Msg_Reg
string
=
"reg"
const
Msg_Reg
string
=
"reg"
const
Msg_Error
string
=
"error"
const
Msg_Error
string
=
"error"
const
Msg_Wxwork
string
=
"wxwork"
// base word ////////////////////////////////////////////////////////////////
// base word ////////////////////////////////////////////////////////////////
const
LogInUser
string
=
"LogInUser"
const
LogInUser
string
=
"LogInUser"
const
LogOutUser
string
=
"LogOutUser"
const
LogOutUser
string
=
"LogOutUser"
const
WillLogInUser
string
=
"WillLogInUser"
const
WillLogInUser
string
=
"WillLogInUser"
...
@@ -28,6 +30,9 @@ const TurnOffPC string = "TurnOffPC"
...
@@ -28,6 +30,9 @@ const TurnOffPC string = "TurnOffPC"
const
WillTurnOnPC
string
=
"WillTurnOnPC"
const
WillTurnOnPC
string
=
"WillTurnOnPC"
const
WillTurnOffPC
string
=
"WillTurnOffPC"
const
WillTurnOffPC
string
=
"WillTurnOffPC"
// msg report type ///////////////////////////////////////////////////////////
// msg report type ///////////////////////////////////////////////////////////
const
Msg_Report_LoginInUser
string
=
LogInUser
const
Msg_Report_LoginInUser
string
=
LogInUser
...
@@ -44,12 +49,16 @@ const Msg_Report_StartBak string = "startbak"
...
@@ -44,12 +49,16 @@ const Msg_Report_StartBak string = "startbak"
const
Msg_Report_OverBak
string
=
"stopbak"
const
Msg_Report_OverBak
string
=
"stopbak"
const
Msg_Report_DCInfo
string
=
"DCInfo"
const
Msg_Report_DCInfo
string
=
"DCInfo"
// msg backup type //////////////////////////////////////////////////////////////
// msg backup type //////////////////////////////////////////////////////////////
const
Msg_Backup_Status_Start
string
=
"start"
const
Msg_Backup_Status_Start
string
=
"start"
const
Msg_Backup_Status_Continue
string
=
"Continue"
const
Msg_Backup_Status_Continue
string
=
"Continue"
const
Msg_Backup_Status_Run
string
=
"run"
const
Msg_Backup_Status_Run
string
=
"run"
// msg exec type ////////////////////////////////////////////////////////////////
// msg exec type ////////////////////////////////////////////////////////////////
const
(
const
(
...
@@ -73,7 +82,7 @@ const Msg_Exec_CopyWeDrive string = "copyWeDrive"
...
@@ -73,7 +82,7 @@ const Msg_Exec_CopyWeDrive string = "copyWeDrive"
const
Msg_Exec_CopyDeptShare
string
=
"copydeptshare"
const
Msg_Exec_CopyDeptShare
string
=
"copydeptshare"
const
Msg_Exec_GUIExec
string
=
"guiexec"
const
Msg_Exec_GUIExec
string
=
"guiexec"
const
Msg_Wxwork_UserWake
string
=
"UserWake"
//
//
const
(
const
(
Msg_Reg_Query
=
iota
Msg_Reg_Query
=
iota
...
@@ -131,6 +140,15 @@ type MJreg struct{
...
@@ -131,6 +140,15 @@ type MJreg struct{
type
MJerror
struct
{
type
MJerror
struct
{
MJbase
MJbase
}
}
type
MJwxwork
struct
{
MsgType
string
`json:"msgtype"`
UserID
string
`json:"userid"`
Name
string
`json:"name"`
Instruction
string
`json:"instruction"`
Text
string
`json:"text"`
}
...
@@ -140,6 +158,7 @@ type MJerror struct{
...
@@ -140,6 +158,7 @@ type MJerror struct{
//
//
// Report
// Report
func
GJreport
(
s
string
)
interface
{}{
func
GJreport
(
s
string
)
interface
{}{
...
@@ -153,14 +172,14 @@ func GJreport_DCInfo(s string) interface{}{
...
@@ -153,14 +172,14 @@ func GJreport_DCInfo(s string) interface{}{
rep
.
Explain
=
s
rep
.
Explain
=
s
return
rep
return
rep
}
}
func
(
rep
*
MJreport
)
Reg_Write_AC
(
key
,
value
string
){
func
(
rep
*
MJreport
)
Reg_Write_A
DD
C
(
key
,
value
string
){
Reg_Write_key_one
(
Reg_Write_key_one
(
Reg_Root_ac
,
Reg_Root_ac
,
Reg_Path_home_ac
+
rep
.
Computername
,
Reg_Path_home_ac
+
rep
.
Computername
,
key
,
key
,
value
)
value
)
}
}
func
(
rep
*
MJreport
)
Reg_Query_AC
(
key
string
)
string
{
func
(
rep
*
MJreport
)
Reg_Query_A
DD
C
(
key
string
)
string
{
return
Reg_query_key_one
(
return
Reg_query_key_one
(
Reg_Root_ac
,
Reg_Root_ac
,
Reg_Path_home_ac
+
rep
.
Computername
,
Reg_Path_home_ac
+
rep
.
Computername
,
...
@@ -233,10 +252,10 @@ func (exec * MJexec)init(s string){
...
@@ -233,10 +252,10 @@ func (exec * MJexec)init(s string){
exec
.
SessionID
=
User_sessionID
exec
.
SessionID
=
User_sessionID
exec
.
Cmder
=
Msg_Exec_Cmder_LocalDaemon
exec
.
Cmder
=
Msg_Exec_Cmder_LocalDaemon
exec
.
Status
=
Msg_Exec_State_Request
exec
.
Status
=
Msg_Exec_State_Request
exec
.
Timestamp
=
NowTimestamp
()
}
}
// Backup
// Backup
func
GJbackup
()
interface
{}{
func
GJbackup
()
interface
{}{
...
@@ -252,6 +271,7 @@ func (bak * MJbackup)init() {
...
@@ -252,6 +271,7 @@ func (bak * MJbackup)init() {
}
}
// error
// error
func
GJerror
(
e
error
)
interface
{}{
func
GJerror
(
e
error
)
interface
{}{
...
@@ -267,3 +287,25 @@ func (err * MJerror)init (e error){
...
@@ -267,3 +287,25 @@ func (err * MJerror)init (e error){
err
.
MsgType
=
Msg_Error
err
.
MsgType
=
Msg_Error
err
.
Instruction
=
e
.
Error
()
err
.
Instruction
=
e
.
Error
()
}
}
func
GJwxworkText
(
name
,
userid
,
text
*
string
,
instruction
string
)
interface
{}{
var
wxwork
MJwxwork
wxwork
.
MsgType
=
Msg_Wxwork
wxwork
.
Name
=
*
name
wxwork
.
UserID
=
*
userid
wxwork
.
Text
=
*
text
wxwork
.
Instruction
=
instruction
return
wxwork
}
// wxwork
func
(
wxwork
*
MJwxwork
)
SendTextToAUser
()
error
{
return
SendWxworkTextToAUser
(
wxwork
.
UserID
,
wxwork
.
Text
)
}
func
(
wxwork
*
MJwxwork
)
Reg_Query_ADUsers
(
key
string
)
string
{
return
Reg_query_key_one
(
Reg_Root_ac
,
Reg_Path_home_du
+
wxwork
.
Name
,
key
)
}
\ No newline at end of file
public/print.go
View file @
46ab9836
...
@@ -2,10 +2,31 @@ package public
...
@@ -2,10 +2,31 @@ package public
import
(
import
(
"log"
"log"
"os"
"os"
"fmt"
)
)
var
Loger
*
log
.
Logger
var
Loger
*
log
.
Logger
func
NewLoger
(
s
string
)
*
log
.
Logger
{
var
Log_file_obj
*
os
.
File
var
err
error
if
Log_file_obj
,
err
=
os
.
OpenFile
(
s
,
os
.
O_RDWR
|
os
.
O_CREATE
|
os
.
O_APPEND
,
0766
);
err
!=
nil
&&
DomainComputer
(){
SendServerErrorf
(
"%s %v-%v"
,
s
,
Error_Fail_File_Open
,
err
)
}
return
log
.
New
(
Log_file_obj
,
""
,
log
.
LstdFlags
)
}
func
Sprintf
(
f
string
,
v
...
interface
{})
string
{
return
fmt
.
Sprintf
(
f
,
v
...
)
}
//
//
// Print Type
//
func
PrintLog
(
v
...
interface
{}){
func
PrintLog
(
v
...
interface
{}){
log
.
SetPrefix
(
"Output "
)
log
.
SetPrefix
(
"Output "
)
log
.
Println
(
v
...
)
log
.
Println
(
v
...
)
...
@@ -60,13 +81,25 @@ func PntSend(v ...interface{}){
...
@@ -60,13 +81,25 @@ func PntSend(v ...interface{}){
Loger
.
SetPrefix
(
"Send "
)
Loger
.
SetPrefix
(
"Send "
)
Loger
.
Println
(
v
...
)
Loger
.
Println
(
v
...
)
}
}
func
NewLoger
(
s
string
)
*
log
.
Logger
{
func
PrintPrefix
(
s
string
,
v
...
interface
{}){
var
Log_file_obj
*
os
.
File
Loger
.
SetPrefix
(
s
)
var
err
error
PrintLog
(
v
...
)
if
Log_file_obj
,
err
=
os
.
OpenFile
(
Loger
.
Println
(
v
...
)
s
,
os
.
O_RDWR
|
os
.
O_CREATE
|
os
.
O_APPEND
,
0766
);
}
err
!=
nil
&&
DomainComputer
(){
SendServerErrorf
(
"%s %v-%v"
,
s
,
Error_Fail_File_Open
,
err
)
}
func
PntWxwork
(
v
...
interface
{}){
return
log
.
New
(
Log_file_obj
,
""
,
log
.
LstdFlags
)
Loger
.
SetPrefix
(
"WXWORK"
)
PrintLog
(
v
...
)
Loger
.
Println
(
v
...
)
}
func
PntWxworkf
(
f
string
,
v
...
interface
{}){
Loger
.
SetPrefix
(
"WXWORK"
)
log
.
Printf
(
f
,
v
...
)
Loger
.
Printf
(
f
,
v
...
)
}
func
PntWxSendMsgText
(
v
...
interface
{}){
Loger
.
SetPrefix
(
"WxSendMsgText"
)
PrintLog
(
v
...
)
Loger
.
Println
(
v
...
)
}
}
public/public.go
View file @
46ab9836
...
@@ -11,21 +11,20 @@ import (
...
@@ -11,21 +11,20 @@ import (
// 获取 环境变量
// 获取 环境变量
// 如果空 输出错误
// 如果空 输出错误
// 获取 消息
内容
// 获取 消息
类型
func
ParseJsonHead
(
b
[]
byte
)
string
{
func
GetMsgType
(
b
[]
byte
)
string
{
//{"msgtype":"report","
msgstate":"","username":"zhiweiadserver","computername":"ADSERVER","report":"下班
"}
//{"msgtype":"report","
...":"...
"}
// 提取第一个冒号后的第二位和第一个逗号的前一位
// 提取第一个冒号后的第二位和第一个逗号的前一位
// 也就是msgtype的内容
// 也就是msgtype的内容
msgtype
:=
b
[
bytes
.
IndexByte
(
b
,
':'
)
+
2
:
bytes
.
IndexByte
(
b
,
','
)
-
1
]
return
string
(
b
[
bytes
.
IndexByte
(
b
,
':'
)
+
2
:
bytes
.
IndexByte
(
b
,
','
)
-
1
])
return
string
(
msgtype
)
}
}
// 解析Json 并放到变量中
// 解析Json 并放到变量中
func
ParseJsonBody
(
unmsg
[]
byte
,
v
interface
{}){
func
ParseJsonBody
(
unmsg
[]
byte
,
v
interface
{}){
// 填写
// 填写
if
err
:=
json
.
Unmarshal
(
unmsg
,
v
)
;
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
unmsg
,
v
)
;
err
!=
nil
{
PntError
(
"Parse Json Error "
,
err
)
PntError
(
"Parse Json Error"
,
err
)
PntError
(
"Parse Json Error"
,
string
(
unmsg
))
}
}
}
}
...
@@ -170,3 +169,21 @@ func GetWeDriveVersion() (int,string,error) {
...
@@ -170,3 +169,21 @@ func GetWeDriveVersion() (int,string,error) {
return
1
,
"233"
,
Error_Null_Folder_WeDrive
return
1
,
"233"
,
Error_Null_Folder_WeDrive
}
}
}
}
func
GetWXWorkToken
()
(
string
,
error
)
{
link
:=
Sprintf
(
"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s"
,
WxworkCorid
,
WxworkCorpSecret
)
data
,
err
:=
SendGetRequest
(
&
link
)
if
err
!=
nil
{
return
""
,
err
}
var
wt
WxToken
ParseJsonBody
(
data
,
&
wt
)
if
wt
.
Errcode
==
0
{
return
wt
.
Access_token
,
nil
}
else
{
PntError
(
err
)
return
""
,
Error_Fail_File_Write
}
}
\ No newline at end of file
public/send.go
View file @
46ab9836
...
@@ -4,77 +4,103 @@ import (
...
@@ -4,77 +4,103 @@ import (
"encoding/json"
"encoding/json"
"net"
"net"
"net/http"
"net/http"
"io"
"io
/ioutil
"
"bytes"
"bytes"
"bufio"
"bufio"
"io"
"fmt"
"fmt"
)
)
func
SendDaemon
(
v
interface
{})[]
byte
{
return
SendMsg
(
LocalDaemon
,
v
)
}
func
SendDaemonExec
(
s
string
){
func
SendServerReport
(
s
string
)([]
byte
,
error
){
SendDaemon
(
GJexecUserCmd
(
s
))
}
func
SendServerReport
(
s
string
)[]
byte
{
return
SendServer
(
GJreport
(
s
))
return
SendServer
(
GJreport
(
s
))
}
}
func
SendServerDCInfo
(
s
string
)
[]
byte
{
func
SendServerDCInfo
(
s
string
)
([]
byte
,
error
)
{
return
SendServer
(
GJreport_DCInfo
(
s
))
return
SendServer
(
GJreport_DCInfo
(
s
))
}
}
func
SendServerExec
(
s
string
)
[]
byte
{
func
SendServerExec
(
s
string
)
([]
byte
,
error
)
{
return
SendServer
(
GJexec
(
s
))
return
SendServer
(
GJexec
(
s
))
}
}
func
SendServerGUIExec
(
s
string
){
func
SendServerGUIExec
(
s
string
){
SendServer
(
GJexecGUI
(
s
))
SendServer
(
GJexecGUI
(
s
))
}
}
func
SendServerError
(
err
error
)
[]
byte
{
func
SendServerError
(
err
error
)
([]
byte
,
error
)
{
return
SendServer
(
GJerror
(
err
))
return
SendServer
(
GJerror
(
err
))
}
}
func
SendServerErrorf
(
f
string
,
a
...
interface
{})
[]
byte
{
func
SendServerErrorf
(
f
string
,
a
...
interface
{})
([]
byte
,
error
)
{
return
SendServer
(
GJerror
(
fmt
.
Errorf
(
f
,
a
...
)))
return
SendServer
(
GJerror
(
fmt
.
Errorf
(
f
,
a
...
)))
}
}
// send to server
// send to server
func
SendServer
(
v
interface
{})
[]
byte
{
func
SendServer
(
v
interface
{})
([]
byte
,
error
)
{
if
Adserver
()
{
return
nil
}
//
if Adserver() {return nil}
return
SendMsg
(
ADServerDaemon
,
v
)
return
SendMsg
(
ADServerDaemon
,
v
)
}
}
// base
// base
func
SendMsg
(
you
string
,
v
interface
{})
[]
byte
{
func
SendMsg
(
you
string
,
v
interface
{})
([]
byte
,
error
)
{
textbyte
,
err
:=
json
.
Marshal
(
v
)
textbyte
,
err
:=
json
.
Marshal
(
v
)
if
err
!=
nil
{
if
err
!=
nil
{
PntError
(
"Json to String Error "
,
v
,
err
)
PntError
(
"Json to String Error "
,
v
,
err
)
return
nil
,
err
}
}
conn
,
err
:=
net
.
Dial
(
"tcp"
,
you
)
conn
,
err
:=
net
.
Dial
(
"tcp"
,
you
)
if
err
!=
nil
{
if
err
!=
nil
{
PntError
(
"err = "
,
err
)
PntError
(
"err = "
,
err
)
return
nil
,
err
}
}
defer
conn
.
Close
()
PntSend
(
string
(
textbyte
))
//发送数据
//发送数据
conn
.
Write
(
textbyte
)
conn
.
Write
(
textbyte
)
PntSend
(
string
(
textbyte
))
bmsg
,
cerr
:=
bufio
.
NewReader
(
conn
)
.
ReadBytes
(
EndSign
)
var
rec
[]
byte
var
rec
[]
byte
if
cerr
!=
io
.
EOF
{
if
bmsg
,
cerr
:=
bufio
.
NewReader
(
conn
)
.
ReadBytes
(
EndSign
);
cerr
==
nil
||
cerr
==
io
.
EOF
{
// 获取ip
// 获取ip
ip
:=
GetConnIP
(
conn
.
RemoteAddr
())
ip
:=
GetConnIP
(
conn
.
RemoteAddr
())
// 获取消息类型
// 获取消息类型
msgtype
:=
ParseJsonHead
(
bmsg
)
msgtype
:=
GetMsgType
(
bmsg
)
// 处理消息
// 处理消息
rec
=
DealMsgEnter
(
ip
,
msgtype
,
bmsg
)
rec
=
DealMsgEnter
(
ip
,
msgtype
,
bmsg
)
// 写入连接
//conn.Write(rec)
}
else
{
PntError
(
"Conn Read Error"
,
cerr
)
}
}
if
err
:=
conn
.
Close
();
err
!=
nil
{
PntError
(
"Conn Close "
,
err
)
return
rec
,
nil
}
// 发送Get请求
func
SendGetRequest
(
link
*
string
)
([]
byte
,
error
){
resp
,
err
:=
http
.
Get
(
*
link
)
if
err
!=
nil
{
return
nil
,
err
}
}
return
rec
defer
resp
.
Body
.
Close
()
body
,
err
:=
ioutil
.
ReadAll
(
resp
.
Body
)
return
body
,
err
}
}
// 发送 带Data的Post请求
func
SendPostRequestWithData
(
link
*
string
,
data
interface
{})
([]
byte
,
error
){
resp
,
err
:=
http
.
Post
(
*
link
,
"application/json; charset=utf-8"
,
bytes
.
NewReader
(
JsonToByte
(
data
)))
if
err
!=
nil
{
return
nil
,
err
}
defer
resp
.
Body
.
Close
()
body
,
err
:=
ioutil
.
ReadAll
(
resp
.
Body
)
return
body
,
err
}
// 发送 到 微信机器人
// 发送 到 微信机器人
func
SendWX
(
Content
string
){
func
SendWX
(
Content
string
){
...
@@ -91,3 +117,35 @@ func SendWX(Content string){
...
@@ -91,3 +117,35 @@ func SendWX(Content string){
}`
)
}`
)
http
.
Post
(
Link_WxworkBot
,
"application/json; charset=utf-8"
,
bytes
.
NewBuffer
(
w
))
http
.
Post
(
Link_WxworkBot
,
"application/json; charset=utf-8"
,
bytes
.
NewBuffer
(
w
))
}
}
func
SendWxworkTextToAUser
(
id
,
text
string
)
error
{
PntWxSendMsgText
(
id
,
text
)
// 获取 最新 token
t
,
err
:=
GetWXWorkToken
()
if
err
!=
nil
{
return
err
}
// 初始化 消息推送 结构体
var
wsmt
WxSendMsgText
wsmt
.
Init
()
wsmt
.
Touser
=
id
wsmt
.
Text
.
Content
=
text
link
:=
Sprintf
(
"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s"
,
t
)
// 发送 Post 请求
res
,
err
:=
SendPostRequestWithData
(
&
link
,
&
wsmt
)
if
err
!=
nil
{
return
err
}
// 解析 Post 响应 数据
var
wsmr
WxSendMsgRec
ParseJsonBody
(
res
,
&
wsmr
)
if
wsmr
.
ErrCode
!=
0
{
return
NewError
(
wsmr
.
ErrMsg
)
}
return
nil
}
public/win.go
View file @
46ab9836
...
@@ -46,7 +46,7 @@ func GetEnvFqdn(s string)string{
...
@@ -46,7 +46,7 @@ func GetEnvFqdn(s string)string{
func
execcmd_base
(
cmdargs
string
)
(
string
,[]
string
,
error
){
func
execcmd_base
(
cmdargs
string
)
(
string
,[]
string
,
error
){
if
cmdargs
==
""
{
if
cmdargs
==
""
{
return
""
,
nil
,
Error_NullCommand
return
""
,
nil
,
Error_Null
_
Command
}
}
var
app
string
var
app
string
...
@@ -128,6 +128,26 @@ func Execcmd_nowait_noargs(app string){
...
@@ -128,6 +128,26 @@ func Execcmd_nowait_noargs(app string){
}
}
//
//
// PowerShell
//
func
PSTest_Connection
(
host
string
)
(
bool
,
error
)
{
if
host
==
""
{
return
false
,
Error_Lost_Parameter
}
t
,
err
:=
exec
.
Command
(
"powershell"
,
"-command"
,
"Test-Connection"
,
host
,
"-quiet"
)
.
Output
()
if
err
!=
nil
{
return
false
,
err
}
switch
string
(
t
[
:
len
(
t
)
-
2
])
{
case
"True"
:
return
true
,
nil
default
:
return
false
,
nil
}
}
//
//
//
//
// local
// local
...
@@ -266,7 +286,7 @@ func Reg_Write_key_one(root int, path, name, value string) {
...
@@ -266,7 +286,7 @@ func Reg_Write_key_one(root int, path, name, value string) {
// reg func for domain computer
// reg func for domain computer
//
//
func
Reg_Write_DC
(
key
,
value
string
){
func
Reg_Write_DC
(
key
,
value
string
){
Reg_Write_key_one
(
Reg_Write_key_one
(
Reg_Root_dc
,
Reg_Root_dc
,
Reg_Path_home
,
Reg_Path_home
,
...
@@ -286,13 +306,25 @@ func Reg_Query_DC(key string) string {
...
@@ -286,13 +306,25 @@ func Reg_Query_DC(key string) string {
// reg func for AD
// reg func for AD
//
//
func
Reg_Query_A
C_D
C
(
pc
,
key
string
)
string
{
func
Reg_Query_A
DP
C
(
pc
,
key
string
)
string
{
return
Reg_query_key_one
(
return
Reg_query_key_one
(
Reg_Root_ac
,
Reg_Root_ac
,
Reg_Path_home_ac
+
pc
,
Reg_Path_home_ac
+
pc
,
key
)
key
)
}
}
func
Reg_Write_ADDC
(
pc
,
key
,
value
string
){
Reg_Write_key_one
(
Reg_Root_ac
,
Reg_Path_home_ac
+
pc
,
key
,
value
)
}
func
Reg_Query_ADUsers
(
name
,
key
string
)
string
{
return
Reg_query_key_one
(
Reg_Root_ac
,
Reg_Path_home_du
+
name
,
key
)
}
//
//
//
//
...
...
public/wxjson.go
0 → 100644
View file @
46ab9836
package
public
// JSON:token返回格式
// https://open.work.weixin.qq.com/api/doc/90000/90135/91039
type
WxToken
struct
{
Errcode
int
`json:"errcode"`
Errmsg
string
`json:"errmsg"`
Access_token
string
`json:"access_token"`
Expires_in
int
`json:"expires_in"`
}
type
WxSendMsgRec
struct
{
ErrCode
int
`json:"errcode"`
ErrMsg
string
`json:"errmsg"`
Invaliduser
string
`json:"invaliduser"`
Invalidparty
string
`json:"invalidparty"`
Invalidtag
string
`json:"invalidtag"`
}
// JSON:消息发送格式
// 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
{
Touser
string
`json:"touser"`
Toparty
string
`json:"toparty"`
Totag
string
`json:"totag"`
Msgtype
string
`json:"msgtype"`
Agentid
int
`json:"agentid"`
Text
WxSendMsgTextContent
`json:"text"`
Safe
int
`json:"safe"`
Enable_id_trans
int
`json:"enable_id_trans"`
Enable_duplicate_check
int
`json:"enable_duplicate_check"`
Duplicate_check_interval
int
`json:"duplicate_check_interval"`
}
type
WxSendMsgTextContent
struct
{
Content
string
`json:"content"`
}
func
(
wsmt
*
WxSendMsgText
)
Init
(){
wsmt
.
Msgtype
=
"text"
wsmt
.
Agentid
=
1000014
wsmt
.
Safe
=
0
wsmt
.
Enable_id_trans
=
0
wsmt
.
Enable_duplicate_check
=
0
wsmt
.
Duplicate_check_interval
=
1800
}
\ No newline at end of file
users/menu.go
View file @
46ab9836
...
@@ -387,7 +387,7 @@ func tUpdateATool(){
...
@@ -387,7 +387,7 @@ func tUpdateATool(){
}
}
// 其他工具 移动硬盘(胡一波专用)
// 其他工具 移动硬盘(胡一波专用)
func
t_movedisk_huyibo
(){
func
t_movedisk_huyibo
(){
pub
.
SendDaemonExec
(
`F:\SamsungPortableSSD.exe`
)
//
pub.SendDaemonExec(`F:\SamsungPortableSSD.exe`)
}
}
func
t_keyboard_xuwenqiang
(){
func
t_keyboard_xuwenqiang
(){
pub
.
SendServerGUIExec
(
`start C:\Users\Public\Desktop\Durgod_Zeus_Engine.lnk`
)
pub
.
SendServerGUIExec
(
`start C:\Users\Public\Desktop\Durgod_Zeus_Engine.lnk`
)
...
...
wxwork/json.go
0 → 100644
View file @
46ab9836
package
main
// 获取 同事个人信息的Json
// https://open.work.weixin.qq.com/api/doc/90000/90135/90196
type
wxJsonBricklayerInfo
struct
{
Errcode
int
`json:"errcode"`
Errmsg
string
`json:"errmsg"`
Userid
string
`json:"userid"`
Name
string
`json:"name"`
Department
[]
int
`json:"department"`
Order
[]
int
`json:"order"`
Position
string
`json:"position"`
Mobile
string
`json:"mobile"`
Gender
string
`json:"gender"`
Email
string
`json:"email"`
Is_leader_in_dept
[]
int
`json:"is_leader_in_dept"`
Avatar
string
`json:"avatar"`
Thumb_avatar
string
`json:"thumb_avatar"`
Telephone
string
`json:"telephone"`
Alias
string
`json:"alias"`
Address
string
`json:"address"`
Open_userid
string
`json:"open_userid"`
Main_department
int
`json:"main_department"`
Extattr
wxJsonBricklayerInfoExtattr
`json:"extattr"`
Status
int
`json:"status"`
Qr_code
string
`json:"qr_code"`
External_position
string
`json:"external_position"`
External_profile
wxJsonBricklayerInfoExtattr
`json:"external_profile"`
}
type
wxJsonBricklayerInfoExtattr
struct
{
Attrs
[]
wxJsonBricklayerInfoExtattrValue
`json:"attrs"`
}
type
wxJsonBricklayerInfoExtattrValue
struct
{
Type
int
`json:"type"`
Name
string
`json:"name"`
Text
wxJsonBricklayerInfoExtattrValueText
`json:"text"`
Web
wxJsonBricklayerInfoExtattrValueWeb
`json:"value"`
MiniProgram
wxJsonBricklayerInfoExtattrValueMinProgram
`json:"miniProgram"`
}
type
wxJsonBricklayerInfoExtattrValueText
struct
{
Value
string
`json:"value"`
}
type
wxJsonBricklayerInfoExtattrValueWeb
struct
{
Url
string
`json:"url"`
Title
string
`json:"title"`
}
type
wxJsonBricklayerInfoExtattrValueMinProgram
struct
{
Appid
string
`json:"appid"`
Pagepath
string
`json:"pagepath"`
Title
string
`json:"title"`
}
wxwork/wxwork.go
0 → 100644
View file @
46ab9836
package
main
import
(
pub
"AD-Control/public"
"net/http"
"encoding/xml"
"log"
"net/url"
"fmt"
"io/ioutil"
"wxbizmsgcrypt"
"time"
"strconv"
)
type
wxXml
struct
{
ToUsername
string
`xml:"ToUserName"`
FromUsername
string
`xml:"FromUserName"`
CreateTime
uint32
`xml:"CreateTime"`
MsgType
string
`xml:"MsgType"`
Content
string
`xml:"Content"`
Msgid
string
`xml:"MsgId"`
Agentid
uint32
`xml:"AgentId"`
}
func
main
(){
pub
.
Loger
=
pub
.
NewLoger
(
pub
.
Dir_AD_log
+
`wxwork.log`
)
pub
.
PrintLog
(
"Wxwrok Daemon Runing!"
)
http
.
HandleFunc
(
"/"
,
index
)
log
.
Println
(
http
.
ListenAndServe
(
pub
.
WxwrokDaemon
,
nil
))
}
func
index
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
){
d
:=
r
.
URL
.
RawQuery
if
d
==
""
{
return
}
byteBody
,
err
:=
ioutil
.
ReadAll
(
r
.
Body
)
if
err
!=
nil
{
panic
(
err
)
}
// 开始处理HTML
go
readHtmlData
(
d
,
&
byteBody
)
// 立刻返回
fmt
.
Fprintf
(
w
,
""
)
}
func
readHtmlData
(
d
string
,
byteBody
*
[]
byte
)
string
{
// 建立 企业微信 加密方法
wxcpt
:=
wxbizmsgcrypt
.
NewWXBizMsgCrypt
(
pub
.
WXTokenMsgSend
,
pub
.
WxworkEncodingAseKey
,
pub
.
WxworkReceiverId
,
wxbizmsgcrypt
.
XmlType
)
// 解析 地址 参数
// ?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3×tamp=1409659589&nonce=263014780&echostr=P9nAzCzyDtyTWESHep1vC5X9xho%2FqYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp%2B4RPcs8TgAE7OaBO%2BFZXvnaqQ%3D%3D
m
,
_
:=
url
.
ParseQuery
(
d
)
// 验证消息
// res, cryptErr := wxcpt.VerifyURL(m["msg_signature"][0],m["timestamp"][0], m["nonce"][0],m["echostr"][0])
// if nil != cryptErr {
// PrintLog("verifyUrl fail", cryptErr)
// }
// PrintLog("verifyUrl success code:", string(res))
// fmt.Fprintf(w,string(res))
// return
// 解密html
msg
,
cryptErr
:=
wxcpt
.
DecryptMsg
(
m
[
"msg_signature"
][
0
],
m
[
"timestamp"
][
0
],
m
[
"nonce"
][
0
],
*
byteBody
)
if
nil
!=
cryptErr
{
pub
.
PntError
(
"DecryptMsg fail"
,
cryptErr
)
return
pub
.
Error_WXWork_Down_STR
}
// 解析具体消息
wxmsg
:=
ParseXML
(
&
msg
)
// 获取 查阅同事的token
wtBricklayer
,
err
:=
pub
.
GetWXWorkToken
()
if
err
!=
nil
{
pub
.
PntError
(
err
)
return
pub
.
Error_WXWork_Down_STR
}
// 查询 姓名
name
,
err
:=
GetBricklayerName
(
wtBricklayer
,
wxmsg
.
FromUsername
)
if
err
!=
nil
{
pub
.
PntError
(
err
)
return
pub
.
Error_WXWork_Down_STR
}
// 具体功能实现
//result := MsgDeal(&name,&wxmsg.FromUsername,&wxmsg.Content)
wxMsgDeal
(
&
name
,
&
wxmsg
.
FromUsername
,
&
wxmsg
.
Content
)
return
""
// // 建立 回复消息模板
// xml,t,nonce := wxmsg.createXML(result)
// // 加密消息
// cryptMsg, cryptErr := wxcpt.EncryptMsg(xml, t, nonce)
// if nil != cryptErr {
// PntError("DecryptMsg fail", cryptErr)
// return Error_WXWork_Down_STR
// }
// return string(cryptMsg)
}
func
wxMsgDeal
(
name
,
userid
,
text
*
string
)
string
{
var
result
[]
byte
var
err
error
var
wxwork
pub
.
MJwxwork
pub
.
PrintPrefix
(
"Listen "
,
*
name
,
*
text
)
switch
*
text
{
case
"芝麻开机"
:
pub
.
SendWxworkTextToAUser
(
*
userid
,
"收到,正在处理~"
)
result
,
err
=
pub
.
SendServer
(
pub
.
GJwxworkText
(
name
,
userid
,
text
,
pub
.
Msg_Wxwork_UserWake
))
//
default
:
pub
.
SendWxworkTextToAUser
(
*
userid
,
"emmmmmmmmm"
)
return
""
}
if
err
!=
nil
{
return
pub
.
Error_WXWork_Down_STR
}
pub
.
ParseJsonBody
(
result
,
&
wxwork
)
if
err
:=
wxwork
.
SendTextToAUser
();
err
!=
nil
{
pub
.
PntError
(
err
)
}
return
""
}
func
(
wxmsg
*
wxXml
)
createXML
(
res
string
)
(
string
,
string
,
string
)
{
t
:=
time
.
Now
()
nonce
:=
strconv
.
Itoa
(
t
.
Nanosecond
())
timestamp
:=
strconv
.
FormatInt
(
t
.
Unix
(),
10
)
wxmsg
.
Content
=
res
xml
,
err
:=
xml
.
Marshal
(
&
wxmsg
)
if
err
!=
nil
{
pub
.
PntError
(
err
)
}
return
string
(
xml
),
timestamp
,
nonce
}
func
ParseXML
(
unmsg
*
[]
byte
)
wxXml
{
var
msg
wxXml
if
nil
!=
xml
.
Unmarshal
(
*
unmsg
,
&
msg
)
{
pub
.
PntError
(
"Unmarshal fail"
)
}
return
msg
}
// 读取企业通讯录的成员信息
//官方说明:
// https://work.weixin.qq.com/api/doc/90000/90135/90196
func
GetBricklayerName
(
token
,
userid
string
)
(
string
,
error
)
{
link
:=
pub
.
Sprintf
(
"https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s"
,
token
,
userid
)
data
,
err
:=
pub
.
SendGetRequest
(
&
link
)
if
err
!=
nil
{
pub
.
PntError
(
err
)
return
""
,
pub
.
Error_WXWork_Down
}
var
bi
wxJsonBricklayerInfo
pub
.
ParseJsonBody
(
data
,
&
bi
)
if
bi
.
Errcode
!=
0
{
pub
.
PntError
(
bi
.
Errmsg
)
return
""
,
pub
.
Error_WXWork_Down
}
return
bi
.
Name
,
nil
}
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