mirror of
https://github.com/wallabag/wallabag.git
synced 2025-12-25 21:57:33 +01:00
Compare commits
1 Commits
change-rea
...
2.0.0-beta
| Author | SHA1 | Date | |
|---|---|---|---|
| 94314e14ee |
@ -8,16 +8,3 @@ indent_style = space
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.{js,css,scss}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*akefile]
|
||||
indent_style = tab
|
||||
|
||||
[.github/**.yml]
|
||||
indent_size = 2
|
||||
|
||||
[phpstan-baseline.neon]
|
||||
indent_style = tab
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
{
|
||||
"extends": "airbnb-base",
|
||||
"parser": "@babel/eslint-parser",
|
||||
"parserOptions": {
|
||||
"requireConfigFile": false
|
||||
},
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true
|
||||
},
|
||||
"globals": {
|
||||
"Routing": true
|
||||
},
|
||||
"rules": {
|
||||
"import/no-extraneous-dependencies": ["error", {"devDependencies": true, "optionalDependencies": true, "peerDependencies": true}]
|
||||
}
|
||||
}
|
||||
7
.gitattributes
vendored
7
.gitattributes
vendored
@ -1,7 +0,0 @@
|
||||
/.editorconfig export-ignore
|
||||
/.gitattributes export-ignore
|
||||
/.github export-ignore
|
||||
/.gitignore export-ignore
|
||||
/phpstan.neon export-ignore
|
||||
/phpunit.xml.dist export-ignore
|
||||
/tests export-ignore
|
||||
65
.github/CONTRIBUTING.md
vendored
65
.github/CONTRIBUTING.md
vendored
@ -1,61 +1,24 @@
|
||||
# How to contribute
|
||||
|
||||
## Test it locally
|
||||
|
||||
### Using Docker
|
||||
|
||||
- Clone the repository
|
||||
- Ensure your Docker daemon is running
|
||||
- Copy `docker/php/env.example` to `docker/php/env` and customize
|
||||
- Launch `docker compose run --rm php composer install` to bootstrap php dependencies
|
||||
- Launch `docker compose run --rm php bin/console wallabag:install` to bootstrap your installation
|
||||
- Launch `docker compose run --rm php yarn install` to bootstrap dependencies for the frontend
|
||||
- Launch `docker compose run --rm php yarn build:dev` to build assets for the frontend
|
||||
- Launch `docker compose up -d` to start the stack
|
||||
|
||||
You'll then have:
|
||||
- a PHP daemon with standalone web server
|
||||
- a Redis database (to handle imports)
|
||||
- a SQLite database to store articles
|
||||
|
||||
You can now access your wallabag instance using that url: `http://127.0.0.1:8000`
|
||||
|
||||
If you want to test using an other database than SQLite, uncomment the `postgres` or `mariadb` code from the `compose.yaml` file at the root of the repo. Also uncomment related line in the `php` section so the database will be linked to your PHP instance.
|
||||
|
||||
### Using your own PHP server
|
||||
|
||||
- Ensure you are running PHP >= 8.2.
|
||||
- Clone the repository
|
||||
- Launch `composer install`
|
||||
- If you got some errors, fix them (they might be related to some missing PHP extension from your machine)
|
||||
- Then `php bin/console wallabag:install`
|
||||
- If you got some errors, fix them (they might be related to some missing PHP extension from your machine)
|
||||
- Run `php bin/console server:run`
|
||||
|
||||
You can now access your wallabag instance using that url: `http://127.0.0.1:8000`
|
||||
|
||||
## You found a bug
|
||||
Please [open a new issue](https://github.com/wallabag/wallabag/issues/new).
|
||||
|
||||
To fix the bug quickly, we need some infos: please answer to the questions in the issue form.
|
||||
To fix the bug quickly, we need some infos:
|
||||
* your wallabag version (in `app/config/config.yml`, see `wallabag_core.version`)
|
||||
* your webserver installation :
|
||||
* type of hosting (shared or dedicated)
|
||||
* in case of a dedicated server, the server and OS used
|
||||
* the php version used, eventually `phpinfo()`
|
||||
* which storage system you choose at install (SQLite, MySQL/MariaDB or PostgreSQL)
|
||||
* any particular details which could be related
|
||||
|
||||
If you have the skills, look for errors into PHP, server and application logs (see `var/logs`).
|
||||
If relevant :
|
||||
* the link you want to save and which causes problem
|
||||
* the file you want to import into wallabag, or just an extract
|
||||
|
||||
If you have the skills, look for errors into php, server and application (see `var/logs`) logs
|
||||
|
||||
Note : If you have large portions of text, use [Github's Gist service](https://gist.github.com/) or other pastebin-like.
|
||||
|
||||
## 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 `make test`.
|
||||
|
||||
To run the PHP formatter run `make fix-cs`.
|
||||
|
||||
To run the PHPStan static analysis run `make phpstan`.
|
||||
|
||||
To run the JS linter run `make lint-js`.
|
||||
|
||||
To run the SCSS linter run `make lint-scss`.
|
||||
Please fork wallabag and work with **the v2 branch** only. **Do not work on master branch**.
|
||||
|
||||
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@ -1,2 +0,0 @@
|
||||
# github: [nicosomb, j0k3r, tcitworld, Kdecherf]
|
||||
liberapay: wallabag
|
||||
18
.github/ISSUE_TEMPLATE.md
vendored
Normal file
18
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
### Issue details
|
||||
|
||||
Please provide issue details here.
|
||||
Remember, this is _not_ a place to ask questions. For that, go to http://gitter.im/wallabag/wallabag.
|
||||
|
||||
### Environment
|
||||
|
||||
* wallabag version (or git revision) that exhibits the issue:
|
||||
* Last wallabag version that did not exhibit the issue (if applicable):
|
||||
* php version:
|
||||
* OS:
|
||||
* type of hosting (shared or dedicated):
|
||||
* which storage system you choose at install (SQLite, MySQL/MariaDB or PostgreSQL):
|
||||
|
||||
### Steps to reproduce/test case
|
||||
|
||||
Please provide necessary steps for reproduction of this issue, or better the
|
||||
reduced test case (without any external dependencies, if possible).
|
||||
30
.github/ISSUE_TEMPLATE/1-fetching-content.md
vendored
30
.github/ISSUE_TEMPLATE/1-fetching-content.md
vendored
@ -1,30 +0,0 @@
|
||||
---
|
||||
name: Fetching content
|
||||
about: If wallabag can't extract content for an URL
|
||||
title: Wrong display in wallabag (HOST)
|
||||
labels: Site Config
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Thank you for reporting a fetching issue.
|
||||
|
||||
Please fill in as much of the template below as you're able.
|
||||
-->
|
||||
|
||||
**Before submitting the issue, please read:**
|
||||
If wallabag can't parse / extract content for a given link, please first read the documentation about it:
|
||||
http://doc.wallabag.org/en/user/errors_during_fetching.html#how-can-i-help-to-fix-that
|
||||
|
||||
We have a lot of requests about fetching config issue. It'll help us A LOT if you give a try to fix it on your own following the doc.
|
||||
If you failed to fix it yourself, tick the following boxes:
|
||||
- [ ] I've tried myself without success
|
||||
- [ ] I've replaced `HOST` in the issue title with the host of the URL that can't be fetched (ie: `nytimes.com`, `20minutes.fr`, `bbc.com`, etc.)
|
||||
|
||||
**Content related:**
|
||||
- URL: [full url of the content]
|
||||
- wallabag version: [e.g. 2.4.0]
|
||||
|
||||
**Describe what's wrong:**
|
||||
A clear and concise description of what you expected to happen.
|
||||
43
.github/ISSUE_TEMPLATE/2-bug-report.md
vendored
43
.github/ISSUE_TEMPLATE/2-bug-report.md
vendored
@ -1,43 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Thank you for reporting an issue.
|
||||
|
||||
Please fill in as much of the template below as you're able.
|
||||
|
||||
Version: if you know it, otherwise use the git revision
|
||||
Installation: How did you install wallabag? Using git clone, the docker image, an installer, downloading the package, etc.
|
||||
PHP version: The version of PHP you are using
|
||||
OS: The host running wallabag
|
||||
Database: The storage system your instance is using (SQLite, MySQL/MariaDB or PostgreSQL) with the version
|
||||
Parameters: Paste the content of your app/config/parameters.yml (hide sensitive stuff if you want)
|
||||
-->
|
||||
### Environment
|
||||
|
||||
* **Version**:
|
||||
* **Installation**:
|
||||
* **PHP version**:
|
||||
* **OS**:
|
||||
* **Database**:
|
||||
* **Parameters**:
|
||||
|
||||
<details>
|
||||
<summary>My <code>app/config/parameters.yml</code> is:</summary>
|
||||
|
||||
```
|
||||
PASTE HERE
|
||||
```
|
||||
</details>
|
||||
|
||||
### What steps will reproduce the bug?
|
||||
|
||||
<!--
|
||||
Enter details about your bug and how to reproduce it
|
||||
-->
|
||||
26
.github/ISSUE_TEMPLATE/3-feature-request.md
vendored
26
.github/ISSUE_TEMPLATE/3-feature-request.md
vendored
@ -1,26 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: Feature
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Thank you for suggesting an idea to make wallabag better.
|
||||
|
||||
Please fill in as much of the template below as you're able.
|
||||
-->
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,5 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Want to ask something?
|
||||
url: https://matrix.to/#/#wallabag:matrix.org
|
||||
about: Use Matrix to ask questions.
|
||||
28
.github/PULL_REQUEST_TEMPLATE.md
vendored
28
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,23 +1,11 @@
|
||||
| Q | A
|
||||
| ------------- | ---
|
||||
| Bug fix? | yes/no
|
||||
| New feature? | yes/no
|
||||
| BC breaks? | yes/no
|
||||
| Deprecations? | yes/no
|
||||
| Tests pass? | yes/no
|
||||
| Documentation | yes/no
|
||||
| Translation | yes/no
|
||||
| CHANGELOG.md | yes/no
|
||||
| Bug fix? | yes|no
|
||||
| New feature? | yes|no
|
||||
| BC breaks? | yes|no
|
||||
| Deprecations? | yes|no
|
||||
| Tests pass? | yes|no
|
||||
| Documentation | yes|no
|
||||
| Translation | yes|no
|
||||
| Fixed tickets | comma-separated list of tickets fixed by the PR, if any
|
||||
| License | MIT
|
||||
|
||||
<!--
|
||||
Please list the issues your PR fixes using special keywords, see
|
||||
https://help.github.com/articles/closing-issues-using-keywords/
|
||||
|
||||
Fixes #…
|
||||
-->
|
||||
|
||||
<!--
|
||||
- Please fill in this template according to the PR you're about to submit.
|
||||
- Replace this comment by a description of what your PR is solving.
|
||||
-->
|
||||
|
||||
51
.github/dependabot.yml
vendored
51
.github/dependabot.yml
vendored
@ -1,51 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
groups:
|
||||
babel-dependencies:
|
||||
patterns:
|
||||
- "*babel*"
|
||||
fontsource-dependencies:
|
||||
patterns:
|
||||
- "*fontsource*"
|
||||
ignore:
|
||||
- dependency-name: "@materializecss/materialize"
|
||||
versions:
|
||||
- "> 1.2.2"
|
||||
- package-ecosystem: composer
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
groups:
|
||||
symfony-dependencies:
|
||||
patterns:
|
||||
- "symfony/*"
|
||||
twig-dependencies:
|
||||
patterns:
|
||||
- "twig/*"
|
||||
phpstan-dependencies:
|
||||
patterns:
|
||||
- "phpstan/*"
|
||||
reviewers:
|
||||
- j0k3r
|
||||
- yguedidi
|
||||
- Kdecherf
|
||||
ignore:
|
||||
- dependency-name: symfony/*
|
||||
update-types: [ "version-update:semver-major" ]
|
||||
- package-ecosystem: github-actions
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
BIN
.github/images/screenshot.png
vendored
BIN
.github/images/screenshot.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 837 KiB |
7
.github/release.yml
vendored
7
.github/release.yml
vendored
@ -1,7 +0,0 @@
|
||||
changelog:
|
||||
exclude:
|
||||
labels:
|
||||
- Dependencies
|
||||
authors:
|
||||
- dependabot
|
||||
- weblate
|
||||
90
.github/workflows/coding-standards.yml
vendored
90
.github/workflows/coding-standards.yml
vendored
@ -1,90 +0,0 @@
|
||||
name: "CS"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- "2.**"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
coding-standards:
|
||||
name: "CS Fixer, PHPStan & TwigCS"
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
coverage: "none"
|
||||
php-version: "8.2"
|
||||
tools: cs2pr, pecl
|
||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: 'yarn'
|
||||
|
||||
- name: "Setup MySQL"
|
||||
run: |
|
||||
sudo systemctl start mysql.service
|
||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
||||
cp app/config/tests/parameters_test.mysql.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Install dependencies with Composer"
|
||||
id: composer-install
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Install dependencies with Yarn"
|
||||
id: yarn-install
|
||||
run: yarn install
|
||||
|
||||
- name: "Run Composer validate"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "composer validate"
|
||||
|
||||
- name: "Run Composer dependency analyser"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "bin/composer-dependency-analyser"
|
||||
|
||||
- name: "Run PHP CS Fixer"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "bin/php-cs-fixer fix --verbose --dry-run --format=checkstyle | cs2pr"
|
||||
|
||||
- name: "Generate test cache for PHPStan"
|
||||
id: test-cache
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "php bin/console cache:clear --env=test"
|
||||
|
||||
- name: "Run PHPStan"
|
||||
if: always() && steps.test-cache.outcome == 'success'
|
||||
run: "php bin/phpstan analyse --no-progress --error-format=checkstyle | cs2pr"
|
||||
|
||||
- name: "Run TwigCS"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "php bin/twigcs --severity=error --display=blocking --reporter checkstyle app/ src/ | cs2pr"
|
||||
|
||||
- name: "Run ergebnis/composer-normalize"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "composer normalize --dry-run --no-check-lock"
|
||||
|
||||
- name: "Run ESLint"
|
||||
if: always() && steps.yarn-install.outcome == 'success'
|
||||
run: "yarn lint:js"
|
||||
|
||||
- name: "Run Stylelint"
|
||||
if: always() && steps.yarn-install.outcome == 'success'
|
||||
run: "yarn lint:scss"
|
||||
238
.github/workflows/continuous-integration.yml
vendored
238
.github/workflows/continuous-integration.yml
vendored
@ -1,238 +0,0 @@
|
||||
name: "CI"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- "2.**"
|
||||
|
||||
env:
|
||||
# Force disabling the reporting of Doctrine deprecation notices for now
|
||||
DOCTRINE_DEPRECATIONS: none
|
||||
PGPASSWORD: wallabagrocks
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
jobs:
|
||||
phpunit:
|
||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }}"
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
rabbitmq:
|
||||
image: rabbitmq:3-alpine
|
||||
ports:
|
||||
- 5672:5672
|
||||
redis:
|
||||
image: redis:6-alpine
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php:
|
||||
- "8.2"
|
||||
- "8.3"
|
||||
- "8.4"
|
||||
database:
|
||||
- "sqlite"
|
||||
- "mysql"
|
||||
- "pgsql"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
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: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: 'yarn'
|
||||
|
||||
- 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@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Install dependencies with Yarn"
|
||||
run: yarn install
|
||||
|
||||
- name: "Build assets with Yarn"
|
||||
run: yarn build:dev
|
||||
|
||||
- name: "Prepare database configuration"
|
||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/phpunit -v"
|
||||
|
||||
phpunit_no_prefix:
|
||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }} without prefix"
|
||||
runs-on: ubuntu-latest
|
||||
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@v4"
|
||||
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: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: 'yarn'
|
||||
|
||||
- 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@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Install dependencies with Yarn"
|
||||
run: yarn install
|
||||
|
||||
- name: "Build assets with Yarn"
|
||||
run: yarn build:dev
|
||||
|
||||
- name: "Prepare database configuration"
|
||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/phpunit -v"
|
||||
|
||||
phpunit-without-rmq-redis:
|
||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }} without Rabbit & Redis"
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php:
|
||||
- "8.3"
|
||||
database:
|
||||
- "sqlite"
|
||||
- "mysql"
|
||||
- "pgsql"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
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: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: 'yarn'
|
||||
|
||||
- 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@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Install dependencies with Yarn"
|
||||
run: yarn install
|
||||
|
||||
- name: "Build assets with Yarn"
|
||||
run: yarn build:dev
|
||||
|
||||
- name: "Prepare database configuration"
|
||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/phpunit -v"
|
||||
25
.github/workflows/dependabot-automerge-js.yml
vendored
25
.github/workflows/dependabot-automerge-js.yml
vendored
@ -1,25 +0,0 @@
|
||||
name: Auto-merge Dependabot JS
|
||||
on: pull_request_target
|
||||
|
||||
permissions:
|
||||
pull-requests: write
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
dependabot:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.actor == 'dependabot[bot]' }}
|
||||
steps:
|
||||
- name: Dependabot metadata
|
||||
id: metadata
|
||||
uses: dependabot/fetch-metadata@v2.4.0
|
||||
with:
|
||||
github-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
- name: Approve and merge minor updates
|
||||
if: ${{ steps.metadata.outputs.package-ecosystem == 'npm_and_yarn' && (steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch') }}
|
||||
run: |
|
||||
gh pr review --approve "$PR_URL"
|
||||
gh pr merge --auto --merge "$PR_URL"
|
||||
env:
|
||||
PR_URL: ${{ github.event.pull_request.html_url }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
44
.github/workflows/translations.yml
vendored
44
.github/workflows/translations.yml
vendored
@ -1,44 +0,0 @@
|
||||
name: "Translations"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- "2.**"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
translations:
|
||||
name: "Translations"
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php:
|
||||
- "8.2"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
coverage: "none"
|
||||
php-version: "${{ matrix.php }}"
|
||||
tools: pecl
|
||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: "Install dependencies with Composer"
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Validate translations"
|
||||
run: "php bin/console lint:yaml translations -v"
|
||||
45
.github/workflows/upload-release-package.yml
vendored
45
.github/workflows/upload-release-package.yml
vendored
@ -1,45 +0,0 @@
|
||||
name: "Upload release package"
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- created
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php:
|
||||
- "8.2"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
coverage: "none"
|
||||
php-version: "${{ matrix.php }}"
|
||||
tools: pecl, composer:2.2
|
||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: "yarn"
|
||||
|
||||
- name: Create the package
|
||||
run: make release VERSION=${{ github.event.release.tag_name }}
|
||||
|
||||
- name: Upload the package to the release
|
||||
uses: shogo82148/actions-upload-release-asset@v1
|
||||
with:
|
||||
upload_url: ${{ github.event.release.upload_url }}
|
||||
asset_path: /tmp/wllbg-release/wallabag-${{ github.event.release.tag_name }}.tar.gz
|
||||
42
.gitignore
vendored
42
.gitignore
vendored
@ -9,13 +9,7 @@
|
||||
!/var/sessions
|
||||
/var/sessions/*
|
||||
!var/sessions/.gitkeep
|
||||
/bin/*
|
||||
!/bin/console
|
||||
.php-cs-fixer.php
|
||||
.php-cs-fixer.cache
|
||||
.phpunit.result.cache
|
||||
phpunit.xml
|
||||
compose.override.yaml
|
||||
!var/SymfonyRequirements.php
|
||||
|
||||
# Parameters
|
||||
/app/config/parameters.yml
|
||||
@ -24,41 +18,23 @@ compose.override.yaml
|
||||
/vendor/
|
||||
|
||||
# Assets and user uploads
|
||||
web/uploads/
|
||||
/web/bundles/*
|
||||
!/web/bundles/.gitkeep
|
||||
/web/assets/images/*
|
||||
!web/assets/images/.gitkeep
|
||||
/web/build/*
|
||||
/web/bundles/
|
||||
/web/uploads/
|
||||
|
||||
# Build
|
||||
/app/build
|
||||
/build
|
||||
/coverage
|
||||
|
||||
# Development
|
||||
docker/php/env
|
||||
docker/php/blackfire
|
||||
|
||||
# Composer PHAR
|
||||
/composer.phar
|
||||
|
||||
# Data for wallabag
|
||||
data/assets/*
|
||||
data/db/wallabag*.sqlite
|
||||
|
||||
# assets stuff
|
||||
node_modules/
|
||||
bin
|
||||
package-lock.json
|
||||
# Docker container logs and data
|
||||
docker/logs/
|
||||
docker/data/
|
||||
|
||||
# Test-generated files
|
||||
admin-export.json
|
||||
specialexport.json
|
||||
/data/site-credentials-secret-key.txt
|
||||
|
||||
# Custom CSS file
|
||||
web/custom.css
|
||||
|
||||
.env.local
|
||||
|
||||
yarn-error.log
|
||||
# To avoid crazy stuff on some PR, we must manually FORCE ADD IT on each new release
|
||||
composer.lock
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
<?php
|
||||
|
||||
$config = new PhpCsFixer\Config();
|
||||
|
||||
return $config
|
||||
->setRiskyAllowed(true)
|
||||
->setRules([
|
||||
'@Symfony' => true,
|
||||
'@Symfony:risky' => true,
|
||||
'array_syntax' => [
|
||||
'syntax' => 'short',
|
||||
],
|
||||
'combine_consecutive_unsets' => true,
|
||||
'heredoc_to_nowdoc' => true,
|
||||
'no_extra_blank_lines' => [
|
||||
'tokens' => [
|
||||
'break',
|
||||
'continue',
|
||||
'extra',
|
||||
'return',
|
||||
'throw',
|
||||
'use',
|
||||
'parenthesis_brace_block',
|
||||
'square_brace_block',
|
||||
'curly_brace_block',
|
||||
],
|
||||
],
|
||||
'no_unreachable_default_argument_value' => true,
|
||||
'no_useless_concat_operator' => false,
|
||||
'no_useless_else' => true,
|
||||
'no_useless_return' => true,
|
||||
'ordered_class_elements' => true,
|
||||
'ordered_imports' => true,
|
||||
'php_unit_strict' => true,
|
||||
'phpdoc_order' => true,
|
||||
'phpdoc_separation' => false,
|
||||
// 'psr_autoloading' => true,
|
||||
'strict_comparison' => true,
|
||||
'strict_param' => true,
|
||||
'concat_space' => [
|
||||
'spacing' => 'one',
|
||||
],
|
||||
])
|
||||
->setFinder(
|
||||
PhpCsFixer\Finder::create()
|
||||
->exclude([
|
||||
'node_modules',
|
||||
'vendor',
|
||||
'var',
|
||||
'web',
|
||||
])
|
||||
->in(__DIR__)
|
||||
)
|
||||
->setCacheFile('.php-cs-fixer.cache')
|
||||
;
|
||||
28
.scrutinizer.yml
Normal file
28
.scrutinizer.yml
Normal file
@ -0,0 +1,28 @@
|
||||
filter:
|
||||
paths:
|
||||
- src/*
|
||||
excluded_paths:
|
||||
- 'vendor/*'
|
||||
- 'app/*'
|
||||
- 'var/*'
|
||||
- 'web/*'
|
||||
- 'src/Wallabag/*Bundle/Tests/*'
|
||||
- '*Test.php'
|
||||
|
||||
tools:
|
||||
php_cs_fixer: true
|
||||
php_analyzer: true
|
||||
php_mess_detector: true
|
||||
php_changetracking: true
|
||||
php_code_sniffer: true
|
||||
php_pdepend: true
|
||||
sensiolabs_security_checker: true
|
||||
#external_code_coverage:
|
||||
# timeout: 3600
|
||||
php_code_coverage: true
|
||||
php_sim: false
|
||||
php_cpd: false
|
||||
|
||||
checks:
|
||||
php:
|
||||
code_rating: true
|
||||
55
.travis.yml
Normal file
55
.travis.yml
Normal file
@ -0,0 +1,55 @@
|
||||
language: php
|
||||
|
||||
# faster builds on docker-container setup
|
||||
sudo: false
|
||||
|
||||
# used for HHVM
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- tidy
|
||||
|
||||
# cache vendor dirs
|
||||
cache:
|
||||
directories:
|
||||
- vendor
|
||||
- $HOME/.composer/cache
|
||||
|
||||
php:
|
||||
- 5.5
|
||||
- 5.6
|
||||
- 7.0
|
||||
- hhvm
|
||||
|
||||
env:
|
||||
- DB=mysql
|
||||
- DB=pgsql
|
||||
- DB=sqlite
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
||||
exclude:
|
||||
- php: hhvm
|
||||
env: DB=pgsql # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
|
||||
allow_failures:
|
||||
- php: hhvm
|
||||
|
||||
# exclude v1 branches
|
||||
branches:
|
||||
except:
|
||||
- master
|
||||
- dev
|
||||
|
||||
before_script:
|
||||
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
|
||||
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then phpenv config-rm xdebug.ini; fi;
|
||||
- composer self-update --no-progress
|
||||
- if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag_test;' -U postgres; fi;
|
||||
|
||||
before_install:
|
||||
- if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi;
|
||||
|
||||
script:
|
||||
- travis_wait composer update --no-interaction --no-progress
|
||||
- ant prepare-$DB
|
||||
- bin/phpunit -v
|
||||
1231
CHANGELOG.md
1231
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@ -1,76 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at hello@wallabag.org. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
||||
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2013-current Nicolas Lœuillet
|
||||
Copyright (c) 2013-2016 Nicolas Lœuillet
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
wallabag is mainly developed by [Nicolas Lœuillet](https://github.com/nicosomb), [@j0k3r](https://github.com/j0k3r), [@tcitworld](https://github.com/tcitworld) and [@Kdecherf](https://github.com/Kdecherf) under the MIT License.
|
||||
wallabag is mainly developed by [Nicolas Lœuillet](https://github.com/nicosomb), [@j0k3r](https://github.com/j0k3r) and [@tcitworld](https://github.com/tcitworld) under the MIT License.
|
||||
|
||||
Thank you [to others contributors](https://github.com/wallabag/wallabag/graphs/contributors).
|
||||
|
||||
13
Capfile
Normal file
13
Capfile
Normal file
@ -0,0 +1,13 @@
|
||||
set :deploy_config_path, 'app/config/capistrano/deploy.rb'
|
||||
set :stage_config_path, 'app/config/capistrano/deploy'
|
||||
|
||||
# Load DSL and set up stages
|
||||
require 'capistrano/setup'
|
||||
|
||||
# Include default deployment tasks
|
||||
require 'capistrano/deploy'
|
||||
|
||||
require 'capistrano/symfony'
|
||||
|
||||
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
|
||||
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
|
||||
75
GNUmakefile
75
GNUmakefile
@ -1,75 +0,0 @@
|
||||
SHELL=bash
|
||||
TMP_FOLDER=/tmp
|
||||
RELEASE_FOLDER=wllbg-release
|
||||
|
||||
# ensure the ENV variable is well defined
|
||||
AVAILABLE_ENV := prod dev test
|
||||
ifneq ($(filter $(ENV),$(AVAILABLE_ENV)),)
|
||||
# all good
|
||||
else
|
||||
# not good, force it to "prod"
|
||||
override ENV = prod
|
||||
endif
|
||||
|
||||
DOCKER_COMPOSE_RUNNING := $(shell docker compose ps -q | grep -q . && echo 1 || echo 0)
|
||||
|
||||
ifeq ($(DOCKER_COMPOSE_RUNNING), 1)
|
||||
PHP := docker compose run --rm php php
|
||||
PHP_NO_XDEBUG := docker compose run -e XDEBUG_MODE=off --rm php php
|
||||
YARN := docker compose run --rm php yarn
|
||||
else
|
||||
PHP := php
|
||||
PHP_NO_XDEBUG := XDEBUG_MODE=off php
|
||||
YARN := yarn
|
||||
endif
|
||||
|
||||
help: ## Display this help menu
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
install: ## Install wallabag with the latest version
|
||||
@./scripts/install.sh $(ENV)
|
||||
|
||||
update: ## Update the wallabag installation to the latest version
|
||||
@./scripts/update.sh $(ENV)
|
||||
|
||||
dev: ENV=dev
|
||||
dev: build ## Install the latest dev version
|
||||
@./scripts/dev.sh
|
||||
|
||||
run: ## Run the wallabag built-in server
|
||||
@$(PHP) bin/console server:run --env=dev
|
||||
|
||||
build: ## Run webpack
|
||||
@$(YARN) install
|
||||
@$(YARN) build:$(ENV)
|
||||
|
||||
test: ## Launch wallabag testsuite
|
||||
@$(PHP_NO_XDEBUG) -dmemory_limit=-1 bin/phpunit -v
|
||||
|
||||
fix-cs: ## Run PHP-CS-Fixer
|
||||
@$(PHP_NO_XDEBUG) bin/php-cs-fixer fix
|
||||
|
||||
phpstan: ## Run PHPStan
|
||||
@$(PHP_NO_XDEBUG) bin/phpstan analyse
|
||||
|
||||
phpstan-baseline: ## Generate PHPStan baseline
|
||||
@$(PHP_NO_XDEBUG) bin/phpstan analyse --generate-baseline
|
||||
|
||||
lint-js: ## Run ESLint
|
||||
@$(YARN) lint:js
|
||||
|
||||
lint-scss: ## Run Stylelint
|
||||
@$(YARN) lint:scss
|
||||
|
||||
release: ## Create a package. Need a VERSION parameter (eg: `make release VERSION=master`).
|
||||
ifndef VERSION
|
||||
$(error VERSION is not set)
|
||||
endif
|
||||
@./scripts/release.sh $(VERSION) $(TMP_FOLDER) $(RELEASE_FOLDER) $(ENV)
|
||||
|
||||
deploy: ## Deploy wallabag
|
||||
@bundle exec cap staging deploy
|
||||
|
||||
.PHONY: help install update build test release deploy run dev fix-cs phpstan
|
||||
|
||||
.DEFAULT_GOAL := install
|
||||
5
Gemfile
Normal file
5
Gemfile
Normal file
@ -0,0 +1,5 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem 'capistrano', '~> 3.4'
|
||||
gem 'capistrano-symfony', '~> 1.0.0.rc1'
|
||||
gem 'capistrano-composer', '~> 0.0.3'
|
||||
36
Gemfile.lock
Normal file
36
Gemfile.lock
Normal file
@ -0,0 +1,36 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
capistrano (3.4.0)
|
||||
i18n
|
||||
rake (>= 10.0.0)
|
||||
sshkit (~> 1.3)
|
||||
capistrano-composer (0.0.6)
|
||||
capistrano (>= 3.0.0.pre)
|
||||
capistrano-file-permissions (1.0.0)
|
||||
capistrano (~> 3.0)
|
||||
capistrano-symfony (1.0.0.rc1)
|
||||
capistrano (~> 3.1)
|
||||
capistrano-composer (~> 0.0.3)
|
||||
capistrano-file-permissions (~> 1.0)
|
||||
colorize (0.7.7)
|
||||
i18n (0.7.0)
|
||||
net-scp (1.2.1)
|
||||
net-ssh (>= 2.6.5)
|
||||
net-ssh (2.9.2)
|
||||
rake (10.4.2)
|
||||
sshkit (1.7.1)
|
||||
colorize (>= 0.7.0)
|
||||
net-scp (>= 1.1.2)
|
||||
net-ssh (>= 2.8.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
capistrano (~> 3.4)
|
||||
capistrano-composer (~> 0.0.3)
|
||||
capistrano-symfony (~> 1.0.0.rc1)
|
||||
|
||||
BUNDLED WITH
|
||||
1.11.2
|
||||
73
README.md
73
README.md
@ -1,66 +1,25 @@
|
||||
# wallabag
|
||||
[](https://travis-ci.org/wallabag/wallabag)
|
||||
[](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=v2)
|
||||
[](https://gitter.im/wallabag/wallabag)
|
||||
|
||||

|
||||
[](https://matrix.to/#/#wallabag:matrix.org)
|
||||
[](https://liberapay.com/wallabag/donate)
|
||||
[](https://hosted.weblate.org/engage/wallabag/?utm_source=widget)
|
||||

|
||||
# What is wallabag?
|
||||
wallabag is a self hostable application allowing you to not miss any content anymore.
|
||||
Click, save and read it when you can. It extracts content so that you can read it when you have time.
|
||||
|
||||
wallabag is a web application allowing you to save web pages for later reading.
|
||||
Click, save and read it when you want. It extracts content so that you won't be distracted by pop-ups and cie.
|
||||
More informations on our website: [wallabag.org](https://wallabag.org)
|
||||
|
||||
You can install it on your own server, or you can create an account on [wallabag.it](https://wallabag.it).
|
||||
# Want to test the v2?
|
||||
Keep in mind it's an **unstable** branch, everything can be broken :)
|
||||
|
||||

|
||||
If you don't have it yet, please [install composer](https://getcomposer.org/download/). Then you can install wallabag by executing the following commands:
|
||||
|
||||
* Website: [wallabag.org](https://wallabag.org)
|
||||
* Android app: [wallabag/android-app](https://github.com/wallabag/android-app)
|
||||
* 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
|
||||
|
||||
The documentation is available at https://doc.wallabag.org.
|
||||
|
||||
You can contribute to it through its dedicated repository, available here: https://github.com/wallabag/doc.
|
||||
|
||||
## Installation
|
||||
|
||||
Please read [the documentation to see the wallabag requirements](https://doc.wallabag.org/en/admin/installation/requirements.html).
|
||||
|
||||
Then you can install wallabag by executing the following commands:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/wallabag/wallabag.git
|
||||
cd wallabag && make install
|
||||
```
|
||||
SYMFONY_ENV=prod composer create-project wallabag/wallabag wallabag "2.0.0-beta.1" --no-dev
|
||||
php bin/console wallabag:install --env=prod
|
||||
php bin/console server:run --env=prod
|
||||
```
|
||||
|
||||
Now, [configure a virtual host](https://doc.wallabag.org/en/admin/installation/virtualhosts.html) to use your wallabag.
|
||||
|
||||
### Other methods
|
||||
|
||||
Refer to the [installation documentation](https://doc.wallabag.org/en/admin/installation/installation.html) for other installation methods.
|
||||
|
||||
## Translation
|
||||
|
||||
This project uses [Weblate](https://weblate.org/) for translation.
|
||||
|
||||
Feel free to help us [translating wallabag](https://hosted.weblate.org/projects/wallabag/).
|
||||
|
||||
## Contributing
|
||||
|
||||
To learn more about developing wallabag, please refer to the [contribution guide](./.github/CONTRIBUTING.md).
|
||||
|
||||
Content extraction relies on [Graby](https://github.com/j0k3r/graby), [php-readability](https://github.com/j0k3r/php-readability) and [ftr-site-config](https://github.com/fivefilters/ftr-site-config).
|
||||
|
||||
## Sponsors
|
||||
|
||||
<img src="https://api.blackfire.io/blackfire-logo.png" alt="Blackfire" width="200" />
|
||||
|
||||
## License
|
||||
Copyright © 2013-current Nicolas Lœuillet <nicolas@loeuillet.org>
|
||||
|
||||
Copyright © 2013-2016 Nicolas Lœuillet <nicolas@loeuillet.org>
|
||||
This work is free. You can redistribute it and/or modify it under the
|
||||
terms of the MIT License. See the [COPYING.md](./COPYING.md) file for more details.
|
||||
terms of the MIT License. See the COPYING file for more details.
|
||||
|
||||
@ -1,38 +0,0 @@
|
||||
## Definition
|
||||
|
||||
A release is mostly a git tag of http://github.com/wallabag/wallabag, following [semantic versioning](http://semver.org).
|
||||
|
||||
### Steps to release
|
||||
|
||||
During this documentation, we assume the release is `$LAST_WALLABAG_RELEASE` (like 2.3.4).
|
||||
|
||||
#### Prepare the release
|
||||
|
||||
- Update these files with new information
|
||||
- `app/config/wallabag.yml` (`wallabag.version`)
|
||||
- `CHANGELOG.md`
|
||||
- Create a PR named "Prepare $LAST_WALLABAG_RELEASE release".
|
||||
- Wait for test to be ok, merge it.
|
||||
|
||||
#### 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 MD5 sum and create the release blog post (based on the changelog).
|
||||
- Update Dockerfile https://github.com/wallabag/docker (and create a new tag)
|
||||
- Put the next patch version suffixed with `-dev` in `app/config/wallabag.yml` (`wallabag.version`)
|
||||
- Drink a :beer:!
|
||||
|
||||
### Target PHP version
|
||||
`composer.lock` is _always_ built for a particular version, by default the one it is generated (with `composer update`).
|
||||
|
||||
If the PHP version used to generate the .lock isn't a widely available one (like latest PHP versions), a more common one should
|
||||
be locally specified in `composer.lock`:
|
||||
|
||||
```json
|
||||
"config": {
|
||||
"platform": {
|
||||
"php": "8.2.27",
|
||||
"ext-something": "4.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -1,5 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please report security issues to `hello@wallabag.org`
|
||||
@ -1,182 +1,71 @@
|
||||
<?php
|
||||
|
||||
use BabDev\PagerfantaBundle\BabDevPagerfantaBundle;
|
||||
use Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle;
|
||||
use Craue\ConfigBundle\CraueConfigBundle;
|
||||
use DAMA\DoctrineTestBundle\DAMADoctrineTestBundle;
|
||||
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
|
||||
use Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle;
|
||||
use Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle;
|
||||
use FOS\JsRoutingBundle\FOSJsRoutingBundle;
|
||||
use FOS\OAuthServerBundle\FOSOAuthServerBundle;
|
||||
use FOS\RestBundle\FOSRestBundle;
|
||||
use FOS\UserBundle\FOSUserBundle;
|
||||
use JMS\SerializerBundle\JMSSerializerBundle;
|
||||
use KPhoen\RulerZBundle\KPhoenRulerZBundle;
|
||||
use Nelmio\ApiDocBundle\NelmioApiDocBundle;
|
||||
use Nelmio\CorsBundle\NelmioCorsBundle;
|
||||
use OldSound\RabbitMqBundle\OldSoundRabbitMqBundle;
|
||||
use Scheb\TwoFactorBundle\SchebTwoFactorBundle;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle;
|
||||
use Sentry\SentryBundle\SentryBundle;
|
||||
use Spiriit\Bundle\FormFilterBundle\SpiriitFormFilterBundle;
|
||||
use Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle;
|
||||
use Symfony\Bundle\DebugBundle\DebugBundle;
|
||||
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
||||
use Symfony\Bundle\MakerBundle\MakerBundle;
|
||||
use Symfony\Bundle\MonologBundle\MonologBundle;
|
||||
use Symfony\Bundle\SecurityBundle\SecurityBundle;
|
||||
use Symfony\Bundle\TwigBundle\TwigBundle;
|
||||
use Symfony\Bundle\WebProfilerBundle\WebProfilerBundle;
|
||||
use Symfony\Bundle\WebServerBundle\WebServerBundle;
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
use Symfony\WebpackEncoreBundle\WebpackEncoreBundle;
|
||||
use Twig\Extra\TwigExtraBundle\TwigExtraBundle;
|
||||
use Wallabag\Import\ImportCompilerPass;
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
|
||||
class AppKernel extends Kernel
|
||||
{
|
||||
public function registerBundles()
|
||||
{
|
||||
$bundles = [
|
||||
new FrameworkBundle(),
|
||||
new SecurityBundle(),
|
||||
new TwigBundle(),
|
||||
new MonologBundle(),
|
||||
new DoctrineBundle(),
|
||||
new SensioFrameworkExtraBundle(),
|
||||
new FOSRestBundle(),
|
||||
new FOSUserBundle(),
|
||||
new JMSSerializerBundle(),
|
||||
new NelmioApiDocBundle(),
|
||||
new NelmioCorsBundle(),
|
||||
new BazingaHateoasBundle(),
|
||||
new SpiriitFormFilterBundle(),
|
||||
new FOSOAuthServerBundle(),
|
||||
new StofDoctrineExtensionsBundle(),
|
||||
new SchebTwoFactorBundle(),
|
||||
new KPhoenRulerZBundle(),
|
||||
new DoctrineMigrationsBundle(),
|
||||
new CraueConfigBundle(),
|
||||
new BabDevPagerfantaBundle(),
|
||||
new FOSJsRoutingBundle(),
|
||||
new OldSoundRabbitMqBundle(),
|
||||
new SentryBundle(),
|
||||
new TwigExtraBundle(),
|
||||
new WebpackEncoreBundle(),
|
||||
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
|
||||
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
|
||||
new Symfony\Bundle\TwigBundle\TwigBundle(),
|
||||
new Symfony\Bundle\MonologBundle\MonologBundle(),
|
||||
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
|
||||
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
|
||||
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 Liip\ThemeBundle\LiipThemeBundle(),
|
||||
new Wallabag\CoreBundle\WallabagCoreBundle(),
|
||||
new Wallabag\ApiBundle\WallabagApiBundle(),
|
||||
new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
|
||||
new Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle(),
|
||||
new FOS\OAuthServerBundle\FOSOAuthServerBundle(),
|
||||
new Wallabag\UserBundle\WallabagUserBundle(),
|
||||
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
|
||||
new Scheb\TwoFactorBundle\SchebTwoFactorBundle(),
|
||||
new KPhoen\RulerZBundle\KPhoenRulerZBundle(),
|
||||
new Wallabag\ImportBundle\WallabagImportBundle(),
|
||||
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
|
||||
new Craue\ConfigBundle\CraueConfigBundle(),
|
||||
new Lexik\Bundle\MaintenanceBundle\LexikMaintenanceBundle(),
|
||||
new Wallabag\AnnotationBundle\WallabagAnnotationBundle(),
|
||||
];
|
||||
|
||||
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
|
||||
$bundles[] = new DebugBundle();
|
||||
$bundles[] = new WebProfilerBundle();
|
||||
$bundles[] = new DoctrineFixturesBundle();
|
||||
|
||||
if ('test' === $this->getEnvironment()) {
|
||||
$bundles[] = new DAMADoctrineTestBundle();
|
||||
}
|
||||
|
||||
if ('dev' === $this->getEnvironment()) {
|
||||
$bundles[] = new MakerBundle();
|
||||
$bundles[] = new WebServerBundle();
|
||||
}
|
||||
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
|
||||
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
|
||||
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
|
||||
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
|
||||
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
|
||||
}
|
||||
|
||||
return $bundles;
|
||||
}
|
||||
|
||||
public function getRootDir()
|
||||
{
|
||||
return __DIR__;
|
||||
}
|
||||
|
||||
public function getCacheDir()
|
||||
{
|
||||
return dirname(__DIR__) . '/var/cache/' . $this->getEnvironment();
|
||||
return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
|
||||
}
|
||||
|
||||
public function getLogDir()
|
||||
{
|
||||
return dirname(__DIR__) . '/var/logs';
|
||||
return dirname(__DIR__).'/var/logs';
|
||||
}
|
||||
|
||||
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||
{
|
||||
$loader->load($this->getProjectDir() . '/app/config/config_' . $this->getEnvironment() . '.yml');
|
||||
|
||||
$loader->load(function (ContainerBuilder $container): void {
|
||||
// $container->setParameter('container.autowiring.strict_mode', true);
|
||||
// $container->setParameter('container.dumper.inline_class_loader', true);
|
||||
$container->addObjectResource($this);
|
||||
});
|
||||
|
||||
$loader->load(function (ContainerBuilder $container): void {
|
||||
$this->processDatabaseParameters($container);
|
||||
$this->defineRedisUrlEnvVar($container);
|
||||
$this->defineRabbitMqUrlEnvVar($container);
|
||||
});
|
||||
}
|
||||
|
||||
protected function build(ContainerBuilder $container)
|
||||
{
|
||||
$container->addCompilerPass(new ImportCompilerPass());
|
||||
}
|
||||
|
||||
private function processDatabaseParameters(ContainerBuilder $container)
|
||||
{
|
||||
$scheme = match ($container->getParameter('database_driver')) {
|
||||
'pdo_mysql' => 'mysql',
|
||||
'pdo_pgsql' => 'pgsql',
|
||||
'pdo_sqlite' => 'sqlite',
|
||||
default => throw new RuntimeException('Unsupported database driver: ' . $container->getParameter('database_driver')),
|
||||
};
|
||||
|
||||
$container->setParameter('database_scheme', $scheme);
|
||||
|
||||
if ('sqlite' === $scheme) {
|
||||
$container->setParameter('database_name', $container->getParameter('database_path'));
|
||||
}
|
||||
|
||||
$container->setParameter('database_user', (string) $container->getParameter('database_user'));
|
||||
$container->setParameter('database_password', (string) $container->getParameter('database_password'));
|
||||
$container->setParameter('database_port', (string) $container->getParameter('database_port'));
|
||||
$container->setParameter('database_socket', (string) $container->getParameter('database_socket'));
|
||||
}
|
||||
|
||||
private function defineRedisUrlEnvVar(ContainerBuilder $container)
|
||||
{
|
||||
$scheme = $container->getParameter('redis_scheme');
|
||||
$host = $container->getParameter('redis_host');
|
||||
$port = $container->getParameter('redis_port');
|
||||
$path = $container->getParameter('redis_path');
|
||||
$password = $container->getParameter('redis_password');
|
||||
|
||||
$url = $scheme . '://';
|
||||
|
||||
if ($password) {
|
||||
$url .= $password . '@';
|
||||
}
|
||||
|
||||
$url .= $host;
|
||||
|
||||
if ($port) {
|
||||
$url .= ':' . $port;
|
||||
}
|
||||
|
||||
$url .= '/' . ltrim($path, '/');
|
||||
|
||||
$container->setParameter('env(REDIS_URL)', $url);
|
||||
}
|
||||
|
||||
private function defineRabbitMqUrlEnvVar(ContainerBuilder $container)
|
||||
{
|
||||
$host = $container->getParameter('rabbitmq_host');
|
||||
$port = $container->getParameter('rabbitmq_port');
|
||||
$user = $container->getParameter('rabbitmq_user');
|
||||
$password = $container->getParameter('rabbitmq_password');
|
||||
|
||||
$url = 'amqp://' . $user . ':' . $password . '@' . $host;
|
||||
|
||||
if ($port) {
|
||||
$url .= ':' . $port;
|
||||
}
|
||||
|
||||
$container->setParameter('env(RABBITMQ_URL)', $url);
|
||||
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,25 +1,29 @@
|
||||
download_pictures: Download billeder på din server
|
||||
diaspora_url: diaspora* URL, hvis tjenesten er aktiv
|
||||
carrot: Aktiver deling til Carrot
|
||||
diaspora_url: Diaspora URL, hvis tjenesten er aktiv
|
||||
export_epub: Aktiver eksport til ePub
|
||||
export_mobi: Aktiver eksport til .mobi
|
||||
export_pdf: Aktiver eksport til PDF
|
||||
export_csv: Aktiver eksport til CSV
|
||||
export_json: Aktiver eksport til JSON
|
||||
export_txt: Aktiver eksport til TXT
|
||||
export_xml: Aktiver eksport til XML
|
||||
pocket_consumer_key: Brugers nøgle til Pocket for at importere materialer (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli-URL, hvis tjenesten er aktiv
|
||||
unmark_url: Unmark-URL, hvis tjenesten er aktiv
|
||||
share_diaspora: Aktiver deling til diaspora*
|
||||
share_diaspora: Aktiver deling til Diaspora
|
||||
share_mail: Aktiver deling med email
|
||||
share_shaarli: Aktiver deling gennem Shaarli
|
||||
share_twitter: Aktiver deling gennem Twitter
|
||||
share_unmark: Aktiver deling gennem Unmark.it
|
||||
show_printlink: Vis et link til print-indhold
|
||||
wallabag_support_url: Support-URL for wallabag
|
||||
wallabag_url: URL for *sin* wallabag-installation
|
||||
entry: "artikel"
|
||||
export: "eksport"
|
||||
import: "import"
|
||||
misc: "misc"
|
||||
modify_settings: "Gem ændring"
|
||||
matomo_host: Hosting af din side hos Matomo (uden http:// eller https://)
|
||||
matomo_site_id: ID for din side hos Matomo
|
||||
matomo_enabled: Aktiver Matomo
|
||||
piwik_host: Hosting af din side hos Piwik
|
||||
piwik_site_id: ID for din side hos Piwik
|
||||
piwik_enabled: Aktiver Piwik
|
||||
demo_mode_enabled: "Aktiver demo-indstilling? (anvendes kun til wallabags offentlige demo)"
|
||||
demo_mode_username: "Demobruger"
|
||||
@ -0,0 +1,29 @@
|
||||
download_pictures: Download pictures on your server
|
||||
carrot: Enable share to Carrot
|
||||
diaspora_url: Diaspora URL, if the service is enabled
|
||||
export_epub: Enable ePub export
|
||||
export_mobi: Enable .mobi export
|
||||
export_pdf: Enable PDF export
|
||||
export_csv: Enable CSV export
|
||||
export_json: Enable JSON export
|
||||
export_txt: Enable TXT export
|
||||
export_xml: Enable XML export
|
||||
pocket_consumer_key: Consumer key for Pocket to import contents (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli URL, if the service is enabled
|
||||
share_diaspora: Enable share to Diaspora
|
||||
share_mail: Enable share by email
|
||||
share_shaarli: Enable share to Shaarli
|
||||
share_twitter: Enable share to Twitter
|
||||
show_printlink: Display a link to print content
|
||||
wallabag_support_url: Support URL for wallabag
|
||||
wallabag_url: URL of *your* wallabag instance
|
||||
entry: "article"
|
||||
export: "export"
|
||||
import: "import"
|
||||
misc: "misc"
|
||||
modify_settings: "apply"
|
||||
piwik_host: Host of your website in Piwik
|
||||
piwik_site_id: ID of your website in Piwik
|
||||
piwik_enabled: Enable Piwik
|
||||
demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
|
||||
demo_mode_username: "Demo user"
|
||||
@ -0,0 +1,24 @@
|
||||
download_pictures: تصاویر را در کارگزار خودتان باربگیرید
|
||||
carrot: فعالسازی همرسانی به Carrot
|
||||
diaspora_url: نشانی Diaspora، اگر فعال بود
|
||||
export_epub: فعالسازی برونسپاری به ePub
|
||||
export_mobi: فعالسازی برونسپاری به mobi
|
||||
export_pdf: فعالسازی برونسپاری به PDF
|
||||
export_csv: فعالسازی برونسپاری به CSV
|
||||
export_json: فعالسازی برونسپاری به JSON
|
||||
export_txt: فعالسازی برونسپاری به TXT
|
||||
export_xml: فعالسازی برونسپاری به XML
|
||||
pocket_consumer_key: کلید کاربری Pocket برای درونریزی مطالب (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: نشانی Shaarli، اگر فعال بود
|
||||
share_diaspora: فعالسازی همرسانی به Diaspora
|
||||
share_mail: فعالسازی همرسانی با ایمیل
|
||||
share_shaarli: فعالسازی همرسانی به Shaarli
|
||||
share_twitter: فعالسازی همرسانی به Twitter
|
||||
show_printlink: نمایش پیوندی برای چاپ مطلب
|
||||
wallabag_support_url: نشانی صفحهٔ پشتیبانی wallabag
|
||||
wallabag_url: نشانی صفحهٔ wallabag *شما*
|
||||
entry: "مقاله"
|
||||
export: "برونسپاری"
|
||||
import: "درونریزی"
|
||||
misc: "غیره"
|
||||
modify_settings: "اعمال"
|
||||
@ -0,0 +1,29 @@
|
||||
download_pictures: Télécharger les images sur le serveur
|
||||
carrot: Activer le partage vers Carrot
|
||||
diaspora_url: URL de Diaspora, si le service Diaspora est activé
|
||||
export_epub: Activer l'export ePub
|
||||
export_mobi: Activer l'export .mobi
|
||||
export_pdf: Activer l'export PDF
|
||||
export_csv: Activer l'export CSV
|
||||
export_json: Activer l'export JSON
|
||||
export_txt: Activer l'export TXT
|
||||
export_xml: Activer l'export XML
|
||||
pocket_consumer_key: Clé d'authentification Pocket pour importer les données (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: URL de Shaarli, si le service Shaarli est activé
|
||||
share_diaspora: Activer le partage vers Diaspora
|
||||
share_mail: Activer le partage par email
|
||||
share_shaarli: Activer le partage vers Shaarli
|
||||
share_twitter: Activer le partage vers Twitter
|
||||
show_printlink: Afficher un lien pour imprimer
|
||||
wallabag_support_url: URL de support de wallabag
|
||||
wallabag_url: URL de *votre* instance de wallabag
|
||||
entry: "article"
|
||||
export: "export"
|
||||
import: "import"
|
||||
misc: "divers"
|
||||
modify_settings: "appliquer"
|
||||
piwik_host: URL de votre site dans Piwik
|
||||
piwik_site_id: ID de votre site dans Piwik
|
||||
piwik_enabled: Activer Piwik
|
||||
demo_mode_enabled: "Activer le mode démo ? (utiliser uniquement pour la démo publique de wallabag)"
|
||||
demo_mode_username: "Utilisateur de la démo"
|
||||
@ -0,0 +1,24 @@
|
||||
download_pictures: Pobierz obrazy na swój serwer
|
||||
carrot: Włącz udostępnianie dla Carrot
|
||||
diaspora_url: Adres URL Diaspora, jeżeli usługa jest włączona
|
||||
export_epub: Włącz eksport do ePub
|
||||
export_mobi: Włącz eksport do .mobi
|
||||
export_pdf: Włącz eksport do PDF
|
||||
export_csv: Włącz eksport do CSV
|
||||
export_json: Włącz eksport do JSON
|
||||
export_txt: Włącz eksport do TXT
|
||||
export_xml: Włącz eksport do XML
|
||||
pocket_consumer_key: Klucz klienta Pocket do importu zawartości (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Adress URL Shaarli, jeżeli usługa jest włączona
|
||||
share_diaspora: Włącz udostępnianie dla Diaspora
|
||||
share_mail: Włącz udostępnianie przez email
|
||||
share_shaarli: Włącz udostępnianie dla Shaarli
|
||||
share_twitter: Włącz udostępnianie dla Twitter
|
||||
show_printlink: Pokaż link do wydrukowania zawartości
|
||||
wallabag_support_url: Adres URL wsparcia dla wallabag
|
||||
wallabag_url: Adres *twojej* instacji wallabag
|
||||
entry: "artykuł"
|
||||
export: "eksport"
|
||||
import: "import"
|
||||
misc: "różne"
|
||||
modify_settings: "zatwierdz"
|
||||
@ -1,20 +1,22 @@
|
||||
download_pictures: Descarcă poze pe server
|
||||
diaspora_url: diaspora* URL, dacă serviciul este permis
|
||||
carrot: Permite share către Carrot
|
||||
diaspora_url: Diaspora URL, dacă serviciul este permis
|
||||
export_epub: Permite exportare ePub
|
||||
export_mobi: Permite exportare .mobi
|
||||
export_pdf: Permite exportare PDF
|
||||
export_csv: Permite exportare CSV
|
||||
export_json: Permite exportare JSON
|
||||
export_txt: Permite exportare TXT
|
||||
export_xml: Permite exportare XML
|
||||
pocket_consumer_key: Cheie consumator pentru importarea contentului din Pocket (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli URL, dacă serviciul este permis
|
||||
unmark_url: Unmark URL, dacă serviciul este permis
|
||||
share_diaspora: Permite share către diaspora*
|
||||
share_diaspora: Permite share către Diaspora
|
||||
share_mail: Permite share prin email
|
||||
share_shaarli: Permite share către Shaarli
|
||||
share_twitter: Permite share către Twitter
|
||||
share_unmark: Permite share către Unmark.it
|
||||
show_printlink: Afișează un link pentru a printa content-ul
|
||||
wallabag_support_url: URL-ul de suport pentru wallabag
|
||||
wallabag_url: URL-ul instanței tale wallabag
|
||||
entry: "alticol"
|
||||
export: "exportă"
|
||||
import: "importă"
|
||||
@ -0,0 +1,43 @@
|
||||
{% extends "WallabagCoreBundle::layout.html.twig" %}
|
||||
|
||||
{% block title %}{% trans %}internal settings{% endtrans %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="card-panel settings">
|
||||
{{ form_start(form, {'attr': {'class': 'craue_config_settings_modify'}}) }}
|
||||
{{ form_errors(form) }}
|
||||
|
||||
<div class="row">
|
||||
<div class="div_tabs col s12">
|
||||
<ul class="tabs">
|
||||
{% for section in sections | craue_sortSections %}
|
||||
<li class="tab col s3"><a href="#set-{{ section }}">{{ section | trans({}, 'CraueConfigBundle') }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{% for section in sections | craue_sortSections %}
|
||||
<div id="set-{{ section }}" class="col s12">
|
||||
{% for setting in form.settings if setting.section.vars.value == section %}
|
||||
{{ form_row(setting.name) }}
|
||||
{{ form_row(setting.section) }}
|
||||
{{ form_row(setting.value, {
|
||||
'label': setting.name.vars.value | trans({}, 'CraueConfigBundle'),
|
||||
}) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<button class="btn waves-effect waves-light" type="submit" name="action">
|
||||
{{ 'modify_settings' | trans({}, 'CraueConfigBundle') }}
|
||||
</button>
|
||||
|
||||
{{ form_rest(form) }}
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@ -0,0 +1,2 @@
|
||||
Login: "Log ind"
|
||||
Enter your email address below and we'll send you password reset instructions.: "Indtast din emailadresse nedenfor, så sender vi dig instrukser til at nulstille din adgangskode."
|
||||
@ -0,0 +1,2 @@
|
||||
Login: "Se connecter"
|
||||
Enter your email address below and we'll send you password reset instructions.: "Renseignez votre adresse email, nous vous enverrons les instructions pour réinitialiser votre mot de passe."
|
||||
13
app/autoload.php
Normal file
13
app/autoload.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use Doctrine\Common\Annotations\AnnotationRegistry;
|
||||
use Composer\Autoload\ClassLoader;
|
||||
|
||||
/**
|
||||
* @var ClassLoader $loader
|
||||
*/
|
||||
$loader = require __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
|
||||
|
||||
return $loader;
|
||||
26
app/config/capistrano/deploy.rb
Normal file
26
app/config/capistrano/deploy.rb
Normal file
@ -0,0 +1,26 @@
|
||||
# config valid only for current version of Capistrano
|
||||
lock '3.4.0'
|
||||
|
||||
set :log_path, "var/logs"
|
||||
set :cache_path, "var/cache"
|
||||
set :symfony_console_path, 'bin/console'
|
||||
|
||||
set :application, 'wallabag'
|
||||
set :repo_url, 'git@github.com:wallabag/wallabag.git'
|
||||
|
||||
set :ssh_user, 'framasoft_bag'
|
||||
server '78.46.248.87', user: fetch(:ssh_user), roles: %w{web app db}
|
||||
|
||||
set :scm, :git
|
||||
|
||||
set :format, :pretty
|
||||
set :log_level, :info
|
||||
# set :log_level, :debug
|
||||
|
||||
set :composer_install_flags, '--no-dev --prefer-dist --no-interaction --optimize-autoloader'
|
||||
|
||||
set :linked_files, %w{app/config/parameters.yml}
|
||||
set :linked_dirs, [fetch(:log_path), "var/sessions", "web/uploads", "data"]
|
||||
set :keep_releases, 3
|
||||
|
||||
after 'deploy:finishing', 'deploy:cleanup'
|
||||
2
app/config/capistrano/deploy/staging.rb
Normal file
2
app/config/capistrano/deploy/staging.rb
Normal file
@ -0,0 +1,2 @@
|
||||
set :branch, 'v2'
|
||||
set :deploy_to, '/var/www/v2.wallabag.org/web/'
|
||||
@ -2,88 +2,89 @@ imports:
|
||||
- { resource: parameters.yml }
|
||||
- { resource: security.yml }
|
||||
- { resource: services.yml }
|
||||
- { resource: wallabag.yml }
|
||||
|
||||
parameters:
|
||||
craue_config.cache_adapter.class: Craue\ConfigBundle\CacheAdapter\SymfonyCacheComponentAdapter
|
||||
env(DATABASE_URL): '%database_scheme%://%database_user%:%database_password%@%database_host%:%database_port%/%database_name%?unix_socket=%database_socket%&charset=%database_charset%'
|
||||
|
||||
framework:
|
||||
#esi: ~
|
||||
translator:
|
||||
enabled: true
|
||||
fallback: "%locale%"
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
secret: "%secret%"
|
||||
translator: { fallback: "%locale%" }
|
||||
secret: "%secret%"
|
||||
router:
|
||||
resource: "%kernel.project_dir%/app/config/routing.yml"
|
||||
resource: "%kernel.root_dir%/config/routing.yml"
|
||||
strict_requirements: ~
|
||||
form: ~
|
||||
form: ~
|
||||
csrf_protection: ~
|
||||
validation:
|
||||
enable_annotations: true
|
||||
default_locale: "%locale%"
|
||||
trusted_hosts: ~
|
||||
validation: { enable_annotations: true }
|
||||
templating:
|
||||
engines: ['twig']
|
||||
#assets_version: SomeVersionScheme
|
||||
default_locale: "%locale%"
|
||||
trusted_hosts: ~
|
||||
trusted_proxies: ~
|
||||
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%"
|
||||
cookie_secure: auto
|
||||
cookie_samesite: lax
|
||||
storage_factory_id: session.storage.factory.native
|
||||
fragments: ~
|
||||
handler_id: session.handler.native_file
|
||||
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
|
||||
fragments: ~
|
||||
http_method_override: true
|
||||
assets:
|
||||
base_url: '%domain_name%'
|
||||
json_manifest_path: '%kernel.project_dir%/web/build/manifest.json'
|
||||
mailer:
|
||||
dsn: "%mailer_dsn%"
|
||||
http_client:
|
||||
scoped_clients:
|
||||
download_images.client:
|
||||
scope: '.*'
|
||||
pocket.client:
|
||||
scope: '.*'
|
||||
headers:
|
||||
Content-Type: 'application/json'
|
||||
X-Accept: 'application/json'
|
||||
request_html_function.client:
|
||||
scope: '.*'
|
||||
browser.client:
|
||||
scope: '.*'
|
||||
verify_host: false
|
||||
verify_peer: false
|
||||
assets: ~
|
||||
|
||||
wallabag_core:
|
||||
version: 2.0.0-beta.1
|
||||
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
|
||||
languages:
|
||||
en: 'English'
|
||||
fr: 'Français'
|
||||
de: 'Deutsch'
|
||||
tr: 'Türkçe'
|
||||
fa: 'فارسی'
|
||||
ro: 'Română'
|
||||
pl: 'Polish'
|
||||
da: 'Dansk'
|
||||
items_on_page: 12
|
||||
theme: material
|
||||
language: en
|
||||
rss_limit: 50
|
||||
|
||||
wallabag_import:
|
||||
allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain']
|
||||
resource_dir: "%kernel.root_dir%/../web/uploads/import"
|
||||
|
||||
# Twig Configuration
|
||||
twig:
|
||||
default_path: '%kernel.project_dir%/templates'
|
||||
debug: "%kernel.debug%"
|
||||
debug: "%kernel.debug%"
|
||||
strict_variables: "%kernel.debug%"
|
||||
form_themes:
|
||||
- "@SpiriitFormFilter/Form/form_div_layout.html.twig"
|
||||
globals:
|
||||
wallabag_url: '%domain_name%'
|
||||
registration_enabled: '%fosuser_registration%'
|
||||
- "LexikFormFilterBundle:Form:form_div_layout.html.twig"
|
||||
|
||||
# Assetic Configuration
|
||||
assetic:
|
||||
debug: "%kernel.debug%"
|
||||
use_controller: false
|
||||
bundles: [ ]
|
||||
#java: /usr/bin/java
|
||||
filters:
|
||||
cssrewrite: ~
|
||||
#closure:
|
||||
# jar: "%kernel.root_dir%/Resources/java/compiler.jar"
|
||||
#yui_css:
|
||||
# jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
|
||||
|
||||
# Doctrine Configuration
|
||||
doctrine:
|
||||
dbal:
|
||||
url: '%env(resolve:DATABASE_URL)%'
|
||||
types:
|
||||
json_array: Wallabag\Doctrine\JsonArrayType
|
||||
driver: "%database_driver%"
|
||||
host: "%database_host%"
|
||||
port: "%database_port%"
|
||||
dbname: "%database_name%"
|
||||
user: "%database_user%"
|
||||
password: "%database_password%"
|
||||
charset: UTF8
|
||||
path: "%database_path%"
|
||||
|
||||
orm:
|
||||
auto_generate_proxy_classes: "%kernel.debug%"
|
||||
entity_managers:
|
||||
default:
|
||||
auto_mapping: true
|
||||
mappings:
|
||||
Wallabag:
|
||||
type: attribute
|
||||
is_bundle: false
|
||||
dir: '%kernel.project_dir%/src/Entity'
|
||||
prefix: 'Wallabag\Entity'
|
||||
alias: Wallabag
|
||||
|
||||
stof_doctrine_extensions:
|
||||
default_locale: "%locale%"
|
||||
@ -94,70 +95,41 @@ stof_doctrine_extensions:
|
||||
sluggable: true
|
||||
|
||||
doctrine_migrations:
|
||||
migrations_paths:
|
||||
'Application\Migrations': '%kernel.project_dir%/migrations'
|
||||
storage:
|
||||
table_storage:
|
||||
table_name: 'migration_versions'
|
||||
version_column_name: 'version'
|
||||
version_column_length: 192
|
||||
executed_at_column_name: 'executed_at'
|
||||
services:
|
||||
Doctrine\Migrations\Version\MigrationFactory: Wallabag\Doctrine\MigrationFactoryDecorator
|
||||
dir_name: "%kernel.root_dir%/DoctrineMigrations"
|
||||
namespace: Application\Migrations
|
||||
table_name: migration_versions
|
||||
name: Application Migrations
|
||||
|
||||
# Swiftmailer Configuration
|
||||
swiftmailer:
|
||||
transport: "%mailer_transport%"
|
||||
host: "%mailer_host%"
|
||||
username: "%mailer_user%"
|
||||
password: "%mailer_password%"
|
||||
spool: { type: memory }
|
||||
|
||||
fos_rest:
|
||||
param_fetcher_listener: true
|
||||
body_listener: true
|
||||
format_listener: true
|
||||
view:
|
||||
mime_types:
|
||||
csv:
|
||||
- 'text/csv'
|
||||
- 'text/plain'
|
||||
pdf:
|
||||
- 'application/pdf'
|
||||
epub:
|
||||
- 'application/epub+zip'
|
||||
view_response_listener: 'force'
|
||||
formats:
|
||||
xml: true
|
||||
json: true
|
||||
txt: true
|
||||
csv: true
|
||||
pdf: true
|
||||
epub: true
|
||||
json : true
|
||||
templating_formats:
|
||||
html: true
|
||||
force_redirects:
|
||||
html: true
|
||||
failed_validation: HTTP_BAD_REQUEST
|
||||
routing_loader: false
|
||||
format_listener:
|
||||
enabled: true
|
||||
rules:
|
||||
- { path: "^/api/entries/([0-9]+)/export.(.*)", priorities: ['epub', '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 }
|
||||
exception:
|
||||
messages:
|
||||
Symfony\Component\HttpKernel\Exception\BadRequestHttpException: true
|
||||
default_engine: twig
|
||||
routing_loader:
|
||||
default_format: json
|
||||
|
||||
nelmio_api_doc:
|
||||
areas:
|
||||
default:
|
||||
disable_default_routes: true
|
||||
documentation:
|
||||
info:
|
||||
title: wallabag API documentation
|
||||
description: This is the API documentation of wallabag
|
||||
version: 2.x
|
||||
components:
|
||||
securitySchemes:
|
||||
Bearer:
|
||||
type: apiKey
|
||||
description: 'Value: Bearer {jwt}'
|
||||
name: Authorization
|
||||
in: header
|
||||
security:
|
||||
- Bearer: []
|
||||
sandbox:
|
||||
enabled: false
|
||||
name: wallabag API documentation
|
||||
|
||||
nelmio_cors:
|
||||
defaults:
|
||||
@ -172,307 +144,70 @@ nelmio_cors:
|
||||
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_headers: ['X-Custom-Auth']
|
||||
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
|
||||
max_age: 3600
|
||||
'^/':
|
||||
#origin_regex: true
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_origin: ['^http://localhost:[0-9]+']
|
||||
allow_headers: ['X-Custom-Auth']
|
||||
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
|
||||
max_age: 3600
|
||||
hosts: ['^api\.']
|
||||
|
||||
liip_theme:
|
||||
load_controllers: false
|
||||
themes:
|
||||
- baggy
|
||||
- material
|
||||
autodetect_theme: wallabag_core.helper.detect_active_theme
|
||||
|
||||
path_patterns:
|
||||
bundle_resource:
|
||||
- %%bundle_path%%/Resources/views/themes/%%current_theme%%/%%template%%
|
||||
|
||||
fos_user:
|
||||
db_driver: orm
|
||||
firewall_name: secured_area
|
||||
user_class: Wallabag\Entity\User
|
||||
firewall_name: main
|
||||
user_class: Wallabag\UserBundle\Entity\User
|
||||
registration:
|
||||
confirmation:
|
||||
enabled: "%fosuser_confirmation%"
|
||||
enabled: %fosuser_confirmation%
|
||||
from_email:
|
||||
address: "%from_email%"
|
||||
sender_name: wallabag
|
||||
service:
|
||||
mailer: fos_user.mailer.twig_symfony
|
||||
|
||||
address: %from_email%
|
||||
sender_name: wallabag
|
||||
fos_oauth_server:
|
||||
db_driver: orm
|
||||
client_class: Wallabag\Entity\Api\Client
|
||||
access_token_class: Wallabag\Entity\Api\AccessToken
|
||||
refresh_token_class: Wallabag\Entity\Api\RefreshToken
|
||||
auth_code_class: Wallabag\Entity\Api\AuthCode
|
||||
client_class: Wallabag\ApiBundle\Entity\Client
|
||||
access_token_class: Wallabag\ApiBundle\Entity\AccessToken
|
||||
refresh_token_class: Wallabag\ApiBundle\Entity\RefreshToken
|
||||
auth_code_class: Wallabag\ApiBundle\Entity\AuthCode
|
||||
service:
|
||||
user_provider: fos_user.user_provider.username_email
|
||||
options:
|
||||
refresh_token_lifetime: "%fos_oauth_server_refresh_token_lifetime%"
|
||||
access_token_lifetime: "%fos_oauth_server_access_token_lifetime%"
|
||||
user_provider: fos_user.user_manager
|
||||
|
||||
scheb_two_factor:
|
||||
trusted_device:
|
||||
trusted_computer:
|
||||
enabled: true
|
||||
cookie_name: wllbg_trusted_computer
|
||||
lifetime: 2592000
|
||||
|
||||
backup_codes:
|
||||
enabled: true
|
||||
|
||||
google:
|
||||
enabled: true
|
||||
issuer: "%server_name%"
|
||||
template: "Authentication/form.html.twig"
|
||||
cookie_lifetime: 2592000
|
||||
|
||||
email:
|
||||
enabled: true
|
||||
sender_email: "%twofactor_sender%"
|
||||
enabled: %twofactor_auth%
|
||||
sender_email: %twofactor_sender%
|
||||
digits: 6
|
||||
template: "Authentication/form.html.twig"
|
||||
mailer: Wallabag\Mailer\AuthCodeMailer
|
||||
template: WallabagUserBundle:Authentication:form.html.twig
|
||||
mailer: wallabag_user.auth_code_mailer
|
||||
|
||||
old_sound_rabbit_mq:
|
||||
connections:
|
||||
default:
|
||||
url: "%env(RABBITMQ_URL)%"
|
||||
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_omnivore:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.omnivore'
|
||||
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
|
||||
import_shaarli:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.shaarli'
|
||||
type: topic
|
||||
import_pocket_html:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket_html'
|
||||
type: topic
|
||||
import_pocket_csv:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket_csv'
|
||||
type: topic
|
||||
consumers:
|
||||
import_pocket:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
callback: wallabag.consumer.amqp.pocket
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_readability:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.readability'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.readability'
|
||||
callback: wallabag.consumer.amqp.readability
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_instapaper:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
callback: wallabag.consumer.amqp.instapaper
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_pinboard:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pinboard'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pinboard'
|
||||
callback: wallabag.consumer.amqp.pinboard
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_delicious:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.delicious'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.delicious'
|
||||
callback: wallabag.consumer.amqp.delicious
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_wallabag_v1:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
callback: wallabag.consumer.amqp.wallabag_v1
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_wallabag_v2:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
callback: wallabag.consumer.amqp.wallabag_v2
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_elcurator:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.elcurator'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.elcurator'
|
||||
callback: wallabag.consumer.amqp.elcurator
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_omnivore:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.omnivore'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.omnivore'
|
||||
callback: wallabag.consumer.amqp.omnivore
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_firefox:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
callback: wallabag.consumer.amqp.firefox
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_chrome:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
callback: wallabag.consumer.amqp.chrome
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_shaarli:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.shaarli'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.shaarli'
|
||||
callback: wallabag.consumer.amqp.shaarli
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_pocket_html:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket_html'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pocket_html'
|
||||
callback: wallabag.consumer.amqp.pocket_html
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_pocket_csv:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket_csv'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pocket_csv'
|
||||
callback: wallabag.consumer.amqp.pocket_csv
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
kphoen_rulerz:
|
||||
executors:
|
||||
doctrine: true
|
||||
|
||||
fos_js_routing:
|
||||
routes_to_expose:
|
||||
- homepage
|
||||
- starred
|
||||
- archive
|
||||
- all
|
||||
- tag
|
||||
- config
|
||||
- import
|
||||
- developer
|
||||
- howto
|
||||
- fos_user_security_logout
|
||||
- new
|
||||
|
||||
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" # ATOM
|
||||
|
||||
# see https://github.com/symfony/symfony-standard/pull/1133
|
||||
sensio_framework_extra:
|
||||
router:
|
||||
annotations: false
|
||||
|
||||
# define custom entity so we can override length attribute to fix utf8mb4 issue
|
||||
craue_config:
|
||||
entity_name: Wallabag\Entity\InternalSetting
|
||||
|
||||
when@dev:
|
||||
maker:
|
||||
root_namespace: 'Wallabag'
|
||||
|
||||
webpack_encore:
|
||||
output_path: '%kernel.project_dir%/web/build'
|
||||
script_attributes:
|
||||
defer: true
|
||||
lexik_maintenance:
|
||||
authorized:
|
||||
ips: ['127.0.0.1']
|
||||
driver:
|
||||
ttl: 3600
|
||||
class: 'Lexik\Bundle\MaintenanceBundle\Drivers\DatabaseDriver'
|
||||
response:
|
||||
code: 503
|
||||
status: "wallabag Service Temporarily Unavailable"
|
||||
|
||||
@ -3,14 +3,9 @@ imports:
|
||||
|
||||
framework:
|
||||
router:
|
||||
resource: "%kernel.project_dir%/app/config/routing_dev.yml"
|
||||
resource: "%kernel.root_dir%/config/routing_dev.yml"
|
||||
strict_requirements: true
|
||||
profiler:
|
||||
only_exceptions: false
|
||||
|
||||
mailer:
|
||||
# see https://mailcatcher.me/
|
||||
dsn: smtp://127.0.0.1:1025
|
||||
profiler: { only_exceptions: false }
|
||||
|
||||
web_profiler:
|
||||
toolbar: true
|
||||
@ -19,19 +14,19 @@ web_profiler:
|
||||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
channels: ['!event']
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
channels: [!event]
|
||||
console:
|
||||
type: console
|
||||
type: console
|
||||
bubble: false
|
||||
verbosity_levels:
|
||||
VERBOSITY_VERBOSE: INFO
|
||||
VERBOSITY_VERY_VERBOSE: DEBUG
|
||||
channels: ['!event', '!doctrine']
|
||||
channels: [!event, !doctrine]
|
||||
console_very_verbose:
|
||||
type: console
|
||||
type: console
|
||||
bubble: false
|
||||
verbosity_levels:
|
||||
VERBOSITY_VERBOSE: NOTICE
|
||||
@ -39,10 +34,11 @@ monolog:
|
||||
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
|
||||
assetic:
|
||||
use_controller: true
|
||||
|
||||
swiftmailer:
|
||||
# see http://mailcatcher.me/
|
||||
transport: smtp
|
||||
host: 'localhost'
|
||||
port: 1025
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
imports:
|
||||
- { resource: config.yml }
|
||||
|
||||
#framework:
|
||||
# validation:
|
||||
# cache: apc
|
||||
|
||||
#doctrine:
|
||||
# orm:
|
||||
# metadata_cache_driver: apc
|
||||
@ -10,15 +14,12 @@ imports:
|
||||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: fingers_crossed
|
||||
type: fingers_crossed
|
||||
action_level: error
|
||||
handler: nested
|
||||
handler: nested
|
||||
nested:
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
console:
|
||||
type: console
|
||||
|
||||
sentry:
|
||||
dsn: "%sentry_dsn%"
|
||||
type: console
|
||||
|
||||
@ -1,32 +1,32 @@
|
||||
imports:
|
||||
- { resource: config_dev.yml }
|
||||
- { resource: parameters_test.yml }
|
||||
- { resource: services_test.yml }
|
||||
|
||||
parameters:
|
||||
fosuser_registration: true
|
||||
wallabag_dbname_suffix: '_test'
|
||||
|
||||
framework:
|
||||
test: ~
|
||||
session:
|
||||
storage_factory_id: session.storage.factory.mock_file
|
||||
storage_id: session.storage.mock_file
|
||||
profiler:
|
||||
collect: false
|
||||
translator:
|
||||
enabled: false
|
||||
mailer:
|
||||
dsn: 'null://null'
|
||||
|
||||
web_profiler:
|
||||
toolbar: false
|
||||
intercept_redirects: false
|
||||
|
||||
swiftmailer:
|
||||
# to be able to read emails sent
|
||||
spool:
|
||||
type: file
|
||||
|
||||
doctrine:
|
||||
dbal:
|
||||
dbname_suffix: '%wallabag_dbname_suffix%' # for MySQL and PostgreSQL
|
||||
use_savepoints: true
|
||||
|
||||
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: UTF8
|
||||
path: "%test_database_path%"
|
||||
orm:
|
||||
metadata_cache_driver:
|
||||
type: service
|
||||
@ -34,8 +34,3 @@ doctrine:
|
||||
query_cache_driver:
|
||||
type: service
|
||||
id: filesystem_cache
|
||||
|
||||
dama_doctrine_test:
|
||||
enable_static_connection: true
|
||||
enable_static_meta_data_cache: true
|
||||
enable_static_query_cache: true
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
# Uncomment these settings or manually update your parameters.yml
|
||||
# to use Docker Compose
|
||||
# to use docker-compose
|
||||
#
|
||||
# database_driver: %env.database_driver%
|
||||
# database_host: %env.database_host%
|
||||
@ -10,56 +10,38 @@ parameters:
|
||||
# database_user: %env.database_user%
|
||||
# database_password: %env.database_password%
|
||||
|
||||
database_driver: pdo_mysql
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: wallabag
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
# For SQLite, database_path should be "%kernel.project_dir%/data/db/wallabag.sqlite"
|
||||
database_path: null
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
database_socket: null
|
||||
# with PostgreSQL and SQLite, you must set "utf8"
|
||||
database_charset: utf8mb4
|
||||
|
||||
domain_name: https://your-wallabag-instance.wallabag.org
|
||||
server_name: "Your wallabag instance"
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: 127.0.0.1
|
||||
test_database_port: ~
|
||||
test_database_name: ~
|
||||
test_database_user: ~
|
||||
test_database_password: ~
|
||||
test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
|
||||
|
||||
mailer_dsn: smtp://127.0.0.1
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: CHANGE_ME_TO_SOMETHING_SECRET_AND_RANDOM
|
||||
secret: ovmpmAWXRCabNlMgzlzFXDYmCFfzGv
|
||||
|
||||
# two factor stuff
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_registration: false
|
||||
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
|
||||
|
||||
# RabbitMQ processing
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
rabbitmq_prefetch_count: 10
|
||||
|
||||
# Redis processing
|
||||
redis_scheme: redis
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
redis_path: null
|
||||
redis_password: null
|
||||
|
||||
# sentry logging
|
||||
sentry_dsn: ~
|
||||
|
||||
@ -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://apps.apple.com/app/wallabag-2/id1170800946?mt=8
|
||||
windows: https://www.microsoft.com/store/apps/wallabag/9nblggh11646
|
||||
@ -1,2 +0,0 @@
|
||||
parameters:
|
||||
database_path: "%kernel.project_dir%/data/db/wallabag%wallabag_dbname_suffix%.sqlite"
|
||||
@ -1,21 +1,33 @@
|
||||
wallabag_annotation:
|
||||
type : rest
|
||||
resource: "@WallabagAnnotationBundle/Resources/config/routing_annotations.yml"
|
||||
|
||||
wallabag_import:
|
||||
resource: "@WallabagImportBundle/Controller/"
|
||||
type: annotation
|
||||
prefix: /import
|
||||
|
||||
wallabag_api:
|
||||
resource: "@WallabagApiBundle/Resources/config/routing.yml"
|
||||
prefix: /
|
||||
|
||||
app:
|
||||
resource: ../../src/Controller/
|
||||
resource: "@WallabagCoreBundle/Controller/"
|
||||
type: annotation
|
||||
|
||||
doc-api:
|
||||
resource: "@NelmioApiDocBundle/config/routing/swaggerui.xml"
|
||||
resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
|
||||
prefix: /api/doc
|
||||
|
||||
doc-api-json:
|
||||
path: /api/doc.json
|
||||
methods: GET
|
||||
defaults: { _controller: nelmio_api_doc.controller.swagger }
|
||||
rest :
|
||||
type : rest
|
||||
resource : "routing_rest.yml"
|
||||
prefix : /api
|
||||
|
||||
homepage:
|
||||
path: "/{page}"
|
||||
methods: GET
|
||||
defaults:
|
||||
_controller: 'Wallabag\Controller\EntryController::showUnreadAction'
|
||||
_controller: WallabagCoreBundle:Entry:showUnread
|
||||
page : 1
|
||||
requirements:
|
||||
page: \d+
|
||||
@ -28,60 +40,5 @@ fos_oauth_server_token:
|
||||
|
||||
craue_config_settings_modify:
|
||||
path: /settings
|
||||
methods: [GET, POST]
|
||||
defaults:
|
||||
_controller: 'Craue\ConfigBundle\Controller\SettingsController::modifyAction'
|
||||
|
||||
fos_js_routing:
|
||||
resource: "@FOSJsRoutingBundle/Resources/config/routing/routing-sf4.xml"
|
||||
|
||||
2fa_login:
|
||||
path: /2fa
|
||||
methods: GET
|
||||
defaults:
|
||||
_controller: "scheb_two_factor.form_controller:form"
|
||||
|
||||
2fa_login_check:
|
||||
path: /2fa_check
|
||||
methods: POST
|
||||
|
||||
# redirect RSS feed to Atom
|
||||
rss_to_atom_unread:
|
||||
path: /{username}/{token}/unread.xml
|
||||
methods: GET
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: unread_feed
|
||||
permanent: true
|
||||
|
||||
rss_to_atom_archive:
|
||||
path: /{username}/{token}/archive.xml
|
||||
methods: GET
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: archive_feed
|
||||
permanent: true
|
||||
|
||||
rss_to_atom_starred:
|
||||
path: /{username}/{token}/starred.xml
|
||||
methods: GET
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: starred_feed
|
||||
permanent: true
|
||||
|
||||
rss_to_atom_all:
|
||||
path: /{username}/{token}/all.xml
|
||||
methods: GET
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: all_feed
|
||||
permanent: true
|
||||
|
||||
rss_to_atom_tags:
|
||||
path: /{username}/{token}/tags/{slug}.xml
|
||||
methods: GET
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: tag_feed
|
||||
permanent: true
|
||||
_controller: CraueConfigBundle:Settings:modify
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
_wdt:
|
||||
resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
|
||||
prefix: /_wdt
|
||||
prefix: /_wdt
|
||||
|
||||
_profiler:
|
||||
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
|
||||
prefix: /_profiler
|
||||
prefix: /_profiler
|
||||
|
||||
_errors:
|
||||
resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
|
||||
prefix: /_error
|
||||
resource: "@TwigBundle/Resources/config/routing/errors.xml"
|
||||
prefix: /_error
|
||||
|
||||
_main:
|
||||
resource: routing.yml
|
||||
|
||||
4
app/config/routing_rest.yml
Normal file
4
app/config/routing_rest.yml
Normal file
@ -0,0 +1,4 @@
|
||||
Rest_Wallabag:
|
||||
type : rest
|
||||
resource: "@WallabagApiBundle/Resources/config/routing_rest.yml"
|
||||
|
||||
@ -1,18 +1,16 @@
|
||||
security:
|
||||
password_hashers:
|
||||
encoders:
|
||||
FOS\UserBundle\Model\UserInterface: sha512
|
||||
|
||||
role_hierarchy:
|
||||
ROLE_ADMIN: ROLE_USER
|
||||
ROLE_ADMIN: ROLE_USER
|
||||
ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
|
||||
|
||||
providers:
|
||||
administrators:
|
||||
entity:
|
||||
class: 'Wallabag\Entity\User'
|
||||
property: username
|
||||
entity: { class: WallabagUserBundle:User, property: username }
|
||||
fos_userbundle:
|
||||
id: fos_user.user_provider.username_email
|
||||
id: fos_user.user_provider.username
|
||||
|
||||
# the main part of the security, where you can set up firewalls
|
||||
# for specific sections of your app
|
||||
@ -31,10 +29,9 @@ security:
|
||||
fos_oauth: true
|
||||
stateless: true
|
||||
anonymous: true
|
||||
provider: fos_userbundle
|
||||
|
||||
login_firewall:
|
||||
pattern: ^/login$
|
||||
pattern: ^/login$
|
||||
anonymous: ~
|
||||
|
||||
secured_area:
|
||||
@ -43,36 +40,23 @@ security:
|
||||
provider: fos_userbundle
|
||||
csrf_token_generator: security.csrf.token_manager
|
||||
|
||||
anonymous: true
|
||||
anonymous: true
|
||||
remember_me:
|
||||
secret: "%secret%"
|
||||
secret: "%secret%"
|
||||
lifetime: 31536000
|
||||
path: /
|
||||
domain: ~
|
||||
path: /
|
||||
domain: ~
|
||||
|
||||
logout:
|
||||
path: /logout
|
||||
target: /
|
||||
|
||||
two_factor:
|
||||
provider: fos_userbundle
|
||||
auth_form_path: 2fa_login
|
||||
check_path: 2fa_login_check
|
||||
|
||||
access_control:
|
||||
- { path: ^/api/(doc|version|info|user), roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/api/doc, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
# force role for logout otherwise when 2fa enable, you won't be able to logout
|
||||
# https://github.com/scheb/two-factor-bundle/issues/168#issuecomment-430822478
|
||||
- { path: ^/logout, roles: [IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_2FA_IN_PROGRESS] }
|
||||
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: /(unread|starred|archive|annotated|all).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/locale, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: /tags/(.*).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/feed, roles: PUBLIC_ACCESS }
|
||||
- { path: /(unread|starred|archive|annotated).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY } # For backwards compatibility
|
||||
- { path: ^/share, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: /(unread|starred|archive).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/settings, roles: ROLE_SUPER_ADMIN }
|
||||
- { path: ^/2fa, role: IS_AUTHENTICATED_2FA_IN_PROGRESS }
|
||||
- { path: ^/annotations, roles: ROLE_USER }
|
||||
- { path: ^/, roles: ROLE_USER }
|
||||
|
||||
@ -1,348 +1,38 @@
|
||||
imports:
|
||||
- { resource: services_rabbit.yml }
|
||||
- { resource: services_redis.yml }
|
||||
- { resource: parameters_addons.yml }
|
||||
|
||||
parameters:
|
||||
spiriit_form_filter.get_filter.doctrine_orm.class: Wallabag\Event\Subscriber\CustomDoctrineORMSubscriber
|
||||
lexik_form_filter.get_filter.doctrine_orm.class: Wallabag\CoreBundle\Event\Subscriber\CustomDoctrineORMSubscriber
|
||||
|
||||
services:
|
||||
_defaults:
|
||||
autowire: true
|
||||
autoconfigure: true
|
||||
public: true
|
||||
bind:
|
||||
$projectDir: '%kernel.project_dir%'
|
||||
$debug: '%kernel.debug%'
|
||||
$defaultLocale: '%kernel.default_locale%'
|
||||
$wallabagUrl: '%domain_name%'
|
||||
$tablePrefix: "%database_table_prefix%"
|
||||
$encryptionKeyPath: "%wallabag.site_credentials.encryption_key_path%"
|
||||
$fetchingErrorMessageTitle: "%wallabag.fetching_error_message_title%"
|
||||
$fetchingErrorMessage: '%wallabag.fetching_error_message%'
|
||||
$languages: '%wallabag.languages%'
|
||||
$lifeTime: '%wallabag.cache_lifetime%'
|
||||
$logoPath: 'web/img/appicon/apple-touch-icon-152.png'
|
||||
$registrationEnabled: '%fosuser_registration%'
|
||||
$restrictedAccess: '@=service(''craue_config'').get(''restricted_access'')'
|
||||
$senderEmail: "%scheb_two_factor.email.sender_email%"
|
||||
$senderName: "%scheb_two_factor.email.sender_name%"
|
||||
$storeArticleHeaders: '@=service(''craue_config'').get(''store_article_headers'')'
|
||||
$supportUrl: '@=service(''craue_config'').get(''wallabag_support_url'')'
|
||||
$fonts: '%wallabag.fonts%'
|
||||
$defaultIgnoreOriginInstanceRules: '%wallabag.default_ignore_origin_instance_rules%'
|
||||
|
||||
Wallabag\:
|
||||
resource: '../../src/*'
|
||||
exclude: ['../../src/{Consumer,Controller,Entity,DataFixtures,Redis}', '../../src/Event/*Event.php']
|
||||
|
||||
# controllers are imported separately to make sure services can be injected
|
||||
# as action arguments even if you don't extend any base controller class
|
||||
Wallabag\Controller\:
|
||||
resource: '../../src/Controller/'
|
||||
tags: ['controller.service_arguments']
|
||||
|
||||
# inject alias service into controllers
|
||||
Wallabag\Controller\Import\ChromeController:
|
||||
# used for tests
|
||||
filesystem_cache:
|
||||
class: Doctrine\Common\Cache\FilesystemCache
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_chrome_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.chrome'
|
||||
- %kernel.cache_dir%/doctrine/metadata
|
||||
|
||||
Wallabag\Controller\Import\DeliciousController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_delicious_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.delicious'
|
||||
twig.extension.text:
|
||||
class: Twig_Extensions_Extension_Text
|
||||
tags:
|
||||
- { name: twig.extension }
|
||||
|
||||
Wallabag\Controller\Import\ElcuratorController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_elcurator_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.elcurator'
|
||||
|
||||
Wallabag\Controller\Import\OmnivoreController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_omnivore_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.omnivore'
|
||||
|
||||
Wallabag\Controller\Import\FirefoxController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_firefox_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.firefox'
|
||||
|
||||
Wallabag\Controller\Import\InstapaperController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_instapaper_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.instapaper'
|
||||
|
||||
Wallabag\Controller\Import\PinboardController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_pinboard_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.pinboard'
|
||||
|
||||
Wallabag\Controller\Import\PocketController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_pocket_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.pocket'
|
||||
|
||||
Wallabag\Controller\Import\ReadabilityController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_readability_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.readability'
|
||||
|
||||
Wallabag\Controller\Import\WallabagV1Controller:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_wallabag_v1_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.wallabag_v1'
|
||||
|
||||
Wallabag\Controller\Import\WallabagV2Controller:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_wallabag_v2_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.wallabag_v2'
|
||||
|
||||
Wallabag\Controller\Import\ShaarliController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_shaarli_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.shaarli'
|
||||
|
||||
Wallabag\Controller\Import\PocketHtmlController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_pocket_html_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.pocket_html'
|
||||
|
||||
Wallabag\Controller\Import\PocketCsvController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_pocket_csv_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.pocket_csv'
|
||||
|
||||
Wallabag\Doctrine\MigrationFactoryDecorator:
|
||||
decorates: doctrine.migrations.migrations_factory
|
||||
|
||||
Doctrine\DBAL\Connection:
|
||||
alias: doctrine.dbal.default_connection
|
||||
|
||||
Doctrine\ORM\EntityManagerInterface:
|
||||
alias: doctrine.orm.entity_manager
|
||||
|
||||
Doctrine\Migrations\Metadata\Storage\TableMetadataStorageConfiguration:
|
||||
alias: doctrine.migrations.storage.table_storage
|
||||
|
||||
Doctrine\Persistence\ManagerRegistry:
|
||||
alias: doctrine
|
||||
|
||||
Craue\ConfigBundle\Util\Config:
|
||||
alias: craue_config
|
||||
|
||||
JMS\Serializer\SerializerInterface:
|
||||
alias: jms_serializer
|
||||
|
||||
Spiriit\Bundle\FormFilterBundle\Filter\FilterBuilderUpdaterInterface:
|
||||
alias: spiriit_form_filter.query_builder_updater
|
||||
|
||||
Scheb\TwoFactorBundle\Security\TwoFactor\Provider\Google\GoogleAuthenticatorInterface:
|
||||
alias: scheb_two_factor.security.google_authenticator
|
||||
|
||||
Symfony\Component\HttpFoundation\Session\SessionInterface:
|
||||
alias: session
|
||||
|
||||
Symfony\Component\EventDispatcher\EventDispatcherInterface:
|
||||
alias: event_dispatcher
|
||||
|
||||
Symfony\Component\Form\FormFactoryInterface:
|
||||
alias: form.factory
|
||||
|
||||
Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface:
|
||||
alias: security.token_storage
|
||||
|
||||
Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface:
|
||||
alias: security.authorization_checker
|
||||
|
||||
Symfony\Component\Translation\TranslatorInterface:
|
||||
alias: translator
|
||||
|
||||
Symfony\Component\Validator\Validator\ValidatorInterface:
|
||||
alias: validator
|
||||
|
||||
FOS\UserBundle\Model\UserManagerInterface:
|
||||
alias: fos_user.user_manager
|
||||
|
||||
MatomoTwigExtension\MatomoTwigExtension:
|
||||
wallabag.twig_extension:
|
||||
class: Wallabag\CoreBundle\Twig\WallabagExtension
|
||||
public: false
|
||||
tags:
|
||||
- { name: twig.extension }
|
||||
|
||||
ScssPhp\ScssPhp\Compiler:
|
||||
wallabag.twig_piwik_extension:
|
||||
class: PiwikTwigExtension\PiwikTwigExtension
|
||||
public: false
|
||||
tags:
|
||||
- { name: twig.extension }
|
||||
|
||||
Wallabag\Event\Listener\UserLocaleListener:
|
||||
wallabag.locale_listener:
|
||||
class: Wallabag\CoreBundle\EventListener\LocaleListener
|
||||
arguments: ["%kernel.default_locale%"]
|
||||
tags:
|
||||
- { name: kernel.event_subscriber }
|
||||
|
||||
wallabag.user_locale_listener:
|
||||
class: Wallabag\CoreBundle\EventListener\UserLocaleListener
|
||||
arguments: ["@session"]
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin }
|
||||
|
||||
craue_config_cache_provider:
|
||||
class: Symfony\Component\Cache\Adapter\FilesystemAdapter
|
||||
public: false
|
||||
arguments:
|
||||
$namespace: 'craue_config'
|
||||
$defaultLifetime: 0
|
||||
$directory: '%kernel.cache_dir%'
|
||||
|
||||
Wallabag\ParamConverter\UsernameFeedTokenConverter:
|
||||
tags:
|
||||
- { name: request.param_converter, converter: username_feed_token_converter }
|
||||
|
||||
Wallabag\Event\Subscriber\TablePrefixSubscriber:
|
||||
tags:
|
||||
- { name: doctrine.event_subscriber }
|
||||
|
||||
Wallabag\Event\Subscriber\SchemaAdapterSubscriber:
|
||||
arguments:
|
||||
$databaseTablePrefix: "%database_table_prefix%"
|
||||
tags:
|
||||
- { name: doctrine.event_subscriber }
|
||||
|
||||
psr18.wallabag.client:
|
||||
class: Symfony\Component\HttpClient\Psr18Client
|
||||
arguments:
|
||||
$client: '@Wallabag\HttpClient\WallabagClient'
|
||||
|
||||
Graby\Graby:
|
||||
arguments:
|
||||
$config:
|
||||
error_message: '%wallabag.fetching_error_message%'
|
||||
error_message_title: '%wallabag.fetching_error_message_title%'
|
||||
$client: '@psr18.wallabag.client'
|
||||
calls:
|
||||
- [ setLogger, [ "@logger" ] ]
|
||||
tags:
|
||||
- { name: monolog.logger, channel: graby }
|
||||
|
||||
Graby\SiteConfig\ConfigBuilder:
|
||||
arguments:
|
||||
$config: {}
|
||||
|
||||
Wallabag\SiteConfig\GrabySiteConfigBuilder:
|
||||
tags:
|
||||
- { name: monolog.logger, channel: graby }
|
||||
|
||||
# service alias override
|
||||
Wallabag\SiteConfig\SiteConfigBuilder:
|
||||
alias: Wallabag\SiteConfig\GrabySiteConfigBuilder
|
||||
|
||||
Symfony\Component\BrowserKit\HttpBrowser:
|
||||
arguments:
|
||||
$client: '@browser.client'
|
||||
|
||||
RulerZ\RulerZ:
|
||||
alias: rulerz
|
||||
|
||||
Wallabag\Operator\PHP\Matches:
|
||||
tags:
|
||||
- { name: rulerz.operator, target: native, operator: matches }
|
||||
|
||||
Wallabag\Operator\PHP\NotMatches:
|
||||
tags:
|
||||
- { name: rulerz.operator, target: native, operator: notmatches }
|
||||
|
||||
Wallabag\Operator\PHP\PatternMatches:
|
||||
tags:
|
||||
- { name: rulerz.operator, target: native, operator: "~" }
|
||||
|
||||
Predis\Client:
|
||||
arguments:
|
||||
$parameters: '%env(REDIS_URL)%'
|
||||
|
||||
Wallabag\Event\Subscriber\SQLiteCascadeDeleteSubscriber:
|
||||
tags:
|
||||
- { name: doctrine.event_subscriber }
|
||||
|
||||
Wallabag\Event\Subscriber\DownloadImagesSubscriber:
|
||||
arguments:
|
||||
$enabled: '@=service(''craue_config'').get(''download_images_enabled'')'
|
||||
|
||||
Wallabag\Helper\DownloadImages:
|
||||
arguments:
|
||||
$baseFolder: "%kernel.project_dir%/web/assets/images"
|
||||
|
||||
Wallabag\Command\InstallCommand:
|
||||
arguments:
|
||||
$databaseDriver: '%database_driver%'
|
||||
$defaultSettings: '%wallabag.default_internal_settings%'
|
||||
$defaultIgnoreOriginInstanceRules: '%wallabag.default_ignore_origin_instance_rules%'
|
||||
|
||||
Wallabag\Event\Listener\CreateConfigListener:
|
||||
arguments:
|
||||
$itemsOnPage: "%wallabag.items_on_page%"
|
||||
$feedLimit: "%wallabag.feed_limit%"
|
||||
$language: "%wallabag.language%"
|
||||
$readingSpeed: "%wallabag.reading_speed%"
|
||||
$actionMarkAsRead: "%wallabag.action_mark_as_read%"
|
||||
$listMode: "%wallabag.list_mode%"
|
||||
$displayThumbnails: "%wallabag.display_thumbnails%"
|
||||
|
||||
Wallabag\Event\Listener\AuthenticationFailureListener:
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: security.authentication.failure, method: onAuthenticationFailure }
|
||||
|
||||
Wallabag\Import\PocketImport:
|
||||
calls:
|
||||
- [ setClient, [ '@Symfony\Contracts\HttpClient\HttpClientInterface $pocketClient' ] ]
|
||||
tags:
|
||||
- { name: wallabag.import, alias: pocket }
|
||||
|
||||
Wallabag\Import\WallabagV1Import:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: wallabag_v1 }
|
||||
|
||||
Wallabag\Import\WallabagV2Import:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: wallabag_v2 }
|
||||
|
||||
Wallabag\Import\ElcuratorImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: elcurator }
|
||||
|
||||
Wallabag\Import\ReadabilityImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: readability }
|
||||
|
||||
Wallabag\Import\InstapaperImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: instapaper }
|
||||
|
||||
Wallabag\Import\PinboardImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: pinboard }
|
||||
|
||||
Wallabag\Import\DeliciousImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: delicious }
|
||||
|
||||
Wallabag\Import\OmnivoreImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: omnivore }
|
||||
|
||||
Wallabag\Import\FirefoxImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: firefox }
|
||||
|
||||
Wallabag\Import\ChromeImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: chrome }
|
||||
|
||||
Wallabag\Import\ShaarliImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: shaarli }
|
||||
|
||||
Wallabag\Import\PocketHtmlImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: pocket_html }
|
||||
|
||||
Wallabag\Import\PocketCsvImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: pocket_csv }
|
||||
|
||||
# to factorize the proximity and bypass translation for prev & next
|
||||
pagerfanta.view.default_wallabag:
|
||||
class: Pagerfanta\View\OptionableView
|
||||
arguments:
|
||||
- '@pagerfanta.view.twitter_bootstrap'
|
||||
- { proximity: 1, prev_message: "<", next_message: ">" }
|
||||
public: false
|
||||
tags:
|
||||
- { name: pagerfanta.view, alias: default_wallabag }
|
||||
|
||||
@ -1,94 +0,0 @@
|
||||
# RabbitMQ stuff
|
||||
services:
|
||||
_defaults:
|
||||
autowire: true
|
||||
autoconfigure: true
|
||||
public: true
|
||||
|
||||
Wallabag\Consumer\RabbitMQConsumerTotalProxy:
|
||||
lazy: true
|
||||
arguments:
|
||||
$pocketConsumer: '@old_sound_rabbit_mq.import_pocket_consumer'
|
||||
$readabilityConsumer: '@old_sound_rabbit_mq.import_readability_consumer'
|
||||
$wallabagV1Consumer: '@old_sound_rabbit_mq.import_wallabag_v1_consumer'
|
||||
$wallabagV2Consumer: '@old_sound_rabbit_mq.import_wallabag_v2_consumer'
|
||||
$firefoxConsumer: '@old_sound_rabbit_mq.import_firefox_consumer'
|
||||
$chromeConsumer: '@old_sound_rabbit_mq.import_chrome_consumer'
|
||||
$instapaperConsumer: '@old_sound_rabbit_mq.import_instapaper_consumer'
|
||||
$pinboardConsumer: '@old_sound_rabbit_mq.import_pinboard_consumer'
|
||||
$deliciousConsumer: '@old_sound_rabbit_mq.import_delicious_consumer'
|
||||
$elcuratorConsumer: '@old_sound_rabbit_mq.import_elcurator_consumer'
|
||||
$shaarliConsumer: '@old_sound_rabbit_mq.import_shaarli_consumer'
|
||||
$pocketHtmlConsumer: '@old_sound_rabbit_mq.import_pocket_html_consumer'
|
||||
$pocketCsvConsumer: '@old_sound_rabbit_mq.import_pocket_csv_consumer'
|
||||
$omnivoreConsumer: '@old_sound_rabbit_mq.import_omnivore_consumer'
|
||||
|
||||
wallabag.consumer.amqp.pocket:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketImport'
|
||||
|
||||
wallabag.consumer.amqp.readability:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ReadabilityImport'
|
||||
|
||||
wallabag.consumer.amqp.instapaper:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\InstapaperImport'
|
||||
|
||||
wallabag.consumer.amqp.pinboard:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PinboardImport'
|
||||
|
||||
wallabag.consumer.amqp.delicious:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\DeliciousImport'
|
||||
|
||||
wallabag.consumer.amqp.omnivore:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\OmnivoreImport'
|
||||
|
||||
wallabag.consumer.amqp.wallabag_v1:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\WallabagV1Import'
|
||||
|
||||
wallabag.consumer.amqp.wallabag_v2:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\WallabagV2Import'
|
||||
|
||||
wallabag.consumer.amqp.elcurator:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ElcuratorImport'
|
||||
|
||||
wallabag.consumer.amqp.firefox:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\FirefoxImport'
|
||||
|
||||
wallabag.consumer.amqp.chrome:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ChromeImport'
|
||||
|
||||
wallabag.consumer.amqp.shaarli:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ShaarliImport'
|
||||
|
||||
wallabag.consumer.amqp.pocket_html:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketHtmlImport'
|
||||
|
||||
wallabag.consumer.amqp.pocket_csv:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketCsvImport'
|
||||
@ -1,230 +0,0 @@
|
||||
# Redis stuff
|
||||
services:
|
||||
_defaults:
|
||||
autowire: true
|
||||
autoconfigure: true
|
||||
public: true
|
||||
|
||||
# readability
|
||||
wallabag.queue.redis.readability:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.readability"
|
||||
|
||||
wallabag.producer.redis.readability:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.readability"
|
||||
|
||||
wallabag.consumer.redis.readability:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ReadabilityImport'
|
||||
|
||||
# instapaper
|
||||
wallabag.queue.redis.instapaper:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.instapaper"
|
||||
|
||||
wallabag.producer.redis.instapaper:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.instapaper"
|
||||
|
||||
wallabag.consumer.redis.instapaper:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\InstapaperImport'
|
||||
|
||||
# pinboard
|
||||
wallabag.queue.redis.pinboard:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.pinboard"
|
||||
|
||||
wallabag.producer.redis.pinboard:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.pinboard"
|
||||
|
||||
wallabag.consumer.redis.pinboard:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PinboardImport'
|
||||
|
||||
# delicious
|
||||
wallabag.queue.redis.delicious:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.delicious"
|
||||
|
||||
wallabag.producer.redis.delicious:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.delicious"
|
||||
|
||||
wallabag.consumer.redis.delicious:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\DeliciousImport'
|
||||
|
||||
# Omnivore
|
||||
wallabag.queue.redis.omnivore:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.omnivore"
|
||||
|
||||
wallabag.producer.redis.omnivore:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.omnivore"
|
||||
|
||||
wallabag.consumer.redis.omnivore:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\OmnivoreImport'
|
||||
|
||||
# pocket
|
||||
wallabag.queue.redis.pocket:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.pocket"
|
||||
|
||||
wallabag.producer.redis.pocket:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.pocket"
|
||||
|
||||
wallabag.consumer.redis.pocket:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketImport'
|
||||
|
||||
# wallabag v1
|
||||
wallabag.queue.redis.wallabag_v1:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.wallabag_v1"
|
||||
|
||||
wallabag.producer.redis.wallabag_v1:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.wallabag_v1"
|
||||
|
||||
wallabag.consumer.redis.wallabag_v1:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\WallabagV1Import'
|
||||
|
||||
# wallabag v2
|
||||
wallabag.queue.redis.wallabag_v2:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.wallabag_v2"
|
||||
|
||||
wallabag.producer.redis.wallabag_v2:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.wallabag_v2"
|
||||
|
||||
wallabag.consumer.redis.wallabag_v2:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\WallabagV2Import'
|
||||
|
||||
# elcurator
|
||||
wallabag.queue.redis.elcurator:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.elcurator"
|
||||
|
||||
wallabag.producer.redis.elcurator:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.elcurator"
|
||||
|
||||
wallabag.consumer.redis.elcurator:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ElcuratorImport'
|
||||
|
||||
# firefox
|
||||
wallabag.queue.redis.firefox:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.firefox"
|
||||
|
||||
wallabag.producer.redis.firefox:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.firefox"
|
||||
|
||||
wallabag.consumer.redis.firefox:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\FirefoxImport'
|
||||
|
||||
# chrome
|
||||
wallabag.queue.redis.chrome:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.chrome"
|
||||
|
||||
wallabag.producer.redis.chrome:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.chrome"
|
||||
|
||||
wallabag.consumer.redis.chrome:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ChromeImport'
|
||||
|
||||
# shaarli
|
||||
wallabag.queue.redis.shaarli:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.shaarli"
|
||||
|
||||
wallabag.producer.redis.shaarli:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.shaarli"
|
||||
|
||||
wallabag.consumer.redis.shaarli:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ShaarliImport'
|
||||
|
||||
# pocket html
|
||||
wallabag.queue.redis.pocket_html:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.pocket_html"
|
||||
|
||||
wallabag.producer.redis.pocket_html:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.pocket_html"
|
||||
|
||||
wallabag.consumer.redis.pocket_html:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketHtmlImport'
|
||||
|
||||
# pocket csv
|
||||
wallabag.queue.redis.pocket_csv:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.pocket_csv"
|
||||
|
||||
wallabag.producer.redis.pocket_csv:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.pocket_csv"
|
||||
|
||||
wallabag.consumer.redis.pocket_csv:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketCsvImport'
|
||||
@ -1,14 +0,0 @@
|
||||
services:
|
||||
filesystem_cache:
|
||||
class: Doctrine\Common\Cache\FilesystemCache
|
||||
arguments:
|
||||
- "%kernel.cache_dir%/doctrine/metadata"
|
||||
|
||||
# fixtures
|
||||
Wallabag\DataFixtures\:
|
||||
bind:
|
||||
$defaultIgnoreOriginInstanceRules: '%wallabag.default_ignore_origin_instance_rules%'
|
||||
$defaultInternalSettings: '%wallabag.default_internal_settings%'
|
||||
resource: '../../fixtures/*'
|
||||
tags: ['doctrine.fixture.orm']
|
||||
autowire: true
|
||||
37
app/config/tests/parameters.yml.dist.mysql
Normal file
37
app/config/tests/parameters.yml.dist.mysql
Normal file
@ -0,0 +1,37 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_mysql
|
||||
test_database_host: localhost
|
||||
test_database_port: 3306
|
||||
test_database_name: wallabag_test
|
||||
test_database_user: root
|
||||
test_database_password: ~
|
||||
test_database_path: ~
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# two factor stuff
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_confirmation: true
|
||||
|
||||
from_email: no-reply@wallabag.org
|
||||
37
app/config/tests/parameters.yml.dist.pgsql
Normal file
37
app/config/tests/parameters.yml.dist.pgsql
Normal file
@ -0,0 +1,37 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_pgsql
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: wallabag_test
|
||||
test_database_user: travis
|
||||
test_database_password: ~
|
||||
test_database_path: ~
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# two factor stuff
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_confirmation: true
|
||||
|
||||
from_email: no-reply@wallabag.org
|
||||
37
app/config/tests/parameters.yml.dist.sqlite
Normal file
37
app/config/tests/parameters.yml.dist.sqlite
Normal file
@ -0,0 +1,37 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: ~
|
||||
test_database_user: ~
|
||||
test_database_password: ~
|
||||
test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# two factor stuff
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_confirmation: true
|
||||
|
||||
from_email: no-reply@wallabag.org
|
||||
@ -1,2 +0,0 @@
|
||||
parameters:
|
||||
env(DATABASE_URL): mysql://root:root@127.0.0.1:3306/wallabag?charset=utf8mb4
|
||||
@ -1,2 +0,0 @@
|
||||
parameters:
|
||||
env(DATABASE_URL): postgres://wallabag:wallabagrocks@localhost/wallabag?charset=utf8
|
||||
@ -1,2 +0,0 @@
|
||||
parameters:
|
||||
env(DATABASE_URL): sqlite:///%kernel.project_dir%/data/db/wallabag%wallabag_dbname_suffix%.sqlite?charset=utf8
|
||||
@ -1,185 +0,0 @@
|
||||
parameters:
|
||||
wallabag.version: 2.7.0-dev
|
||||
wallabag.paypal_url: "https://liberapay.com/wallabag/donate"
|
||||
wallabag.languages:
|
||||
en: 'English'
|
||||
fr: 'Français'
|
||||
de: 'Deutsch'
|
||||
nl: 'Dutch'
|
||||
th: 'ไทย'
|
||||
tr: 'Türkçe'
|
||||
fa: 'فارسی'
|
||||
ro: 'Română'
|
||||
pl: 'Polish'
|
||||
da: 'Dansk'
|
||||
es: 'Español'
|
||||
oc: 'Occitan'
|
||||
it: 'Italiano'
|
||||
pt: 'Português'
|
||||
ru: 'Русский'
|
||||
ja: '日本語'
|
||||
zh: '简体中文'
|
||||
uk: 'Українська'
|
||||
hr: 'Hrvatski'
|
||||
cs: 'Čeština'
|
||||
el: 'Ελληνικά'
|
||||
gl: 'Galego'
|
||||
wallabag.items_on_page: 12
|
||||
wallabag.language: '%locale%'
|
||||
wallabag.feed_limit: 50
|
||||
wallabag.reading_speed: 200
|
||||
wallabag.cache_lifetime: 10
|
||||
wallabag.action_mark_as_read: 1
|
||||
wallabag.list_mode: 0
|
||||
wallabag.display_thumbnails: 1
|
||||
wallabag.fetching_error_message_title: 'No title found'
|
||||
wallabag.fetching_error_message: |
|
||||
wallabag can't retrieve contents for this article. Please <a href="https://doc.wallabag.org/en/user/errors_during_fetching.html#how-can-i-help-to-fix-that">troubleshoot this issue</a>.
|
||||
wallabag.api_limit_mass_actions: 10
|
||||
wallabag.site_credentials.encryption_key_path: "%kernel.project_dir%/data/site-credentials-secret-key.txt"
|
||||
wallabag.default_internal_settings:
|
||||
-
|
||||
name: share_public
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: share_diaspora
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: diaspora_url
|
||||
value: https://diasporapod.com
|
||||
section: entry
|
||||
-
|
||||
name: share_unmark
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: unmark_url
|
||||
value: https://unmark.it
|
||||
section: entry
|
||||
-
|
||||
name: share_shaarli
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: shaarli_url
|
||||
value: https://myshaarli.com
|
||||
section: entry
|
||||
-
|
||||
name: share_linkding
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: linkding_url
|
||||
value: https://linkding.example.com
|
||||
section: entry
|
||||
-
|
||||
name: share_mail
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: share_twitter
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: show_printlink
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: restricted_access
|
||||
value: 0
|
||||
section: entry
|
||||
-
|
||||
name: export_epub
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_pdf
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_csv
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_json
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_txt
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_xml
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_md
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: import_with_redis
|
||||
value: 0
|
||||
section: import
|
||||
-
|
||||
name: import_with_rabbitmq
|
||||
value: 0
|
||||
section: import
|
||||
-
|
||||
name: matomo_enabled
|
||||
value: 0
|
||||
section: analytics
|
||||
-
|
||||
name: matomo_host
|
||||
value: matomo.wallabag.org
|
||||
section: analytics
|
||||
-
|
||||
name: matomo_site_id
|
||||
value: 1
|
||||
section: analytics
|
||||
-
|
||||
name: download_images_enabled
|
||||
value: 0
|
||||
section: misc
|
||||
-
|
||||
name: wallabag_support_url
|
||||
value: https://github.com/wallabag/wallabag/issues/new/choose
|
||||
section: misc
|
||||
-
|
||||
name: api_user_registration
|
||||
value: 0
|
||||
section: api
|
||||
-
|
||||
name: store_article_headers
|
||||
value: 0
|
||||
section: entry
|
||||
-
|
||||
name: shaarli_share_origin_url
|
||||
value: 0
|
||||
section: entry
|
||||
|
||||
wallabag.default_ignore_origin_instance_rules:
|
||||
-
|
||||
rule: host = "feedproxy.google.com"
|
||||
-
|
||||
rule: host = "feeds.reuters.com"
|
||||
-
|
||||
rule: _all ~ "https?://www\.lemonde\.fr/tiny.*"
|
||||
wallabag.fonts:
|
||||
- 'Sans-serif'
|
||||
- 'Serif'
|
||||
- 'Atkinson Hyperlegible'
|
||||
- 'EB Garamond'
|
||||
- 'Lato'
|
||||
- 'Montserrat'
|
||||
- 'OpenDyslexicRegular'
|
||||
- 'Oswald'
|
||||
wallabag.allow_mimetypes:
|
||||
- 'application/octet-stream'
|
||||
- 'application/json'
|
||||
- 'text/plain'
|
||||
- 'text/csv'
|
||||
- 'text/html'
|
||||
- 'application/vnd.ms-excel'
|
||||
wallabag.resource_dir: "%kernel.project_dir%/web/uploads/import"
|
||||
11
assets/bootstrap.js
vendored
11
assets/bootstrap.js
vendored
@ -1,11 +0,0 @@
|
||||
import { startStimulusApp } from '@symfony/stimulus-bridge';
|
||||
|
||||
// Registers Stimulus controllers from controllers.json and in the controllers/ directory
|
||||
export default startStimulusApp(require.context(
|
||||
'@symfony/stimulus-bridge/lazy-controller-loader!./controllers',
|
||||
true,
|
||||
/\.[jt]sx?$/,
|
||||
));
|
||||
|
||||
// register any custom, 3rd party controllers here
|
||||
// app.register('some_controller_name', SomeImportedController);
|
||||
@ -1,4 +0,0 @@
|
||||
{
|
||||
"controllers": [],
|
||||
"entrypoints": []
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = ['input'];
|
||||
|
||||
toggle() {
|
||||
this.element.classList.toggle('hidden');
|
||||
|
||||
if (!this.element.classList.contains('hidden')) {
|
||||
this.inputTarget.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,57 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import annotator from 'annotator';
|
||||
|
||||
export default class extends Controller {
|
||||
static values = {
|
||||
entryId: Number,
|
||||
createUrl: String,
|
||||
updateUrl: String,
|
||||
destroyUrl: String,
|
||||
searchUrl: String,
|
||||
};
|
||||
|
||||
connect() {
|
||||
this.app = new annotator.App();
|
||||
|
||||
this.app.include(annotator.ui.main, {
|
||||
element: this.element,
|
||||
});
|
||||
|
||||
const authorization = {
|
||||
permits() { return true; },
|
||||
};
|
||||
this.app.registry.registerUtility(authorization, 'authorizationPolicy');
|
||||
|
||||
this.app.include(annotator.storage.http, {
|
||||
prefix: '',
|
||||
urls: {
|
||||
create: this.createUrlValue,
|
||||
update: this.updateUrlValue,
|
||||
destroy: this.destroyUrlValue,
|
||||
search: this.searchUrlValue,
|
||||
},
|
||||
entryId: this.entryIdValue,
|
||||
onError(msg, xhr) {
|
||||
if (!Object.prototype.hasOwnProperty.call(xhr, 'responseJSON')) {
|
||||
annotator.notification.banner('An error occurred', 'error');
|
||||
return;
|
||||
}
|
||||
Object.values(xhr.responseJSON.children).forEach((v) => {
|
||||
if (v.errors) {
|
||||
Object.values(v.errors).forEach((errorText) => {
|
||||
annotator.notification.banner(errorText, 'error');
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
this.app.start().then(() => {
|
||||
this.app.annotations.load({ entry: this.entryIdValue });
|
||||
});
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.app.destroy();
|
||||
}
|
||||
}
|
||||
@ -1,15 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = ['item', 'tagAction'];
|
||||
|
||||
toggleSelection(e) {
|
||||
this.itemTargets.forEach((item) => {
|
||||
item.checked = e.currentTarget.checked; // eslint-disable-line no-param-reassign
|
||||
});
|
||||
}
|
||||
|
||||
tagSelection() {
|
||||
this.element.requestSubmit(this.tagActionTarget);
|
||||
}
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import ClipboardJS from 'clipboard';
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.clipboard = new ClipboardJS(this.element);
|
||||
|
||||
this.clipboard.on('success', (e) => {
|
||||
e.clearSelection();
|
||||
});
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.clipboard.destroy();
|
||||
}
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = ['previewArticle', 'previewContent', 'font', 'fontSize', 'lineHeight', 'maxWidth'];
|
||||
|
||||
connect() {
|
||||
this.updatePreview();
|
||||
}
|
||||
|
||||
updatePreview() {
|
||||
this.previewArticleTarget.style.maxWidth = `${this.maxWidthTarget.value}em`;
|
||||
this.previewContentTarget.style.fontFamily = this.fontTarget.value;
|
||||
this.previewContentTarget.style.fontSize = `${this.fontSizeTarget.value}em`;
|
||||
this.previewContentTarget.style.lineHeight = `${this.lineHeightTarget.value}em`;
|
||||
}
|
||||
}
|
||||
@ -1,39 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.#choose();
|
||||
|
||||
this.mql = window.matchMedia('(prefers-color-scheme: dark)');
|
||||
this.mql.addEventListener('change', this.#choose.bind(this));
|
||||
}
|
||||
|
||||
useLight() {
|
||||
this.element.classList.remove('dark-theme');
|
||||
document.cookie = 'theme=light;samesite=Lax;path=/;max-age=31536000';
|
||||
}
|
||||
|
||||
useDark() {
|
||||
this.element.classList.add('dark-theme');
|
||||
document.cookie = 'theme=dark;samesite=Lax;path=/;max-age=31536000';
|
||||
}
|
||||
|
||||
useAuto() {
|
||||
document.cookie = 'theme=auto;samesite=Lax;path=/;max-age=0';
|
||||
this.#choose();
|
||||
}
|
||||
|
||||
#choose() {
|
||||
const themeCookieExists = document.cookie.split(';').some((cookie) => cookie.trim().startsWith('theme='));
|
||||
|
||||
if (themeCookieExists) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.mql.matches) {
|
||||
this.element.classList.add('dark-theme');
|
||||
} else {
|
||||
this.element.classList.remove('dark-theme');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,58 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = ['card', 'paginationWrapper'];
|
||||
|
||||
connect() {
|
||||
this.pagination = this.paginationWrapperTarget.querySelector('.pagination');
|
||||
|
||||
this.cardIndex = 0;
|
||||
this.lastCardIndex = this.cardTargets.length - 1;
|
||||
|
||||
/* If we come from next page */
|
||||
if (window.location.hash === '#prev') {
|
||||
this.cardIndex = this.lastCardIndex;
|
||||
}
|
||||
|
||||
this.currentCard = this.cardTargets[this.cardIndex];
|
||||
|
||||
this.currentCard.classList.add('z-depth-4');
|
||||
}
|
||||
|
||||
selectRightCard() {
|
||||
if (this.cardIndex >= 0 && this.cardIndex < this.lastCardIndex) {
|
||||
this.currentCard.classList.remove('z-depth-4');
|
||||
this.cardIndex += 1;
|
||||
this.currentCard = this.cardTargets[this.cardIndex];
|
||||
this.currentCard.classList.add('z-depth-4');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.pagination && this.pagination.querySelector('a[rel="next"]')) {
|
||||
window.location.href = this.pagination.querySelector('a[rel="next"]').href;
|
||||
}
|
||||
}
|
||||
|
||||
selectLeftCard() {
|
||||
if (this.cardIndex > 0 && this.cardIndex <= this.lastCardIndex) {
|
||||
this.currentCard.classList.remove('z-depth-4');
|
||||
this.cardIndex -= 1;
|
||||
this.currentCard = this.cardTargets[this.cardIndex];
|
||||
this.currentCard.classList.add('z-depth-4');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.pagination && this.pagination.querySelector('a[rel="prev"]')) {
|
||||
window.location.href = `${this.pagination.querySelector('a[rel="prev"]').href}#prev`;
|
||||
}
|
||||
}
|
||||
|
||||
selectCurrentCard() {
|
||||
const url = this.currentCard.querySelector('a.card-title').href;
|
||||
if (url) {
|
||||
window.location.href = url;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = ['emailTwoFactor', 'googleTwoFactor'];
|
||||
|
||||
uncheckGoogle() {
|
||||
this.googleTwoFactorTarget.checked = false;
|
||||
}
|
||||
|
||||
uncheckEmail() {
|
||||
this.emailTwoFactorTarget.checked = false;
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import 'highlight.js/styles/atom-one-light.css';
|
||||
import hljs from 'highlight.js';
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.element.querySelectorAll('pre code').forEach((element) => {
|
||||
hljs.highlightElement(element);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1,7 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
toggleAddTagForm() {
|
||||
this.dispatch('toggleAddTagForm');
|
||||
}
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import M from '@materializecss/materialize';
|
||||
|
||||
export default class extends Controller {
|
||||
static values = {
|
||||
accordion: { type: Boolean, default: true },
|
||||
};
|
||||
|
||||
connect() {
|
||||
this.instance = M.Collapsible.init(this.element, { accordion: this.accordionValue });
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.instance.destroy();
|
||||
}
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import M from '@materializecss/materialize';
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.instance = M.Dropdown.init(this.element, {
|
||||
hover: false,
|
||||
coverTrigger: false,
|
||||
constrainWidth: false,
|
||||
});
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.instance.destroy();
|
||||
}
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import M from '@materializecss/materialize';
|
||||
|
||||
export default class extends Controller {
|
||||
static values = {
|
||||
edge: { type: String, default: 'left' },
|
||||
};
|
||||
|
||||
connect() {
|
||||
this.instance = M.FloatingActionButton.init(this.element);
|
||||
}
|
||||
|
||||
autoDisplay() {
|
||||
const scrolled = (window.innerHeight + window.scrollY) >= document.body.offsetHeight;
|
||||
|
||||
if (scrolled) {
|
||||
this.toggleScroll = true;
|
||||
this.instance.open();
|
||||
} else if (this.toggleScroll === true) {
|
||||
this.toggleScroll = false;
|
||||
this.instance.close();
|
||||
}
|
||||
}
|
||||
|
||||
click() {
|
||||
this.dispatch('click');
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.instance.destroy();
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import M from '@materializecss/materialize';
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.instance = M.FormSelect.init(this.element.querySelector('select'));
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.instance.destroy();
|
||||
}
|
||||
}
|
||||
@ -1,24 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import M from '@materializecss/materialize';
|
||||
|
||||
const mobileMaxWidth = 993;
|
||||
|
||||
export default class extends Controller {
|
||||
static values = {
|
||||
edge: { type: String, default: 'left' },
|
||||
};
|
||||
|
||||
connect() {
|
||||
this.instance = M.Sidenav.init(this.element, { edge: this.edgeValue });
|
||||
}
|
||||
|
||||
close() {
|
||||
if (window.innerWidth < mobileMaxWidth) {
|
||||
this.instance.close();
|
||||
}
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.instance.destroy();
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import M from '@materializecss/materialize';
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.instance = M.Tabs.init(this.element);
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.instance.destroy();
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import M from '@materializecss/materialize';
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.instance = M.toast({ text: this.element.innerText });
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.instance.dismissAll();
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import M from '@materializecss/materialize';
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.instance = M.Tooltip.init(this.element);
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.instance.destroy();
|
||||
}
|
||||
}
|
||||
@ -1,10 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import jrQrcode from 'jr-qrcode';
|
||||
|
||||
export default class extends Controller {
|
||||
static values = { url: String };
|
||||
|
||||
connect() {
|
||||
this.element.setAttribute('src', jrQrcode.getQrBase64(this.urlValue));
|
||||
}
|
||||
}
|
||||
@ -1,10 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
updateWidth() {
|
||||
const referenceHeight = document.body.offsetHeight - window.innerHeight;
|
||||
const scrollPercent = (window.scrollY / referenceHeight) * 100;
|
||||
|
||||
this.element.style.width = `${scrollPercent}%`;
|
||||
}
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
static values = { entryId: Number };
|
||||
|
||||
connect() {
|
||||
window.scrollTo({
|
||||
top: window.innerHeight * localStorage[`wallabag.article.${this.entryIdValue}.percent`],
|
||||
behavior: 'smooth',
|
||||
});
|
||||
}
|
||||
|
||||
saveScroll() {
|
||||
const scrollPercent = window.scrollY / window.innerHeight;
|
||||
const scrollPercentRounded = Math.round(scrollPercent * 100) / 100;
|
||||
|
||||
localStorage[`wallabag.article.${this.entryIdValue}.percent`] = scrollPercentRounded;
|
||||
}
|
||||
}
|
||||
@ -1,141 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
import Mousetrap from 'mousetrap';
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = ['openOriginal', 'markAsFavorite', 'markAsRead', 'deleteEntry', 'showAddUrl', 'showSearch', 'showActions'];
|
||||
|
||||
static outlets = ['entries-navigation'];
|
||||
|
||||
connect() {
|
||||
/* Go to */
|
||||
Mousetrap.bind('g u', () => {
|
||||
window.location.href = Routing.generate('homepage');
|
||||
});
|
||||
Mousetrap.bind('g s', () => {
|
||||
window.location.href = Routing.generate('starred');
|
||||
});
|
||||
Mousetrap.bind('g r', () => {
|
||||
window.location.href = Routing.generate('archive');
|
||||
});
|
||||
Mousetrap.bind('g a', () => {
|
||||
window.location.href = Routing.generate('all');
|
||||
});
|
||||
Mousetrap.bind('g t', () => {
|
||||
window.location.href = Routing.generate('tag');
|
||||
});
|
||||
Mousetrap.bind('g c', () => {
|
||||
window.location.href = Routing.generate('config');
|
||||
});
|
||||
Mousetrap.bind('g i', () => {
|
||||
window.location.href = Routing.generate('import');
|
||||
});
|
||||
Mousetrap.bind('g d', () => {
|
||||
window.location.href = Routing.generate('developer');
|
||||
});
|
||||
Mousetrap.bind('?', () => {
|
||||
window.location.href = Routing.generate('howto');
|
||||
});
|
||||
Mousetrap.bind('g l', () => {
|
||||
window.location.href = Routing.generate('fos_user_security_logout');
|
||||
});
|
||||
|
||||
/* open original article */
|
||||
Mousetrap.bind('o', () => {
|
||||
if (!this.hasOpenOriginalTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.openOriginalTarget.click();
|
||||
});
|
||||
|
||||
/* mark as favorite */
|
||||
Mousetrap.bind('f', () => {
|
||||
if (!this.hasMarkAsFavoriteTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.markAsFavoriteTarget.click();
|
||||
});
|
||||
|
||||
/* mark as read */
|
||||
Mousetrap.bind('a', () => {
|
||||
if (!this.hasMarkAsReadTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.markAsReadTarget.click();
|
||||
});
|
||||
|
||||
/* delete */
|
||||
Mousetrap.bind('del', () => {
|
||||
if (!this.hasDeleteEntryTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.deleteEntryTarget.click();
|
||||
});
|
||||
|
||||
/* Actions */
|
||||
Mousetrap.bind('g n', (e) => {
|
||||
if (!this.hasShowAddUrlTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
this.showAddUrlTarget.click();
|
||||
});
|
||||
|
||||
Mousetrap.bind('s', (e) => {
|
||||
if (!this.hasShowSearchTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
this.showSearchTarget.click();
|
||||
});
|
||||
|
||||
Mousetrap.bind('esc', (e) => {
|
||||
if (!this.hasShowActionsTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
this.showActionsTarget.click();
|
||||
});
|
||||
|
||||
const originalStopCallback = Mousetrap.prototype.stopCallback;
|
||||
|
||||
Mousetrap.prototype.stopCallback = (e, element, combo) => {
|
||||
// allow esc key to be used in input fields of topbar
|
||||
if (combo === 'esc' && element.dataset.topbarTarget !== undefined) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return originalStopCallback(e, element);
|
||||
};
|
||||
|
||||
Mousetrap.bind('right', () => {
|
||||
if (!this.hasEntriesNavigationOutlet) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.entriesNavigationOutlet.selectRightCard();
|
||||
});
|
||||
|
||||
Mousetrap.bind('left', () => {
|
||||
if (!this.hasEntriesNavigationOutlet) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.entriesNavigationOutlet.selectLeftCard();
|
||||
});
|
||||
|
||||
Mousetrap.bind('enter', () => {
|
||||
if (!this.hasEntriesNavigationOutlet) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.entriesNavigationOutlet.selectCurrentCard();
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1,7 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
toggle() {
|
||||
this.element.classList.toggle('entry-nav-top--sticky');
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = ['link', 'edit', 'form', 'input'];
|
||||
|
||||
showForm() {
|
||||
this.formTarget.classList.remove('hidden');
|
||||
this.editTarget.classList.add('hidden');
|
||||
this.linkTarget.classList.add('hidden');
|
||||
this.inputTarget.focus();
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user