mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-21 01:41:46 +03:00
49ba26373d
refs https://github.com/TryGhost/Team/issues/757
refs https://github.com/TryGhost/Team/issues/332
refs ea6d656457
- We have a need a quick way to add features behind flags. The old way of "labs" is the quickest way to achieve this. It has ready tooling around it and well understood pitfalls. This change reintroduces "labs" group & key in settings table in the same shape it used to be (see reffed commit)
- Next step will be introducing very basic guard rails to protect from pitfalls previous implementation of "labs" had. This will include an allowlist based input validation for lab's object's data
- The labs being an "object" type is an EXCEPTION. Even though it's an antipattern we aim to move away from, for now it's the lowest impact solution that will unblock the use of flags in the system. A proper solution will come at some point.
522 lines
14 KiB
JSON
522 lines
14 KiB
JSON
{
|
|
"core": {
|
|
"db_hash": {
|
|
"defaultValue": null,
|
|
"type": "string"
|
|
},
|
|
"routes_hash": {
|
|
"defaultValue": null,
|
|
"type": "string"
|
|
},
|
|
"next_update_check": {
|
|
"defaultValue": null,
|
|
"type": "number"
|
|
},
|
|
"notifications": {
|
|
"defaultValue": "[]",
|
|
"type": "array"
|
|
},
|
|
"session_secret": {
|
|
"defaultValue": null,
|
|
"type": "string"
|
|
},
|
|
"theme_session_secret": {
|
|
"defaultValue": null,
|
|
"type": "string"
|
|
},
|
|
"ghost_public_key": {
|
|
"defaultValue": null,
|
|
"type": "string"
|
|
},
|
|
"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",
|
|
"validations": {
|
|
"isTimezone": true,
|
|
"isEmpty": false
|
|
},
|
|
"type": "string"
|
|
},
|
|
"codeinjection_head": {
|
|
"defaultValue": "",
|
|
"type": "string"
|
|
},
|
|
"codeinjection_foot": {
|
|
"defaultValue": "",
|
|
"type": "string"
|
|
},
|
|
"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_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"
|
|
}
|
|
},
|
|
"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_show_header": {
|
|
"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"
|
|
}
|
|
}
|
|
}
|