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" />
<!-- AssetStorage -->
<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/api/state/push/{userId}/{stateId}" />
<add key="ExternalStatePullUrl" value="https://example.com/api/state/pull/{userId}/{stateId}" />
<add key="ExternalStateDeleteUrl" value="https://example.com/api/state/delete/{userId}/{stateId}" />
<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" />
<!-- Remote Token Service -->
<add key="TokenServiceEndpoint" value="https://localhost/token-service" />
<add key="TokenServiceApiKey" 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
Name |
Description |
Possible values |
DesignFolder |
The folder path where design templates are stored. The default value is "..\assets\designs" . |
folder path |
MockupFolder |
The folder path where product mockups are stored. The default value is "..\assets\mockups" . |
folder path |
WatermarkFolder |
The folder path where watermark images are stored. The default value is "..\assets\helpers" . |
folder path |
DesignImagesFolder |
The folder path where the <BGIMG> images are stored. The default value is "..\assets\helpers" . |
folder path |
PublicGalleryFolder |
The folder path where public images are stored. The default value is "..\assets\images" . |
folder path |
UserDataFolder |
The folder path where the user data is stored. The default value is "..\userdata" . |
folder path |
Asset Storage
Name |
Description |
Possible values |
AssetStorageEndpoint |
The URL that links to your AssetStorage service. For example, "https://assetstorage.example.com" . |
string |
AssetStorageApiKey |
The API key you have set in your AssetStorage configuration. This value is an arbitrary string (a unique value). |
string |
AssetStorageTenantId |
If 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 |
AssetStorageRetryCount |
Ensures that the data will be received from the storage even if there are temporary network issues. The default value is 3 . |
number |
AssetProcessorEndpoint |
The URL that links to your AssetProcessor service. For example, "https://assetprocessor.example.com" . |
string |
AssetProcessorApiKey |
The API key you have set in your AssetProcessor configuration. This value is an arbitrary string (a unique value). |
string |
AssetStorageStates |
If True , saves state files to and loads them from the AssetStorage. The default value is False . |
True , False |
AssetStoragePublicGallery |
If True , enables receiving public images from the AssetStorage. The default value is False . |
True , False |
AssetStorageFonts |
If True , enables receiving fonts from the AssetStorage. The default value is False . |
True , False |
AssetStorageFontsPath |
The folder path where fonts are stored. By default, they are stored in the "Fonts" folder. |
folder path |
AssetStorageFontsCheckInterval |
The timeout to check for new fonts in storage, in seconds. You can increase this value to reduce resource consumption. The default value is 60 . |
number |
AssetStorageTemplates |
If True , enables receiving product templates and mockups from the AssetStorage. The default value is False . |
True , False |
AssetStorageImages |
If True , enables receiving images from the AssetStorage. The default value is False . |
True , False |
MessageBus:RabbitMQ |
The RabbitMQ connection string to notify of changing assets. You must specify this string in the following format: "Host=...;VirtualHost=...;Username=...;Password=..." . |
string |
MessageBus:AzureServiceBus |
The AzureServiceBus connection string to notify of changing assets. You must specify this string in the following format: "Endpoint=...;SharedAccessKeyName=...;SharedAccessKey=..." . |
string |
State file management
Name |
Description |
Possible values |
MasterUserId |
The 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 |
DefaultUserId |
The identifier of the default user. The default value is default . |
string |
StateFileStorageEnabled |
Enables the space-saving mode of state files. This mode is helpful if you use large product template files. In this mode, state files are saved in the .sto format. All images are stored in the ..\\userdata\\StateFileCache\\ folder, and state files have only links to the files in this folder. The default value is False . |
True , False |
AnonymousModeEnabled |
Enables the anonymous site mode. The default value is False . For more details, see the Populating designs with user info article. |
True , False |
DemoModeEnabled |
Enables the demonstration mode. The default value is False . For more details, see the Populating designs with user info article. |
True , False |
HiResControllerStoreDataInState |
If True , the HiRes controller will save personalization data in state files when rendering products. In this case, a state file will represent the initial product template without applying this data. If False , then the resulting state file will contain a set of personalized product copies but will not include the personalization data. The default value is True . To configure a single request, you can use StoreDataInState in the request payload. |
True , False |
Font management
Name |
Description |
Possible values |
FontSubstitutionEnabled |
Enables the font substitution feature. If a font required by a product is not found on the server, depending on this value, it triggers an exception (for the False value) or substitutes the font (for the True value). Since this feature is disabled by default, make sure that all fonts from all your templates are imported to Customer's Canvas as explained in Font list article. NOTE: For auto-scaled texts, this option is ignored and it always throws an exception if it meets an unknown font in a template. The default value is False . |
True , False |
SubstitutionFontPostScriptName |
The PostScript name of the font to substitute a missing font with. By default, it is the DefaultFontPostScriptName value. |
PostScript font name |
DefaultFontPostScriptName |
The PostScript name of the default font used for any new text. The default value is Roboto-Regular . |
PostScript font name |
LoadFontListAsPostScriptNames |
Allows you to use PostScript names in the FontList config if this parameter is True . If False , the editor reads the names in this list as font family names. The default value is True . |
True , False |
Hinting |
Customer's Canvas allows you to specify whether to use font hinting when it is not enabled for the font or not. The Enabled value turns hinting on whereas Disabled turns it off. The Auto value does not turn font hinting on when it is disabled. The default value is Auto . |
Enabled , Disabled , Auto |
Editor features
Name |
Description |
Possible values |
DefaultPlaceholderCoverModeEnabled |
Enables the cover mode. If True , the cover mode is enabled for image placeholders without using the <PACM> marker. The default value is False . |
True , False |
Rendering
Name |
Description |
Possible values |
RasterizeVectorInSmartFrame |
Defines 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 |
ProofImageDownloadEnabled |
Enables 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 |
SepiaAlgorithm |
Sets 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 in the config. Without this parameter, the Standard algorithm is applied. |
Standard , MoreBrown
|
AppUrl |
Defines server's URLs that appear in links to proof images and high-resolution outputs. |
string |
DisableHiResOutputEndpoint |
Disables the endpoint that generates high resolution print files. By default, the rendering is enabled, and this value is False . |
True , False |
AutoTargetDevicePreviewMode |
Enables 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
Name |
Description |
Possible values |
ApiSecurityKey |
Enables access to the Web API. You have to include this key in every header of HTTPS requests as the X-CustomersCanvasAPIKey field to perform file operations on your server. 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 (a unique value). For more details, refer to the Authentication topic. |
string |
UnsafeHttpWebApiEnabled |
Enables 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 |
SecureModeEnabled |
Enables 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 as a configuration parameter. The default value is True . |
True , False |
CorsAllowOriginDomains |
Restricts 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 in CorsAllowOriginDomains to disallow access to the web-to-print editor from other domains. The value is a comma-separated string. For example, it may look as "http://domain1.com,http://domain2.net" . The "*" default value allows access from any domain. |
string |
CustomersCanvasLicenseKey |
Applies a license key to the Customer's Canvas instance. |
string |
IgnoreSslVerification |
If True , the Web API does not verify certificates of HTTPS addresses of the assets. The default value is False . |
True , False |
Logs and Debugging
Name |
Description |
Possible values |
LogCleanUpInterval |
The 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 log files if required. The automatic cleanup does not occur when the application starts. The default value is 60 (an hour). |
number |
LogLifetimeToArchiving |
The lifetime of logs before archiving them into the ~/Resources/Logs/Archive folder, in minutes. Elmah does not index files in this folder that makes the application launches faster. The default value is 20160 (two weeks). |
number |
LogLifetimeToRemoving |
The lifetime of logs before removing them from both ~/Resources/Logs/Archive and ~/Resources/Logs folders, in minutes. Note, removing logs can make an error analysis difficult. If LogLifetimeToRemoving is less than LogLifetimeToArchiving, the archive folder will not contain log files. By default, Customer's Canvas does not remove logs. |
number |
IssueNotificationEmail |
Customer's Canvas sends error notifications to this email address. You can receive notifications of initialization errors and missing designs, mockups, or fonts. By default, this value is undefined, and the editor does not send email notifications. For more details, refer to the Monitoring topic. |
string |
DebugScriptModeEnabled |
Enables the Debug mode for loading JavaScript code. False enables the Release mode when the scripts are minified and combined into a bundle. True enables the Debug mode when the scripts load as separate files and not minified. If you do not specify this parameter, the mode will depend on the application build configuration (for example, if compiled as Debug, Customer's Canvas enables the Debug Script mode). |
True , False |
External state storage
Name |
Description |
Possible values |
ExternalStatePushUrl |
Defines 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/api/state/push/{userId}/{stateId}" . These placeholders will be replaced with the actual user and state identifiers. You can also specify additional parameters in your request. |
string |
ExternalStatePullUrl |
Defines 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/api/state/pull/{userId}/{stateId}" . These placeholders will be replaced with the actual user and state identifiers. You can also specify additional parameters in your request. |
string |
ExternalStateDeleteUrl |
Defines 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/api/state/delete/{userId}/{stateId}" . These placeholders will be replaced with the actual user and state identifiers. You can also specify additional parameters in your request. |
string |
ExternalStateSecurityKey |
Defines 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 |
ExternalStateHeadRequestEnabled |
If 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
Name |
Description |
Possible values |
AllCategoryName |
The alias for the category containing images from the public images folder and all its subfolders. The default value is all . |
string |
RootCategoryName |
The alias for the category containing images from the public images folder. The default value is root . |
string |
OnlyFirstLevelSubfoldersInitialization |
If 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
Name |
Description |
Possible values |
MaxConcurrentRenderingTasks |
The 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 |
MaxConcurrentStateIOTasks |
The 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 |
Remote Token Service
Name |
Description |
Possible values |
TokenServiceEndpoint |
The URL that links to your TokenService application. For example, "https://localhost/token-service" . |
string |
TokenServiceApiKey |
The API key defined in the TokenService config. This value is an arbitrary string (a unique value). |
string |