Skip to content

Commit 27006a1

Browse files
committed
Add ability for SKA administrators to revoke / delete keys of other users
1 parent c426848 commit 27006a1

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

templates/user.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
<?php if(count($this->get('active_user_keys')) == 0) { ?>
4444
<p><?php out($this->get('user')->name)?> has no active public keys.</p>
4545
<?php } else { ?>
46+
<?php if($this->get('admin')) { ?>
47+
<form method="post" action="<?php outurl($this->data->relative_request_url) ?>">
48+
<?php out($this->get('active_user')->get_csrf_field(), ESC_NONE) ?>
49+
<?php } ?>
4650
<div class="ska-scroll-container">
4751
<table class="table">
4852
<thead>
@@ -53,6 +57,9 @@
5357
<th>Creation Date</th>
5458
<th>Size</th>
5559
<th>Comment</th>
60+
<?php if($this->get('admin')) { ?>
61+
<th>Actions</th>
62+
<?php } ?>
5663
</tr>
5764
</thead>
5865
<tbody>
@@ -72,12 +79,20 @@
7279
<td><?php out($key->format_creation_date()) ?></td>
7380
<td><?php out($key->keysize) ?></td>
7481
<td><?php out($key->comment) ?></td>
82+
<?php if($this->get('admin')) { ?>
83+
<td>
84+
<button type="submit" name="delete_public_key" value="<?php out($key->id) ?>" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-trash"></span> Delete public key</button>
85+
</td>
86+
<?php } ?>
7587
</tr>
7688
<?php } ?>
7789
</tbody>
7890
</table>
7991
</div>
92+
<?php if($this->get('admin')) { ?>
93+
</form>
8094
<?php } ?>
95+
<?php } ?>
8196
<?php
8297
$num_deleted = $this->get('user')->count_deleted_public_keys();
8398
if ($num_deleted > 0) {

views/user.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
$admined_servers = $user->list_admined_servers(array('pending_requests'));
2727
$admined_groups = $user->list_admined_groups(array('members', 'admins'));
2828
$groups = $user->list_group_memberships(array('members', 'admins'));
29+
$active_user_keys = $user->list_public_keys(null, null, false);
2930
usort($admined_servers, function($a, $b) {return strnatcasecmp($a->hostname, $b->hostname);});
3031

3132
if(isset($_POST['reassign_servers']) && is_array($_POST['servers']) && $active_user && $active_user->admin) {
@@ -47,6 +48,21 @@
4748
}
4849
redirect('#details');
4950
}
51+
} elseif(isset($_POST['delete_public_key']) && $active_user && $active_user->admin) {
52+
$delete_key_raw = trim($_POST['delete_public_key']);
53+
$delete_key_id = filter_var($delete_key_raw, FILTER_VALIDATE_INT);
54+
55+
if($delete_key_id !== false) {
56+
$delete_key_id = (int)$delete_key_id;
57+
foreach($active_user_keys as $public_key) {
58+
if((int)$public_key->id === $delete_key_id) {
59+
$user->delete_public_key($public_key);
60+
break;
61+
}
62+
}
63+
}
64+
65+
redirect('#details');
5066
} elseif(isset($_POST['edit_user']) && $active_user && $active_user->admin) {
5167
$user->force_disable = $_POST['force_disable'];
5268
$user->get_details_from_ldap();
@@ -59,8 +75,8 @@
5975
$content->set('user_admined_servers', $admined_servers);
6076
$content->set('user_admined_groups', $admined_groups);
6177
$content->set('user_groups', $groups);
62-
$content->set('active_user_keys', $user->list_public_keys(null, null, false));
63-
$content->set('admin', ($active_user && $active_user->admin));
78+
$content->set('active_user_keys', $active_user_keys);
79+
$content->set('admin', ($active_user && $active_user->admin));
6480
}
6581

6682
$page = new PageSection('base');

views/user_pubkeys.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@
4747
} else {
4848
$content->set('message', "The public key you submitted doesn't look valid.");
4949
}
50+
} catch(BadMethodCallException $e) {
51+
global $config;
52+
$content = new PageSection('key_upload_fail');
53+
$content->set('message', "Unable to add public key: " . $e->getMessage());
5054
}
5155
}
5256

0 commit comments

Comments
 (0)