예제 #1
0
        public MainWindow()
        {
            InitializeComponent();
            LogUtils.ConfigureLog4NetForPluginMode(false);

            _tfsVersion         = Helpers.GetInstalledTfsVersion();
            lbl_Version.Content = $"ver {Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}";
            switch (_tfsVersion)
            {
            case TfsVersion.Tfs2015:
                Set2015FieldsVisibility(Visibility.Visible);
                break;

            case TfsVersion.Tfs2017:
                Set2017FieldsVisibility(Visibility.Visible);
                break;

            case TfsVersion.NotDefined:
                break;

            default:
                Set2017FieldsVisibility(Visibility.Visible);
                break;
            }

            try
            {
                Helper.CheckedConnection = false;

                TfsLocation.Text = ConnectionCreator.GetTfsLocationFromHostName();
                if (!ConfigurationManager.ConfigurationExists())
                {
                    return;
                }

                var connectionDetails = ConfigurationManager.Read(false);

                Location.Text          = connectionDetails.ALMOctaneUrl;
                ClientId.Text          = connectionDetails.ClientId;
                ClientSecret.Password  = connectionDetails.ClientSecret;
                TfsLocation.Text       = connectionDetails.TfsLocation;
                Pat.Password           = connectionDetails.Pat;
                _instanceId            = connectionDetails.InstanceId;
                PasswordInput.Password = connectionDetails.Password;
                UsernameInput.Text     = connectionDetails.Pat;
            }
            catch (Exception ex)
            {
                Log.Warn("Could not parse existing configuration file", ex);
            }
        }
