mirror of
https://github.com/wallabag/wallabag.git
synced 2025-06-27 16:36:00 +00:00
Use Graby's http headers configuration for the authentication request
This commit is contained in:
parent
b905a2c856
commit
d58549472c
5 changed files with 96 additions and 1 deletions
|
@ -85,6 +85,7 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder
|
||||||
'notLoggedInXpath' => $config->not_logged_in_xpath ?: null,
|
'notLoggedInXpath' => $config->not_logged_in_xpath ?: null,
|
||||||
'username' => $credentials['username'],
|
'username' => $credentials['username'],
|
||||||
'password' => $credentials['password'],
|
'password' => $credentials['password'],
|
||||||
|
'httpHeaders' => $config->http_header,
|
||||||
];
|
];
|
||||||
|
|
||||||
$config = new SiteConfig($parameters);
|
$config = new SiteConfig($parameters);
|
||||||
|
|
|
@ -30,7 +30,7 @@ class LoginFormAuthenticator
|
||||||
$siteConfig->getPasswordField() => $siteConfig->getPassword(),
|
$siteConfig->getPasswordField() => $siteConfig->getPassword(),
|
||||||
] + $this->getExtraFields($siteConfig);
|
] + $this->getExtraFields($siteConfig);
|
||||||
|
|
||||||
$this->browser->request('POST', $siteConfig->getLoginUri(), $postFields);
|
$this->browser->request('POST', $siteConfig->getLoginUri(), $postFields, [], $this->getHttpHeaders($siteConfig));
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
@ -73,6 +73,20 @@ class LoginFormAuthenticator
|
||||||
return \count($loggedIn) > 0;
|
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.
|
* Returns extra fields from the configuration.
|
||||||
* Evaluates any field value that is an expression language string.
|
* Evaluates any field value that is an expression language string.
|
||||||
|
|
|
@ -70,6 +70,13 @@ class SiteConfig
|
||||||
*/
|
*/
|
||||||
protected $password;
|
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.
|
* SiteConfig constructor. Sets the properties by name given a hash.
|
||||||
*
|
*
|
||||||
|
@ -260,4 +267,16 @@ class SiteConfig
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getHttpHeaders(): array
|
||||||
|
{
|
||||||
|
return $this->httpHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setHttpHeaders(array $httpHeaders): self
|
||||||
|
{
|
||||||
|
$this->httpHeaders = $httpHeaders;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,4 +183,62 @@ class LoginFormAuthenticatorTest extends TestCase
|
||||||
|
|
||||||
$this->assertTrue($loginRequired);
|
$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,6 +37,9 @@ class SiteConfigTest extends TestCase
|
||||||
],
|
],
|
||||||
'username' => 'johndoe',
|
'username' => 'johndoe',
|
||||||
'password' => 'unkn0wn',
|
'password' => 'unkn0wn',
|
||||||
|
'httpHeaders' => [
|
||||||
|
'user-agent' => 'Wallabag (Guzzle/5)',
|
||||||
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->assertInstanceOf(SiteConfig::class, $config);
|
$this->assertInstanceOf(SiteConfig::class, $config);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue