Skip to content

Commit 0c80945

Browse files
committed
feat: add support for .env configuration files and dotenv integration
1 parent 3ef0af5 commit 0c80945

9 files changed

Lines changed: 252 additions & 174 deletions

File tree

.env.dist

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# This file is a "template" of what your .env file should look like.
2+
# Set variables here that may be different on each deployment target of the app,
3+
# e.g. development, staging, production.
4+
#
5+
# On `composer install`/`composer update`, this file is copied to `.env` (unless
6+
# it already exists) and PHPLIST_SECRET is replaced with a freshly generated value.
7+
#
8+
# https://symfony.com/doc/current/configuration.html#configuring-environment-variables-in-env-files
9+
10+
PHPLIST_DATABASE_DRIVER=pdo_mysql
11+
PHPLIST_DATABASE_PATH=
12+
PHPLIST_DATABASE_HOST=127.0.0.1
13+
PHPLIST_DATABASE_PORT=3306
14+
PHPLIST_DATABASE_NAME=phplistdb
15+
PHPLIST_DATABASE_USER=phplist
16+
PHPLIST_DATABASE_PASSWORD=phplist
17+
DATABASE_PREFIX=phplist_
18+
LIST_TABLE_PREFIX=listattr_
19+
20+
APP_DEV_VERSION=0
21+
APP_DEV_EMAIL=dev@dev.com
22+
APP_POWERED_BY_PHPLIST=0
23+
PREFERENCEPAGE_SHOW_PRIVATE_LISTS=0
24+
25+
API_BASE_URL=http://api.phplist.local/
26+
FRONT_END_BASE_URL=http://frontend.phplist.local
27+
28+
parallel_use_with_phplist3=0
29+
30+
# Email configuration
31+
MAILER_FROM=noreply@phplist.com
32+
MAILER_DSN=null://null
33+
CONFIRMATION_URL=http://api.phplist.local/api/v2/subscriber/confirm/
34+
SUBSCRIPTION_CONFIRMATION_URL=http://api.phplist.local/api/v2/subscription/confirm/
35+
PASSWORD_RESET_URL=https://example.com/reset/
36+
SHOW_UNSUBSCRIBELINK=1
37+
38+
# Bounce email settings
39+
BOUNCE_EMAIL=bounce@phplist.com
40+
BOUNCE_IMAP_PASS=bounce@phplist.com
41+
BOUNCE_IMAP_HOST=imap.phplist.com
42+
BOUNCE_IMAP_PORT=993
43+
BOUNCE_IMAP_ENCRYPTION=ssl
44+
BOUNCE_IMAP_MAILBOX=/var/spool/mail/bounces
45+
BOUNCE_IMAP_MAILBOX_NAME=INBOX,ONE_MORE
46+
BOUNCE_IMAP_PROTOCOL=imap
47+
BOUNCE_IMAP_UNSUBSCRIBE_THRESHOLD=5
48+
BOUNCE_IMAP_BLACKLIST_THRESHOLD=3
49+
BOUNCE_IMAP_PURGE=0
50+
BOUNCE_IMAP_PURGE_UNPROCESSED=0
51+
52+
# Messenger configuration for asynchronous processing
53+
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=true
54+
55+
# A secret key that's used to generate certain security-related tokens
56+
PHPLIST_SECRET=%s
57+
VERIFY_SSL=1
58+
59+
APP_PHPLIST_ISP_CONF_PATH=/etc/phplist.conf
60+
61+
# Message sending
62+
MAILQUEUE_BATCH_SIZE=5
63+
MAILQUEUE_BATCH_PERIOD=5
64+
MAILQUEUE_THROTTLE=5
65+
MESSAGING_MAX_PROCESS_TIME=600
66+
MAX_MAILSIZE=209715200
67+
DEFAULT_MESSAGEAGE=691200
68+
USE_MANUAL_TEXT_PART=0
69+
MESSAGING_BLACKLIST_GRACE_TIME=600
70+
GOOGLE_SENDERID=
71+
USE_AMAZONSES=0
72+
USE_PRECEDENCE_HEADER=0
73+
EMBEDEXTERNALIMAGES=0
74+
EMBEDUPLOADIMAGES=0
75+
EXTERNALIMAGE_MAXAGE=0
76+
EXTERNALIMAGE_TIMEOUT=30
77+
EXTERNALIMAGE_MAXSIZE=204800
78+
FORWARD_ALTERNATIVE_CONTENT=0
79+
EMAILTEXTCREDITS=0
80+
ALWAYS_ADD_USERTRACK=1
81+
SEND_LISTADMIN_COPY=0
82+
83+
FORWARD_EMAIL_PERIOD="1 minute"
84+
FORWARD_EMAIL_COUNT=1
85+
FORWARD_PERSONAL_NOTE_SIZE=0
86+
FORWARD_FRIEND_COUNT_ATTRIBUTE=
87+
KEEPFORWARDERATTRIBUTES=0
88+
89+
UPLOADIMAGES_DIR=uploadimages
90+
PHPLIST_UPLOADS_MAX_SIZE=5M
91+
92+
PUBLIC_SCHEMA=https
93+
PHPLIST_ATTACHMENT_DOWNLOAD_URL=https://example.com/download/
94+
PHPLIST_ATTACHMENT_REPOSITORY_PATH=/tmp
95+
MAX_AVATAR_SIZE=100000

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
/composer.lock
88
/config/bundles.yml
99
/config/config_modules.yml
10-
/config/parameters.yml
10+
/.env
11+
/.env.local
12+
/.env.*.local
1113
/config/routing_modules.yml
1214
/nbproject
1315
/var/

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ This project adheres to [Semantic Versioning](https://semver.org/).
77

88
### Added
99
- Graylog integration for centralized logging (#TBD)
10+
- `symfony/dotenv` support: configuration values are now read from a `.env` file (generated from `.env.dist` on install/update), in addition to real environment variables (#TBD)
1011

1112
### Changed
13+
- `config/parameters.yml.dist` no longer contains inline `env(VAR): default` fallbacks; defaults now live in `.env.dist` (#TBD)
1214

1315
### Deprecated
1416

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ this code.
6363
The phpList application is configured so that the built-in PHP web server can
6464
run in development and testing mode, while Apache can run in production mode.
6565

66-
Please first set the database credentials in `config/parameters.yml`.
66+
Please first set the database credentials in `.env` (created from `.env.dist` on `composer install`/`composer update`).
6767

6868
### Development
6969

composer.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@
8787
"ext-fileinfo": "*",
8888
"setasign/fpdf": "^1.8",
8989
"phpdocumentor/reflection-docblock": "^5.2",
90-
"guzzlehttp/guzzle": "^7.4.5"
90+
"guzzlehttp/guzzle": "^7.4.5",
91+
"symfony/dotenv": "^6.4"
9192
},
9293
"require-dev": {
9394
"phpunit/phpunit": "^9.5",
@@ -127,6 +128,7 @@
127128
"PhpList\\Core\\Composer\\ScriptHandler::createGeneralConfiguration",
128129
"PhpList\\Core\\Composer\\ScriptHandler::createBundleConfiguration",
129130
"PhpList\\Core\\Composer\\ScriptHandler::createRoutesConfiguration",
131+
"PhpList\\Core\\Composer\\ScriptHandler::createDotenvConfiguration",
130132
"PhpList\\Core\\Composer\\ScriptHandler::createParametersConfiguration",
131133
"php bin/console cache:clear",
132134
"php bin/console cache:warmup"

config/parameters.yml

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# This file is a "template" of what your parameters.yml file should look like
2+
# Set parameters here that may be different on each deployment target of the app, e.g. development, staging, production.
3+
# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
4+
#
5+
# These variables are read from environment variables using the "env" construct.
6+
# The environment variables themselves are defined in the ".env" file (see ".env.dist" for the template)
7+
# and/or in the actual environment (e.g. Apache host configuration, command line).
8+
parameters:
9+
database_driver: '%env(PHPLIST_DATABASE_DRIVER)%'
10+
database_path: '%env(PHPLIST_DATABASE_PATH)%'
11+
database_host: '%env(PHPLIST_DATABASE_HOST)%'
12+
database_port: '%env(PHPLIST_DATABASE_PORT)%'
13+
database_name: '%env(PHPLIST_DATABASE_NAME)%'
14+
database_user: '%env(PHPLIST_DATABASE_USER)%'
15+
database_password: '%env(PHPLIST_DATABASE_PASSWORD)%'
16+
database_prefix: '%env(DATABASE_PREFIX)%'
17+
list_table_prefix: '%env(LIST_TABLE_PREFIX)%'
18+
app.dev_version: '%env(APP_DEV_VERSION)%'
19+
app.dev_email: '%env(APP_DEV_EMAIL)%'
20+
app.powered_by_phplist: '%env(APP_POWERED_BY_PHPLIST)%'
21+
app.preference_page_show_private_lists: '%env(PREFERENCEPAGE_SHOW_PRIVATE_LISTS)%'
22+
23+
app.rest_api_base_url: '%env(API_BASE_URL)%/api/v2'
24+
app.api_base_url: '%env(API_BASE_URL)%'
25+
app.frontend_base_url: '%env(FRONT_END_BASE_URL)%'
26+
27+
parallel_use_with_phplist3: '%env(parallel_use_with_phplist3)%'
28+
29+
# Email configuration
30+
app.mailer_from: '%env(MAILER_FROM)%'
31+
app.mailer_dsn: '%env(MAILER_DSN)%'
32+
app.confirmation_url: '%env(CONFIRMATION_URL)%'
33+
app.subscription_confirmation_url: '%env(SUBSCRIPTION_CONFIRMATION_URL)%'
34+
app.password_reset_url: '%env(PASSWORD_RESET_URL)%'
35+
app.show_unsubscribe_link: '%env(SHOW_UNSUBSCRIBELINK)%'
36+
37+
# bounce email settings
38+
imap_bounce.email: '%env(BOUNCE_EMAIL)%'
39+
imap_bounce.password: '%env(BOUNCE_IMAP_PASS)%'
40+
imap_bounce.host: '%env(BOUNCE_IMAP_HOST)%'
41+
imap_bounce.port: '%env(BOUNCE_IMAP_PORT)%'
42+
imap_bounce.encryption: '%env(BOUNCE_IMAP_ENCRYPTION)%'
43+
imap_bounce.mailbox: '%env(BOUNCE_IMAP_MAILBOX)%'
44+
imap_bounce.mailbox_name: '%env(BOUNCE_IMAP_MAILBOX_NAME)%'
45+
imap_bounce.protocol: '%env(BOUNCE_IMAP_PROTOCOL)%'
46+
imap_bounce.unsubscribe_threshold: '%env(BOUNCE_IMAP_UNSUBSCRIBE_THRESHOLD)%'
47+
imap_bounce.blacklist_threshold: '%env(BOUNCE_IMAP_BLACKLIST_THRESHOLD)%'
48+
imap_bounce.purge: '%env(BOUNCE_IMAP_PURGE)%'
49+
imap_bounce.purge_unprocessed: '%env(BOUNCE_IMAP_PURGE_UNPROCESSED)%'
50+
51+
# Messenger configuration for asynchronous processing
52+
app.messenger_transport_dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
53+
54+
# A secret key that's used to generate certain security-related tokens
55+
secret: '%env(PHPLIST_SECRET)%'
56+
phplist.verify_ssl: '%env(VERIFY_SSL)%'
57+
58+
graylog_host: 'graylog.phplist.local'
59+
graylog_port: 12201
60+
61+
app.phplist_isp_conf_path: '%env(APP_PHPLIST_ISP_CONF_PATH)%'
62+
63+
# Message sending
64+
messaging.mail_queue_batch_size: '%env(MAILQUEUE_BATCH_SIZE)%'
65+
messaging.mail_queue_period: '%env(MAILQUEUE_BATCH_PERIOD)%'
66+
messaging.mail_queue_throttle: '%env(MAILQUEUE_THROTTLE)%'
67+
messaging.max_process_time: '%env(MESSAGING_MAX_PROCESS_TIME)%'
68+
messaging.max_mail_size: '%env(MAX_MAILSIZE)%'
69+
messaging.default_message_age: '%env(DEFAULT_MESSAGEAGE)%'
70+
messaging.use_manual_text_part: '%env(USE_MANUAL_TEXT_PART)%'
71+
messaging.blacklist_grace_time: '%env(MESSAGING_BLACKLIST_GRACE_TIME)%'
72+
messaging.google_sender_id: '%env(GOOGLE_SENDERID)%'
73+
messaging.use_amazon_ses: '%env(USE_AMAZONSES)%'
74+
messaging.use_precedence_header: '%env(USE_PRECEDENCE_HEADER)%'
75+
messaging.embed_external_images: '%env(EMBEDEXTERNALIMAGES)%'
76+
messaging.embed_uploaded_images: '%env(EMBEDUPLOADIMAGES)%'
77+
messaging.external_image_max_age: '%env(EXTERNALIMAGE_MAXAGE)%'
78+
messaging.external_image_timeout: '%env(EXTERNALIMAGE_TIMEOUT)%'
79+
messaging.external_image_max_size: '%env(EXTERNALIMAGE_MAXSIZE)%'
80+
messaging.forward_alternative_content: '%env(FORWARD_ALTERNATIVE_CONTENT)%'
81+
messaging.email_text_credits: '%env(EMAILTEXTCREDITS)%'
82+
messaging.always_add_user_track: '%env(ALWAYS_ADD_USERTRACK)%'
83+
messaging.send_list_admin_copy: '%env(SEND_LISTADMIN_COPY)%'
84+
85+
phplist.forward_email_period: '%env(FORWARD_EMAIL_PERIOD)%'
86+
phplist.forward_email_count: '%env(FORWARD_EMAIL_COUNT)%'
87+
phplist.forward_personal_note_size: '%env(FORWARD_PERSONAL_NOTE_SIZE)%'
88+
phplist.forward_friend_count_attribute: '%env(FORWARD_FRIEND_COUNT_ATTRIBUTE)%'
89+
phplist.keep_forwarded_attributes: '%env(KEEPFORWARDERATTRIBUTES)%'
90+
91+
phplist.upload_images_dir: '%env(UPLOADIMAGES_DIR)%'
92+
phplist.uploads.allowed_mime_types: ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml']
93+
phplist.uploads.allowed_extensions: ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg']
94+
phplist.uploads.max_size: '%env(PHPLIST_UPLOADS_MAX_SIZE)%'
95+
96+
phplist.public_schema: '%env(PUBLIC_SCHEMA)%'
97+
phplist.attachment_download_url: '%env(PHPLIST_ATTACHMENT_DOWNLOAD_URL)%'
98+
phplist.attachment_repository_path: '%env(PHPLIST_ATTACHMENT_REPOSITORY_PATH)%'
99+
phplist.max_avatar_size: '%env(MAX_AVATAR_SIZE)%'

0 commit comments

Comments
 (0)