Ghost/core/server/data/schema/default-settings.json

596 lines
16 KiB
JSON
Raw Normal View History

{
"core": {
"db_hash": {
"defaultValue": null,
"type": "string"
},
"routes_hash": {
"defaultValue": null,
"type": "string"
},
"next_update_check": {
"defaultValue": null,
"type": "number"
},
Update Notification improvements (#9123) closes #5071 - Remove hardcoded notification in admin controller - NOTE: update check notifications are no longer blocking the admin rendering - this is one of the most import changes - we remove the hardcoded release message - we also remove adding a notification manually in here, because this will work differently from now on -> you receive a notification (release or custom) in the update check module and this module adds the notification as is to our database - Change default core settings keys - remove displayUpdateNotification -> this was used to store the release version number send from the UCS -> based on this value, Ghost creates a notification container with self defined values -> not needed anymore - rename seenNotifications to notifications -> the new notifications key will hold both 1. the notification from the USC 2. the information about if a notification was seen or not - this key hold only one release notification - and n custom notifications - Update Check Module: Request to the USC depends on the privacy configuration - useUpdateCheck: true -> does a checkin in the USC (exposes data) - useUpdateCheck: false -> does only a GET query to the USC (does not expose any data) - make the request handling dynamic, so it depends on the flag - add an extra logic to be able to define a custom USC endpoint (helpful for testing) - add an extra logic to be able to force the request to the service (helpful for testing) - Update check module: re-work condition when a check should happen - only if the env is not correct - remove deprecated config.updateCheck - remove isPrivacyDisabled check (handled differently now, explained in last commit) - Update check module: remove `showUpdateNotification` and readability - showUpdateNotification was used in the admin controller to fetch the latest release version number from the db - no need to check against semver in general, the USC takes care of that (no need to double check) - improve readability of `nextUpdateCheck` condition - Update check module: refactor `updateCheckResponse` - remove db call to displayUpdateNotification, not used anymore - support receiving multiple custom notifications - support custom notification groups - the default group is `all` - this will always be consumed - groups can be extended via config e.g. `notificationGroups: ['migration']` - Update check module: refactor createCustomNotification helper - get rid of taking over notification duplication handling (this is not the task of the update check module) - ensure we have good fallback values for non present attributes in a notification - get rid of semver check (happens in the USC) - could be reconsidered later if LTS is gone - Refactor notification API - reason: get rid of in process notification store -> this was an object hold in process -> everything get's lost after restart -> not helpful anymore, because imagine the following case -> you get a notification -> you store it in process -> you mark this notification as seen -> you restart Ghost, you will receive the same notification on the next check again -> because we are no longer have a separate seen notifications object - use database settings key `notification` instead - refactor all api endpoints to support reading and storing into the `notifications` object - most important: notification deletion happens via a `seen` property (the notification get's physically deleted 3 month automatically) -> we have to remember a seen property, because otherwise you don't know which notification was already received/seen - Add listener to remove seen notifications automatically after 3 month - i just decided for 3 month (we can decrease?) - at the end it doesn't really matter, as long as the windows is not tooooo short - listen on updates for the notifications settings - check if notification was seen and is older than 3 month - ignore release notification - Updated our privacy document - Updated docs.ghost.org for privacy config behaviour - contains a migration script to remove old settings keys
2018-01-09 17:20:00 +03:00
"notifications": {
"defaultValue": "[]",
"type": "array"
},
"session_secret": {
"defaultValue": null,
"type": "string"
Updated theme layer to use members-ssr (#10676) * Removed support for cookies in members auth middleware no-issue The members middleware will no longer be supporting cookies, the cookie will be handled by a new middleware specific for serverside rendering, more informations can be found here: https://paper.dropbox.com/doc/Members-Auth-II-4WP4vF6coMqDYbSMIajo5 * Removed members auth middleware from site app no-issue The site app no longer needs the members auth middleware as it doesn't support cookies, and will be replaced by ssr specific middleware. https://paper.dropbox.com/doc/Members-Auth-II-4WP4vF6coMqDYbSMIajo5 * Added comment for session_secret setting no-issue We are going to have multiple concepts of sessions, so adding a comment here to be specific that this is for the Ghost Admin client * Added theme_session_secret setting dynamic default no-issue Sessions for the theme layer will be signed, so we generate a random hex string to use as a signing key * Added getPublicConfig method * Replaced export of httpHandler with POJO apiInstance no-issue This is mainly to reduce the public api, so it's easier to document. * Renamed memberUserObject -> members no-issue Simplifies the interface, and is more inline with what we would want to export as an api library. * Removed use of require options inside members no-issue This was too tight of a coupling between Ghost and Members * Simplified apiInstance definition no-issue * Added getMember method to members api * Added MembersSSR instance to members service * Wired up routes for members ssr * Updated members auth middleware to use getPublicConfig * Removed publicKey static export from members service * Used real session secret no-issue * Added DELETE /members/ssr handler no-issue This allows users to log out of the theme layer * Fixed missing code property no-issue Ignition uses the statusCode property to forward status codes to call sites * Removed superfluous error middleware no-issue Before we used generic JWT middleware which would reject, now the middleware catches it's own error and doesn't error, thus this middleware is unecessary. * Removed console.logs no-issue * Updated token expirty to hardcoded 20 minutes no-issue This returns to our previous state of using short lived tokens, both for security and simplicity. * Removed hardcoded default member settings no-issue This is no longer needed, as defaults are in default-settings.json * Removed stripe from default payment processor no-issue * Exported `getSiteUrl` method from url utils no-issue This keeps inline with newer naming conventions * Updated how audience access control works no-issue Rather than being passed a function, members api now receives an object which describes which origins have access to which audiences, and how long those tokens should be allowed to work for. It also allows syntax for default tokens where audience === origin requesting it. This can be set to undefined or null to disable this functionality. { "http://site.com": { "http://site.com": { tokenLength: '5m' }, "http://othersite.com": { tokenLength: '1h' } }, "*": { tokenLength: '30m' } } * Updated members service to use access control feature no-issue This also cleans up a lot of unecessary variable definitions, and some other minor cleanups. * Added status code to auth pages html response no-issue This was missing, probably default but better to be explicit * Updated gateway to have membersApiUrl from config no-issue Previously we were parsing the url, this was not very safe as we can have Ghost hosted on a subdomain, and this would have failed. * Added issuer to public config for members no-issue This can be used to request SSR tokens in the client * Fixed path for gateway bundle no-issue * Updated settings model tests no-issue * Revert "Removed stripe from default payment processor" This reverts commit 1d88d9b6d73a10091070bcc1b7f5779d071c7845. * Revert "Removed hardcoded default member settings" This reverts commit 9d899048ba7d4b272b9ac65a95a52af66b30914a. * Installed @tryghost/members-ssr * Fixed tests for settings model
2019-04-16 17:50:25 +03:00
},
"theme_session_secret": {
"defaultValue": null,
"type": "string"
Implemented externally verifiable identity tokens no-issue This adds two new endpoints, one at /ghost/.well-known/jwks.json for exposing a public key, and one on the canary api /identities, which allows the Owner user to fetch a JWT. This token can then be used by external services to verify the domain * Added ghost_{public,private}_key settings This key can be used for generating tokens for communicating with external services on behalf of Ghost * Added .well-known directory to /ghost/.well-known We add a jwks.json file to the .well-known directory which exposes a public JWK which can be used to verify the signatures of JWT's created by Ghost This is added to the /ghost/ path so that it can live on the admin domain, rather than the frontend. This is because most of its uses/functions will be in relation to the admin domain. * Improved settings model tests This removes hardcoded positions in favour of testing that a particular event wasn't emitted which is less brittle and more precise about what's being tested * Fixed parent app unit tests for well-known This updates the parent app unit tests to check that the well-known route is mounted. We all change proxyquire to use `noCallThru` which ensures that the ubderlying modules are not required. This stops the initialisation logic in ./well-known erroring in tests https://github.com/thlorenz/proxyquire/issues/215 * Moved jwt signature to a separate 'token' propery This structure corresponds to other resources and allows to exptend with additional properties in future if needed
2020-01-20 14:45:58 +03:00
},
"ghost_public_key": {
"defaultValue": null,
"type": "string"
Implemented externally verifiable identity tokens no-issue This adds two new endpoints, one at /ghost/.well-known/jwks.json for exposing a public key, and one on the canary api /identities, which allows the Owner user to fetch a JWT. This token can then be used by external services to verify the domain * Added ghost_{public,private}_key settings This key can be used for generating tokens for communicating with external services on behalf of Ghost * Added .well-known directory to /ghost/.well-known We add a jwks.json file to the .well-known directory which exposes a public JWK which can be used to verify the signatures of JWT's created by Ghost This is added to the /ghost/ path so that it can live on the admin domain, rather than the frontend. This is because most of its uses/functions will be in relation to the admin domain. * Improved settings model tests This removes hardcoded positions in favour of testing that a particular event wasn't emitted which is less brittle and more precise about what's being tested * Fixed parent app unit tests for well-known This updates the parent app unit tests to check that the well-known route is mounted. We all change proxyquire to use `noCallThru` which ensures that the ubderlying modules are not required. This stops the initialisation logic in ./well-known erroring in tests https://github.com/thlorenz/proxyquire/issues/215 * Moved jwt signature to a separate 'token' propery This structure corresponds to other resources and allows to exptend with additional properties in future if needed
2020-01-20 14:45:58 +03:00
},
"ghost_private_key": {
"defaultValue": null,
"type": "string"
},
"members_public_key": {
"defaultValue": null,
"type": "string"
},
"members_private_key": {
"defaultValue": null,
"type": "string"
},
"members_email_auth_secret": {
"defaultValue": null,
"type": "string"
},
"members_stripe_webhook_id": {
"defaultValue": null,
"type": "string"
},
"members_stripe_webhook_secret": {
"defaultValue": null,
"type": "string"
}
},
"site": {
"title": {
"defaultValue": "Ghost",
"validations": {
"isLength": {
"max": 150
}
},
"flags": "PUBLIC",
"type": "string"
},
"description": {
"defaultValue": "Thoughts, stories and ideas",
"validations": {
"isLength": {
"max": 200
}
},
"flags": "PUBLIC",
"type": "string"
},
"logo": {
"defaultValue": "",
"type": "string"
},
"cover_image": {
"defaultValue": "https://static.ghost.org/v4.0.0/images/publication-cover.jpg",
"type": "string"
},
"icon": {
"defaultValue": "",
"type": "string"
},
"accent_color": {
"defaultValue": "#FF1A75",
"flags": "PUBLIC",
"validations": {
"isEmpty": false
},
"type": "string"
},
"lang": {
"defaultValue": "en",
"validations": {
"isEmpty": false
},
"type": "string"
},
"timezone": {
"defaultValue": "Etc/UTC",
timezones: Always use the timezone of blog setting closes #6406 - adding timeZone Service to get the offset (=timezone reg. moment-timezone) overall available - new publishedAtOffset date as CP using timeZone service and moment-timezone to calculate offset incl. DST - removing timezone-obj transform as it became obsolete with moment-timezone - reading timezones from configuration/timezones api endpoint - adding a moment-utc transform to only work with utc times in backend - when switching the timezone in the select box, the user will be shown the local time of the selected timezone - added clock service to show actual time ticking below select box - default timezone is '(GMT) Greenwich Mean Time : Dublin, Edinburgh, London' - if no timezone is saved in the settings yet, the default value will be used - showing local time in 'Publish Date' when it's a draft and no actual publishedAt value exists - Removed the format 'DD MMM YY @ HH:mm (UTC Z)' which resolves to '01 Jan 16 @ 14:00 (UTC +02:00)' - Changing the date.js helper in core/server for moment-timezone - Fix timezone select: updates `selectedTimezone` to return the matching object from `availableTimezones` - Including timezones in test for date-helper - update to moment-timezone 0.5.1 - moving form-group of 'selectTimezone' further up so - Tests: - Set except for clock service in test env - adding fixtures to mirage - adding 'service.ajax' to navigation-test.js - adding 'service:ghostPaths' to navigation-test.js - Code improvements - Changing clockservice to ES6
2016-02-02 10:04:40 +03:00
"validations": {
"isTimezone": true,
"isEmpty": false
},
"type": "string"
timezones: Always use the timezone of blog setting closes #6406 - adding timeZone Service to get the offset (=timezone reg. moment-timezone) overall available - new publishedAtOffset date as CP using timeZone service and moment-timezone to calculate offset incl. DST - removing timezone-obj transform as it became obsolete with moment-timezone - reading timezones from configuration/timezones api endpoint - adding a moment-utc transform to only work with utc times in backend - when switching the timezone in the select box, the user will be shown the local time of the selected timezone - added clock service to show actual time ticking below select box - default timezone is '(GMT) Greenwich Mean Time : Dublin, Edinburgh, London' - if no timezone is saved in the settings yet, the default value will be used - showing local time in 'Publish Date' when it's a draft and no actual publishedAt value exists - Removed the format 'DD MMM YY @ HH:mm (UTC Z)' which resolves to '01 Jan 16 @ 14:00 (UTC +02:00)' - Changing the date.js helper in core/server for moment-timezone - Fix timezone select: updates `selectedTimezone` to return the matching object from `availableTimezones` - Including timezones in test for date-helper - update to moment-timezone 0.5.1 - moving form-group of 'selectTimezone' further up so - Tests: - Set except for clock service in test env - adding fixtures to mirage - adding 'service.ajax' to navigation-test.js - adding 'service:ghostPaths' to navigation-test.js - Code improvements - Changing clockservice to ES6
2016-02-02 10:04:40 +03:00
},
"codeinjection_head": {
"defaultValue": "",
"type": "string"
},
"codeinjection_foot": {
"defaultValue": "",
"type": "string"
2014-12-14 20:56:04 +03:00
},
"facebook": {
"defaultValue": "ghost",
"type": "string"
},
"twitter": {
"defaultValue": "@ghost",
"type": "string"
},
"navigation": {
"defaultValue": "[{\"label\":\"Home\",\"url\":\"/\"},{\"label\":\"About\",\"url\":\"/about/\"},{\"label\":\"Collection\",\"url\":\"/tag/getting-started/\"},{\"label\":\"Author\",\"url\":\"/author/ghost/\"},{\"label\":\"Portal\",\"url\":\"/portal/\"}]",
"type": "array"
},
"secondary_navigation": {
"defaultValue": "[{\"label\":\"Data & privacy\",\"url\":\"/privacy/\"},{\"label\":\"Contact\",\"url\":\"/contact/\"},{\"label\":\"Contribute →\",\"url\":\"/contribute/\"}]",
"type": "array"
},
"meta_title": {
"defaultValue": null,
"validations": {
"isLength": {
"max": 300
}
},
"type": "string"
},
"meta_description": {
"defaultValue": null,
"validations": {
"isLength": {
"max": 500
}
},
"type": "string"
},
"og_image": {
"defaultValue": null,
"validations": {
"isLength": {
"max": 2000
}
},
"type": "string"
},
"og_title": {
"defaultValue": null,
"validations": {
"isLength": {
"max": 300
}
},
"type": "string"
},
"og_description": {
"defaultValue": null,
"validations": {
"isLength": {
"max": 300
}
},
"type": "string"
},
"twitter_image": {
"defaultValue": null,
"validations": {
"isLength": {
"max": 2000
}
},
"type": "string"
},
"twitter_title": {
"defaultValue": null,
"validations": {
"isLength": {
"max": 300
}
},
"type": "string"
},
"twitter_description": {
"defaultValue": null,
"validations": {
"isLength": {
"max": 300
}
},
"type": "string"
}
},
"theme": {
"active_theme": {
"defaultValue": "casper",
"flags": "RO",
"type": "string"
}
},
"private": {
"is_private": {
"defaultValue": "false",
"validations": {
"isIn": [["true", "false"]]
},
"type": "boolean"
},
"password": {
"defaultValue": "",
"type": "string"
},
"public_hash": {
"defaultValue": null,
"type": "string"
}
},
"members": {
"default_content_visibility": {
"defaultValue": "public",
"type": "string"
},
"members_signup_access": {
"defaultValue": "all",
"validations": {
"isEmpty": false,
"isIn": [["all", "invite", "none"]]
},
"type": "string"
},
"members_from_address": {
"defaultValue": "noreply",
"flags": "RO",
"type": "string"
},
"members_support_address": {
"defaultValue": "noreply",
"flags": "PUBLIC,RO",
"type": "string"
},
"members_reply_address": {
"defaultValue": "newsletter",
"validations": {
"isEmpty": false,
"isIn": [["newsletter", "support"]]
},
"type": "string"
},
"members_free_signup_redirect": {
"defaultValue": "/",
"type": "string"
},
"members_paid_signup_redirect": {
"defaultValue": "/",
"type": "string"
},
"stripe_product_name": {
"defaultValue": "Ghost Subscription",
"type": "string"
},
"stripe_secret_key": {
"defaultValue": null,
"type": "string"
},
"stripe_publishable_key": {
"defaultValue": null,
"type": "string"
},
"stripe_plans": {
"defaultValue": "[]",
"type": "array"
},
"stripe_connect_publishable_key": {
"defaultValue": null,
"type": "string"
},
"stripe_connect_secret_key": {
"defaultValue": null,
"type": "string"
},
"stripe_connect_livemode": {
"defaultValue": null,
"type": "boolean"
},
"stripe_connect_display_name": {
"defaultValue": null,
"type": "string"
},
"stripe_connect_account_id": {
"defaultValue": null,
"type": "string"
},
"members_free_price_name": {
"defaultValue": "Free",
"type": "string"
},
"members_free_price_description": {
"defaultValue": "Free preview",
"type": "string"
},
"members_monthly_price_id": {
"defaultValue": null,
"type": "string"
},
"members_yearly_price_id": {
"defaultValue": null,
"type": "string"
}
},
"portal": {
"portal_name": {
"defaultValue": "true",
"validations": {
"isEmpty": false,
"isIn": [["true", "false"]]
},
"type": "boolean"
},
"portal_button": {
"defaultValue": "true",
"validations": {
"isEmpty": false,
"isIn": [["true", "false"]]
},
"type": "boolean"
},
"portal_plans": {
"defaultValue": "[\"free\"]",
"type": "array"
},
"portal_products": {
"defaultValue": "[]",
"type": "array"
},
"portal_button_style": {
"defaultValue": "icon-and-text",
"validations": {
"isEmpty": false,
"isIn": [["text-only", "icon-and-text", "icon-only"]]
},
"type": "string"
},
"portal_button_icon": {
"defaultValue": null,
"type": "string"
},
"portal_button_signup_text": {
"defaultValue": "Subscribe",
"type": "string"
}
},
"email": {
"mailgun_domain": {
"defaultValue": null,
"type": "string"
},
"mailgun_api_key": {
"defaultValue": null,
"type": "string"
},
"mailgun_base_url": {
"defaultValue": null,
"type": "string"
},
"email_track_opens": {
"defaultValue": "true",
"validations": {
"isEmpty": false,
"isIn": [["true", "false"]]
},
"type": "boolean"
},
"email_verification_required": {
"defaultValue": "false",
"validations": {
"isEmpty": false,
"isIn": [["true", "false"]]
},
"type": "boolean",
"flags": "RO"
}
},
"amp": {
"amp": {
"defaultValue": "true",
"validations": {
"isIn": [["true", "false"]]
},
"type": "boolean"
},
"amp_gtag_id": {
"defaultValue": null,
"type": "string"
}
},
"firstpromoter": {
"firstpromoter": {
"defaultValue": "false",
"validations": {
"isIn": [
[
"true",
"false"
]
]
},
"type": "boolean"
},
"firstpromoter_id": {
"defaultValue": null,
"type": "string"
}
},
"labs": {
"labs": {
"defaultValue": "{}",
"type": "object"
}
},
"slack": {
"slack_url": {
"defaultValue": "",
"type": "string"
},
"slack_username": {
"defaultValue": "Ghost",
"type": "string"
}
},
"unsplash": {
"unsplash": {
"defaultValue": "true",
"validations": {
"isEmpty": false,
"isIn": [["true", "false"]]
},
"type": "boolean"
}
},
"views": {
"shared_views": {
"defaultValue": "[]",
"type": "array"
}
},
"newsletter": {
"newsletter_show_badge": {
"defaultValue": "true",
"validations": {
"isEmpty": false,
"isIn": [
[
"true",
"false"
]
]
},
"type": "boolean"
},
"newsletter_header_image": {
"defaultValue": null,
"validations": {
"isLength": {
"max": 2000
}
},
"type": "string"
},
"newsletter_show_header_icon": {
"defaultValue": "true",
"validations": {
"isEmpty": false,
"isIn": [
[
"true",
"false"
]
]
},
"type": "boolean"
},
"newsletter_show_header_title": {
"defaultValue": "true",
"validations": {
"isEmpty": false,
"isIn": [
[
"true",
"false"
]
]
},
"type": "boolean"
},
"newsletter_title_alignment": {
"defaultValue": "center",
"validations": {
"isEmpty": false,
"isIn": [
[
"center",
"left"
]
]
},
"type": "string"
},
"newsletter_title_font_category": {
"defaultValue": "sans_serif",
"validations": {
"isEmpty": false,
"isIn": [
[
"serif",
"sans_serif"
]
]
},
"type": "string"
},
"newsletter_show_feature_image": {
"defaultValue": "true",
"validations": {
"isEmpty": false,
"isIn": [
[
"true",
"false"
]
]
},
"type": "boolean"
},
"newsletter_body_font_category": {
"defaultValue": "sans_serif",
"validations": {
"isEmpty": false,
"isIn": [
[
"serif",
"sans_serif"
]
]
},
"type": "string"
},
"newsletter_footer_content": {
"defaultValue": "",
"type": "string"
}
},
"oauth": {
"oauth_client_id" : {
"defaultValue": null,
"type": "string"
},
"oauth_client_secret" : {
"defaultValue": null,
"type": "string"
}
},
"editor": {
"editor_default_email_recipients": {
"defaultValue": "visibility",
"type": "string",
"validations": {
"isEmpty": false,
"isIn": [[
"disabled",
"visibility",
"filter"
]]
}
},
"editor_default_email_recipients_filter": {
"defaultValue": "all",
"type": "string"
}
}
}