public async Task <ResourceGroup> ActivateLinuxResource(LinuxTemplate template, TryWebsitesIdentity userIdentity, string anonymousUserName) { return(await ActivateResourceGroup(userIdentity, AppService.Web, true, DeploymentType.CsmDeploy, async (resourceGroup, inProgressOperation) => { SimpleTrace.TraceInformation("{0}; {1}; {2}; {3}; {4}", AnalyticsEvents.OldUserCreatedSiteWithLanguageAndTemplateName, "Linux", template.Name, resourceGroup.ResourceUniqueId, AppService.Web.ToString()); var site = resourceGroup.Sites.First(s => s.IsSimpleWAWSOriginalSite); resourceGroup.Tags[Constants.TemplateName] = template.Name; resourceGroup = await resourceGroup.Update(); if (template?.MSDeployPackageUrl != null) { try { 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.MSDeployPackageUrl); var vfsManager = new RemoteVfsManager(site.ScmUrl + "vfs/", credentials, retryCount: 3); Task deleteHostingStart = vfsManager.Delete("site/wwwroot/hostingstart.html"); await Task.WhenAll(zipUpload, deleteHostingStart); } catch (Exception ex) { SimpleTrace.TraceError(ex.Message + ex.StackTrace); } } if (template.Name.Equals(Constants.NodeJSWebAppLinuxTemplateName, StringComparison.OrdinalIgnoreCase)) { await site.UpdateConfig(new { properties = new { linuxFxVersion = "NODE|6.10", appCommandLine = "process.json" } }); } Util.FireAndForget($"{resourceGroup.Sites.FirstOrDefault().HostName}"); Util.FireAndForget($"{resourceGroup.Sites.FirstOrDefault().ScmHostName}"); var rbacTask = resourceGroup.AddResourceGroupRbac(userIdentity.Puid, userIdentity.Email); resourceGroup.IsRbacEnabled = await rbacTask; return resourceGroup; })); }
public async Task <HttpResponseMessage> CreateResource(BaseTemplate template) { if (template == null) { template = WebsiteTemplate.EmptySiteTemplate; } else if (template.AppService.Equals(AppService.Function)) { template = FunctionTemplate.DefaultFunctionTemplate(template.Name); } else if (template.AppService.Equals(AppService.Web) && template.IsLinux) { template = LinuxTemplate.GetLinuxTemplate(template.Name); } else if (template.AppService.Equals(AppService.Containers)) { var containersTemplate = ContainersTemplate.GetContainersTemplate(template.Name); containersTemplate.DockerContainer = template.DockerContainer; template = containersTemplate; } else if (template.Name != null && !template.Name.Equals("Github Repo") && !template.AppService.Equals(AppService.Function)) { template = TemplatesManager.GetTemplates() .FirstOrDefault(t => t.Name == template.Name && t.AppService == template.AppService); template = template ?? WebsiteTemplate.EmptySiteTemplate; } else if (template.Name != null && template.Name.Equals("Github Repo")) { template = 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 (template.AppService) { case AppService.Web: if (template.IsLinux) { 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.ActivateLinuxResource(template as LinuxTemplate, identity, anonymousUserName); } else { resourceGroup = await resourceManager.ActivateWebApp(template as WebsiteTemplate, identity, anonymousUserName); } break; case AppService.Api: resourceGroup = await resourceManager.ActivateApiApp(template as WebsiteTemplate, 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(template.CreateQueryString())); } resourceGroup = await resourceManager.ActivateLogicApp(template as LogicTemplate, identity, anonymousUserName); break; case AppService.Function: resourceGroup = await resourceManager.ActivateFunctionApp(template as FunctionTemplate, 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(template 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(template 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)); } }