Compare commits

...

20 Commits

Author SHA1 Message Date
wh1te909
13f0f117da Release 0.101.40 2024-02-03 01:44:41 +00:00
wh1te909
2db4eeec05 bump version 2024-02-03 01:44:28 +00:00
Dan
fe5e8aa5fe Merge pull request #17 from JordanLukeJones/JordanLukeJones-OTP-1
Update LoginView.vue
2024-02-02 17:40:36 -08:00
Jordan Jones
13e35d24a2 Update LoginView.vue
Add's ability to auto-populate OTP on compatible devices
2024-02-02 09:29:19 +00:00
wh1te909
0b6ae80777 Release 0.101.39 2024-02-02 00:55:23 +00:00
wh1te909
5e0fab88a3 bump version 2024-02-02 00:53:27 +00:00
wh1te909
bf8797264b feat: hide custom fields in summary tab only amidaware/tacticalrmm#1745 2024-01-28 03:22:54 +00:00
wh1te909
14bde967bd feat: add serial number to linux/mac amidaware/tacticalrmm#1683 2024-01-27 02:47:23 +00:00
wh1te909
596ce69789 feat: add from name to email amidaware/tacticalrmm#1726 2024-01-26 00:38:12 +00:00
wh1te909
c5491dcb73 feat: add time and ret code to script test closes amidaware/tacticalrmm#1713 2024-01-26 00:04:58 +00:00
wh1te909
3f6340f0a1 update reqs 2024-01-26 00:04:19 +00:00
wh1te909
351f0870a9 update reqs 2024-01-19 08:09:06 +00:00
Dan
f2638a4c5e Merge pull request #16 from silversword411/develop
Increase user preferences width
2024-01-18 23:14:41 -08:00
silversword411
2bd00d5ca0 Increase user preferences width 2024-01-19 05:31:47 +00:00
wh1te909
00a40dd450 forgot to include 80% 2024-01-17 19:19:00 +00:00
wh1te909
cfe1cb2dbf Release 0.101.38 2023-12-22 17:50:19 +00:00
wh1te909
16fb75b56c bump version 2023-12-22 17:49:31 +00:00
wh1te909
094cf45ce3 add M3 2023-12-22 17:44:55 +00:00
wh1te909
d6984b3da9 use ticket instead of email 2023-12-22 17:44:36 +00:00
sadnub
53fc6f4cde fix folder view 2023-12-12 10:50:32 -05:00
12 changed files with 485 additions and 398 deletions

754
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "web", "name": "web",
"version": "0.101.37", "version": "0.101.40",
"private": true, "private": true,
"productName": "Tactical RMM", "productName": "Tactical RMM",
"scripts": { "scripts": {
@@ -10,34 +10,34 @@
"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.8", "@quasar/extras": "1.16.9",
"apexcharts": "3.44.0", "apexcharts": "3.45.2",
"axios": "1.6.2", "axios": "1.6.7",
"dotenv": "16.3.1", "dotenv": "16.4.1",
"qrcode.vue": "3.4.1", "qrcode.vue": "3.4.1",
"quasar": "2.13.0", "quasar": "2.14.3",
"vue": "3.3.9", "vue": "3.4.15",
"vue3-apexcharts": "1.4.4", "vue3-apexcharts": "1.4.4",
"vuedraggable": "4.1.0", "vuedraggable": "4.1.0",
"vue-router": "4.2.5", "vue-router": "4.2.5",
"@vueuse/core": "10.6.1", "@vueuse/core": "10.7.2",
"@vueuse/shared": "10.6.1", "@vueuse/shared": "10.7.2",
"monaco-editor": "0.44.0", "monaco-editor": "0.45.0",
"vuex": "4.1.0", "vuex": "4.1.0",
"yaml": "2.3.4" "yaml": "2.3.4"
}, },
"devDependencies": { "devDependencies": {
"@quasar/cli": "2.3.0", "@quasar/cli": "2.3.0",
"@intlify/unplugin-vue-i18n": "1.5.0", "@intlify/unplugin-vue-i18n": "2.0.0",
"@quasar/app-vite": "1.6.2", "@quasar/app-vite": "1.7.3",
"@types/node": "20.10.0", "@types/node": "20.11.6",
"@typescript-eslint/eslint-plugin": "6.13.1", "@typescript-eslint/eslint-plugin": "6.19.1",
"@typescript-eslint/parser": "6.13.1", "@typescript-eslint/parser": "6.19.1",
"autoprefixer": "10.4.16", "autoprefixer": "10.4.17",
"eslint": "8.54.0", "eslint": "8.56.0",
"eslint-config-prettier": "9.0.0", "eslint-config-prettier": "9.1.0",
"eslint-plugin-vue": "8.7.1", "eslint-plugin-vue": "8.7.1",
"prettier": "3.1.0", "prettier": "3.2.4",
"typescript": "5.3.2" "typescript": "5.3.3"
} }
} }

