Skip to main content

AppSettings.config

The ~/Configuration/AppSettings.config file allows you to configure the location of asset folders, the state file storage, and the security model.

The following snippet shows application parameters of Customer's Canvas, which you can set up in either the appSettings section of Web.config or the separate ~/Configuration/AppSettings.config, and their values. You can click a key to navigate to its description.

<appSettings>  <!-- Paths -->  <add key="DesignFolder" value="..\assets\designs" />  <add key="MockupFolder" value="..\assets\mockups" />  <add key="WatermarkFolder" value="..\assets\helpers" />  <add key="DesignImagesFolder" value="..\assets\helpers" />  <add key="PublicGalleryFolder" value="..\assets\images" />  <add key="UserDataFolder" value="..\userdata" />

 <!-- Storage -->  <add key="StorageRootPath" value="" />  <add key="PreloadFilesInMemory" value="true" />  <add key="UseResourcesProtectorForMultipleInstanses" value="false" />

 <!-- Asset Storage -->  <add key="AssetStorageEndpoint" value="" />  <add key="AssetStorageApiKey" value="" />  <add key="AssetStorageTenantId" value="" />  <add key="AssetStorageRetryCount" value="3" />  <add key="AssetProcessorEndpoint" value="" />  <add key="AssetProcessorApiKey" value="" />  <add key="AssetStorageStates" value="False" />  <add key="AssetStoragePublicGallery" value="False" />  <add key="AssetStorageFonts" value="False" />  <add key="AssetStorageFontsPath" value="" />  <add key="AssetStorageFontsCheckInterval" value="60" />  <add key="AssetStorageTemplates" value="False" />  <add key="AssetStorageImages" value="False" />  <add key="MessageBus:RabbitMQ" value="" />  <add key="MessageBus:AzureServiceBus" value="" />

 <!-- State file management -->  <add key="MasterUserId" value="masteruser" />  <add key="DefaultUserId" value="default" />  <add key="StateFileStorageEnabled" value="False" />  <add key="AnonymousModeEnabled" value="False" />  <add key="DemoModeEnabled" value="False" />  <add key="HiResControllerStoreDataInState" value="True" />

 <!-- Font management -->  <add key="FontSubstitutionEnabled" value="False" />  <add key="SubstitutionFontPostScriptName" value="Roboto-Regular" />  <add key="DefaultFontPostScriptName" value="Roboto-Regular" />  <add key="LoadFontListAsPostScriptNames" value="True" />  <add key="Hinting" value="Auto" />

 <!-- Editor features -->  <add key="DefaultPlaceholderCoverModeEnabled" value="False" />

 <!-- Rendering -->  <add key="RasterizeVectorInSmartFrame" value="False" />  <add key="ProofImageDownloadEnabled" value="False" />  <add key="SepiaAlgorithm" value="MoreBrown" />  <add key="AppUrl" value="/" />  <add key="DisableHiResOutputEndpoint" value="False" />  <add key="AutoTargetDevicePreviewMode" value="True" />

 <!-- Security -->  <add key="ApiSecurityKey" value="" />  <add key="UnsafeHttpWebApiEnabled" value="" />  <add key="SecureModeEnabled" value="True" />  <add key="CorsAllowOriginDomains" value="*" />  <add key="CorsAllowRequestHeaders" value="" />  <add key="CustomersCanvasLicenseKey" value="" />  <add key="IgnoreSslVerification" value="False" />

 <!-- Troubleshooting and maintenance -->  <add key="LogCleanUpInterval" value="60" />  <add key="LogLifetimeToArchiving" value="20160" />  <add key="LogLifetimeToRemoving" value="" />  <add key="IssueNotificationEmail" value="" />  <add key="DebugScriptModeEnabled" value="" />

 <!-- External state storage -->  <add key="ExternalStatePushUrl" value="https://example.com;" />  <add key="ExternalStatePullUrl" value="https://example.com;" />  <add key="ExternalStateDeleteUrl" value="https://example.com;" />  <add key="ExternalStateSecurityKey" value="UniqueSecurityKey" />  <add key="ExternalStateHeadRequestEnabled" value="True" />

 <!-- Asset Manager -->  <add key="AllCategoryName" value="all" />  <add key="RootCategoryName" value="root" />  <add key="OnlyFirstLevelSubfoldersInitialization" value="false" />

 <!-- Concurrency -->  <add key="MaxConcurrentRenderingTasks" value="12" />  <add key="MaxConcurrentStateIOTasks" value="4" />

 <!-- Authorization -->  <add key="AuthorizationScheme" value="DatabaseTokens" />  <add key="IssuerUrl" value="" />  <add key="PublicKeyFilePath" value="" />  <add key="TokenServiceEndpoint" value="https://localhost/token-service" />  <add key="TokenServiceApiKey" value="" />  <add key="NLog.Loki.Endpoint" value="" /> </appSettings>

