You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.6 KiB
TypeScript
59 lines
2.6 KiB
TypeScript
import fs from "fs";
|
|
|
|
import parser from "xml2js";
|
|
|
|
import {SessionData} from "./startSession";
|
|
import {restCalls} from "./utils/DefaultRestCalls";
|
|
import {ExportFormat} from "./utils/Constants";
|
|
import {getSessionHeaders} from "./utils/HuaweiUtils";
|
|
|
|
const huawei = require('../jslib/public');
|
|
|
|
type MobileStatus = 'on' | 'off';
|
|
|
|
async function saveFile(filename: string, data: string) {
|
|
await fs.promises.writeFile(filename, data);
|
|
}
|
|
|
|
export async function controlMobileData(sessionData: SessionData, mobileStatus: MobileStatus) {
|
|
const data = await huawei.doRSAEncrypt(sessionData, `<?xml version="1.0" encoding="UTF-8"?><request><dataswitch>${mobileStatus === 'on' ? 1 : 0}</dataswitch></request>`);
|
|
const resp = await restCalls.sendDataRaw(`http://${sessionData.url}/api/dialup/mobile-dataswitch`, 'POST', data, await getSessionHeaders(sessionData.url));
|
|
huawei.publicSession.token2 = resp.headers.__requestverificationtoken;
|
|
const json = await parser.parseStringPromise(resp.data);
|
|
if (json.response !== 'OK') {
|
|
throw new Error(`Control Mobile Data error: ${JSON.stringify(json)}`);
|
|
}
|
|
console.log(`Control Mobile Data changed to ${mobileStatus}`);
|
|
}
|
|
|
|
export async function reconnect(sessionData: SessionData) {
|
|
const data = await huawei.doRSAEncrypt(sessionData, `<?xml version: "1.0" encoding="UTF-8"?><request><ReconnectAction>1</ReconnectAction></request>`);
|
|
const resp = await restCalls.sendDataRaw(`http://${sessionData.url}/api/net/reconnect`, 'POST', data, await getSessionHeaders(sessionData.url));
|
|
huawei.publicSession.token2 = resp.headers.__requestverificationtoken;
|
|
const json = await parser.parseStringPromise(resp.data);
|
|
if (json.response !== 'OK') {
|
|
throw new Error(`Reconnecting error: ${JSON.stringify(json)}`);
|
|
}
|
|
console.log('Reconnected');
|
|
}
|
|
|
|
export async function status(sessionData: SessionData, exportFile: string,
|
|
exportFormat: ExportFormat) {
|
|
const resp = await restCalls.fetchData(`http://${sessionData.url}/api/monitoring/status`, 'GET', await getSessionHeaders(sessionData.url));
|
|
if (exportFormat !== 'hide') {
|
|
if (exportFormat === 'xml') {
|
|
await saveFile(exportFile, resp);
|
|
console.info(`xml file ${exportFile} created`);
|
|
} else if (exportFormat === 'json') {
|
|
await saveFile(exportFile, JSON.stringify(await parser.parseStringPromise(resp)));
|
|
console.info(`json file ${exportFile} created`);
|
|
} else {
|
|
const json = await parser.parseStringPromise(resp);
|
|
const response = json.response;
|
|
Object.keys(response).forEach((key) => {
|
|
console.info(`${key}=${response[key][0]}`);
|
|
});
|
|
}
|
|
}
|
|
}
|