Compare commits
	
		
			9 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					298d039028 | ||
| 
						 | 
					021a066074 | ||
| 
						 | 
					7dc2f5a658 | ||
| 
						 | 
					57bd8bafac | ||
| 
						 | 
					7d5216aba9 | ||
| 
						 | 
					076ab0c465 | ||
| 
						 | 
					be37e89e16 | ||
| 
						 | 
					0bdc841084 | ||
| 
						 | 
					96086d0b5d | 
							
								
								
									
										5556
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5556
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "web",
 | 
			
		||||
  "version": "0.101.32",
 | 
			
		||||
  "version": "0.101.33",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "productName": "Tactical RMM",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
@@ -11,13 +11,12 @@
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@quasar/extras": "1.16.7",
 | 
			
		||||
    "apexcharts": "3.41.1",
 | 
			
		||||
    "axios": "1.5.1",
 | 
			
		||||
    "apexcharts": "3.44.0",
 | 
			
		||||
    "axios": "1.6.0",
 | 
			
		||||
    "dotenv": "16.3.1",
 | 
			
		||||
    "qrcode.vue": "3.4.1",
 | 
			
		||||
    "quasar": "2.13.0",
 | 
			
		||||
    "vue": "3.3.7",
 | 
			
		||||
    "vue3-ace-editor": "2.2.3",
 | 
			
		||||
    "vue3-apexcharts": "1.4.4",
 | 
			
		||||
    "vuedraggable": "4.1.0",
 | 
			
		||||
    "vue-router": "4.2.5",
 | 
			
		||||
@@ -31,7 +30,7 @@
 | 
			
		||||
    "@quasar/cli": "2.3.0",
 | 
			
		||||
    "@intlify/unplugin-vue-i18n": "1.4.0",
 | 
			
		||||
    "@quasar/app-vite": "1.6.2",
 | 
			
		||||
    "@types/node": "20.8.8",
 | 
			
		||||
    "@types/node": "20.8.9",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "6.9.0",
 | 
			
		||||
    "@typescript-eslint/parser": "6.9.0",
 | 
			
		||||
    "autoprefixer": "10.4.16",
 | 
			
		||||
 
 | 
			
		||||
@@ -150,7 +150,7 @@
 | 
			
		||||
          </q-menu>
 | 
			
		||||
        </q-btn>
 | 
			
		||||
        <!-- integrations -->
 | 
			
		||||
        <q-btn size="md" dense no-caps flat label="Integrations">
 | 
			
		||||
        <q-btn size="md" dense no-caps flat label="Reporting">
 | 
			
		||||
          <q-menu auto-close>
 | 
			
		||||
            <q-list
 | 
			
		||||
              v-if="
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,9 @@
 | 
			
		||||
    persistent
 | 
			
		||||
    @keydown.esc.stop="onDialogHide"
 | 
			
		||||
    :maximized="maximized"
 | 
			
		||||
    @keydown.esc="unloadEditor"
 | 
			
		||||
    @hide="unloadEditor"
 | 
			
		||||
    @hide="onDialogHide"
 | 
			
		||||
    @show="loadEditor"
 | 
			
		||||
    @before-hide="unloadEditor"
 | 
			
		||||
  >
 | 
			
		||||
    <q-card
 | 
			
		||||
      class="q-dialog-plugin"
 | 
			
		||||
@@ -52,7 +52,7 @@
 | 
			
		||||
        </q-btn>
 | 
			
		||||
      </q-bar>
 | 
			
		||||
      <q-banner
 | 
			
		||||
        v-if="missingShebang"
 | 
			
		||||
        v-if="script.script_body && missingShebang"
 | 
			
		||||
        dense
 | 
			
		||||
        inline-actions
 | 
			
		||||
        class="text-black bg-warning"
 | 
			
		||||
