mirror of
https://github.com/wallabag/wallabag.git
synced 2024-11-25 18:41:05 +00:00
Merge remote-tracking branch 'origin/master' into 2.4
This commit is contained in:
commit
9f0957b831
26 changed files with 253 additions and 64 deletions
16
CHANGELOG.md
16
CHANGELOG.md
|
@ -1,5 +1,21 @@
|
|||
# Changelog
|
||||
|
||||
## [2.3.8](https://github.com/wallabag/wallabag/tree/2.3.8)
|
||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.7...2.3.8)
|
||||
|
||||
### Fixes
|
||||
|
||||
- Jump to 2.3.8-dev [#3897](https://github.com/wallabag/wallabag/pull/3897)
|
||||
- material: fix left padding on non-entry pages [#3901](https://github.com/wallabag/wallabag/pull/3901)
|
||||
- Make dev/install/update script posix compatible [#3860](https://github.com/wallabag/wallabag/pull/3860)
|
||||
- epub: fix exception when articles have the same title [#3908](https://github.com/wallabag/wallabag/pull/3908)
|
||||
- Fix PHP warning [#3909](https://github.com/wallabag/wallabag/pull/3909)
|
||||
- Add ability to match many domains for credentials [#3937](https://github.com/wallabag/wallabag/pull/3937)
|
||||
- material: add metadata to list view [#3942](https://github.com/wallabag/wallabag/pull/3942)
|
||||
- Enable no-referrer on img tags, enable strict-origin-when-cross-origin by default [#3943](https://github.com/wallabag/wallabag/pull/3943)
|
||||
- Remove preview picture from share view page#3922
|
||||
- Fix Intl Locale issue [#3964](https://github.com/wallabag/wallabag/pull/3964)
|
||||
|
||||
## [2.3.7](https://github.com/wallabag/wallabag/tree/2.3.7)
|
||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.6...2.3.7)
|
||||
|
||||
|
|
|
@ -18,6 +18,24 @@ main {
|
|||
overflow: hidden;
|
||||
}
|
||||
|
||||
@mixin mixin-reading-time {
|
||||
.reading-time {
|
||||
display: inline-flex;
|
||||
vertical-align: middle;
|
||||
|
||||
.card-reading-time,
|
||||
.card-created-at {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
.card {
|
||||
.card-content .card-title,
|
||||
.card-reveal .card-title {
|
||||
|
@ -98,19 +116,7 @@ main {
|
|||
margin-right: 5px !important;
|
||||
}
|
||||
|
||||
.reading-time {
|
||||
display: inline-flex;
|
||||
vertical-align: middle;
|
||||
|
||||
.card-reading-time,
|
||||
.card-created-at {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
@include mixin-reading-time;
|
||||
}
|
||||
|
||||
.card-image {
|
||||
|
@ -235,10 +241,18 @@ a.original:not(.waves-effect) {
|
|||
}
|
||||
|
||||
div.metadata {
|
||||
overflow: hidden;
|
||||
height: 1.5em;
|
||||
display: flex;
|
||||
|
||||
ul.tags {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.chip {
|
||||
background-color: $blueAccentColor;
|
||||
padding: 0 7px;
|
||||
margin: auto 2px;
|
||||
margin: auto 1px;
|
||||
border-radius: 6px;
|
||||
line-height: 22px;
|
||||
height: 22px;
|
||||
|
@ -255,6 +269,16 @@ a.original:not(.waves-effect) {
|
|||
padding-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
@include mixin-reading-time {
|
||||
padding: 0 5px;
|
||||
flex-wrap: wrap;
|
||||
margin-left: auto;
|
||||
|
||||
i.material-icons {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
div.card-content {
|
||||
|
|
|
@ -173,6 +173,10 @@
|
|||
.row .col {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.card-stacked div.metadata .reading-time {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 310px),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
wallabag_core:
|
||||
version: 2.3.8-dev
|
||||
version: 2.3.8
|
||||
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
|
||||
languages:
|
||||
en: 'English'
|
||||
|
|
|
@ -5,20 +5,39 @@ namespace Wallabag\CoreBundle\DataFixtures;
|
|||
use Doctrine\Bundle\FixturesBundle\Fixture;
|
||||
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
|
||||
use Doctrine\Common\Persistence\ObjectManager;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Wallabag\CoreBundle\Entity\SiteCredential;
|
||||
use Wallabag\UserBundle\DataFixtures\UserFixtures;
|
||||
|
||||
class SiteCredentialFixtures extends Fixture implements DependentFixtureInterface
|
||||
class SiteCredentialFixtures extends Fixture implements DependentFixtureInterface, ContainerAwareInterface
|
||||
{
|
||||
/**
|
||||
* @var ContainerInterface
|
||||
*/
|
||||
private $container;
|
||||
|
||||
public function setContainer(ContainerInterface $container = null)
|
||||
{
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load(ObjectManager $manager)
|
||||
{
|
||||
$credential = new SiteCredential($this->getReference('admin-user'));
|
||||
$credential->setHost('example.com');
|
||||
$credential->setUsername('foo');
|
||||
$credential->setPassword('bar');
|
||||
$credential->setHost('.super.com');
|
||||
$credential->setUsername($this->container->get('wallabag_core.helper.crypto_proxy')->crypt('.super'));
|
||||
$credential->setPassword($this->container->get('wallabag_core.helper.crypto_proxy')->crypt('bar'));
|
||||
|
||||
$manager->persist($credential);
|
||||
|
||||
$credential = new SiteCredential($this->getReference('admin-user'));
|
||||
$credential->setHost('paywall.example.com');
|
||||
$credential->setUsername($this->container->get('wallabag_core.helper.crypto_proxy')->crypt('paywall.example'));
|
||||
$credential->setPassword($this->container->get('wallabag_core.helper.crypto_proxy')->crypt('bar'));
|
||||
|
||||
$manager->persist($credential);
|
||||
|
||||
|
|
|
@ -62,11 +62,24 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder
|
|||
$host = substr($host, 4);
|
||||
}
|
||||
|
||||
$credentials = null;
|
||||
if ($this->currentUser) {
|
||||
$credentials = $this->credentialRepository->findOneByHostAndUser($host, $this->currentUser->getId());
|
||||
if (!$this->currentUser) {
|
||||
$this->logger->debug('Auth: no current user defined.');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$hosts = [$host];
|
||||
// will try to see for a host without the first subdomain (fr.example.org & .example.org)
|
||||
$split = explode('.', $host);
|
||||
|
||||
if (\count($split) > 1) {
|
||||
// remove first subdomain
|
||||
array_shift($split);
|
||||
$hosts[] = '.' . implode('.', $split);
|
||||
}
|
||||
|
||||
$credentials = $this->credentialRepository->findOneByHostsAndUser($hosts, $this->currentUser->getId());
|
||||
|
||||
if (null === $credentials) {
|
||||
$this->logger->debug('Auth: no credentials available for host.', ['host' => $host]);
|
||||
|
||||
|
|
|
@ -47,6 +47,7 @@ class ContentProxy
|
|||
*/
|
||||
public function updateEntry(Entry $entry, $url, array $content = [], $disableContentUpdate = false)
|
||||
{
|
||||
$this->graby->toggleImgNoReferrer(true);
|
||||
if (!empty($content['html'])) {
|
||||
$content['html'] = $this->graby->cleanupHtml($content['html'], $url);
|
||||
}
|
||||
|
|
|
@ -19,16 +19,16 @@ class SiteCredentialRepository extends \Doctrine\ORM\EntityRepository
|
|||
/**
|
||||
* Retrieve one username/password for the given host and userId.
|
||||
*
|
||||
* @param string $host
|
||||
* @param int $userId
|
||||
* @param array $hosts An array of host to look for
|
||||
* @param int $userId
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
public function findOneByHostAndUser($host, $userId)
|
||||
public function findOneByHostsAndUser($hosts, $userId)
|
||||
{
|
||||
$res = $this->createQueryBuilder('s')
|
||||
->select('s.username', 's.password')
|
||||
->where('s.host = :hostname')->setParameter('hostname', $host)
|
||||
->where('s.host IN (:hosts)')->setParameter('hosts', $hosts)
|
||||
->andWhere('s.user = :userId')->setParameter('userId', $userId)
|
||||
->setMaxResults(1)
|
||||
->getQuery()
|
||||
|
|
|
@ -572,7 +572,7 @@ site_credential:
|
|||
# create_new_one: Create a new credential
|
||||
# form:
|
||||
# username_label: 'Username'
|
||||
# host_label: 'Host'
|
||||
# host_label: 'Host (subdomain.example.org, .example.org, etc.)'
|
||||
# password_label: 'Password'
|
||||
# save: Save
|
||||
# delete: Delete
|
||||
|
|
|
@ -563,7 +563,7 @@ site_credential:
|
|||
create_new_one: 'Einen neuen Seitenzugang anlegen'
|
||||
form:
|
||||
username_label: 'Benutzername'
|
||||
host_label: 'Host'
|
||||
host_label: 'Host (subdomain.example.org, .example.org, etc.)'
|
||||
password_label: 'Passwort'
|
||||
save: 'Speichern'
|
||||
delete: 'Löschen'
|
||||
|
|
|
@ -572,7 +572,7 @@ site_credential:
|
|||
create_new_one: Create a new credential
|
||||
form:
|
||||
username_label: 'Username'
|
||||
host_label: 'Host'
|
||||
host_label: 'Host (subdomain.example.org, .example.org, etc.)'
|
||||
password_label: 'Password'
|
||||
save: Save
|
||||
delete: Delete
|
||||
|
|
|
@ -572,7 +572,7 @@ site_credential:
|
|||
# create_new_one: Create a new credential
|
||||
# form:
|
||||
# username_label: 'Username'
|
||||
# host_label: 'Host'
|
||||
# host_label: 'Host (subdomain.example.org, .example.org, etc.)'
|
||||
# password_label: 'Password'
|
||||
# save: Save
|
||||
# delete: Delete
|
||||
|
|
|
@ -572,7 +572,7 @@ site_credential:
|
|||
# create_new_one: Create a new credential
|
||||
# form:
|
||||
# username_label: 'Username'
|
||||
# host_label: 'Host'
|
||||
# host_label: 'Host (subdomain.example.org, .example.org, etc.)'
|
||||
# password_label: 'Password'
|
||||
# save: Save
|
||||
# delete: Delete
|
||||
|
|
|
@ -573,7 +573,7 @@ site_credential:
|
|||
create_new_one: Créer un nouvel accès à un site
|
||||
form:
|
||||
username_label: 'Identifiant'
|
||||
host_label: 'Domaine'
|
||||
host_label: 'Domaine (subdomain.example.org, .example.org, etc.)'
|
||||
password_label: 'Mot de passe'
|
||||
save: "Sauvegarder"
|
||||
delete: "Supprimer"
|
||||
|
|
|
@ -571,7 +571,7 @@ site_credential:
|
|||
# create_new_one: Create a new credential
|
||||
# form:
|
||||
# username_label: 'Username'
|
||||
# host_label: 'Host'
|
||||
# host_label: 'Host (subdomain.example.org, .example.org, etc.)'
|
||||
# password_label: 'Password'
|
||||
# save: Save
|
||||
# delete: Delete
|
||||
|
|
|
@ -571,7 +571,7 @@ site_credential:
|
|||
create_new_one: Crear un novèl identificant
|
||||
form:
|
||||
username_label: "Nom d'utilizaire"
|
||||
host_label: 'Òste'
|
||||
host_label: 'Òste (subdomain.example.org, .example.org, etc.)'
|
||||
password_label: 'Senhal'
|
||||
save: 'Enregistrar'
|
||||
delete: 'Suprimir'
|
||||
|
|
|
@ -571,7 +571,7 @@ site_credential:
|
|||
create_new_one: Stwórz nowe poświadczenie
|
||||
form:
|
||||
username_label: 'Nazwa użytkownika'
|
||||
host_label: 'Host'
|
||||
host_label: 'Host (subdomain.example.org, .example.org, etc.)'
|
||||
password_label: 'Hasło'
|
||||
save: Zapisz
|
||||
delete: Usuń
|
||||
|
|
|
@ -571,7 +571,7 @@ site_credential:
|
|||
# create_new_one: Create a new credential
|
||||
form:
|
||||
# username_label: 'Username'
|
||||
# host_label: 'Host'
|
||||
# host_label: 'Host (subdomain.example.org, .example.org, etc.)'
|
||||
# password_label: 'Password'
|
||||
save: 'Salvar'
|
||||
delete: 'Apagar'
|
||||
|
|
|
@ -571,7 +571,7 @@ site_credential:
|
|||
# create_new_one: Create a new credential
|
||||
# form:
|
||||
# username_label: 'Username'
|
||||
# host_label: 'Host'
|
||||
# host_label: 'Host (subdomain.example.org, .example.org, etc.)'
|
||||
# password_label: 'Password'
|
||||
# save: Save
|
||||
# delete: Delete
|
||||
|
|
|
@ -569,7 +569,7 @@ site_credential:
|
|||
create_new_one: สร้างข้อมูลส่วนตัวใหม่
|
||||
form:
|
||||
username_label: 'ชื่อผู้ใช้'
|
||||
host_label: 'โฮส'
|
||||
host_label: 'โฮส (subdomain.example.org, .example.org, etc.)'
|
||||
password_label: 'รหัสผ่าน'
|
||||
save: บันทึก
|
||||
delete: ลบ
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
{% block head %}
|
||||
<meta name="viewport" content="initial-scale=1.0">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="referrer" content="strict-origin-when-cross-origin">
|
||||
<!--[if IE]>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=10">
|
||||
<![endif]-->
|
||||
|
|
|
@ -29,9 +29,6 @@
|
|||
<h1>{{ entry.title|e|raw }}</h1>
|
||||
<a href="{{ entry.url|e }}" target="_blank" rel="noopener" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e|raw }}" class="tool">{{ entry.domainName|removeWww }}</a>
|
||||
<p class="shared-by">{{ "entry.public.shared_by_wallabag"|trans({'%wallabag_instance%': url('homepage'), '%username%': entry.user.username})|raw }}.</p>
|
||||
{% if entry.previewPicture is not null %}
|
||||
<img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|striptags|e('html_attr') }}" />
|
||||
{% endif %}
|
||||
</header>
|
||||
<article class="block">
|
||||
{{ entry.content | raw }}
|
||||
|
|
|
@ -8,8 +8,11 @@
|
|||
|
||||
<div class="{{ subClass|default('original grey-text') }}">
|
||||
<a href="{{ entry.url|e }}" target="_blank" title="{{ entry.domainName|removeWww }}" class="tool grey-text">{{ entry.domainName|removeWww }}</a>
|
||||
{% if withTags is defined %}
|
||||
{% if withMetadata is defined %}
|
||||
{% include "@WallabagCore/themes/material/Entry/_tags.html.twig" with {'tags': entry.tags | slice(0, 3), 'entryId': entry.id, 'listClass': ' hide-on-med-and-down'} only %}
|
||||
<div class="reading-time grey-text">
|
||||
<div class="card-reading-time">{% include "@WallabagCore/themes/material/Entry/_reading_time.html.twig" with {'entry': entry} only %}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<span class="preview{{ previewClassModifier }}" style="background-image: url({{ entry.previewPicture | default(asset('wallassets/themes/_global/img/logo-square.svg')) }})"></span>
|
||||
</a>
|
||||
</div>
|
||||
{% include "@WallabagCore/themes/material/Entry/Card/_content.html.twig" with {'entry': entry, 'withTags': true, 'subClass': 'metadata'} only %}
|
||||
{% include "@WallabagCore/themes/material/Entry/Card/_content.html.twig" with {'entry': entry, 'withMetadata': true, 'subClass': 'metadata'} only %}
|
||||
<ul class="tools-list hide-on-small-only">
|
||||
<li>
|
||||
<a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text" href="{{ path('archive_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isArchived == 0 %}done{% else %}unarchive{% endif %}</i></a>
|
||||
|
|
|
@ -5,26 +5,22 @@ namespace Tests\Wallabag\CoreBundle\GuzzleSiteAuthenticator;
|
|||
use Graby\SiteConfig\SiteConfig as GrabySiteConfig;
|
||||
use Monolog\Handler\TestHandler;
|
||||
use Monolog\Logger;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||||
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
|
||||
use Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder;
|
||||
|
||||
class GrabySiteConfigBuilderTest extends TestCase
|
||||
class GrabySiteConfigBuilderTest extends WallabagCoreTestCase
|
||||
{
|
||||
/** @var \Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder */
|
||||
protected $builder;
|
||||
|
||||
public function testBuildConfigExists()
|
||||
{
|
||||
/* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
|
||||
$grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$grabySiteConfig = new GrabySiteConfig();
|
||||
$grabySiteConfig->requires_login = true;
|
||||
$grabySiteConfig->login_uri = 'http://www.example.com/login';
|
||||
$grabySiteConfig->login_uri = 'http://api.example.com/login';
|
||||
$grabySiteConfig->login_username_field = 'login';
|
||||
$grabySiteConfig->login_password_field = 'password';
|
||||
$grabySiteConfig->login_extra_fields = ['field=value'];
|
||||
|
@ -32,7 +28,7 @@ class GrabySiteConfigBuilderTest extends TestCase
|
|||
|
||||
$grabyConfigBuilderMock
|
||||
->method('buildForHost')
|
||||
->with('example.com')
|
||||
->with('api.example.com')
|
||||
->willReturn($grabySiteConfig);
|
||||
|
||||
$logger = new Logger('foo');
|
||||
|
@ -43,8 +39,8 @@ class GrabySiteConfigBuilderTest extends TestCase
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$siteCrentialRepo->expects($this->once())
|
||||
->method('findOneByHostAndUser')
|
||||
->with('example.com', 1)
|
||||
->method('findOneByHostsAndUser')
|
||||
->with(['api.example.com', '.example.com'], 1)
|
||||
->willReturn(['username' => 'foo', 'password' => 'bar']);
|
||||
|
||||
$user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
|
||||
|
@ -59,18 +55,18 @@ class GrabySiteConfigBuilderTest extends TestCase
|
|||
$tokenStorage = new TokenStorage();
|
||||
$tokenStorage->setToken($token);
|
||||
|
||||
$this->builder = new GrabySiteConfigBuilder(
|
||||
$builder = new GrabySiteConfigBuilder(
|
||||
$grabyConfigBuilderMock,
|
||||
$tokenStorage,
|
||||
$siteCrentialRepo,
|
||||
$logger
|
||||
);
|
||||
|
||||
$config = $this->builder->buildForHost('www.example.com');
|
||||
$config = $builder->buildForHost('api.example.com');
|
||||
|
||||
$this->assertSame('example.com', $config->getHost());
|
||||
$this->assertSame('api.example.com', $config->getHost());
|
||||
$this->assertTrue($config->requiresLogin());
|
||||
$this->assertSame('http://www.example.com/login', $config->getLoginUri());
|
||||
$this->assertSame('http://api.example.com/login', $config->getLoginUri());
|
||||
$this->assertSame('login', $config->getUsernameField());
|
||||
$this->assertSame('password', $config->getPasswordField());
|
||||
$this->assertSame(['field' => 'value'], $config->getExtraFields());
|
||||
|
@ -85,7 +81,6 @@ class GrabySiteConfigBuilderTest extends TestCase
|
|||
|
||||
public function testBuildConfigDoesntExist()
|
||||
{
|
||||
/* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
|
||||
$grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -103,8 +98,8 @@ class GrabySiteConfigBuilderTest extends TestCase
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$siteCrentialRepo->expects($this->once())
|
||||
->method('findOneByHostAndUser')
|
||||
->with('unknown.com', 1)
|
||||
->method('findOneByHostsAndUser')
|
||||
->with(['unknown.com', '.com'], 1)
|
||||
->willReturn(null);
|
||||
|
||||
$user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
|
||||
|
@ -119,14 +114,14 @@ class GrabySiteConfigBuilderTest extends TestCase
|
|||
$tokenStorage = new TokenStorage();
|
||||
$tokenStorage->setToken($token);
|
||||
|
||||
$this->builder = new GrabySiteConfigBuilder(
|
||||
$builder = new GrabySiteConfigBuilder(
|
||||
$grabyConfigBuilderMock,
|
||||
$tokenStorage,
|
||||
$siteCrentialRepo,
|
||||
$logger
|
||||
);
|
||||
|
||||
$config = $this->builder->buildForHost('unknown.com');
|
||||
$config = $builder->buildForHost('unknown.com');
|
||||
|
||||
$this->assertFalse($config);
|
||||
|
||||
|
@ -137,7 +132,6 @@ class GrabySiteConfigBuilderTest extends TestCase
|
|||
|
||||
public function testBuildConfigWithBadExtraFields()
|
||||
{
|
||||
/* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
|
||||
$grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -202,4 +196,121 @@ class GrabySiteConfigBuilderTest extends TestCase
|
|||
|
||||
$this->assertCount(1, $records, 'One log was recorded');
|
||||
}
|
||||
|
||||
public function testBuildConfigUserNotDefined()
|
||||
{
|
||||
$grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$grabyConfigBuilderMock
|
||||
->method('buildForHost')
|
||||
->with('unknown.com')
|
||||
->willReturn(new GrabySiteConfig());
|
||||
|
||||
$logger = new Logger('foo');
|
||||
$handler = new TestHandler();
|
||||
$logger->pushHandler($handler);
|
||||
|
||||
$siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$tokenStorage = new TokenStorage();
|
||||
|
||||
$builder = new GrabySiteConfigBuilder(
|
||||
$grabyConfigBuilderMock,
|
||||
$tokenStorage,
|
||||
$siteCrentialRepo,
|
||||
$logger
|
||||
);
|
||||
|
||||
$config = $builder->buildForHost('unknown.com');
|
||||
|
||||
$this->assertFalse($config);
|
||||
}
|
||||
|
||||
public function dataProviderCredentials()
|
||||
{
|
||||
return [
|
||||
[
|
||||
'host' => 'example.com',
|
||||
],
|
||||
[
|
||||
'host' => 'other.example.com',
|
||||
],
|
||||
[
|
||||
'host' => 'paywall.example.com',
|
||||
'expectedUsername' => 'paywall.example',
|
||||
'expectedPassword' => 'bar',
|
||||
],
|
||||
[
|
||||
'host' => 'api.super.com',
|
||||
'expectedUsername' => '.super',
|
||||
'expectedPassword' => 'bar',
|
||||
],
|
||||
[
|
||||
'host' => '.super.com',
|
||||
'expectedUsername' => '.super',
|
||||
'expectedPassword' => 'bar',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProviderCredentials
|
||||
*/
|
||||
public function testBuildConfigWithDbAccess($host, $expectedUsername = null, $expectedPassword = null)
|
||||
{
|
||||
$grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$grabySiteConfig = new GrabySiteConfig();
|
||||
$grabySiteConfig->requires_login = true;
|
||||
$grabySiteConfig->login_uri = 'http://api.example.com/login';
|
||||
$grabySiteConfig->login_username_field = 'login';
|
||||
$grabySiteConfig->login_password_field = 'password';
|
||||
$grabySiteConfig->login_extra_fields = ['field=value'];
|
||||
$grabySiteConfig->not_logged_in_xpath = '//div[@class="need-login"]';
|
||||
|
||||
$grabyConfigBuilderMock
|
||||
->method('buildForHost')
|
||||
->with($host)
|
||||
->willReturn($grabySiteConfig);
|
||||
|
||||
$user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$user->expects($this->once())
|
||||
->method('getId')
|
||||
->willReturn(1);
|
||||
|
||||
$token = new UsernamePasswordToken($user, 'pass', 'provider');
|
||||
|
||||
$tokenStorage = new TokenStorage();
|
||||
$tokenStorage->setToken($token);
|
||||
|
||||
$logger = new Logger('foo');
|
||||
$handler = new TestHandler();
|
||||
$logger->pushHandler($handler);
|
||||
|
||||
$builder = new GrabySiteConfigBuilder(
|
||||
$grabyConfigBuilderMock,
|
||||
$tokenStorage,
|
||||
$this->getClient()->getContainer()->get('wallabag_core.site_credential_repository'),
|
||||
$logger
|
||||
);
|
||||
|
||||
$config = $builder->buildForHost($host);
|
||||
|
||||
if (null === $expectedUsername && null === $expectedPassword) {
|
||||
$this->assertFalse($config);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$this->assertSame($expectedUsername, $config->getUsername());
|
||||
$this->assertSame($expectedPassword, $config->getPassword());
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue