Merge pull request #12299 from nextcloud/backport/12177/stable14
[14] Use the proper server for the apptoken flow login
This commit is contained in:
commit
e10b7c8c33
|
@ -197,7 +197,7 @@ class ClientFlowLoginController extends Controller {
|
|||
'instanceName' => $this->defaults->getName(),
|
||||
'urlGenerator' => $this->urlGenerator,
|
||||
'stateToken' => $stateToken,
|
||||
'serverHost' => $this->request->getServerHost(),
|
||||
'serverHost' => $this->getServerPath(),
|
||||
'oauthState' => $this->session->get('oauth.state'),
|
||||
],
|
||||
'guest'
|
||||
|
@ -235,7 +235,7 @@ class ClientFlowLoginController extends Controller {
|
|||
'instanceName' => $this->defaults->getName(),
|
||||
'urlGenerator' => $this->urlGenerator,
|
||||
'stateToken' => $stateToken,
|
||||
'serverHost' => $this->request->getServerHost(),
|
||||
'serverHost' => $this->getServerPath(),
|
||||
'oauthState' => $this->session->get('oauth.state'),
|
||||
],
|
||||
'guest'
|
||||
|
@ -345,27 +345,7 @@ class ClientFlowLoginController extends Controller {
|
|||
);
|
||||
$this->session->remove('oauth.state');
|
||||
} else {
|
||||
$serverPostfix = '';
|
||||
|
||||
if (strpos($this->request->getRequestUri(), '/index.php') !== false) {
|
||||
$serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/index.php'));
|
||||
} else if (strpos($this->request->getRequestUri(), '/login/flow') !== false) {
|
||||
$serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/login/flow'));
|
||||
}
|
||||
|
||||
$protocol = $this->request->getServerProtocol();
|
||||
|
||||
if ($protocol !== "https") {
|
||||
$xForwardedProto = $this->request->getHeader('X-Forwarded-Proto');
|
||||
$xForwardedSSL = $this->request->getHeader('X-Forwarded-Ssl');
|
||||
if ($xForwardedProto === 'https' || $xForwardedSSL === 'on') {
|
||||
$protocol = 'https';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$serverPath = $protocol . "://" . $this->request->getServerHost() . $serverPostfix;
|
||||
$redirectUri = 'nc://login/server:' . $serverPath . '&user:' . urlencode($loginName) . '&password:' . urlencode($token);
|
||||
$redirectUri = 'nc://login/server:' . $this->getServerPath() . '&user:' . urlencode($loginName) . '&password:' . urlencode($token);
|
||||
|
||||
// Clear the token from the login here
|
||||
$this->tokenProvider->invalidateToken($sessionId);
|
||||
|
@ -373,4 +353,26 @@ class ClientFlowLoginController extends Controller {
|
|||
|
||||
return new Http\RedirectResponse($redirectUri);
|
||||
}
|
||||
|
||||
private function getServerPath(): string {
|
||||
$serverPostfix = '';
|
||||
|
||||
if (strpos($this->request->getRequestUri(), '/index.php') !== false) {
|
||||
$serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/index.php'));
|
||||
} else if (strpos($this->request->getRequestUri(), '/login/flow') !== false) {
|
||||
$serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/login/flow'));
|
||||
}
|
||||
|
||||
$protocol = $this->request->getServerProtocol();
|
||||
|
||||
if ($protocol !== "https") {
|
||||
$xForwardedProto = $this->request->getHeader('X-Forwarded-Proto');
|
||||
$xForwardedSSL = $this->request->getHeader('X-Forwarded-Ssl');
|
||||
if ($xForwardedProto === 'https' || $xForwardedSSL === 'on') {
|
||||
$protocol = 'https';
|
||||
}
|
||||
}
|
||||
|
||||
return $protocol . "://" . $this->request->getServerHost() . $serverPostfix;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -162,6 +162,9 @@ class ClientFlowLoginControllerTest extends TestCase {
|
|||
->expects($this->once())
|
||||
->method('getServerHost')
|
||||
->willReturn('example.com');
|
||||
$this->request
|
||||
->method('getServerProtocol')
|
||||
->willReturn('https');
|
||||
|
||||
$expected = new TemplateResponse(
|
||||
'core',
|
||||
|
@ -172,7 +175,7 @@ class ClientFlowLoginControllerTest extends TestCase {
|
|||
'instanceName' => 'ExampleCloud',
|
||||
'urlGenerator' => $this->urlGenerator,
|
||||
'stateToken' => 'StateToken',
|
||||
'serverHost' => 'example.com',
|
||||
'serverHost' => 'https://example.com',
|
||||
'oauthState' => 'OauthStateToken',
|
||||
],
|
||||
'guest'
|
||||
|
@ -218,6 +221,9 @@ class ClientFlowLoginControllerTest extends TestCase {
|
|||
->expects($this->once())
|
||||
->method('getServerHost')
|
||||
->willReturn('example.com');
|
||||
$this->request
|
||||
->method('getServerProtocol')
|
||||
->willReturn('https');
|
||||
|
||||
$expected = new TemplateResponse(
|
||||
'core',
|
||||
|
@ -228,7 +234,7 @@ class ClientFlowLoginControllerTest extends TestCase {
|
|||
'instanceName' => 'ExampleCloud',
|
||||
'urlGenerator' => $this->urlGenerator,
|
||||
'stateToken' => 'StateToken',
|
||||
'serverHost' => 'example.com',
|
||||
'serverHost' => 'https://example.com',
|
||||
'oauthState' => 'OauthStateToken',
|
||||
],
|
||||
'guest'
|
||||
|
|
Loading…
Reference in New Issue