@@ -170,8 +170,7 @@
 | 
			
		||||
                >Setting this value on the script model will always override any
 | 
			
		||||
                'Run As User' checkboxes in the UI and force this script to
 | 
			
		||||
                always be run in the context of the logged in user. If no user
 | 
			
		||||
                is logged in, the script will not run and an error will be
 | 
			
		||||
                returned.
 | 
			
		||||
                is logged in, the script will run as SYSTEM.
 | 
			
		||||
              </q-tooltip>
 | 
			
		||||
            </q-checkbox>
 | 
			
		||||
            <q-input
 | 
			
		||||
@@ -235,7 +234,7 @@
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
// composable imports
 | 
			
		||||
import { ref, reactive, computed, onMounted } from "vue";
 | 
			
		||||
import { ref, reactive, watch, computed, onMounted } from "vue";
 | 
			
		||||
import { useStore } from "vuex";
 | 
			
		||||
import { useQuasar, useDialogPluginComponent } from "quasar";
 | 
			
		||||
import { saveScript, editScript, downloadScript } from "@/api/scripts";
 | 
			
		||||
@@ -266,7 +265,7 @@ const props = withDefaults(
 | 
			
		||||
  {
 | 
			
		||||
    clone: false,
 | 
			
		||||
    readonly: false,
 | 
			
		||||
  }
 | 
			
		||||
  },
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
// emits
 | 
			
		||||
