mirror of
https://github.com/wallabag/wallabag.git
synced 2025-12-26 04:27:34 +01:00
Compare commits
1 Commits
parameters
...
upgrade-ma
| Author | SHA1 | Date | |
|---|---|---|---|
| db94693b09 |
34
.env
34
.env
@ -1,34 +0,0 @@
|
||||
SECRET="ch4n63m31fy0uc4n"
|
||||
LOCALE=en
|
||||
|
||||
SERVER_NAME="Your wallabag instance"
|
||||
DOMAIN_NAME=http://127.0.0.1:8000
|
||||
|
||||
DATABASE_URL=sqlite:///%kernel.project_dir%/data/db/wallabag.sqlite?charset=utf8
|
||||
#DATABASE_URL=mysql://root:wallaroot@mariadb:3306/wallabag?charset=utf8mb4
|
||||
#DATABASE_URL=postgres://wallabag:wallapass@postgres:5432/wallabag?charset=utf8
|
||||
DATABASE_TABLE_PREFIX=wallabag_
|
||||
|
||||
FOSUSER_REGISTRATION=false
|
||||
FOSUSER_CONFIRMATION=true
|
||||
|
||||
FOS_OAUTH_SERVER_ACCESS_TOKEN_LIFETIME=3600
|
||||
FOS_OAUTH_SERVER_REFRESH_TOKEN_LIFETIME=1209600
|
||||
TWOFACTOR_SENDER=no-reply@wallabag.org
|
||||
|
||||
MAILER_DSN=smtp://127.0.0.1
|
||||
FROM_EMAIL=wallabag@example.com
|
||||
|
||||
RABBITMQ_HOST=rabbitmq
|
||||
RABBITMQ_PORT=5672
|
||||
RABBITMQ_USER=guest
|
||||
RABBITMQ_PASSWORD=guest
|
||||
|
||||
REDIS_SCHEME=tcp
|
||||
REDIS_HOST=redis
|
||||
REDIS_PORT=6379
|
||||
REDIS_PATH=
|
||||
REDIS_PASSWORD=
|
||||
RABBITMQ_PREFETCH_COUNT=10
|
||||
|
||||
SENTRY_DSN=
|
||||
@ -1,4 +0,0 @@
|
||||
DATABASE_URL=sqlite:///%kernel.project_dir%/data/db/wallabag_test.sqlite?charset=utf8
|
||||
#DATABASE_URL=mysql://root:wallaroot@mariadb:3306/wallabag_test?charset=utf8mb4
|
||||
#DATABASE_URL=postgres://wallabag:wallapass@postgres:5432/wallabag_test?charset=utf8
|
||||
FOSUSER_REGISTRATION=true
|
||||
33
.github/ISSUE_TEMPLATE/2-bug-report.md
vendored
33
.github/ISSUE_TEMPLATE/2-bug-report.md
vendored
@ -17,7 +17,7 @@ Installation: How did you install wallabag? Using git clone, the docker image, a
|
||||
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: Put the content of your environment variables (hide sensitive stuff if you want)
|
||||
Parameters: Paste the content of your app/config/parameters.yml (hide sensitive stuff if you want)
|
||||
-->
|
||||
### Environment
|
||||
|
||||
@ -29,37 +29,10 @@ Parameters: Put the content of your environment variables (hide sensitive stuf
|
||||
* **Parameters**:
|
||||
|
||||
<details>
|
||||
<summary>My environment variables are:</summary>
|
||||
<summary>My <code>app/config/parameters.yml</code> is:</summary>
|
||||
|
||||
```
|
||||
LOCALE=
|
||||
|
||||
# Make sure to hide username and password below, if any
|
||||
DATABASE_URL=
|
||||
DATABASE_TABLE_PREFIX=
|
||||
|
||||
FOSUSER_REGISTRATION=
|
||||
FOSUSER_CONFIRMATION=
|
||||
|
||||
FOS_OAUTH_SERVER_ACCESS_TOKEN_LIFETIME=
|
||||
FOS_OAUTH_SERVER_REFRESH_TOKEN_LIFETIME=
|
||||
TWOFACTOR_SENDER=
|
||||
|
||||
# Make sure to hide username and password below, if any
|
||||
MAILER_DSN=
|
||||
FROM_EMAIL=
|
||||
|
||||
RABBITMQ_HOST=
|
||||
RABBITMQ_PORT=
|
||||
|
||||
REDIS_SCHEME=
|
||||
REDIS_HOST=
|
||||
REDIS_PORT=
|
||||
REDIS_PATH=
|
||||
RABBITMQ_PREFETCH_COUNT=
|
||||
|
||||
# Make sure to hide username and password below, if any
|
||||
SENTRY_DSN=
|
||||
PASTE HERE
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
2
.github/dependabot.yml
vendored
2
.github/dependabot.yml
vendored
@ -15,7 +15,7 @@ updates:
|
||||
patterns:
|
||||
- "*fontsource*"
|
||||
ignore:
|
||||
- dependency-name: "@materializecss/materialize"
|
||||
- dependency-name: @materializecss/materialize
|
||||
versions:
|
||||
- "> 1.2.2"
|
||||
- package-ecosystem: composer
|
||||
|
||||
2
.github/workflows/coding-standards.yml
vendored
2
.github/workflows/coding-standards.yml
vendored
@ -40,7 +40,7 @@ jobs:
|
||||
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/.env.mysql .env.test.local
|
||||
cp app/config/tests/parameters_test.mysql.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Install dependencies with Composer"
|
||||
id: composer-install
|
||||
|
||||
9
.github/workflows/continuous-integration.yml
vendored
9
.github/workflows/continuous-integration.yml
vendored
@ -89,7 +89,7 @@ jobs:
|
||||
run: yarn build:dev
|
||||
|
||||
- name: "Prepare database configuration"
|
||||
run: cp app/config/tests/.env.${{ matrix.database }} .env.test.local
|
||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/phpunit -v"
|
||||
@ -140,7 +140,8 @@ jobs:
|
||||
|
||||
- name: "Remove database prefix"
|
||||
run: |
|
||||
sed -i 's/DATABASE_TABLE_PREFIX=wallabag_/DATABASE_TABLE_PREFIX=/' .env
|
||||
pip install --user yq
|
||||
yq -Y --in-place '.parameters.database_table_prefix = ""' app/config/parameters.yml.dist
|
||||
|
||||
- name: "Setup MySQL"
|
||||
if: "${{ matrix.database == 'mysql' }}"
|
||||
@ -168,7 +169,7 @@ jobs:
|
||||
run: yarn build:dev
|
||||
|
||||
- name: "Prepare database configuration"
|
||||
run: cp app/config/tests/.env.${{ matrix.database }} .env.test.local
|
||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/phpunit -v"
|
||||
@ -234,7 +235,7 @@ jobs:
|
||||
run: yarn build:dev
|
||||
|
||||
- name: "Prepare database configuration"
|
||||
run: cp app/config/tests/.env.${{ matrix.database }} .env.test.local
|
||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/phpunit -v"
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@ -17,6 +17,9 @@
|
||||
phpunit.xml
|
||||
compose.override.yaml
|
||||
|
||||
# Parameters
|
||||
/app/config/parameters.yml
|
||||
|
||||
# Managed by Composer
|
||||
/vendor/
|
||||
|
||||
|
||||
@ -67,12 +67,6 @@ class AppKernel extends Kernel
|
||||
|
||||
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||
{
|
||||
if (file_exists($this->getProjectDir() . '/app/config/parameters.yml')) {
|
||||
$loader->load($this->getProjectDir() . '/app/config/parameters.yml');
|
||||
|
||||
@trigger_error('The "app/config/parameters.yml" file is deprecated and will not be supported in a future version. Move your configuration to environment variables and remove the file.', \E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
$loader->load($this->getProjectDir() . '/app/config/config_' . $this->getEnvironment() . '.yml');
|
||||
|
||||
$loader->load(function (ContainerBuilder $container) {
|
||||
@ -81,12 +75,9 @@ class AppKernel extends Kernel
|
||||
$container->addObjectResource($this);
|
||||
});
|
||||
|
||||
if (file_exists($this->getProjectDir() . '/app/config/parameters.yml')) {
|
||||
$loader->load(function (ContainerBuilder $container) {
|
||||
$this->loadEnvVarsFromParameters($container);
|
||||
$this->defineDatabaseUrlEnvVar($container);
|
||||
});
|
||||
}
|
||||
$loader->load(function (ContainerBuilder $container) {
|
||||
$this->processDatabaseParameters($container);
|
||||
});
|
||||
}
|
||||
|
||||
protected function build(ContainerBuilder $container)
|
||||
@ -94,45 +85,7 @@ class AppKernel extends Kernel
|
||||
$container->addCompilerPass(new ImportCompilerPass());
|
||||
}
|
||||
|
||||
private function loadEnvVarsFromParameters(ContainerBuilder $container)
|
||||
{
|
||||
$this->setEnvVarFromParameter($container, 'DATABASE_TABLE_PREFIX', 'database_table_prefix');
|
||||
|
||||
$this->setEnvVarFromParameter($container, 'DOMAIN_NAME', 'domain_name');
|
||||
$this->setEnvVarFromParameter($container, 'SERVER_NAME', 'server_name');
|
||||
$this->setEnvVarFromParameter($container, 'MAILER_DSN', 'mailer_dsn');
|
||||
$this->setEnvVarFromParameter($container, 'LOCALE', 'locale');
|
||||
$this->setEnvVarFromParameter($container, 'SECRET', 'secret');
|
||||
|
||||
$this->setEnvVarFromParameter($container, 'TWOFACTOR_SENDER', 'twofactor_sender');
|
||||
$this->setEnvVarFromParameter($container, 'FOSUSER_REGISTRATION', 'fosuser_registration');
|
||||
$this->setEnvVarFromParameter($container, 'FOSUSER_CONFIRMATION', 'fosuser_confirmation');
|
||||
$this->setEnvVarFromParameter($container, 'FOS_OAUTH_SERVER_ACCESS_TOKEN_LIFETIME', 'fos_oauth_server_access_token_lifetime');
|
||||
$this->setEnvVarFromParameter($container, 'FOS_OAUTH_SERVER_REFRESH_TOKEN_LIFETIME', 'fos_oauth_server_refresh_token_lifetime');
|
||||
$this->setEnvVarFromParameter($container, 'FROM_EMAIL', 'from_email');
|
||||
|
||||
$this->setEnvVarFromParameter($container, 'RABBITMQ_HOST', 'rabbitmq_host');
|
||||
$this->setEnvVarFromParameter($container, 'RABBITMQ_PORT', 'rabbitmq_port');
|
||||
$this->setEnvVarFromParameter($container, 'RABBITMQ_USER', 'rabbitmq_user');
|
||||
$this->setEnvVarFromParameter($container, 'RABBITMQ_PASSWORD', 'rabbitmq_password');
|
||||
$this->setEnvVarFromParameter($container, 'RABBITMQ_PREFETCH_COUNT', 'rabbitmq_prefetch_count');
|
||||
|
||||
$this->setEnvVarFromParameter($container, 'REDIS_SCHEME', 'redis_scheme');
|
||||
$this->setEnvVarFromParameter($container, 'REDIS_HOST', 'redis_host');
|
||||
$this->setEnvVarFromParameter($container, 'REDIS_PORT', 'redis_port');
|
||||
$this->setEnvVarFromParameter($container, 'REDIS_PATH', 'redis_path');
|
||||
$this->setEnvVarFromParameter($container, 'REDIS_PASSWORD', 'redis_password');
|
||||
|
||||
$this->setEnvVarFromParameter($container, 'SENTRY_DSN', 'sentry_dsn');
|
||||
}
|
||||
|
||||
private function setEnvVarFromParameter(ContainerBuilder $container, string $envVar, string $parameter)
|
||||
{
|
||||
$_ENV[$envVar] = $_SERVER[$envVar] = (string) $container->getParameter($parameter);
|
||||
$container->setParameter('env(' . $envVar . ')', (string) $container->getParameter($parameter));
|
||||
}
|
||||
|
||||
private function defineDatabaseUrlEnvVar(ContainerBuilder $container)
|
||||
private function processDatabaseParameters(ContainerBuilder $container)
|
||||
{
|
||||
switch ($container->getParameter('database_driver')) {
|
||||
case 'pdo_mysql':
|
||||
@ -148,39 +101,15 @@ class AppKernel extends Kernel
|
||||
throw new RuntimeException('Unsupported database driver: ' . $container->getParameter('database_driver'));
|
||||
}
|
||||
|
||||
$user = $container->getParameter('database_user');
|
||||
$password = $container->getParameter('database_password');
|
||||
$host = $container->getParameter('database_host');
|
||||
$port = $container->getParameter('database_port');
|
||||
$name = $container->getParameter('database_name');
|
||||
$container->setParameter('database_scheme', $scheme);
|
||||
|
||||
if ('sqlite' === $scheme) {
|
||||
$name = $container->getParameter('database_path');
|
||||
$container->setParameter('database_name', $container->getParameter('database_path'));
|
||||
}
|
||||
|
||||
$url = $scheme . '://' . $user . ':' . $password . '@' . $host;
|
||||
|
||||
if ($port) {
|
||||
$url .= ':' . $port;
|
||||
}
|
||||
|
||||
$url .= '/' . $name;
|
||||
|
||||
$query = [];
|
||||
|
||||
if ($container->getParameter('database_socket')) {
|
||||
$query['unix_socket'] = $container->getParameter('database_socket');
|
||||
}
|
||||
|
||||
if ($container->getParameter('database_charset')) {
|
||||
$query['charset'] = $container->getParameter('database_charset');
|
||||
}
|
||||
|
||||
if ([] !== $query) {
|
||||
$url .= '?' . http_build_query($query);
|
||||
}
|
||||
|
||||
$_ENV['DATABASE_URL'] = $_SERVER['DATABASE_URL'] = $url;
|
||||
$container->setParameter('env(DATABASE_URL)', $url);
|
||||
$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'));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,18 +1,20 @@
|
||||
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: "%env(LOCALE)%"
|
||||
fallback: "%locale%"
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
secret: "%env(SECRET)%"
|
||||
secret: "%secret%"
|
||||
router:
|
||||
resource: "%kernel.project_dir%/app/config/routing.yml"
|
||||
strict_requirements: ~
|
||||
@ -20,7 +22,7 @@ framework:
|
||||
csrf_protection: ~
|
||||
validation:
|
||||
enable_annotations: true
|
||||
default_locale: "%env(LOCALE)%"
|
||||
default_locale: "%locale%"
|
||||
trusted_hosts: ~
|
||||
session:
|
||||
# handler_id set to null will use default session handler from php.ini
|
||||
@ -30,10 +32,10 @@ framework:
|
||||
fragments: ~
|
||||
http_method_override: true
|
||||
assets:
|
||||
base_url: '%env(DOMAIN_NAME)%'
|
||||
base_url: '%domain_name%'
|
||||
json_manifest_path: '%kernel.project_dir%/web/build/manifest.json'
|
||||
mailer:
|
||||
dsn: "%env(MAILER_DSN)%"
|
||||
dsn: "%mailer_dsn%"
|
||||
http_client:
|
||||
scoped_clients:
|
||||
download_images.client:
|
||||
@ -58,8 +60,7 @@ twig:
|
||||
form_themes:
|
||||
- "@SpiriitFormFilter/Form/form_div_layout.html.twig"
|
||||
globals:
|
||||
wallabag_url: '%env(DOMAIN_NAME)%'
|
||||
registration_enabled: '%env(bool:FOSUSER_REGISTRATION)%'
|
||||
registration_enabled: '%fosuser_registration%'
|
||||
|
||||
# Doctrine Configuration
|
||||
doctrine:
|
||||
@ -82,7 +83,7 @@ doctrine:
|
||||
alias: Wallabag
|
||||
|
||||
stof_doctrine_extensions:
|
||||
default_locale: "%env(LOCALE)%"
|
||||
default_locale: "%locale%"
|
||||
translation_fallback: true
|
||||
orm:
|
||||
default:
|
||||
@ -190,9 +191,9 @@ fos_user:
|
||||
user_class: Wallabag\Entity\User
|
||||
registration:
|
||||
confirmation:
|
||||
enabled: "%env(bool:FOSUSER_CONFIRMATION)%"
|
||||
enabled: "%fosuser_confirmation%"
|
||||
from_email:
|
||||
address: "%env(FROM_EMAIL)%"
|
||||
address: "%from_email%"
|
||||
sender_name: wallabag
|
||||
service:
|
||||
mailer: Wallabag\Mailer\UserMailer
|
||||
@ -206,8 +207,8 @@ fos_oauth_server:
|
||||
service:
|
||||
user_provider: fos_user.user_provider.username_email
|
||||
options:
|
||||
refresh_token_lifetime: "%env(FOS_OAUTH_SERVER_REFRESH_TOKEN_LIFETIME)%"
|
||||
access_token_lifetime: "%env(FOS_OAUTH_SERVER_ACCESS_TOKEN_LIFETIME)%"
|
||||
refresh_token_lifetime: "%fos_oauth_server_refresh_token_lifetime%"
|
||||
access_token_lifetime: "%fos_oauth_server_access_token_lifetime%"
|
||||
|
||||
scheb_two_factor:
|
||||
trusted_device:
|
||||
@ -220,12 +221,12 @@ scheb_two_factor:
|
||||
|
||||
google:
|
||||
enabled: true
|
||||
issuer: "%env(SERVER_NAME)%"
|
||||
issuer: "%server_name%"
|
||||
template: "Authentication/form.html.twig"
|
||||
|
||||
email:
|
||||
enabled: true
|
||||
sender_email: "%env(TWOFACTOR_SENDER)%"
|
||||
sender_email: "%twofactor_sender%"
|
||||
digits: 6
|
||||
template: "Authentication/form.html.twig"
|
||||
mailer: Wallabag\Mailer\AuthCodeMailer
|
||||
@ -237,10 +238,10 @@ rulerz:
|
||||
old_sound_rabbit_mq:
|
||||
connections:
|
||||
default:
|
||||
host: "%env(RABBITMQ_HOST)%"
|
||||
port: "%env(int:RABBITMQ_PORT)%"
|
||||
user: "%env(RABBITMQ_USER)%"
|
||||
password: "%env(RABBITMQ_PASSWORD)%"
|
||||
host: "%rabbitmq_host%"
|
||||
port: "%rabbitmq_port%"
|
||||
user: "%rabbitmq_user%"
|
||||
password: "%rabbitmq_password%"
|
||||
vhost: /
|
||||
lazy: true
|
||||
producers:
|
||||
@ -318,7 +319,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
callback: wallabag.consumer.amqp.pocket
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_readability:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -327,7 +328,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.readability'
|
||||
callback: wallabag.consumer.amqp.readability
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_instapaper:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -336,7 +337,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
callback: wallabag.consumer.amqp.instapaper
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_pinboard:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -345,7 +346,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.pinboard'
|
||||
callback: wallabag.consumer.amqp.pinboard
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_delicious:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -354,7 +355,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.delicious'
|
||||
callback: wallabag.consumer.amqp.delicious
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_wallabag_v1:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -363,7 +364,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
callback: wallabag.consumer.amqp.wallabag_v1
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_wallabag_v2:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -372,7 +373,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
callback: wallabag.consumer.amqp.wallabag_v2
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_elcurator:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -381,7 +382,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.elcurator'
|
||||
callback: wallabag.consumer.amqp.elcurator
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_omnivore:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -390,7 +391,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.omnivore'
|
||||
callback: wallabag.consumer.amqp.omnivore
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_firefox:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -399,7 +400,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
callback: wallabag.consumer.amqp.firefox
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_chrome:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -408,7 +409,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
callback: wallabag.consumer.amqp.chrome
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_shaarli:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -417,7 +418,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.shaarli'
|
||||
callback: wallabag.consumer.amqp.shaarli
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_pocket_html:
|
||||
connection: default
|
||||
exchange_options:
|
||||
@ -426,7 +427,7 @@ old_sound_rabbit_mq:
|
||||
queue_options:
|
||||
name: 'wallabag.import.pocket_html'
|
||||
callback: wallabag.consumer.amqp.pocket_html
|
||||
qos_options: {prefetch_count: "%env(int:RABBITMQ_PREFETCH_COUNT)%"}
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
|
||||
fos_js_routing:
|
||||
routes_to_expose:
|
||||
|
||||
@ -21,4 +21,4 @@ monolog:
|
||||
type: console
|
||||
|
||||
sentry:
|
||||
dsn: "%env(SENTRY_DSN)%"
|
||||
dsn: "%sentry_dsn%"
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
imports:
|
||||
- { resource: config_dev.yml }
|
||||
- { resource: parameters_test.yml }
|
||||
- { resource: services_test.yml }
|
||||
|
||||
parameters:
|
||||
fosuser_registration: '%env(FOSUSER_REGISTRATION)%'
|
||||
database_url: '%env(resolve:DATABASE_URL)%'
|
||||
domain_name: '%env(DOMAIN_NAME)%'
|
||||
fosuser_registration: true
|
||||
wallabag_dbname_suffix: '_test'
|
||||
|
||||
framework:
|
||||
test: ~
|
||||
@ -24,6 +24,7 @@ web_profiler:
|
||||
|
||||
doctrine:
|
||||
dbal:
|
||||
dbname_suffix: '%wallabag_dbname_suffix%' # for MySQL and PostgreSQL
|
||||
use_savepoints: true
|
||||
|
||||
orm:
|
||||
|
||||
67
app/config/parameters.yml.dist
Normal file
67
app/config/parameters.yml.dist
Normal file
@ -0,0 +1,67 @@
|
||||
# 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
|
||||
#
|
||||
# database_driver: %env.database_driver%
|
||||
# database_host: %env.database_host%
|
||||
# database_port: %env.database_port%
|
||||
# database_name: %env.database_name%
|
||||
# database_user: %env.database_user%
|
||||
# database_password: %env.database_password%
|
||||
|
||||
database_driver: pdo_mysql
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: wallabag
|
||||
database_user: root
|
||||
database_password: ~
|
||||
# For SQLite, database_path should be "%kernel.project_dir%/data/db/wallabag.sqlite"
|
||||
database_path: null
|
||||
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"
|
||||
|
||||
mailer_dsn: smtp://127.0.0.1
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: CHANGE_ME_TO_SOMETHING_SECRET_AND_RANDOM
|
||||
|
||||
# two factor stuff
|
||||
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
|
||||
|
||||
rss_limit: 50
|
||||
|
||||
# RabbitMQ processing
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
rabbitmq_prefetch_count: 10
|
||||
|
||||
# Redis processing
|
||||
redis_scheme: tcp
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
redis_path: null
|
||||
redis_password: null
|
||||
|
||||
# sentry logging
|
||||
sentry_dsn: ~
|
||||
2
app/config/parameters_test.yml
Normal file
2
app/config/parameters_test.yml
Normal file
@ -0,0 +1,2 @@
|
||||
parameters:
|
||||
database_path: "%kernel.project_dir%/data/db/wallabag%wallabag_dbname_suffix%.sqlite"
|
||||
@ -45,7 +45,7 @@ security:
|
||||
|
||||
anonymous: true
|
||||
remember_me:
|
||||
secret: "%env(SECRET)%"
|
||||
secret: "%secret%"
|
||||
lifetime: 31536000
|
||||
path: /
|
||||
domain: ~
|
||||
|
||||
@ -15,15 +15,15 @@ services:
|
||||
$projectDir: '%kernel.project_dir%'
|
||||
$debug: '%kernel.debug%'
|
||||
$defaultLocale: '%kernel.default_locale%'
|
||||
$wallabagUrl: '%env(DOMAIN_NAME)%'
|
||||
$tablePrefix: "%env(DATABASE_TABLE_PREFIX)%"
|
||||
$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: '%env(bool:FOSUSER_REGISTRATION)%'
|
||||
$registrationEnabled: '%fosuser_registration%'
|
||||
$restrictedAccess: '@=service(''craue_config'').get(''restricted_access'')'
|
||||
$senderEmail: "%scheb_two_factor.email.sender_email%"
|
||||
$senderName: "%scheb_two_factor.email.sender_name%"
|
||||
@ -187,7 +187,7 @@ services:
|
||||
|
||||
Wallabag\Event\Subscriber\SchemaAdapterSubscriber:
|
||||
arguments:
|
||||
$databaseTablePrefix: "%env(DATABASE_TABLE_PREFIX)%"
|
||||
$databaseTablePrefix: "%database_table_prefix%"
|
||||
tags:
|
||||
- { name: doctrine.event_subscriber }
|
||||
|
||||
@ -249,11 +249,11 @@ services:
|
||||
Predis\Client:
|
||||
arguments:
|
||||
$parameters:
|
||||
scheme: '%env(REDIS_SCHEME)%'
|
||||
host: '%env(REDIS_HOST)%'
|
||||
port: '%env(int:REDIS_PORT)%'
|
||||
path: '%env(REDIS_PATH)%'
|
||||
password: '%env(REDIS_PASSWORD)%'
|
||||
scheme: '%redis_scheme%'
|
||||
host: '%redis_host%'
|
||||
port: '%redis_port%'
|
||||
path: '%redis_path%'
|
||||
password: '%redis_password%'
|
||||
|
||||
Wallabag\Event\Subscriber\SQLiteCascadeDeleteSubscriber:
|
||||
tags:
|
||||
@ -269,7 +269,7 @@ services:
|
||||
|
||||
Wallabag\Command\InstallCommand:
|
||||
arguments:
|
||||
$databaseUrl: '%env(DATABASE_URL)%'
|
||||
$databaseDriver: '%database_driver%'
|
||||
$defaultSettings: '%wallabag.default_internal_settings%'
|
||||
$defaultIgnoreOriginInstanceRules: '%wallabag.default_ignore_origin_instance_rules%'
|
||||
|
||||
|
||||
@ -1 +0,0 @@
|
||||
DATABASE_URL=mysql://root:root@127.0.0.1:3306/wallabag?charset=utf8mb4
|
||||
@ -1 +0,0 @@
|
||||
DATABASE_URL=postgres://wallabag:wallabagrocks@localhost/wallabag?charset=utf8
|
||||
@ -1 +0,0 @@
|
||||
DATABASE_URL=sqlite:///%kernel.project_dir%/data/db/wallabag.sqlite?charset=utf8
|
||||
2
app/config/tests/parameters_test.mysql.yml
Normal file
2
app/config/tests/parameters_test.mysql.yml
Normal file
@ -0,0 +1,2 @@
|
||||
parameters:
|
||||
env(DATABASE_URL): mysql://root:root@127.0.0.1:3306/wallabag?charset=utf8mb4
|
||||
2
app/config/tests/parameters_test.pgsql.yml
Normal file
2
app/config/tests/parameters_test.pgsql.yml
Normal file
@ -0,0 +1,2 @@
|
||||
parameters:
|
||||
env(DATABASE_URL): postgres://wallabag:wallabagrocks@localhost/wallabag?charset=utf8
|
||||
2
app/config/tests/parameters_test.sqlite.yml
Normal file
2
app/config/tests/parameters_test.sqlite.yml
Normal file
@ -0,0 +1,2 @@
|
||||
parameters:
|
||||
env(DATABASE_URL): sqlite:///%kernel.project_dir%/data/db/wallabag%wallabag_dbname_suffix%.sqlite?charset=utf8
|
||||
@ -25,7 +25,7 @@ parameters:
|
||||
el: 'Ελληνικά'
|
||||
gl: 'Galego'
|
||||
wallabag.items_on_page: 12
|
||||
wallabag.language: '%env(LOCALE)%'
|
||||
wallabag.language: '%locale%'
|
||||
wallabag.feed_limit: 50
|
||||
wallabag.reading_speed: 200
|
||||
wallabag.cache_lifetime: 10
|
||||
|
||||
@ -279,6 +279,14 @@ $(document).ready(() => {
|
||||
$('.collapsible[data-collapsible="expandable"]').collapsible({
|
||||
accordion: false,
|
||||
});
|
||||
$('.datepicker').datepicker({
|
||||
selectMonths: true,
|
||||
selectYears: 15,
|
||||
formatSubmit: 'yyyy-mm-dd',
|
||||
hiddenName: false,
|
||||
format: 'yyyy-mm-dd',
|
||||
container: 'body',
|
||||
});
|
||||
|
||||
$('.dropdown-trigger').dropdown({ hover: false });
|
||||
$('.dropdown-trigger[data-covertrigger="false"][data-constrainwidth="false"]').dropdown({
|
||||
|
||||
37
bin/console
37
bin/console
@ -3,40 +3,25 @@
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Console\Application;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
use Symfony\Component\ErrorHandler\Debug;
|
||||
|
||||
if (!in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) {
|
||||
echo 'Warning: The console should be invoked via the CLI version of PHP, not the '.PHP_SAPI.' SAPI'.PHP_EOL;
|
||||
}
|
||||
// if you don't want to setup permissions the proper way, just uncomment the following PHP line
|
||||
// read https://symfony.com/doc/current/setup.html#checking-symfony-application-configuration-and-setup
|
||||
// for more information
|
||||
//umask(0000);
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
require dirname(__DIR__).'/vendor/autoload.php';
|
||||
|
||||
if (!class_exists(Application::class) || !class_exists(Dotenv::class)) {
|
||||
throw new LogicException('You need to add "symfony/framework-bundle" and "symfony/dotenv" as Composer dependencies.');
|
||||
}
|
||||
require __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
$input = new ArgvInput();
|
||||
if (null !== $env = $input->getParameterOption(['--env', '-e'], null, true)) {
|
||||
putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env);
|
||||
$env = $input->getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev', true);
|
||||
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption('--no-debug', true) && $env !== 'prod';
|
||||
|
||||
if ($debug) {
|
||||
Debug::enable();
|
||||
}
|
||||
|
||||
if ($input->hasParameterOption('--no-debug', true)) {
|
||||
putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0');
|
||||
}
|
||||
|
||||
(new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
|
||||
|
||||
if ($_SERVER['APP_DEBUG']) {
|
||||
umask(0000);
|
||||
|
||||
if (class_exists(Debug::class)) {
|
||||
Debug::enable();
|
||||
}
|
||||
}
|
||||
|
||||
$kernel = new AppKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
|
||||
$kernel = new AppKernel($env, $debug);
|
||||
$application = new Application($kernel);
|
||||
$application->run($input);
|
||||
|
||||
@ -21,6 +21,7 @@ $config
|
||||
'ergebnis/composer-normalize',
|
||||
'friendsofphp/php-cs-fixer',
|
||||
'friendsoftwig/twigcs',
|
||||
'incenteev/composer-parameter-handler',
|
||||
'j0k3r/graby-site-config',
|
||||
'laminas/laminas-code',
|
||||
'lcobucci/jwt',
|
||||
|
||||
@ -77,6 +77,7 @@
|
||||
"friendsofsymfony/user-bundle": "^3.2.1",
|
||||
"guzzlehttp/psr7": "^2.6.2",
|
||||
"html2text/html2text": "^4.3.1",
|
||||
"incenteev/composer-parameter-handler": "^2.2",
|
||||
"j0k3r/graby": "^2.4.5",
|
||||
"j0k3r/graby-site-config": "^1.0",
|
||||
"javibravo/simpleue": "^2.1",
|
||||
@ -121,7 +122,6 @@
|
||||
"symfony/dependency-injection": "^5.4.35",
|
||||
"symfony/doctrine-bridge": "^5.4.35",
|
||||
"symfony/dom-crawler": "^5.4.35",
|
||||
"symfony/dotenv": "^5.4.35",
|
||||
"symfony/error-handler": "^5.4.35",
|
||||
"symfony/event-dispatcher": "^5.4.35",
|
||||
"symfony/event-dispatcher-contracts": "^2.5.2",
|
||||
@ -222,6 +222,9 @@
|
||||
"sort-packages": true
|
||||
},
|
||||
"extra": {
|
||||
"incenteev-parameters": {
|
||||
"file": "app/config/parameters.yml"
|
||||
},
|
||||
"public-dir": "web",
|
||||
"symfony": {
|
||||
"allow-contrib": true,
|
||||
@ -236,6 +239,7 @@
|
||||
"@post-cmd"
|
||||
],
|
||||
"post-cmd": [
|
||||
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
|
||||
"bin/console cache:clear --no-warmup",
|
||||
"bin/console assets:install web --symlink --relative"
|
||||
]
|
||||
|
||||
175
composer.lock
generated
175
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "14496bc12cd56950bd548fb244a8c769",
|
||||
"content-hash": "a85056bec7fa90b9be4aa16c34464c0e",
|
||||
"packages": [
|
||||
{
|
||||
"name": "babdev/pagerfanta-bundle",
|
||||
@ -4159,6 +4159,63 @@
|
||||
},
|
||||
"time": "2021-07-21T13:50:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "incenteev/composer-parameter-handler",
|
||||
"version": "v2.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Incenteev/ParameterHandler.git",
|
||||
"reference": "90bffce926e96b365579a2ef024aab457f4b80c5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/90bffce926e96b365579a2ef024aab457f4b80c5",
|
||||
"reference": "90bffce926e96b365579a2ef024aab457f4b80c5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.4",
|
||||
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer": "^2.0@dev",
|
||||
"phpspec/prophecy-phpunit": "^2.1",
|
||||
"phpunit/phpunit": "^9.6",
|
||||
"symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
|
||||
"symfony/phpunit-bridge": "^6.4.1 || ^7.0.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Incenteev\\ParameterHandler\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Christophe Coevoet",
|
||||
"email": "stof@notk.org"
|
||||
}
|
||||
],
|
||||
"description": "Composer script handling your ignored parameter file",
|
||||
"homepage": "https://github.com/Incenteev/ParameterHandler",
|
||||
"keywords": [
|
||||
"parameters management"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/Incenteev/ParameterHandler/issues",
|
||||
"source": "https://github.com/Incenteev/ParameterHandler/tree/v2.2.0"
|
||||
},
|
||||
"time": "2023-12-09T10:31:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "j0k3r/graby",
|
||||
"version": "2.4.5",
|
||||
@ -5980,16 +6037,16 @@
|
||||
},
|
||||
{
|
||||
"name": "php-amqplib/php-amqplib",
|
||||
"version": "v3.7.3",
|
||||
"version": "v3.7.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-amqplib/php-amqplib.git",
|
||||
"reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59"
|
||||
"reference": "738a73eb0019b6c99d9bc25d7a0c0dd8f56a5199"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/9f50fe69a9f1a19e2cb25596a354d705de36fe59",
|
||||
"reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59",
|
||||
"url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/738a73eb0019b6c99d9bc25d7a0c0dd8f56a5199",
|
||||
"reference": "738a73eb0019b6c99d9bc25d7a0c0dd8f56a5199",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -6055,9 +6112,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/php-amqplib/php-amqplib/issues",
|
||||
"source": "https://github.com/php-amqplib/php-amqplib/tree/v3.7.3"
|
||||
"source": "https://github.com/php-amqplib/php-amqplib/tree/v3.7.2"
|
||||
},
|
||||
"time": "2025-02-18T20:11:13+00:00"
|
||||
"time": "2024-11-21T09:21:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-amqplib/rabbitmq-bundle",
|
||||
@ -9512,77 +9569,6 @@
|
||||
],
|
||||
"time": "2024-10-22T13:05:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dotenv",
|
||||
"version": "v5.4.48",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dotenv.git",
|
||||
"reference": "08013403089c8a126c968179179b817a552841ab"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dotenv/zipball/08013403089c8a126c968179179b817a552841ab",
|
||||
"reference": "08013403089c8a126c968179179b817a552841ab",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/deprecation-contracts": "^2.1|^3"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/console": "^4.4|^5.0|^6.0",
|
||||
"symfony/process": "^4.4|^5.0|^6.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Dotenv\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Registers environment variables from a .env file",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"dotenv",
|
||||
"env",
|
||||
"environment"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/dotenv/tree/v5.4.48"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-11-27T09:33:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/error-handler",
|
||||
"version": "v5.4.46",
|
||||
@ -16311,16 +16297,16 @@
|
||||
},
|
||||
{
|
||||
"name": "friendsofphp/php-cs-fixer",
|
||||
"version": "v3.69.1",
|
||||
"version": "v3.69.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
||||
"reference": "13b0c0eede38c11cd674b080f2b485d0f14ffa9f"
|
||||
"reference": "630a59448c00729bc235d5e95cfedefeaca37523"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/13b0c0eede38c11cd674b080f2b485d0f14ffa9f",
|
||||
"reference": "13b0c0eede38c11cd674b080f2b485d0f14ffa9f",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/630a59448c00729bc235d5e95cfedefeaca37523",
|
||||
"reference": "630a59448c00729bc235d5e95cfedefeaca37523",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -16402,7 +16388,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.69.1"
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.69.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -16410,7 +16396,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-02-18T23:57:43+00:00"
|
||||
"time": "2025-02-14T16:19:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "friendsoftwig/twigcs",
|
||||
@ -18092,24 +18078,23 @@
|
||||
},
|
||||
{
|
||||
"name": "react/promise",
|
||||
"version": "v3.2.0",
|
||||
"version": "v2.11.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/reactphp/promise.git",
|
||||
"reference": "8a164643313c71354582dc850b42b33fa12a4b63"
|
||||
"reference": "1a8460931ea36dc5c76838fec5734d55c88c6831"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63",
|
||||
"reference": "8a164643313c71354582dc850b42b33fa12a4b63",
|
||||
"url": "https://api.github.com/repos/reactphp/promise/zipball/1a8460931ea36dc5c76838fec5734d55c88c6831",
|
||||
"reference": "1a8460931ea36dc5c76838fec5734d55c88c6831",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1.0"
|
||||
"php": ">=5.4.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "1.10.39 || 1.4.10",
|
||||
"phpunit/phpunit": "^9.6 || ^7.5"
|
||||
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@ -18153,7 +18138,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/reactphp/promise/issues",
|
||||
"source": "https://github.com/reactphp/promise/tree/v3.2.0"
|
||||
"source": "https://github.com/reactphp/promise/tree/v2.11.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -18161,7 +18146,7 @@
|
||||
"type": "open_collective"
|
||||
}
|
||||
],
|
||||
"time": "2024-05-24T10:39:05+00:00"
|
||||
"time": "2023-11-16T16:16:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "react/socket",
|
||||
@ -19965,9 +19950,9 @@
|
||||
"ext-tokenizer": "*",
|
||||
"ext-xml": "*"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"platform-dev": {},
|
||||
"platform-overrides": {
|
||||
"php": "7.4.29"
|
||||
},
|
||||
"plugin-api-version": "2.3.0"
|
||||
"plugin-api-version": "2.6.0"
|
||||
}
|
||||
|
||||
@ -1,2 +1,9 @@
|
||||
MYSQL_ROOT_PASSWORD=wallaroot
|
||||
MYSQL_DATABASE=wallabag
|
||||
DATABASE_DRIVER=pdo_mysql
|
||||
DATABASE_HOST=mariadb
|
||||
DATABASE_PORT=3306
|
||||
DATABASE_NAME=wallabag
|
||||
DATABASE_USER=root
|
||||
DATABASE_PASSWORD=wallaroot
|
||||
DATABASE_CHARSET=utf8mb4
|
||||
|
||||
52
docker/php/config/parameters.yml
Normal file
52
docker/php/config/parameters.yml
Normal file
@ -0,0 +1,52 @@
|
||||
parameters:
|
||||
database_driver: ${DATABASE_DRIVER:-pdo_sqlite}
|
||||
database_host: ${DATABASE_HOST:-127.0.0.1}
|
||||
database_port: ${DATABASE_PORT:-~}
|
||||
database_name: ${DATABASE_NAME:-symfony}
|
||||
database_user: ${DATABASE_USER:-root}
|
||||
database_password: ${DATABASE_PASSWORD:-~}
|
||||
database_path: ${DATABASE_PATH:-"%kernel.project_dir%/data/db/wallabag.sqlite"}
|
||||
database_table_prefix: ${DATABASE_TABLE_PREFIX:-wallabag_}
|
||||
database_socket: null
|
||||
database_charset: ${DATABASE_CHARSET:-utf8}
|
||||
|
||||
domain_name: ${DOMAIN_NAME:-https://www.example.com}
|
||||
server_name: ${SERVER_NAME:-"Your wallabag instance"}
|
||||
|
||||
mailer_dsn: ${MAILER_DSN:-"smtp://127.0.0.1"}
|
||||
|
||||
locale: ${LOCALE:-en}
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ${SECRET:-~}
|
||||
|
||||
# two factor stuff
|
||||
twofactor_sender: ${TWOFACTOR_SENDER:-no-reply@wallabag.org}
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_registration: ${FOSUSER_REGISTRATION:-false}
|
||||
fosuser_confirmation: ${FOSUSER_CONFIRMATION:-true}
|
||||
|
||||
fos_oauth_server_access_token_lifetime: 3600
|
||||
fos_oauth_server_refresh_token_lifetime: 1209600
|
||||
|
||||
from_email: ${FROM_EMAIL:-wallabag@example.com}
|
||||
|
||||
rss_limit: 50
|
||||
|
||||
# RabbitMQ processing
|
||||
rabbitmq_host: ${RABBITMQ_HOST:-rabbitmq}
|
||||
rabbitmq_port: ${RABBITMQ_PORT:-5672}
|
||||
rabbitmq_user: ${RABBITMQ_USER:-guest}
|
||||
rabbitmq_password: ${RABBITMQ_PASSWORD:-guest}
|
||||
rabbitmq_prefetch_count: 10
|
||||
|
||||
# Redis processing
|
||||
redis_scheme: ${REDIS_SCHEME:-tcp}
|
||||
redis_host: ${REDIS_HOST:-redis}
|
||||
redis_port: ${REDIS_PORT:-6379}
|
||||
redis_path: ${REDIS_PATH:-~}
|
||||
redis_password: ${REDIS_PASSWORD:-~}
|
||||
|
||||
# Sentry
|
||||
sentry_dsn: ${SENTRY_DSN:-~}
|
||||
@ -1,5 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
envsubst < /opt/wallabag/config/wallabag-php.ini > /usr/local/etc/php/conf.d/wallabag-php.ini
|
||||
envsubst < /opt/wallabag/config/parameters.yml > /var/www/html/app/config/parameters.yml
|
||||
|
||||
exec "$@"
|
||||
|
||||
@ -1,3 +1,12 @@
|
||||
DATABASE_DRIVER=pdo_sqlite
|
||||
DATABASE_HOST=127.0.0.1
|
||||
DATABASE_PORT=~
|
||||
DATABASE_NAME=symfony
|
||||
DATABASE_USER=root
|
||||
DATABASE_PASSWORD=~
|
||||
DATABASE_PATH='"%kernel.project_dir%/data/db/wallabag.sqlite"'
|
||||
DOMAIN_NAME=http://localhost:8000
|
||||
SECRET=ch4n63m31fy0uc4n
|
||||
PHP_SESSION_SAVE_PATH=tcp://redis:6379?database=2
|
||||
PHP_SESSION_HANDLER=redis
|
||||
TRUSTED_PROXIES=0.0.0.0/0
|
||||
|
||||
@ -1,3 +1,10 @@
|
||||
POSTGRES_USER=wallabag
|
||||
POSTGRES_PASSWORD=wallapass
|
||||
POSTGRES_DB=wallabag
|
||||
DATABASE_HOST=postgres
|
||||
DATABASE_PORT=5432
|
||||
DATABASE_NAME=wallabag
|
||||
DATABASE_USER=wallabag
|
||||
DATABASE_PASSWORD=wallapass
|
||||
DATABASE_DRIVER=pdo_pgsql
|
||||
DATABASE_PATH=null
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
"@babel/core": "^7.26.9",
|
||||
"@babel/eslint-parser": "^7.26.8",
|
||||
"@babel/preset-env": "^7.26.9",
|
||||
"@symfony/webpack-encore": "^5.1.0",
|
||||
"@symfony/webpack-encore": "^5.0.1",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"babel-loader": "^9.2.1",
|
||||
"core-js": "^3.23.0",
|
||||
@ -56,7 +56,7 @@
|
||||
"file-loader": "^6.2.0",
|
||||
"lato-font": "^3.0.0",
|
||||
"mini-css-extract-plugin": "^2.9.2",
|
||||
"postcss": "^8.5.3",
|
||||
"postcss": "^8.5.2",
|
||||
"postcss-loader": "^8.1.1",
|
||||
"postcss-scss": "^4.0.9",
|
||||
"regenerator-runtime": "^0.14.1",
|
||||
|
||||
@ -6,8 +6,6 @@ parameters:
|
||||
paths:
|
||||
- src
|
||||
- tests
|
||||
bootstrapFiles:
|
||||
- tests/phpstan-bootstrap.php
|
||||
|
||||
symfony:
|
||||
container_xml_path: %rootDir%/../../../var/cache/dev/AppKernelDevDebugContainer.xml
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
<php>
|
||||
<ini name="error_reporting" value="-1"/>
|
||||
<server name="KERNEL_CLASS" value="AppKernel"/>
|
||||
<server name="APP_ENV" value="test" force="true"/>
|
||||
<server name="APP_ENV" value="test"/>
|
||||
<server name="APP_DEBUG" value="0"/>
|
||||
<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak"/>
|
||||
</php>
|
||||
|
||||
@ -7,7 +7,6 @@ use Doctrine\DBAL\Exception\DriverException;
|
||||
use Doctrine\DBAL\Platforms\MySQLPlatform;
|
||||
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
|
||||
use Doctrine\DBAL\Platforms\SqlitePlatform;
|
||||
use Doctrine\DBAL\Tools\DsnParser;
|
||||
use Doctrine\Migrations\Metadata\Storage\TableMetadataStorageConfiguration;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use FOS\UserBundle\Event\UserEvent;
|
||||
@ -42,17 +41,17 @@ class InstallCommand extends Command
|
||||
private EventDispatcherInterface $dispatcher;
|
||||
private UserManagerInterface $userManager;
|
||||
private TableMetadataStorageConfiguration $tableMetadataStorageConfiguration;
|
||||
private string $databaseUrl;
|
||||
private string $databaseDriver;
|
||||
private array $defaultSettings;
|
||||
private array $defaultIgnoreOriginInstanceRules;
|
||||
|
||||
public function __construct(EntityManagerInterface $entityManager, EventDispatcherInterface $dispatcher, UserManagerInterface $userManager, TableMetadataStorageConfiguration $tableMetadataStorageConfiguration, string $databaseUrl, array $defaultSettings, array $defaultIgnoreOriginInstanceRules)
|
||||
public function __construct(EntityManagerInterface $entityManager, EventDispatcherInterface $dispatcher, UserManagerInterface $userManager, TableMetadataStorageConfiguration $tableMetadataStorageConfiguration, string $databaseDriver, array $defaultSettings, array $defaultIgnoreOriginInstanceRules)
|
||||
{
|
||||
$this->entityManager = $entityManager;
|
||||
$this->dispatcher = $dispatcher;
|
||||
$this->userManager = $userManager;
|
||||
$this->tableMetadataStorageConfiguration = $tableMetadataStorageConfiguration;
|
||||
$this->databaseUrl = $databaseUrl;
|
||||
$this->databaseDriver = $databaseDriver;
|
||||
$this->defaultSettings = $defaultSettings;
|
||||
$this->defaultIgnoreOriginInstanceRules = $defaultIgnoreOriginInstanceRules;
|
||||
|
||||
@ -104,24 +103,13 @@ class InstallCommand extends Command
|
||||
$status = '<info>OK!</info>';
|
||||
$help = '';
|
||||
|
||||
/** @see \Doctrine\DBAL\DriverManager::$driverSchemeAliases */
|
||||
$params = (new DsnParser([
|
||||
'mysql' => 'pdo_mysql',
|
||||
'mysql2' => 'pdo_mysql', // Amazon RDS, for some weird reason
|
||||
'postgres' => 'pdo_pgsql',
|
||||
'postgresql' => 'pdo_pgsql',
|
||||
'pgsql' => 'pdo_pgsql',
|
||||
'sqlite' => 'pdo_sqlite',
|
||||
'sqlite3' => 'pdo_sqlite',
|
||||
]))->parse($this->databaseUrl);
|
||||
|
||||
if (!\extension_loaded($params['driver'])) {
|
||||
if (!\extension_loaded($this->databaseDriver)) {
|
||||
$fulfilled = false;
|
||||
$status = '<error>ERROR!</error>';
|
||||
$help = 'Database driver "' . $params['driver'] . '" is not installed.';
|
||||
$help = 'Database driver "' . $this->databaseDriver . '" is not installed.';
|
||||
}
|
||||
|
||||
$rows[] = [\sprintf($label, $params['driver']), $status, $help];
|
||||
$rows[] = [\sprintf($label, $this->databaseDriver), $status, $help];
|
||||
|
||||
// testing if connection to the database can be established
|
||||
$label = '<comment>Database connection</comment>';
|
||||
|
||||
@ -103,6 +103,8 @@ class DeveloperController extends AbstractController
|
||||
*/
|
||||
public function howtoFirstAppAction()
|
||||
{
|
||||
return $this->render('Developer/howto_app.html.twig');
|
||||
return $this->render('Developer/howto_app.html.twig', [
|
||||
'wallabag_url' => $this->getParameter('domain_name'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,7 +104,7 @@ class UserRestController extends WallabagRestController
|
||||
*/
|
||||
public function putUserAction(Request $request, Config $craueConfig, UserManagerInterface $userManager, EntityManagerInterface $entityManager, EventDispatcherInterface $eventDispatcher)
|
||||
{
|
||||
if (!$this->registrationEnabled || !$craueConfig->get('api_user_registration')) {
|
||||
if (!$this->getParameter('fosuser_registration') || !$craueConfig->get('api_user_registration')) {
|
||||
$json = $this->serializer->serialize(['error' => "Server doesn't allow registrations"], 'json');
|
||||
|
||||
return (new JsonResponse())
|
||||
|
||||
@ -26,16 +26,14 @@ class WallabagRestController extends AbstractFOSRestController
|
||||
protected AuthorizationCheckerInterface $authorizationChecker;
|
||||
protected TokenStorageInterface $tokenStorage;
|
||||
protected TranslatorInterface $translator;
|
||||
protected bool $registrationEnabled;
|
||||
|
||||
public function __construct(EntityManagerInterface $entityManager, SerializerInterface $serializer, AuthorizationCheckerInterface $authorizationChecker, TokenStorageInterface $tokenStorage, TranslatorInterface $translator, bool $registrationEnabled)
|
||||
public function __construct(EntityManagerInterface $entityManager, SerializerInterface $serializer, AuthorizationCheckerInterface $authorizationChecker, TokenStorageInterface $tokenStorage, TranslatorInterface $translator)
|
||||
{
|
||||
$this->entityManager = $entityManager;
|
||||
$this->serializer = $serializer;
|
||||
$this->authorizationChecker = $authorizationChecker;
|
||||
$this->tokenStorage = $tokenStorage;
|
||||
$this->translator = $translator;
|
||||
$this->registrationEnabled = $registrationEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -88,7 +86,7 @@ class WallabagRestController extends AbstractFOSRestController
|
||||
{
|
||||
$info = new ApplicationInfo(
|
||||
$this->getParameter('wallabag.version'),
|
||||
$this->registrationEnabled && $craueConfig->get('api_user_registration'),
|
||||
$this->getParameter('fosuser_registration') && $craueConfig->get('api_user_registration'),
|
||||
);
|
||||
|
||||
return (new JsonResponse())->setJson($this->serializer->serialize($info, 'json'));
|
||||
|
||||
@ -257,6 +257,7 @@ class ConfigController extends AbstractController
|
||||
'username' => $user->getUsername(),
|
||||
'token' => $config->getFeedToken(),
|
||||
],
|
||||
'wallabag_url' => $this->getParameter('domain_name'),
|
||||
'enabled_users' => $userRepository->getSumEnabledUsers(),
|
||||
]);
|
||||
}
|
||||
|
||||
@ -150,6 +150,7 @@ class FeedController extends AbstractController
|
||||
'url' => $url,
|
||||
'entries' => $entries,
|
||||
'user' => $user->getUsername(),
|
||||
'domainName' => $this->getParameter('domain_name'),
|
||||
'version' => $this->getParameter('wallabag.version'),
|
||||
'tag' => $tag->getSlug(),
|
||||
'updated' => $this->prepareFeedUpdatedDate($entries, $sort),
|
||||
@ -230,6 +231,7 @@ class FeedController extends AbstractController
|
||||
'url' => $url,
|
||||
'entries' => $entries,
|
||||
'user' => $user->getUsername(),
|
||||
'domainName' => $this->getParameter('domain_name'),
|
||||
'version' => $this->getParameter('wallabag.version'),
|
||||
'updated' => $this->prepareFeedUpdatedDate($entries),
|
||||
], new Response('', 200, ['Content-Type' => 'application/atom+xml']));
|
||||
|
||||
@ -50,18 +50,27 @@ class AuthCodeMailer implements AuthCodeMailerInterface
|
||||
*/
|
||||
private $supportUrl;
|
||||
|
||||
/**
|
||||
* Url for the wallabag instance (only used for image in the HTML email template).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $wallabagUrl;
|
||||
|
||||
/**
|
||||
* @param string $senderEmail
|
||||
* @param string $senderName
|
||||
* @param string $supportUrl wallabag support url
|
||||
* @param string $wallabagUrl wallabag instance url
|
||||
*/
|
||||
public function __construct(MailerInterface $mailer, Environment $twig, $senderEmail, $senderName, $supportUrl)
|
||||
public function __construct(MailerInterface $mailer, Environment $twig, $senderEmail, $senderName, $supportUrl, $wallabagUrl)
|
||||
{
|
||||
$this->mailer = $mailer;
|
||||
$this->twig = $twig;
|
||||
$this->senderEmail = $senderEmail;
|
||||
$this->senderName = $senderName;
|
||||
$this->supportUrl = $supportUrl;
|
||||
$this->wallabagUrl = $wallabagUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -76,6 +85,7 @@ class AuthCodeMailer implements AuthCodeMailerInterface
|
||||
'user' => $user->getName(),
|
||||
'code' => $user->getEmailAuthCode(),
|
||||
'support_url' => $this->supportUrl,
|
||||
'wallabag_url' => $this->wallabagUrl,
|
||||
]);
|
||||
$bodyText = $template->renderBlock('body_text', [
|
||||
'user' => $user->getName(),
|
||||
|
||||
@ -85,7 +85,6 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder
|
||||
'notLoggedInXpath' => $config->not_logged_in_xpath ?: null,
|
||||
'username' => $credentials['username'],
|
||||
'password' => $credentials['password'],
|
||||
'httpHeaders' => $config->http_header,
|
||||
];
|
||||
|
||||
$config = new SiteConfig($parameters);
|
||||
|
||||
@ -30,7 +30,7 @@ class LoginFormAuthenticator
|
||||
$siteConfig->getPasswordField() => $siteConfig->getPassword(),
|
||||
] + $this->getExtraFields($siteConfig);
|
||||
|
||||
$this->browser->request('POST', $siteConfig->getLoginUri(), $postFields, [], $this->getHttpHeaders($siteConfig));
|
||||
$this->browser->request('POST', $siteConfig->getLoginUri(), $postFields);
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -73,20 +73,6 @@ class LoginFormAuthenticator
|
||||
return \count($loggedIn) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes http_header(*) config, prepending HTTP_ string to the header's name.
|
||||
* See : https://github.com/symfony/browser-kit/blob/5.4/AbstractBrowser.php#L349.
|
||||
*/
|
||||
protected function getHttpHeaders(SiteConfig $siteConfig): array
|
||||
{
|
||||
$headers = [];
|
||||
foreach ($siteConfig->getHttpHeaders() as $headerName => $headerValue) {
|
||||
$headers["HTTP_$headerName"] = $headerValue;
|
||||
}
|
||||
|
||||
return $headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns extra fields from the configuration.
|
||||
* Evaluates any field value that is an expression language string.
|
||||
|
||||
@ -70,13 +70,6 @@ class SiteConfig
|
||||
*/
|
||||
protected $password;
|
||||
|
||||
/**
|
||||
* Associative array of HTTP headers to send with the form.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $httpHeaders = [];
|
||||
|
||||
/**
|
||||
* SiteConfig constructor. Sets the properties by name given a hash.
|
||||
*
|
||||
@ -267,16 +260,4 @@ class SiteConfig
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getHttpHeaders(): array
|
||||
{
|
||||
return $this->httpHeaders;
|
||||
}
|
||||
|
||||
public function setHttpHeaders(array $httpHeaders): self
|
||||
{
|
||||
$this->httpHeaders = $httpHeaders;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,10 +3,10 @@
|
||||
{% if type != 'tag' %}
|
||||
<title>wallabag — {{ type }} feed</title>
|
||||
<subtitle type="html">Atom feed for {{ type }} entries</subtitle>
|
||||
<id>wallabag:{{ wallabag_url|removeScheme|removeWww }}:{{ user }}:{{ type }}</id>
|
||||
<id>wallabag:{{ domainName|removeScheme|removeWww }}:{{ user }}:{{ type }}</id>
|
||||
<link rel="alternate" type="text/html" href="{{ url(type) }}"/>
|
||||
{% else %}
|
||||
<id>wallabag:{{ wallabag_url|removeScheme|removeWww }}:{{ user }}:{{ type }}:{{ tag }}</id>
|
||||
<id>wallabag:{{ domainName|removeScheme|removeWww }}:{{ user }}:{{ type }}:{{ tag }}</id>
|
||||
<link rel="alternate" type="text/html" href="{{ url('tag_entries', {'slug': tag}) }}"/>
|
||||
<title>wallabag — {{ type }} {{ tag }} feed</title>
|
||||
<subtitle type="html">Atom feed for entries tagged with {{ tag }}</subtitle>
|
||||
@ -34,7 +34,7 @@
|
||||
<link rel="alternate" href="{{ entry.url }}"/>
|
||||
<link rel="via" type="text/html"
|
||||
href="{{ url('view', {'id': entry.id}) }}"/>
|
||||
<id>wallabag:{{ wallabag_url|removeScheme|removeWww }}:{{ user }}:entry:{{ entry.id }}</id>
|
||||
<id>wallabag:{{ domainName|removeScheme|removeWww }}:{{ user }}:entry:{{ entry.id }}</id>
|
||||
<updated>{{ entry.updatedAt|date('c') }}</updated>
|
||||
<published>{{ entry.createdAt|date('c') }}</published>
|
||||
{% for tag in entry.tags %}
|
||||
|
||||
@ -100,6 +100,7 @@
|
||||
<tr><td>hoa/visitor</td><td>BSD-3-Clause</td></tr>
|
||||
<tr><td>hoa/zformat</td><td>BSD-3-Clause</td></tr>
|
||||
<tr><td>htmlawed/htmlawed</td><td>GPL-2.0+ or LGPL-3.0</td></tr>
|
||||
<tr><td>incenteev/composer-parameter-handler</td><td>MIT</td></tr>
|
||||
<tr><td>j0k3r/graby</td><td>MIT</td></tr>
|
||||
<tr><td>j0k3r/graby-site-config</td><td>Public domain</td></tr>
|
||||
<tr><td>j0k3r/php-readability</td><td>Apache-2.0</td></tr>
|
||||
|
||||
@ -19,8 +19,6 @@ use Wallabag\Command\InstallCommand;
|
||||
|
||||
class InstallCommandTest extends WallabagTestCase
|
||||
{
|
||||
private string $originalDatabaseUrl;
|
||||
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
// disable doctrine-test-bundle
|
||||
@ -40,28 +38,22 @@ class InstallCommandTest extends WallabagTestCase
|
||||
/** @var Connection $connection */
|
||||
$connection = $this->getTestClient()->getContainer()->get(ManagerRegistry::class)->getConnection();
|
||||
|
||||
$this->originalDatabaseUrl = $this->getTestClient()->getContainer()->getParameter('database_url');
|
||||
$tmpDatabaseName = 'wallabag_test_' . bin2hex(random_bytes(5));
|
||||
$originalDatabaseUrl = $this->getTestClient()->getContainer()->getParameter('env(DATABASE_URL)');
|
||||
$dbnameSuffix = $this->getTestClient()->getContainer()->getParameter('wallabag_dbname_suffix');
|
||||
$tmpDatabaseName = 'wallabag_' . bin2hex(random_bytes(5));
|
||||
|
||||
if ($connection->getDatabasePlatform() instanceof SqlitePlatform) {
|
||||
$tmpDatabaseName = $this->getTestClient()->getContainer()->getParameter('kernel.project_dir') . '/data/db/' . $tmpDatabaseName . '.sqlite';
|
||||
|
||||
/** @see \Doctrine\DBAL\Tools\DsnParser::parse */
|
||||
$url = preg_replace('#^((?:pdo-)?sqlite3?):///#', '$1://localhost/', $this->originalDatabaseUrl);
|
||||
|
||||
$tmpDatabaseUrl = (string) (new Uri($url))->withPath($tmpDatabaseName);
|
||||
|
||||
// Add back the leading "/" that was removed by withPath, and remove the "localhost" part
|
||||
$tmpDatabaseUrl = str_replace('//localhost', '///', $tmpDatabaseUrl);
|
||||
$tmpDatabaseUrl = str_replace('wallabag' . $dbnameSuffix . '.sqlite', $tmpDatabaseName . $dbnameSuffix . '.sqlite', $originalDatabaseUrl);
|
||||
} else {
|
||||
$tmpDatabaseUrl = (string) (new Uri($this->originalDatabaseUrl))->withPath($tmpDatabaseName);
|
||||
$tmpDatabaseUrl = (string) (new Uri($originalDatabaseUrl))->withPath($tmpDatabaseName);
|
||||
}
|
||||
|
||||
$_ENV['DATABASE_URL'] = $_SERVER['DATABASE_URL'] = $tmpDatabaseUrl;
|
||||
putenv("DATABASE_URL=$tmpDatabaseUrl");
|
||||
|
||||
if ($connection->getDatabasePlatform() instanceof PostgreSQLPlatform) {
|
||||
// PostgreSQL requires that the database exists before connecting to it
|
||||
$connection->executeQuery('CREATE DATABASE ' . $tmpDatabaseName);
|
||||
$tmpTestDatabaseName = $tmpDatabaseName . $dbnameSuffix;
|
||||
$connection->executeQuery('CREATE DATABASE ' . $tmpTestDatabaseName);
|
||||
}
|
||||
|
||||
// The environnement has been changed, recreate the client in order to update connection
|
||||
@ -70,18 +62,16 @@ class InstallCommandTest extends WallabagTestCase
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
$databaseUrl = $_SERVER['DATABASE_URL'];
|
||||
$databaseUrl = getenv('DATABASE_URL');
|
||||
|
||||
/** @var Connection $connection */
|
||||
$connection = $this->getTestClient()->getContainer()->get(ManagerRegistry::class)->getConnection();
|
||||
|
||||
if ($connection->getDatabasePlatform() instanceof SqlitePlatform) {// Remove the real environnement variable
|
||||
$_ENV['DATABASE_URL'] = $_SERVER['DATABASE_URL'] = $this->originalDatabaseUrl;
|
||||
if ($connection->getDatabasePlatform() instanceof SqlitePlatform) {
|
||||
// Remove the real environnement variable
|
||||
putenv('DATABASE_URL');
|
||||
|
||||
/** @see \Doctrine\DBAL\Tools\DsnParser::parse */
|
||||
$url = preg_replace('#^((?:pdo-)?sqlite3?):///#', '$1://localhost/', $databaseUrl);
|
||||
|
||||
$databasePath = parse_url($url, \PHP_URL_PATH);
|
||||
$databasePath = parse_url($databaseUrl, \PHP_URL_PATH);
|
||||
|
||||
if (file_exists($databasePath)) {
|
||||
unlink($databasePath);
|
||||
@ -90,7 +80,8 @@ class InstallCommandTest extends WallabagTestCase
|
||||
$testDatabaseName = $connection->getDatabase();
|
||||
$connection->close();
|
||||
|
||||
$_ENV['DATABASE_URL'] = $_SERVER['DATABASE_URL'] = $this->originalDatabaseUrl;
|
||||
// Remove the real environnement variable
|
||||
putenv('DATABASE_URL');
|
||||
|
||||
// Create a new client to avoid the error:
|
||||
// Transaction commit failed because the transaction has been marked for rollback only.
|
||||
|
||||
@ -41,6 +41,12 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
// create a new client instead of using $this->client to be sure client isn't authenticated
|
||||
$client = $this->createUnauthorizedClient();
|
||||
|
||||
if (!$client->getContainer()->getParameter('fosuser_registration')) {
|
||||
$this->markTestSkipped('fosuser_registration is not enabled.');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$client->getContainer()->get(Config::class)->set('api_user_registration', 1);
|
||||
|
||||
$client->request('GET', '/api/info');
|
||||
|
||||
@ -1561,7 +1561,7 @@ class EntryControllerTest extends WallabagTestCase
|
||||
{
|
||||
return [
|
||||
'ru' => [
|
||||
'https://ru.wikipedia.org/wiki/%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA',
|
||||
'https://ru.wikipedia.org/wiki/Открытое_программное_обеспечение',
|
||||
'ru',
|
||||
],
|
||||
'fr' => [
|
||||
@ -1569,23 +1569,23 @@ class EntryControllerTest extends WallabagTestCase
|
||||
'fr',
|
||||
],
|
||||
'de' => [
|
||||
'https://de.wikipedia.org/wiki/Deutsche_Sprache',
|
||||
'https://www.bild.de/politik/ausland/theresa-may/wahlbeben-grossbritannien-analyse-52108924.bild.html',
|
||||
'de',
|
||||
],
|
||||
'it' => [
|
||||
'https://it.wikipedia.org/wiki/Lingua_italiana',
|
||||
'https://www.ansa.it/sito/notizie/mondo/europa/2017/06/08/voto-gb-seggi-aperti-misure-sicurezza-rafforzate_0cb71f7f-e23b-4d5f-95ca-bc12296419f0.html',
|
||||
'it',
|
||||
],
|
||||
'zh' => [
|
||||
'https://zh.wikipedia.org/wiki/%E7%8F%BE%E4%BB%A3%E6%A8%99%E6%BA%96%E6%BC%A2%E8%AA%9E',
|
||||
'zh',
|
||||
'zh_CN' => [
|
||||
'http://tuijian.hao123.com/tuijian/?__noscript__-=1',
|
||||
'zh_CN',
|
||||
],
|
||||
'pt_BR' => [
|
||||
'https://www.monpetitbresil.com/pages/quem-somos',
|
||||
'https://esportes.r7.com/lance/futebol/victor-hugo-e-matheus-franca-devem-desfalcar-flamengo-no-carioca-22112022/',
|
||||
'pt_BR',
|
||||
],
|
||||
'es' => [
|
||||
'https://es.wikipedia.org/wiki/Idioma_espa%C3%B1ol',
|
||||
'es-ES' => [
|
||||
'https://elpais.com/internacional/2022-11-03/ultima-hora-de-la-guerra-entre-rusia-y-ucrania-hoy-en-directo.html',
|
||||
'es',
|
||||
],
|
||||
];
|
||||
|
||||
@ -85,6 +85,13 @@ class SecurityControllerTest extends WallabagTestCase
|
||||
public function testEnabledRegistration()
|
||||
{
|
||||
$client = $this->getTestClient();
|
||||
|
||||
if (!$client->getContainer()->getParameter('fosuser_registration')) {
|
||||
$this->markTestSkipped('fosuser_registration is not enabled.');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$client->followRedirects();
|
||||
$client->request('GET', '/register');
|
||||
$this->assertStringContainsString('registration.submit', $client->getResponse()->getContent());
|
||||
|
||||
@ -63,7 +63,8 @@ TWIG;
|
||||
$this->twig,
|
||||
'nobody@test.io',
|
||||
'wallabag test',
|
||||
'http://0.0.0.0/support'
|
||||
'http://0.0.0.0/support',
|
||||
'http://0.0.0.0/'
|
||||
);
|
||||
|
||||
$authCodeMailer->sendAuthCode($user);
|
||||
|
||||
@ -183,62 +183,4 @@ class LoginFormAuthenticatorTest extends TestCase
|
||||
|
||||
$this->assertTrue($loginRequired);
|
||||
}
|
||||
|
||||
public function testLoginPostWithUserAgentHeaderWithData()
|
||||
{
|
||||
$siteConfig = new SiteConfig([
|
||||
'host' => 'nextinpact.com',
|
||||
'loginUri' => 'https://compte.nextinpact.com/Account/Login',
|
||||
'usernameField' => 'UserName',
|
||||
'passwordField' => 'Password',
|
||||
'username' => 'johndoe',
|
||||
'password' => 'unkn0wn',
|
||||
'httpHeaders' => [
|
||||
'user-agent' => 'Wallabag (Guzzle/5)',
|
||||
],
|
||||
]);
|
||||
|
||||
$browserResponse = new MockResponse('<html></html>', ['http_code' => 200, 'response_headers' => ['content-type' => 'text/html']]);
|
||||
$browserClient = new MockHttpClient([$browserResponse]);
|
||||
$browser = $this->getMockBuilder(HttpBrowser::class)
|
||||
->setConstructorArgs([$browserClient])
|
||||
->getMock();
|
||||
$browser->expects($this->any())
|
||||
->method('request')
|
||||
->with(
|
||||
$this->equalTo('POST'),
|
||||
$this->equalTo('https://compte.nextinpact.com/Account/Login'),
|
||||
$this->equalTo([
|
||||
'UserName' => 'johndoe',
|
||||
'Password' => 'unkn0wn',
|
||||
]),
|
||||
$this->equalTo([]),
|
||||
$this->equalTo([
|
||||
'HTTP_user-agent' => 'Wallabag (Guzzle/5)',
|
||||
]),
|
||||
)
|
||||
;
|
||||
|
||||
$requestHtmlFunctionResponse = $this->getMockBuilder(ResponseInterface::class)->getMock();
|
||||
$requestHtmlFunctionResponse->expects($this->any())
|
||||
->method('getContent')
|
||||
->willReturn(file_get_contents(__DIR__ . '/../fixtures/nextinpact-login.html'))
|
||||
;
|
||||
$requestHtmlFunctionClient = $this->getMockBuilder(HttpClientInterface::class)->getMock();
|
||||
$requestHtmlFunctionClient->expects($this->any())
|
||||
->method('request')
|
||||
->with(
|
||||
$this->equalTo('GET'),
|
||||
$this->equalTo('https://nextinpact.com/'),
|
||||
)
|
||||
->willReturn($requestHtmlFunctionResponse)
|
||||
;
|
||||
$authenticatorProvider = new AuthenticatorProvider($requestHtmlFunctionClient);
|
||||
|
||||
$auth = new LoginFormAuthenticator($browser, $authenticatorProvider);
|
||||
|
||||
$res = $auth->login($siteConfig);
|
||||
|
||||
$this->assertInstanceOf(LoginFormAuthenticator::class, $res);
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,9 +37,6 @@ class SiteConfigTest extends TestCase
|
||||
],
|
||||
'username' => 'johndoe',
|
||||
'password' => 'unkn0wn',
|
||||
'httpHeaders' => [
|
||||
'user-agent' => 'Wallabag (Guzzle/5)',
|
||||
],
|
||||
]);
|
||||
|
||||
$this->assertInstanceOf(SiteConfig::class, $config);
|
||||
|
||||
@ -1,13 +1,10 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
(new Dotenv())->bootEnv(dirname(__DIR__) . '/.env');
|
||||
|
||||
(new Filesystem())->remove(__DIR__ . '/../var/cache/test');
|
||||
|
||||
if (!isPartialRun()) {
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
|
||||
require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
(new Dotenv())->bootEnv(dirname(__DIR__) . '/.env');
|
||||
@ -18,6 +18,7 @@ share_twitter: Freigabe für Twitter aktivieren
|
||||
share_unmark: Freigabe für Unmark.it aktivieren
|
||||
show_printlink: Link anzeigen, um den Inhalt auszudrucken
|
||||
wallabag_support_url: Support-URL für wallabag
|
||||
wallabag_url: URL von *deiner* wallabag-Instanz
|
||||
entry: Artikel
|
||||
export: Export
|
||||
import: Import
|
||||
|
||||
@ -18,6 +18,7 @@ share_twitter: "Включить возможность поделиться в
|
||||
share_unmark: "Включить возможность поделиться в Unmark.it"
|
||||
show_printlink: "Отображать ссылки в версии для печати"
|
||||
wallabag_support_url: "Поддержка URL для wallabag"
|
||||
wallabag_url: "URL *вашего* wallabag сервиса"
|
||||
entry: "запись"
|
||||
export: "экспорт"
|
||||
import: "импорт"
|
||||
|
||||
@ -251,6 +251,14 @@ config:
|
||||
old_password_label: Aktuální heslo
|
||||
description: Zde můžete změnit své heslo. Vaše nové heslo by mělo být alespoň 8 znaků dlouhé.
|
||||
repeat_new_password_label: Zopakujte nové heslo
|
||||
form_rss:
|
||||
rss_limit: Počet položek v novinkovém kanálu
|
||||
rss_link:
|
||||
all: Všechny
|
||||
archive: Archivované
|
||||
unread: Nepřečtené
|
||||
token_create: Vytvořit váš token
|
||||
no_token: Žádný token
|
||||
tab_menu:
|
||||
rss: RSS
|
||||
settings: Nastavení
|
||||
|
||||
@ -89,6 +89,19 @@ config:
|
||||
help_reading_speed: wallabag berechnet eine Lesezeit pro Artikel. Hier kannst du definieren, ob du ein schneller oder langsamer Leser bist. wallabag wird die Lesezeiten danach neu berechnen.
|
||||
help_language: Du kannst die Sprache der wallabag-Oberfläche ändern.
|
||||
help_pocket_consumer_key: Nötig für den Pocket-Import. Du kannst ihn in deinem Pocket account einrichten.
|
||||
form_rss:
|
||||
description: Die RSS-Feeds von wallabag erlauben es dir, deine gespeicherten Artikel mit deinem bevorzugten RSS-Reader zu lesen. Vorher musst du jedoch einen Token erstellen.
|
||||
token_label: RSS-Token
|
||||
no_token: Kein Token
|
||||
token_create: Token erstellen
|
||||
token_reset: Token zurücksetzen
|
||||
rss_links: RSS-Links
|
||||
rss_link:
|
||||
unread: Ungelesene
|
||||
starred: Favoriten
|
||||
archive: Archivierte
|
||||
all: Alle
|
||||
rss_limit: Anzahl der Einträge pro Feed
|
||||
form_user:
|
||||
two_factor_description: Wenn du die Zwei-Faktor-Authentifizierung aktivierst, erhältst du eine E-Mail mit einem Code bei jeder nicht vertrauenswürdigen Verbindung.
|
||||
name_label: Name
|
||||
|
||||
@ -99,7 +99,20 @@ config:
|
||||
lineheight_label: Interlineación
|
||||
maxwidth_label: Anchura máxima
|
||||
help_display_thumbnails: Puedes decidir si deseas mostrar o no las miniaturas de los artículos. Útil para conexiones lentas.
|
||||
display_thumbnails_label: Mostrar las miniaturas de los artículos (útil para conexiones lentas).'
|
||||
display_thumbnails_label: Mostrar las miniaturas de los artículos (útil para conexiones lentas).
|
||||
form_rss:
|
||||
description: 'Los feeds RSS proporcionados por wallabag permiten leer los artículos guardados con su lector RSS favorito. Primero necesitas generar un token.'
|
||||
token_label: 'Token RSS'
|
||||
no_token: 'Sin token'
|
||||
token_create: 'Crear un token'
|
||||
token_reset: 'Reiniciar el token'
|
||||
rss_links: 'URLs de feeds RSS'
|
||||
rss_link:
|
||||
unread: 'Sin leer'
|
||||
starred: 'Favoritos'
|
||||
archive: 'Archivados'
|
||||
all: Todos
|
||||
rss_limit: 'Número de artículos en el feed RSS'
|
||||
form_user:
|
||||
two_factor_description: "Activar la autenticación en dos pasos significa que recibirás un código por correo electrónico en cada nueva conexión que no sea de confianza."
|
||||
name_label: 'Nombre'
|
||||
|
||||
@ -87,6 +87,18 @@ config:
|
||||
redirect_current_page: ماندن در صفحه جاری
|
||||
label: پس از حذف یا ستاره زدن یک مقاله یا علامت زدن به عنوان خوانده شده چه اتفاقی رخ دهد؟
|
||||
help_items_per_page: تعداد مقالات نمایش داده شده در هر صفحه را تغییر دادید.
|
||||
form_rss:
|
||||
description: با خوراک آر-اس-اس که wallabag در اختیارتان میگذارد، میتوانید مقالههای ذخیرهشده را در نرمافزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.
|
||||
token_label: کد آر-اس-اس
|
||||
no_token: بدون کد
|
||||
token_create: کد خود را بسازید
|
||||
token_reset: بازنشانی کد
|
||||
rss_links: پیوند آر-اس-اس
|
||||
rss_link:
|
||||
unread: خواندهنشده
|
||||
starred: برگزیده
|
||||
archive: بایگانی
|
||||
rss_limit: محدودیت آر-اس-اس
|
||||
form_user:
|
||||
two_factor_description: با فعالکردن تأیید ۲مرحلهای هر بار که اتصال تأییدنشدهای برقرار شد، به شما یک کد از راه ایمیل فرستاده میشود.
|
||||
name_label: نام
|
||||
|
||||
@ -146,6 +146,19 @@ about:
|
||||
bug_reports: Izvještaji o greškama
|
||||
page_title: Informacije
|
||||
config:
|
||||
form_rss:
|
||||
rss_limit: Broj stavki u feedu
|
||||
rss_link:
|
||||
unread: Nepročitano
|
||||
archive: Arhivirano
|
||||
starred: Favorizirano
|
||||
all: Sve
|
||||
token_label: RSS token
|
||||
description: RSS feedovi koje pruža wallabag dozvoljavaju ti čitati tvoje spremljene članke s tvojim omiljenim čitačem RSS-a. Najprije moraš generirati token.
|
||||
no_token: Nema tokena
|
||||
token_reset: Ponovo generiraj token
|
||||
token_create: Stvori token
|
||||
rss_links: RSS poveznice
|
||||
form_rules:
|
||||
faq:
|
||||
variable_description:
|
||||
|
||||
@ -78,6 +78,19 @@ config:
|
||||
help_reading_speed: A wallabag kiszámítja az elolvasási időt minden egyes cikkre. Itt meghatározhatja, ennek a listának köszönhetően, hogy mennyire gyors vagy lassú olvasó. A wallabag újra ki fogja számítani az elolvasási időt minden egyes cikkre.
|
||||
help_language: Megváltoztathatja a wallabag felületének a nyelvét.
|
||||
help_pocket_consumer_key: A Pocket importálásához szükséges. Ezt a Pocket fiókodban hozhatod létre.
|
||||
form_rss:
|
||||
description: A wallabag által biztosított RSS-hírfolyam lehetővé teszi hogy az elmentett cikkeit a kedvenc RSS hírolvasójában olvashassa el. Ehhez először viszont létre kell hoznia egy hozzáférési kulcsot.
|
||||
token_label: RSS hozzáférési kulcs
|
||||
no_token: Nincs hozzáférési kulcs
|
||||
token_create: Hozzáférési kulcsának létrehozása
|
||||
token_reset: Új hozzáférési kulcs létrehozása
|
||||
rss_links: RSS linkek
|
||||
rss_link:
|
||||
unread: Olvasatlan
|
||||
starred: Csillagozott
|
||||
archive: Archivált
|
||||
all: Összes
|
||||
rss_limit: Tételek száma a hírcsatornában
|
||||
form_user:
|
||||
two_factor_description: A kétfaktoros hitelesítés engedélyezésével egy biztonsági kódot tartalmazó e-mailt fog kapni minden új, nem azonosítható eszközről történő bejelentkezés esetén.
|
||||
name_label: Név
|
||||
|
||||
@ -88,6 +88,19 @@ config:
|
||||
help_reading_speed: wallabag calcola un tempo di lettura per ogni articolo. Puoi definire qui, grazie a questa lista, se sei un lettore lento o veloce. wallabag ricalcolerà la velocità di lettura per ogni articolo.
|
||||
help_language: Puoi cambiare la lingua dell'interfaccia di wallabag.
|
||||
help_pocket_consumer_key: Richiesta per importare da Pocket. La puoi creare nel tuo account Pocket.
|
||||
form_rss:
|
||||
description: I feed RSS generati da wallabag ti permettono di leggere i tuoi contenuti salvati con il tuo lettore di RSS preferito. Prima, devi generare un token.
|
||||
token_label: Token RSS
|
||||
no_token: Nessun token
|
||||
token_create: Crea il tuo token
|
||||
token_reset: Rigenera il tuo token
|
||||
rss_links: Collegamenti RSS
|
||||
rss_link:
|
||||
unread: Non letti
|
||||
starred: Preferiti
|
||||
archive: Archiviati
|
||||
all: Tutti
|
||||
rss_limit: Numero di elementi nel feed
|
||||
form_user:
|
||||
two_factor_description: Abilitando l'autenticazione a due fattori riceverai un'e-mail con un codice per ogni nuova connesione non verificata.
|
||||
name_label: Nome
|
||||
|
||||
@ -89,6 +89,19 @@ config:
|
||||
label: 記事に既読やスターをつけた後、どこに移動しますか?
|
||||
android_configuration: Androidアプリの設定をする
|
||||
android_instruction: ここをタッチするとあなたのAndroid アプリに自動入力します
|
||||
form_rss:
|
||||
description: wallabag が提供する RSS フィードは、お好みの RSS リーダーで保存した記事を読むできます。最初にトークンを生成する必要があります。
|
||||
token_label: RSS トークン
|
||||
no_token: トークンがありません
|
||||
token_create: トークンを作成
|
||||
token_reset: トークンを再生成
|
||||
rss_links: RSS のリンク
|
||||
rss_limit: フィード内のアイテムの数
|
||||
rss_link:
|
||||
unread: 未読
|
||||
starred: スター付
|
||||
archive: アーカイブ
|
||||
all: すべて
|
||||
form_user:
|
||||
two_factor_description: 二要素認証を有効にすると、信頼されていない新しい接続ごとに、コードを記載したメールが届きます。
|
||||
help_twoFactorAuthentication: 二要素認証を有効にした場合、wallabag にログインするたびに、メールでコードを受信します。
|
||||
|
||||
@ -100,6 +100,16 @@ config:
|
||||
help_lineheight: Du kan velge linjehøyde du vil bruke.
|
||||
font_label: Skrifttype
|
||||
help_fontsize: Du kan velge skriftstørrelse du vil bruke.
|
||||
form_rss:
|
||||
token_label: RSS-symbol
|
||||
no_token: Inget symbol
|
||||
token_create: Opprett ditt symbol
|
||||
token_reset: Regenerer ditt symbol
|
||||
rss_links: RSS-lenker
|
||||
rss_link:
|
||||
unread: ulest
|
||||
starred: stjernemerket
|
||||
archive: arkivert
|
||||
form_user:
|
||||
name_label: Navn
|
||||
email_label: E-post
|
||||
|
||||
@ -55,6 +55,19 @@ config:
|
||||
googleTwoFactor_label: Gebruik maken van OTP app (open de app, zoals Google Authenticator, Authy of FreeOTP, om een eenmalige code te krijgen)
|
||||
emailTwoFactor_label: Gebruik maken van email (ontvang een code per mail)
|
||||
login_label: Login (kan niet veranderd worden)
|
||||
form_rss:
|
||||
rss_limit: Aantal items in de lijst
|
||||
rss_link:
|
||||
all: Alles
|
||||
archive: Gearchiveerd
|
||||
starred: Gemarkeerd
|
||||
unread: Ongelezen
|
||||
rss_links: RSS-koppelingen
|
||||
token_reset: Token opnieuw genereren
|
||||
token_create: Creëer uw token
|
||||
no_token: Geen token
|
||||
token_label: RSS-token
|
||||
description: Met RSS-feeds van wallabag kunt u uw opgeslagen artikelen lezen met uw favoriete RSS-lezer. U moet wel eerst een token genereren.
|
||||
form_rules:
|
||||
faq:
|
||||
tagging_rules_definition_description: Dit zijn regels die door Wallabag worden gebruikt om automatisch nieuwe items te labelen. <br /> Elke keer dat een nieuw item wordt toegevoegd, worden alle labelregels gebruikt om de labels toe te voegen die je hebt geconfigureerd, waardoor je de moeite van het handmatig classificeren van je items bespaart.
|
||||
|
||||
@ -100,6 +100,19 @@ config:
|
||||
fontsize_label: Talha de polissa
|
||||
lineheight_label: Nautor de linha
|
||||
maxwidth_label: Largor maximala
|
||||
form_rss:
|
||||
description: Los fluxes RSS fornits per wallabag vos permeton de legir vòstres articles salvagardats dins vòstre lector de fluxes preferit. Per los poder emplegar, vos cal, d'en primièr crear un geton.
|
||||
token_label: Geton RSS
|
||||
no_token: Pas cap de geton generat
|
||||
token_create: Creatz vòstre geton
|
||||
token_reset: Reïnicializatz vòstre geton
|
||||
rss_links: URLs de vòstres fluxes RSS
|
||||
rss_link:
|
||||
unread: Pas legits
|
||||
starred: Favorits
|
||||
archive: Legits
|
||||
all: Totes
|
||||
rss_limit: Nombre d'articles dins un flux RSS
|
||||
form_user:
|
||||
two_factor_description: Activar l'autentificacion en dos temps vòl dire que recebretz un còdi per corrièl per cada novèla connexion pas aprovada.
|
||||
name_label: Nom
|
||||
|
||||
@ -100,6 +100,19 @@ config:
|
||||
lineheight_label: Wysokość linii
|
||||
maxwidth_label: Maksymalna szerokość
|
||||
help_fontsize: Możesz wybrać rozmiar czcionek do użycia.
|
||||
form_rss:
|
||||
description: Kanały RSS prowadzone przez wallabag pozwalają Ci na czytanie twoich zapisanych artykułów w twoim ulubionym czytniku RSS. Musisz najpierw wygenerować tokena.
|
||||
token_label: Token RSS
|
||||
no_token: Brak tokena
|
||||
token_create: Stwórz tokena
|
||||
token_reset: Zresetuj swojego tokena
|
||||
rss_links: RSS links
|
||||
rss_link:
|
||||
unread: Nieprzeczytane
|
||||
starred: Oznaczone gwiazdką
|
||||
archive: Archiwum
|
||||
all: Wszystkie
|
||||
rss_limit: Link do RSS
|
||||
form_user:
|
||||
two_factor_description: Włączenie autoryzacji dwuetapowej oznacza, że będziesz otrzymywał maile z kodem przy każdym nowym, niezaufanym połączeniu.
|
||||
name_label: Nazwa
|
||||
|
||||
@ -76,6 +76,18 @@ config:
|
||||
400_word: 'Posso ler ~400 palavras por minuto'
|
||||
pocket_consumer_key_label: 'Chave do consumidor do Pocket para importar conteúdo'
|
||||
help_pocket_consumer_key: Necessário para importar do Pocket. Pode criá-lo na sua conta do Pocket.
|
||||
form_rss:
|
||||
description: 'Feeds RSS providos pelo wallabag permitem que você leia seus artigos salvos em seu leitor de RSS favorito. Você precisa gerar um token primeiro.'
|
||||
token_label: 'Token RSS'
|
||||
no_token: 'Nenhum Token'
|
||||
token_create: 'Criar seu token'
|
||||
token_reset: 'Gerar novamente seu token'
|
||||
rss_links: 'Links RSS'
|
||||
rss_link:
|
||||
unread: 'Não lido'
|
||||
starred: 'Destacado'
|
||||
archive: 'Arquivado'
|
||||
rss_limit: 'Número de itens no feed'
|
||||
form_user:
|
||||
two_factor_description: 'Habilitar autenticação de dois passos significa que você receberá um e-mail com um código a cada nova conexão desconhecida.'
|
||||
name_label: 'Nome'
|
||||
|
||||
@ -89,6 +89,19 @@ config:
|
||||
help_language: "Вы можете изменить язык интерфейса wallabag."
|
||||
help_pocket_consumer_key: "Обязательно для импорта из Pocket. Вы можете создать это в Вашем аккаунте на Pocket."
|
||||
android_instruction: Нажмите здесь, чтобы предустановить ваше приложение для Android
|
||||
form_rss:
|
||||
description: 'RSS фид созданный с помощью wallabag позволяет читать Ваши записи через Ваш любимый RSS агрегатор. Для начала Вам потребуется создать ключ.'
|
||||
token_label: 'RSS ключ'
|
||||
no_token: 'Ключ не задан'
|
||||
token_create: 'Создать ключ'
|
||||
token_reset: 'Пересоздать ключ'
|
||||
rss_links: 'ссылка на RSS'
|
||||
rss_link:
|
||||
unread: 'непрочитанные'
|
||||
starred: 'помеченные'
|
||||
archive: 'архивные'
|
||||
all: Все
|
||||
rss_limit: 'Количество записей в фиде'
|
||||
form_user:
|
||||
two_factor_description: "Включить двухфакторную аутентификацию, Вы получите сообщение на указанный email с кодом, при каждом новом непроверенном подключении."
|
||||
name_label: 'Имя'
|
||||
|
||||
@ -100,6 +100,19 @@ config:
|
||||
fontsize_label: Yazı tipi boyutu
|
||||
lineheight_label: Satır yüksekliği
|
||||
help_fontsize: Kullanmak istediğiniz yazı tipi boyutunu seçebilirsiniz.
|
||||
form_rss:
|
||||
description: wallabag RSS akışı kaydetmiş olduğunuz makalelerini favori RSS okuyucunuzda görüntülemenizi sağlar. Bunu yapabilmek için öncelikle belirteç (token) oluşturmalısınız.
|
||||
token_label: RSS belirteci (token)
|
||||
no_token: Belirteç (token) yok
|
||||
token_create: Yeni belirteç (token) oluştur
|
||||
token_reset: Belirteci (token) sıfırla
|
||||
rss_links: RSS akış bağlantıları
|
||||
rss_link:
|
||||
unread: Okunmayan
|
||||
starred: Favoriler
|
||||
archive: Arşiv
|
||||
all: Tümü
|
||||
rss_limit: RSS içeriğinden talep edilecek makale limiti
|
||||
form_user:
|
||||
two_factor_description: İki adımlı kimlik doğrulamayı etkinleştirmek, her yeni güvenilmeyen bağlantıda bir kod içeren bir e-posta alacağınız anlamına gelir.
|
||||
name_label: İsim
|
||||
|
||||
@ -209,6 +209,19 @@ config:
|
||||
enable: "启用"
|
||||
two_factor_code_description_5: 如果你看不到二维码或无法扫描它,请在你的应用程序中输入下列认证代码:
|
||||
qrcode_label: 二维码
|
||||
form_rss:
|
||||
rss_limit: RSS源中的条目数
|
||||
rss_link:
|
||||
all: 全部
|
||||
archive: 已存档
|
||||
starred: 已标星
|
||||
unread: 未读
|
||||
rss_links: RSS链接
|
||||
token_reset: 重新生成你的令牌
|
||||
token_create: 创建你的令牌
|
||||
no_token: 没有令牌
|
||||
token_label: RSS令牌
|
||||
description: wallabag提供的RSS源可以让你用你喜欢的RSS阅读器阅读你保存的文章。首先需要生成一个令牌。
|
||||
form_ignore_origin_rules:
|
||||
faq:
|
||||
operator_description:
|
||||
|
||||
@ -4,4 +4,4 @@ validator:
|
||||
password_too_short: يجب أن تتكون كلمة المرور الخاصة بك من 8 أحرف على الأقل.
|
||||
item_per_page_too_high: سيؤدي هذا بالتأكيد إلى تدمير التطبيق
|
||||
quote_length_too_high: الاقتباس طويل جدًا. يجب أن يحتوي على {{ Limit }} حرف أو أقل.
|
||||
feed_limit_too_high: سيؤدي هذا بالتأكيد إلى تدمير التطبيق
|
||||
rss_limit_too_high: سيؤدي هذا بالتأكيد إلى تدمير التطبيق
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: Vaše heslo musí mít alespoň 8 znaků.
|
||||
password_must_match: Hesla se musí shodovat.
|
||||
quote_length_too_high: Citace je příliš dlouhá. Měla by mít {{ limit }} znaků nebo méně.
|
||||
feed_limit_too_high: Toto určitě ukončí aplikaci
|
||||
rss_limit_too_high: Toto určitě ukončí aplikaci
|
||||
item_per_page_too_high: Toto určitě ukončí aplikaci
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: Ihr Passwort muss mindestens 8 Zeichen lang sein.
|
||||
password_wrong_value: Falsches aktuelles Passwort angegeben.
|
||||
item_per_page_too_high: Dies wird die Anwendung möglicherweise beenden
|
||||
feed_limit_too_high: Dies wird die Anwendung möglicherweise beenden
|
||||
rss_limit_too_high: Dies wird die Anwendung möglicherweise beenden
|
||||
quote_length_too_high: Das Zitat ist zu lang. Es sollte nicht mehr als {{ limit }} Zeichen enthalten.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
validator:
|
||||
quote_length_too_high: Η παράθεση είναι υπερβολικά μεγάλη. Πρέπει να έχει μέχρι και {{ limit }} χαρακτήρες.
|
||||
feed_limit_too_high: Αυτό θα τερματίσει σίγουρα την εφαρμογή
|
||||
rss_limit_too_high: Αυτό θα τερματίσει σίγουρα την εφαρμογή
|
||||
item_per_page_too_high: Αυτό θα τερματίσει σίγουρα την εφαρμογή
|
||||
password_wrong_value: Έγινε εισαγωγή λάθος κωδικού.
|
||||
password_too_short: Ο κωδικός σας πρέπει να έχει τουλάχιστον 8 χαρακτήρες.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: Your password must be at least 8 characters.
|
||||
password_wrong_value: Wrong current password supplied.
|
||||
item_per_page_too_high: This will certainly kill the app
|
||||
feed_limit_too_high: This will certainly kill the app
|
||||
rss_limit_too_high: This will certainly kill the app
|
||||
quote_length_too_high: The quote is too long. It should have {{ limit }} characters or less.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: Su contraseña debe tener al menos 8 caracteres.
|
||||
password_wrong_value: Se ha proporcionado una contraseña incorrecta.
|
||||
item_per_page_too_high: Esto matará la aplicación
|
||||
feed_limit_too_high: Esto matará la aplicación
|
||||
rss_limit_too_high: Esto matará la aplicación
|
||||
quote_length_too_high: La cita es muy larga. Debe tener {{ limit }} caracteres o menos.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: گذرواژه شما باید حداقل ۸ حرف باشد.
|
||||
password_wrong_value: گذواژه فعلی را اشتباه وارد کردهاید.
|
||||
item_per_page_too_high: با این تعداد برنامه به فنا میرود
|
||||
feed_limit_too_high: با این تعداد برنامه به فنا میرود
|
||||
rss_limit_too_high: با این تعداد برنامه به فنا میرود
|
||||
quote_length_too_high: نقلقول بسیار طولانی است. میبایست {{ limit }} حرف یا کمتر باشد.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: Votre mot de passe doit faire au moins 8 caractères.
|
||||
password_wrong_value: Mot de passe fourni incorrect.
|
||||
item_per_page_too_high: Ça ne va pas plaire à l’application
|
||||
feed_limit_too_high: Ça ne va pas plaire à l’application
|
||||
rss_limit_too_high: Ça ne va pas plaire à l’application
|
||||
quote_length_too_high: La citation est trop longue. Elle doit avoir au maximum {{ limit }} caractères.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
validator:
|
||||
quote_length_too_high: A cita é demasiado longa. Debería ter {{ limit }} caracteres ou menos.
|
||||
feed_limit_too_high: Esto certarmente estragará a app
|
||||
rss_limit_too_high: Esto certarmente estragará a app
|
||||
item_per_page_too_high: Esto certamente estragará a app
|
||||
password_wrong_value: O contrasinal escrito non é o actual.
|
||||
password_too_short: O teu contrasinal debe ter polo menos 8 caracteres.
|
||||
|
||||
@ -2,6 +2,6 @@ validator:
|
||||
quote_length_too_high: Citat je predug. Trebao bi sadržati {{limit}} ili manje znakova.
|
||||
password_too_short: Lozinka mora sadržati barem 8 znakova.
|
||||
password_wrong_value: Dostavljena je kriva trenutačna lozinka.
|
||||
feed_limit_too_high: Ovo će zasigurno urušiti program
|
||||
rss_limit_too_high: Ovo će zasigurno urušiti program
|
||||
item_per_page_too_high: Ovo će zasigurno urušiti program
|
||||
password_must_match: Polja lozinki moraju se poklapati.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: A jelszónak legalább 8 karakter hosszúságúnak kell lennie.
|
||||
password_wrong_value: A megadott jelenlegi jelszó nem megfelelő.
|
||||
item_per_page_too_high: Ettől minden bizonnyal nagyon lassú lesz az alkalmazás
|
||||
feed_limit_too_high: Ettől minden bizonnyal nagyon lassú lesz az alkalmazás
|
||||
rss_limit_too_high: Ettől minden bizonnyal nagyon lassú lesz az alkalmazás
|
||||
quote_length_too_high: Az idézet az túl hosszú. {{ limit }} karakterek vagy annál kevesebbnek kell lennie.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_must_match: Kata sandi harus cocok.
|
||||
password_too_short: Kata sandi Anda harus setidaknya 8 karakter.
|
||||
item_per_page_too_high: Ini akan mematikan aplikasi
|
||||
feed_limit_too_high: Ini akan mematikan aplikasi
|
||||
rss_limit_too_high: Ini akan mematikan aplikasi
|
||||
quote_length_too_high: Kutipannya terlalu panjang. Setidaknya butuh {{ limit }} karakter atau kurang.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: La password deve essere di almeno 8 caratteri.
|
||||
password_wrong_value: La password fornita è errata.
|
||||
item_per_page_too_high: Questo valore è troppo alto
|
||||
feed_limit_too_high: Questo valore è troppo alto
|
||||
rss_limit_too_high: Questo valore è troppo alto
|
||||
quote_length_too_high: La citazione è troppo lunga. Deve avere {{ limit }} caratteri o meno.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: パスワードは 8 文字以上で入力してください。
|
||||
password_wrong_value: 現在のパスワードが間違っています。
|
||||
item_per_page_too_high: 確実にアプリを終了します
|
||||
feed_limit_too_high: 確実にアプリを終了します
|
||||
rss_limit_too_high: 確実にアプリを終了します
|
||||
quote_length_too_high: 引用が長すぎます。{{ limit }} 文字以下にする必要があります。
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
validator:
|
||||
quote_length_too_high: 인용이 너무 깁니다. {{limit}} 자 이하로 해야합니다.
|
||||
feed_limit_too_high: 확실히 앱을 종료합니다
|
||||
rss_limit_too_high: 확실히 앱을 종료합니다
|
||||
item_per_page_too_high: 확실히 앱을 종료합니다
|
||||
password_wrong_value: 현재 비밀번호가 잘못되었습니다.
|
||||
password_too_short: 비밀번호는 8자 이상이어야합니다.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: Passordet ditt må være minst åtte tegn.
|
||||
password_wrong_value: Feil nåværende passord angitt.
|
||||
item_per_page_too_high: Dette vil drepe programmet
|
||||
feed_limit_too_high: Dette vil drepe programmet
|
||||
rss_limit_too_high: Dette vil drepe programmet
|
||||
quote_length_too_high: Sitatet er for langt. De kan være {{ limit }} tegn eller mindre.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
validator:
|
||||
quote_length_too_high: De quote is te lang. Het maximaal aantal tekens is {{ limit }}.
|
||||
feed_limit_too_high: Dit breekt zeker de app
|
||||
rss_limit_too_high: Dit breekt zeker de app
|
||||
password_must_match: De wachtwoordvelden moeten gelijk zijn.
|
||||
item_per_page_too_high: Dit breekt vrijwel zeker de app
|
||||
password_wrong_value: Verkeerd huidig wachtwoord opgegeven.
|
||||
|
||||
@ -5,3 +5,4 @@ validator:
|
||||
item_per_page_too_high: "Aquò li agradarà pas a l'aplicacion"
|
||||
feed_limit_too_high: "Aquò li agradarà pas a l'aplicacion"
|
||||
quote_length_too_high: 'Aquesta citacion es tròpa longa. Cal que faga {{ limit }} caractèrs o mens.'
|
||||
rss_limit_too_high: Aquò matarà segurament l’aplicacion
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: Twoje hasło musi mieć co najmniej 8 znaków.
|
||||
password_wrong_value: Twoje obecne hasło jest błędne.
|
||||
item_per_page_too_high: To może spowodować problemy z aplikacją
|
||||
feed_limit_too_high: To może spowodować problemy z aplikacją
|
||||
rss_limit_too_high: To może spowodować problemy z aplikacją
|
||||
quote_length_too_high: Cytat jest zbyt długi. powinien mieć {{ limit }} znaków lub mniej.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: A palavra-passe deve ter pelo menos 8 caracteres.
|
||||
password_wrong_value: A palavra-passe atual está errada.
|
||||
item_per_page_too_high: Certamente isso pode matar a aplicação
|
||||
feed_limit_too_high: Certamente isso pode matar a aplicação
|
||||
rss_limit_too_high: Certamente isso pode matar a aplicação
|
||||
quote_length_too_high: A citação é longa demais. Ela deve ter {{ limite }} caracteres ou menos.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: 'Ваш пароль должен состоять не менее чем из 8 символов.'
|
||||
password_wrong_value: 'Указан неверный пароль.'
|
||||
item_per_page_too_high: 'Это, безусловно, убьёт приложение'
|
||||
feed_limit_too_high: 'Это, безусловно, убьёт приложение'
|
||||
rss_limit_too_high: 'Это, безусловно, убьёт приложение'
|
||||
quote_length_too_high: Цитата слишком длинная. Она должна содержать не более {{ limit }} символов.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: 'รหัสผ่านควรมีอย่างน้อยสุด 8 ตัวอักษร'
|
||||
password_wrong_value: 'ค่าที่ผิดพลาดของรหัสผ่านปัจุบันของคุณ'
|
||||
item_per_page_too_high: 'สิ่งนี้จะทำให้ส่งผลต่อ app'
|
||||
feed_limit_too_high: 'สิ่งนี้จะทำให้ส่งผลต่อ app'
|
||||
rss_limit_too_high: 'สิ่งนี้จะทำให้ส่งผลต่อ app'
|
||||
quote_length_too_high: 'การอ้างอิงที่ยาวไป มันควรที่จะมี {{ limit }} ตัวอักษรหรือน้อยกว่านั้น'
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: Parolanız en az 8 karakter olmalıdır.
|
||||
password_wrong_value: Girdiğiniz mevcut parolanız hatalı.
|
||||
item_per_page_too_high: Bu uygulamayı tam olarak kapatacak
|
||||
feed_limit_too_high: Bu uygulamayı tam olarak kapatacak
|
||||
rss_limit_too_high: Bu uygulamayı tam olarak kapatacak
|
||||
quote_length_too_high: Alıntı çok uzun. En fazla {{ limit }} karakter olmalıdır.
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: Ваш пароль повинен бути довжиною принаймні 8 символів.
|
||||
password_wrong_value: Введено неправильний поточний пароль.
|
||||
item_per_page_too_high: Вибрано завелику кількість
|
||||
feed_limit_too_high: Вибрано завелику кількість
|
||||
rss_limit_too_high: Вибрано завелику кількість
|
||||
quote_length_too_high: Цитата занадто довга. Вона повинна мати не більше {{ limit }} символів.
|
||||
|
||||
@ -5,3 +5,4 @@ validator:
|
||||
item_per_page_too_high: '这会让应用十分卡顿'
|
||||
feed_limit_too_high: '这会让应用十分卡顿'
|
||||
quote_length_too_high: '引用内容过长,最多不能超过 {{ limit }} 个字符。'
|
||||
rss_limit_too_high: 这肯定会杀死应用程序
|
||||
|
||||
@ -3,5 +3,5 @@ validator:
|
||||
password_too_short: 你的密碼必須至少有 8 個字元。
|
||||
password_wrong_value: 提供了錯誤的密碼。
|
||||
item_per_page_too_high: 這肯定會毀了應用程式
|
||||
feed_limit_too_high: 這肯定會毀了應用程式
|
||||
rss_limit_too_high: 這肯定會毀了應用程式
|
||||
quote_length_too_high: 密碼太長了。 它應該要有{{limit}}個字或更少。
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user