private static void AddLicenseControl(ArtifactoryConfig artifactoryConfig, Build build, BuildInfoLog log)
        {
            if (artifactoryConfig.PropertyGroup.LicenseControlCheck == null)
            {
                return;
            }

            LicenseControl licenseControl = new LicenseControl();

            licenseControl.runChecks    = artifactoryConfig.PropertyGroup.LicenseControlCheck.EnabledLicenseControl;
            licenseControl.autoDiscover = artifactoryConfig.PropertyGroup.LicenseControlCheck.AutomaticLicenseDiscovery;
            licenseControl.includePublishedArtifacts   = artifactoryConfig.PropertyGroup.LicenseControlCheck.IncludePublishedArtifacts;
            licenseControl.licenseViolationsRecipients = new List <string>();
            licenseControl.scopes = new List <string>();

            foreach (Recipient recip in artifactoryConfig.PropertyGroup.LicenseControlCheck.LicenseViolationRecipients.Recipient)
            {
                if (validateEmail(recip))
                {
                    licenseControl.licenseViolationsRecipients.Add(recip.email);
                }
                else
                {
                    log.Warning("Invalid email address, under License Control violation recipients.");
                }
            }

            foreach (Scope scope in artifactoryConfig.PropertyGroup.LicenseControlCheck.ScopesForLicenseAnalysis.Scope)
            {
                licenseControl.scopes.Add(scope.value);
            }

            build.licenseControl = licenseControl;
        }
        /// <summary>
        /// Gather all windows system variables and their values
        /// </summary>
        /// <returns></returns>
        private static void AddSystemVariables(ArtifactoryConfig artifactoryConfig, Build build)
        {
            if (artifactoryConfig.PropertyGroup.EnvironmentVariables == null)
            {
                return;
            }

            string enable = artifactoryConfig.PropertyGroup.EnvironmentVariables.EnabledEnvVariable;

            if (string.IsNullOrWhiteSpace(enable) || !enable.ToLower().Equals("true"))
            {
                return;
            }

            // includePatterns = new List<Pattern>();
            //List<Pattern> excludePatterns = new List<Pattern>();
            List <Pattern> includePatterns = artifactoryConfig.PropertyGroup.EnvironmentVariables.IncludePatterns.Pattern;
            List <Pattern> excludePatterns = artifactoryConfig.PropertyGroup.EnvironmentVariables.ExcludePatterns.Pattern;

            StringBuilder includeRegexUnion = new StringBuilder();
            StringBuilder excludeRegexUnion = new StringBuilder();

            if (includePatterns != null && includePatterns.Count > 0)
            {
                includePatterns.ForEach(pattern => includeRegexUnion.Append(WildcardToRegex(pattern.key)).Append("|"));
                includeRegexUnion.Remove(includeRegexUnion.Length - 1, 1);
            }

            if (excludePatterns != null && excludePatterns.Count > 0)
            {
                excludePatterns.ForEach(pattern => excludeRegexUnion.Append(WildcardToRegex(pattern.key)).Append("|"));
                excludeRegexUnion.Remove(excludeRegexUnion.Length - 1, 1);
            }

            Regex includeRegex = new Regex(includeRegexUnion.ToString(), RegexOptions.IgnoreCase);
            Regex excludeRegex = new Regex(excludeRegexUnion.ToString(), RegexOptions.IgnoreCase);

            //System.Environment.GetEnvironmentVariables()
            //EnvironmentVariableTarget
            IDictionary sysVariables = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process);
            var         dicVariables = new Dictionary <string, string>();

            var environmentVariables = build.agent.BuildAgentEnvironment();

            foreach (string key in sysVariables.Keys)
            {
                if (!environmentVariables.ContainsKey(string.Concat(Agent.PRE_FIX_ENV, key)) && !PathConflicts(includePatterns, excludePatterns, includeRegex, excludeRegex, key))
                {
                    dicVariables.Add(key, (string)sysVariables[key]);
                }
            }

            dicVariables.AddRange(environmentVariables);

            build.properties = dicVariables;
        }
        private void GetMainConfiguration()
        {
            FileInfo artifactoryConfigurationFile = new FileInfo(_task.SolutionRoot + "\\.artifactory\\Artifactory.build");

            if (!artifactoryConfigurationFile.Exists)
            {
                throw new Exception("The main configuration file are missing! (Location: solutionDir\\.artifactory)");
            }

            StringBuilder xmlContent = MsbuildInterpreter(artifactoryConfigurationFile, _task);

            System.Xml.Serialization.XmlSerializer reader = new System.Xml.Serialization.XmlSerializer(typeof(ArtifactoryConfig));
            MainArtifactoryConfiguration = (ArtifactoryConfig)reader.Deserialize(new System.IO.StringReader(xmlContent.ToString()));
        }
        private static void ConfigHttpClient(ArtifactoryConfig artifactoryConfig, Build build)
        {
            build.deployClient = new DeployClient();
            if (!string.IsNullOrWhiteSpace(artifactoryConfig.PropertyGroup.ConnectionTimeout))
            {
                build.deployClient.timeout = int.Parse(artifactoryConfig.PropertyGroup.ConnectionTimeout);
            }

            ProxySettings proxySettings = artifactoryConfig.PropertyGroup.ProxySettings;

            //Check if the user Bypass proxy settings
            if (!string.IsNullOrWhiteSpace(proxySettings.Bypass) && proxySettings.Bypass.ToLower().Equals("true"))
            {
                build.deployClient.proxy          = new Proxy();
                build.deployClient.proxy.IsBypass = true;
                return;
            }

            /*
             * Incase that the proxy settings, is not set in the plugin level, we need
             * to check for proxy settings in the environment variables.
             */
            if (string.IsNullOrWhiteSpace(proxySettings.Host))
            {
                ProxySettings envVariableProxy = proxyEnvVariables();
                if (envVariableProxy != null)
                {
                    proxySettings = envVariableProxy;
                }
                else
                {
                    build.deployClient.proxy          = new Proxy();
                    build.deployClient.proxy.IsBypass = true;
                    return;
                }
            }

            if (!string.IsNullOrWhiteSpace(proxySettings.UserName) && !string.IsNullOrWhiteSpace(proxySettings.Password))
            {
                build.deployClient.proxy = new Proxy(proxySettings.Host, proxySettings.Port, proxySettings.UserName, proxySettings.Password);
            }
            else
            {
                build.deployClient.proxy = new Proxy(proxySettings.Host, proxySettings.Port);
            }

            build.deployClient.proxy.IsBypass = false;
        }
        public static Build extractBuild(ArtifactoryBuild task, ArtifactoryConfig artifactoryConfig, BuildInfoLog log)
        {
            Build build = new Build
            {
                modules = new List <Module>(),
            };

            build.started = string.Format(Build.STARTED_FORMAT, task.StartTime);
            build.artifactoryPrincipal = task.User;
            build.buildAgent           = new BuildAgent {
                name = "MSBuild", version = task.ToolVersion
            };
            build.type = "MSBuild";

            build.agent = Agent.BuildAgentFactory(task);

            //get the current use from the windows OS
            System.Security.Principal.WindowsIdentity user;
            user = System.Security.Principal.WindowsIdentity.GetCurrent();
            if (user != null)
            {
                build.principal = string.Format(@"{0}", user.Name);
            }

            //Calculate how long it took to do the build
            DateTime start = DateTime.ParseExact(task.StartTime, artifactoryDateFormat, null);

            build.startedDateMillis = GetTimeStamp();
            build.durationMillis    = Convert.ToInt64((DateTime.Now - start).TotalMilliseconds);

            build.number      = string.IsNullOrWhiteSpace(task.BuildNumber) ? build.startedDateMillis : task.BuildNumber;
            build.name        = task.BuildName ?? task.ProjectName;
            build.url         = build.agent.BuildAgentUrl();
            build.vcsRevision = task.VcsRevision;

            //Add build server properties, if exists.
            AddSystemVariables(artifactoryConfig, build);
            AddLicenseControl(artifactoryConfig, build, log);
            AddBlackDuck(artifactoryConfig, build, log);

            ConfigHttpClient(artifactoryConfig, build);

            return(build);
        }
        private static void AddBlackDuck(ArtifactoryConfig artifactoryConfig, Build build, BuildInfoLog log)
        {
            if (artifactoryConfig.PropertyGroup.BlackDuckCheck == null)
            {
                return;
            }

            BlackDuckGovernance blackDuckControl = new BlackDuckGovernance();

            blackDuckControl.runChecks                          = artifactoryConfig.PropertyGroup.BlackDuckCheck.EnabledBlackDuckCheck;
            blackDuckControl.appName                            = artifactoryConfig.PropertyGroup.BlackDuckCheck.CodeCenterApplicationName;
            blackDuckControl.appVersion                         = artifactoryConfig.PropertyGroup.BlackDuckCheck.CodeCenterApplicationVersion;
            blackDuckControl.reportRecipients                   = new List <string>();
            blackDuckControl.scopes                             = new List <string>();
            blackDuckControl.includePublishedArtifacts          = artifactoryConfig.PropertyGroup.BlackDuckCheck.IncludePublishedArtifacts;
            blackDuckControl.autoCreateMissingComponentRequests = artifactoryConfig.PropertyGroup.BlackDuckCheck.AutoCreateMissingComponent;
            blackDuckControl.autoDiscardStaleComponentRequests  = artifactoryConfig.PropertyGroup.BlackDuckCheck.AutoDiscardStaleComponent;

            foreach (Recipient recip in artifactoryConfig.PropertyGroup.BlackDuckCheck.ComplianceReportRecipients.Recipient)
            {
                if (validateEmail(recip))
                {
                    blackDuckControl.reportRecipients.Add(recip.email);
                }
                else
                {
                    log.Warning("Invalid email address, under License Control violation recipients.");
                }
            }

            foreach (Scope scope in artifactoryConfig.PropertyGroup.BlackDuckCheck.ScopesForLicenseAnalysis.Scope)
            {
                blackDuckControl.scopes.Add(scope.value);
            }

            build.blackDuckGovernance = blackDuckControl;
        }