Esempio n. 1
0
        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;
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        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);
        }