public async Task <ActionResult <BoolResult> > Delete([FromBody] DeleteRequest request)
        {
            if (!await _authManager.HasAppPermissionsAsync(MenuUtils.AppPermissions.SettingsSitesTemplates))
            {
                return(Unauthorized());
            }

            var caching = new CacheUtils(_cacheManager);
            var manager = new SiteTemplateManager(_pathManager, _databaseManager, caching);

            if (!string.IsNullOrEmpty(request.DirectoryName))
            {
                manager.DeleteSiteTemplate(request.DirectoryName);
                await _authManager.AddAdminLogAsync("删除站点模板", $"站点模板:{request.DirectoryName}");
            }
            if (!string.IsNullOrEmpty(request.FileName))
            {
                manager.DeleteZipSiteTemplate(request.FileName);
                await _authManager.AddAdminLogAsync("删除未解压站点模板", $"站点模板:{request.FileName}");
            }

            return(new BoolResult
            {
                Value = true
            });
        }
示例#2
0
        public async Task <ActionResult <BoolResult> > SaveData([FromBody] SaveRequest request)
        {
            if (!await _authManager.HasAppPermissionsAsync(MenuUtils.AppPermissions.SettingsSites))
            {
                return(Unauthorized());
            }

            var site = await _siteRepository.GetAsync(request.SiteId);

            var siteTemplatePath         = _pathManager.GetSiteTemplatesPath(request.TemplateDir);
            var siteContentDirectoryPath = _pathManager.GetSiteTemplateMetadataPath(siteTemplatePath, DirectoryUtils.SiteFiles.SiteTemplates.SiteContent);

            var caching      = new CacheUtils(_cacheManager);
            var exportObject = new ExportObject(_pathManager, _databaseManager, caching, site);
            await exportObject.ExportSiteContentAsync(siteContentDirectoryPath, request.IsSaveContents, request.IsSaveAllChannels, request.CheckedChannelIds);

            await SiteTemplateManager.ExportSiteToSiteTemplateAsync(_pathManager, _databaseManager, caching, site, request.TemplateDir);

            var siteTemplateInfo = new SiteTemplateInfo
            {
                SiteTemplateName = request.TemplateName,
                PicFileName      = string.Empty,
                WebSiteUrl       = request.WebSiteUrl,
                Description      = request.Description
            };
            var xmlPath = _pathManager.GetSiteTemplateMetadataPath(siteTemplatePath,
                                                                   DirectoryUtils.SiteFiles.SiteTemplates.FileMetadata);

            XmlUtils.SaveAsXml(siteTemplateInfo, xmlPath);

            return(new BoolResult
            {
                Value = true,
            });
        }
        public async Task <ActionResult <GetResult> > Get()
        {
            if (!await _authManager.HasAppPermissionsAsync(MenuUtils.AppPermissions.SettingsSitesAdd))
            {
                return(Unauthorized());
            }

            var caching       = new CacheUtils(_cacheManager);
            var manager       = new SiteTemplateManager(_pathManager, _databaseManager, caching);
            var siteTemplates = manager.GetSiteTemplateInfoList();

            var tableNameList = await _siteRepository.GetSiteTableNamesAsync();

            var rootExists = await _siteRepository.GetSiteByIsRootAsync() != null;

            var sites = await _siteRepository.GetCascadeChildrenAsync(0);

            sites.Insert(0, new Cascade <int>
            {
                Value = 0,
                Label = "<无上级站点>"
            });

            var siteTypes = _settingsManager.GetSiteTypes();

            return(new GetResult
            {
                SiteTypes = siteTypes,
                SiteTemplates = siteTemplates,
                RootExists = rootExists,
                Sites = sites,
                TableNameList = tableNameList,
                Guid = StringUtils.GetShortGuid(false)
            });
        }
 public SiteSettingsDataController(PageManager pageManager, SiteContext siteContext,
                                   SiteManager siteManager, ILogger <SecurityPoolManager> logger,
                                   ClientManager clientManager, IOptions <RequestLocalizationOptions> localizationOptions,
                                   SiteTemplateManager templateManager,
                                   DirectoryManager directoryManager) : base(logger)
 {
     _pageManager         = pageManager;
     _siteManager         = siteManager;
     _clientManager       = clientManager;
     _localizationOptions = localizationOptions;
     _directoryManager    = directoryManager;
 }
        public async Task <ActionResult <SaveSettingsResult> > SaveSettings([FromBody] SaveRequest request)
        {
            if (!await _authManager.HasAppPermissionsAsync(MenuUtils.AppPermissions.SettingsSites))
            {
                return(Unauthorized());
            }

            var caching = new CacheUtils(_cacheManager);
            var manager = new SiteTemplateManager(_pathManager, _databaseManager, caching);

            if (manager.IsSiteTemplateDirectoryExists(request.TemplateDir))
            {
                return(this.Error("站点模板文件夹已存在,请更换站点模板文件夹!"));
            }

            var site = await _siteRepository.GetAsync(request.SiteId);

            var sitePath = await _pathManager.GetSitePathAsync(site);

            var directoryNames = DirectoryUtils.GetDirectoryNames(sitePath);

            var directories = new List <string>();
            var siteDirList = await _siteRepository.GetSiteDirsAsync(0);

            foreach (var directoryName in directoryNames)
            {
                var isSiteDirectory = false;
                if (site.Root)
                {
                    foreach (var siteDir in siteDirList)
                    {
                        if (StringUtils.EqualsIgnoreCase(siteDir, directoryName))
                        {
                            isSiteDirectory = true;
                        }
                    }
                }
                if (!isSiteDirectory && !_pathManager.IsSystemDirectory(directoryName))
                {
                    directories.Add(directoryName);
                }
            }

            var files = DirectoryUtils.GetFileNames(sitePath);

            return(new SaveSettingsResult
            {
                Directories = directories,
                Files = files
            });
        }
示例#6
0
        private bool SaveSiteStyles(out string errorMessage)
        {
            errorMessage = string.Empty;
            try
            {
                SiteTemplateManager.ExportSiteToSiteTemplate(SiteInfo, TbSiteTemplateDir.Text, AuthRequest.AdminName);

                return(true);
            }
            catch (Exception e)
            {
                errorMessage = e.Message;
                return(false);
            }
        }
示例#7
0
        private bool SaveSiteStyles(out string errorMessage)
        {
            errorMessage = string.Empty;
            try
            {
                SiteTemplateManager.ExportPublishmentSystemToSiteTemplate(PublishmentSystemInfo, TbSiteTemplateDir.Text);

                return(true);
            }
            catch (Exception e)
            {
                errorMessage = e.Message;
                return(false);
            }
        }
示例#8
0
        private bool SaveSiteStyles(out string errorMessage)
        {
            errorMessage = string.Empty;
            try
            {
                SiteTemplateManager.ExportSiteToSiteTemplate(SiteInfo, TbSiteTemplateDir.Text);

                return true;
            }
            catch (Exception e)
            {
                errorMessage = e.Message;
                return false;
            }
        }
示例#9
0
        private async Task <ListResult> GetListResultAsync()
        {
            var caching              = new CacheUtils(_cacheManager);
            var manager              = new SiteTemplateManager(_pathManager, _databaseManager, caching);
            var siteTemplates        = manager.GetSiteTemplateInfoList();
            var siteTemplateInfoList = new List <SiteTemplateInfo>();

            foreach (var siteTemplate in siteTemplates)
            {
                var directoryPath = _pathManager.GetSiteTemplatesPath(siteTemplate.DirectoryName);
                var dirInfo       = new DirectoryInfo(directoryPath);
                if (string.IsNullOrEmpty(siteTemplate.SiteTemplateName))
                {
                    continue;
                }

                var filePath = _pathManager.GetSiteTemplatesPath(dirInfo.Name + ".zip");
                siteTemplate.FileExists = FileUtils.IsFileExists(filePath);
                siteTemplateInfoList.Add(siteTemplate);
            }

            var fileNames    = manager.GetZipSiteTemplateList();
            var fileNameList = new List <string>();

            foreach (var fileName in fileNames)
            {
                if (DirectoryUtils.IsDirectoryExists(
                        _pathManager.GetSiteTemplatesPath(PathUtils.GetFileNameWithoutExtension(fileName))))
                {
                    continue;
                }
                var filePath = _pathManager.GetSiteTemplatesPath(fileName);
                var fileInfo = new FileInfo(filePath);
                fileNameList.Add(fileInfo.Name);
            }

            var siteTemplateUrl   = StringUtils.TrimSlash(_pathManager.GetSiteTemplatesUrl(string.Empty));
            var siteAddPermission =
                await _authManager.HasAppPermissionsAsync(MenuUtils.AppPermissions.SettingsSitesAdd);

            return(new ListResult
            {
                SiteTemplateInfoList = siteTemplateInfoList,
                FileNameList = fileNameList,
                SiteTemplateUrl = siteTemplateUrl,
                SiteAddPermission = siteAddPermission
            });
        }
 public SiteMasterPageController
 (
     PageSecurityService pageSecurity,
     PageMasterManager masterPageManager,
     ContentManager widgetManager,
     SiteTemplateManager templateManager,
     SiteContext siteContext,
     IContextAccessor <UserContext> userContextAccessor
 )
     : base()
 {
     _pageSecurity        = pageSecurity;
     _masterPageManager   = masterPageManager;
     _templateManager     = templateManager;
     _siteContext         = siteContext;
     _contentManager      = widgetManager;
     _userContextAccessor = userContextAccessor;
 }
示例#11
0
        public SiteContextResolver
        (
            SiteManager siteManager,
            SiteTemplateManager templateManager,
            ClientManager clientManager,
            IOptions <SiteOptions> siteOptions,
            IMemoryCache cache,
            ILoggerFactory loggerFactory

        ) : base(cache, loggerFactory)
        {
            _siteOptions     = siteOptions;
            _siteManager     = siteManager;
            _clientManager   = clientManager;
            _templateManager = templateManager;

            _logger = loggerFactory.CreateLogger("SiteContextResolver");
        }
        public async Task <ActionResult <IntResult> > Submit([FromBody] SubmitRequest request)
        {
            if (!await _authManager.HasAppPermissionsAsync(MenuUtils.AppPermissions.SettingsSitesAdd))
            {
                return(Unauthorized());
            }

            if (!request.Root)
            {
                if (_pathManager.IsSystemDirectory(request.SiteDir))
                {
                    return(this.Error("文件夹名称不能为系统文件夹名称,请更改文件夹名称!"));
                }
                if (!DirectoryUtils.IsDirectoryNameCompliant(request.SiteDir))
                {
                    return(this.Error("文件夹名称不符合系统要求,请更改文件夹名称!"));
                }
                var sitePath = await _pathManager.GetSitePathAsync(request.ParentId);

                var directories = DirectoryUtils.GetDirectoryNames(sitePath);
                if (ListUtils.ContainsIgnoreCase(directories, request.SiteDir))
                {
                    return(this.Error("已存在相同的文件夹,请更改文件夹名称!"));
                }
                var list = await _siteRepository.GetSiteDirsAsync(request.ParentId);

                if (ListUtils.ContainsIgnoreCase(list, request.SiteDir))
                {
                    return(this.Error("已存在相同的站点文件夹,请更改文件夹名称!"));
                }
            }

            var channelInfo = new Channel();

            channelInfo.ChannelName          = channelInfo.IndexName = "首页";
            channelInfo.ParentId             = 0;
            channelInfo.ContentModelPluginId = string.Empty;

            var tableName = string.Empty;

            if (StringUtils.EqualsIgnoreCase(request.SiteType, Types.SiteTypes.Web) || StringUtils.EqualsIgnoreCase(request.SiteType, Types.SiteTypes.Wx))
            {
                if (request.TableRule == TableRule.Choose)
                {
                    tableName = request.TableChoose;
                }
                else if (request.TableRule == TableRule.HandWrite)
                {
                    tableName = request.TableHandWrite;

                    if (!await _settingsManager.Database.IsTableExistsAsync(tableName))
                    {
                        await _contentRepository.CreateContentTableAsync(tableName, _contentRepository.GetTableColumns(tableName));
                    }
                    else
                    {
                        await _settingsManager.Database.AlterTableAsync(tableName, _contentRepository.GetTableColumns(tableName));
                    }
                }
            }

            var adminId = _authManager.AdminId;

            var siteId = await _siteRepository.InsertSiteAsync(channelInfo, new Site
            {
                SiteName  = request.SiteName,
                SiteType  = request.SiteType,
                SiteDir   = request.SiteDir,
                TableName = tableName,
                ParentId  = request.ParentId,
                Root      = request.Root
            }, adminId);

            if (string.IsNullOrEmpty(tableName))
            {
                tableName = await _contentRepository.CreateNewContentTableAsync();

                await _siteRepository.UpdateTableNameAsync(siteId, tableName);
            }

            if (await _authManager.IsSiteAdminAsync() && !await _authManager.IsSuperAdminAsync())
            {
                var siteIdList = await _authManager.GetSiteIdsAsync() ?? new List <int>();

                siteIdList.Add(siteId);
                var adminInfo = await _administratorRepository.GetByUserIdAsync(adminId);

                await _administratorRepository.UpdateSiteIdsAsync(adminInfo, siteIdList);
            }

            var caching = new CacheUtils(_cacheManager);
            var site    = await _siteRepository.GetAsync(siteId);

            caching.SetProcess(request.Guid, "任务初始化...");

            if (request.CreateType == "local")
            {
                var manager = new SiteTemplateManager(_pathManager, _databaseManager, caching);
                await manager.ImportSiteTemplateToEmptySiteAsync(site, request.LocalDirectoryName, request.IsImportContents, request.IsImportTableStyles, adminId, request.Guid);

                caching.SetProcess(request.Guid, "生成站点页面...");
                await _createManager.CreateByAllAsync(site.Id);

                caching.SetProcess(request.Guid, "清除系统缓存...");
                _cacheManager.Clear();
            }
            else if (request.CreateType == "cloud")
            {
                caching.SetProcess(request.Guid, "开始下载模板压缩包,可能需要几分钟,请耐心等待...");

                var filePath = _pathManager.GetSiteTemplatesPath($"T_{request.CloudThemeName}.zip");
                FileUtils.DeleteFileIfExists(filePath);
                var downloadUrl = CloudUtils.Dl.GetThemesDownloadUrl(request.CloudThemeUserName, request.CloudThemeName);
                WebClientUtils.Download(downloadUrl, filePath);

                caching.SetProcess(request.Guid, "模板压缩包下载成功,开始解压缩,可能需要几分钟,请耐心等待...");

                var siteTemplateDir = $"T_{request.CloudThemeName}";
                var directoryPath   = _pathManager.GetSiteTemplatesPath(siteTemplateDir);
                DirectoryUtils.DeleteDirectoryIfExists(directoryPath);
                _pathManager.ExtractZip(filePath, directoryPath);

                caching.SetProcess(request.Guid, "模板压缩包解压成功,正在导入数据...");

                var manager = new SiteTemplateManager(_pathManager, _databaseManager, caching);
                await manager.ImportSiteTemplateToEmptySiteAsync(site, siteTemplateDir, request.IsImportContents, request.IsImportTableStyles, adminId, request.Guid);

                caching.SetProcess(request.Guid, "生成站点页面...");
                await _createManager.CreateByAllAsync(site.Id);

                caching.SetProcess(request.Guid, "清除系统缓存...");
                _cacheManager.Clear();
            }

            return(new IntResult
            {
                Value = siteId
            });
        }
