Compare commits
	
		
			8 Commits
		
	
	
		
			v0.100.8-d
			...
			v0.100.9-d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					83d0ff1c0a | ||
| 
						 | 
					8a6ec6ceab | ||
| 
						 | 
					93dbc74e33 | ||
| 
						 | 
					5f2add48a9 | ||
| 
						 | 
					b7369875af | ||
| 
						 | 
					2eb6580fed | ||
| 
						 | 
					9f85fbb330 | ||
| 
						 | 
					ee9715a4cf | 
							
								
								
									
										7
									
								
								.devcontainer/.env.example
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.devcontainer/.env.example
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					COMPOSE_PROJECT_NAME=trmm
 | 
				
			||||||
 | 
					IMAGE_REPO=tacticalrmm/
 | 
				
			||||||
 | 
					VERSION=latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DEV SETTINGS
 | 
				
			||||||
 | 
					APP_PORT=443
 | 
				
			||||||
 | 
					DOCKER_NETWORK=172.21.0.0/24
 | 
				
			||||||
							
								
								
									
										26
									
								
								.devcontainer/docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								.devcontainer/docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					version: '3.4'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					  app-dev:
 | 
				
			||||||
 | 
					    container_name: trmm-app-dev
 | 
				
			||||||
 | 
					    image: node:16-alpine
 | 
				
			||||||
 | 
					    restart: always
 | 
				
			||||||
 | 
					    command: /bin/sh -c "npm install --cache ~/.npm && npm run serve"
 | 
				
			||||||
 | 
					    user: 1000:1000
 | 
				
			||||||
 | 
					    working_dir: /workspace/web
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - ..:/workspace:cached
 | 
				
			||||||
 | 
					    ports:
 | 
				
			||||||
 | 
					      - "8080:443"
 | 
				
			||||||
 | 
					    networks:
 | 
				
			||||||
 | 
					      dev:
 | 
				
			||||||
 | 
					        aliases:
 | 
				
			||||||
 | 
					          - tactical-frontend
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					networks:
 | 
				
			||||||
 | 
					  dev:
 | 
				
			||||||
 | 
					    driver: bridge
 | 
				
			||||||
 | 
					    ipam:
 | 
				
			||||||
 | 
					      driver: default
 | 
				
			||||||
 | 
					      config:
 | 
				
			||||||
 | 
					        - subnet: ${DOCKER_NETWORK}
 | 
				
			||||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -33,3 +33,4 @@ yarn-error.log*
 | 
				
			|||||||