note

All parameters defining paths are either relative or absolute. Relative paths to folders are specified from your site root and start with ~/ (for example, ~/userdata). Absolute paths are complete ones; they start either with a drive letter (for example, C:\) or \\ for network locations. When you use absolute paths to external folders, make sure that the user account, under which Customer's Canvas runs in ASP.NET/IIS, has the read/write access to the remote folders.

If for some reasons the Postscript names are misspelled, then Customer's Canvas adds Arial to the editor's font list and uses this font for substitutions and new text elements.

Let's look at these parameters in more detail.

Paths

NameDescriptionPossible values
DesignFolderThe folder path where design templates are stored. The default value is ..\assets\designs.folder path
MockupFolderThe folder path where product mockups are stored. The default value is ..\assets\mockups.folder path
WatermarkFolderThe folder path where watermark images are stored. The default value is ..\assets\helpers.folder path
DesignImagesFolderThe folder path where the <BGIMG> images are stored. The default value is ..\assets\helpers.folder path
PublicGalleryFolderThe folder path where public images are stored. The default value is ..\assets\images.folder path
UserDataFolderThe folder path where the user data is stored. The default value is ..\userdata.folder path

Storage

NameDescriptionPossible values
StorageRootPathThe root folder path for the file-based storage. Can be a local folder or a network path. By default, an empty string means ~App_Data/Storage.""
PreloadFilesInMemoryWhen true, files up to 100 MB are loaded into MemoryStream instead of FileStream for faster access. This parameter affects memory consumption: for small data volumes, you can achieve a ~15% performance improvement, but at the cost of increased memory usage. Default: true.True, False
UseResourcesProtectorForMultipleInstansesWhen true, a file-based resource protector is used. When false, only InMemoryProtector is used. This parameter is meaningful only when a single resource storage is shared by multiple Design Editor instances. Default: false.True, False

Asset Storage

NameDescriptionPossible values
AssetStorageEndpointThe URL that links to your Asset Storage service. For example, "https://assetstorage.example.com".string
AssetStorageApiKeyThe API key you have set in your Asset Storage configuration. This value is an arbitrary string (a unique value).string
AssetStorageTenantIdIf you are using Customer's Canvas in single-tenant mode, always set 1. Otherwise, specify the ID of a tenant where you want to connect it.string
AssetStorageRetryCountEnsures that the data will be received from the storage even if there are temporary network issues. The default value is 3.number
AssetProcessorEndpointThe URL that links to your Asset Processor service. For example, "https://assetprocessor.example.com".string
AssetProcessorApiKeyThe API key you have set in your Asset Processor configuration. This value is an arbitrary string (a unique value).string
AssetStorageStatesIf True, saves state files to and loads them from the Asset Storage. The default value is False.True, False
AssetStoragePublicGalleryIf True, enables receiving public images from the Asset Storage. The default value is False.True, False
AssetStorageFontsIf True, enables receiving fonts from the Asset Storage. The default value is False.True, False
AssetStorageFontsPathThe folder path where fonts are stored. By default, they are stored in the "Fonts" folder.folder path
AssetStorageFontsCheckIntervalThe timeout to check for new fonts in storage, in seconds. The default value is 60.number
AssetStorageTemplatesIf True, enables receiving product templates and mockups from the Asset Storage. The default value is False.True, False
AssetStorageImagesIf True, enables receiving images from the Asset Storage. The default value is False.True, False
MessageBus:RabbitMQThe RabbitMQ connection string to notify of changing assets. Format: "Host=...;VirtualHost=...;Username=...;Password=...".string
MessageBus:AzureServiceBusThe AzureServiceBus connection string to notify of changing assets. Format: "Endpoint=...;SharedAccessKeyName=...;SharedAccessKey=...".string

State file management

