public ProjectControl(ProjectDataJson data) { InitializeComponent(); _data = data; SettingsManager settingsManager = new SettingsManager(); settingsManager.Load(); _settings = settingsManager.Settings; _projectFolder = _settings.MainProjectFolder + "\\" + _data.Name; WB_ProjectMainPage.ScriptErrorsSuppressed = true; LV_Launchables.MultiSelect = false; LV_Launchables.FullRowSelect = true; LV_Launchables.HeaderStyle = ColumnHeaderStyle.None; Init(); if (_data.WebUrl != null) { //NOTE find a way to speed up the page loading. Maybe if the web browser is async WB_ProjectMainPage.Url = _data.WebUrl; } else { ITemplate templateEngine = new WebsiteTemplate(); templateEngine.SetTemplateFile("ProjectBasic.html"); templateEngine.AddReplacement("projectname", data.Name); templateEngine.AddReplacement("imgsource", data.ImageUrl); WB_ProjectMainPage.DocumentText = templateEngine.Get(); B_OpenSite.Enabled = false; } }
public async Task <HttpResponseMessage> CreateResource(BaseTemplate template) { var tempTemplate = WebsiteTemplate.EmptySiteTemplate; if (template == null) { template = WebsiteTemplate.EmptySiteTemplate; } else if (template.AppService.Equals(AppService.Function)) { tempTemplate = FunctionTemplate.DefaultFunctionTemplate(template.Name); } else if (template.AppService.Equals(AppService.Containers)) { var containersTemplate = ContainersTemplate.GetContainersTemplate(template.Name); containersTemplate.DockerContainer = template.DockerContainer; tempTemplate = containersTemplate; } else if (template.Name != null && !template.Name.Equals("Github Repo") && !template.AppService.Equals(AppService.Function)) { var temp = TemplatesManager.GetTemplates() .FirstOrDefault(t => t.Name == template.Name); tempTemplate = WebsiteTemplate.DefaultTemplate(temp.Name, temp.AppService, temp.Language, temp.FileName, template.DockerContainer, temp.MSDeployPackageUrl); } else if (template.Name != null && template.Name.Equals("Github Repo")) { tempTemplate = new WebsiteTemplate { AppService = AppService.Web, GithubRepo = template.GithubRepo, Name = template.Name, Language = "Github" }; } var identity = HttpContext.Current.User.Identity as TryWebsitesIdentity; var anonymousUserName = SecurityManager.GetAnonymousUserName(new HttpContextWrapper(HttpContext.Current)); try { var resourceManager = await ResourcesManager.GetInstanceAsync(); if ((await resourceManager.GetResourceGroup(identity.Name)) != null) { SimpleTrace.Diagnostics.Fatal(AnalyticsEvents.MoreThanOneError, 1); //This should use the server version of the error, but due to a string bug they are not the same. return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, Resources.Client.Information_YouCantHaveMoreThanOne)); } ResourceGroup resourceGroup = null; switch (tempTemplate.AppService) { case AppService.Linux: resourceGroup = await resourceManager.ActivateLinuxResource(tempTemplate, identity, anonymousUserName); break; case AppService.VSCodeLinux: resourceGroup = await resourceManager.ActivateVSCodeLinuxResource(tempTemplate, identity, anonymousUserName); break; case AppService.Web: resourceGroup = await resourceManager.ActivateWebApp(tempTemplate, identity, anonymousUserName); break; case AppService.Api: resourceGroup = await resourceManager.ActivateApiApp(tempTemplate, identity, anonymousUserName); break; case AppService.Logic: if (identity.Issuer == "OrgId") { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, Resources.Server.Error_OrgIdNotSupported)); } else if (identity.Issuer != "MSA") { return(SecurityManager.RedirectToAAD(tempTemplate.CreateQueryString())); } resourceGroup = await resourceManager.ActivateLogicApp(tempTemplate, identity, anonymousUserName); break; case AppService.Function: resourceGroup = await resourceManager.ActivateFunctionApp(tempTemplate, identity, anonymousUserName); break; case AppService.Containers: if (identity.Issuer == "OrgId") { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, Resources.Server.Error_OrgIdNotSupported)); } else if (identity.Issuer != "MSA") { return(SecurityManager.RedirectToAAD(template.CreateQueryString())); } resourceGroup = await resourceManager.ActivateContainersResource(tempTemplate as ContainersTemplate, identity, anonymousUserName); break; case AppService.MonitoringTools: if (identity.Issuer == "OrgId") { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, Resources.Server.Error_OrgIdNotSupported)); } else if (identity.Issuer != "MSA") { return(SecurityManager.RedirectToAAD(template.CreateQueryString())); } resourceGroup = await resourceManager.ActivateMonitoringToolsApp(tempTemplate as MonitoringToolsTemplate, identity, anonymousUserName); break; } return(Request.CreateResponse(HttpStatusCode.OK, resourceGroup == null ? null : GetUIResource(resourceGroup))); } catch (Exception ex) { var message = ex is NullReferenceException ? Resources.Server.Error_GeneralErrorMessage : ex.Message; SimpleTrace.Diagnostics.Fatal(ex, AnalyticsEvents.UserGotError, message, Interlocked.Increment(ref _userGotErrorErrorCount)); return(Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable, message)); } }
// ARM public async Task <ResourceGroup> ActivateMobileApp(WebsiteTemplate template, TryWebsitesIdentity userIdentity, string anonymousUserName) { return(await ActivateWebApp(template, userIdentity, anonymousUserName, AppService.Mobile)); }
// ARM public async Task <ResourceGroup> ActivateWebApp(WebsiteTemplate template, TryWebsitesIdentity userIdentity, string anonymousUserName, AppService temp = AppService.Web) { // Start site specific stuff var deploymentType = template != null && template.GithubRepo != null ? DeploymentType.GitWithCsmDeploy : DeploymentType.ZipDeploy; return(await ActivateResourceGroup(userIdentity, temp, deploymentType, async (resourceGroup, inProgressOperation) => { SimpleTrace.Analytics.Information(AnalyticsEvents.UserCreatedSiteWithLanguageAndTemplateName, userIdentity, template, resourceGroup.CsmId); SimpleTrace.TraceInformation("{0}; {1}; {2}; {3}; {4}; {5}; {6}", AnalyticsEvents.OldUserCreatedSiteWithLanguageAndTemplateName, userIdentity.Name, template.Language, template.Name, resourceGroup.ResourceUniqueId, temp.ToString(), anonymousUserName); SimpleTrace.UserCreatedApp(userIdentity, template, resourceGroup, temp); var site = resourceGroup.Sites.First(s => s.IsSimpleWAWSOriginalSite); var rbacTask = resourceGroup.AddResourceGroupRbac(userIdentity.Puid, userIdentity.Email); if (template != null && template.FileName != null) { var credentials = new NetworkCredential(site.PublishingUserName, site.PublishingPassword); var zipManager = new RemoteZipManager(site.ScmUrl + "zip/", credentials, retryCount: 3); Task zipUpload = zipManager.PutZipFileAsync("site/wwwroot", template.GetFullPath()); var vfsManager = new RemoteVfsManager(site.ScmUrl + "vfs/", credentials, retryCount: 3); Task deleteHostingStart = vfsManager.Delete("site/wwwroot/hostingstart.html"); await Task.WhenAll(zipUpload, deleteHostingStart); } else if (template != null && template.GithubRepo != null) { Uri githubRepo; var validUri = Uri.TryCreate(template.GithubRepo, UriKind.Absolute, out githubRepo); if (validUri && (githubRepo.AbsoluteUri.StartsWith("https://github.com/davidebbo-test/") || githubRepo.AbsoluteUri.StartsWith("https://github.com/ahmelsayed-test"))) { //Do CSM template deployment var csmTemplate = new CsmTemplateWrapper { properties = new CsmTemplateProperties { mode = "Incremental", parameters = new { siteName = new CsmTemplateParameter(site.SiteName), hostingPlanName = new CsmTemplateParameter(resourceGroup.ServerFarms.Select(sf => sf.ServerFarmName).FirstOrDefault()), repoUrl = new CsmTemplateParameter(githubRepo.AbsoluteUri) }, templateLink = new CsmTemplateLink { contentVersion = "1.0.0.0", uri = new Uri("https://raw.githubusercontent.com/" + githubRepo.AbsolutePath.Trim('/') + "/master/azuredeploy.json") } } }; await inProgressOperation.CreateDeployment(csmTemplate, block: true); await site.GetKuduDeploymentStatus(block: true); await resourceGroup.Load(); } else if (validUri && githubRepo.AbsoluteUri.StartsWith("https://github.com/")) { //Do Kudu deployment throw new InvalidGithubRepoException(); } else { throw new InvalidGithubRepoException(); } } resourceGroup.Tags[Constants.TemplateName] = template.Name; site.AppSettings["LAST_MODIFIED_TIME_UTC"] = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture); site.AppSettings["SITE_LIFE_TIME_IN_MINUTES"] = SimpleSettings.SiteExpiryMinutes; site.AppSettings["MONACO_EXTENSION_VERSION"] = SimpleSettings.MonacoExtensionVersion; site.AppSettings["WEBSITE_TRY_MODE"] = "1"; if (site.AppSettings.ContainsKey("FUNCTIONS_EXTENSION_VERSION")) { site.AppSettings.Remove("FUNCTIONS_EXTENSION_VERSION"); } if (template.Name.Equals("ASP.NET with Azure Search Site", StringComparison.OrdinalIgnoreCase)) { site.AppSettings["SearchServiceName"] = SimpleSettings.SearchServiceName; site.AppSettings["SearchServiceApiKey"] = AzureSearchHelper.GetApiKey(); } else if (template.Name.Equals("PHP Starter Site", StringComparison.OrdinalIgnoreCase)) { //Enable ZRay await site.EnableZRay(resourceGroup.GeoRegion); } await Task.WhenAll(site.UpdateAppSettings(), resourceGroup.Update()); if (template.GithubRepo == null) { if (site.IsFunctionsContainer) { await site.UpdateConfig(new { properties = new { scmType = "None", httpLoggingEnabled = true } }); } else { await site.UpdateConfig(new { properties = new { scmType = "LocalGit", httpLoggingEnabled = true } }); } } resourceGroup.IsRbacEnabled = await rbacTask; site.FireAndForget(); return resourceGroup; })); }
/// <summary> /// This method parse data from xml in object's variables /// </summary> /// <param name="fileName">name of file where website preferences saved</param> /// <returns></returns> public Template GetConfiguration(string fileName) { Template template = new Template(); string xml = RemoteSave.GetContentFromFtp(fileName, RemoteSave.State.TEMPLATE); var website = WebsiteTemplate.Deserialize(xml); template.CommonInfo.WebsiteName = website.Name; template.CommonInfo.WebsiteUrl = website.URL; template.SearchEngine.DeparturePoint.Tag = website.SearchEngine.DeparturePoint.Tag; template.SearchEngine.DeparturePoint.Attr = website.SearchEngine.DeparturePoint.Attr; template.SearchEngine.DeparturePoint.Name = website.SearchEngine.DeparturePoint.Name; template.SearchEngine.DepartureDate.Tag = website.SearchEngine.DepartureDate.Tag; template.SearchEngine.DepartureDate.Attr = website.SearchEngine.DepartureDate.Attr; template.SearchEngine.DepartureDate.Name = website.SearchEngine.DepartureDate.Name; template.SearchEngine.ArrivalPoint.Tag = website.SearchEngine.ArrivalPoint.Tag; template.SearchEngine.ArrivalPoint.Attr = website.SearchEngine.ArrivalPoint.Attr; template.SearchEngine.ArrivalPoint.Name = website.SearchEngine.ArrivalPoint.Name; template.SearchEngine.ArrivalDate.Tag = website.SearchEngine.ArrivalDate.Tag; template.SearchEngine.ArrivalDate.Attr = website.SearchEngine.ArrivalDate.Attr; template.SearchEngine.ArrivalDate.Name = website.SearchEngine.ArrivalDate.Name; template.SearchEngine.Roundtrip.Tag = website.SearchEngine.Roundtrip.Tag; template.SearchEngine.Roundtrip.Attr = website.SearchEngine.Roundtrip.Attr; template.SearchEngine.Roundtrip.Name = website.SearchEngine.Roundtrip.Name; template.SearchEngine.ConfirmationButton.Tag = website.SearchEngine.ConfirmationButton.Tag; template.SearchEngine.ConfirmationButton.Attr = website.SearchEngine.ConfirmationButton.Attr; template.SearchEngine.ConfirmationButton.Name = website.SearchEngine.ConfirmationButton.Name; template.ResultEngine.DeparturePoint.Tag = website.ResultEngine.DeparturePoint.Tag; template.ResultEngine.DeparturePoint.Attr = website.ResultEngine.DeparturePoint.Attr; template.ResultEngine.DeparturePoint.Name = website.ResultEngine.DeparturePoint.Name; template.ResultEngine.DepartureDate.Tag = website.ResultEngine.DepartureDate.Tag; template.ResultEngine.DepartureDate.Attr = website.ResultEngine.DepartureDate.Attr; template.ResultEngine.DepartureDate.Name = website.ResultEngine.DepartureDate.Name; template.ResultEngine.DepartureTime.Tag = website.ResultEngine.DepartureTime.Tag; template.ResultEngine.DepartureTime.Attr = website.ResultEngine.DepartureTime.Attr; template.ResultEngine.DepartureTime.Name = website.ResultEngine.DepartureTime.Name; template.ResultEngine.ArrivalPoint.Tag = website.ResultEngine.ArrivalPoint.Tag; template.ResultEngine.ArrivalPoint.Attr = website.ResultEngine.ArrivalPoint.Attr; template.ResultEngine.ArrivalPoint.Name = website.ResultEngine.ArrivalPoint.Name; template.ResultEngine.ArrivalDate.Tag = website.ResultEngine.ArrivalDate.Tag; template.ResultEngine.ArrivalDate.Attr = website.ResultEngine.ArrivalDate.Attr; template.ResultEngine.ArrivalDate.Name = website.ResultEngine.ArrivalDate.Name; template.ResultEngine.ArrivalTime.Tag = website.ResultEngine.ArrivalTime.Tag; template.ResultEngine.ArrivalTime.Attr = website.ResultEngine.ArrivalTime.Attr; template.ResultEngine.ArrivalTime.Name = website.ResultEngine.ArrivalTime.Name; // template.ResultEngine.AirlineName.Tag = website.ResultEngine.AirlineName.Tag; template.ResultEngine.AirlineName.Attr = website.ResultEngine.AirlineName.Attr; template.ResultEngine.AirlineName.Name = website.ResultEngine.AirlineName.Name; template.ResultEngine.AirlineNumber.Tag = website.ResultEngine.AirlineNumber.Tag; template.ResultEngine.AirlineNumber.Attr = website.ResultEngine.AirlineNumber.Attr; template.ResultEngine.AirlineNumber.Name = website.ResultEngine.AirlineNumber.Name; template.ResultEngine.Tariff.Tag = website.ResultEngine.Tariff.Tag; template.ResultEngine.Tariff.Attr = website.ResultEngine.Tariff.Attr; template.ResultEngine.Tariff.Name = website.ResultEngine.Tariff.Name; template.ResultEngine.Tax.Tag = website.ResultEngine.Tax.Tag; template.ResultEngine.Tax.Attr = website.ResultEngine.Tax.Attr; template.ResultEngine.Tax.Name = website.ResultEngine.Tax.Name; template.ResultEngine.Fee.Tag = website.ResultEngine.Fee.Tag; template.ResultEngine.Fee.Attr = website.ResultEngine.Fee.Attr; template.ResultEngine.Fee.Name = website.ResultEngine.Fee.Name; template.ResultEngine.Price.Tag = website.ResultEngine.Price.Tag; template.ResultEngine.Price.Attr = website.ResultEngine.Price.Attr; template.ResultEngine.Price.Name = website.ResultEngine.Price.Name; template.AdditionalInfo.ListAllowed.Tag = website.AdditionalInfo.ListAllowed.Tag; template.AdditionalInfo.ListAllowed.Attr = website.AdditionalInfo.ListAllowed.Attr; template.AdditionalInfo.ListAllowed.Name = website.AdditionalInfo.ListAllowed.Name; template.AdditionalInfo.Back.Tag = website.AdditionalInfo.Back.Tag; template.AdditionalInfo.Back.Attr = website.AdditionalInfo.Back.Attr; template.AdditionalInfo.Back.Name = website.AdditionalInfo.Back.Name; template.AdditionalInfo.Detail.Tag = website.AdditionalInfo.Detail.Tag; template.AdditionalInfo.Detail.Attr = website.AdditionalInfo.Detail.Attr; template.AdditionalInfo.Detail.Name = website.AdditionalInfo.Detail.Name; template.AdditionalInfo.ExactlyAirline.Tag = website.AdditionalInfo.ExactlyAirline.Tag; template.AdditionalInfo.ExactlyAirline.Attr = website.AdditionalInfo.ExactlyAirline.Attr; template.AdditionalInfo.ExactlyAirline.Name = website.AdditionalInfo.ExactlyAirline.Name; template.AdditionalInfo.OnlyDirect.Tag = website.AdditionalInfo.OnlyDirect.Tag; template.AdditionalInfo.OnlyDirect.Attr = website.AdditionalInfo.OnlyDirect.Attr; template.AdditionalInfo.OnlyDirect.Name = website.AdditionalInfo.OnlyDirect.Name; return(template); }
public async Task SetConfiguration(Template website) { WebsiteTemplate template = new WebsiteTemplate { Name = website.CommonInfo.WebsiteName, URL = website.CommonInfo.WebsiteUrl }; template.SearchEngine.DeparturePoint.Tag = website.SearchEngine.DeparturePoint.Tag; template.SearchEngine.DeparturePoint.Attr = website.SearchEngine.DeparturePoint.Attr; template.SearchEngine.DeparturePoint.Name = website.SearchEngine.DeparturePoint.Name; template.SearchEngine.DepartureDate.Tag = website.SearchEngine.DepartureDate.Tag; template.SearchEngine.DepartureDate.Attr = website.SearchEngine.DepartureDate.Attr; template.SearchEngine.DepartureDate.Name = website.SearchEngine.DepartureDate.Name; template.SearchEngine.ArrivalPoint.Tag = website.SearchEngine.ArrivalPoint.Tag; template.SearchEngine.ArrivalPoint.Attr = website.SearchEngine.ArrivalPoint.Attr; template.SearchEngine.ArrivalPoint.Name = website.SearchEngine.ArrivalPoint.Name; template.SearchEngine.ArrivalDate.Tag = website.SearchEngine.ArrivalDate.Tag; template.SearchEngine.ArrivalDate.Attr = website.SearchEngine.ArrivalDate.Attr; template.SearchEngine.ArrivalDate.Name = website.SearchEngine.ArrivalDate.Name; template.SearchEngine.Roundtrip.Tag = website.SearchEngine.Roundtrip.Tag; template.SearchEngine.Roundtrip.Attr = website.SearchEngine.Roundtrip.Attr; template.SearchEngine.Roundtrip.Name = website.SearchEngine.Roundtrip.Name; template.SearchEngine.ConfirmationButton.Tag = website.SearchEngine.ConfirmationButton.Tag; template.SearchEngine.ConfirmationButton.Attr = website.SearchEngine.ConfirmationButton.Attr; template.SearchEngine.ConfirmationButton.Name = website.SearchEngine.ConfirmationButton.Name; template.ResultEngine.DeparturePoint.Tag = website.ResultEngine.DeparturePoint.Tag; template.ResultEngine.DeparturePoint.Attr = website.ResultEngine.DeparturePoint.Attr; template.ResultEngine.DeparturePoint.Name = website.ResultEngine.DeparturePoint.Name; template.ResultEngine.DepartureDate.Tag = website.ResultEngine.DepartureDate.Tag; template.ResultEngine.DepartureDate.Attr = website.ResultEngine.DepartureDate.Attr; template.ResultEngine.DepartureDate.Name = website.ResultEngine.DepartureDate.Name; template.ResultEngine.DepartureTime.Tag = website.ResultEngine.DepartureTime.Tag; template.ResultEngine.DepartureTime.Attr = website.ResultEngine.DepartureTime.Attr; template.ResultEngine.DepartureTime.Name = website.ResultEngine.DepartureTime.Name; template.ResultEngine.ArrivalPoint.Tag = website.ResultEngine.ArrivalPoint.Tag; template.ResultEngine.ArrivalPoint.Attr = website.ResultEngine.ArrivalPoint.Attr; template.ResultEngine.ArrivalPoint.Name = website.ResultEngine.ArrivalPoint.Name; template.ResultEngine.ArrivalDate.Tag = website.ResultEngine.ArrivalDate.Tag; template.ResultEngine.ArrivalDate.Attr = website.ResultEngine.ArrivalDate.Attr; template.ResultEngine.ArrivalDate.Name = website.ResultEngine.ArrivalDate.Name; template.ResultEngine.ArrivalTime.Tag = website.ResultEngine.ArrivalTime.Tag; template.ResultEngine.ArrivalTime.Attr = website.ResultEngine.ArrivalTime.Attr; template.ResultEngine.ArrivalTime.Name = website.ResultEngine.ArrivalTime.Name; // template.ResultEngine.AirlineName.Tag = website.ResultEngine.AirlineName.Tag; template.ResultEngine.AirlineName.Attr = website.ResultEngine.AirlineName.Attr; template.ResultEngine.AirlineName.Name = website.ResultEngine.AirlineName.Name; template.ResultEngine.AirlineNumber.Tag = website.ResultEngine.AirlineNumber.Tag; template.ResultEngine.AirlineNumber.Attr = website.ResultEngine.AirlineNumber.Attr; template.ResultEngine.AirlineNumber.Name = website.ResultEngine.AirlineNumber.Name; template.ResultEngine.Tariff.Tag = website.ResultEngine.Tariff.Tag; template.ResultEngine.Tariff.Attr = website.ResultEngine.Tariff.Attr; template.ResultEngine.Tariff.Name = website.ResultEngine.Tariff.Name; template.ResultEngine.Tax.Tag = website.ResultEngine.Tax.Tag; template.ResultEngine.Tax.Attr = website.ResultEngine.Tax.Attr; template.ResultEngine.Tax.Name = website.ResultEngine.Tax.Name; template.ResultEngine.Fee.Tag = website.ResultEngine.Fee.Tag; template.ResultEngine.Fee.Attr = website.ResultEngine.Fee.Attr; template.ResultEngine.Fee.Name = website.ResultEngine.Fee.Name; template.ResultEngine.Price.Tag = website.ResultEngine.Price.Tag; template.ResultEngine.Price.Attr = website.ResultEngine.Price.Attr; template.ResultEngine.Price.Name = website.ResultEngine.Price.Name; template.AdditionalInfo.ListAllowed.Tag = website.AdditionalInfo.ListAllowed.Tag; template.AdditionalInfo.ListAllowed.Attr = website.AdditionalInfo.ListAllowed.Attr; template.AdditionalInfo.ListAllowed.Name = website.AdditionalInfo.ListAllowed.Name; template.AdditionalInfo.Back.Tag = website.AdditionalInfo.Back.Tag; template.AdditionalInfo.Back.Attr = website.AdditionalInfo.Back.Attr; template.AdditionalInfo.Back.Name = website.AdditionalInfo.Back.Name; template.AdditionalInfo.Detail.Tag = website.AdditionalInfo.Detail.Tag; template.AdditionalInfo.Detail.Attr = website.AdditionalInfo.Detail.Attr; template.AdditionalInfo.Detail.Name = website.AdditionalInfo.Detail.Name; template.AdditionalInfo.ExactlyAirline.Tag = website.AdditionalInfo.ExactlyAirline.Tag; template.AdditionalInfo.ExactlyAirline.Attr = website.AdditionalInfo.ExactlyAirline.Attr; template.AdditionalInfo.ExactlyAirline.Name = website.AdditionalInfo.ExactlyAirline.Name; template.AdditionalInfo.OnlyDirect.Tag = website.AdditionalInfo.OnlyDirect.Tag; template.AdditionalInfo.OnlyDirect.Attr = website.AdditionalInfo.OnlyDirect.Attr; template.AdditionalInfo.OnlyDirect.Name = website.AdditionalInfo.OnlyDirect.Name; string xml = template.Serialize(); await RemoteSave.SaveContentToFtp(xml, website.CommonInfo.WebsiteName, RemoteSave.State.TEMPLATE); }
public async Task <HttpResponseMessage> CreateResource(BaseTemplate template) { try { var payload = JsonConvert.SerializeObject(template); SimpleTrace.TraceInformation($"CREATE {template?.AppService} : {payload}. Request Received"); } catch (Exception ex) { SimpleTrace.TraceError($"Error Logging Create Start Information: {ex.Message} -> {ex.StackTrace}"); } var tempTemplate = WebsiteTemplate.EmptySiteTemplate; if (template == null) { template = WebsiteTemplate.EmptySiteTemplate; } else if (template.AppService.Equals(AppService.Function)) { tempTemplate = FunctionTemplate.DefaultFunctionTemplate(template.Name); } else if (template.AppService.Equals(AppService.Containers)) { var containersTemplate = ContainersTemplate.DefaultContainersTemplate(template.Name); containersTemplate.DockerContainer = template.DockerContainer; tempTemplate = containersTemplate; } else if (template.Name != null && !template.Name.Equals("GitHub Repo") && !template.AppService.Equals(AppService.Function)) { var temp = TemplatesManager.GetTemplates() .FirstOrDefault(t => t.Name == template.Name); tempTemplate = WebsiteTemplate.DefaultTemplate(temp.Name, temp.AppService, temp.Language, temp.FileName, template.DockerContainer, temp.MSDeployPackageUrl); } else if (template.Name != null && template.Name.Equals("GitHub Repo")) { tempTemplate = new WebsiteTemplate { AppService = AppService.Web, GithubRepo = template.GithubRepo, Name = template.Name, Language = "GitHub" }; } var identity = HttpContext.Current.User.Identity as TryWebsitesIdentity; var anonymousUserName = SecurityManager.GetAnonymousUserName(new HttpContextWrapper(HttpContext.Current)); try { var resourceManager = await ResourcesManager.GetInstanceAsync(); if ((await resourceManager.GetResourceGroup(identity.Name)) != null) { SimpleTrace.Diagnostics.Fatal(AnalyticsEvents.MoreThanOneError, 1); //This should use the server version of the error, but due to a string bug they are not the same. return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, Resources.Client.Information_YouCantHaveMoreThanOne)); } ResourceGroup resourceGroup = null; SimpleTrace.TraceInformation($"Searching for {tempTemplate?.AppService} {tempTemplate?.Name}."); switch (tempTemplate.AppService) { case AppService.Linux: resourceGroup = await resourceManager.ActivateLinuxResource(tempTemplate, identity, anonymousUserName); break; case AppService.VSCodeLinux: resourceGroup = await resourceManager.ActivateVSCodeLinuxResource(tempTemplate, identity, anonymousUserName); break; case AppService.Web: resourceGroup = await resourceManager.ActivateWebApp(tempTemplate, identity, anonymousUserName); break; case AppService.Api: resourceGroup = await resourceManager.ActivateApiApp(tempTemplate, identity, anonymousUserName); break; case AppService.Function: resourceGroup = await resourceManager.ActivateFunctionApp(tempTemplate, identity, anonymousUserName); break; case AppService.Containers: resourceGroup = await resourceManager.ActivateContainersResource(tempTemplate, identity, anonymousUserName); break; } try { SimpleTrace.TraceInformation($"CREATE {template?.AppService}. Returning { GetUIResource(resourceGroup).SiteName } with template { GetUIResource(resourceGroup).TemplateName } for user {identity.FilteredName}"); } catch (Exception ex) { SimpleTrace.TraceError($"Error Logging Create End Information: {ex.Message} -> {ex.StackTrace}"); } return(Request.CreateResponse(HttpStatusCode.OK, resourceGroup == null ? null : GetUIResource(resourceGroup))); } catch (Exception ex) { var message = ex is NullReferenceException ? Resources.Server.Error_GeneralErrorMessage : ex.Message; SimpleTrace.Diagnostics.Fatal(ex, AnalyticsEvents.UserGotError, message, Interlocked.Increment(ref _userGotErrorErrorCount)); return(Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable, message)); } }