188 lines
6.3 KiB
PHP
188 lines
6.3 KiB
PHP
|
<?php
|
||
|
|
||
|
try {
|
||
|
$server = $server_dir->get_server_by_hostname($router->vars['hostname']);
|
||
|
$server_admin = $active_user->admin_of($server);
|
||
|
$account_admin = false;
|
||
|
if(!$server_admin && !$active_user->admin) {
|
||
|
try {
|
||
|
$account = $server->get_account_by_name($router->vars['account']);
|
||
|
$account_admin = $active_user->admin_of($account);
|
||
|
} catch(ServerAccountNotFoundException $e) {
|
||
|
}
|
||
|
if(!$account_admin) {
|
||
|
require('views/error403.php');
|
||
|
die;
|
||
|
}
|
||
|
} else {
|
||
|
$account = $server->get_account_by_name($router->vars['account']);
|
||
|
}
|
||
|
} catch(ServerNotFoundException $e) {
|
||
|
require('views/error404.php');
|
||
|
die;
|
||
|
} catch(ServerAccountNotFoundException $e) {
|
||
|
require('views/error404.php');
|
||
|
die;
|
||
|
}
|
||
|
$account_access = $account->list_access();
|
||
|
$account_access_requests = $account->list_access_requests();
|
||
|
$account_remote_access = $account->list_remote_access();
|
||
|
$account_groups = $account->list_group_membership();
|
||
|
$account_admins = $account->list_admins();
|
||
|
$pubkeys = $account->list_public_keys();
|
||
|
if(isset($_POST['add_access']) && ($server_admin || $account_admin || $active_user->admin)) {
|
||
|
if(isset($_POST['username'])) {
|
||
|
try {
|
||
|
$entity = $user_dir->get_user_by_uid(trim($_POST['username']));
|
||
|
} catch(UserNotFoundException $e) {
|
||
|
$content = new PageSection('user_not_found');
|
||
|
}
|
||
|
} elseif(isset($_POST['account'])) {
|
||
|
try {
|
||
|
$remoteserver = $server_dir->get_server_by_hostname(trim($_POST['hostname']));
|
||
|
$entity = $remoteserver->get_account_by_name(trim($_POST['account']));
|
||
|
} catch(ServerNotFoundException $e) {
|
||
|
$content = new PageSection('server_not_found');
|
||
|
} catch(ServerAccountNotFoundException $e) {
|
||
|
$content = new PageSection('server_account_not_found');
|
||
|
}
|
||
|
} elseif(isset($_POST['group'])) {
|
||
|
try {
|
||
|
$entity = $group_dir->get_group_by_name(trim($_POST['group']));
|
||
|
} catch(GroupNotFoundException $e) {
|
||
|
$content = new PageSection('group_not_found');
|
||
|
}
|
||
|
}
|
||
|
if(isset($entity)) {
|
||
|
if($_POST['add_access'] == '2') {
|
||
|
$options = array();
|
||
|
if(isset($_POST['access_option'])) {
|
||
|
foreach($_POST['access_option'] as $k => $v) {
|
||
|
if(isset($v['enabled'])) {
|
||
|
$option = new AccessOption();
|
||
|
$option->option = $k;
|
||
|
if(isset($v['value'])) {
|
||
|
$option->value = $v['value'];
|
||
|
} else {
|
||
|
$option->value = null;
|
||
|
}
|
||
|
$options[] = $option;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$account->add_access($entity, $options);
|
||
|
redirect('#access');
|
||
|
} else {
|
||
|
$content = new PageSection('access_options');
|
||
|
$content->set('entity', $account);
|
||
|
$content->set('remote_entity', $entity);
|
||
|
$content->set('mode', 'create');
|
||
|
}
|
||
|
}
|
||
|
} elseif(isset($_POST['delete_access']) && ($server_admin || $account_admin || $active_user->admin)) {
|
||
|
foreach($account_access as $access) {
|
||
|
if($access->id == $_POST['delete_access']) {
|
||
|
$access_to_delete = $access;
|
||
|
}
|
||
|
}
|
||
|
if(isset($access_to_delete)) {
|
||
|
$account->delete_access($access_to_delete);
|
||
|
}
|
||
|
redirect('#access');
|
||
|
} elseif(isset($_POST['approve_access']) && ($server_admin || $account_admin || $active_user->admin)) {
|
||
|
foreach($account_access_requests as $request) {
|
||
|
if($request->id == $_POST['approve_access']) {
|
||
|
$request_to_approve = $request;
|
||
|
}
|
||
|
}
|
||
|
if(isset($request_to_approve)) {
|
||
|
$account->approve_access_request($request_to_approve);
|
||
|
redirect('#access');
|
||
|
}
|
||
|
} elseif(isset($_POST['reject_access']) && ($server_admin || $account_admin || $active_user->admin)) {
|
||
|
foreach($account_access_requests as $request) {
|
||
|
if($request->id == $_POST['reject_access']) {
|
||
|
$request_to_reject = $request;
|
||
|
}
|
||
|
}
|
||
|
if(isset($request_to_reject)) {
|
||
|
$sync_status = $account->sync_status;
|
||
|
$account->reject_access_request($request_to_reject);
|
||
|
// Check to see if account still exists
|
||
|
try {
|
||
|
$account = $server->get_account_by_name($router->vars['account']);
|
||
|
redirect('#access');
|
||
|
} catch(ServerAccountNotFoundException $e) {
|
||
|
redirect('/servers/'.urlencode($server->hostname).'#accounts');
|
||
|
}
|
||
|
}
|
||
|
} elseif(isset($_POST['add_public_key']) && ($server_admin || $account_admin || $active_user->admin)) {
|
||
|
try {
|
||
|
$public_key = new PublicKey;
|
||
|
$public_key->import($_POST['add_public_key'], null, isset($_POST['force']) && $active_user->admin);
|
||
|
$account->add_public_key($public_key);
|
||
|
redirect('#pubkeys');
|
||
|
} catch(InvalidArgumentException $e) {
|
||
|
$content = new PageSection('key_upload_fail');
|
||
|
switch($e->getMessage()) {
|
||
|
case 'Insufficient bits in public key':
|
||
|
$content->set('message', "The public key you submitted is of insufficient strength; it must be at least 4096 bits.");
|
||
|
break;
|
||
|
default:
|
||
|
$content->set('message', "The public key you submitted doesn't look valid.");
|
||
|
}
|
||
|
}
|
||
|
} elseif(isset($_POST['delete_public_key']) && ($server_admin || $account_admin || $active_user->admin)) {
|
||
|
foreach($pubkeys as $pubkey) {
|
||
|
if($pubkey->id == $_POST['delete_public_key']) {
|
||
|
$key_to_delete = $pubkey;
|
||
|
}
|
||
|
}
|
||
|
if(isset($key_to_delete)) {
|
||
|
$account->delete_public_key($key_to_delete);
|
||
|
}
|
||
|
redirect('#pubkeys');
|
||
|
} elseif(isset($_POST['add_admin']) && ($server_admin || $active_user->admin)) {
|
||
|
try {
|
||
|
$user = $user_dir->get_user_by_uid($_POST['user_name']);
|
||
|
} catch(UserNotFoundException $e) {
|
||
|
$content = new PageSection('user_not_found');
|
||
|
}
|
||
|
if(isset($user)) {
|
||
|
$account->add_admin($user);
|
||
|
redirect('#admins');
|
||
|
}
|
||
|
} elseif(isset($_POST['delete_admin']) && ($server_admin || $active_user->admin)) {
|
||
|
foreach($account_admins as $admin) {
|
||
|
if($admin->id == $_POST['delete_admin']) {
|
||
|
$admin_to_delete = $admin;
|
||
|
}
|
||
|
}
|
||
|
if(isset($admin_to_delete)) {
|
||
|
$account->delete_admin($admin_to_delete);
|
||
|
}
|
||
|
redirect('#admins');
|
||
|
} else {
|
||
|
$content = new PageSection('serveraccount');
|
||
|
$content->set('server', $server);
|
||
|
$content->set('account', $account);
|
||
|
$content->set('access', $account_access);
|
||
|
$content->set('access_requests', $account_access_requests);
|
||
|
$content->set('pubkeys', $pubkeys);
|
||
|
$content->set('remote_access', $account_remote_access);
|
||
|
$content->set('group_membership', $account_groups);
|
||
|
$content->set('admins', $account_admins);
|
||
|
$content->set('admin', $active_user->admin);
|
||
|
$content->set('log', $account->get_log());
|
||
|
$content->set('server_admin', $server_admin);
|
||
|
$content->set('all_users', $user_dir->list_users());
|
||
|
$content->set('all_servers', $server_dir->list_servers());
|
||
|
$content->set('all_groups', $group_dir->list_groups());
|
||
|
}
|
||
|
|
||
|
$page = new PageSection('base');
|
||
|
$page->set('title', $account->name.'@'.$server->hostname);
|
||
|
$page->set('content', $content);
|
||
|
$page->set('alerts', $active_user->pop_alerts());
|
||
|
echo $page->generate();
|