Skip to content

Commit d2467f5

Browse files
authored
Merge pull request #169 from pdsinterop/feature/blocking
Feature: allow blocking clients from the admin panel
2 parents d5ad177 + e866ba9 commit d2467f5

File tree

5 files changed

+33
-10
lines changed

5 files changed

+33
-10
lines changed

solid/css/settings-admin.css

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
vertical-align: top;
44
display: block;
55
}
6-
#solid-admin input {
7-
width: 500px;
8-
}
96
#solid-admin textarea {
107
width: 500px;
118
height: 240px;

solid/js/settings-admin.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
$(document).ready(function() {
2-
32
$('#solid-private-key').change(function(el) {
4-
OCP.AppConfig.setValue('solid','privateKey',this.value);
3+
OCP.AppConfig.setValue('solid', 'privateKey', this.value);
54
});
65

76
$('#solid-encryption-key').change(function(el) {
8-
OCP.AppConfig.setValue('solid','encryptionKey',this.value);
7+
OCP.AppConfig.setValue('solid', 'encryptionKey', this.value);
8+
});
9+
10+
$('.solid-client-block').change(function(el) {
11+
let blocked = this.checked ? true : false;
12+
let keyName = 'client-' + this.getAttribute("data-client");
13+
let clientConfig = OCP.AppConfig.getValue('solid', keyName, "{}", {
14+
"success" : function(xmlData) {
15+
let clientJson = xmlData.querySelector('data > data').textContent;
16+
let clientConfig = JSON.parse(clientJson);
17+
clientConfig.blocked = blocked;
18+
OCP.AppConfig.setValue('solid', keyName, JSON.stringify(clientConfig));
19+
}
20+
});
921
});
10-
1122
});

solid/lib/BaseServerConfig.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ public function getClients() {
9090
$clientRegistration = json_decode($this->config->getAppValue('solid', $key, '{}'), true);
9191
$clients[] = [
9292
"clientId" => $matches[1],
93-
"clientName" => $clientRegistration['client_name']
93+
"clientName" => $clientRegistration['client_name'],
94+
"clientBlocked" => $clientRegistration['blocked']
9495
];
9596
}
9697
}
@@ -159,6 +160,9 @@ public function saveClientRegistration($origin, $clientData) {
159160
$clientData['redirect_uris'][] = $uri;
160161
}
161162
$clientData['redirect_uris'] = array_unique($clientData['redirect_uris']);
163+
if (isset($existingRegistration['blocked'])) {
164+
$clientData['blocked'] = $existingRegistration['blocked'];
165+
}
162166
}
163167

164168
$clientData['client_id'] = $originHash;

solid/lib/Controller/ServerController.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,14 +196,21 @@ public function authorize() {
196196
$getVars['redirect_uri']
197197
)
198198
);
199-
$clientId = $this->config->saveClientRegistration($origin, $clientData);
200-
$clientId = $this->config->saveClientRegistration($getVars['client_id'], $clientData);
199+
$clientId = $this->config->saveClientRegistration($origin, $clientData)['client_id'];
200+
$clientId = $this->config->saveClientRegistration($getVars['client_id'], $clientData)['client_id'];
201201
$returnUrl = $getVars['redirect_uri'];
202202
} else {
203203
$clientId = $getVars['client_id'];
204204
$returnUrl = $_SERVER['REQUEST_URI'];
205205
}
206206

207+
$clientRegistration = $this->config->getClientRegistration($clientId);
208+
if (isset($clientRegistration['blocked']) && ($clientRegistration['blocked'] === true)) {
209+
$result = new JSONResponse('Unauthorized client');
210+
$result->setStatus(403);
211+
return $result;
212+
}
213+
207214
$approval = $this->checkApproval($clientId);
208215
if (!$approval) {
209216
$result = new JSONResponse('Approval required');

solid/templates/admin.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<?php
2+
// phpcs:ignoreFile
3+
// Let codesniffer ignore this file, as we are heavily mixing php and HTML together.
24
script('solid', 'settings-admin');
35
style('solid', 'settings-admin');
46
?>
@@ -22,13 +24,15 @@
2224
<tr>
2325
<th>Client ID</th>
2426
<th>Client name</th>
27+
<th>Block</th>
2528
</tr>
2629
</thead>
2730
<tbody>
2831
<?php foreach ($_['clients'] as $client => $registration) { ?>
2932
<tr>
3033
<td><?php p($registration['clientId']); ?></td>
3134
<td><?php p($registration['clientName']); ?></td>
35+
<td><input type="checkbox" class="solid-client-block" data-client="<?php p($registration['clientId']); ?>"<?php if ($registration['clientBlocked']) { echo " checked";} ?> value=1></td>
3236
</tr>
3337
<?php } ?>
3438
</tbody>

0 commit comments

Comments
 (0)