Add profile description field from RSS description

This adds a `summary` field to the `actor` object, populated from
the RSS feed's top level <description> element. This makes the
<description> content into the profile description.
This commit is contained in:
Darius Kazemi 2018-11-17 15:54:57 -08:00
parent 9957ea6f7f
commit cf8b1721d9
3 changed files with 14 additions and 5 deletions

View File

@ -36,6 +36,7 @@ router.get('/convert', function (req, res) {
console.log('end!!!!'); console.log('end!!!!');
res.status(200).json(feedData); res.status(200).json(feedData);
let displayName = feedData.title; let displayName = feedData.title;
let description = feedData.description;
let account = username; let account = username;
// create new user // create new user
let db = req.app.get('db'); let db = req.app.get('db');
@ -43,7 +44,7 @@ router.get('/convert', function (req, res) {
// create keypair // create keypair
var pair = generateRSAKeypair(); var pair = generateRSAKeypair();
getImage(feed, feedData, imageUrl => { getImage(feed, feedData, imageUrl => {
let actorRecord = createActor(account, domain, pair.public, displayName, imageUrl); let actorRecord = createActor(account, domain, pair.public, displayName, imageUrl, description);
let webfingerRecord = createWebfinger(account, domain); let webfingerRecord = createWebfinger(account, domain);
const apikey = crypto.randomBytes(16).toString('hex'); const apikey = crypto.randomBytes(16).toString('hex');
db.prepare('insert or replace into accounts(name, actor, apikey, pubkey, privkey, webfinger) values(?, ?, ?, ?, ?, ?)').run( `${account}@${domain}`, JSON.stringify(actorRecord), apikey, pair.public, pair.private, JSON.stringify(webfingerRecord)); db.prepare('insert or replace into accounts(name, actor, apikey, pubkey, privkey, webfinger) values(?, ?, ?, ?, ?, ?)').run( `${account}@${domain}`, JSON.stringify(actorRecord), apikey, pair.public, pair.private, JSON.stringify(webfingerRecord));
@ -81,7 +82,7 @@ function getImage(feed, feedData, cb) {
} }
} }
function createActor(name, domain, pubkey, displayName, imageUrl) { function createActor(name, domain, pubkey, displayName, imageUrl, description) {
displayName = displayName || name; displayName = displayName || name;
let actor = { let actor = {
'@context': [ '@context': [
@ -107,6 +108,9 @@ function createActor(name, domain, pubkey, displayName, imageUrl) {
'url': imageUrl, 'url': imageUrl,
}; };
} }
if (description) {
actor.summary = `<p>${description}</p>`;
}
return actor; return actor;
} }

View File

@ -31,7 +31,11 @@ router.get('/:name', function (req, res) {
if (actor.icon && actor.icon.url) { if (actor.icon && actor.icon.url) {
imageUrl = actor.icon.url; imageUrl = actor.icon.url;
} }
res.render('user', { displayName: actor.name, items: feedData.items, accountName: '@'+name, imageUrl: imageUrl }); let description = null;
if (actor.summary) {
description = actor.summary;
}
res.render('user', { displayName: actor.name, items: feedData.items, accountName: '@'+name, imageUrl: imageUrl, description });
} }
} }
}); });

View File

@ -7,8 +7,9 @@ html
body body
h1= displayName h1= displayName
img(src=imageUrl) img(src=imageUrl)
p.account #{accountName} h3.account #{accountName}
p What you're looking at is an RSS feed that's been converted into an account that Mastodon (or any other ActivityPub social network) can subscribe to. Put the username above into your user search and you should be able to find this feed and subscribe! p #{description}
p <strong><em>What you're looking at is an RSS feed that's been converted into an account that Mastodon (or any other ActivityPub social network) can subscribe to. Put the username above into your user search and you should be able to find this feed and subscribe!</em></strong>
h2 Feed items h2 Feed items
ul ul
for item in items for item in items