Compare commits
	
		
			45 Commits
		
	
	
		
			v0.101.23-
			...
			v0.101.31
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					20d534eab0 | ||
| 
						 | 
					0d87f5afee | ||
| 
						 | 
					1b83c3c5d6 | ||
| 
						 | 
					1b2286c4f8 | ||
| 
						 | 
					34233fde2f | ||
| 
						 | 
					e95dd5f6e7 | ||
| 
						 | 
					901e6986a0 | ||
| 
						 | 
					aa78929743 | ||
| 
						 | 
					8207f30234 | ||
| 
						 | 
					1879977b83 | ||
| 
						 | 
					b4de579a74 | ||
| 
						 | 
					23f15ff9e5 | ||
| 
						 | 
					498e038bbb | ||
| 
						 | 
					bb1f1c19cf | ||
| 
						 | 
					74e3aa4e46 | ||
| 
						 | 
					07a8e3ebcb | ||
| 
						 | 
					89966dd006 | ||
| 
						 | 
					68036f6837 | ||
| 
						 | 
					45ac82b1dd | ||
| 
						 | 
					d94e5c7965 | ||
| 
						 | 
					e0c1b3199a | ||
| 
						 | 
					fdbbdf7394 | ||
| 
						 | 
					03fae45ac5 | ||
| 
						 | 
					346670e8ea | ||
| 
						 | 
					e030efaecf | ||
| 
						 | 
					b8a4f9fe74 | ||
| 
						 | 
					f963b51d70 | ||
| 
						 | 
					c2591c9e7d | ||
| 
						 | 
					7fcbe6fbd8 | ||
| 
						 | 
					a2f472ef9c | ||
| 
						 | 
					8403ac0e93 | ||
| 
						 | 
					b7a91563b0 | ||
| 
						 | 
					ab19afca16 | ||
| 
						 | 
					f24c6a7a80 | ||
| 
						 | 
					99490bf859 | ||
| 
						 | 
					72cdeeaa6a | ||
| 
						 | 
					1eca4d605b | ||
| 
						 | 
					52ee98f6f8 | ||
| 
						 | 
					d270b877c9 | ||
| 
						 | 
					fd8b2a1d98 | ||
| 
						 | 
					f518043d8d | ||
| 
						 | 
					cc2335558d | ||
| 
						 | 
					a8a171ba2c | ||
| 
						 | 
					24a63f477e | ||
| 
						 | 
					ddeb6293a1 | 
							
								
								
									
										2
									
								
								.github/workflows/frontend-linting.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/frontend-linting.yml
									
									
									
									
										vendored
									
									
								
							@@ -13,7 +13,7 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      - uses: actions/setup-node@v3
 | 
					      - uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 16
 | 
					          node-version: 18
 | 
				
			||||||
      - run: npm install
 | 
					      - run: npm install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Run Prettier formatting
 | 
					      - name: Run Prettier formatting
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1896
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1896
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										42
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								package.json
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "web",
 | 
					  "name": "web",
 | 
				
			||||||
  "version": "0.101.23-dev",
 | 
					  "version": "0.101.31",
 | 
				
			||||||
  "private": true,
 | 
					  "private": true,
 | 
				
			||||||
  "productName": "Tactical RMM",
 | 
					  "productName": "Tactical RMM",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
