diff --git a/server/api/hooks.js b/server/api/hooks.js index 4280606e6..481d0a16b 100644 --- a/server/api/hooks.js +++ b/server/api/hooks.js @@ -1,7 +1,7 @@ // @flow import Router from 'koa-router'; import { AuthenticationError, InvalidRequestError } from '../errors'; -import { Authentication, Document, User } from '../models'; +import { Authentication, Document, User, Team } from '../models'; import { presentSlackAttachment } from '../presenters'; import * as Slack from '../slack'; const router = new Router(); @@ -64,6 +64,8 @@ router.post('hooks.slack', async ctx => { if (!user) throw new InvalidRequestError('Invalid user'); + const team = await Team.findById(user.teamId); + const results = await Document.searchForUser(user, text, { limit: 5, }); @@ -78,6 +80,7 @@ router.post('hooks.slack', async ctx => { attachments.push( presentSlackAttachment( result.document, + team, queryIsInTitle ? undefined : result.context ) ); diff --git a/server/presenters/slackAttachment.js b/server/presenters/slackAttachment.js index 5c91a9bfe..af7ec9d7c 100644 --- a/server/presenters/slackAttachment.js +++ b/server/presenters/slackAttachment.js @@ -1,7 +1,7 @@ // @flow -import { Document } from '../models'; +import { Document, Team } from '../models'; -function present(document: Document, context?: string) { +function present(document: Document, team: Team, context?: string) { // the context contains tags around search terms, we convert them here // to the markdown format that slack expects to receive. const text = context @@ -11,7 +11,7 @@ function present(document: Document, context?: string) { return { color: document.collection.color, title: document.title, - title_link: `${process.env.URL}${document.url}`, + title_link: `${team.url}${document.url}`, footer: document.collection.name, text, ts: document.getTimestamp(), diff --git a/server/services/slack.js b/server/services/slack.js index b243b98f7..bb8022512 100644 --- a/server/services/slack.js +++ b/server/services/slack.js @@ -1,6 +1,6 @@ // @flow import type { Event } from '../events'; -import { Document, Integration, Collection } from '../models'; +import { Document, Integration, Collection, Team } from '../models'; import { presentSlackAttachment } from '../presenters'; export default class Slack { @@ -70,6 +70,8 @@ export default class Slack { }); if (!integration) return; + const team = await Team.findById(document.teamId); + let text = `${document.createdBy.name} published a new document`; if (event.name === 'documents.update') { @@ -83,7 +85,7 @@ export default class Slack { }, body: JSON.stringify({ text, - attachments: [presentSlackAttachment(document)], + attachments: [presentSlackAttachment(document, team)], }), }); }