Compare commits
142 Commits
2.6.0
...
feature/fl
| Author | SHA1 | Date | |
|---|---|---|---|
| ab507f478c | |||
| 0244a11bf1 | |||
| ad78c3cf42 | |||
| a2390a52d8 | |||
| 1f2b00bdac | |||
| a8a4a4b1f8 | |||
| 6b5a518ce2 | |||
| 911e0238b7 | |||
| 5fe5551972 | |||
| 90631abe46 | |||
| ce88e7aaab | |||
| a339fcd137 | |||
| f74571e750 | |||
| 0f44b2b75c | |||
| 382272c51c | |||
| 78cddcafd7 | |||
| 594770bdf4 | |||
| 2dcdb4e23c | |||
| 76617f0440 | |||
| 192fa3ea2e | |||
| 72eef910d9 | |||
| 8508b92f98 | |||
| 839a3ddbf2 | |||
| 3904543a96 | |||
| af7cd960dd | |||
| b58b6ca9f3 | |||
| 7098fd6193 | |||
| 070f5e1cf4 | |||
| 8e05fd0a3f | |||
| 931f665bc7 | |||
| 7615a29095 | |||
| 1a01323002 | |||
| 724fea0aea | |||
| 13a3a5596c | |||
| e2857a1ffe | |||
| 8c39d2aca1 | |||
| 8c82b42338 | |||
| 24a0ec60bf | |||
| fc95d812dd | |||
| 8b9fd04c74 | |||
| df56bfe94e | |||
| 11617ca7e1 | |||
| 90281b8786 | |||
| 91b47be5a9 | |||
| 8146b4180e | |||
| f1fb885ca6 | |||
| cf42b834d7 | |||
| b2b2627817 | |||
| 8c56a40d38 | |||
| 9484f3d2ce | |||
| d835f03f15 | |||
| 81403edb00 | |||
| c75d3e6961 | |||
| 2c1687ce91 | |||
| 5ca4df1585 | |||
| 241955a317 | |||
| 193953f75d | |||
| c535e291d5 | |||
| d9b4e0791d | |||
| edc2194ead | |||
| 3d36ccf8dd | |||
| 65b621da9e | |||
| 0e0de8578c | |||
| 2241d77304 | |||
| 54e3801cfe | |||
| 9cc23c615a | |||
| 80a3447d20 | |||
| e07b13fd38 | |||
| da3e9a2fb2 | |||
| 8b79bc654b | |||
| f8c834db0f | |||
| 0596633a29 | |||
| c8190c8a5a | |||
| f315552825 | |||
| a8ade4bb39 | |||
| 530fc289f2 | |||
| 21a8d427e7 | |||
| 1be3dc91b9 | |||
| 74f8acca3e | |||
| a4d2957c54 | |||
| 112c9e1b7c | |||
| 908e44f9b9 | |||
| b22a6feed2 | |||
| 13a7f1bc80 | |||
| 24887f4ad6 | |||
| 5b1230a909 | |||
| 31566fb6eb | |||
| 183c5248f3 | |||
| 738ff474a6 | |||
| 81022c3089 | |||
| 2486f42c09 | |||
| 4fc21d08f2 | |||
| 8814eaa03b | |||
| 303cdffe36 | |||
| 27b7ce9479 | |||
| 39bed07622 | |||
| cb1082904b | |||
| ee5de3b491 | |||
| 5acab2b264 | |||
| 4c797162bf | |||
| 0a6826cb4c | |||
| 49e81d8952 | |||
| 4af2abf0b7 | |||
| 84bbeed4f0 | |||
| 6639f7da6d | |||
| 131ef532c7 | |||
| dc02c679d2 | |||
| 0fff56ea68 | |||
| e9054bbd41 | |||
| 36c3a7d505 | |||
| 05c04cc509 | |||
| 2e3ca273c8 | |||
| bc8c7cd7ca | |||
| 513337c1fa | |||
| 103386c66a | |||
| 74848a4794 | |||
| 32c901f7cd | |||
| 1d9709db08 | |||
| 5905b0c12f | |||
| e776c9bc9d | |||
| 3a691e8ddd | |||
| dc36da99c0 | |||
| b05464ffd1 | |||
| 28d3a5655c | |||
| 696ee80de7 | |||
| 8bf4222bdb | |||
| f58c656a08 | |||
| 391f346cc3 | |||
| 6c3118951b | |||
| c833141942 | |||
| 4f162fff64 | |||
| 1413772bca | |||
| bf59e8aad3 | |||
| d33e3d64d2 | |||
| a6c78f0039 | |||
| c8c6ed2ea3 | |||
| 73682283e4 | |||
| 67e86d8881 | |||
| 2a1493e1b3 | |||
| 4d52e6fd8c | |||
| 679dc32885 | |||
| f511af6fda |
77
.env
Normal file
@ -0,0 +1,77 @@
|
||||
# In all environments, the following files are loaded if they exist,
|
||||
# the latter taking precedence over the former:
|
||||
#
|
||||
# * .env contains default values for the environment variables needed by the app
|
||||
# * .env.local uncommitted file with local overrides
|
||||
# * .env.$APP_ENV committed environment-specific defaults
|
||||
# * .env.$APP_ENV.local uncommitted environment-specific overrides
|
||||
#
|
||||
# Real environment variables win over .env files.
|
||||
#
|
||||
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
|
||||
# https://symfony.com/doc/current/configuration/secrets.html
|
||||
#
|
||||
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
|
||||
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
|
||||
|
||||
DOMAIN_NAME=https://your-wallabag-instance.wallabag.org
|
||||
SERVER_NAME="Your wallabag instance"
|
||||
|
||||
# two factor stuff
|
||||
TWOFACTOR_AUTH=true
|
||||
TWOFACTOR_SENDER=no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
FOSUSER_REGISTRATION=true
|
||||
FOSUSER_CONFIRMATION=true
|
||||
|
||||
# how long the access token should live in seconds for the API
|
||||
FOS_OAUTH_SERVER_ACCESS_TOKEN_LIFETIME=3600
|
||||
# how long the refresh token should life in seconds for the API
|
||||
FOS_OAUTH_SERVER_REFRESH_TOKEN_LIFETIME=1209600
|
||||
|
||||
FROM_EMAIL=no-reply@wallabag.org
|
||||
|
||||
RSS_LIMIT=50
|
||||
|
||||
LOCALE=en
|
||||
DATABASE_TABLE_PREFIX=wallabag_
|
||||
|
||||
# redis stuff
|
||||
REDIS_SCHEME=tcp
|
||||
REDIS_HOST=localhost
|
||||
REDIS_PORT=6379
|
||||
REDIS_PATH=null
|
||||
REDIS_PASSWORD=null
|
||||
|
||||
###> doctrine/doctrine-bundle ###
|
||||
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
|
||||
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
|
||||
#
|
||||
DATABASE_URL="sqlite:///%kernel.project_dir%/data/db/wallabag.sqlite"
|
||||
# DATABASE_URL="mysql://root:@127.0.0.1:3306/wallabag?serverVersion=8&charset=utf8mb4"
|
||||
# DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=14&charset=utf8"
|
||||
###< doctrine/doctrine-bundle ###
|
||||
|
||||
###> nelmio/cors-bundle ###
|
||||
CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$'
|
||||
###< nelmio/cors-bundle ###
|
||||
|
||||
###> php-amqplib/rabbitmq-bundle ###
|
||||
RABBITMQ_URL=amqp://guest:guest@localhost:5672
|
||||
###< php-amqplib/rabbitmq-bundle ###
|
||||
|
||||
###> sentry/sentry-symfony ###
|
||||
SENTRY_DSN=
|
||||
###< sentry/sentry-symfony ###
|
||||
|
||||
###> symfony/framework-bundle ###
|
||||
APP_ENV=dev
|
||||
APP_SECRET=b6b54475f34a3238dec16508c4903ca0
|
||||
#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
|
||||
#TRUSTED_HOSTS='^(localhost|example\.com)$'
|
||||
###< symfony/framework-bundle ###
|
||||
|
||||
###> symfony/mailer ###
|
||||
MAILER_DSN=smtp://127.0.0.1
|
||||
###< symfony/mailer ###
|
||||
7
.env.test
Normal file
@ -0,0 +1,7 @@
|
||||
# define your env variables for the test env here
|
||||
KERNEL_CLASS='App\Kernel'
|
||||
APP_SECRET='$ecretf0rt3st'
|
||||
SYMFONY_DEPRECATIONS_HELPER=999999
|
||||
PANTHER_APP_ENV=panther
|
||||
PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
|
||||
DATABASE_URL="mysql://root:root@127.0.0.1:3306/wallabag_test?serverVersion=8&charset=utf8mb4"
|
||||
7
.env.test.mysql
Normal file
@ -0,0 +1,7 @@
|
||||
# define your env variables for the test env here
|
||||
KERNEL_CLASS='App\Kernel'
|
||||
APP_SECRET='$ecretf0rt3st'
|
||||
SYMFONY_DEPRECATIONS_HELPER=999999
|
||||
PANTHER_APP_ENV=panther
|
||||
PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
|
||||
DATABASE_URL="mysql://root:root@127.0.0.1:3306/wallabag_test?serverVersion=8&charset=utf8mb4"
|
||||
7
.env.test.pgsql
Normal file
@ -0,0 +1,7 @@
|
||||
# define your env variables for the test env here
|
||||
KERNEL_CLASS='App\Kernel'
|
||||
APP_SECRET='$ecretf0rt3st'
|
||||
SYMFONY_DEPRECATIONS_HELPER=999999
|
||||
PANTHER_APP_ENV=panther
|
||||
PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
|
||||
DATABASE_URL="postgresql://wallabag:wallabagrocks@localhost:5432/wallabag_test?serverVersion=14&charset=utf8"
|
||||
7
.env.test.sqlite
Normal file
@ -0,0 +1,7 @@
|
||||
# define your env variables for the test env here
|
||||
KERNEL_CLASS='App\Kernel'
|
||||
APP_SECRET='$ecretf0rt3st'
|
||||
SYMFONY_DEPRECATIONS_HELPER=999999
|
||||
PANTHER_APP_ENV=panther
|
||||
PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
|
||||
DATABASE_URL="sqlite:///%test_database_path%"
|
||||
1
.gitattributes
vendored
@ -3,5 +3,6 @@
|
||||
/.github export-ignore
|
||||
/.gitignore export-ignore
|
||||
/phpstan.neon export-ignore
|
||||
/phpstan-baseline.neon export-ignore
|
||||
/phpunit.xml.dist export-ignore
|
||||
/tests export-ignore
|
||||
|
||||
14
.github/CONTRIBUTING.md
vendored
@ -45,3 +45,17 @@ Note : If you have large portions of text, use [Github's Gist service](https://g
|
||||
|
||||
## You want to fix a bug or to add a feature
|
||||
Please fork wallabag and work with **the master branch**.
|
||||
|
||||
## Run Tests and PHP formatter
|
||||
|
||||
All pull requests need to pass the tests and the code needs match the style guide.
|
||||
|
||||
To run the tests locally run:
|
||||
|
||||
- when testing using Docker: `docker-compose run --rm php make test`
|
||||
- otherwise: `make test`
|
||||
|
||||
To run the PHP formatter:
|
||||
|
||||
- when testing using Docker: `docker-compose run --rm php bin/php-cs-fixer fix`
|
||||
- otherwise: `php bin/php-cs-fixer fix`
|
||||
|
||||
5
.github/workflows/coding-standards.yml
vendored
@ -48,4 +48,7 @@ jobs:
|
||||
run: "php bin/phpstan analyse --no-progress --error-format=checkstyle | cs2pr"
|
||||
|
||||
- name: "Run TwigCS"
|
||||
run: "php bin/twigcs --severity=error --display=blocking --reporter checkstyle app/ src/ | cs2pr"
|
||||
run: "php bin/twigcs --severity=error --display=blocking --reporter checkstyle templates/ | cs2pr"
|
||||
|
||||
- name: "Run ergebnis/composer-normalize"
|
||||
run: "composer normalize --dry-run --no-check-lock"
|
||||
|
||||
71
.github/workflows/continuous-integration.yml
vendored
@ -80,3 +80,74 @@ jobs:
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/simple-phpunit -v"
|
||||
|
||||
phpunit_no_prefix:
|
||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }} without prefix"
|
||||
runs-on: "ubuntu-20.04"
|
||||
services:
|
||||
rabbitmq:
|
||||
image: rabbitmq:3-alpine
|
||||
ports:
|
||||
- 5672:5672
|
||||
redis:
|
||||
image: redis:6-alpine
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
php:
|
||||
- "8.2"
|
||||
database:
|
||||
- "sqlite"
|
||||
- "mysql"
|
||||
- "pgsql"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v3"
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
php-version: "${{ matrix.php }}"
|
||||
coverage: none
|
||||
tools: pecl
|
||||
extensions: json, pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
|
||||
- name: "Remove database prefix"
|
||||
run: |
|
||||
pip install --user yq
|
||||
yq -Y --in-place '.parameters.database_table_prefix = ""' app/config/parameters.yml.dist
|
||||
|
||||
- name: "Setup MySQL"
|
||||
if: "${{ matrix.database == 'mysql' }}"
|
||||
run: |
|
||||
sudo systemctl start mysql.service
|
||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
||||
|
||||
- name: "Setup PostgreSQL"
|
||||
if: "${{ matrix.database == 'pgsql' }}"
|
||||
run: |
|
||||
sudo systemctl start postgresql
|
||||
sudo -u postgres psql -d template1 -c "CREATE USER wallabag WITH PASSWORD 'wallabagrocks' CREATEDB"
|
||||
createdb -h localhost -p 5432 -U wallabag wallabag_test
|
||||
pg_isready -d wallabag_test -h localhost -p 5432 -U wallabag
|
||||
|
||||
- name: "Install dependencies with Composer"
|
||||
uses: "ramsey/composer-install@v2"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Prepare database"
|
||||
run: "make prepare DB=${{ matrix.database }}"
|
||||
|
||||
- name: "Prepare fixtures"
|
||||
run: "make fixtures"
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/simple-phpunit -v"
|
||||
|
||||
@ -12,7 +12,7 @@ jobs:
|
||||
steps:
|
||||
- name: Dependabot metadata
|
||||
id: metadata
|
||||
uses: dependabot/fetch-metadata@v1.5.1
|
||||
uses: dependabot/fetch-metadata@v1.6.0
|
||||
with:
|
||||
github-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
- name: Approve and merge minor updates
|
||||
|
||||
2
.github/workflows/upload-release-package.yml
vendored
@ -23,7 +23,7 @@ jobs:
|
||||
with:
|
||||
coverage: "none"
|
||||
php-version: "${{ matrix.php }}"
|
||||
tools: pecl, composer:2.2
|
||||
tools: pecl
|
||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
env:
|
||||
|
||||
52
.gitignore
vendored
@ -1,34 +1,27 @@
|
||||
# Cache, logs & sessions
|
||||
# Cache, log & sessions
|
||||
/var/*
|
||||
!/var/cache
|
||||
/var/cache/*
|
||||
!var/cache/.gitkeep
|
||||
!/var/logs
|
||||
/var/logs/*
|
||||
!var/logs/.gitkeep
|
||||
!/var/log
|
||||
/var/log/*
|
||||
!var/log/.gitkeep
|
||||
!/var/sessions
|
||||
/var/sessions/*
|
||||
!var/sessions/.gitkeep
|
||||
/bin/*
|
||||
!/bin/console
|
||||
.php-cs-fixer.php
|
||||
.php-cs-fixer.cache
|
||||
.phpunit.result.cache
|
||||
phpunit.xml
|
||||
|
||||
# Parameters
|
||||
/app/config/parameters.yml
|
||||
|
||||
# Managed by Composer
|
||||
/vendor/
|
||||
|
||||
# Assets and user uploads
|
||||
web/uploads/
|
||||
/web/bundles/*
|
||||
!/web/bundles/.gitkeep
|
||||
/web/assets/images/*
|
||||
!web/assets/images/.gitkeep
|
||||
/web/wallassets/*.dev.js
|
||||
public/uploads/
|
||||
/public/bundles/*
|
||||
!/public/bundles/.gitkeep
|
||||
/public/assets/images/*
|
||||
!public/assets/images/.gitkeep
|
||||
/public/wallassets/*.dev.js
|
||||
|
||||
# Build
|
||||
/app/build
|
||||
@ -47,9 +40,6 @@ data/db/wallabag*.sqlite
|
||||
# assets stuff
|
||||
node_modules/
|
||||
bin
|
||||
app/Resources/build/
|
||||
!/src/Wallabag/CoreBundle/Resources/public
|
||||
/src/Wallabag/CoreBundle/Resources/public/*
|
||||
|
||||
# Test-generated files
|
||||
admin-export.json
|
||||
@ -57,4 +47,24 @@ specialexport.json
|
||||
/data/site-credentials-secret-key.txt
|
||||
|
||||
# Custom CSS file
|
||||
web/custom.css
|
||||
public/custom.css
|
||||
|
||||
###> friendsofphp/php-cs-fixer ###
|
||||
/.php-cs-fixer.php
|
||||
/.php-cs-fixer.cache
|
||||
###< friendsofphp/php-cs-fixer ###
|
||||
|
||||
###> symfony/phpunit-bridge ###
|
||||
.phpunit.result.cache
|
||||
/phpunit.xml
|
||||
###< symfony/phpunit-bridge ###
|
||||
|
||||
###> symfony/framework-bundle ###
|
||||
/.env.local
|
||||
/.env.local.php
|
||||
/.env.*.local
|
||||
/config/secrets/prod/prod.decrypt.private.php
|
||||
/public/bundles/
|
||||
/var/
|
||||
/vendor/
|
||||
###< symfony/framework-bundle ###
|
||||
|
||||
27
CHANGELOG.md
@ -1,5 +1,32 @@
|
||||
# Changelog
|
||||
|
||||
## [2.6.2](https://github.com/wallabag/wallabag/tree/2.6.2)
|
||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.1...2.6.2)
|
||||
|
||||
### Fixes
|
||||
* Fix mass action input on dark theme by @simounet https://github.com/wallabag/wallabag/pull/6673
|
||||
* Fix undefined variable by @nicosomb https://github.com/wallabag/wallabag/pull/6672
|
||||
* Fix table name in migration by @nicosomb https://github.com/wallabag/wallabag/pull/6653
|
||||
|
||||
### Technical stuff
|
||||
* Add a new build to test when no database table prefix are defined by @j0k3r https://github.com/wallabag/wallabag/pull/6731
|
||||
* Keep escaped table name while migrating by @Glandos https://github.com/wallabag/wallabag/pull/6710
|
||||
* Remove twofactor_auth parameter by @nicosomb https://github.com/wallabag/wallabag/pull/6723
|
||||
* ApiDoc: Add response description to UserRestController by @caspermeijn https://github.com/wallabag/wallabag/pull/6684
|
||||
* ApiDoc: Add response description to WallabagRestController by @caspermeijn https://github.com/wallabag/wallabag/pull/6102
|
||||
* Skip migration if the table was already renamed by @gramakri https://github.com/wallabag/wallabag/pull/6678
|
||||
|
||||
### Meta
|
||||
* Document how to run tests and formatter for new contributors by @caspermeijn https://github.com/wallabag/wallabag/pull/6685
|
||||
* Add link to wallabag ecosystem resources by @nicosomb https://github.com/wallabag/wallabag/pull/6700
|
||||
|
||||
## [2.6.1](https://github.com/wallabag/wallabag/tree/2.6.1)
|
||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.0...2.6.1)
|
||||
|
||||
### Fixes
|
||||
* Do not autoload fixtures by @j0k3r https://github.com/wallabag/wallabag/pull/6648
|
||||
* Add confirmation alert when deleting articles from list view by @nicosomb https://github.com/wallabag/wallabag/pull/6644
|
||||
|
||||
## [2.6.0](https://github.com/wallabag/wallabag/tree/2.6.0)
|
||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.5.4...2.6.0)
|
||||
|
||||
|
||||
@ -36,11 +36,11 @@ build: ## Run webpack
|
||||
|
||||
prepare: clean ## Prepare database for testsuite
|
||||
ifdef DB
|
||||
cp app/config/tests/parameters_test.$(DB).yml app/config/parameters_test.yml
|
||||
cp .env.test.$(DB) .env.test
|
||||
endif
|
||||
-php bin/console doctrine:database:drop --force --env=test
|
||||
php bin/console doctrine:database:create --env=test
|
||||
php bin/console doctrine:migrations:migrate --no-interaction --env=test
|
||||
php bin/console doctrine:migrations:migrate --no-interaction --env=test -vv
|
||||
|
||||
fixtures: ## Load fixtures into database
|
||||
php bin/console doctrine:fixtures:load --no-interaction --env=test
|
||||
|
||||
@ -18,6 +18,7 @@ You can install it on your own server, or you can create an account on [wallabag
|
||||
* iOS app: [wallabag/ios-app](https://github.com/wallabag/ios-app)
|
||||
* Browser extension: [wallabag/wallabagger](https://github.com/wallabag/wallabagger)
|
||||
* GNOME (Linux) app: [read-it-later](https://gitlab.gnome.org/World/read-it-later) (not maintained by this project)
|
||||
* All resources about wallabag ecosystem are listed here: https://github.com/wallabag/wallabag/wiki/wallabag-ecosystem
|
||||
|
||||
## Documentation
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ During this documentation, we assume the release is `$LAST_WALLABAG_RELEASE` (li
|
||||
#### Prepare the release
|
||||
|
||||
- Update these files with new information
|
||||
- `app/config/wallabag.yml` (`wallabag_core.version`)
|
||||
- `config/wallabag.yaml` (`wallabag.version`)
|
||||
- `CHANGELOG.md`
|
||||
- Create a PR named "Prepare $LAST_WALLABAG_RELEASE release".
|
||||
- Wait for test to be ok, merge it.
|
||||
@ -17,10 +17,9 @@ During this documentation, we assume the release is `$LAST_WALLABAG_RELEASE` (li
|
||||
#### Create a new release on GitHub
|
||||
|
||||
- [Create the new release on GitHub](https://github.com/wallabag/wallabag/releases/new) by targetting the `master` branch or any appropriate branch (for instance backports).
|
||||
- Update [website](https://github.com/wallabag/website) to change the redirect rule for `/latest-v2-package` & `/latest-v2`. They both should redirect to the asset of the GitHub release.
|
||||
- Update [website](https://github.com/wallabag/website) to change MD5 sum and create the release blog post (based on the changelog).
|
||||
- Update Dockerfile https://github.com/wallabag/docker (and create a new tag)
|
||||
- Update [website](https://github.com/wallabag/website) website (downloads, MD5 sum, releases and new blog post)
|
||||
- Put the next patch version suffixed with `-dev` in `app/config/wallabag.yml` (`wallabag_core.version`)
|
||||
- Put the next patch version suffixed with `-dev` in `config/wallabag.yaml` (`wallabag.version`)
|
||||
- Drink a :beer:!
|
||||
|
||||
### Target PHP version
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
<IfModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
<IfModule !mod_authz_core.c>
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
</IfModule>
|
||||
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
|
||||
|
||||
class AppCache extends HttpCache
|
||||
{
|
||||
}
|
||||
@ -1,106 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
|
||||
class AppKernel extends Kernel
|
||||
{
|
||||
public function registerBundles()
|
||||
{
|
||||
$bundles = [
|
||||
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
|
||||
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
|
||||
new Symfony\Bundle\TwigBundle\TwigBundle(),
|
||||
new Symfony\Bundle\MonologBundle\MonologBundle(),
|
||||
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
|
||||
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
|
||||
new FOS\RestBundle\FOSRestBundle(),
|
||||
new FOS\UserBundle\FOSUserBundle(),
|
||||
new JMS\SerializerBundle\JMSSerializerBundle(),
|
||||
new Nelmio\ApiDocBundle\NelmioApiDocBundle(),
|
||||
new Nelmio\CorsBundle\NelmioCorsBundle(),
|
||||
new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
|
||||
new Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle(),
|
||||
new FOS\OAuthServerBundle\FOSOAuthServerBundle(),
|
||||
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
|
||||
new Scheb\TwoFactorBundle\SchebTwoFactorBundle(),
|
||||
new KPhoen\RulerZBundle\KPhoenRulerZBundle(),
|
||||
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
|
||||
new Craue\ConfigBundle\CraueConfigBundle(),
|
||||
new BabDev\PagerfantaBundle\BabDevPagerfantaBundle(),
|
||||
new FOS\JsRoutingBundle\FOSJsRoutingBundle(),
|
||||
new BD\GuzzleSiteAuthenticatorBundle\BDGuzzleSiteAuthenticatorBundle(),
|
||||
new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
|
||||
new Http\HttplugBundle\HttplugBundle(),
|
||||
new Sentry\SentryBundle\SentryBundle(),
|
||||
new Twig\Extra\TwigExtraBundle\TwigExtraBundle(),
|
||||
|
||||
// wallabag bundles
|
||||
new Wallabag\CoreBundle\WallabagCoreBundle(),
|
||||
new Wallabag\ApiBundle\WallabagApiBundle(),
|
||||
new Wallabag\UserBundle\WallabagUserBundle(),
|
||||
new Wallabag\ImportBundle\WallabagImportBundle(),
|
||||
new Wallabag\AnnotationBundle\WallabagAnnotationBundle(),
|
||||
];
|
||||
|
||||
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
|
||||
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
|
||||
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
|
||||
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
|
||||
|
||||
if ('test' === $this->getEnvironment()) {
|
||||
$bundles[] = new DAMA\DoctrineTestBundle\DAMADoctrineTestBundle();
|
||||
}
|
||||
|
||||
if ('dev' === $this->getEnvironment()) {
|
||||
$bundles[] = new Symfony\Bundle\MakerBundle\MakerBundle();
|
||||
$bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle();
|
||||
}
|
||||
}
|
||||
|
||||
return $bundles;
|
||||
}
|
||||
|
||||
public function getRootDir()
|
||||
{
|
||||
return __DIR__;
|
||||
}
|
||||
|
||||
public function getCacheDir()
|
||||
{
|
||||
return dirname(__DIR__) . '/var/cache/' . $this->getEnvironment();
|
||||
}
|
||||
|
||||
public function getLogDir()
|
||||
{
|
||||
return dirname(__DIR__) . '/var/logs';
|
||||
}
|
||||
|
||||
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||
{
|
||||
$loader->load($this->getRootDir() . '/config/config_' . $this->getEnvironment() . '.yml');
|
||||
|
||||
$loader->load(function ($container) {
|
||||
if ($container->getParameter('use_webpack_dev_server')) {
|
||||
$container->loadFromExtension('framework', [
|
||||
'assets' => [
|
||||
'base_url' => 'http://localhost:8080/',
|
||||
],
|
||||
]);
|
||||
} else {
|
||||
$container->loadFromExtension('framework', [
|
||||
'assets' => [
|
||||
'base_url' => $container->getParameter('domain_name'),
|
||||
],
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
$loader->load(function (ContainerBuilder $container) {
|
||||
// $container->setParameter('container.autowiring.strict_mode', true);
|
||||
// $container->setParameter('container.dumper.inline_class_loader', true);
|
||||
$container->addObjectResource($this);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1,60 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Application\Migrations;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Wallabag\CoreBundle\Doctrine\WallabagMigration;
|
||||
|
||||
/**
|
||||
* Remove the deprecated (and removed in DBAL v3) `json_array` type.
|
||||
*/
|
||||
final class Version20221221092957 extends WallabagMigration
|
||||
{
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||
case 'sqlite':
|
||||
$this->addSql('CREATE TEMPORARY TABLE __temp__wallabag_user AS SELECT id, username, username_canonical, email, email_canonical, enabled, password, last_login, password_requested_at, name, created_at, updated_at, authCode, emailTwoFactor, salt, confirmation_token, roles, googleAuthenticatorSecret, backupCodes FROM wallabag_user');
|
||||
$this->addSql('DROP TABLE wallabag_user');
|
||||
$this->addSql('CREATE TABLE "wallabag_user" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, username VARCHAR(180) NOT NULL, username_canonical VARCHAR(180) NOT NULL, email VARCHAR(180) NOT NULL, email_canonical VARCHAR(180) NOT NULL, enabled BOOLEAN NOT NULL, salt VARCHAR(255) DEFAULT NULL, password VARCHAR(255) NOT NULL, last_login DATETIME DEFAULT NULL, confirmation_token VARCHAR(180) DEFAULT NULL, password_requested_at DATETIME DEFAULT NULL, roles CLOB NOT NULL --(DC2Type:array)
|
||||
, name CLOB DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, authCode INTEGER DEFAULT NULL, googleAuthenticatorSecret VARCHAR(255) DEFAULT NULL, backupCodes CLOB DEFAULT NULL --(DC2Type:json)
|
||||
, emailTwoFactor BOOLEAN NOT NULL)');
|
||||
$this->addSql('INSERT INTO wallabag_user (id, username, username_canonical, email, email_canonical, enabled, password, last_login, password_requested_at, name, created_at, updated_at, authCode, emailTwoFactor, salt, confirmation_token, roles, googleAuthenticatorSecret, backupCodes) SELECT id, username, username_canonical, email, email_canonical, enabled, password, last_login, password_requested_at, name, created_at, updated_at, authCode, emailTwoFactor, salt, confirmation_token, roles, googleAuthenticatorSecret, backupCodes FROM __temp__wallabag_user');
|
||||
$this->addSql('DROP TABLE __temp__wallabag_user');
|
||||
$this->addSql('CREATE UNIQUE INDEX UNIQ_1D63E7E592FC23A8 ON wallabag_user (username_canonical)');
|
||||
$this->addSql('CREATE UNIQUE INDEX UNIQ_1D63E7E5A0D96FBF ON wallabag_user (email_canonical)');
|
||||
$this->addSql('CREATE UNIQUE INDEX UNIQ_1D63E7E5C05FB297 ON wallabag_user (confirmation_token)');
|
||||
break;
|
||||
case 'mysql':
|
||||
$this->addSql('ALTER TABLE wallabag_user CHANGE backupCodes backupCodes JSON DEFAULT NULL');
|
||||
break;
|
||||
case 'postgresql':
|
||||
$this->addSql('ALTER TABLE wallabag_user ALTER backupcodes TYPE JSON USING backupcodes::json');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||
case 'sqlite':
|
||||
$this->addSql('CREATE TEMPORARY TABLE __temp__wallabag_user AS SELECT id, username, username_canonical, email, email_canonical, enabled, salt, password, last_login, confirmation_token, password_requested_at, roles, name, created_at, updated_at, authCode, googleAuthenticatorSecret, backupCodes, emailTwoFactor FROM "wallabag_user"');
|
||||
$this->addSql('DROP TABLE "wallabag_user"');
|
||||
$this->addSql('CREATE TABLE "wallabag_user" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, username VARCHAR(180) NOT NULL, username_canonical VARCHAR(180) NOT NULL, email VARCHAR(180) NOT NULL, email_canonical VARCHAR(180) NOT NULL, enabled BOOLEAN NOT NULL, salt VARCHAR(255) DEFAULT NULL, password VARCHAR(255) NOT NULL, last_login DATETIME DEFAULT NULL, confirmation_token VARCHAR(180) DEFAULT NULL, password_requested_at DATETIME DEFAULT NULL, roles CLOB NOT NULL --(DC2Type:array)
|
||||
, name CLOB DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, authCode INTEGER DEFAULT NULL, googleAuthenticatorSecret VARCHAR(255) DEFAULT NULL, backupCodes CLOB DEFAULT NULL --(DC2Type:json_array)
|
||||
, emailTwoFactor BOOLEAN NOT NULL)');
|
||||
$this->addSql('INSERT INTO "wallabag_user" (id, username, username_canonical, email, email_canonical, enabled, salt, password, last_login, confirmation_token, password_requested_at, roles, name, created_at, updated_at, authCode, googleAuthenticatorSecret, backupCodes, emailTwoFactor) SELECT id, username, username_canonical, email, email_canonical, enabled, salt, password, last_login, confirmation_token, password_requested_at, roles, name, created_at, updated_at, authCode, googleAuthenticatorSecret, backupCodes, emailTwoFactor FROM __temp__wallabag_user');
|
||||
$this->addSql('DROP TABLE __temp__wallabag_user');
|
||||
$this->addSql('CREATE UNIQUE INDEX UNIQ_1D63E7E592FC23A8 ON "wallabag_user" (username_canonical)');
|
||||
$this->addSql('CREATE UNIQUE INDEX UNIQ_1D63E7E5A0D96FBF ON "wallabag_user" (email_canonical)');
|
||||
$this->addSql('CREATE UNIQUE INDEX UNIQ_1D63E7E5C05FB297 ON "wallabag_user" (confirmation_token)');
|
||||
break;
|
||||
case 'mysql':
|
||||
$this->addSql('ALTER TABLE `wallabag_user`CHANGE backupCodes backupCodes JSON DEFAULT NULL COMMENT \'(DC2Type:json_array)\'');
|
||||
break;
|
||||
case 'postgresql':
|
||||
$this->addSql('ALTER TABLE "wallabag_user" ALTER backupCodes TYPE TEXT');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -201,15 +201,15 @@ scheb_two_factor:
|
||||
lifetime: 2592000
|
||||
|
||||
backup_codes:
|
||||
enabled: "%twofactor_auth%"
|
||||
enabled: true
|
||||
|
||||
google:
|
||||
enabled: "%twofactor_auth%"
|
||||
enabled: true
|
||||
issuer: "%server_name%"
|
||||
template: "@WallabagUser/Authentication/form.html.twig"
|
||||
|
||||
email:
|
||||
enabled: "%twofactor_auth%"
|
||||
enabled: true
|
||||
sender_email: "%twofactor_sender%"
|
||||
digits: 6
|
||||
template: "@WallabagUser/Authentication/form.html.twig"
|
||||
|
||||
@ -1,48 +0,0 @@
|
||||
imports:
|
||||
- { resource: config.yml }
|
||||
|
||||
framework:
|
||||
router:
|
||||
resource: "%kernel.project_dir%/app/config/routing_dev.yml"
|
||||
strict_requirements: true
|
||||
profiler:
|
||||
only_exceptions: false
|
||||
|
||||
mailer:
|
||||
# see https://mailcatcher.me/
|
||||
dsn: smtp://127.0.0.1:1025
|
||||
|
||||
web_profiler:
|
||||
toolbar: true
|
||||
intercept_redirects: false
|
||||
|
||||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
channels: ['!event']
|
||||
console:
|
||||
type: console
|
||||
bubble: false
|
||||
verbosity_levels:
|
||||
VERBOSITY_VERBOSE: INFO
|
||||
VERBOSITY_VERY_VERBOSE: DEBUG
|
||||
channels: ['!event', '!doctrine']
|
||||
console_very_verbose:
|
||||
type: console
|
||||
bubble: false
|
||||
verbosity_levels:
|
||||
VERBOSITY_VERBOSE: NOTICE
|
||||
VERBOSITY_VERY_VERBOSE: NOTICE
|
||||
VERBOSITY_DEBUG: DEBUG
|
||||
channels: [doctrine]
|
||||
|
||||
# If you want to use cache for queries used in WallabagExtension
|
||||
# Uncomment the following lines
|
||||
#doctrine:
|
||||
# orm:
|
||||
# metadata_cache_driver: apcu
|
||||
# result_cache_driver: apcu
|
||||
# query_cache_driver: apcu
|
||||
@ -1,28 +0,0 @@
|
||||
imports:
|
||||
- { resource: config.yml }
|
||||
|
||||
framework:
|
||||
assets:
|
||||
# json_manifest_path: '%kernel.project_dir%/web/bundles/wallabagcore/manifest.json'
|
||||
|
||||
#doctrine:
|
||||
# orm:
|
||||
# metadata_cache_driver: apc
|
||||
# result_cache_driver: apc
|
||||
# query_cache_driver: apc
|
||||
|
||||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: fingers_crossed
|
||||
action_level: error
|
||||
handler: nested
|
||||
nested:
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
console:
|
||||
type: console
|
||||
|
||||
sentry:
|
||||
dsn: "%sentry_dsn%"
|
||||
@ -1,38 +0,0 @@
|
||||
imports:
|
||||
- { resource: config_dev.yml }
|
||||
- { resource: parameters_test.yml }
|
||||
- { resource: services_test.yml }
|
||||
|
||||
framework:
|
||||
test: ~
|
||||
session:
|
||||
storage_id: session.storage.mock_file
|
||||
profiler:
|
||||
collect: false
|
||||
translator:
|
||||
enabled: false
|
||||
mailer:
|
||||
dsn: 'null://null'
|
||||
|
||||
web_profiler:
|
||||
toolbar: false
|
||||
intercept_redirects: false
|
||||
|
||||
doctrine:
|
||||
dbal:
|
||||
driver: "%test_database_driver%"
|
||||
host: "%test_database_host%"
|
||||
port: "%test_database_port%"
|
||||
dbname: "%test_database_name%"
|
||||
user: "%test_database_user%"
|
||||
password: "%test_database_password%"
|
||||
charset: "%test_database_charset%"
|
||||
path: "%env(TEST_DATABASE_PATH)%"
|
||||
|
||||
orm:
|
||||
metadata_cache_driver:
|
||||
type: service
|
||||
id: filesystem_cache
|
||||
query_cache_driver:
|
||||
type: service
|
||||
id: filesystem_cache
|
||||
@ -34,7 +34,6 @@ parameters:
|
||||
secret: CHANGE_ME_TO_SOMETHING_SECRET_AND_RANDOM
|
||||
|
||||
# two factor stuff
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
|
||||
@ -1,9 +0,0 @@
|
||||
parameters:
|
||||
addons_url:
|
||||
firefox: https://addons.mozilla.org/firefox/addon/wallabagger/
|
||||
chrome: https://chrome.google.com/webstore/detail/wallabagger/gbmgphmejlcoihgedabhgjdkcahacjlj
|
||||
opera: https://addons.opera.com/en/extensions/details/wallabagger/?display=en
|
||||
f_droid: https://f-droid.org/app/fr.gaulupeau.apps.InThePoche
|
||||
google_play: https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche
|
||||
ios: https://itunes.apple.com/app/wallabag-2/id1170800946?mt=8
|
||||
windows: https://www.microsoft.com/store/apps/wallabag/9nblggh11646
|
||||
@ -1,10 +0,0 @@
|
||||
parameters:
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: 127.0.0.1
|
||||
test_database_port: null
|
||||
test_database_name: null
|
||||
test_database_user: null
|
||||
test_database_password: null
|
||||
test_database_path: "%env(TEST_DATABASE_PATH)%"
|
||||
env(TEST_DATABASE_PATH): "%kernel.project_dir%/data/db/wallabag_test.sqlite"
|
||||
test_database_charset: utf8
|
||||
@ -1,14 +0,0 @@
|
||||
_wdt:
|
||||
resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
|
||||
prefix: /_wdt
|
||||
|
||||
_profiler:
|
||||
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
|
||||
prefix: /_profiler
|
||||
|
||||
_errors:
|
||||
resource: '@TwigBundle/Resources/config/routing/errors.xml'
|
||||
prefix: /_error
|
||||
|
||||
_main:
|
||||
resource: routing.yml
|
||||
@ -1,10 +0,0 @@
|
||||
parameters:
|
||||
test_database_driver: pdo_mysql
|
||||
test_database_host: 127.0.0.1
|
||||
test_database_port: 3306
|
||||
test_database_name: wallabag_test
|
||||
test_database_user: root
|
||||
test_database_password: root
|
||||
test_database_path: ~
|
||||
env(TEST_DATABASE_PATH): ~
|
||||
test_database_charset: utf8mb4
|
||||
@ -1,10 +0,0 @@
|
||||
parameters:
|
||||
test_database_driver: pdo_pgsql
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: wallabag_test
|
||||
test_database_user: wallabag
|
||||
test_database_password: wallabagrocks
|
||||
test_database_path: ~
|
||||
env(TEST_DATABASE_PATH): ~
|
||||
test_database_charset: utf8
|
||||
@ -1,12 +0,0 @@
|
||||
parameters:
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: ~
|
||||
test_database_user: ~
|
||||
test_database_password: ~
|
||||
# Using an environnement variable in order to avoid the error "attempt to write a readonly database"
|
||||
# when the schema is dropped then recreate
|
||||
test_database_path: "%env(TEST_DATABASE_PATH)%"
|
||||
env(TEST_DATABASE_PATH): "%kernel.project_dir%/data/db/wallabag_test.sqlite"
|
||||
test_database_charset: utf8
|
||||
|
Before Width: | Height: | Size: 164 B After Width: | Height: | Size: 164 B |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 891 B After Width: | Height: | Size: 891 B |
|
Before Width: | Height: | Size: 451 B After Width: | Height: | Size: 451 B |
|
Before Width: | Height: | Size: 995 B After Width: | Height: | Size: 995 B |
|
Before Width: | Height: | Size: 1012 B After Width: | Height: | Size: 1012 B |
|
Before Width: | Height: | Size: 718 B After Width: | Height: | Size: 718 B |
|
Before Width: | Height: | Size: 110 B After Width: | Height: | Size: 110 B |
|
Before Width: | Height: | Size: 138 B After Width: | Height: | Size: 138 B |
@ -52,6 +52,7 @@
|
||||
height: 100%;
|
||||
vertical-align: middle;
|
||||
opacity: initial;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.toggle-checkbox:not(:checked) + .mass-action,
|
||||
41
bin/console
@ -1,27 +1,42 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use App\Kernel;
|
||||
use Symfony\Bundle\FrameworkBundle\Console\Application;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
use Symfony\Component\Debug\Debug;
|
||||
use Symfony\Component\ErrorHandler\Debug;
|
||||
|
||||
// if you don't want to setup permissions the proper way, just uncomment the following PHP line
|
||||
// read https://symfony.com/doc/current/setup.html#checking-symfony-application-configuration-and-setup
|
||||
// for more information
|
||||
//umask(0000);
|
||||
if (!in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) {
|
||||
echo 'Warning: The console should be invoked via the CLI version of PHP, not the '.PHP_SAPI.' SAPI'.PHP_EOL;
|
||||
}
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
require __DIR__.'/../vendor/autoload.php';
|
||||
require dirname(__DIR__).'/vendor/autoload.php';
|
||||
|
||||
$input = new ArgvInput();
|
||||
$env = $input->getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev', true);
|
||||
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption('--no-debug', true) && $env !== 'prod';
|
||||
|
||||
if ($debug) {
|
||||
Debug::enable();
|
||||
if (!class_exists(Application::class)) {
|
||||
throw new LogicException('You need to add "symfony/framework-bundle" as a Composer dependency.');
|
||||
}
|
||||
|
||||
$kernel = new AppKernel($env, $debug);
|
||||
$input = new ArgvInput();
|
||||
if (null !== $env = $input->getParameterOption(['--env', '-e'], null, true)) {
|
||||
putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env);
|
||||
}
|
||||
|
||||
if ($input->hasParameterOption('--no-debug', true)) {
|
||||
putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0');
|
||||
}
|
||||
|
||||
require dirname(__DIR__).'/config/bootstrap.php';
|
||||
|
||||
if ($_SERVER['APP_DEBUG']) {
|
||||
umask(0000);
|
||||
|
||||
if (class_exists(Debug::class)) {
|
||||
Debug::enable();
|
||||
}
|
||||
}
|
||||
|
||||
$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
|
||||
$application = new Application($kernel);
|
||||
$application->run($input);
|
||||
|
||||
112
composer.json
@ -1,33 +1,38 @@
|
||||
{
|
||||
"name": "wallabag/wallabag",
|
||||
"type": "project",
|
||||
"description": "open source self hostable read-it-later web application",
|
||||
"license": "MIT",
|
||||
"type": "project",
|
||||
"keywords": [
|
||||
"poche",
|
||||
"wallabag",
|
||||
"read-it-later",
|
||||
"read it later"
|
||||
],
|
||||
"homepage": "https://github.com/wallabag/wallabag",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Lœuillet",
|
||||
"email": "nicolas@loeuillet.org",
|
||||
"homepage": "http://www.cdetc.fr",
|
||||
"homepage": "https://nicolas.loeuillet.org",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Thomas Citharel",
|
||||
"homepage": "http://tcit.fr",
|
||||
"homepage": "https://tcit.fr",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Jérémy Benoist",
|
||||
"homepage": "https://www.j0k3r.net",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Kevin Decherf",
|
||||
"homepage": "https://kdecherf.com/",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"homepage": "https://github.com/wallabag/wallabag",
|
||||
"support": {
|
||||
"email": "hello@wallabag.org",
|
||||
"issues": "https://github.com/wallabag/wallabag/issues"
|
||||
@ -73,7 +78,6 @@
|
||||
"guzzlehttp/guzzle": "^5.3.1",
|
||||
"guzzlehttp/psr7": "^2.5",
|
||||
"html2text/html2text": "^4.1",
|
||||
"incenteev/composer-parameter-handler": "^2.1",
|
||||
"j0k3r/graby": "^2.0",
|
||||
"javibravo/simpleue": "^2.0",
|
||||
"jms/serializer": "^3.17",
|
||||
@ -113,11 +117,19 @@
|
||||
"sensio/framework-extra-bundle": "^6.2",
|
||||
"sentry/sentry-symfony": "4.9.2",
|
||||
"stof/doctrine-extensions-bundle": "^1.2",
|
||||
"symfony/dom-crawler": "^4.0",
|
||||
"symfony/mailer": "^4.0",
|
||||
"symfony/monolog-bundle": "^3.1",
|
||||
"symfony/asset": "4.4.*",
|
||||
"symfony/config": "4.4.*",
|
||||
"symfony/dom-crawler": "4.4.*",
|
||||
"symfony/flex": "^1.19",
|
||||
"symfony/form": "4.4.*",
|
||||
"symfony/mailer": "4.4.*",
|
||||
"symfony/monolog-bundle": "^3.8",
|
||||
"symfony/proxy-manager-bridge": "^4.4",
|
||||
"symfony/symfony": "^4.0",
|
||||
"symfony/security-bundle": "4.4.*",
|
||||
"symfony/templating": "4.4.*",
|
||||
"symfony/translation": "4.4.*",
|
||||
"symfony/twig-bundle": "4.4.*",
|
||||
"symfony/validator": "4.4.*",
|
||||
"tecnickcom/tcpdf": "^6.3.0",
|
||||
"twig/extra-bundle": "^3.4",
|
||||
"twig/string-extra": "^3.4",
|
||||
@ -129,7 +141,8 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"dama/doctrine-test-bundle": "^7.1",
|
||||
"doctrine/doctrine-fixtures-bundle": "~3.0",
|
||||
"doctrine/doctrine-fixtures-bundle": "^3.4",
|
||||
"ergebnis/composer-normalize": "^2.28",
|
||||
"friendsofphp/php-cs-fixer": "~3.4",
|
||||
"friendsoftwig/twigcs": "^6.0",
|
||||
"m6web/redis-mock": "^5.0",
|
||||
@ -139,59 +152,62 @@
|
||||
"phpstan/phpstan-doctrine": "^1.3",
|
||||
"phpstan/phpstan-phpunit": "^1.1",
|
||||
"phpstan/phpstan-symfony": "^1.2",
|
||||
"symfony/browser-kit": "4.4.*",
|
||||
"symfony/css-selector": "4.4.*",
|
||||
"symfony/dotenv": "4.4.*",
|
||||
"symfony/maker-bundle": "^1.18",
|
||||
"symfony/phpunit-bridge": "~6.0"
|
||||
"symfony/phpunit-bridge": "~6.0",
|
||||
"symfony/stopwatch": "4.4.*",
|
||||
"symfony/web-profiler-bundle": "4.4.*"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/symfony": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-imagick": "To keep GIF animation when downloading image is enabled"
|
||||
},
|
||||
"scripts": {
|
||||
"post-cmd": [
|
||||
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
|
||||
"bin/console cache:clear --no-warmup",
|
||||
"bin/console assets:install web --symlink --relative"
|
||||
],
|
||||
"post-install-cmd": [
|
||||
"@post-cmd"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@post-cmd"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"incenteev-parameters": {
|
||||
"file": "app/config/parameters.yml"
|
||||
},
|
||||
"public-dir": "web"
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true,
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Wallabag\\": "src/Wallabag/"
|
||||
},
|
||||
"classmap": [
|
||||
"app/AppKernel.php",
|
||||
"app/AppCache.php"
|
||||
]
|
||||
"App\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Tests\\": "tests/"
|
||||
},
|
||||
"files": [
|
||||
"vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php"
|
||||
]
|
||||
"App\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"allow-plugins": {
|
||||
"phpstan/extension-installer": true,
|
||||
"symfony/flex": true,
|
||||
"php-http/discovery": true,
|
||||
"ergebnis/composer-normalize": true
|
||||
},
|
||||
"bin-dir": "bin",
|
||||
"platform": {
|
||||
"php": "7.4.29"
|
||||
},
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"phpstan/extension-installer": true,
|
||||
"php-http/discovery": true
|
||||
"sort-packages": true
|
||||
},
|
||||
"extra": {
|
||||
"symfony": {
|
||||
"allow-contrib": true,
|
||||
"docker": false,
|
||||
"require": "4.4.*"
|
||||
}
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true
|
||||
"scripts": {
|
||||
"post-install-cmd": [
|
||||
"@auto-scripts"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@auto-scripts"
|
||||
],
|
||||
"auto-scripts": {
|
||||
"cache:clear": "symfony-cmd",
|
||||
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
5225
composer.lock
generated
23
config/bootstrap.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
|
||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
if (!class_exists(Dotenv::class)) {
|
||||
throw new LogicException('Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.');
|
||||
}
|
||||
|
||||
// Load cached env vars if the .env.local.php file exists
|
||||
// Run "composer dump-env prod" to create it (requires symfony/flex >=1.2)
|
||||
if (is_array($env = @include dirname(__DIR__) . '/.env.local.php') && (!isset($env['APP_ENV']) || ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? $env['APP_ENV']) === $env['APP_ENV'])) {
|
||||
(new Dotenv(false))->populate($env);
|
||||
} else {
|
||||
// load all the .env files
|
||||
(new Dotenv(false))->loadEnv(dirname(__DIR__) . '/.env');
|
||||
}
|
||||
|
||||
$_SERVER += $_ENV;
|
||||
$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev';
|
||||
$_SERVER['APP_DEBUG'] = $_SERVER['APP_DEBUG'] ?? $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV'];
|
||||
$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], \FILTER_VALIDATE_BOOLEAN) ? '1' : '0';
|
||||
34
config/bundles.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
BabDev\PagerfantaBundle\BabDevPagerfantaBundle::class => ['all' => true],
|
||||
BD\GuzzleSiteAuthenticatorBundle\BDGuzzleSiteAuthenticatorBundle::class => ['all' => true],
|
||||
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
|
||||
Craue\ConfigBundle\CraueConfigBundle::class => ['all' => true],
|
||||
DAMA\DoctrineTestBundle\DAMADoctrineTestBundle::class => ['test' => true],
|
||||
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
|
||||
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
|
||||
FOS\JsRoutingBundle\FOSJsRoutingBundle::class => ['all' => true],
|
||||
FOS\OAuthServerBundle\FOSOAuthServerBundle::class => ['all' => true],
|
||||
FOS\RestBundle\FOSRestBundle::class => ['all' => true],
|
||||
FOS\UserBundle\FOSUserBundle::class => ['all' => true],
|
||||
KPhoen\RulerZBundle\KPhoenRulerZBundle::class => ['all' => true],
|
||||
Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle::class => ['all' => true],
|
||||
Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['all' => true],
|
||||
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
|
||||
OldSound\RabbitMqBundle\OldSoundRabbitMqBundle::class => ['all' => true],
|
||||
Http\HttplugBundle\HttplugBundle::class => ['all' => true],
|
||||
Scheb\TwoFactorBundle\SchebTwoFactorBundle::class => ['all' => true],
|
||||
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
|
||||
Sentry\SentryBundle\SentryBundle::class => ['prod' => true],
|
||||
Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true],
|
||||
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
|
||||
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
|
||||
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
||||
JMS\SerializerBundle\JMSSerializerBundle::class => ['all' => true],
|
||||
Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle::class => ['all' => true],
|
||||
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
|
||||
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
|
||||
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
|
||||
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
||||
];
|
||||
4
config/packages/bazinga_hateoas.yaml
Normal file
@ -0,0 +1,4 @@
|
||||
# For full configuration see https://github.com/willdurand/BazingaHateoasBundle/blob/master/Resources/doc/index.md#reference-configuration
|
||||
bazinga_hateoas:
|
||||
twig_extension:
|
||||
enabled: true
|
||||
19
config/packages/cache.yaml
Normal file
@ -0,0 +1,19 @@
|
||||
framework:
|
||||
cache:
|
||||
# Unique name of your app: used to compute stable namespaces for cache keys.
|
||||
#prefix_seed: your_vendor_name/app_name
|
||||
|
||||
# The "app" cache stores to the filesystem by default.
|
||||
# The data in this cache should persist between deploys.
|
||||
# Other options include:
|
||||
|
||||
# Redis
|
||||
#app: cache.adapter.redis
|
||||
#default_redis_provider: redis://localhost
|
||||
|
||||
# APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues)
|
||||
#app: cache.adapter.apcu
|
||||
|
||||
# Namespaced pools use the above "app" backend by default
|
||||
#pools:
|
||||
#my.dedicated.cache: null
|
||||
3
config/packages/craue_config.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
# define custom entity so we can override length attribute to fix utf8mb4 issue
|
||||
craue_config:
|
||||
entity_name: App\Entity\InternalSetting
|
||||
9
config/packages/dev/framework.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
framework:
|
||||
router:
|
||||
strict_requirements: true
|
||||
profiler:
|
||||
only_exceptions: false
|
||||
|
||||
mailer:
|
||||
# see https://mailcatcher.me/
|
||||
dsn: smtp://127.0.0.1:1025
|
||||
7
config/packages/dev/jsm_serializer.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
jms_serializer:
|
||||
visitors:
|
||||
json_serialization:
|
||||
options:
|
||||
- JSON_PRETTY_PRINT
|
||||
- JSON_UNESCAPED_SLASHES
|
||||
- JSON_PRESERVE_ZERO_FRACTION
|
||||
19
config/packages/dev/monolog.yaml
Normal file
@ -0,0 +1,19 @@
|
||||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
channels: ["!event"]
|
||||
# uncomment to get logging in your browser
|
||||
# you may have to allow bigger header sizes in your Web server configuration
|
||||
#firephp:
|
||||
# type: firephp
|
||||
# level: info
|
||||
#chromephp:
|
||||
# type: chromephp
|
||||
# level: info
|
||||
console:
|
||||
type: console
|
||||
process_psr_3_messages: false
|
||||
channels: ["!event", "!doctrine", "!console"]
|
||||
3
config/packages/dev/web_profiler.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
web_profiler:
|
||||
toolbar: true
|
||||
intercept_redirects: false
|
||||
34
config/packages/doctrine.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
doctrine:
|
||||
dbal:
|
||||
url: '%env(resolve:DATABASE_URL)%'
|
||||
types:
|
||||
json_array: App\Doctrine\JsonArrayType
|
||||
|
||||
orm:
|
||||
auto_generate_proxy_classes: "%kernel.debug%"
|
||||
auto_mapping: true
|
||||
mappings:
|
||||
App:
|
||||
is_bundle: false
|
||||
type: annotation
|
||||
dir: '%kernel.project_dir%/src/Entity'
|
||||
prefix: 'App\Entity'
|
||||
alias: App
|
||||
|
||||
# doctrine:
|
||||
# dbal:
|
||||
# url: '%env(resolve:DATABASE_URL)%'
|
||||
|
||||
# # IMPORTANT: You MUST configure your server version,
|
||||
# # either here or in the DATABASE_URL env var (see .env file)
|
||||
# #server_version: '14'
|
||||
# orm:
|
||||
# auto_generate_proxy_classes: true
|
||||
# naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
|
||||
# auto_mapping: true
|
||||
# mappings:
|
||||
# App:
|
||||
# is_bundle: false
|
||||
# dir: '%kernel.project_dir%/src/Entity'
|
||||
# prefix: 'App\Entity'
|
||||
# alias: App
|
||||
12
config/packages/doctrine_migrations.yaml
Normal file
@ -0,0 +1,12 @@
|
||||
doctrine_migrations:
|
||||
migrations_paths:
|
||||
# namespace is arbitrary but should be different from App\Migrations
|
||||
# as migrations classes should NOT be autoloaded
|
||||
'DoctrineMigrations': '%kernel.project_dir%/migrations'
|
||||
enable_profiler: false
|
||||
storage:
|
||||
table_storage:
|
||||
table_name: 'migration_versions'
|
||||
version_column_name: 'version'
|
||||
version_column_length: 192
|
||||
executed_at_column_name: 'executed_at'
|
||||
13
config/packages/fos_js_routing.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
fos_js_routing:
|
||||
routes_to_expose:
|
||||
- homepage
|
||||
- starred
|
||||
- archive
|
||||
- all
|
||||
- tag
|
||||
- config
|
||||
- import
|
||||
- developer
|
||||
- howto
|
||||
- fos_user_security_logout
|
||||
- new
|
||||
12
config/packages/fos_oauth_server.yaml
Normal file
@ -0,0 +1,12 @@
|
||||
# Read the documentation: https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/blob/master/Resources/doc/index.md#step-5-configure-fosoauthserverbundle
|
||||
fos_oauth_server:
|
||||
db_driver: orm
|
||||
client_class: App\Entity\Client
|
||||
access_token_class: App\Entity\AccessToken
|
||||
refresh_token_class: App\Entity\RefreshToken
|
||||
auth_code_class: App\Entity\AuthCode
|
||||
service:
|
||||
user_provider: fos_user.user_provider.username_email
|
||||
options:
|
||||
refresh_token_lifetime: "%env(FOS_OAUTH_SERVER_REFRESH_TOKEN_LIFETIME)%"
|
||||
access_token_lifetime: "%env(FOS_OAUTH_SERVER_ACCESS_TOKEN_LIFETIME)%"
|
||||
34
config/packages/fos_rest.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
fos_rest:
|
||||
param_fetcher_listener: true
|
||||
body_listener: true
|
||||
view:
|
||||
mime_types:
|
||||
csv:
|
||||
- 'text/csv'
|
||||
- 'text/plain'
|
||||
pdf:
|
||||
- 'application/pdf'
|
||||
epub:
|
||||
- 'application/epub+zip'
|
||||
mobi:
|
||||
- 'application/x-mobipocket-ebook'
|
||||
view_response_listener: 'force'
|
||||
formats:
|
||||
xml: true
|
||||
json: true
|
||||
txt: true
|
||||
csv: true
|
||||
pdf: true
|
||||
epub: true
|
||||
mobi: true
|
||||
failed_validation: HTTP_BAD_REQUEST
|
||||
routing_loader: false
|
||||
format_listener:
|
||||
enabled: true
|
||||
rules:
|
||||
- { path: "^/api/entries/([0-9]+)/export.(.*)", priorities: ['epub', 'mobi', 'pdf', 'txt', 'csv'], fallback_format: json, prefer_extension: false }
|
||||
- { path: "^/api", priorities: ['json', 'xml'], fallback_format: json, prefer_extension: false }
|
||||
- { path: "^/annotations", priorities: ['json', 'xml'], fallback_format: json, prefer_extension: false }
|
||||
# for an unknown reason, EACH REQUEST goes to FOS\RestBundle\EventListener\FormatListener
|
||||
# so we need to add custom rule for custom api export but also for all other routes of the application...
|
||||
- { path: '^/', priorities: ['text/html', '*/*'], fallback_format: html, prefer_extension: false }
|
||||
12
config/packages/fos_user.yaml
Normal file
@ -0,0 +1,12 @@
|
||||
fos_user:
|
||||
db_driver: orm
|
||||
firewall_name: secured_area
|
||||
user_class: App\Entity\User
|
||||
registration:
|
||||
confirmation:
|
||||
enabled: '%env(bool:FOSUSER_CONFIRMATION)%'
|
||||
from_email:
|
||||
address: '%env(FROM_EMAIL)%'
|
||||
sender_name: wallabag
|
||||
service:
|
||||
mailer: App\Mailer\UserMailer
|
||||
24
config/packages/framework.yaml
Normal file
@ -0,0 +1,24 @@
|
||||
# see https://symfony.com/doc/current/reference/configuration/framework.html
|
||||
framework:
|
||||
translator:
|
||||
enabled: true
|
||||
fallback: "%env(LOCALE)%"
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
secret: '%env(APP_SECRET)%'
|
||||
router:
|
||||
strict_requirements: ~
|
||||
form: ~
|
||||
csrf_protection: ~
|
||||
validation:
|
||||
enable_annotations: true
|
||||
templating:
|
||||
engines: ['twig']
|
||||
default_locale: "%env(LOCALE)%"
|
||||
trusted_hosts: ~
|
||||
session:
|
||||
# handler_id set to null will use default session handler from php.ini
|
||||
handler_id: session.handler.native_file
|
||||
save_path: "%kernel.project_dir%/var/sessions/%kernel.environment%"
|
||||
fragments: ~
|
||||
http_method_override: true
|
||||
assets: ~
|
||||
10
config/packages/http_discovery.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
services:
|
||||
Psr\Http\Message\RequestFactoryInterface: '@http_discovery.psr17_factory'
|
||||
Psr\Http\Message\ResponseFactoryInterface: '@http_discovery.psr17_factory'
|
||||
Psr\Http\Message\ServerRequestFactoryInterface: '@http_discovery.psr17_factory'
|
||||
Psr\Http\Message\StreamFactoryInterface: '@http_discovery.psr17_factory'
|
||||
Psr\Http\Message\UploadedFileFactoryInterface: '@http_discovery.psr17_factory'
|
||||
Psr\Http\Message\UriFactoryInterface: '@http_discovery.psr17_factory'
|
||||
|
||||
http_discovery.psr17_factory:
|
||||
class: Http\Discovery\Psr17Factory
|
||||
21
config/packages/httplug.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
httplug:
|
||||
clients:
|
||||
wallabag_core:
|
||||
factory: App\Helper\HttpClientFactory
|
||||
config:
|
||||
defaults:
|
||||
timeout: 10
|
||||
plugins: ['httplug.plugin.logger']
|
||||
wallabag_core.entry.download_images:
|
||||
factory: 'httplug.factory.auto'
|
||||
plugins: ['httplug.plugin.logger']
|
||||
wallabag_import.pocket.client:
|
||||
factory: 'httplug.factory.auto'
|
||||
plugins:
|
||||
- 'httplug.plugin.logger'
|
||||
- header_defaults:
|
||||
headers:
|
||||
'content-type': 'application/json'
|
||||
'X-Accept': 'application/json'
|
||||
discovery:
|
||||
client: false
|
||||
9
config/packages/jms_serializer.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
jms_serializer:
|
||||
handlers:
|
||||
# to be removed if we switch to (default) ISO8601 datetime instead of ATOM
|
||||
# see: https://github.com/schmittjoh/JMSSerializerBundle/pull/494
|
||||
datetime:
|
||||
default_format: "Y-m-d\\TH:i:sO" # ATOMjms_serializer:
|
||||
visitors:
|
||||
xml_serialization:
|
||||
format_output: '%kernel.debug%'
|
||||
3
config/packages/kphoen_rulerz.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
kphoen_rulerz:
|
||||
targets:
|
||||
doctrine: true
|
||||
3
config/packages/mailer.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
framework:
|
||||
mailer:
|
||||
dsn: '%env(MAILER_DSN)%'
|
||||
3
config/packages/monolog.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
monolog:
|
||||
channels:
|
||||
- deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists
|
||||
17
config/packages/nelmio_api_doc.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
nelmio_api_doc:
|
||||
areas: # to filter documented areas
|
||||
path_patterns:
|
||||
- ^/api(?!/doc$) # Accepts routes under /api except /api/doc
|
||||
documentation:
|
||||
info:
|
||||
title: wallabag API documentation
|
||||
description: This is the API documentation of wallabag
|
||||
version: 2.x
|
||||
securityDefinitions:
|
||||
Bearer:
|
||||
type: apiKey
|
||||
description: 'Value: Bearer {jwt}'
|
||||
name: Authorization
|
||||
in: header
|
||||
security:
|
||||
- Bearer: []
|
||||
28
config/packages/nelmio_cors.yaml
Normal file
@ -0,0 +1,28 @@
|
||||
nelmio_cors:
|
||||
defaults:
|
||||
allow_credentials: false
|
||||
allow_origin: []
|
||||
allow_headers: []
|
||||
allow_methods: []
|
||||
expose_headers: []
|
||||
max_age: 0
|
||||
hosts: []
|
||||
#origin_regex: false
|
||||
paths:
|
||||
'^/api/':
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_methods: ['POST', 'PUT', 'PATCH','GET', 'DELETE']
|
||||
max_age: 3600
|
||||
'^/oauth/':
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
|
||||
max_age: 3600
|
||||
'^/':
|
||||
#origin_regex: true
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
|
||||
max_age: 3600
|
||||
hosts: ['^api\.']
|
||||
148
config/packages/old_sound_rabbit_mq.yaml
Normal file
@ -0,0 +1,148 @@
|
||||
old_sound_rabbit_mq:
|
||||
connections:
|
||||
default:
|
||||
url: '%env(RABBITMQ_URL)%'
|
||||
vhost: /
|
||||
lazy: true
|
||||
producers:
|
||||
import_pocket:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
type: topic
|
||||
import_readability:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.readability'
|
||||
type: topic
|
||||
import_pinboard:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pinboard'
|
||||
type: topic
|
||||
import_delicious:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.delicious'
|
||||
type: topic
|
||||
import_instapaper:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
type: topic
|
||||
import_wallabag_v1:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
type: topic
|
||||
import_wallabag_v2:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
type: topic
|
||||
import_elcurator:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.elcurator'
|
||||
type: topic
|
||||
import_firefox:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
type: topic
|
||||
import_chrome:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
type: topic
|
||||
consumers:
|
||||
import_pocket:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
callback: wallabag_import.consumer.amqp.pocket
|
||||
qos_options: {prefetch_count: 10}
|
||||
import_readability:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.readability'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.readability'
|
||||
callback: wallabag_import.consumer.amqp.readability
|
||||
qos_options: {prefetch_count: 10}
|
||||
import_instapaper:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
callback: wallabag_import.consumer.amqp.instapaper
|
||||
qos_options: {prefetch_count: 10}
|
||||
import_pinboard:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pinboard'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pinboard'
|
||||
callback: wallabag_import.consumer.amqp.pinboard
|
||||
qos_options: {prefetch_count: 10}
|
||||
import_delicious:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.delicious'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.delicious'
|
||||
callback: wallabag_import.consumer.amqp.delicious
|
||||
qos_options: {prefetch_count: 10}
|
||||
import_wallabag_v1:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
callback: wallabag_import.consumer.amqp.wallabag_v1
|
||||
qos_options: {prefetch_count: 10}
|
||||
import_wallabag_v2:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
callback: wallabag_import.consumer.amqp.wallabag_v2
|
||||
qos_options: {prefetch_count: 10}
|
||||
import_elcurator:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.elcurator'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.elcurator'
|
||||
callback: wallabag_import.consumer.amqp.elcurator
|
||||
qos_options: {prefetch_count: 10}
|
||||
import_firefox:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
callback: wallabag_import.consumer.amqp.firefox
|
||||
qos_options: {prefetch_count: 10}
|
||||
import_chrome:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
callback: wallabag_import.consumer.amqp.chrome
|
||||
qos_options: {prefetch_count: 10}
|
||||
18
config/packages/prod/doctrine.yaml
Normal file
@ -0,0 +1,18 @@
|
||||
doctrine:
|
||||
orm:
|
||||
auto_generate_proxy_classes: false
|
||||
proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies'
|
||||
query_cache_driver:
|
||||
type: pool
|
||||
pool: doctrine.system_cache_pool
|
||||
result_cache_driver:
|
||||
type: pool
|
||||
pool: doctrine.result_cache_pool
|
||||
|
||||
framework:
|
||||
cache:
|
||||
pools:
|
||||
doctrine.result_cache_pool:
|
||||
adapter: cache.app
|
||||
doctrine.system_cache_pool:
|
||||
adapter: cache.system
|
||||
6
config/packages/prod/jsm_serializer.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
jms_serializer:
|
||||
visitors:
|
||||
json_serialization:
|
||||
options:
|
||||
- JSON_UNESCAPED_SLASHES
|
||||
- JSON_PRESERVE_ZERO_FRACTION
|
||||
21
config/packages/prod/monolog.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: fingers_crossed
|
||||
action_level: error
|
||||
handler: nested
|
||||
excluded_http_codes: [404, 405]
|
||||
buffer_size: 50 # How many messages should be saved? Prevent memory leaks
|
||||
nested:
|
||||
type: stream
|
||||
path: php://stderr
|
||||
level: debug
|
||||
formatter: monolog.formatter.json
|
||||
console:
|
||||
type: console
|
||||
process_psr_3_messages: false
|
||||
channels: ["!event", "!doctrine"]
|
||||
deprecation:
|
||||
type: stream
|
||||
channels: [deprecation]
|
||||
path: php://stderr
|
||||
3
config/packages/prod/routing.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
framework:
|
||||
router:
|
||||
strict_requirements: null
|
||||