예제 #2
0
        public RestBase()
        {
            Get["/"] = _ =>
            {
                String view = GetView("console.html");
                return(view);
            };

            Get["/status"] = _ =>
            {
                Dictionary <string, object> map = new Dictionary <string, object>();
                map["pluginStatus"]       = PluginManager.GetInstance().Status.ToString();
                map["pluginVersion"]      = Helpers.GetPluginVersion();
                map["tfsVersion"]         = RunModeManager.GetInstance().TfsVersion.ToString();
                map["generalEventsQueue"] = PluginManager.GetInstance().GeneralEventsQueue.Count;
                map["scmEventsQueue"]     = PluginManager.GetInstance().ScmEventsQueue.Count;
                map["testResultsQueue"]   = PluginManager.GetInstance().TestResultsQueue.Count;

                map["isLocal"] = AllowConfigurationModifyAccess(Request);

                return(map);
            };

            Post["/build-event/"] = _ =>
            {
                RunModeManager runModeManager = RunModeManager.GetInstance();
                if (runModeManager.RunMode == PluginRunMode.ConsoleApp)
                {
                    HandleBuildEvent();
                }

                return("Received");
            };

            Get["/logs/{logType}/{logId}"] = parameters =>
            {
                return(HandleGetLogRequest(parameters.logType, parameters.logId));
            };

            Get["/logs"] = parameters =>
            {
                String view = GetView("logs.html");
                return(view);
                //return HandleGetLogListRequest();
            };

            Get["/logs/download/all"] = _ =>
            {
                string zipPath  = CreateZipFileFromLogFiles();
                string fileName = Path.GetFileName(zipPath);
                DeleteTempZipFileWithDelay(zipPath);

                var file     = new FileStream(zipPath, FileMode.Open);
                var response = new StreamResponse(() => file, MimeTypes.GetMimeType(fileName));
                return(response.AsAttachment(fileName));
            };

            Post["/config", AllowConfigurationModifyAccess] = _ =>
            {
                var configStr = Context.Request.Body.AsString();
                Log.Debug($"Received new configuration");//dont log received log configuration as it contains plain passwords
                var config = JsonHelper.DeserializeObject <ConnectionDetails>(configStr);
                try
                {
                    ConnectionCreator.CheckMissingValues(config);
                    ConfigurationManager.ResetSensitiveInfo(config);
                    ConfigurationManager.WriteConfig(config);
                }
                catch (Exception e)
                {
                    string msg = "Failed to save configuration" + e.Message;
                    Log.Error(msg, e);
                    return(new TextResponse(msg).WithStatusCode(HttpStatusCode.BadRequest));
                }

                return("Configuration changed");
            };

            Post["/config/test", AllowConfigurationModifyAccess] = _ =>
            {
                try
                {
                    var configStr = Context.Request.Body.AsString();
                    var config    = JsonHelper.DeserializeObject <ConnectionDetails>(configStr);

                    ConnectionCreator.CheckMissingValues(config);
                    ConfigurationManager.ResetSensitiveInfo(config);
                    ConnectionCreator.CheckProxySettings(config.TfsLocation);
                    ConnectionCreator.CheckProxySettings(config.ALMOctaneUrl);
                    ConnectionCreator.CreateTfsConnection(config);
                    ConnectionCreator.CreateOctaneConnection(config);
                }
                catch (Exception e)
                {
                    return(new TextResponse(e.Message).WithStatusCode(HttpStatusCode.BadRequest));
                }

                return("");
            };

            Get["/config"] = _ =>
            {
                if (AllowConfigurationModifyAccess(Request))
                {
                    String            view = GetView("config.html");
                    ConnectionDetails conf = null;
                    try
                    {
                        conf = ConfigurationManager.Read(false).GetInstanceWithoutSensitiveInfo();
                    }
                    catch (FileNotFoundException)
                    {
                        conf             = new ConnectionDetails();
                        conf.TfsLocation = ConnectionCreator.GetTfsLocationFromHostName();
                    }

                    string confJson = JsonHelper.SerializeObject(conf);
                    view = view.Replace("//{defaultConf}", "var defaultConf =" + confJson);

                    return(view);
                }
                else
                {
                    string prefix = "Configuration is read-only. To modify configuration, access http://localhost:4567/config on the TFS machine.";
                    string config = JsonHelper.SerializeObject(ConfigurationManager.Read(false).GetInstanceWithoutSensitiveInfo(), true);

                    return(new TextResponse(prefix + Environment.NewLine + config));
                }
            };

            Get["/proxy"] = _ =>
            {
                if (AllowConfigurationModifyAccess(Request))
                {
                    String       view = GetView("proxy.html");
                    ProxyDetails conf = null;
                    try
                    {
                        conf = ProxyManager.Read(false).GetInstanceWithoutSensitiveInfo();
                    }
                    catch (FileNotFoundException)
                    {
                        conf = new ProxyDetails();
                    }

                    string confJson = JsonHelper.SerializeObject(conf);
                    view = view.Replace("//{defaultConf}", "var defaultConf =" + confJson);

                    return(view);
                }
                else
                {
                    string prefix = "Proxy is read-only. To modify proxy, access http://localhost:4567/proxy on the TFS machine.";
                    string config = JsonHelper.SerializeObject(ProxyManager.Read(false).GetInstanceWithoutSensitiveInfo(), true);

                    return(new TextResponse(prefix + Environment.NewLine + config));
                }
            };

            Post["/proxy", AllowConfigurationModifyAccess] = _ =>
            {
                var configStr = Context.Request.Body.AsString();
                Log.Debug($"Received new proxy settings");//dont log received log configuration as it contains plain passwords
                try
                {
                    var proxyDetails = JsonHelper.DeserializeObject <ProxyDetails>(configStr);
                    ConnectionCreator.CheckMissingValues(proxyDetails);
                    ProxyManager.ResetSensitiveInfo(proxyDetails);
                    ProxyManager.WriteConfig(proxyDetails);
                }
                catch (Exception e)
                {
                    string msg = "Failed to save proxy settings: " + e.Message;
                    Log.Error(msg, e);
                    return(new TextResponse(msg).WithStatusCode(HttpStatusCode.BadRequest));
                }

                return("Configuration changed");
            };

            Get["/resources/{resourceName}"] = parameters =>
            {
                var    assembly     = Assembly.GetExecutingAssembly();
                var    resourceName = $"{PATH_TO_RESOURCE}.RestServer.Views.Resources.{parameters.resourceName}";
                Stream stream       = assembly.GetManifestResourceStream(resourceName);
                if (stream == null)
                {
                    return(new TextResponse("Resource not found").WithStatusCode(HttpStatusCode.NotFound));
                }

                var response = new StreamResponse(() => stream, MimeTypes.GetMimeType(resourceName));
                return(response);
            };

            Post["/start", AllowConfigurationModifyAccess] = _ =>
            {
                if (PluginManager.GetInstance().Status == PluginManager.StatusEnum.Connected)
                {
                    return("ALM Octane plugin is already running");
                }

                Log.Debug("Plugin start requested");

                PluginManager.GetInstance().StartPlugin();
                return("Starting ALM Octane plugin");
            };

            Post["/stop", AllowConfigurationModifyAccess] = _ =>
            {
                Log.Debug("Plugin stop requested");
                PluginManager.GetInstance().StopPlugin();
                return("Stopping ALM Octane plugin");
            };

            Post["/queues/clear", AllowConfigurationModifyAccess] = _ =>
            {
                Dictionary <string, object> queueStatus = new Dictionary <string, object>();
                queueStatus["GeneralEventsQueue"] = PluginManager.GetInstance().GeneralEventsQueue.Count;
                queueStatus["ScmEventsQueue"]     = PluginManager.GetInstance().ScmEventsQueue.Count;
                queueStatus["TaskResultQueue"]    = PluginManager.GetInstance().TestResultsQueue.Count;

                string json = JsonHelper.SerializeObject(queueStatus, true);
                Log.Debug($"Clear event queues requested : {json}");

                PluginManager.GetInstance().GeneralEventsQueue.Clear();
                PluginManager.GetInstance().ScmEventsQueue.Clear();
                PluginManager.GetInstance().TestResultsQueue.Clear();
                return($"Cleared {json}");
            };
        }