From 11903a38341eb55bb4c6f26ea141eccb90beabe2 Mon Sep 17 00:00:00 2001 From: JoramWilander Date: Fri, 2 Oct 2015 11:08:00 -0400 Subject: Add ability to override username and icon for posts from incoming webhooks. --- web/react/components/post.jsx | 7 ++++++- web/react/components/post_header.jsx | 13 ++++++++++++- web/react/components/post_list.jsx | 15 +++++++++++++-- web/react/components/user_profile.jsx | 16 ++++++++++++---- web/web.go | 11 +++++++++++ 5 files changed, 54 insertions(+), 8 deletions(-) (limited to 'web') diff --git a/web/react/components/post.jsx b/web/react/components/post.jsx index 9127f00de..ba53054cd 100644 --- a/web/react/components/post.jsx +++ b/web/react/components/post.jsx @@ -158,11 +158,16 @@ export default class Post extends React.Component { var profilePic = null; if (!this.props.hideProfilePic) { + let src = '/api/v1/users/' + post.user_id + '/image?time=' + timestamp; + if (post.props && post.props.override_icon_url) { + src = post.props.override_icon_url; + } + profilePic = (
diff --git a/web/react/components/post_header.jsx b/web/react/components/post_header.jsx index 9dc525e03..c2cadb742 100644 --- a/web/react/components/post_header.jsx +++ b/web/react/components/post_header.jsx @@ -12,9 +12,20 @@ export default class PostHeader extends React.Component { render() { var post = this.props.post; + let userProfile = ; + if (post.props && post.props.override_username) { + userProfile = ( + + ); + } + return (
    -
  • +
  • {userProfile}
  • {name}
; + } + var dataContent = ''; if (!global.window.config.ShowEmailAddress === 'true') { dataContent += '
Email not shared
'; @@ -79,9 +85,11 @@ export default class UserProfile extends React.Component { UserProfile.defaultProps = { userId: '', - overwriteName: '' + overwriteName: '', + disablePopover: false }; UserProfile.propTypes = { userId: React.PropTypes.string, - overwriteName: React.PropTypes.string + overwriteName: React.PropTypes.string, + disablePopover: React.PropTypes.bool }; diff --git a/web/web.go b/web/web.go index bf985a5a0..564671285 100644 --- a/web/web.go +++ b/web/web.go @@ -865,6 +865,9 @@ func incomingWebhook(c *api.Context, w http.ResponseWriter, r *http.Request) { channelName := props["channel"] + overrideUsername := props["username"] + overrideIconUrl := props["icon_url"] + var hook *model.IncomingWebhook if result := <-hchan; result.Err != nil { c.Err = model.NewAppError("incomingWebhook", "Invalid webhook", "err="+result.Err.Message) @@ -911,6 +914,14 @@ func incomingWebhook(c *api.Context, w http.ResponseWriter, r *http.Request) { post := &model.Post{UserId: hook.UserId, ChannelId: channel.Id, Message: text} + if len(overrideUsername) != 0 { + post.AddProp("override_username", overrideUsername) + } + + if len(overrideIconUrl) != 0 { + post.AddProp("override_icon_url", overrideIconUrl) + } + if !c.HasPermissionsToChannel(pchan, "createIncomingHook") && channel.Type != model.CHANNEL_OPEN { c.Err = model.NewAppError("incomingWebhook", "Inappropriate channel permissions", "") return -- cgit v1.2.3-1-g7c22