public static void TimingCheckAPI(object source, ElapsedEventArgs e) { // https://xJoker-Office-PC:8443/svn/t/ string postJSON = $"{{\"Data\":{{\"DataType\":\"requestCmd\",\"SVNPrefix\":\"{ProgramSetting.SitePrefix }\",\"mID\":\"{ProgramSetting.mID}\"}}}}"; foreach (var APIConfigItem in ProgramSetting.APIConfig) { var p = EncryptsAndDecryptsHelper.Encrypt(postJSON, APIConfigItem.SecretKey, APIConfigItem.IV); var returnCommand = WebFunctionHelper.GetCmd(p, APIConfigItem.CMDurl, APIConfigItem.SecretKey, APIConfigItem.IV); if (returnCommand != null) { foreach (var item in returnCommand) { if (item.commandType != 0) { LogHelper.WriteLog(item.commandType.ToString()); // 如果没有值则直接置空 item.name = item.name ?? ""; item.repoName = item.repoName ?? ""; item.groupName = item.groupName ?? ""; item.password = item.password ?? ""; item.permission = item.permission ?? 0; item.message = item.message ?? ""; item.Folders = item.Folders ?? ""; string svnAccount = ProgramSetting.svnAccount; string svnPassword = ProgramSetting.svnPassword; switch (item.commandType) { case Model.CommandType.SetRepositoryPermission: if (item.permission >= 0 || item.permission <= 2) { VisualSVN_WMI_Api.SetRepositoryPermission(item.name, item.repoName, (int)item.permission); } else { VisualSVN_WMI_Api.SetRepositoryPermission(item.name, item.repoName); } break; case Model.CommandType.DelRepositoryPermission: VisualSVN_WMI_Api.DelRepositoryPermission(item.name, item.repoName); break; case Model.CommandType.CreatGroup: if (!string.IsNullOrEmpty(item.name) && !item.name.Contains(',')) { // 单用户 VisualSVN_WMI_Api.CreatGroup(item.groupName, new string[] { item.name }); } else if (!string.IsNullOrEmpty(item.name) && item.name.Contains(',')) { // 多用户 string[] userArr = item.name.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); VisualSVN_WMI_Api.CreatGroup(item.groupName, userArr); } else { // 仅创建用户组 VisualSVN_WMI_Api.CreatGroup(item.groupName); } break; case Model.CommandType.CreateUser: VisualSVN_WMI_Api.CreateUser(item.name, item.password); break; case Model.CommandType.CreateRepository: VisualSVN_WMI_Api.CreateRepository(item.repoName); break; case Model.CommandType.DeleteRepository: VisualSVN_WMI_Api.DeleteRepository(item.repoName); break; case Model.CommandType.CreateRepositoryFolders: if (!string.IsNullOrEmpty(item.Folders)) { string[] folderArr = item.Folders.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); VisualSVN_WMI_Api.CreateRepositoryFolders(item.repoName, folderArr, item.message); } break; case Model.CommandType.DeleteRepositoryFolders: if (!string.IsNullOrEmpty(item.Folders)) { string[] folderArr = item.Folders.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); VisualSVN_WMI_Api.DeleteRepositoryFolders(item.repoName, folderArr, item.message); } break; case Model.CommandType.AddMemberToGroup: VisualSVN_WMI_Api.AddMemberToGroup(item.name, item.groupName); break; case Model.CommandType.DelMemberOnGroup: VisualSVN_WMI_Api.DelMemberOnGroup(item.name, item.groupName); break; case Model.CommandType.CheckOut: if (!string.IsNullOrEmpty(item.svnAccount) && !string.IsNullOrEmpty(item.svnPassword)) { svnAccount = item.svnAccount; svnPassword = item.svnPassword; } if (!SVNHelper.CheckOut(svnAccount, svnPassword, item.svnRepoUrl, item.svnLocalPath)) { LogHelper.WriteLog("SVN检出错误!", LogHelper.Log4NetLevel.Error); } break; case Model.CommandType.Update: if (!string.IsNullOrEmpty(item.svnAccount) && !string.IsNullOrEmpty(item.svnPassword)) { svnAccount = item.svnAccount; svnPassword = item.svnPassword; } SVNHelper.Update(svnAccount, svnPassword, item.svnLocalPath); break; case Model.CommandType.SetDirectoryAccessRule: FileHelper.SetDirectoryAccessRule(item.name, item.Folders); break; case Model.CommandType.SetDirectoryShare: // 创建共享目录 if (!Taxi.FileHelper.FileHelper.DirectoryExists(item.svnLocalPath)) { Taxi.FileHelper.FileHelper.CreateDirectory(item.svnLocalPath); } var acl = new Taxi.Network.Win32_Ace().SecurityDescriptor(ProgramSetting.WindowsShareUsername, ACL: Taxi.Network.Win32ShareType.ShareAccessMask.Read); Taxi.Network.WindowsShareFolder.ShareFolder(item.svnLocalPath, item.Folders, item.Folders, acl); break; case Model.CommandType.AddHooks: // 配置hook文件 if (!VisualSVN_WMI_Api.SetRepoHooks(item.repoName, item.repoName, (VisualSVN_WMI_Api.HooksType)item.permission)) { LogHelper.WriteLog("SVN设定Hooks错误!", LogHelper.Log4NetLevel.Error); } break; default: break; } } } } } }
public static void MainRunFunction() { string encryptsJson = ""; // 初始化 读取所有仓库的信息 try { SVNHelper.ReadRepositoriesAll(); LogHelper.WriteLog("仓库信息初始化完成", LogHelper.Log4NetLevel.Info); } catch (Exception ex) { LogHelper.WriteLog("初始化仓库出现错误\n" + ex, LogHelper.Log4NetLevel.Error); } foreach (var item in ProgramSetting.APIConfig) { JsonPostModel jpm = new JsonPostModel(); jpm.Agent = JsonPostModelAgent.Client.ToString(); jpm.DataType = JsonPostModelDataType.AllUserTable.ToString(); jpm.Data = RepoDataSourcePermission.RepoPermissons; encryptsJson = EncryptsAndDecryptsHelper.Encrypt(JsonConvert.SerializeObject(jpm), item.SecretKey, item.IV); if (!WebFunctionHelper.PostToAPI(encryptsJson, item.APIurl, item.SecretKey, item.IV)) { LogHelper.WriteLog("初始化时发送所有仓库信息出现错误", LogHelper.Log4NetLevel.Error); } // 初始化 读取用户组信息 try { groupList.userGroup = SVNHelper.GetAllUserAndGroup(); LogHelper.WriteLog("用户与用户组信息初始化完成", LogHelper.Log4NetLevel.Info); } catch (Exception ex) { LogHelper.WriteLog("初始化用户信息出现错误\n" + ex, LogHelper.Log4NetLevel.Error); } // 初始化 读取所有用户的密码表 try { SVNHelper.htpasswdRead(); LogHelper.WriteLog("用户密码表信息初始化完成", LogHelper.Log4NetLevel.Info); } catch (Exception ex) { LogHelper.WriteLog("初始化用户密码表信息出现错误\n" + ex, LogHelper.Log4NetLevel.Error); } jpm.Agent = JsonPostModelAgent.Client.ToString(); jpm.DataType = JsonPostModelDataType.AllAuthInfo.ToString(); jpm.Data = htpasswdUserAndPassword.UsersTable; encryptsJson = EncryptsAndDecryptsHelper.Encrypt(JsonConvert.SerializeObject(jpm), item.SecretKey, item.IV); if (!WebFunctionHelper.PostToAPI(encryptsJson, item.APIurl, item.SecretKey, item.IV)) { LogHelper.WriteLog("初始化时发送用户密码信息出现错误", LogHelper.Log4NetLevel.Error); } } LogHelper.WriteLog("启动文件监控", LogHelper.Log4NetLevel.Info); // 启动仓库权限文件监控 try { SVNFileWatcherHelper fwh = new SVNFileWatcherHelper(); fwh.WatcherStrat(ProgramSetting.Repositoriespath, "VisualSVN-SvnAuthz.ini"); } catch (Exception ex) { LogHelper.WriteLog("启动 VisualSVN-SvnAuthz.ini 监控出现错误: " + ex.ToString(), LogHelper.Log4NetLevel.Error); throw; } // 启动htpasswd文件监控 try { htpasswdWatcher hw = new htpasswdWatcher(); hw.WatcherStrat(ProgramSetting.Repositoriespath, "htpasswd"); } catch (Exception ex) { LogHelper.WriteLog("启动 htpasswd 监控出现错误: " + ex.ToString(), LogHelper.Log4NetLevel.Error); throw; } // 启动用户组文件监控 try { groupFileWatcher gfw = new groupFileWatcher(); gfw.WatcherStrat(ProgramSetting.Repositoriespath, "groups.conf"); } catch (Exception ex) { LogHelper.WriteLog("启动 groups.conf 监控出现错误: " + ex.ToString(), LogHelper.Log4NetLevel.Error); throw; } RemoteCommandMonitoring.CheckRemoteCommand(); Console.WriteLine("程序启动"); LogHelper.WriteLog("程序启动完成.", LogHelper.Log4NetLevel.Info); }