Skip to content

Commit 4c9bc14

Browse files
committed
add special handling to let authorize call work when logging in, without disabling content security policy completely
1 parent 4534167 commit 4c9bc14

5 files changed

Lines changed: 32 additions & 2 deletions

File tree

solid/appinfo/routes.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
['name' => 'page#handleRevoke', 'url' => '/revoke/{clientId}', 'verb' => 'GET'],
1515
['name' => 'page#handleApproval', 'url' => '/sharing/{clientId}', 'verb' => 'POST'],
1616
['name' => 'page#dataJson', 'url' => '/@{userId}/data.json', 'verb' => 'GET' ],
17+
['name' => 'page#customscheme', 'url' => '/customscheme', 'verb' => 'GET'],
1718

1819
['name' => 'server#cors', 'url' => '/{path}', 'verb' => 'OPTIONS', 'requirements' => array('path' => '.+') ],
1920
['name' => 'server#authorize', 'url' => '/authorize', 'verb' => 'GET'],

solid/js/customscheme.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
console.log(document.location.href);
2+
let newUrl = document.location.href.replace("customscheme", "authorize");
3+
newUrl += "&customscheme=1";
4+
document.location.href = newUrl;

solid/lib/Controller/PageController.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,18 +95,29 @@ public function approval($clientId) {
9595
"returnUrl" => $_GET['returnUrl'],
9696
);
9797
$templateResponse = new TemplateResponse('solid', 'sharing', $params);
98+
9899
$policy = new ContentSecurityPolicy();
99100
$policy->addAllowedStyleDomain("data:");
100101

101102
$parsedOrigin = parse_url($clientRegistration['redirect_uris'][0]);
102-
$origin = $parsedOrigin['scheme'] . "://" . $parsedOrigin['host'];
103+
$origin = $parsedOrigin['host'];
103104
if ($origin) {
104-
$policy->addAllowedFormActionDomain($origin);
105+
$policy->addAllowedFormActionDomain($parsedOrigin['scheme'] . "://" . $origin);
105106
$templateResponse->setContentSecurityPolicy($policy);
106107
}
107108
return $templateResponse;
108109
}
109110

111+
/**
112+
* @PublicPage
113+
* @NoAdminRequired
114+
* @NoCSRFRequired
115+
*/
116+
public function customscheme() {
117+
$templateResponse = new TemplateResponse('solid', 'customscheme');
118+
return $templateResponse;
119+
}
120+
110121
/**
111122
* @PublicPage
112123
* @NoAdminRequired

solid/lib/Controller/ServerController.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,17 @@ public function authorize() {
220220
return $result; // ->addHeader('Access-Control-Allow-Origin', '*');
221221
}
222222

223+
$parsedOrigin = parse_url($clientRegistration['redirect_uris'][0]);
224+
if ($parsedOrigin['scheme'] != "https" && !isset($_GET['customscheme'])) {
225+
$result = new JSONResponse('Custom schema');
226+
$result->setStatus(302);
227+
$originalRequest = parse_url($_SERVER['REQUEST_URI']);
228+
error_log("CUSTOM SCHEME");
229+
$customSchemeUrl = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkToRoute("solid.page.customscheme")) . ($originalRequest['query'] ? "?" . $originalRequest['query'] . "&customscheme=" . $parsedOrigin['scheme'] : '');
230+
$result->addHeader("Location", $customSchemeUrl);
231+
return $result;
232+
}
233+
223234
$user = new \Pdsinterop\Solid\Auth\Entity\User();
224235
$user->setIdentifier($this->getProfilePage());
225236

solid/templates/customscheme.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
script('solid', 'customscheme');
3+
?>

0 commit comments

Comments
 (0)