// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using Microsoft.Extensions.Options; using Squidex.Domain.Apps.Core; using Squidex.Domain.Apps.Core.Assets; using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Contents; using Squidex.Infrastructure; using IGenericUrlGenerator = Squidex.Hosting.IUrlGenerator; namespace Squidex.Web.Services { public sealed class UrlGenerator : IUrlGenerator { private readonly IAssetFileStore assetFileStore; private readonly IGenericUrlGenerator urlGenerator; private readonly AssetOptions assetOptions; private readonly ContentOptions contentOptions; public UrlGenerator(IGenericUrlGenerator urlGenerator, IAssetFileStore assetFileStore, IOptions assetOptions, IOptions contentOptions) { this.contentOptions = contentOptions.Value; this.assetFileStore = assetFileStore; this.assetOptions = assetOptions.Value; this.urlGenerator = urlGenerator; } public string? AssetThumbnail(NamedId appId, string idOrSlug, AssetType assetType) { if (assetType != AssetType.Image) { return null; } return urlGenerator.BuildUrl($"api/assets/{appId.Name}/{idOrSlug}?width=100&mode=Max"); } public string AssetContentCDNBase() { return contentOptions.CDN ?? string.Empty; } public string AssetContentBase() { return urlGenerator.BuildUrl("api/assets/"); } public string AssetContentBase(string appName) { return urlGenerator.BuildUrl($"api/assets/{appName}/"); } public string AssetContent(NamedId appId, DomainId assetId) { return urlGenerator.BuildUrl($"api/assets/{appId.Name}/{assetId}"); } public string AssetContent(NamedId appId, string idOrSlug) { return urlGenerator.BuildUrl($"api/assets/{appId.Name}/{idOrSlug}"); } public string? AssetSource(NamedId appId, DomainId assetId, long fileVersion) { return assetFileStore.GeneratePublicUrl(appId.Id, assetId, fileVersion, null); } public string AssetsUI(NamedId appId, string? @ref = null) { return urlGenerator.BuildUrl($"app/{appId.Name}/assets", false) + @ref != null ? $"?ref={@ref}" : string.Empty; } public string BackupsUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/settings/backups", false); } public string ClientsUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/settings/clients", false); } public string ContentCDNBase() { return contentOptions.CDN ?? string.Empty; } public string ContentBase() { return urlGenerator.BuildUrl("api/content/", false); } public string ContentsUI(NamedId appId, NamedId schemaId) { return urlGenerator.BuildUrl($"app/{appId.Name}/content/{schemaId.Name}", false); } public string ContentUI(NamedId appId, NamedId schemaId, DomainId contentId) { return urlGenerator.BuildUrl($"app/{appId.Name}/content/{schemaId.Name}/{contentId}/history", false); } public string ContributorsUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/settings/contributors", false); } public string DashboardUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}", false); } public string LanguagesUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/settings/languages", false); } public string PatternsUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/settings/patterns", false); } public string PlansUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/settings/plans", false); } public string RolesUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/settings/roles", false); } public string Root() { return urlGenerator.BuildUrl(); } public string RulesUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/rules", false); } public string SchemasUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/schemas", false); } public string SchemaUI(NamedId appId, NamedId schemaId) { return urlGenerator.BuildUrl($"app/{appId.Name}/schemas/{schemaId.Name}", false); } public string WorkflowsUI(NamedId appId) { return urlGenerator.BuildUrl($"app/{appId.Name}/settings/workflows", false); } public string UI() { return urlGenerator.BuildUrl("app", false); } } }