Compare commits

...

19 Commits

Author SHA1 Message Date
wh1te909
1eca4d605b Release 0.101.3 2022-10-19 22:35:54 +00:00
wh1te909
776c27ec26 bump version 2022-10-19 22:33:09 +00:00
wh1te909
41c61ce152 update reqs 2022-10-19 06:50:50 +00:00
wh1te909
8e9de8b6b6 check if token expired 2022-10-19 06:47:16 +00:00
wh1te909
4cf5f7a3cb update reqs 2022-10-18 00:20:02 +00:00
wh1te909
9729492d1c make link readable in dark mode amidaware/tacticalrmm#1314 2022-10-14 02:06:15 +00:00
wh1te909
52ee98f6f8 Release 0.101.0 2022-09-24 02:43:53 +00:00
wh1te909
d6da8b4a96 bump version 2022-09-24 02:10:26 +00:00
wh1te909
9264cf4044 change dl command 2022-09-24 02:10:03 +00:00
wh1te909
3a45c2a309 mac agent 2022-09-23 22:58:56 +00:00
wh1te909
59de35c698 update reqs 2022-09-23 16:18:06 +00:00
wh1te909
d270b877c9 Release 0.100.9 2022-08-23 05:04:57 +00:00
wh1te909
5b8ac2c809 bump version 2022-08-23 05:04:43 +00:00
wh1te909
fd8b2a1d98 Release 0.100.8 2022-08-09 20:40:48 +00:00
wh1te909
f518043d8d Release 0.100.7 2022-08-01 17:36:11 +00:00
wh1te909
cc2335558d Release 0.100.6 2022-07-27 06:15:49 +00:00
wh1te909
a8a171ba2c Release 0.100.5 2022-07-10 00:00:08 +00:00
wh1te909
24a63f477e Release 0.100.4 2022-07-07 16:38:14 +00:00
wh1te909
ddeb6293a1 init 2022-05-17 20:46:22 +00:00
10 changed files with 585 additions and 504 deletions

966
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.100.9-dev", "version": "0.101.3",
"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.1", "@quasar/extras": "1.15.5",
"apexcharts": "3.35.4", "apexcharts": "3.35.5",
"axios": "0.27.2", "axios": "0.27.2",
"dotenv": "16.0.1", "dotenv": "16.0.3",
"qrcode.vue": "3.3.3", "qrcode.vue": "3.3.3",
"quasar": "2.7.7", "quasar": "2.10.0",
"vue": "3.2.37", "vue": "3.2.41",
"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.3", "vue-router": "4.1.5",
"vuex": "4.0.2" "vuex": "4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@quasar/cli": "^1.3.2", "@quasar/cli": "^1.3.2",
"@intlify/vite-plugin-vue-i18n": "^6.0.0", "@intlify/vite-plugin-vue-i18n": "^6.0.3",
"@quasar/app-vite": "^1.0.6", "@quasar/app-vite": "^1.1.3",
"@types/node": "^18.6.5", "@types/node": "^18.11.2",
"@typescript-eslint/eslint-plugin": "^5.33.0", "@typescript-eslint/eslint-plugin": "^5.40.1",
"@typescript-eslint/parser": "^5.33.0", "@typescript-eslint/parser": "^5.40.1",
"autoprefixer": "^10.4.7", "autoprefixer": "^10.4.12",
"eslint": "^8.21.0", "eslint": "^8.25.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.8.4"
} }
} }

View File

@@ -196,6 +196,14 @@
> >
<q-tooltip>Linux</q-tooltip> <q-tooltip>Linux</q-tooltip>
</q-icon> </q-icon>
<q-icon
v-else-if="props.row.plat === 'darwin'"
name="mdi-apple"
size="sm"
color="primary"
>
<q-tooltip>macOS</q-tooltip>
</q-icon>
</q-td> </q-td>
<q-td key="checks-status" :props="props"> <q-td key="checks-status" :props="props">

View File