@@ -10,31 +10,31 @@
 | 
				
			|||||||
    "format": "prettier --write \"**/*.{js,ts,vue,,html,md,json}\" --ignore-path .gitignore"
 | 
					    "format": "prettier --write \"**/*.{js,ts,vue,,html,md,json}\" --ignore-path .gitignore"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@quasar/extras": "1.16.4",
 | 
					    "@quasar/extras": "1.16.7",
 | 
				
			||||||
    "apexcharts": "3.41.0",
 | 
					    "apexcharts": "3.41.1",
 | 
				
			||||||
    "axios": "1.4.0",
 | 
					    "axios": "1.5.1",
 | 
				
			||||||
    "dotenv": "16.3.1",
 | 
					    "dotenv": "16.3.1",
 | 
				
			||||||
    "qrcode.vue": "3.4.0",
 | 
					    "qrcode.vue": "3.4.1",
 | 
				
			||||||
    "quasar": "2.12.1",
 | 
					    "quasar": "2.12.7",
 | 
				
			||||||
    "vue": "3.2.47",
 | 
					    "vue": "3.3.4",
 | 
				
			||||||
    "vue3-ace-editor": "2.2.2",
 | 
					    "vue3-ace-editor": "2.2.3",
 | 
				
			||||||
    "vue3-apexcharts": "1.4.1",
 | 
					    "vue3-apexcharts": "1.4.4",
 | 
				
			||||||
    "vuedraggable": "4.1.0",
 | 
					    "vuedraggable": "4.1.0",
 | 
				
			||||||
    "vue-router": "4.1.6",
 | 
					    "vue-router": "4.2.5",
 | 
				
			||||||
    "vuex": "4.1.0"
 | 
					    "vuex": "4.1.0"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@quasar/cli": "^2.2.1",
 | 
					    "@quasar/cli": "2.3.0",
 | 
				
			||||||
    "@intlify/unplugin-vue-i18n": "^0.10.0",
 | 
					    "@intlify/unplugin-vue-i18n": "1.4.0",
 | 
				
			||||||
    "@quasar/app-vite": "^1.4.3",
 | 
					    "@quasar/app-vite": "1.6.2",
 | 
				
			||||||
    "@types/node": "^20.3.2",
 | 
					    "@types/node": "20.8.0",
 | 
				
			||||||
    "@typescript-eslint/eslint-plugin": "^5.60.1",
 | 
					    "@typescript-eslint/eslint-plugin": "6.7.3",
 | 
				
			||||||
    "@typescript-eslint/parser": "^5.60.1",
 | 
					    "@typescript-eslint/parser": "6.7.3",
 | 
				
			||||||
    "autoprefixer": "10.4.14",
 | 
					    "autoprefixer": "10.4.16",
 | 
				
			||||||
    "eslint": "8.43.0",
 | 
					    "eslint": "8.50.0",
 | 
				
			||||||
    "eslint-config-prettier": "8.8.0",
 | 
					    "eslint-config-prettier": "9.0.0",
 | 
				
			||||||
    "eslint-plugin-vue": "8.7.1",
 | 
					    "eslint-plugin-vue": "8.7.1",
 | 
				
			||||||
    "prettier": "2.8.8",
 | 
					    "prettier": "3.0.3",
 | 
				
			||||||
    "typescript": "5.1.6"
 | 
					    "typescript": "5.2.2"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -31,6 +31,11 @@ export async function resetCheck(id) {
 | 
				
			|||||||
  return data;
 | 
					  return data;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export async function resetAllChecksStatus(agent_id) {
 | 
				
			||||||
 | 
					  const { data } = await axios.post(`${baseUrl}/${agent_id}/resetall/`);
 | 
				
			||||||
 | 
					  return data;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function runAgentChecks(agent_id) {
 | 
					export async function runAgentChecks(agent_id) {
 | 
				
			||||||
  const { data } = await axios.post(`${baseUrl}/${agent_id}/run/`);
 | 
					  const { data } = await axios.post(`${baseUrl}/${agent_id}/run/`);
 | 
				
			||||||
  return data;
 | 
					  return data;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -119,6 +119,16 @@
 | 
				
			|||||||
          no-caps
 | 
					          no-caps
 | 
				
			||||||
          icon="play_arrow"
 | 
					          icon="play_arrow"
 | 
				
			||||||
          @click="runChecks"
 | 
					          @click="runChecks"
 | 
				
			||||||
 | 
					          class="q-mr-md"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					        <q-btn
 | 
				
			||||||
 | 
					          label="Reset All Checks Status"
 | 
				
			||||||
 | 
					          dense
 | 
				
			||||||
 | 
					          flat
 | 
				
			||||||
 | 
					          push
 | 
				
			||||||
 | 
					          no-caps
 | 
				
			||||||
 | 
					          icon="restart_alt"
 | 
				
			||||||
 | 
					          @click="resetAllChecks"
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
      </template>
 | 
					      </template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -415,6 +425,7 @@ import {
 | 
				
			|||||||
  updateCheck,
 | 
					  updateCheck,
 | 
				
			||||||
  removeCheck,
 | 
					  removeCheck,
 | 
				
			||||||
  resetCheck,
 | 
					  resetCheck,
 | 
				
			||||||
 | 
					  resetAllChecksStatus,
 | 
				
			||||||
  runAgentChecks,
 | 
					  runAgentChecks,
 | 
				
			||||||
} from "@/api/checks";
 | 
					} from "@/api/checks";
 | 
				
			||||||
import { fetchAgentChecks } from "@/api/agents";
 | 
					import { fetchAgentChecks } from "@/api/agents";
 | 
				
			||||||
@@ -572,7 +583,7 @@ export default {
 | 
				
			|||||||
        notifySuccess(result);
 | 
					        notifySuccess(result);
 | 
				
			||||||
        refreshDashboard(
 | 
					        refreshDashboard(
 | 
				
			||||||
          false /* clearTreeSelected */,
 | 
					          false /* clearTreeSelected */,
 | 
				
			||||||
          false /* clearSubTable */
 | 
					          false /* clearSubTable */,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
      } catch (e) {
 | 
					      } catch (e) {
 | 
				
			||||||
        console.error(e);
 | 
					        console.error(e);
 | 
				
			||||||
@@ -580,6 +591,27 @@ export default {
 | 
				
			|||||||
      loading.value = false;
 | 
					      loading.value = false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function resetAllChecks() {
 | 
				
			||||||
 | 
					      console.info(selectedAgent.value);
 | 
				
			||||||
 | 
					      $q.dialog({
 | 
				
			||||||
 | 
					        title: "Are you sure?",
 | 
				
			||||||
 | 
					        message: "Reset all checks status",
 | 
				
			||||||
 | 
					        cancel: true,
 | 
				
			||||||
 | 
					        ok: { label: "Reset", color: "negative" },
 | 
				
			||||||
 | 
					        persistent: true,
 | 
				
			||||||
 | 
					      }).onOk(async () => {
 | 
				
			||||||
 | 
					        loading.value = true;
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          const result = await resetAllChecksStatus(selectedAgent.value);
 | 
				
			||||||
 | 
					          await getChecks();
 | 
				
			||||||
 | 
					          notifySuccess(result);
 | 
				
			||||||
 | 
					        } catch (e) {
 | 
				
			||||||
 | 
					          console.error(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        loading.value = false;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function showEventInfo(data) {
 | 
					    function showEventInfo(data) {
 | 
				
			||||||
      $q.dialog({
 | 
					      $q.dialog({
 | 
				
			||||||
        component: EventLogCheckOutput,
 | 
					        component: EventLogCheckOutput,
 | 
				
			||||||
@@ -674,6 +706,7 @@ export default {
 | 
				
			|||||||
      formatDate,
 | 
					      formatDate,
 | 
				
			||||||
      getAlertSeverity,
 | 
					      getAlertSeverity,
 | 
				
			||||||
      runChecks,
 | 
					      runChecks,
 | 
				
			||||||
 | 
					      resetAllChecks,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // dialogs
 | 
					      // dialogs
 | 
				
			||||||
      showScriptOutput,
 | 
					      showScriptOutput,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
    ref="dialogRef"
 | 
					    ref="dialogRef"
 | 
				
			||||||
    @hide="onDialogHide"
 | 
					    @hide="onDialogHide"
 | 
				
			||||||
    persistent
 | 
					    persistent
 | 
				
			||||||
    @keydown.esc="onDialogHide"
 | 
					    @keydown.esc.stop="onDialogHide"
 | 
				
			||||||
    :maximized="maximized"
 | 
					    :maximized="maximized"
 | 
				
			||||||
  >
 | 
					  >
 | 
				
			||||||
    <q-card
 | 
					    <q-card
 | 
				
			||||||
@@ -173,8 +173,7 @@
 | 
				
			|||||||
                  >Setting this value on the script model will always override
 | 
					                  >Setting this value on the script model will always override
 | 
				
			||||||
                  any 'Run As User' checkboxes in the UI and force this script
 | 
					                  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
 | 
					                  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
 | 
					                  user is logged in, the script will run as SYSTEM.
 | 
				
			||||||
                  be returned.
 | 
					 | 
				
			||||||
                </q-tooltip>
 | 
					                </q-tooltip>
 | 
				
			||||||
              </q-checkbox>
 | 
					              </q-checkbox>
 | 
				
			||||||
              <q-input
 | 
					              <q-input
 | 
				
			||||||
@@ -353,7 +352,7 @@ export default {
 | 
				
			|||||||
      downloadScript(script.value.id, { with_snippets: props.readonly }).then(
 | 
					      downloadScript(script.value.id, { with_snippets: props.readonly }).then(
 | 
				
			||||||
        (r) => {
 | 
					        (r) => {
 | 
				
			||||||
          script.value.script_body = r.code;
 | 
					          script.value.script_body = r.code;
 | 
				
			||||||
        }
 | 
					        },
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async function submitForm() {
 | 
					    async function submitForm() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ export const GOARCH_ARM64 = "arm64";
 | 
				
			|||||||
export const GOARCH_ARM32 = "arm";
 | 
					export const GOARCH_ARM32 = "arm";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const runAsUserToolTip =
 | 
					export const runAsUserToolTip =
 | 
				
			||||||
  "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.";
 | 
					  "Run in the context of the logged in user. If no user is logged in, the script will run as SYSTEM";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const envVarsLabel =
 | 
					export const envVarsLabel =
 | 
				
			||||||
  "Environment vars (press Enter after typing each key=value pair)";
 | 
					  "Environment vars (press Enter after typing each key=value pair)";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,7 @@
 | 
				
			|||||||
            :color="dash_negative_color"
 | 
					            :color="dash_negative_color"
 | 
				
			||||||
            text-color="black"
 | 
					            text-color="black"
 | 
				
			||||||
            icon="warning"
 | 
					            icon="warning"
 | 
				
			||||||
            >Certificate expires in {{ daysUntilCertExpires }} days</q-chip
 | 
					            >SSL certificate expires in {{ daysUntilCertExpires }} days</q-chip
 | 
				
			||||||
          >
 | 
					          >
 | 
				
			||||||
        </q-toolbar-title>
 | 
					        </q-toolbar-title>
 | 
				
			||||||
        <!-- temp dark mode toggle -->
 | 
					        <!-- temp dark mode toggle -->
 | 
				
			||||||
@@ -288,7 +288,7 @@ export default {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      if (!token.value) {
 | 
					      if (!token.value) {
 | 
				
			||||||
        console.log(
 | 
					        console.log(
 | 
				
			||||||
          "Access token is null or invalid, not setting up WebSocket"
 | 
					          "Access token is null or invalid, not setting up WebSocket",
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@@ -325,10 +325,13 @@ export default {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    const poll = ref(null);
 | 
					    const poll = ref(null);
 | 
				
			||||||
    function livePoll() {
 | 
					    function livePoll() {
 | 
				
			||||||
      poll.value = setInterval(() => {
 | 
					      poll.value = setInterval(
 | 
				
			||||||
 | 
					        () => {
 | 
				
			||||||
          store.dispatch("checkVer");
 | 
					          store.dispatch("checkVer");
 | 
				
			||||||
          store.dispatch("getDashInfo", false);
 | 
					          store.dispatch("getDashInfo", false);
 | 
				
			||||||
      }, 60 * 4 * 1000);
 | 
					        },
 | 
				
			||||||
 | 
					        60 * 4 * 1000,
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const updateAvailable = computed(() => {
 | 
					    const updateAvailable = computed(() => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
        >
 | 
					        >
 | 
				
			||||||
          <q-spinner size="40px" color="primary" />
 | 
					          <q-spinner size="40px" color="primary" />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div v-else class="q-pa-sm q-gutter-sm scroll" style="height: 85vh">
 | 
					        <div v-else class="q-pa-sm q-gutter-sm scroll" style="height: 85vh; overflow: initial;">
 | 
				
			||||||
          <q-list dense class="rounded-borders">
 | 
					          <q-list dense class="rounded-borders">
 | 
				
			||||||
            <q-item
 | 
					            <q-item
 | 
				
			||||||
              clickable
 | 
					              clickable
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
  <div>
 | 
					  <div>
 | 
				
			||||||
    <q-bar>
 | 
					    <q-bar>
 | 
				
			||||||
      <span class="text-caption">
 | 
					      <span class="text-caption">
 | 
				
			||||||
        Agent Status:
 | 
					        TRMM Agent Status:
 | 
				
			||||||
        <q-badge :color="statusColor" :label="status" />
 | 
					        <q-badge :color="statusColor" :label="status" />
 | 
				
			||||||
      </span>
 | 
					      </span>
 | 
				
			||||||
      <q-space />
 | 
					      <q-space />
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user