View File

@@ -267,7 +267,11 @@ export default {
const loading = ref(false); const loading = ref(false);
const serial_number = computed(() => { const serial_number = computed(() => {
if (summary.value.plat === "windows") {
return summary.value.wmi_detail.bios?.[0]?.[0]?.SerialNumber; return summary.value.wmi_detail.bios?.[0]?.[0]?.SerialNumber;
} else {
return summary.value.wmi_detail.serialnumber;
}
}); });
const cpu = computed(() => { const cpu = computed(() => {
@@ -280,7 +284,7 @@ export default {
function diskBarColor(percent) { function diskBarColor(percent) {
if (percent < 80) { if (percent < 80) {
return dash_positive_color.value; return dash_positive_color.value;
} else if (percent > 80 && percent < 95) { } else if (percent >= 80 && percent < 95) {
return dash_warning_color.value; return dash_warning_color.value;
} else { } else {
return dash_negative_color.value; return dash_negative_color.value;
@@ -315,7 +319,7 @@ export default {
); );
if ( if (
definition && definition &&
!definition.hide_in_ui && !definition.hide_in_summary &&
customField.value?.length > 0 customField.value?.length > 0
) { ) {
ret.push({ ret.push({

View File

@@ -137,7 +137,7 @@
<q-radio <q-radio
v-model="goarch" v-model="goarch"
:val="GOARCH_ARM64" :val="GOARCH_ARM64"
label="Apple Silicon (M1, M2)" label="Apple Silicon (M1, M2, M3)"
v-show="agentOS === 'darwin'" v-show="agentOS === 'darwin'"
/> />
<q-radio <q-radio

View File

@@ -142,6 +142,11 @@
v-model="localField.hide_in_ui" v-model="localField.hide_in_ui"
color="green" color="green"
/> />
<q-toggle
label="Hide in Summary Tab"
v-model="localField.hide_in_summary"
color="green"
/>
</q-card-section> </q-card-section>
<q-card-actions align="right"> <q-card-actions align="right">
<q-btn flat label="Cancel" v-close-popup /> <q-btn flat label="Cancel" v-close-popup />
@@ -172,6 +177,7 @@ export default {
default_value_bool: false, default_value_bool: false,
default_values_multiple: [], default_values_multiple: [],
hide_in_ui: false, hide_in_ui: false,
hide_in_summary: false,
}, },
modelOptions: [ modelOptions: [
{ label: "Client", value: "client" }, { label: "Client", value: "client" },

View File

@@ -57,6 +57,10 @@
<q-td> <q-td>
<q-icon v-if="props.row.hide_in_ui" name="check" /> <q-icon v-if="props.row.hide_in_ui" name="check" />
</q-td> </q-td>
<!-- hide in summary tab -->
<q-td>
<q-icon v-if="props.row.hide_in_summary" name="check" />
</q-td>
<!-- default value --> <!-- default value -->
<q-td v-if="props.row.type === 'checkbox'"> <q-td v-if="props.row.type === 'checkbox'">
{{ props.row.default_value_bool }} {{ props.row.default_value_bool }}
@@ -123,6 +127,13 @@ export default {
align: "left", align: "left",
sortable: true, sortable: true,
}, },
{
name: "hide_in_summary",
label: "Hide in Summary Tab",
field: "hide_in_summary",
align: "left",
sortable: true,
},
{ {
name: "default_value", name: "default_value",
label: "Default Value", label: "Default Value",

View File

@@ -71,7 +71,7 @@
icon="info" icon="info"
@click=" @click="
openURL( openURL(
'https://quasar.dev/quasar-utils/date-utils#format-for-display' 'https://quasar.dev/quasar-utils/date-utils#format-for-display',
) )
" "
> >
@@ -216,7 +216,7 @@
<div class="text-subtitle2">SMTP Settings</div> <div class="text-subtitle2">SMTP Settings</div>
<q-separator /> <q-separator />
<q-card-section class="row"> <q-card-section class="row">
<div class="col-2">From:</div> <div class="col-2">From email:</div>
<div class="col-4"></div> <div class="col-4"></div>
<q-input <q-input
outlined outlined
@@ -226,6 +226,16 @@
:rules="[(val) => isValidEmail(val) || 'Invalid email']" :rules="[(val) => isValidEmail(val) || 'Invalid email']"
/> />
</q-card-section> </q-card-section>
<q-card-section class="row">
<div class="col-2">From name:</div>
<div class="col-4"></div>
<q-input
outlined
dense
v-model="settings.smtp_from_name"
class="col-6 q-pa-none"
/>
</q-card-section>
<q-card-section class="row"> <q-card-section class="row">
<div class="col-2">Host:</div> <div class="col-2">Host:</div>
<div class="col-4"></div> <div class="col-4"></div>
@@ -711,13 +721,13 @@ export default {
}, },
removeEmail(email) { removeEmail(email) {
const removed = this.settings.email_alert_recipients.filter( const removed = this.settings.email_alert_recipients.filter(
(k) => k !== email (k) => k !== email,
); );
this.settings.email_alert_recipients = removed; this.settings.email_alert_recipients = removed;
}, },
removeSMSNumber(num) { removeSMSNumber(num) {
const removed = this.settings.sms_alert_recipients.filter( const removed = this.settings.sms_alert_recipients.filter(
(k) => k !== num (k) => k !== num,
); );
this.settings.sms_alert_recipients = removed; this.settings.sms_alert_recipients = removed;
}, },

View File

@@ -1,6 +1,6 @@
<template> <template>
<q-dialog ref="dialog" @hide="onHide"> <q-dialog ref="dialog" @hide="onHide">
<q-card class="q-dialog-plugin" style="min-width: 85vh"> <q-card class="q-dialog-plugin" style="min-width: 60vw">
<q-splitter v-model="splitterModel"> <q-splitter v-model="splitterModel">
<template v-slot:before> <template v-slot:before>
<q-tabs dense v-model="tab" vertical class="text-primary"> <q-tabs dense v-model="tab" vertical class="text-primary">
@@ -201,7 +201,7 @@
icon="info" icon="info"
@click=" @click="
openURL( openURL(
'https://quasar.dev/quasar-utils/date-utils#format-for-display' 'https://quasar.dev/quasar-utils/date-utils#format-for-display',
) )
" "
> >
@@ -315,7 +315,7 @@ export default {
this.$axios.get("/core/urlaction/").then((r) => { this.$axios.get("/core/urlaction/").then((r) => {
if (r.data.length === 0) { if (r.data.length === 0) {
this.notifyWarning( 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; return;
} }

View File

@@ -178,7 +178,8 @@
<!-- is community script icon --> <!-- is community script icon -->
<img <img
v-if="props.row.script_type === 'builtin'" v-if="props.node.script_type === 'builtin'"
class="vertical-middle"
:src="trmmLogo" :src="trmmLogo"
style="height: 20px; max-width: 20px" style="height: 20px; max-width: 20px"
/> />

View File

@@ -8,8 +8,25 @@
<q-tooltip class="bg-white text-primary">Close</q-tooltip> <q-tooltip class="bg-white text-primary">Close</q-tooltip>
</q-btn> </q-btn>
</q-bar> </q-bar>
<q-card-section class="scroll" style="max-height: 70vh; height: 70vh"> <q-card-section style="height: 70vh" class="scroll">
<pre v-if="ret">{{ ret }}</pre> <div>
Run Time:
<code>{{ ret.execution_time }} seconds</code>
<br />Return Code:
<code>{{ ret.retcode }}</code>
<br />
</div>
<br />
<div v-if="ret.stdout">
Standard Output
<q-separator />
<pre>{{ ret.stdout }}</pre>
</div>
<div v-if="ret.stderr">
Standard Error
<q-separator />
<pre>{{ ret.stderr }}</pre>
</div>
<q-inner-loading :showing="loading" /> <q-inner-loading :showing="loading" />
</q-card-section> </q-card-section>
</q-card> </q-card>
@@ -34,7 +51,12 @@ export default {
const { dialogRef, onDialogHide } = useDialogPluginComponent(); const { dialogRef, onDialogHide } = useDialogPluginComponent();
// main run script functionality // main run script functionality
const ret = ref(null); const ret = ref({
execution_time: "",
retcode: "",
stdout: "",
stderr: "",
});
const loading = ref(false); const loading = ref(false);
async function runTestScript() { async function runTestScript() {

View File

@@ -25,8 +25,8 @@
If you have downgraded or cancelled your sponsorship, please delete If you have downgraded or cancelled your sponsorship, please delete
your token from the Code Signing modal and refresh to get rid of this your token from the Code Signing modal and refresh to get rid of this
banner.<br /><br /> banner.<br /><br />
For any issues or to renew your sponsorship please email For any issues or to renew your sponsorship please open a ticket at
support@amidaware.com<br /><br support.amidaware.com<br /><br
/></span> /></span>
<q-btn <q-btn
color="dark" color="dark"

View File

@@ -63,6 +63,7 @@
autofocus autofocus
outlined outlined
v-model="credentials.twofactor" v-model="credentials.twofactor"
autocomplete="one-time-code"
:rules="[ :rules="[
(val) => (val) =>
(val && val.length > 0) || 'This field is required', (val && val.length > 0) || 'This field is required',