From 53b877f001baf9dfa32f09d1e66ad95329368cf2 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 10 Jul 2021 19:51:26 -0600 Subject: [PATCH] Permissions stuff --- main.js | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/main.js b/main.js index f65d91e..5122596 100644 --- a/main.js +++ b/main.js @@ -6,7 +6,6 @@ */ console.log("Starting up..."); - import sdk from 'matrix-js-sdk'; import fs from 'fs'; import log4js from 'log4js'; @@ -17,21 +16,16 @@ import { dirname } from 'path'; import request from 'request'; import FileType from 'file-type'; - - // 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; - /** * From https://github.com/stevekinney/node-phone-formatter * @param {string} phoneNumber @@ -51,7 +45,6 @@ function formatPhoneNumber(phoneNumber, formatString) { function checkSMS() { logger.debug("Checking SMS"); - const options = { hostname: 'smsapi.voxtelesys.net', port: 443, @@ -61,13 +54,11 @@ function checkSMS() { "Authorization": "Bearer " + settings.smsapikey } }; - const req = https.request(options, res => { res.on('data', d => { try { var json = JSON.parse(d); var messages = json.results; - if (messages.length == 0) { logger.debug("No new SMS messages."); } @@ -89,11 +80,9 @@ function checkSMS() { } }); }); - req.on('error', error => { logger.warning(error); }); - req.end(); } @@ -135,16 +124,37 @@ function createOrJoinSMSRoom(tel, ournumber, callback) { // room doesn't exist, create it //logger.debug(err); logger.debug("Room " + roomName + " does not exist. Creating it now."); + var userPowerLevels = {}; + for (var i = 0; i < settings.inviteusers.length; i++) { + userPowerLevels[settings.inviteusers[i]] = 50; + } client.createRoom({ room_alias_name: "SMS_" + tel + "_" + ournumber, + preset: "trusted_private_chat", visibility: "private", invite: settings.inviteusers, + power_level_content_override: { + "events": { + "m.room.name": 50, + "m.room.power_levels": 50 + }, + "events_default": 0, + "invite": 50, + "kick": 50, + "notifications": { + "room": 50 + }, + "redact": 50, + "state_default": 50, + "users": userPowerLevels, + "users_default": 0 + }, + is_direct: true, name: formatPhoneNumber(tel, "(NNN) NNN-NNNN"), topic: "SMS conversation with " + formatPhoneNumber(tel, "(NNN) NNN-NNNN") + " (using " + formatPhoneNumber(ournumber, "(NNN) NNN-NNNN") + ")" }).then((room) => { logger.debug("Room" + roomName + " created with ID " + room.room_id); setSMSRoomPowerLevels(res.room_id); - // The first message or two we send doesn't go through unless we do this. // It just spits out "Error sending event M_FORBIDDEN: Unknown room" instead. createOrJoinSMSRoom(tel, ournumber, callback); @@ -304,7 +314,6 @@ function sendSMS(number, from, body, callback) { from: from, body: body }); - const options = { hostname: 'smsapi.voxtelesys.net', port: 443, @@ -322,12 +331,10 @@ function sendSMS(number, from, body, callback) { logger.debug(d.toString('utf8')); }); }); - req.on('error', error => { logger.error(error); callback(false); }); - req.write(data); req.end(); if (typeof callback == "function") { @@ -339,7 +346,6 @@ const client = sdk.createClient(settings.homeserver); client.login("m.login.password", {"user": settings.matrixuser, "password": settings.matrixpass}).then((response) => { client.startClient(); logger.info("Plugged into the matrix."); - client.once('sync', function (state, prevState, res) { logger.debug("Initial sync complete (" + state + ")"); initialsynccomplete = true; @@ -347,8 +353,6 @@ client.login("m.login.password", {"user": settings.matrixuser, "password": setti setInterval(checkSMS, settings.smsinterval * 1000); checkSMS(); }); - - client.on("Room.timeline", function (event, room) { if (!initialsynccomplete) { return; // ignore anything while we were offline