diff --git a/server/api/models/event.js b/server/api/models/event.js
index 4d638a9e..d976ad9b 100644
--- a/server/api/models/event.js
+++ b/server/api/models/event.js
@@ -1,5 +1,6 @@
const config = require('config')
const moment = require('moment-timezone')
+const htmlToText = require('html-to-text')
module.exports = (sequelize, DataTypes) => {
const Event = sequelize.define('event', {
@@ -38,35 +39,36 @@ module.exports = (sequelize, DataTypes) => {
Event.belongsTo(models.event, { as: 'parent' })
}
- Event.prototype.toNoteAP = function (username, locale, follower = []) {
+ Event.prototype.toAP = function (username, locale, follower = []) {
const tags = this.tags && this.tags.map(t => t.tag.replace(/[ #]/g, '_'))
- const tag_links = tags.map(t => {
- return `#${t}`
- }).join(' ')
- const content = `${this.title}
- 📍 ${this.place.name}
- 📅 ${moment.unix(this.start_datetime).locale(locale).format('dddd, D MMMM (HH:mm)')}
- ${this.description.length > 500 ? this.description.substr(0, 500) + '...' : this.description}
- ${tag_links}
`
+ const plainDescription = htmlToText.fromString(this.description.replace('\n', '').slice(0, 1000))
+ const summary = `
+ 📍 ${this.place.name}
+ 📅 ${moment.unix(this.start_datetime).locale(locale).format('dddd, D MMMM (HH:mm)')}
- // const attachment = []
- // if (this.image_path) {
- // attachment.push({
- // type: 'Document',
- // mediaType: 'image/jpeg',
- // url: `${config.baseurl}/media/${this.image_path}`,
- // name: null,
- // blurHash: null
- // })
- // }
+ ${plainDescription}
+
+ ${tags.map(t => `#${t}`)}
+
+ `
+
+ const attachment = []
+ if (this.image_path) {
+ attachment.push({
+ type: 'Document',
+ mediaType: 'image/jpeg',
+ url: `${config.baseurl}/media/${this.image_path}`,
+ name: null,
+ blurHash: null
+ })
+ }
return {
id: `${config.baseurl}/federation/m/${this.id}`,
- url: `${config.baseurl}/federation/m/${this.id}`,
- type: 'Note',
- // do not send attachment, in mastodon a link preview is shown instead
- // attachment,
+ url: `${config.baseurl}/event/${this.id}`,
+ type: 'Event',
+ attachment,
tag: tags.map(tag => ({
type: 'Hashtag',
name: '#' + tag,
@@ -76,8 +78,8 @@ module.exports = (sequelize, DataTypes) => {
attributedTo: `${config.baseurl}/federation/u/${username}`,
to: follower || [],
cc: ['https://www.w3.org/ns/activitystreams#Public', `${config.baseurl}/federation/u/${username}/followers`],
- content,
- summary: null,
+ name: this.title,
+ summary,
sensitive: false
}
}
diff --git a/server/federation/helpers.js b/server/federation/helpers.js
index 13bec2b8..0e06c603 100644
--- a/server/federation/helpers.js
+++ b/server/federation/helpers.js
@@ -80,7 +80,7 @@ const Helpers = {
to: recipients[sharedInbox],
cc: ['https://www.w3.org/ns/activitystreams#Public', `${config.baseurl}/federation/u/${settingsController.settings.instance_name}/followers`],
actor: `${config.baseurl}/federation/u/${settingsController.settings.instance_name}`,
- object: event.toNoteAP(settingsController.settings.instance_name,
+ object: event.toAP(settingsController.settings.instance_name,
settingsController.settings.instance_locale,
recipients[sharedInbox])
}
diff --git a/server/federation/index.js b/server/federation/index.js
index b96809a2..5acca34a 100644
--- a/server/federation/index.js
+++ b/server/federation/index.js
@@ -33,7 +33,7 @@ router.get('/m/:event_id', async (req, res) => {
const event = await Event.findByPk(req.params.event_id, { include: [User, Tag, Place] })
if (!event) { return res.status(404).send('Not found') }
- return res.json(event.toNoteAP(event.user.username, req.settings.locale))
+ return res.json(event.toAP(event.user.username, req.settings.locale))
})
// get any message coming from federation
@@ -72,6 +72,8 @@ router.post('/u/:name/inbox', Helpers.verifySignature, async (req, res) => {
if (b.object.type === 'Note') {
debug('Create a resource!')
await Resources.create(req, res)
+ } else if (b.object.type === 'Event') {
+ debug('Event type is coming!!')
} else {
// await Resources.create(req, res)
debug('Create with unsupported Object or not a reply => %s ', b.object.type)
@@ -80,9 +82,16 @@ router.post('/u/:name/inbox', Helpers.verifySignature, async (req, res) => {
}
})
+function redirect_on_html_accepted (req, res, next) {
+ if (req.accepts('html')) {
+ return res.redirect(settingsController.settings.baseurl)
+ }
+ return next()
+}
+
router.get('/u/:name/outbox', Users.outbox)
router.get('/u/:name/followers', Users.followers)
-router.get('/u/:name', Users.get)
+router.get('/u/:name', redirect_on_html_accepted, Users.get)
// Handle 404
router.use((req, res) => {
diff --git a/server/federation/users.js b/server/federation/users.js
index 1c6c03fe..bded8bbb 100644
--- a/server/federation/users.js
+++ b/server/federation/users.js
@@ -116,7 +116,7 @@ module.exports = {
type: 'OrderedCollectionPage',
totalItems: events.length,
partOf: `${config.baseurl}/federation/u/${name}/outbox`,
- orderedItems: events.map(e => ({ ...e.toNoteAP(name, req.settings.locale), actor: `${config.baseurl}/federation/u/${name}` }))
+ orderedItems: events.map(e => ({ ...e.toAP(name, req.settings.locale), actor: `${config.baseurl}/federation/u/${name}` }))
// user.events.map(e => ({
// id: `${config.baseurl}/federation/m/${e.id}#create`,
// type: 'Create',