Worked a bit on Webfinger detection, does not work yet.
This commit is contained in:
parent
7d8ea3446a
commit
31a72bd500
5 changed files with 157 additions and 14 deletions
4
config.json
Normal file
4
config.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"DOMAIN" : "767b16bb.ngrok.io",
|
||||||
|
"PORT" : 3000
|
||||||
|
}
|
18
index.js
Normal file
18
index.js
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
const config = require('./config');
|
||||||
|
const server = require('./server');
|
||||||
|
const express = require('express');
|
||||||
|
const app = express();
|
||||||
|
const http = require('http');
|
||||||
|
|
||||||
|
app.set('domain', config.DOMAIN);
|
||||||
|
app.set('port', process.env.PORT || config.PORT || 3000);
|
||||||
|
app.set('port-https', process.env.PORT_HTTPS || 8443);
|
||||||
|
|
||||||
|
app.get('/', (req, res) => res.send('Hello World!'));
|
||||||
|
app.get('/u/:name', server.get_user);
|
||||||
|
app.get('/.well-known/webfinger', server.get_webfinger);
|
||||||
|
app.get('/inbox', (req, res) => res.send('Here lies the inbox'));
|
||||||
|
|
||||||
|
http.createServer(app).listen(app.get('port'), function(){
|
||||||
|
console.log('Express server listening on port ' + app.get('port'));
|
||||||
|
});
|
|
@ -2,9 +2,12 @@
|
||||||
"name": "scuttlebutt_to_ap",
|
"name": "scuttlebutt_to_ap",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ssb-client": "latest",
|
"express": "latest",
|
||||||
|
"node-fetch": "latest",
|
||||||
"pull-stream": "latest",
|
"pull-stream": "latest",
|
||||||
|
"ssb-client": "latest",
|
||||||
|
"ssb-friends": "latest",
|
||||||
"stream-to-pull-stream": "latest",
|
"stream-to-pull-stream": "latest",
|
||||||
"node-fetch": "latest"
|
"http": "latest"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -266,9 +266,9 @@ async function restore_ssb_message(id){
|
||||||
return await out;
|
return await out;
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.bridge = {
|
module.exports = {
|
||||||
save : (message) => {
|
save : (message) => {
|
||||||
if (message.@context === "https://www.w3.org/ns/activitystreams") {
|
if (message["@context"] === "https://www.w3.org/ns/activitystreams") { //todo: should be @context
|
||||||
|
|
||||||
add_ssb_message(
|
add_ssb_message(
|
||||||
message.type,
|
message.type,
|
||||||
|
@ -284,9 +284,5 @@ exports.bridge = {
|
||||||
throw ("Invalid message context.");
|
throw ("Invalid message context.");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
restore: (id) => {
|
restore: restore_ssb_message
|
||||||
let p = restore_ssb_message(id);
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
};
|
};
|
122
server.js
Normal file
122
server.js
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
const config = require('./config');
|
||||||
|
const ssbClient = require('ssb-client');
|
||||||
|
const pull = require('pull-stream');
|
||||||
|
|
||||||
|
DOMAIN = config.DOMAIN;
|
||||||
|
|
||||||
|
async function check_if_in_friends(name){
|
||||||
|
let result = false;
|
||||||
|
let out = new Promise((resolve, reject) => {
|
||||||
|
ssbClient((err, sbot) => {
|
||||||
|
if (err) reject(err);
|
||||||
|
|
||||||
|
pull(
|
||||||
|
sbot.friends.createFriendStream(),
|
||||||
|
pull.collect((err, array) => {
|
||||||
|
array.forEach(function (actor) {
|
||||||
|
let short_actor = (actor.substr(1));
|
||||||
|
if (short_actor === name) {
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbot.close();
|
||||||
|
resolve(result);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return await out;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_webfinger(req, res) {
|
||||||
|
let resource = req.query.resource;
|
||||||
|
if (!resource || !resource.includes('acct:')) {
|
||||||
|
return res.status(400).send('Bad request. Please make sure "acct:USER@DOMAIN" is what you are sending as the "resource" query parameter.');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let name = resource.replace('acct:','');
|
||||||
|
name = name.substr(0,name.indexOf('@'));
|
||||||
|
|
||||||
|
// This might help with webfinger detection
|
||||||
|
// let encoded_name = encodeURIComponent(name);
|
||||||
|
|
||||||
|
let p = check_if_in_friends(name);
|
||||||
|
|
||||||
|
p.then((result) => {
|
||||||
|
if (result) {
|
||||||
|
res.json(
|
||||||
|
{
|
||||||
|
'subject': `acct:${name}@${DOMAIN}`,
|
||||||
|
links: [
|
||||||
|
{
|
||||||
|
rel: 'self',
|
||||||
|
type: 'application/activitypub+json',
|
||||||
|
href: `https://${DOMAIN}/u/${name}`
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return res.status(404).send(`No record found for ${name}.`);
|
||||||
|
}
|
||||||
|
}).catch((err) => {
|
||||||
|
return res.status(500).send(`An error occured: ${err}.`);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_user(req, res){
|
||||||
|
let name = req.params.name;
|
||||||
|
if (!name) {
|
||||||
|
return res.status(400).send('Bad request.');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
// This might help with webfinger detection
|
||||||
|
// let encoded_name = encodeURIComponent(name);
|
||||||
|
|
||||||
|
let p = check_if_in_friends(name);
|
||||||
|
|
||||||
|
p.then((result) => {
|
||||||
|
if (result) {
|
||||||
|
|
||||||
|
res.json(
|
||||||
|
{
|
||||||
|
'@context': [
|
||||||
|
'https://www.w3.org/ns/activitystreams',
|
||||||
|
'https://w3id.org/security/v1'
|
||||||
|
],
|
||||||
|
|
||||||
|
id: `https://${DOMAIN}/u/${name}`,
|
||||||
|
type: 'Person',
|
||||||
|
preferredUsername: 'TESTPERSON PLS CHANGE', //todo: read from latest about message
|
||||||
|
inbox: `https://${DOMAIN}/u/${name}/inbox`,
|
||||||
|
|
||||||
|
publicKey: {
|
||||||
|
id: `https://${DOMAIN}/u/${name}#main-key`,
|
||||||
|
owner: `https://${DOMAIN}/u/${name}`,
|
||||||
|
publicKeyPem: '-----BEGIN PUBLIC KEY-----\n' +
|
||||||
|
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsT4MEtffaV0uFr9jgSnx\n' +
|
||||||
|
'kb1+MMd1/jGYBugJ4jkHc9rvQRJLA2C8O2LbrdNb/00TRHh0pkR7AJW7DWMhIF/P\n' +
|
||||||
|
'WmsHcdouAUhovAVO+4yrRK5fMA96JP6k2YwqJK+yjK4SMm9iwvcdBlrkZif0KWvA\n' +
|
||||||
|
'Qf4eU24n64NSEdVu48cgZwMvQeYKaAtf2LIhXYOE4pA16C05z3BAar+9m2e1yZMG\n' +
|
||||||
|
'+JzhoywmpqlrB+XK55wjAIhvwVGgOMtUg5FbHU5sH7wZv7H945t40x7HjNCBxU6d\n' +
|
||||||
|
'yrF7Bl6nMg+ifT5a6SzPSJ0f3g99AyfMVL5fnhSodjpsnjohfIsx9Vzd4oO1JhDx\n' +
|
||||||
|
'SwIDAQAB\n' +
|
||||||
|
'-----END PUBLIC KEY-----'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}else {
|
||||||
|
return res.status(404).send(`No record found for ${name}.`);
|
||||||
|
}
|
||||||
|
}).catch((err) => {
|
||||||
|
return res.status(500).send(`An error occured: ${err}.`);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
get_user,
|
||||||
|
get_webfinger
|
||||||
|
};
|
Loading…
Reference in a new issue