mirror of https://github.com/MISP/MISP
commit
c8274c476e
|
@ -337,6 +337,7 @@ class ACLComponent extends Component
|
|||
'getInstanceUUID' => array('perm_sync'),
|
||||
'getPyMISPVersion' => array('*'),
|
||||
'getSubmodulesStatus' => array('perm_site_admin'),
|
||||
'getSubmoduleQuickUpdateForm' => array('perm_site_admin'),
|
||||
'getVersion' => array('*'),
|
||||
'index' => array('OR' => array('perm_sync', 'perm_admin')),
|
||||
'postTest' => array('perm_sync'),
|
||||
|
|
|
@ -1542,6 +1542,11 @@ class ServersController extends AppController
|
|||
}
|
||||
}
|
||||
|
||||
public function getSubmoduleQuickUpdateForm($submodule_path=false) {
|
||||
$this->set('submodule', base64_decode($submodule_path));
|
||||
$this->render('ajax/submodule_quick_update_form');
|
||||
}
|
||||
|
||||
public function updateSubmodule()
|
||||
{
|
||||
if (!$this->_isSiteAdmin()) {
|
||||
|
|
|
@ -4611,8 +4611,10 @@ class Server extends AppModel
|
|||
'currentTimestamp' => exec(sprintf('cd %s; git log -1 --pretty=format:%%ct', $path)),
|
||||
'remoteTimestamp' => exec(sprintf('cd %s; git show -s --pretty=format:%%ct %s', $path, $superproject_submodule_commit_id)),
|
||||
'remote' => $superproject_submodule_commit_id,
|
||||
'upToDate' => ''
|
||||
'upToDate' => '',
|
||||
'isReadable' => is_readable($path) && is_readable($path . '/.git'),
|
||||
);
|
||||
|
||||
if (!empty($status['remote'])) {
|
||||
if ($status['remote'] == $status['current']) {
|
||||
$status['upToDate'] = 'same';
|
||||
|
@ -4624,7 +4626,12 @@ class Server extends AppModel
|
|||
} else {
|
||||
$status['upToDate'] = 'error';
|
||||
}
|
||||
$status['timeDiff'] = (new DateTime('@' . $status['remoteTimestamp']))->diff(new DateTime('@' . $status['currentTimestamp']));
|
||||
|
||||
if ($status['isReadable'] && !empty($status['remoteTimestamp']) && !empty($status['currentTimestamp'])) {
|
||||
$status['timeDiff'] = (new DateTime('@' . $status['remoteTimestamp']))->diff(new DateTime('@' . $status['currentTimestamp']));
|
||||
} else {
|
||||
$status['upToDate'] = 'error';
|
||||
}
|
||||
}
|
||||
return $status;
|
||||
}
|
||||
|
@ -4632,17 +4639,17 @@ class Server extends AppModel
|
|||
public function updateSubmodule($submodule_name=false) {
|
||||
$path = APP . '../';
|
||||
if ($submodule_name == false) {
|
||||
$command = sprintf('cd %s; git submodule update', $path);
|
||||
exec($command, $output);
|
||||
$command = sprintf('cd %s; git submodule update 2>&1', $path);
|
||||
exec($command, $output, $return_code);
|
||||
$output = implode("\n", $output);
|
||||
$res = array('status' => true, 'output' => $output);
|
||||
$res = array('status' => ($return_code==0 ? true : false), 'output' => $output);
|
||||
} else if ($this->_isAcceptedSubmodule($submodule_name)) {
|
||||
$command = sprintf('cd %s; git submodule update -- %s', $path, $submodule_name);
|
||||
exec($command, $output);
|
||||
$command = sprintf('cd %s; git submodule update -- %s 2>&1', $path, $submodule_name);
|
||||
exec($command, $output, $return_code);
|
||||
$output = implode("\n", $output);
|
||||
$res = array('status' => true, 'output' => $output);
|
||||
$res = array('status' => ($return_code==0 ? true : false), 'output' => $output);
|
||||
} else {
|
||||
$res = array('status' => false);
|
||||
$res = array('status' => false, 'output' => __('Invalid submodule.'));
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
|
|
@ -368,10 +368,14 @@
|
|||
});
|
||||
|
||||
$('#refreshSubmoduleStatus').click(function() { updateSubModulesStatus(); });
|
||||
function updateSubModulesStatus() {
|
||||
function updateSubModulesStatus(message) {
|
||||
$('#divSubmoduleVersions').empty().append('<it class="fa fa-spin fa-spinner" style="font-size: large; left: 50%; top: 50%;"></it>');
|
||||
$.get('<?php echo $baseurl . '/servers/getSubmodulesStatus/'; ?>', function(html){
|
||||
$('#divSubmoduleVersions').html(html);
|
||||
if (message !== undefined) {
|
||||
$('#submoduleGitResultDiv').show();
|
||||
$('#submoduleGitResult').text(message);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -37,7 +37,11 @@
|
|||
break;
|
||||
case 'error':
|
||||
$class = 'error bold';
|
||||
$versionText = __('Could not retrieve version from github');
|
||||
if (!$status['isReadable']) {
|
||||
$versionText = __('Invalid file permission.');
|
||||
} else {
|
||||
$versionText = __('Could not retrieve version');
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$class = '';
|
||||
|
@ -49,13 +53,10 @@
|
|||
<td><?php echo h($submodule) ?></td>
|
||||
<td><?php echo h($status['current']) ?></td>
|
||||
<td><?php echo h($versionText) ?></td>
|
||||
<td>
|
||||
<td class="updateActionCell">
|
||||
<?php
|
||||
if ($status['upToDate'] != 'same') {
|
||||
echo $this->Form->create('Server', array('url' => array('action' => 'updateSubmodule'), 'div' => false, 'style' => 'margin: 0px; display: inline-block;'));
|
||||
echo $this->Form->hidden('submodule', array('value' => h($submodule)));
|
||||
echo $this->Form->end();
|
||||
echo '<it class="fas fa-sync useCursorPointer" title="' . __('Update submodule') . '" aria-label="Update" onclick="submitSubmoduleUpdate(this);"></it>';
|
||||
if ($status['upToDate'] != 'same' && $status['isReadable']) {
|
||||
echo '<it class="fas fa-sync useCursorPointer" title="' . __('Update submodule') . '" aria-label="Update" data-submodule="' . h($submodule) . '" onclick="submitSubmoduleUpdate(this);"></it>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
@ -63,3 +64,9 @@
|
|||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="submoduleGitResultDiv" class="hidden">
|
||||
<strong><?php echo _('Update result:'); ?></strong>
|
||||
<div class="apply_css_arrow">
|
||||
<pre id="submoduleGitResult" class="green bold" style="margin-left: 10px;"></pre>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
echo $this->Form->create('Server', array(
|
||||
'id' => 'form_update_' . h($submodule),
|
||||
'url' => array('action' => 'updateSubmodule'),
|
||||
'div' => false,
|
||||
'style' => 'margin: 0px; display: inline-block;')
|
||||
);
|
||||
echo $this->Form->hidden('Server.submodule', array('value' => h($submodule)));
|
||||
echo $this->Form->end();
|
||||
?>
|
|
@ -3807,25 +3807,43 @@ function submitMISPUpdate() {
|
|||
|
||||
function submitSubmoduleUpdate(clicked) {
|
||||
var $clicked = $(clicked);
|
||||
var $form = $clicked.parent().find('form');
|
||||
var formData = $form.serialize();
|
||||
var submodule_path = $clicked.data('submodule');
|
||||
$.ajax({
|
||||
beforeSend: function (XMLHttpRequest) {
|
||||
$clicked.addClass('fa-spin');
|
||||
},
|
||||
data: formData,
|
||||
success:function (data, textStatus) {
|
||||
if (data.output !== '') {
|
||||
showMessage('success', data.output);
|
||||
}
|
||||
updateSubModulesStatus();
|
||||
},
|
||||
complete:function() {
|
||||
$clicked.removeClass('fa-spin');
|
||||
},
|
||||
type:"post",
|
||||
dataType:"html",
|
||||
cache: false,
|
||||
url:$form.attr('action'),
|
||||
success:function (formHTML, textStatus) {
|
||||
var $form = $(formHTML);
|
||||
$('body').append($form);
|
||||
var formData = $form.serialize();
|
||||
$.ajax({
|
||||
data: formData,
|
||||
success:function (data, textStatus) {
|
||||
if (data.status) {
|
||||
updateSubModulesStatus(data.output);
|
||||
} else {
|
||||
showMessage('error', 'Something went wrong');
|
||||
$('#submoduleGitResultDiv').show();
|
||||
$('#submoduleGitResult').removeClass('green').addClass('red').text(data.output);
|
||||
}
|
||||
},
|
||||
error: function (data) {
|
||||
showMessage('error', 'Something went wrong');
|
||||
$('#submoduleGitResultDiv').show();
|
||||
$('#submoduleGitResult').removeClass('green').addClass('red').text(data.output);
|
||||
},
|
||||
complete:function() {
|
||||
$clicked.removeClass('fa-spin');
|
||||
$form.remove();
|
||||
},
|
||||
type:"post",
|
||||
cache: false,
|
||||
url:$form.attr('action'),
|
||||
});
|
||||
},
|
||||
url:'/servers/getSubmoduleQuickUpdateForm/' + (submodule_path !== undefined ? btoa(submodule_path) : ''),
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue