Commit 850d3510 by 陶腾飞

v1.5.0 知微运维平台升级支持开机重启关机、支持批量百度搜索

parent 0a7cbf9e
...@@ -24,7 +24,6 @@ func main(){ ...@@ -24,7 +24,6 @@ func main(){
var backupText = flag.String( pub.Msg_Backup ,"" ,"backup status to AD") var backupText = flag.String( pub.Msg_Backup ,"" ,"backup status to AD")
var reportText = flag.String( pub.Msg_Report ,"" ,"report to AD") var reportText = flag.String( pub.Msg_Report ,"" ,"report to AD")
var execText = flag.String( pub.Msg_Exec ,"" ,"exec to LocalDaemon") var execText = flag.String( pub.Msg_Exec ,"" ,"exec to LocalDaemon")
var regText = flag.String( pub.Msg_Reg ,"" ,"mod reg")
//var userText = flag.String( "user" ,"" ,"who is running me") //var userText = flag.String( "user" ,"" ,"who is running me")
var passText = flag.String( "pass" ,"" ,"input passwork,but not need") var passText = flag.String( "pass" ,"" ,"input passwork,but not need")
var wolmacText = flag.String( "wolmac" ,"" ,"input mac address for wake pc") var wolmacText = flag.String( "wolmac" ,"" ,"input mac address for wake pc")
...@@ -38,7 +37,6 @@ func main(){ ...@@ -38,7 +37,6 @@ func main(){
if *reportText != "" { flag_report( reportText );return} if *reportText != "" { flag_report( reportText );return}
if *backupText != "" { flag_bakcup( backupText );return} if *backupText != "" { flag_bakcup( backupText );return}
if *execText != "" { flag_exec( execText );return} if *execText != "" { flag_exec( execText );return}
if *regText != "" { flag_reg( regText );return}
if *wolmacText != "" { flag_wolmac( wolmacText );return} if *wolmacText != "" { flag_wolmac( wolmacText );return}
if *woluserText != "" { flag_woluser( woluserText,passText);return} if *woluserText != "" { flag_woluser( woluserText,passText);return}
if *wolallText { flag_wolall( passText );return} if *wolallText { flag_wolall( passText );return}
...@@ -65,9 +63,6 @@ func flag_bakcup(s *string){ ...@@ -65,9 +63,6 @@ func flag_bakcup(s *string){
func flag_exec(s * string){ func flag_exec(s * string){
pub.SendServerExec(*s) pub.SendServerExec(*s)
} }
func flag_reg(s * string){
;
}
func flag_hour(){ func flag_hour(){
nh := pub.GetHour() nh := pub.GetHour()
switch nh{ switch nh{
......
...@@ -8,19 +8,19 @@ const DaemonListen string = ":" + DaemonPort ...@@ -8,19 +8,19 @@ const DaemonListen string = ":" + DaemonPort
const ADServerDaemon string = Host_adserver + DaemonListen const ADServerDaemon string = Host_adserver + DaemonListen
const WxwrokDaemon string = ":16823" const WxwrokDaemon string = ":16823"
const RandMax int = 60 const RandMax int = 60
const Version string = "1.4.0" const Version string = "1.5.0"
// user // // user //
var User_computername string = GetEnv("COMPUTERNAME") var User_computername string = GetEnv("COMPUTERNAME")
var User_homeshare string = GetEnv("HOMESHARE") var User_homeshare string = GetEnv("HOMESHARE")
var User_userdomain string = GetEnv("USERDOMAIN") var User_userdomain string = GetEnv("USERDOMAIN")
var User_name string = GetEnv("USERNAME") var User_name string = GetEnv("USERNAME")
var User_name_display string = GetEnvFqdn("CN") var User_name_display string = GetEnvFqdn("CN")
var User_dept string = GetEnv("DEPT") var User_dept string = GetEnv("DEPT")
var User_dept_desplay string = GetEnv("DEPTZH") var User_dept_desplay string = GetEnv("DEPTZH")
var User_sid string = Reg_query_key_one(HKCU,`Software\Microsoft\Windows\CurrentVersion\FileAssociations`,"UserSid") var User_sid string = Reg_query_key_one(HKCU,`Software\Microsoft\Windows\CurrentVersion\FileAssociations`,"UserSid")
var User_sessionID string = Reg_query_item_one(HKU,User_sid+`\Volatile Environment`) var User_sessionID string = Reg_query_item_one(HKU,User_sid+`\Volatile Environment`)
...@@ -39,8 +39,8 @@ const SMB_ADSoftPlusSync string = SMB_ADSoft + `plus\sync\` ...@@ -39,8 +39,8 @@ const SMB_ADSoftPlusSync string = SMB_ADSoft + `plus\sync\`
// Local Folder // // Local Folder //
var Dir_userprofile string = GetEnv("USERPROFILE") var Dir_userprofile string = GetEnv("USERPROFILE")
var Dir_appdata string = GetEnv("appdata") 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\`
...@@ -48,7 +48,7 @@ const Dir_ADsoftware_local string = `H:\software\softlike\` ...@@ -48,7 +48,7 @@ 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\` var Dir_AD_log string = `H:\logs\`
...@@ -68,7 +68,6 @@ const App_adct string = SMB_ADSoftApplication + "adct.exe" ...@@ -68,7 +68,6 @@ const App_adct string = SMB_ADSoftApplication + "adct.exe"
const App_MultiSplit string = SMB_ADSoftOthTool + "win_MultiSplit.exe" const App_MultiSplit string = SMB_ADSoftOthTool + "win_MultiSplit.exe"
const App_Sync string = `syncappw.exe` const App_Sync string = `syncappw.exe`
const App_Sync_dir string = `C:\Progra~1\zhiwei\AllWay_Sync\Bin\syncappw.exe` const App_Sync_dir string = `C:\Progra~1\zhiwei\AllWay_Sync\Bin\syncappw.exe`
//const App_MulitOpenPages string = SMB_ADOtherTool + "MultiOpenPages.bat"
// backup // // backup //
...@@ -83,10 +82,11 @@ const ( ...@@ -83,10 +82,11 @@ const (
HKLM HKLM
HKU HKU
) )
const Reg_Root_ac int = HKLM 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_Path_home_du string = Reg_Path_home + `\DomainUsers\` // use for adserver,not for dc
const Reg_Path_home_zhu string = Reg_Path_home + `\ZhiWeiUsers\` // use for adserver,not for dc const Reg_Path_home_zhu string = Reg_Path_home + `\ZhiWeiUsers\` // use for adserver,not for dc
const Reg_Name_TurnOnTime string = "TurnOnTime" const Reg_Name_TurnOnTime string = "TurnOnTime"
...@@ -104,8 +104,9 @@ const Reg_Name_LogStatus string = "LogStatus" ...@@ -104,8 +104,9 @@ 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_PrimayComputerName string = "PrimayComputerName"
const Reg_Name_BeWakedID string = "BeWakedID" 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_ON string = "ON" var Reg_Value_ON string = "ON"
var Reg_Value_OFF string = "OFF" var Reg_Value_OFF string = "OFF"
...@@ -118,16 +119,24 @@ var Reg_Value_LogStatus_OUT string = "OUT" ...@@ -118,16 +119,24 @@ var Reg_Value_LogStatus_OUT string = "OUT"
const Link_WxworkBot string = `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=59107f72-5b72-4a20-a33c-fdb1cd46f2c6` const Link_WxworkBot string = `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=59107f72-5b72-4a20-a33c-fdb1cd46f2c6`
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 "
var CopyStatusWeDrive map [string]bool
// wxwork key // // wxwork key //
const WXTokenMsgSend string ="AvAQlFNxy1UQB3CjRml3GfKf7Y"
const WxworkEncodingAseKey string = "AwLPVXc1MxPmqo7dzw8CYbbWku0nZlDwWDVCSknqEFy"
const WxworkReceiverId string = "ww49cfd580625083c9"
const WxworkCorid string = "ww49cfd580625083c9"
const WxworkCorpSecret string = "ckANI7SsRh0v_zu2uN7gitRHvTwqRAh8oG1a20xJo_I"
const WxworkTokenMsgSend string = "AvAQlFNxy1UQB3CjRml3GfKf7Y"
const WxworkEncodingAseKey string = "AwLPVXc1MxPmqo7dzw8CYbbWku0nZlDwWDVCSknqEFy"
const WxworkReceiverId string = "ww49cfd580625083c9"
const WxworkCorid string = "ww49cfd580625083c9"
const WxworkCorpSecret string = "ckANI7SsRh0v_zu2uN7gitRHvTwqRAh8oG1a20xJo_I"
const WxWorkAgentID string = "1000014"
// wxwork event key //
const WXEK_zwDevopsPowerWake string = "zwdevops_power_wake"
const WXEK_zwDevopsPowerTurnOFF string = "zwdevops_power_turnoff"
const WXEK_zwDevopsPowerReboot string = "zwdevops_power_reboot"
const WXEK_zwDevopsPowerStatus string = "zwdevops_power_status"
// wxwork answaer // // wxwork answaer //
const WXRec_WakeSuccess string = "主机已启动!" const WXRec_WakeSuccess string = "主机已启动,一切就绪~"
\ No newline at end of file \ No newline at end of file
...@@ -23,6 +23,8 @@ var Error_Not_Msg = errors.New("isn't defined msg") ...@@ -23,6 +23,8 @@ var Error_Not_Msg = errors.New("isn't defined msg")
var Error_WXWork_Down = errors.New(Error_WXWork_Down_STR) var Error_WXWork_Down = errors.New(Error_WXWork_Down_STR)
var Error_WXWork_Down_STR = "后台错误" var Error_WXWork_Down_STR = "后台错误"
var Error_WXWork_NotDominUser_STR = "您的主机暂时不支持该功能"
func NewError(s string) error{ func NewError(s string) error{
return errors.New(s) return errors.New(s)
} }
\ No newline at end of file
...@@ -118,12 +118,6 @@ func (rep *MJreport)Msg_Deal() interface{} { ...@@ -118,12 +118,6 @@ func (rep *MJreport)Msg_Deal() interface{} {
Reg_Name_LogStatus, Reg_Name_LogStatus,
Reg_Value_LogStatus_OUT) Reg_Value_LogStatus_OUT)
case Msg_Report_OverCopyToWeDrive:
go func() {
Delay(600)
CopyStatusWeDrive[rep.Dept] = true
}()
default: default:
PntOth("Default Report Json ",rep.Instruction) PntOth("Default Report Json ",rep.Instruction)
...@@ -173,11 +167,9 @@ func (exec *MJexec)Msg_Deal()interface{}{ ...@@ -173,11 +167,9 @@ func (exec *MJexec)Msg_Deal()interface{}{
case Msg_Exec_HideShowIcon: case Msg_Exec_HideShowIcon:
var hidetype string var hidetype string
if exec.DataBool { if exec.DataBool {
exec.Explain = "显示"
hidetype = "+"
}else{
exec.Explain = "隐藏"
hidetype = "-" hidetype = "-"
}else{
hidetype = "+"
} }
exec.Command = "attrib "+ hidetype+`h `+ exec.DataStr exec.Command = "attrib "+ hidetype+`h `+ exec.DataStr
exec.PsExec() exec.PsExec()
...@@ -296,61 +288,183 @@ func (bak * MJbackup)Msg_Deal() interface{}{ ...@@ -296,61 +288,183 @@ func (bak * MJbackup)Msg_Deal() interface{}{
func (wxwork * MJwxwork)Msg_Deal() interface{}{ func (wxwork * MJwxwork)Msg_Deal() interface{}{
switch (wxwork.Instruction){ switch wxwork.Instruction {
case Msg_Wxwork_UserWake: case Msg_Wxwork_UserWake:
var zhiweiuser bool var domainUser bool = true
// 在注册表中查询记录 var pc,mac string
pc := wxwork.Reg_Query_ADUsers(Reg_Name_PrimayComputerName) var err error
mac := wxwork.Reg_Query_ADUsers(Reg_Name_MACAddress)
if pc == "" || mac == ""{ // 在注册表中查询 域用户 记录
pc = wxwork.Reg_Query_ZhiWeiUsers(Reg_Name_PrimayComputerName) if err = Reg_IfExist_item(Reg_Root_ac,Reg_Path_home_du + wxwork.Name); err == nil{
mac = wxwork.Reg_Query_ZhiWeiUsers(Reg_Name_MACAddress) pc = wxwork.Reg_Query_ADUsers(Reg_Name_PrimayComputerName)
zhiweiuser = true mac = wxwork.Reg_Query_ADUsers(Reg_Name_MACAddress)
}
if pc == "" || mac == ""{ // 在注册表中查询 知微用户 记录
wxwork.Text ="如果你不是情报部门,那么暂时还不支持该功能" }else if err = Reg_IfExist_item(Reg_Root_ac,Reg_Path_home_zhu + wxwork.Name); err == nil{
return wxwork pc = wxwork.Reg_Query_ZhiWeiUsers(Reg_Name_PrimayComputerName)
mac = wxwork.Reg_Query_ZhiWeiUsers(Reg_Name_MACAddress)
domainUser = false
}else{
wxwork.Text = Error_WXWork_NotDominUser_STR
break
} }
// 查看电源状态 // 查看电源状态
status,err := PSTest_Connection(pc) status,err := PSTest_Connection(pc)
PrintLog(pc,mac,wxwork.Name,Msg_Wxwork_UserWake,status) PntWxwork(pc,mac,wxwork.Name,Msg_Wxwork_UserWake,status)
if err !=nil{ if err !=nil{
wxwork.Text = Error_WXWork_Down_STR wxwork.Text = Error_WXWork_Down_STR
return wxwork break
} }
if status { if status {
wxwork.Text = "已经开机了哦~" wxwork.Text = "已经开机了哦~"
return wxwork break
} }
// 只有域用户有效 // 只有域用户有效
// 写入被唤醒的ID用于判断是否是被企业微信唤醒 // 写入被唤醒的ID用于判断是否是被企业微信唤醒
if zhiweiuser{ if domainUser{
Reg_Write_ADDC(pc,Reg_Name_BeWakedID,wxwork.UserID) Reg_Write_ADDC(pc,Reg_Name_BeWakedID,wxwork.UserID)
go func(userid string){
for i:=0;i<10;i++{
Delay(30)
status,_ := PSTest_Connection(pc)
if status {
SendWxworkTextToAUser(userid,"主机已启动!")
return
}
}
}(wxwork.UserID)
} }
// 先回复,后唤醒 // 进行唤醒
go Wol(mac) go Wol(mac)
go func(userid string){
for i:=0;i<10;i++{
Delay(30)
status,_ := PSTest_Connection(pc)
if status {
SendWxworkTextToAUser(userid,"主机已启动!")
return
}
}
}(wxwork.UserID)
wxwork.Text = "开始唤醒,请等待~" wxwork.Text = "开始唤醒,请等待~"
default:
wxwork.Text = "" case Msg_Wxwork_Reboot:
}
// 检查是否是域用户
err := Reg_IfExist_item(Reg_Root_ac,Reg_Path_home_du + wxwork.Name)
if err !=nil{
wxwork.Text = Error_WXWork_NotDominUser_STR
break
}
// 检查注册表的主机 是否存在
pc := wxwork.Reg_Query_ADUsers(Reg_Name_PrimayComputerName)
if pc == ""{
wxwork.Text = Error_WXWork_Down_STR
break
}
// 检查 主机连接情况
status,err := PSTest_Connection(pc)
if err != nil{
wxwork.Text = Error_WXWork_Down_STR
break
}
if !status{
wxwork.Text = "主机已关机或无法连接主机"
break
}
Execcmd_wait(`shutdown -r -t 0 -m \\`+ pc)
Reg_Write_ADDC(pc,Reg_Name_BeWakedID,wxwork.UserID)
go func(name,userid string){
var rebooted bool = false
for i:=0;i<30;i++{
status,_ := PSTest_Connection(pc)
if !status {
rebooted = true
}
if status && rebooted {
SendWxworkTextToAUserWithName(name,userid,"重启完成~")
return
}
}
}(wxwork.Name,wxwork.UserID)
wxwork.Text = "开始重启,请等待~"
break
case Msg_Wxwork_TurnOFF:
// 检查是否是域用户
err := Reg_IfExist_item(Reg_Root_ac,Reg_Path_home_du + wxwork.Name)
if err !=nil{
wxwork.Text = Error_WXWork_NotDominUser_STR
break
}
// 检查注册表的主机 是否存在
pc := wxwork.Reg_Query_ADUsers(Reg_Name_PrimayComputerName)
if pc == ""{
wxwork.Text = Error_WXWork_Down_STR
break
}
// 检查 主机连接情况
status,err := PSTest_Connection(pc)
if err != nil{
wxwork.Text = Error_WXWork_Down_STR
break
}
if !status{
wxwork.Text = "主机已关机或无法连接主机"
break
}
Execcmd_wait(`shutdown -s -t 0 -m \\`+ pc)
Reg_Write_ADDC(pc,Reg_Name_BeWakedID,wxwork.UserID)
go func(name,userid string){
for i:=0;i<10;i++{
Delay(30)
status,_ := PSTest_Connection(pc)
if !status {
SendWxworkTextToAUserWithName(name,userid,"关机已完成~")
return
}
}
}(wxwork.Name,wxwork.UserID)
wxwork.Text = "开始关机,请等待~"
case Msg_Wxwork_Status:
var domainUser bool = true
var pc string
var err error
// 在注册表中查询 域用户 记录
if err = Reg_IfExist_item(Reg_Root_ac,Reg_Path_home_du + wxwork.Name); err == nil{
pc = wxwork.Reg_Query_ADUsers(Reg_Name_PrimayComputerName)
// 在注册表中查询 知微用户 记录
}else if err = Reg_IfExist_item(Reg_Root_ac,Reg_Path_home_zhu + wxwork.Name); err == nil{
pc = wxwork.Reg_Query_ZhiWeiUsers(Reg_Name_PrimayComputerName)
domainUser = false
}else{
wxwork.Text = Error_WXWork_NotDominUser_STR
break
}
// 检查 主机连接情况
status,err := PSTest_Connection(pc)
if err != nil{
wxwork.Text = Error_WXWork_Down_STR
break
}
if status{
wxwork.Text = "主机已启动"
}else if !status && !domainUser{
wxwork.Text = "主机已关闭或禁用了ICMP(请允许防火墙)"
} else {
wxwork.Text = "主机已关闭"
}
}
wxwork.Instruction = ""
return wxwork return wxwork
} }
......
...@@ -84,6 +84,9 @@ const Msg_Exec_HideShowIcon string = "HideShowIcon" ...@@ -84,6 +84,9 @@ const Msg_Exec_HideShowIcon string = "HideShowIcon"
// msg wxwork type //////////////////////////////////////////////////////////////// // msg wxwork type ////////////////////////////////////////////////////////////////
const Msg_Wxwork_UserWake string = "UserWake" const Msg_Wxwork_UserWake string = "UserWake"
const Msg_Wxwork_Reboot string = "Reboot"
const Msg_Wxwork_TurnOFF string = "TurnOFF"
const Msg_Wxwork_Status string = "Status"
// Registry Root // Registry Root
...@@ -263,13 +266,13 @@ func (err * MJerror)init (e error){ ...@@ -263,13 +266,13 @@ 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 {}{ func GJwxworkText(name, userid * string,instruction string )interface {}{
var wxwork MJwxwork var wxwork MJwxwork
wxwork.MsgType = Msg_Wxwork wxwork.MsgType = Msg_Wxwork
wxwork.Name = *name wxwork.Name = *name
wxwork.UserID = *userid wxwork.UserID = *userid
wxwork.Text = *text wxwork.Text = ""
wxwork.Instruction = instruction wxwork.Instruction = instruction
return wxwork return wxwork
} }
......
...@@ -27,6 +27,7 @@ func Sprintf(f string,v ...interface{})string { ...@@ -27,6 +27,7 @@ func Sprintf(f string,v ...interface{})string {
// Print Type // Print Type
// //
func PrintLog(v ...interface{}){ func PrintLog(v ...interface{}){
log.SetPrefix("Output ") log.SetPrefix("Output ")
log.Println(v ...) log.Println(v ...)
...@@ -81,25 +82,22 @@ func PntSend(v ...interface{}){ ...@@ -81,25 +82,22 @@ func PntSend(v ...interface{}){
Loger.SetPrefix("Send ") Loger.SetPrefix("Send ")
Loger.Println(v ...) Loger.Println(v ...)
} }
func PrintPrefix(s string ,v ...interface{}){ func PntWxwork(v ...interface{}){
Loger.SetPrefix(s) log.SetPrefix("WXWORK")
log.Println(v ...) log.Println(v ...)
Loger.SetPrefix("WXWORK ")
Loger.Println(v ...) Loger.Println(v ...)
} }
func PntWxSendText(v ...interface{}){
func PntWxwork(v ...interface{}){ Loger.SetPrefix("WxSendText ")
Loger.SetPrefix("WXWORK" )
log.Println(v ...)
Loger.Println(v ...) Loger.Println(v ...)
} log.SetPrefix("WxSendText ")
func PntWxworkf(f string,v ...interface{}){
Loger.SetPrefix("WXWORK ")
log.Println(v ...) log.Println(v ...)
Loger.Printf(f,v ...)
} }
func PntWxSendMsgText(v ...interface{}){ func PntWxRecText(v ...interface{}){
Loger.SetPrefix("WxSendMsgText ") Loger.SetPrefix("WxRecText ")
log.Println(v ...)
Loger.Println(v ...) Loger.Println(v ...)
} log.SetPrefix("WxRecText ")
log.Println(v ...)
}
\ No newline at end of file
...@@ -116,7 +116,7 @@ func SendWX(Content string){ ...@@ -116,7 +116,7 @@ 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{ func SendWxworkTextToAUser(id,text string) error{
PntWxSendMsgText(id,text)
// 获取 最新 token // 获取 最新 token
t,err := GetWXWorkToken() t,err := GetWXWorkToken()
if err !=nil{ if err !=nil{
...@@ -146,4 +146,7 @@ func SendWxworkTextToAUser(id,text string) error{ ...@@ -146,4 +146,7 @@ func SendWxworkTextToAUser(id,text string) error{
} }
func SendWxworkTextToAUserWithName(name ,id,text string) error{
PntWxSendText(name,text)
return SendWxworkTextToAUser(id,text)
}
...@@ -43,12 +43,10 @@ func Rand(i * int)int{ ...@@ -43,12 +43,10 @@ func Rand(i * int)int{
} }
// 程序挂起 i 秒 // 程序挂起 i 秒
func Delay(i int){ func Delay(i int){
PntInfo("Delay ",i) <-time.After(time.Duration(i)*time.Second)
time.Sleep(time.Duration(i) * time.Second)
} }
// 随机挂起 x 秒 // 随机挂起 x 秒
func RandDelay(i int){ func RandDelay(i int){
ri := Rand(&i) ri := Rand(&i)
PntInfo("RandDelay ",ri)
time.Sleep(time.Duration(ri) * time.Second) time.Sleep(time.Duration(ri) * time.Second)
} }
...@@ -9,7 +9,6 @@ const AD_User_main_admin string = "zhiweiadserver" ...@@ -9,7 +9,6 @@ const AD_User_main_admin string = "zhiweiadserver"
const AD_User_tengfei string = "tengfei" const AD_User_tengfei string = "tengfei"
const AD_User_taotengfei string = "taotengfei" const AD_User_taotengfei string = "taotengfei"
const AD_User_huyibo string = "huyibo" const AD_User_huyibo string = "huyibo"
const AD_User_xuwenqiang string = "xuwenqiang"
const AD_User_zhiwei string = "zhiwei@zhiweireach.com" const AD_User_zhiwei string = "zhiwei@zhiweireach.com"
......
...@@ -84,7 +84,7 @@ func Execcmd_copy(source,target string){ ...@@ -84,7 +84,7 @@ func Execcmd_copy(source,target string){
} }
} }
func Execcmd_wait(cmdargs string,){ func Execcmd_wait(cmdargs string){
app,appargs,err :=execcmd_base(cmdargs) app,appargs,err :=execcmd_base(cmdargs)
if err !=nil{ if err !=nil{
PntError(err) PntError(err)
...@@ -280,6 +280,11 @@ func Reg_query_item_one(root int ,path string) string { ...@@ -280,6 +280,11 @@ func Reg_query_item_one(root int ,path string) string {
return "" return ""
} }
} }
func Reg_IfExist_item(root int ,path string) error {
k,err := registry.OpenKey(reg_prase(&root),path, registry.READ)
defer k.Close()
return err
}
func Reg_query_item(root int ,path string) []string { func Reg_query_item(root int ,path string) []string {
if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.READ);kerr==nil{ if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.READ);kerr==nil{
defer k.Close() defer k.Close()
......
...@@ -6,6 +6,10 @@ import ( ...@@ -6,6 +6,10 @@ import (
pub "AD-Control/public" pub "AD-Control/public"
) )
const (
urlKey = iota
baiduKey
)
//--------------------------------------------------------- //---------------------------------------------------------
// //
...@@ -221,17 +225,15 @@ func tBatchOpenWeb(){ ...@@ -221,17 +225,15 @@ func tBatchOpenWeb(){
}, },
}, },
PushButton{ PushButton{
Text: "打开网页", Text: "批量打开网址",
OnClicked: func() { OnClicked: func() {
for seq,web := range pub.Splitln(inTE.Text()){ batchOpenWeb(inTE,outTE,urlKey)
if web == ""{ },
continue },
} PushButton{
pub.Execcmd_nowait(`C:\Progra~2\Google\Chrome\Application\chrome.exe `+web) Text: "批量百度搜索",
pub.Delay(2) OnClicked: func() {
outTE.AppendText(pub.Sprintf("%d %s\n",seq+1,web)) batchOpenWeb(inTE,outTE,baiduKey)
}
}, },
}, },
PushButton{ PushButton{
...@@ -244,6 +246,28 @@ func tBatchOpenWeb(){ ...@@ -244,6 +246,28 @@ func tBatchOpenWeb(){
}, },
}.Run() }.Run()
} }
func batchOpenWeb(inTE,outTE *walk.TextEdit,batch int){
var cmd string
chrome := `C:\Progra~2\Google\Chrome\Application\chrome.exe `
switch batch{
case urlKey:
cmd = ""
case baiduKey:
cmd = "https://www.baidu.com/s?wd="
}
cmd = chrome + cmd
for seq,web := range pub.Splitln(inTE.Text()){
if web == ""{
continue
}
pub.Execcmd_nowait(cmd+web)
pub.Delay(2)
outTE.AppendText(pub.Sprintf("%d %s\n",seq+1,web))
}
}
// 其他工具 备份用户文件 // 其他工具 备份用户文件
func tBakcupUser(){ func tBakcupUser(){
if pub.Msg_YesNo("是否执行一次手动备份用户文件夹。目标文件夹:"+pub.Dir_userprofile)==1{ if pub.Msg_YesNo("是否执行一次手动备份用户文件夹。目标文件夹:"+pub.Dir_userprofile)==1{
...@@ -457,9 +481,13 @@ func (mw *MyMainWindow) tHideShowIconDeal() { ...@@ -457,9 +481,13 @@ func (mw *MyMainWindow) tHideShowIconDeal() {
return return
} }
if strings.Index(r,"Hidden") == -1{ if strings.Index(r,"Hidden") == -1{
exec.DataBool = true
exec.Explain = "隐藏"
exec.DataBool = false
} else { } else {
exec.DataBool = false
exec.Explain = "显示"
exec.DataBool = true
} }
pub.SendServer(exec) pub.SendServer(exec)
......
...@@ -8,9 +8,6 @@ import ( ...@@ -8,9 +8,6 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"wxbizmsgcrypt" "wxbizmsgcrypt"
"time"
"strconv"
) )
...@@ -20,8 +17,10 @@ type wxXml struct { ...@@ -20,8 +17,10 @@ type wxXml struct {
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"`
EventKey string `xml:"EventKey"`
} }
func main(){ func main(){
...@@ -43,16 +42,18 @@ func index(w http.ResponseWriter, r *http.Request){ ...@@ -43,16 +42,18 @@ func index(w http.ResponseWriter, r *http.Request){
// 开始处理HTML // 开始处理HTML
go readHtmlData(d,&byteBody) go parseHtmlData(d,&byteBody)
// 立刻返回 // 立刻返回
fmt.Fprintf(w,"") fmt.Fprintf(w,"")
} }
func readHtmlData(d string,byteBody* []byte) string { func parseHtmlData(d string,byteBody* []byte) {
var err error
// 建立 企业微信 加密方法 // 建立 企业微信 加密方法
wxcpt := wxbizmsgcrypt.NewWXBizMsgCrypt(pub.WXTokenMsgSend, pub.WxworkEncodingAseKey,pub. WxworkReceiverId, wxbizmsgcrypt.XmlType) wxcpt := wxbizmsgcrypt.NewWXBizMsgCrypt(pub.WxworkTokenMsgSend, pub.WxworkEncodingAseKey,pub. WxworkReceiverId, wxbizmsgcrypt.XmlType)
// 解析 地址 参数 // 解析 地址 参数
// ?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3&timestamp=1409659589&nonce=263014780&echostr=P9nAzCzyDtyTWESHep1vC5X9xho%2FqYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp%2B4RPcs8TgAE7OaBO%2BFZXvnaqQ%3D%3D // ?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3&timestamp=1409659589&nonce=263014780&echostr=P9nAzCzyDtyTWESHep1vC5X9xho%2FqYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp%2B4RPcs8TgAE7OaBO%2BFZXvnaqQ%3D%3D
...@@ -75,9 +76,11 @@ func readHtmlData(d string,byteBody* []byte) string { ...@@ -75,9 +76,11 @@ func readHtmlData(d string,byteBody* []byte) string {
*byteBody) *byteBody)
if nil != cryptErr { if nil != cryptErr {
pub.PntError("DecryptMsg fail", cryptErr) pub.PntError("DecryptMsg fail", cryptErr)
return pub.Error_WXWork_Down_STR err = pub.Error_WXWork_Down
}
if len(msg)==0{
err = pub.Error_WXWork_Down
} }
// 解析具体消息 // 解析具体消息
wxmsg := ParseXML(&msg) wxmsg := ParseXML(&msg)
...@@ -85,25 +88,53 @@ func readHtmlData(d string,byteBody* []byte) string { ...@@ -85,25 +88,53 @@ func readHtmlData(d string,byteBody* []byte) string {
wtBricklayer,err := pub.GetWXWorkToken() wtBricklayer,err := pub.GetWXWorkToken()
if err != nil{ if err != nil{
pub.PntError(err) pub.PntError(err)
return pub.Error_WXWork_Down_STR err = pub.Error_WXWork_Down
} }
// 查询 姓名 // 查询 姓名
name,err := GetBricklayerName(wtBricklayer,wxmsg.FromUsername) name,err := GetBricklayerName(wtBricklayer,wxmsg.FromUsername)
if err !=nil { if err !=nil {
pub.PntError(err) pub.PntError(err)
return pub.Error_WXWork_Down_STR err = pub.Error_WXWork_Down
}
if err !=nil{
pub.SendWxworkTextToAUser(wxmsg.FromUsername,fmt.Sprintf("%s",err))
} }
// 我是复读机
if wxmsg.Content != ""{
pub.SendWxworkTextToAUser(wxmsg.FromUsername,wxmsg.Content)
return
}
// 具体功能实现 // 企业微信 消息 处理
//result := MsgDeal(&name,&wxmsg.FromUsername,&wxmsg.Content) // wxmsg.Content是接收到的文本消息ID
wxMsgDeal(&name,&wxmsg.FromUsername,&wxmsg.Content) // wxmsg.EventKey是菜单事件
// 创建菜单调用工具:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10786
// 创建菜单官方说明:https://work.weixin.qq.com/api/doc/90000/90135/90231
rec := wxMsgDealEvent(&name,&wxmsg.FromUsername,&wxmsg.EventKey)
pub.SendWxworkTextToAUserWithName(name,wxmsg.FromUsername,rec)
return
// 先回复空,再异步发送处理结果
return ""
// // 建立 回复消息模板 // // 建立 回复消息模板
// xml,t,nonce := wxmsg.createXML(result) // xml,t,nonce := wxmsg.createXML(result)
// 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
// }
// // 加密消息 // // 加密消息
// cryptMsg, cryptErr := wxcpt.EncryptMsg(xml, t, nonce) // cryptMsg, cryptErr := wxcpt.EncryptMsg(xml, t, nonce)
...@@ -114,53 +145,40 @@ func readHtmlData(d string,byteBody* []byte) string { ...@@ -114,53 +145,40 @@ func readHtmlData(d string,byteBody* []byte) string {
// return string(cryptMsg) // return string(cryptMsg)
} }
func wxMsgDeal(name, userid,text * string ) string{ func wxMsgDealEvent(name, userid,eventkey * string) string {
var result []byte var result []byte
var err error var err error
var wxwork pub.MJwxwork var wxwork pub.MJwxwork
pub.PrintPrefix("Listen ",*name,*text) pub.PntWxRecText(*name,*eventkey)
switch *text{ switch *eventkey{
case "芝麻开机": case pub.WXEK_zwDevopsPowerWake:
pub.SendWxworkTextToAUser(*userid,"收到,正在处理~") pub.SendWxworkTextToAUserWithName(*name,*userid,"收到唤醒指令,正在处理")
result,err = pub.SendServer(pub.GJwxworkText(name,userid,text,pub.Msg_Wxwork_UserWake)) result,err = pub.SendServer(pub.GJwxworkText(name,userid,pub.Msg_Wxwork_UserWake))
case pub.WXEK_zwDevopsPowerTurnOFF:
pub.SendWxworkTextToAUserWithName(*name,*userid,"收到关机指令,正在处理")
result,err = pub.SendServer(pub.GJwxworkText(name,userid,pub.Msg_Wxwork_TurnOFF))
case "": case pub.WXEK_zwDevopsPowerReboot:
return "" pub.SendWxworkTextToAUserWithName(*name,*userid,"收到重启指令,正在处理")
// result,err = pub.SendServer(pub.GJwxworkText(name,userid,pub.Msg_Wxwork_Reboot))
default:
pub.SendWxworkTextToAUser(*userid,*text)
return ""
case pub.WXEK_zwDevopsPowerStatus:
pub.SendWxworkTextToAUserWithName(*name,*userid,"收到查询指令,正在处理")
result,err = pub.SendServer(pub.GJwxworkText(name,userid,pub.Msg_Wxwork_Status))
} }
if err != nil {
return pub.Error_WXWork_Down_STR if err != nil{
return fmt.Sprintf("%s",err)
} }
pub.ParseJsonBody(result,&wxwork) pub.ParseJsonBody(result,&wxwork)
if err := wxwork.SendTextToAUser();err!=nil{ return wxwork.Text
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{ func ParseXML(unmsg *[]byte)wxXml{
var msg wxXml var msg wxXml
if nil != xml.Unmarshal(*unmsg, &msg) { if nil != xml.Unmarshal(*unmsg, &msg) {
...@@ -168,9 +186,9 @@ func ParseXML(unmsg *[]byte)wxXml{ ...@@ -168,9 +186,9 @@ func ParseXML(unmsg *[]byte)wxXml{
} }
return msg return msg
} }
// 读取企业通讯录的成员信息 // 读取企业通讯录的成员信息
//官方说明: // 官方说明: 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 := pub.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s",token,userid) link := pub.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s",token,userid)
data,err := pub.SendGetRequest(&link) data,err := pub.SendGetRequest(&link)
...@@ -185,4 +203,4 @@ func GetBricklayerName(token, userid string) (string,error) { ...@@ -185,4 +203,4 @@ func GetBricklayerName(token, userid string) (string,error) {
return "",pub.Error_WXWork_Down return "",pub.Error_WXWork_Down
} }
return bi.Name,nil return bi.Name,nil
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment