예제 #1
0
        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));
            }
        }
예제 #3
0
 // ARM
 public async Task <ResourceGroup> ActivateMobileApp(WebsiteTemplate template, TryWebsitesIdentity userIdentity, string anonymousUserName)
 {
     return(await ActivateWebApp(template, userIdentity, anonymousUserName, AppService.Mobile));
 }
예제 #4
0
        // 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;
            }));
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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));
            }
        }