@@ -330,12 +329,6 @@ const lang = computed(() => {
 | 
			
		||||
  else return "";
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// get code if editing or cloning script
 | 
			
		||||
if (props.script)
 | 
			
		||||
  downloadScript(script.id, { with_snippets: props.readonly }).then((r) => {
 | 
			
		||||
    script.script_body = r.code;
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
async function submit() {
 | 
			
		||||
  loading.value = true;
 | 
			
		||||
  let result = "";
 | 
			
		||||
@@ -376,7 +369,7 @@ function loadEditor() {
 | 
			
		||||
  var model = monaco.editor.createModel(
 | 
			
		||||
    script.script_body,
 | 
			
		||||
    lang.value,
 | 
			
		||||
    modelUri
 | 
			
		||||
    modelUri,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const theme = $q.dark.isActive ? "vs-dark" : "vs-light";
 | 
			
		||||
@@ -392,6 +385,18 @@ function loadEditor() {
 | 
			
		||||
  editor.onDidChangeModelContent(() => {
 | 
			
		||||
    script.script_body = editor.getValue();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  // get code if editing or cloning script
 | 
			
		||||
  if (props.script)
 | 
			
		||||
    downloadScript(script.id, { with_snippets: props.readonly }).then((r) => {
 | 
			
		||||
      script.script_body = r.code;
 | 
			
		||||
      editor.setValue(r.code);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
  // watch for changes in language
 | 
			
		||||
  watch(lang, () => {
 | 
			
		||||
    monaco.editor.setModelLanguage(model, lang.value);
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function unloadEditor() {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,10 +2,11 @@
 | 
			
		||||
  <q-dialog
 | 
			
		||||
    ref="dialogRef"
 | 
			
		||||
    persistent
 | 
			
		||||
    @keydown.esc="unloadEditor"
 | 
			
		||||
    @keydown.esc.stop="onDialogHide"
 | 
			
		||||
    :maximized="maximized"
 | 
			
		||||
    @hide="unloadEditor"
 | 
			
		||||
    @hide="onDialogHide"
 | 
			
		||||
    @show="loadEditor"
 | 
			
		||||
    @before-hide="unloadEditor"
 | 
			
		||||
  >
 | 
			
		||||
    <q-card
 | 
			
		||||
      class="q-dialog-plugin"
 | 
			
		||||
@@ -101,7 +102,7 @@
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
// composable imports
 | 
			
		||||
import { ref, reactive, computed } from "vue";
 | 
			
		||||
import { ref, watch, reactive, computed } from "vue";
 | 
			
		||||
import { useStore } from "vuex";
 | 
			
		||||
import { useQuasar } from "quasar";
 | 
			
		||||
import { generateScript } from "@/api/core";
 | 
			
		||||
@@ -177,7 +178,7 @@ const snippetEditor = ref<HTMLElement | null>(null);
 | 
			
		||||
let editor: monaco.editor.IStandaloneCodeEditor;
 | 
			
		||||
 | 
			
		||||
function loadEditor() {
 | 
			
		||||
  var modelUri = monaco.Uri.parse("model://new"); // a made up unique URI for our model
 | 
			
		||||
  var modelUri = monaco.Uri.parse("model://snippet"); // a made up unique URI for our model
 | 
			
		||||
  var model = monaco.editor.createModel(snippet.code, lang.value, modelUri);
 | 
			
		||||
 | 
			
		||||
  const theme = $q.dark.isActive ? "vs-dark" : "vs-light";
 | 
			
		||||
@@ -192,6 +193,11 @@ function loadEditor() {
 | 
			
		||||
  editor.onDidChangeModelContent(() => {
 | 
			
		||||
    snippet.code = editor.getValue();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  // watch for changes in language
 | 
			
		||||
  watch(lang, () => {
 | 
			
		||||
    monaco.editor.setModelLanguage(model, lang.value);
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function unloadEditor() {
 | 
			
		||||
 
 | 
			
		||||
@@ -302,7 +302,10 @@ export function useReportTemplates(): useReportingTemplates {
 | 
			
		||||
    axios
 | 
			
		||||
      .post(`${baseUrl}/templates/${id}/export/`)
 | 
			
		||||
      .then(({ data }) => {
 | 
			
		||||
        exportFile(`${data.template.name}-export.json`, JSON.stringify(data));
 | 
			
		||||
        exportFile(
 | 
			
		||||
          `${data.template.name}-export.json`,
 | 
			
		||||
          JSON.stringify(data, null, 2),
 | 
			
		||||
        );
 | 
			
		||||
      })
 | 
			
		||||
      .catch(() => (isError.value = true))
 | 
			
		||||
      .finally(() => (isLoading.value = false));
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,11 @@
 | 
			
		||||
        >
 | 
			
		||||
          <q-spinner size="40px" color="primary" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div v-else class="q-pa-sm q-gutter-sm scroll" style="height: 85vh; overflow: initial;">
 | 
			
		||||
        <div
 | 
			
		||||
          v-else
 | 
			
		||||
          class="q-pa-sm q-gutter-sm scroll"
 | 
			
		||||
          style="height: 85vh; overflow: initial"
 | 
			
		||||
        >
 | 
			
		||||
          <q-list dense class="rounded-borders">
 | 
			
		||||
            <q-item
 | 
			
		||||
              clickable
 | 
			
		||||
@@ -163,7 +167,7 @@
 | 
			
		||||
                                runURLAction(
 | 
			
		||||
                                  props.node.id,
 | 
			
		||||
                                  action.id,
 | 
			
		||||
                                  props.node.children ? 'client' : 'site'
 | 
			
		||||
                                  props.node.children ? 'client' : 'site',
 | 
			
		||||
                                )
 | 
			
		||||
                              "
 | 
			
		||||
                            >
 | 
			
		||||
@@ -196,9 +200,9 @@
 | 
			
		||||
                        "
 | 
			
		||||
                      >
 | 
			
		||||
                        <q-item-section side>
 | 
			
		||||
                          <q-icon name="integration_instructions" />
 | 
			
		||||
                          <q-icon name="analytics" />
 | 
			
		||||
                        </q-item-section>
 | 
			
		||||
                        <q-item-section>Integrations</q-item-section>
 | 
			
		||||
                        <q-item-section>Reporting</q-item-section>
 | 
			
		||||
                        <q-item-section side>
 | 
			
		||||
                          <q-icon name="keyboard_arrow_right" />
 | 
			
		||||
                        </q-item-section>
 | 
			
		||||
@@ -816,7 +820,7 @@ export default {
 | 
			
		||||
      this.$axios.get("/core/urlaction/").then((r) => {
 | 
			
		||||
        if (r.data.length === 0) {
 | 
			
		||||
          this.notifyWarning(
 | 
			
		||||
            "No URL Actions configured. Go to Settings > Global Settings > URL Actions"
 | 
			
		||||
            "No URL Actions configured. Go to Settings > Global Settings > URL Actions",
 | 
			
		||||
          );
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user