mirror of
https://github.com/jpros/tacticalrmm-web.git
synced 2026-02-22 04:11:03 +00:00
347 lines
10 KiB
JavaScript
347 lines
10 KiB
JavaScript
import Vue from "vue";
|
|
import Vuex from "vuex";
|
|
import axios from "axios";
|
|
import { Notify } from "quasar";
|
|
import alertsModule from "./alerts";
|
|
import automationModule from "./automation";
|
|
import adminModule from "./admin.js"
|
|
|
|
Vue.use(Vuex);
|
|
|
|
export default function () {
|
|
const Store = new Vuex.Store({
|
|
modules: {
|
|
automation: automationModule,
|
|
alerts: alertsModule,
|
|
admin: adminModule
|
|
},
|
|
state: {
|
|
username: localStorage.getItem("user_name") || null,
|
|
token: localStorage.getItem("access_token") || null,
|
|
clients: {},
|
|
tree: [],
|
|
treeReady: false,
|
|
selectedRow: null,
|
|
agentSummary: {},
|
|
winUpdates: {},
|
|
agentChecks: null,
|
|
automatedTasks: {},
|
|
agentTableLoading: false,
|
|
treeLoading: false,
|
|
installedSoftware: [],
|
|
notes: [],
|
|
needrefresh: false,
|
|
tableHeight: "35vh",
|
|
tabHeight: "35vh",
|
|
showCommunityScripts: false,
|
|
agentDblClickAction: "",
|
|
defaultAgentTblTab: "server",
|
|
},
|
|
getters: {
|
|
loggedIn(state) {
|
|
return state.token !== null;
|
|
},
|
|
selectedAgentPk(state) {
|
|
return state.agentSummary.id;
|
|
},
|
|
agentDisks(state) {
|
|
return state.agentSummary.disks;
|
|
},
|
|
agentServices(state) {
|
|
return state.agentSummary.services;
|
|
},
|
|
checks(state) {
|
|
return state.agentChecks;
|
|
},
|
|
sortedUpdates(state) {
|
|
// sort patches by latest then not installed
|
|
if (!state.winUpdates.winupdates) {
|
|
return [];
|
|
}
|
|
const sortedByID = state.winUpdates.winupdates.sort((a, b) =>
|
|
a.id > b.id ? 1 : -1
|
|
);
|
|
const sortedByInstall = sortedByID.sort(a =>
|
|
a.installed === false ? -1 : 1
|
|
);
|
|
return sortedByInstall;
|
|
},
|
|
agentHostname(state) {
|
|
return state.agentSummary.hostname;
|
|
},
|
|
needRefresh(state) {
|
|
return state.needrefresh;
|
|
},
|
|
agentTableHeight(state) {
|
|
return state.tableHeight;
|
|
},
|
|
tabsTableHeight(state) {
|
|
return state.tabHeight;
|
|
},
|
|
},
|
|
mutations: {
|
|
AGENT_TABLE_LOADING(state, visible) {
|
|
state.agentTableLoading = visible;
|
|
},
|
|
setActiveRow(state, pk) {
|
|
state.selectedRow = pk;
|
|
},
|
|
retrieveToken(state, { token, username }) {
|
|
state.token = token;
|
|
state.username = username;
|
|
},
|
|
destroyCommit(state) {
|
|
state.token = null;
|
|
state.username = null;
|
|
},
|
|
getUpdatedSites(state, clients) {
|
|
state.clients = clients;
|
|
},
|
|
loadTree(state, treebar) {
|
|
state.tree = treebar;
|
|
state.treeReady = true;
|
|
},
|
|
setSummary(state, summary) {
|
|
state.agentSummary = summary;
|
|
},
|
|
SET_WIN_UPDATE(state, updates) {
|
|
state.winUpdates = updates;
|
|
},
|
|
SET_INSTALLED_SOFTWARE(state, software) {
|
|
state.installedSoftware = software;
|
|
},
|
|
setChecks(state, checks) {
|
|
state.agentChecks = checks;
|
|
},
|
|
SET_AUTOMATED_TASKS(state, tasks) {
|
|
state.automatedTasks = tasks;
|
|
},
|
|
destroySubTable(state) {
|
|
(state.agentSummary = {}),
|
|
(state.agentChecks = null),
|
|
(state.winUpdates = {});
|
|
(state.installedSoftware = []);
|
|
state.selectedRow = "";
|
|
},
|
|
SET_REFRESH_NEEDED(state, action) {
|
|
state.needrefresh = action;
|
|
},
|
|
SET_SPLITTER(state, val) {
|
|
const agentHeight = Math.abs(100 - val - 15);
|
|
const tabsHeight = Math.abs(val - 10);
|
|
agentHeight <= 15.0 ? state.tableHeight = "15vh" : state.tableHeight = `${agentHeight}vh`;
|
|
tabsHeight <= 15.0 ? state.tabHeight = "15vh" : state.tabHeight = `${tabsHeight}vh`;
|
|
},
|
|
SET_NOTES(state, notes) {
|
|
state.notes = notes;
|
|
},
|
|
setShowCommunityScripts(state, show) {
|
|
state.showCommunityScripts = show
|
|
},
|
|
SET_AGENT_DBLCLICK_ACTION(state, action) {
|
|
state.agentDblClickAction = action
|
|
},
|
|
SET_DEFAULT_AGENT_TBL_TAB(state, tab) {
|
|
state.defaultAgentTblTab = tab
|
|
}
|
|
},
|
|
actions: {
|
|
setShowCommunityScripts(context, data) {
|
|
axios.patch("/accounts/users/ui/", { show_community_scripts: data }).then(r => {
|
|
context.commit("setShowCommunityScripts", data)
|
|
})
|
|
},
|
|
toggleMaintenanceMode(context, data) {
|
|
return axios.post("/agents/maintenance/", data)
|
|
},
|
|
getAgentCounts(context, data = {}) {
|
|
return axios.post("/agents/agent_counts/", data)
|
|
},
|
|
getDashInfo(context) {
|
|
return axios.get("/core/dashinfo/");
|
|
},
|
|
loadAutomatedTasks(context, pk) {
|
|
axios.get(`/tasks/${pk}/automatedtasks/`).then(r => {
|
|
context.commit("SET_AUTOMATED_TASKS", r.data);
|
|
})
|
|
},
|
|
loadInstalledSoftware(context, pk) {
|
|
axios.get(`/software/installed/${pk}`).then(r => {
|
|
context.commit("SET_INSTALLED_SOFTWARE", r.data.software);
|
|
});
|
|
},
|
|
loadWinUpdates(context, pk) {
|
|
axios.get(`/winupdate/${pk}/getwinupdates/`).then(r => {
|
|
context.commit("SET_WIN_UPDATE", r.data);
|
|
});
|
|
},
|
|
loadSummary(context, pk) {
|
|
axios.get(`/agents/${pk}/agentdetail/`).then(r => {
|
|
context.commit("setSummary", r.data);
|
|
});
|
|
},
|
|
loadChecks(context, pk) {
|
|
axios.get(`/checks/${pk}/loadchecks/`).then(r => {
|
|
context.commit("setChecks", r.data);
|
|
});
|
|
},
|
|
loadNotes(context, pk) {
|
|
axios.get(`/agents/${pk}/notes/`).then(r => {
|
|
context.commit("SET_NOTES", r.data.notes);
|
|
});
|
|
},
|
|
loadDefaultServices(context) {
|
|
return axios.get("/services/getdefaultservices/");
|
|
},
|
|
loadAgentServices(context, agentpk) {
|
|
return axios.get(`/services/${agentpk}/services/`);
|
|
},
|
|
editCheckAlert(context, { pk, data }) {
|
|
return axios.patch(`/checks/${pk}/check/`, data);
|
|
},
|
|
deleteCheck(context, pk) {
|
|
return axios.delete(`/checks/${pk}/check/`);
|
|
},
|
|
editAutoTask(context, data) {
|
|
return axios.patch(`/tasks/${data.id}/automatedtasks/`, data);
|
|
},
|
|
deleteAutoTask(context, pk) {
|
|
return axios.delete(`/tasks/${pk}/automatedtasks/`);
|
|
},
|
|
getUpdatedSites(context) {
|
|
axios.get("/clients/clients/").then(r => {
|
|
context.commit("getUpdatedSites", r.data);
|
|
});
|
|
},
|
|
loadClients(context) {
|
|
return axios.get("/clients/clients/");
|
|
},
|
|
loadSites(context) {
|
|
return axios.get("/clients/sites/");
|
|
},
|
|
loadAgents(context) {
|
|
return axios.get("/agents/listagents/");
|
|
},
|
|
loadTree({ commit }) {
|
|
axios.get("/clients/tree/").then(r => {
|
|
|
|
if (r.data.length === 0) {
|
|
this.$router.push({ name: "InitialSetup" });
|
|
}
|
|
|
|
let output = [];
|
|
for (let client of r.data) {
|
|
|
|
let childSites = [];
|
|
for (let site of client.sites) {
|
|
|
|
let siteNode = {
|
|
label: site.name,
|
|
id: site.id,
|
|
raw: `Site|${site.id}`,
|
|
header: "generic",
|
|
icon: "apartment",
|
|
serverPolicy: site.server_policy,
|
|
workstationPolicy: site.workstation_policy,
|
|
alertTemplate: site.alert_template
|
|
}
|
|
|
|
if (site.maintenance_mode) { siteNode["color"] = "warning" }
|
|
else if (site.failing_checks) { siteNode["color"] = "negative" }
|
|
|
|
childSites.push(siteNode);
|
|
}
|
|
|
|
let clientNode = {
|
|
label: client.name,
|
|
id: client.id,
|
|
raw: `Client|${client.id}`,
|
|
header: "root",
|
|
icon: "business",
|
|
serverPolicy: client.server_policy,
|
|
workstationPolicy: client.workstation_policy,
|
|
alertTemplate: client.alert_template,
|
|
children: childSites
|
|
}
|
|
|
|
if (client.maintenance_mode) clientNode["color"] = "warning"
|
|
else if (client.failing_checks) clientNode["color"] = "negative"
|
|
|
|
output.push(clientNode);
|
|
}
|
|
|
|
// move failing clients to the top
|
|
const sortedByFailing = output.sort(a => a.color === "negative" ? -1 : 1)
|
|
commit("loadTree", sortedByFailing);
|
|
});
|
|
},
|
|
checkVer(context) {
|
|
axios.get("/core/version/").then(r => {
|
|
const version = r.data;
|
|
|
|
if (localStorage.getItem("rmmver")) {
|
|
if (localStorage.getItem("rmmver") === version) {
|
|
return;
|
|
} else {
|
|
localStorage.setItem("rmmver", "0.0.1");
|
|
context.commit("SET_REFRESH_NEEDED", true);
|
|
}
|
|
} else {
|
|
localStorage.setItem("rmmver", version);
|
|
return;
|
|
}
|
|
})
|
|
},
|
|
reload() {
|
|
localStorage.removeItem("rmmver");
|
|
location.reload();
|
|
},
|
|
retrieveToken(context, credentials) {
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.post("/login/", credentials)
|
|
.then(response => {
|
|
const token = response.data.token;
|
|
const username = credentials.username;
|
|
localStorage.setItem("access_token", token);
|
|
localStorage.setItem("user_name", username);
|
|
context.commit("retrieveToken", { token, username });
|
|
resolve(response);
|
|
})
|
|
.catch(error => {
|
|
Notify.create({
|
|
type: "negative",
|
|
timeout: 1000,
|
|
message: "Bad token"
|
|
});
|
|
reject(error);
|
|
});
|
|
});
|
|
},
|
|
destroyToken(context) {
|
|
if (context.getters.loggedIn) {
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.post("/logout/")
|
|
.then(response => {
|
|
localStorage.removeItem("access_token");
|
|
localStorage.removeItem("user_name");
|
|
context.commit("destroyCommit");
|
|
resolve(response);
|
|
})
|
|
.catch(error => {
|
|
localStorage.removeItem("access_token");
|
|
localStorage.removeItem("user_name");
|
|
context.commit("destroyCommit");
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
return Store;
|
|
}
|
|
|