NameDescriptionPossible values
MasterUserIdThe identifier of the master user. Templates and images that belong to the master user can be used by any user. The default value is masteruser.string
DefaultUserIdThe identifier of the default user. The default value is default.string
StateFileStorageEnabledEnables the space-saving mode of state files. In this mode, state files are saved in the .sto format. All images are stored in the ..\userdata\StateFileCache\ folder. The default value is False.True, False
AnonymousModeEnabledEnables the anonymous site mode. The default value is False. For more details, see the Demo mode topic.True, False
DemoModeEnabledEnables the demonstration mode. The default value is False. For more details, see the Demo mode topic.True, False
HiResControllerStoreDataInStateIf True, the HiRes controller saves personalization data in state files when rendering. If False, the state file contains personalized product copies but not the metadata. Default: True. See StoreDataInState.True, False

Font management

NameDescriptionPossible values
FontSubstitutionEnabledEnables font substitution. If True, substitutes missing fonts instead of throwing an exception. See the Font list article. The default value is False.True, False
SubstitutionFontPostScriptNameThe PostScript name of the font to substitute a missing font with. By default, it is the DefaultFontPostScriptName value.PostScript font name
DefaultFontPostScriptNameThe PostScript name of the default font used for any new text. The default value is Roboto-Regular.PostScript font name
LoadFontListAsPostScriptNamesIf True, allows using PostScript names in the FontList config. If False, reads names as font families. Default: True.True, False
HintingSpecifies whether to use font hinting. Enabled turns it on, Disabled turns it off. Auto does not force hinting if it is disabled in the font. Default: Auto.Enabled, Disabled, Auto

Editor features

NameDescriptionPossible values
DefaultPlaceholderCoverModeEnabledEnables the cover mode for image placeholders by default without using the <PACM> marker. The default value is False.True, False

Rendering

NameDescriptionPossible values
RasterizeVectorInSmartFrameDefines how to import PDF and AI vector graphics from Photoshop templates. If True, Customer's Canvas rasterizes images from smart frames, otherwise, they are loaded in a vector form. The <RVC> marker overrides this parameter. The default value is False.True, False
ProofImageDownloadEnabledEnables downloading of proof images instead of opening them in a tab when opening a proof image link in a browser. The default value is False.True, False
SepiaAlgorithmSets either a standard Sepia algorithm or a custom algorithm giving a more brown tone. MoreBrown is based on Standard with modified hue, contrast, and saturation. By default, the MoreBrown algorithm is enabled. Without this parameter, the Standard algorithm is applied.Standard, MoreBrown
AppUrlDefines server's URLs that appear in links to proof images and high-resolution outputs.string
DisableHiResOutputEndpointDisables the endpoint that generates high resolution print files. By default, the rendering is enabled, and this value is False.True, False
AutoTargetDevicePreviewModeEnables preview of CMYK colors on the canvas and proof images and uses the profile specified in hiResOutputDestinationColorProfileName for color conversion. By default, this preview mode is enabled, and this value is True.True, False

Security

NameDescriptionPossible values
ApiSecurityKeyEnables access to the Web API. You have to include this key in every header of HTTPS requests as the X-CustomersCanvasAPIKey field. The Web API works if the value of this key passed in a request matches the value defined in web.config. The value is an arbitrary string. For more details, refer to the Authentication topic.string
UnsafeHttpWebApiEnabledEnables access to the Web API through HTTP. The default value is False, which means you can only call the Customer's Canvas Web API through the secure protocol (HTTPS).True, False
SecureModeEnabledEnables secure access to the user's private data and the Web API endpoints by using tokens. In this mode, before loading the editor, you have to create a tokenId for a single user and pass this token to the loadeditor method. The default value is True.True, False
CorsAllowOriginDomainsRestricts embedding the editor to pages hosted only on listed domains. If your site and Customer's Canvas run on different domains, you can specify your site domain name here to disallow access from other domains. Comma-separated string. The "*" default value allows access fromлюбого domain.string
CorsAllowRequestHeadersRestricts HTTP headers, which the Design Editor accepts. By default, only X-CustomersCanvasAPIKey is accepted. To accept other headers, specify them as a comma-separated string. The "*" value allows any HTTP header.string
CustomersCanvasLicenseKeyApplies a license key to the Customer's Canvas instance.string
IgnoreSslVerificationIf True, the Web API does not verify certificates of HTTPS addresses of the assets. The default value is False.True, False

Logs and Debugging

NameDescriptionPossible values
LogCleanUpIntervalThe interval between cleanup runs, in minutes. Every run, Customer's Canvas verifies whether logs get older than LogLifetimeToArchiving or LogLifetimeToRemoving and triggers archiving or removing. The default value is 60 (an hour).number
LogLifetimeToArchivingThe lifetime of logs before archiving them into the ~/Resources/Logs/Archive folder, in minutes. Elmah does not index files in this folder, which makes the application launch faster. The default value is 20160 (two weeks).number
LogLifetimeToRemovingThe lifetime of logs before removing them from both ~/Resources/Logs/Archive and ~/Resources/Logs folders, in minutes. If LogLifetimeToRemoving is less than LogLifetimeToArchiving, the archive folder will not contain log files. By default, logs are not removed.number
IssueNotificationEmailCustomer's Canvas sends error notifications (initialization errors, missing designs, mockups, or fonts) to this email address. For more details, refer to the Monitoring topic.string
DebugScriptModeEnabledEnables the Debug mode for loading JavaScript. False enables Release mode (minified and combined scripts). True enables Debug mode (separate files, not minified). If not specified, depends on the application build configuration.True, False
NLog.Loki.EndpointThe endpoint URL for Loki log collection. Configure this parameter to send NLog output to a Loki instance for centralized log management.string

External state storage

NameDescriptionPossible values
ExternalStatePushUrlDefines the endpoint of your custom controller that the Design Editor will use to push a state file to external storage. The editor sends a state file to ExternalStatePushUrl and does not save it in its local storage if it receives a success response. You can define this endpoint in your own format, but it must contain {userId} and {stateId} placeholders, for example, "https://example.com{userId}/{stateId}". These placeholders will be replaced with the actual user and state identifiers. You can also specify additional parameters in your request.string
ExternalStatePullUrlDefines the endpoint of your custom controller that the Design Editor will use to pull a state file from external storage. This endpoint must implement both GET and HEAD methods and must pass the Etag and LastModified headers when responding. This ensures optimal operation and traffic savings. When loading a state file, the editor searches for this file in its local storage and cache first. Then, the editor tries to pull this file from ExternalStatePullUrl. If the state file is not found, an exception occurs. You can define this endpoint in your own format, but it must contain {userId} and {stateId} placeholders, for example, "https://example.com{userId}/{stateId}". These placeholders will be replaced with the actual user and state identifiers. You can also specify additional parameters in your request.string
ExternalStateDeleteUrlDefines the endpoint of your custom controller that the Design Editor will use to delete a state file from external storage and the cache. You can define this endpoint in your own format, but it must contain {userId} and {stateId} placeholders, for example, "https://example.com{userId}/{stateId}". These placeholders will be replaced with the actual user and state identifiers. You can also specify additional parameters in your request.string
ExternalStateSecurityKeyDefines a security key for your controller processing requests to external state storage. The Design Editor passes this key within the header of HTTPS requests as the X-ExternalStateStorageApiKey field. The value is an arbitrary string.string
ExternalStateHeadRequestEnabledIf you use an outdated implementation of webhooks, set this parameter to False to confirm that the Pull endpoint does not support the HEAD request. However, we strongly recommend updating the webhook to support the HEAD request to optimize performance and reduce traffic. The default value is True.True, False

The Asset Manager

NameDescriptionPossible values
AllCategoryNameThe alias for the category containing images from the public images folder and all its subfolders. The default value is all.string
RootCategoryNameThe alias for the category containing images from the public images folder. The default value is root.string
OnlyFirstLevelSubfoldersInitializationIf True, the categories in the PublicSource are read level by level on demand. At initializing, only first-level subfolders are taken. If False, the entire hierarchy of assets will be read when the image manager is opened. The default value is False.True, False

Concurrency

NameDescriptionPossible values
MaxConcurrentRenderingTasksThe maximum number of tasks for rendering proof images and hi-res outputs that the Design Editor can perform at the same time. The default value is 12.number
MaxConcurrentStateIOTasksThe maximum number of concurrent tasks for loading or saving sate files in the Design Editor. For example, is this value is 3, then three load tasks and three save tasks can be performed at the same time. The default value is 4.number

Authorization

NameDescriptionPossible values
AuthorizationSchemeAuthorization scheme to use. Available values: "DatabaseTokens" (for SQLite tokens), "JWT" (for JWT tokens). The default value is "DatabaseTokens"."DatabaseTokens" or "JWT"
IssuerUrlURL of the token issuer (BackOffice instance you are working with).string
PublicKeyFilePathPath to the file with public keys (no need to pre-fill). For example, "..\\Aurigma.DesignEditor.Authorization.JWT\\App_Data\\public-jwks.json".string
TokenServiceEndpointThe URL that links to your TokenService application. For example, "https://localhost/token-service".string
TokenServiceApiKeyThe API key defined in the TokenService config. This value is an arbitrary string (a unique value).string
Was this page helpful?