Compare commits

...

3 Commits

Author SHA1 Message Date
wh1te909
bd213532a6 Revert "fix clipboard perms amidaware/tacticalrmm#1134"
This reverts commit 98a85a8b2e.
2025-02-01 20:10:38 +00:00
wh1te909
98a85a8b2e fix clipboard perms amidaware/tacticalrmm#1134 2025-02-01 10:34:07 +00:00
wh1te909
845ed2b44a posix tasks support 2025-01-24 23:53:52 +00:00
2 changed files with 49 additions and 10 deletions

View File

@@ -1,8 +1,5 @@
<template> <template>
<div v-if="!selectedAgent" class="q-pa-sm">No agent selected</div> <div v-if="!selectedAgent" class="q-pa-sm">No agent selected</div>
<div v-else-if="agentPlatform.toLowerCase() !== 'windows'" class="q-pa-sm">
Only supported for Windows agents at this time
</div>
<div v-else> <div v-else>
<q-table <q-table
dense dense
@@ -514,6 +511,7 @@ export default {
component: AutomatedTaskForm, component: AutomatedTaskForm,
componentProps: { componentProps: {
parent: { agent: selectedAgent.value }, parent: { agent: selectedAgent.value },
plat: agentPlatform.value,
}, },
}).onOk(() => { }).onOk(() => {
getTasks(); getTasks();
@@ -528,6 +526,7 @@ export default {
componentProps: { componentProps: {
task: task, task: task,
parent: { agent: selectedAgent.value }, parent: { agent: selectedAgent.value },
plat: agentPlatform.value,
}, },
}).onOk(() => { }).onOk(() => {
getTasks(); getTasks();

View File

@@ -158,7 +158,7 @@
v-model="command" v-model="command"
dense dense
filled filled
class="col-7" class="col-5"
/> />
<q-input <q-input
v-if="actionType === 'cmd'" v-if="actionType === 'cmd'"
@@ -171,12 +171,14 @@
/> />
<q-option-group <q-option-group
v-if="actionType === 'cmd'" v-if="actionType === 'cmd'"
class="col-2 q-pl-sm" class="col-4 q-pl-sm"
inline inline
v-model="shell" v-model="shell"
:options="[ :options="[
{ label: 'Batch', value: 'cmd' }, { label: 'CMD', value: 'cmd' },
{ label: 'Powershell', value: 'powershell' }, { label: 'Powershell', value: 'powershell' },
{ label: 'Bash', value: '/bin/bash' },
{ label: 'Custom', value: 'custom' },
]" ]"
/> />
<q-btn <q-btn
@@ -186,10 +188,20 @@
flat flat
dense dense
icon="add" icon="add"
label="Add"
color="primary" color="primary"
/> />
</div> </div>
</q-form> </q-form>
<div v-if="shell === 'custom'" class="col-5">
<q-input
v-model="custom_shell"
outlined
label="Custom shell"
stack-label
placeholder="/usr/bin/python3"
/>
</div>
<div class="text-subtitle2 q-pa-sm"> <div class="text-subtitle2 q-pa-sm">
Actions: Actions:
<q-checkbox <q-checkbox
@@ -305,6 +317,7 @@
<!-- expires on input --> <!-- expires on input -->
<q-input <q-input
v-if="!isPosix"
class="col-6 q-pa-sm" class="col-6 q-pa-sm"
type="datetime-local" type="datetime-local"
dense dense
@@ -333,7 +346,10 @@
</q-card-section> </q-card-section>
<!-- daily options --> <!-- daily options -->
<q-card-section v-if="state.task_type === 'daily'" class="row"> <q-card-section
v-if="!isPosix && state.task_type === 'daily'"
class="row"
>
<!-- daily interval --> <!-- daily interval -->
<q-input <q-input
:rules="[ :rules="[
@@ -360,6 +376,7 @@
<q-card-section v-if="state.task_type === 'weekly'" class="row"> <q-card-section v-if="state.task_type === 'weekly'" class="row">
<!-- weekly interval --> <!-- weekly interval -->
<q-input <q-input
v-if="!isPosix"
:rules="[ :rules="[
(val) => !!val || '*Required', (val) => !!val || '*Required',
(val) => (val) =>
@@ -602,8 +619,11 @@
" "
class="row" class="row"
> >
<div class="col-12 text-h6">Advanced Settings</div> <div v-if="!isPosix" class="col-12 text-h6">
Advanced Settings (Windows only)
</div>
<q-input <q-input
v-if="!isPosix"
class="col-6 q-pa-sm" class="col-6 q-pa-sm"
dense dense
label="Repeat task every" label="Repeat task every"
@@ -620,6 +640,7 @@
/> />
<q-input <q-input
v-if="!isPosix"
:disable="!state.task_repetition_interval" :disable="!state.task_repetition_interval"
class="col-6 q-pa-sm" class="col-6 q-pa-sm"
dense dense
@@ -643,6 +664,7 @@
/> />
<q-checkbox <q-checkbox
v-if="!isPosix"
:disable="!state.task_repetition_interval" :disable="!state.task_repetition_interval"
class="col-6 q-pa-sm" class="col-6 q-pa-sm"
dense dense
@@ -652,6 +674,7 @@
<div class="col-6"></div> <div class="col-6"></div>
<q-input <q-input
v-if="!isPosix"
class="col-6 q-pa-sm" class="col-6 q-pa-sm"
dense dense
label="Random task delay" label="Random task delay"
@@ -668,6 +691,7 @@
/> />
<div class="col-6"></div> <div class="col-6"></div>
<q-checkbox <q-checkbox
v-if="!isPosix"
:disable="!state.expire_date" :disable="!state.expire_date"
class="col-6 q-pa-sm" class="col-6 q-pa-sm"
dense dense
@@ -678,6 +702,7 @@
</q-checkbox> </q-checkbox>
<div class="col-6"></div> <div class="col-6"></div>
<q-checkbox <q-checkbox
v-if="!isPosix"
:disable="state.task_type === 'runonce'" :disable="state.task_type === 'runonce'"
class="col-6 q-pa-sm" class="col-6 q-pa-sm"
dense dense
@@ -688,6 +713,7 @@
<div class="col-6"></div> <div class="col-6"></div>
<tactical-dropdown <tactical-dropdown
v-if="!isPosix"
class="col-6 q-pa-sm" class="col-6 q-pa-sm"
label="Task instance policy" label="Task instance policy"
:options="taskInstancePolicyOptions" :options="taskInstancePolicyOptions"
@@ -755,7 +781,7 @@
<script> <script>
// composition imports // composition imports
import { ref, watch, onMounted, defineComponent } from "vue"; import { computed, ref, watch, onMounted, defineComponent } from "vue";
import { useDialogPluginComponent } from "quasar"; import { useDialogPluginComponent } from "quasar";
import draggable from "vuedraggable"; import draggable from "vuedraggable";
import { saveTask, updateTask } from "@/api/tasks"; import { saveTask, updateTask } from "@/api/tasks";
@@ -850,6 +876,7 @@ export default defineComponent({
props: { props: {
parent: Object, // parent policy or agent for task parent: Object, // parent policy or agent for task
task: Object, // only for editing task: Object, // only for editing
plat: String,
}, },
setup(props) { setup(props) {
// setup quasar dialog // setup quasar dialog
@@ -873,6 +900,10 @@ export default defineComponent({
const { checkOptions, getCheckOptions } = useCheckDropdown(props.parent); const { checkOptions, getCheckOptions } = useCheckDropdown(props.parent);
const { customFieldOptions } = useCustomFieldDropdown({ onMount: true }); const { customFieldOptions } = useCustomFieldDropdown({ onMount: true });
const isPosix = computed(() => {
return !!props.plat && props.plat !== "windows";
});
// add task logic // add task logic
const task = props.task const task = props.task
? ref(Object.assign({}, props.task)) ? ref(Object.assign({}, props.task))
@@ -906,6 +937,7 @@ export default defineComponent({
const actionType = ref("script"); const actionType = ref("script");
const command = ref(""); const command = ref("");
const shell = ref("cmd"); const shell = ref("cmd");
const custom_shell = ref("");
const monthlyType = ref("days"); const monthlyType = ref("days");
const collector = ref(false); const collector = ref(false);
const loading = ref(false); const loading = ref(false);
@@ -960,10 +992,16 @@ export default defineComponent({
env_vars: defaultEnvVars.value, env_vars: defaultEnvVars.value,
}); });
} else if (actionType.value === "cmd") { } else if (actionType.value === "cmd") {
let tempShell = shell.value;
if (shell.value === "custom" && !!custom_shell.value) {
tempShell = custom_shell.value;
} else {
tempShell = shell.value;
}
task.value.actions.push({ task.value.actions.push({
type: "cmd", type: "cmd",
command: command.value, command: command.value,
shell: shell.value, shell: tempShell,
timeout: defaultTimeout.value, timeout: defaultTimeout.value,
}); });
} }
@@ -1138,6 +1176,7 @@ export default defineComponent({
actionType, actionType,
command, command,
shell, shell,
custom_shell,
allMonthsCheckbox, allMonthsCheckbox,
allMonthDaysCheckbox, allMonthDaysCheckbox,
allWeekDaysCheckbox, allWeekDaysCheckbox,
@@ -1151,6 +1190,7 @@ export default defineComponent({
scriptOptions, scriptOptions,
checkOptions, checkOptions,
customFieldOptions, customFieldOptions,
isPosix,
// non-reactive data // non-reactive data
validateTimePeriod, validateTimePeriod,