示例#13
0
 public SiteController(SiteTemplateManager siteTemplateManager, ImportedSiteManager importedSiteManager)
 {
     _siteTemplateManager = siteTemplateManager;
     _importedSiteManager = importedSiteManager;
 }
示例#14
0
        public static async Task <(bool Success, string name, string filePath)> PackageAsync(IPathManager pathManager, ICacheManager cacheManager, IDatabaseManager databaseManager, string directory, bool isOverride)
        {
            var site = await databaseManager.SiteRepository.GetSiteByDirectoryAsync(directory);

            var sitePath = await pathManager.GetSitePathAsync(site);

            if (site == null || !DirectoryUtils.IsDirectoryExists(sitePath))
            {
                await WriteUtils.PrintErrorAsync($@"Invalid site directory path: ""{directory}""");

                return(false, null, null);
            }

            var   readme = string.Empty;
            Theme theme  = null;

            var readmePath = PathUtils.Combine(sitePath, "README.md");

            if (FileUtils.IsFileExists(readmePath))
            {
                readme = FileUtils.ReadText(readmePath);
                var yaml = MarkdownUtils.GetYamlFrontMatter(readme);
                if (!string.IsNullOrEmpty(yaml))
                {
                    readme = MarkdownUtils.RemoveYamlFrontMatter(readme);
                    theme  = YamlUtils.Deserialize <Theme>(yaml);
                }
            }

            var writeReadme = false;

            if (theme == null || string.IsNullOrEmpty(theme.Name) || string.IsNullOrEmpty(theme.CoverUrl))
            {
                writeReadme = true;
                theme       = new Theme
                {
                    Name            = ReadUtils.GetString("name:"),
                    CoverUrl        = ReadUtils.GetString("cover image url:"),
                    Summary         = ReadUtils.GetString("repository url:"),
                    Tags            = ReadUtils.GetStringList("tags:"),
                    ThumbUrls       = ReadUtils.GetStringList("thumb image urls:"),
                    Compatibilities = ReadUtils.GetStringList("compatibilities:"),
                    Price           = ReadUtils.GetYesNo("is free?") ? 0 : ReadUtils.GetDecimal("price:"),
                };
            }

            if (writeReadme)
            {
                readme = @$ "---
{YamlUtils.Serialize(theme)}
---

" + readme;
                FileUtils.WriteText(readmePath, readme);
            }

            var packageName = "T_" + theme.Name.Replace(" ", "_");
            var packagePath = pathManager.GetSiteTemplatesPath(packageName);
            var fileName    = packageName + ".zip";
            var filePath    = pathManager.GetSiteTemplatesPath(fileName);

            if (!isOverride && FileUtils.IsFileExists(filePath))
            {
                return(true, theme.Name, filePath);
            }

            FileUtils.DeleteFileIfExists(filePath);
            DirectoryUtils.DeleteDirectoryIfExists(packagePath);

            await Console.Out.WriteLineAsync($"Theme name: {theme.Name}");

            await Console.Out.WriteLineAsync($"Theme folder: {packagePath}");

            await Console.Out.WriteLineAsync("Theme packaging...");

            var caching = new CacheUtils(cacheManager);
            var manager = new SiteTemplateManager(pathManager, databaseManager, caching);

            if (manager.IsSiteTemplateDirectoryExists(packageName))
            {
                manager.DeleteSiteTemplate(packageName);
            }

            var directoryNames = DirectoryUtils.GetDirectoryNames(sitePath);

            var directories = new List <string>();
            var siteDirList = await databaseManager.SiteRepository.GetSiteDirsAsync(0);

            foreach (var directoryName in directoryNames)
            {
                var isSiteDirectory = false;
                if (site.Root)
                {
                    foreach (var siteDir in siteDirList)
                    {
                        if (StringUtils.EqualsIgnoreCase(siteDir, directoryName))
                        {
                            isSiteDirectory = true;
                        }
                    }
                }
                if (!isSiteDirectory && !pathManager.IsSystemDirectory(directoryName))
                {
                    directories.Add(directoryName);
                }
            }

            var files = DirectoryUtils.GetFileNames(sitePath);

            var exportObject = new ExportObject(pathManager, databaseManager, caching, site);
            await exportObject.ExportFilesToSiteAsync(packagePath, true, directories, files, true);

            var siteContentDirectoryPath = pathManager.GetSiteTemplateMetadataPath(packagePath, DirectoryUtils.SiteFiles.SiteTemplates.SiteContent);

            await exportObject.ExportSiteContentAsync(siteContentDirectoryPath, true, true, new List <int>());

            await SiteTemplateManager.ExportSiteToSiteTemplateAsync(pathManager, databaseManager, caching, site, packageName);

            var siteTemplateInfo = new SiteTemplateInfo
            {
                SiteTemplateName = theme.Name,
                PicFileName      = string.Empty,
                WebSiteUrl       = string.Empty,
                Description      = string.Empty
            };
            var xmlPath = pathManager.GetSiteTemplateMetadataPath(packagePath,
                                                                  DirectoryUtils.SiteFiles.SiteTemplates.FileMetadata);

            XmlUtils.SaveAsXml(siteTemplateInfo, xmlPath);

            pathManager.CreateZip(filePath, packagePath);

            return(true, theme.Name, filePath);
        }
示例#15
0
 public SiteTemplateController(SiteTemplateManager siteTemplateManager)
 {
     SiteTemplateManager = siteTemplateManager;
 }