Get access token if unset in config.json

master
Skylar Ittner 8 months ago
parent 1f5632e53c
commit a4f4076351

@ -2,7 +2,7 @@
"homeserver": "https://matrix.org",
"mediaurlpath": "https://matrix.org/_matrix/media/r0/download/{{server-name}}/{{media-id}}",
"matrixdomain": "matrix.org",
"matrixuser": "smsbot",
"matrixuser": "@smsbot:matrix.org",
"matrixpass": "hunter2",
"matrixaccesstoken": "",
"inviteusers": ["@annoyme:matrix.org"],
@ -11,7 +11,6 @@
"smsonlyto": ["14061234567"],
"listenport": 8069,
"publicurl": "http://localhost:8069/",
"googleverifiedsms": false,
"loglevel": "debug",
"smsinterval": 15
}

@ -11,7 +11,7 @@
console.log("Starting up...");
import * as sdk from 'matrix-js-sdk';
import matrixcs from 'matrix-js-sdk'
import matrixcs from 'matrix-js-sdk';
import fs from 'fs';
import log4js from 'log4js';
import https from 'https';
@ -21,20 +21,34 @@ import request from 'request';
import FileType from 'file-type';
import express from 'express';
import bodyParser from 'body-parser';
// Load settings from config.json
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
let rawdata = fs.readFileSync(__dirname + '/config.json');
let settings = JSON.parse(rawdata);
console.log(__dirname + "/config.json loaded.");
var logger = log4js.getLogger();
logger.level = settings.loglevel;
logger.info("Log initialized.");
var initialsynccomplete = false;
// Save script start time for ignoring older messages
var boottimestamp = Date.now();
var __dirname;
var __filename;
var initialsynccomplete = false;
// Init logging
var logger = log4js.getLogger();
logger.level = "debug";
logger.info("Log initialized.");
var settings = {};
/**
* Load settings from config.json
*/
function loadSettingsFile() {
__filename = fileURLToPath(import.meta.url);
__dirname = dirname(__filename);
let rawdata = fs.readFileSync(__dirname + '/config.json');
settings = JSON.parse(rawdata);
console.log(__dirname + "/config.json loaded.");
logger.level = settings.loglevel;
}
loadSettingsFile();
// https://github.com/matrix-org/matrix-js-sdk/issues/2415#issuecomment-1188812401
matrixcs.request(request);
@ -465,13 +479,47 @@ function handleHTTPRequest(req, res) {
}
}
const client = sdk.createClient({baseUrl: settings.homeserver, userId: settings.matrixuser, accessToken: settings.matrixaccesstoken});
var httpserver = express();
var jsonParser = bodyParser.json();
client.startClient({initialSyncLimit: 10});
logger.info("Plugged into the matrix.");
// Access token empty
if (settings.matrixaccesstoken == false) {
logger.error("Matrix access token not set.");
if (settings.matrixuser == false || settings.matrixpass == false) {
logger.error("Config values for matrixuser and/or matrixpass are not valid.");
process.exit(1);
}
logger.error("Attempting to fetch access token for you...");
try {
request({
method: "POST",
uri: settings.homeserver + "/_matrix/client/v3/login",
json: {
type: "m.login.password",
user: settings.matrixuser,
password: settings.matrixpass
}
}, function (error, resp, body) {
if (!error && resp.statusCode == 200) {
if (body.access_token) {
logger.error("Got access token for you. Writing it to " + __dirname + "/config.json now.");
settings.matrixaccesstoken = body.access_token;
fs.writeFileSync(__dirname + '/config.json', JSON.stringify(settings, null, 4));
logger.error("Exiting. Please restart me to load new config file.");
process.exit();
}
} else {
logger.error("Couldn't get access token. Get it yourself: curl -XPOST -d '{\"type\":\"m.login.password\", \"user\":\"" + settings.matrixuser + "\", \"password\":\"password here\"}' \"https://matrix.netsyms.net/_matrix/client/v3/login\"");
}
});
} catch (ex) {
logger.error("Couldn't get access token. Get it yourself: curl -XPOST -d '{\"type\":\"m.login.password\", \"user\":\"" + settings.matrixuser + "\", \"password\":\"password here\"}' \"https://matrix.netsyms.net/_matrix/client/v3/login\"");
}
} else {
const client = sdk.createClient({baseUrl: settings.homeserver, userId: settings.matrixuser, accessToken: settings.matrixaccesstoken});
var httpserver = express();
var jsonParser = bodyParser.json();
client.startClient({initialSyncLimit: 10});
logger.info("Plugged into the matrix.");
client.once('sync', function (state, prevState, res) {
client.once('sync', function (state, prevState, res) {
logger.debug("Initial sync complete (" + state + ")");
initialsynccomplete = true;
httpserver.post("*", jsonParser, (req, res) => {
@ -488,8 +536,8 @@ client.once('sync', function (state, prevState, res) {
setInterval(checkSMS, settings.smsinterval * 1000);
checkSMS();
}
});
client.on("Room.timeline", function (event, room) {
});
client.on("Room.timeline", function (event, room) {
try {
if (!initialsynccomplete) {
return; // ignore anything while we were offline
@ -694,4 +742,5 @@ client.on("Room.timeline", function (event, room) {
} catch (ex) {
logger.error("Error handling incoming event: " + ex);
}
});
});
}
Loading…
Cancel
Save