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 From 2a23d90ca6528ffaaf38365d549682de0613e922 Mon Sep 17 00:00:00 2001 From: JoramWilander Date: Mon, 5 Oct 2015 08:46:23 -0400 Subject: Add config options for overriding username and icon, and add BOT indicator next to webhook posts. --- .../components/admin_console/service_settings.jsx | 68 ++++++++++++++++++++++ web/react/components/post.jsx | 6 +- web/react/components/post_header.jsx | 23 +++++--- web/react/components/post_list.jsx | 8 +-- web/sass-files/sass/partials/_post.scss | 8 +++ web/web.go | 11 +++- 6 files changed, 108 insertions(+), 16 deletions(-) (limited to 'web') diff --git a/web/react/components/admin_console/service_settings.jsx b/web/react/components/admin_console/service_settings.jsx index 245ffa871..abc92cc20 100644 --- a/web/react/components/admin_console/service_settings.jsx +++ b/web/react/components/admin_console/service_settings.jsx @@ -37,6 +37,8 @@ export default class ServiceSettings extends React.Component { config.ServiceSettings.GoogleDeveloperKey = React.findDOMNode(this.refs.GoogleDeveloperKey).value.trim(); //config.ServiceSettings.EnableOAuthServiceProvider = React.findDOMNode(this.refs.EnableOAuthServiceProvider).checked; config.ServiceSettings.EnableIncomingWebhooks = React.findDOMNode(this.refs.EnableIncomingWebhooks).checked; + config.ServiceSettings.EnablePostUsernameOverride = React.findDOMNode(this.refs.EnablePostUsernameOverride).checked; + config.ServiceSettings.EnablePostIconOverride = React.findDOMNode(this.refs.EnablePostIconOverride).checked; config.ServiceSettings.EnableTesting = React.findDOMNode(this.refs.EnableTesting).checked; var MaximumLoginAttempts = 10; @@ -203,6 +205,72 @@ export default class ServiceSettings extends React.Component { +
+ +
+ + +

{'When true, webhooks will be allowed to change the username they are posting as. Note, combined with allowing icon overriding, this could open users up to phishing attacks.'}

+
+
+ +
+ +
+ + +

{'When true, webhooks will be allowed to change the icon they post with. Note, combined with allowing username overriding, this could open users up to phishing attacks.'}

+
+
+
-- cgit v1.2.3-1-g7c22