Compare commits

..

6 Commits
main ... main

7 changed files with 163 additions and 102 deletions

View File

@ -1,8 +1,6 @@
node_modules
package-lock.json
config.ini
build/
npm-debug.log
.vs/
Dockerfile
Jenkinsfile

1
.gitignore vendored
View File

@ -3,5 +3,6 @@ package-lock.json
config.ini
build/
.npmignore
.dockerignore
npm-debug.log
.vs/

View File

@ -4,14 +4,6 @@ Vanderwarker Family XMPP Bot.
----
[![NPM](https://nodei.co/npm/vxmppb.png?compact=true)](https://nodei.co/npm/vxmppb/)
[![Known Vulnerabilities](https://snyk.io/test/npm/vxmppb/badge.svg)](https://snyk.io/test/npm/vxmppb)
![docker](https://img.shields.io/docker/pulls/vxmppb/vxmppb.svg)
![npm](https://img.shields.io/npm/dt/vxmppb)
### :book: How To Install
You can install using:
- [npm](https://wiki.vanderwarker.family/doku.php?id=code:vxmppb:install:npm)

110
index.js
View File

@ -280,7 +280,7 @@ try {
});
debug();
}
} else if (message === '!lightsauth') {
} else if (message === '!reauth') {
if (from != user_jid) {
xmpp.send(from, pc);
} else {
@ -446,100 +446,26 @@ try {
// Please note this section requires you to have an Ejabberd server.
// I am welcome to pull requests for other servers (maybe set type in config.ini)
else if (message === '!meet') {
console.log(xmpp_server_type);
if (from != user_jid) {
xmpp.send(from, pc);
} else {
if (xmpp_server_type === "ejabberd"){
// Create private XMPP room
const createRoom = {
method: 'POST',
url: xmpp_api_url + '/create_room_with_opts',
headers: {
'Content-Type': 'application/json',
Authorization: xmpp_auth
},
body: {
name: xmpp_muc_name,
service: xmpp_muc_server,
host: bot_hostname,
options: {
allow_change_subj: 'false',
allow_private_messages: 'false',
allow_private_messages_from_visitors: 'false',
allow_visitor_nickchange: 'false',
allow_visitor_status: 'false',
lang: 'en',
mam: 'true',
members_only: 'true',
persistent: 'false',
public: 'false',
public_list: 'false',
title: 'Secure channel generated by https://vxmppb.tk',
allow_subscription: 'true'
}
},
json: true
};
// send request to create room
request(createRoom, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
// wait 2 seconds until room has been created (http issues)
setTimeout(() => {
// loop through friends, authorize users, and send invites
for (const key in config.friends) {
// send xmpp message to friends alerting of new room
xmpp.send(key, "Meeting started");
// authorize users
const addMember = {
method: 'POST',
url: xmpp_api_url + 'set_room_affiliation',
headers: {
'Content-Type': 'application/json',
Authorization: xmpp_auth
},
body: {
name: xmpp_muc_name,
service: xmpp_muc_server,
jid: key,
affiliation: 'member'
},
json: true
};
// invite users
const inviteMember = {
method: 'POST',
url: xmpp_api_url + '/send_direct_invitation',
headers: {
'Content-Type': 'application/json',
Authorization: xmpp_auth
},
body: {
name: xmpp_muc_name,
service: xmpp_muc_server,
password: '',
reason: 'vXMPPb Meeting Invite',
users: key
},
json: true
};
request(addMember, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
request(inviteMember, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
}
}, 2000);
debug();
xmpp.send(from, "Alright. Starting a new meeting: " + xmpp_muc_name + "@" + xmpp_muc_server + " and inviting friends");
} else {
xmpp.send(from, "Ejabberd is the only supported server at the moment.")
xmpp.send(from, "Please see https://git.vanderwarker.family/vxmppb/vxmppb/issues/20")
}}
fs.readFileSync('./servers/ejabberd.js', 'utf-8');
console.log("server type is ejabberd");
debug();
xmpp.send(from, "Alright. Starting a new meeting: " + xmpp_muc_name + "@" + xmpp_muc_server + " and inviting friends");
}
else if (xmpp_server_type === "prosidy"){
xmpp.send(from, "Ejabberd is the only supported server at the moment.")
xmpp.send(from, "Please see https://git.vanderwarker.family/vxmppb/vxmppb/issues/20")
}
else if (xmpp_server_type === "openfire"){
// fs.readFileSync('./servers/openfire.js', 'utf-8');
xmpp.send(from, "Ejabberd is the only supported server at the moment.")
xmpp.send(from, "Please see https://git.vanderwarker.family/vxmppb/vxmppb/issues/20")
}
}
}
// End meeting
@ -649,4 +575,4 @@ try {
console.log("Please create a config.ini");
console.log("See https://wiki.vanderwarker.family/doku.php?id=code:vxmppb:install:start");
console.log("and choose your prefered install method.");
}
}

84
servers/ejabberd.js Normal file
View File

@ -0,0 +1,84 @@
const createRoom = {
method: 'POST',
url: xmpp_api_url + '/create_room_with_opts',
headers: {
'Content-Type': 'application/json',
Authorization: xmpp_auth
},
body: {
name: xmpp_muc_name,
service: xmpp_muc_server,
host: bot_hostname,
options: {
allow_change_subj: 'false',
allow_private_messages: 'false',
allow_private_messages_from_visitors: 'false',
allow_visitor_nickchange: 'false',
allow_visitor_status: 'false',
lang: 'en',
mam: 'true',
members_only: 'true',
persistent: 'false',
public: 'false',
public_list: 'false',
title: 'Secure channel generated by https://vxmppb.tk',
allow_subscription: 'true'
}
},
json: true
};
// send request to create room
request(createRoom, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
// wait 2 seconds until room has been created (http issues)
setTimeout(() => {
// loop through friends, authorize users, and send invites
for (const key in config.friends) {
// send xmpp message to friends alerting of new room
xmpp.send(key, "Meeting started");
// authorize users
const addMember = {
method: 'POST',
url: xmpp_api_url + 'set_room_affiliation',
headers: {
'Content-Type': 'application/json',
Authorization: xmpp_auth
},
body: {
name: xmpp_muc_name,
service: xmpp_muc_server,
jid: key,
affiliation: 'member'
},
json: true
};
// invite users
const inviteMember = {
method: 'POST',
url: xmpp_api_url + '/send_direct_invitation',
headers: {
'Content-Type': 'application/json',
Authorization: xmpp_auth
},
body: {
name: xmpp_muc_name,
service: xmpp_muc_server,
password: '',
reason: 'vXMPPb Meeting Invite',
users: key
},
json: true
};
request(addMember, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
request(inviteMember, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
}
}, 2000);

30
servers/openfire.js Normal file
View File

@ -0,0 +1,30 @@
const createRoom = {
method: 'POST',
// This requires to install a plugin! Please check list on openfire
// admin dashboard. Search for HTTP API
url: xmpp_api_url + '/plugins/restapi/v1/chatrooms',
headers: {
'Content-Type': 'application/json',
Authorization: xmpp_auth
},
body: {
options: {
roomName: xmpp_muc_name,
naturalName: xmpp_muc_name,
description: "Secure channel generated by https://vxmppb.tk",
subject: "Secure channel generated by https://vxmppb.tk",
persistent: "false",
publicRoom: "false",
registrationEnabled: "false",
canOccupantsChangeSubject: "false",
membersOnly: "true",
moderated: "true",
members: {
// Member!? MEMBER?!? Ooo ooo! Member?!
"member": [
config.friends
]
},
}
}
}

30
servers/prosidy.js Normal file
View File

@ -0,0 +1,30 @@
const createRoom = {
method: 'GET',
url: xmpp_api_url + '/muc/config?jid=' + user_jid,
headers: {
'Content-Type': 'application/json',
Authorization: xmpp_auth
},
body: {
name: xmpp_muc_name,
service: xmpp_muc_server,
host: bot_hostname,
options: {
affliations: [
{
affliation: "member",
jid: config.friends,
}
],
config: {
description: "",
members_only: true,
moderated: true,
name: xmpp_muc_name,
persistent: false,
subject: "Secure channel generated by https://vxmppb.tk",
public: false
}
}
}
}