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); } }
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}"); }; }