*.sln
 | 
					*.sln
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.env
 | 
					.env
 | 
				
			||||||
 | 
					/public/env-config.js
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										838
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										838
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										22
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								package.json
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "web",
 | 
					  "name": "web",
 | 
				
			||||||
  "version": "0.100.8-dev",
 | 
					  "version": "0.100.9-dev",
 | 
				
			||||||
  "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.15.0",
 | 
					    "@quasar/extras": "1.15.1",
 | 
				
			||||||
    "apexcharts": "3.35.4",
 | 
					    "apexcharts": "3.35.4",
 | 
				
			||||||
    "axios": "0.27.2",
 | 
					    "axios": "0.27.2",
 | 
				
			||||||
    "dotenv": "16.0.1",
 | 
					    "dotenv": "16.0.1",
 | 
				
			||||||
    "qrcode.vue": "3.3.3",
 | 
					    "qrcode.vue": "3.3.3",
 | 
				
			||||||
    "quasar": "2.7.5",
 | 
					    "quasar": "2.7.7",
 | 
				
			||||||
    "vue": "3.2.37",
 | 
					    "vue": "3.2.37",
 | 
				
			||||||
    "vue3-ace-editor": "2.2.2",
 | 
					    "vue3-ace-editor": "2.2.2",
 | 
				
			||||||
    "vue3-apexcharts": "1.4.1",
 | 
					    "vue3-apexcharts": "1.4.1",
 | 
				
			||||||
    "vuedraggable": "4.1.0",
 | 
					    "vuedraggable": "4.1.0",
 | 
				
			||||||
    "vue-router": "4.1.2",
 | 
					    "vue-router": "4.1.3",
 | 
				
			||||||
    "vuex": "4.0.2"
 | 
					    "vuex": "4.0.2"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@quasar/cli": "^1.3.2",
 | 
					    "@quasar/cli": "^1.3.2",
 | 
				
			||||||
    "@intlify/vite-plugin-vue-i18n": "^5.0.1",
 | 
					    "@intlify/vite-plugin-vue-i18n": "^6.0.0",
 | 
				
			||||||
    "@quasar/app-vite": "^1.0.5",
 | 
					    "@quasar/app-vite": "^1.0.6",
 | 
				
			||||||
    "@types/node": "^18.6.1",
 | 
					    "@types/node": "^18.6.5",
 | 
				
			||||||
    "@typescript-eslint/eslint-plugin": "^5.30.5",
 | 
					    "@typescript-eslint/eslint-plugin": "^5.33.0",
 | 
				
			||||||
    "@typescript-eslint/parser": "^5.30.5",
 | 
					    "@typescript-eslint/parser": "^5.33.0",
 | 
				
			||||||
    "autoprefixer": "^10.4.7",
 | 
					    "autoprefixer": "^10.4.7",
 | 
				
			||||||
    "eslint": "^8.20.0",
 | 
					    "eslint": "^8.21.0",
 | 
				
			||||||
    "eslint-config-prettier": "^8.5.0",
 | 
					    "eslint-config-prettier": "^8.5.0",
 | 
				
			||||||
    "eslint-plugin-vue": "^8.5.0",
 | 
					    "eslint-plugin-vue": "^8.5.0",
 | 
				
			||||||
    "prettier": "^2.7.1",
 | 
					    "prettier": "^2.7.1",
 | 
				
			||||||
    "typescript": "^4.7.4"
 | 
					    "typescript": "^4.7.4"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -356,6 +356,27 @@ export default {
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  methods: {
 | 
					  methods: {
 | 
				
			||||||
    filterTable(rows, terms, cols, cellValue) {
 | 
					    filterTable(rows, terms, cols, cellValue) {
 | 
				
			||||||
 | 
					      const hiddenFields = [
 | 
				
			||||||
 | 
					        "version",
 | 
				
			||||||
 | 
					        "operating_system",
 | 
				
			||||||
 | 
					        "public_ip",
 | 
				
			||||||
 | 
					        "cpu_model",
 | 
				
			||||||
 | 
					        "graphics",
 | 
				
			||||||
 | 
					        "local_ips",
 | 
				
			||||||
 | 
					        "make_model",
 | 
				
			||||||
 | 
					        "physical_disks",
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // quasar filter only does visible columns so this is a hack to add hidden columns we want to filter
 | 
				
			||||||
 | 
					      for (const elem of hiddenFields) {
 | 
				
			||||||
 | 
					        if (!cols.find((o) => o.name === elem)) {
 | 
				
			||||||
 | 
					          cols.push({
 | 
				
			||||||
 | 
					            name: elem,
 | 
				
			||||||
 | 
					            field: elem,
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const lowerTerms = terms ? terms.toLowerCase() : "";
 | 
					      const lowerTerms = terms ? terms.toLowerCase() : "";
 | 
				
			||||||
      let advancedFilter = false;
 | 
					      let advancedFilter = false;
 | 
				
			||||||
      let availability = null;
 | 
					      let availability = null;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,17 @@
 | 
				
			|||||||
          <q-badge color="primary" class="q-ml-sm text-caption">{{
 | 
					          <q-badge color="primary" class="q-ml-sm text-caption">{{
 | 
				
			||||||
            v
 | 
					            v
 | 
				
			||||||
          }}</q-badge>
 | 
					          }}</q-badge>
 | 
				
			||||||
 | 
					          <q-btn
 | 
				
			||||||
 | 
					              v-if="!!v"
 | 
				
			||||||
 | 
					              size="sm"
 | 
				
			||||||
 | 
					              class="q-ml-xs"
 | 
				
			||||||
 | 
					              flat
 | 
				
			||||||
 | 
					              round
 | 
				
			||||||
 | 
					              icon="content_copy"
 | 
				
			||||||
 | 
					              @click="copyValueToClip(v)"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <q-tooltip>Copy to Clipboard</q-tooltip>
 | 
				
			||||||
 | 
					            </q-btn>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <q-separator v-if="info.length > 1" />
 | 
					      <q-separator v-if="info.length > 1" />
 | 
				
			||||||
@@ -15,6 +26,8 @@
 | 
				
			|||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
 | 
					import { copyToClipboard } from "quasar";
 | 
				
			||||||
 | 
					import { notifySuccess } from "@/utils/notify";
 | 
				
			||||||
// composition imports
 | 
					// composition imports
 | 
				
			||||||
import { computed } from "vue";
 | 
					import { computed } from "vue";
 | 
				
			||||||
import { useStore } from "vuex";
 | 
					import { useStore } from "vuex";
 | 
				
			||||||
@@ -28,9 +41,17 @@ export default {
 | 
				
			|||||||
    const store = useStore();
 | 
					    const store = useStore();
 | 
				
			||||||
    const tabHeight = computed(() => store.state.tabHeight);
 | 
					    const tabHeight = computed(() => store.state.tabHeight);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function copyValueToClip(val) {
 | 
				
			||||||
 | 
					      copyToClipboard(val)
 | 
				
			||||||
 | 
					        .then(() => {
 | 
				
			||||||
 | 
					          notifySuccess("Copied to clipboard");
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      tabHeight,
 | 
					      tabHeight,
 | 
				
			||||||
      uid,
 | 
					      uid,
 | 
				
			||||||
 | 
					      copyValueToClip,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -465,8 +465,51 @@ export default {
 | 
				
			|||||||
      });
 | 
					      });
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    editAgent() {
 | 
					    editAgent() {
 | 
				
			||||||
      delete this.agent.all_timezones;
 | 
					      // TODO we need to fix the serializer to not send this stuff
 | 
				
			||||||
      delete this.agent.timezone;
 | 
					      const toRemove = [
 | 
				
			||||||
 | 
					        "created_by",
 | 
				
			||||||
 | 
					        "created_time",
 | 
				
			||||||
 | 
					        "modified_by",
 | 
				
			||||||
 | 
					        "modified_time",
 | 
				
			||||||
 | 
					        "all_timezones",
 | 
				
			||||||
 | 
					        "timezone",
 | 
				
			||||||
 | 
					        "wmi_detail",
 | 
				
			||||||
 | 
					        "services",
 | 
				
			||||||
 | 
					        "status",
 | 
				
			||||||
 | 
					        "cpu_model",
 | 
				
			||||||
 | 
					        "local_ips",
 | 
				
			||||||
 | 
					        "make_model",
 | 
				
			||||||
 | 
					        "physical_disks",
 | 
				
			||||||
 | 
					        "graphics",
 | 
				
			||||||
 | 
					        "checks",
 | 
				
			||||||
 | 
					        "patches_last_installed",
 | 
				
			||||||
 | 
					        "last_seen",
 | 
				
			||||||
 | 
					        "applied_policies",
 | 
				
			||||||
 | 
					        "effective_patch_policy",
 | 
				
			||||||
 | 
					        "version",
 | 
				
			||||||
 | 
					        "operating_system",
 | 
				
			||||||
 | 
					        "plat",
 | 
				
			||||||
 | 
					        "goarch",
 | 
				
			||||||
 | 
					        "hostname",
 | 
				
			||||||
 | 
					        "public_ip",
 | 
				
			||||||
 | 
					        "total_ram",
 | 
				
			||||||
 | 
					        "disks",
 | 
				
			||||||
 | 
					        "boot_time",
 | 
				
			||||||
 | 
					        "logged_in_username",
 | 
				
			||||||
 | 
					        "last_logged_in_user",
 | 
				
			||||||
 | 
					        "needs_reboot",
 | 
				
			||||||
 | 
					        "choco_installed",
 | 
				
			||||||
 | 
					        "policy",
 | 
				
			||||||
 | 
					        "mesh_node_id",
 | 
				
			||||||
 | 
					        "block_policy_inheritance",
 | 
				
			||||||
 | 
					        "maintenance_mode",
 | 
				
			||||||
 | 
					        "alert_template",
 | 
				
			||||||
 | 
					        "client",
 | 
				
			||||||
 | 
					        "site_name",
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					      for (const elem of toRemove) {
 | 
				
			||||||
 | 
					        delete this.agent[elem];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // only send the timezone data if it has changed
 | 
					      // only send the timezone data if it has changed
 | 
				
			||||||
      // this way django will keep the db column as null and inherit from the global setting
 | 
					      // this way django will keep the db column as null and inherit from the global setting
 | 
				
			||||||
@@ -503,7 +546,7 @@ export default {
 | 
				
			|||||||
        else if (day === 0) result += "Sun, ";
 | 
					        else if (day === 0) result += "Sun, ";
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      return result.trimRight(",");
 | 
					      return result.trimEnd(",");
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  mounted() {
 | 
					  mounted() {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user