@@ -310,9 +310,10 @@ export default {
} }
function showUpdateDetails(update) { function showUpdateDetails(update) {
const color = $q.dark.isActive ? "white" : "";
let support_urls = ""; let support_urls = "";
update.more_info_urls.forEach((u) => { update.more_info_urls.forEach((u) => {
support_urls += `<a href='${u}' target='_blank'>${u}</a><br/>`; support_urls += `<a style='color: ${color}' href='${u}' target='_blank'>${u}</a><br/>`;
}); });
let cats = update.categories.join(", "); let cats = update.categories.join(", ");
$q.dialog({ $q.dialog({

View File

@@ -10,10 +10,13 @@
</q-card-actions> </q-card-actions>
</q-card-section> </q-card-section>
<q-card-section> <q-card-section>
<p class="text-subtitle1"> <p v-if="info.plat === 'windows'" class="text-subtitle1">
Download the agent then run the following command from an elevated Download the agent then run the following command from an elevated
command prompt on the device you want to add. command prompt on the device you want to add.
</p> </p>
<p v-else-if="info.plat === 'darwin'" class="text-subtitle1">
Run the following command from a terminal
</p>
<p> <p>
<q-field outlined :color="$q.dark.isActive ? 'white' : 'black'"> <q-field outlined :color="$q.dark.isActive ? 'white' : 'black'">
<code>{{ info.data.cmd }}</code> <code>{{ info.data.cmd }}</code>
@@ -37,7 +40,7 @@
</q-badge> </q-badge>
<span>Do not popup any message boxes during install</span> <span>Do not popup any message boxes during install</span>
</div> </div>
<div class="q-pa-xs q-gutter-xs"> <div v-if="info.plat === 'windows'" class="q-pa-xs q-gutter-xs">
<q-badge class="text-caption q-mr-xs" color="grey" text-color="black"> <q-badge class="text-caption q-mr-xs" color="grey" text-color="black">
<code <code
>-local-mesh "C:\\&lt;some folder or >-local-mesh "C:\\&lt;some folder or
@@ -46,7 +49,7 @@
</q-badge> </q-badge>
<span> To skip downloading the Mesh Agent during the install.</span> <span> To skip downloading the Mesh Agent during the install.</span>
</div> </div>
<div class="q-pa-xs q-gutter-xs"> <div v-if="info.plat === 'windows'" class="q-pa-xs q-gutter-xs">
<q-badge class="text-caption q-mr-xs" color="grey" text-color="black"> <q-badge class="text-caption q-mr-xs" color="grey" text-color="black">
<code <code
>-meshdir "C:\Program Files\Your Company Name\Mesh Agent"</code >-meshdir "C:\Program Files\Your Company Name\Mesh Agent"</code
@@ -63,7 +66,7 @@
</q-badge> </q-badge>
<span>Don't install the mesh agent</span> <span>Don't install the mesh agent</span>
</div> </div>
<div class="q-pa-xs q-gutter-xs"> <div v-if="info.plat === 'windows'" class="q-pa-xs q-gutter-xs">
<q-badge class="text-caption q-mr-xs" color="grey" text-color="black"> <q-badge class="text-caption q-mr-xs" color="grey" text-color="black">
<code>-cert "C:\\&lt;some folder or path&gt;\\ca.pem"</code> <code>-cert "C:\\&lt;some folder or path&gt;\\ca.pem"</code>
</q-badge> </q-badge>
@@ -86,12 +89,12 @@
<p class="text-italic"> <p class="text-italic">
Note: the auth token above will be valid for {{ info.expires }} hours. Note: the auth token above will be valid for {{ info.expires }} hours.
</p> </p>
<q-btn <q-btn v-if="info.plat === 'windows'"
type="a" type="a"
:href="info.data.url" :href="info.data.url"
color="primary" color="primary"
label="Download Agent" label="Download Agent"
/> ></q-btn>
</q-card-section> </q-card-section>
</q-card> </q-card>
</template> </template>

View File

@@ -223,6 +223,7 @@ const monTypeOptions = [
const osTypeOptions = [ const osTypeOptions = [
{ label: "Windows", value: "windows" }, { label: "Windows", value: "windows" },
{ label: "Linux", value: "linux" }, { label: "Linux", value: "linux" },
{ label: "macOS", value: "darwin" },
{ label: "All", value: "all" }, { label: "All", value: "all" },
]; ];

View File

@@ -52,6 +52,15 @@
goarch = GOARCH_AMD64; goarch = GOARCH_AMD64;
" "
/> />
<q-radio
v-model="agentOS"
val="darwin"
label="macOS"
@update:model-value="
installMethod = 'mac';
goarch = GOARCH_AMD64;
"
/>
</div> </div>
</q-card-section> </q-card-section>
<q-card-section> <q-card-section>
@@ -105,37 +114,37 @@
v-model="goarch" v-model="goarch"
:val="GOARCH_AMD64" :val="GOARCH_AMD64"
label="64 bit" label="64 bit"
v-show="agentOS === 'windows'" v-show="agentOS === 'windows' || agentOS === 'linux'"
/>
<q-radio
v-model="goarch"
:val="GOARCH_i386"
label="32 bit"
v-show="agentOS === 'windows'"
/> />
<q-radio <q-radio
v-model="goarch" v-model="goarch"
:val="GOARCH_AMD64" :val="GOARCH_AMD64"
label="64 bit" label="Intel 64 bit"
v-show="agentOS !== 'windows'" v-show="agentOS === 'darwin'"
/> />
<q-radio <q-radio
v-model="goarch" v-model="goarch"
:val="GOARCH_i386" :val="GOARCH_i386"
label="32 bit" label="32 bit"
v-show="agentOS !== 'windows'" v-show="agentOS !== 'darwin'"
/> />
<q-radio <q-radio
v-model="goarch" v-model="goarch"
:val="GOARCH_ARM64" :val="GOARCH_ARM64"
label="ARM 64 bit" label="ARM 64 bit"
v-show="agentOS !== 'windows'" v-show="agentOS === 'linux'"
/>
<q-radio
v-model="goarch"
:val="GOARCH_ARM64"
label="Apple Silicon (M1, M2)"
v-show="agentOS === 'darwin'"
/> />
<q-radio <q-radio
v-model="goarch" v-model="goarch"
:val="GOARCH_ARM32" :val="GOARCH_ARM32"
label="ARM 32 bit (Rasp Pi)" label="ARM 32 bit (Rasp Pi)"
v-show="agentOS !== 'windows'" v-show="agentOS === 'linux'"
/> />
</div> </div>
</q-card-section> </q-card-section>
@@ -266,12 +275,13 @@ export default {
plat: this.agentOS, plat: this.agentOS,
}; };
if (this.installMethod === "manual") { if (this.installMethod === "manual" || this.installMethod === "mac") {
this.$axios.post("/agents/installer/", data).then((r) => { this.$axios.post("/agents/installer/", data).then((r) => {
this.info = { this.info = {
expires: this.expires, expires: this.expires,
data: r.data, data: r.data,
goarch: this.goarch, goarch: this.goarch,
plat: this.agentOS,
}; };
this.showAgentDownload = true; this.showAgentDownload = true;
}); });
@@ -343,6 +353,9 @@ export default {
case "bash": case "bash":
text = "Download linux install script"; text = "Download linux install script";
break; break;
case "mac":
text = "Show installation instructions";
break;
} }
return text; return text;

View File

@@ -37,4 +37,5 @@ export function cmdPlaceholder(shell) {
export const agentPlatformOptions = [ export const agentPlatformOptions = [
{ value: "windows", label: "Windows" }, { value: "windows", label: "Windows" },
{ value: "linux", label: "Linux" }, { value: "linux", label: "Linux" },
{ value: "darwin", label: "macOS" },
]; ];

View File

@@ -14,6 +14,22 @@
@click="$store.dispatch('reload')" @click="$store.dispatch('reload')"
/> />
</q-banner> </q-banner>
<q-banner
v-if="!hosted && tokenExpired"
inline-actions
class="bg-yellow text-black text-center"
>
<q-icon size="xl" name="warning" />
<span><br />Your code signing token is no longer valid.<br/><br/>
If you have downgraded or cancelled your sponsorship, please delete your token from the Code Signing modal and refresh to get rid of this banner.<br/><br/>
For any issues or to renew your sponsorship please email support@amidaware.com<br/><br/></span>
<q-btn
color="dark"
icon="refresh"
label="Refresh"
@click="$store.dispatch('reload')"
/>
</q-banner>
<q-toolbar> <q-toolbar>
<q-btn <q-btn
dense dense
@@ -167,6 +183,7 @@ export default {
const needRefresh = computed(() => store.state.needrefresh); const needRefresh = computed(() => store.state.needrefresh);
const user = computed(() => store.state.username); const user = computed(() => store.state.username);
const hosted = computed(() => store.state.hosted); const hosted = computed(() => store.state.hosted);
const tokenExpired = computed(() => store.state.tokenExpired);
const latestReleaseURL = computed(() => { const latestReleaseURL = computed(() => {
return latestTRMMVersion.value return latestTRMMVersion.value
@@ -259,6 +276,8 @@ export default {
user, user,
needRefresh, needRefresh,
darkMode, darkMode,
hosted,
tokenExpired,
// methods // methods
showUserPreferences, showUserPreferences,

View File

@@ -17,6 +17,7 @@ export default function () {
agentPlatform: "windows", agentPlatform: "windows",
agentTableLoading: false, agentTableLoading: false,
needrefresh: false, needrefresh: false,
tokenExpired: false,
refreshSummaryTab: false, refreshSummaryTab: false,
tableHeight: "300px", tableHeight: "300px",
tabHeight: "300px", tabHeight: "300px",
@@ -83,6 +84,9 @@ export default function () {
SET_REFRESH_NEEDED(state, action) { SET_REFRESH_NEEDED(state, action) {
state.needrefresh = action; state.needrefresh = action;
}, },
SET_TOKEN_EXPIRED(state, action) {
state.tokenExpired = action;
},
SET_SPLITTER(state, val) { SET_SPLITTER(state, val) {
// top toolbar is 50px. Filebar is 40px and agent filter tabs are 44px // top toolbar is 50px. Filebar is 40px and agent filter tabs are 44px
state.tableHeight = `${Screen.height - 50 - 40 - 78 - val}px`; state.tableHeight = `${Screen.height - 50 - 40 - 78 - val}px`;
@@ -212,6 +216,7 @@ export default function () {
context.commit("SET_URL_ACTION", data.url_action); context.commit("SET_URL_ACTION", data.url_action);
context.commit("setShowCommunityScripts", data.show_community_scripts); context.commit("setShowCommunityScripts", data.show_community_scripts);
context.commit("SET_HOSTED", data.hosted); context.commit("SET_HOSTED", data.hosted);
context.commit("SET_TOKEN_EXPIRED", data.token_is_expired);
if (data.date_format && data.date_format !== "") if (data.date_format && data.date_format !== "")
context.commit("setDateFormat", data.date_format); context.commit("setDateFormat", data.date_format);