summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--i18n/en.json24
-rw-r--r--model/command.go9
-rw-r--r--model/command_test.go20
-rw-r--r--model/incoming_webhook.go24
-rw-r--r--model/incoming_webhook_test.go20
-rw-r--r--model/outgoing_webhook.go10
-rw-r--r--model/outgoing_webhook_test.go20
-rw-r--r--store/sql_command_store.go2
-rw-r--r--store/sql_webhook_store.go9
-rw-r--r--webapp/components/backstage/add_incoming_webhook.jsx24
-rw-r--r--webapp/components/backstage/add_outgoing_webhook.jsx24
-rw-r--r--webapp/components/backstage/installed_incoming_webhook.jsx5
-rw-r--r--webapp/components/backstage/installed_outgoing_webhook.jsx5
13 files changed, 161 insertions, 35 deletions
diff --git a/i18n/en.json b/i18n/en.json
index 6292c1e03..0dca6ca04 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -2060,6 +2060,14 @@
"translation": "Create at must be a valid time"
},
{
+ "id": "model.command.is_valid.description.app_error",
+ "translation": "Invalid description"
+ },
+ {
+ "id": "model.command.is_valid.display_name.app_error",
+ "translation": "Invalid display name"
+ },
+ {
"id": "model.command.is_valid.id.app_error",
"translation": "Invalid Id"
},
@@ -2216,6 +2224,14 @@
"translation": "Create at must be a valid time"
},
{
+ "id": "model.incoming_hook.description.app_error",
+ "translation": "Invalid description"
+ },
+ {
+ "id": "model.incoming_hook.display_name.app_error",
+ "translation": "Invalid display name"
+ },
+ {
"id": "model.incoming_hook.id.app_error",
"translation": "Invalid Id"
},
@@ -2280,6 +2296,14 @@
"translation": "Create at must be a valid time"
},
{
+ "id": "model.outgoing_hook.is_valid.description.app_error",
+ "translation": "Invalid description"
+ },
+ {
+ "id": "model.outgoing_hook.is_valid.display_name.app_error",
+ "translation": "Invalid display name"
+ },
+ {
"id": "model.outgoing_hook.is_valid.id.app_error",
"translation": "Invalid Id"
},
diff --git a/model/command.go b/model/command.go
index 56d88f13c..ca3038122 100644
--- a/model/command.go
+++ b/model/command.go
@@ -29,6 +29,7 @@ type Command struct {
AutoCompleteDesc string `json:"auto_complete_desc"`
AutoCompleteHint string `json:"auto_complete_hint"`
DisplayName string `json:"display_name"`
+ Description string `json:"description"`
URL string `json:"url"`
}
@@ -114,6 +115,14 @@ func (o *Command) IsValid() *AppError {
return NewLocAppError("Command.IsValid", "model.command.is_valid.method.app_error", nil, "")
}
+ if len(o.DisplayName) > 64 {
+ return NewLocAppError("Command.IsValid", "model.command.is_valid.display_name.app_error", nil, "")
+ }
+
+ if len(o.Description) > 128 {
+ return NewLocAppError("Command.IsValid", "model.command.is_valid.description.app_error", nil, "")
+ }
+
return nil
}
diff --git a/model/command_test.go b/model/command_test.go
index 0581625d9..d362d8f2c 100644
--- a/model/command_test.go
+++ b/model/command_test.go
@@ -84,6 +84,26 @@ func TestCommandIsValid(t *testing.T) {
if err := o.IsValid(); err != nil {
t.Fatal(err)
}
+
+ o.DisplayName = strings.Repeat("1", 65)
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.DisplayName = strings.Repeat("1", 64)
+ if err := o.IsValid(); err != nil {
+ t.Fatal(err)
+ }
+
+ o.Description = strings.Repeat("1", 129)
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.Description = strings.Repeat("1", 128)
+ if err := o.IsValid(); err != nil {
+ t.Fatal(err)
+ }
}
func TestCommandPreSave(t *testing.T) {
diff --git a/model/incoming_webhook.go b/model/incoming_webhook.go
index 8432f5fea..0763b443e 100644
--- a/model/incoming_webhook.go
+++ b/model/incoming_webhook.go
@@ -14,13 +14,15 @@ const (
)
type IncomingWebhook struct {
- Id string `json:"id"`
- CreateAt int64 `json:"create_at"`
- UpdateAt int64 `json:"update_at"`
- DeleteAt int64 `json:"delete_at"`
- UserId string `json:"user_id"`
- ChannelId string `json:"channel_id"`
- TeamId string `json:"team_id"`
+ Id string `json:"id"`
+ CreateAt int64 `json:"create_at"`
+ UpdateAt int64 `json:"update_at"`
+ DeleteAt int64 `json:"delete_at"`
+ UserId string `json:"user_id"`
+ ChannelId string `json:"channel_id"`
+ TeamId string `json:"team_id"`
+ DisplayName string `json:"display_name"`
+ Description string `json:"description"`
}
type IncomingWebhookRequest struct {
@@ -99,6 +101,14 @@ func (o *IncomingWebhook) IsValid() *AppError {
return NewLocAppError("IncomingWebhook.IsValid", "model.incoming_hook.team_id.app_error", nil, "")
}
+ if len(o.DisplayName) > 64 {
+ return NewLocAppError("IncomingWebhook.IsValid", "model.incoming_hook.display_name.app_error", nil, "")
+ }
+
+ if len(o.Description) > 128 {
+ return NewLocAppError("IncomingWebhook.IsValid", "model.incoming_hook.description.app_error", nil, "")
+ }
+
return nil
}
diff --git a/model/incoming_webhook_test.go b/model/incoming_webhook_test.go
index 5297d7d90..3f1754244 100644
--- a/model/incoming_webhook_test.go
+++ b/model/incoming_webhook_test.go
@@ -69,6 +69,26 @@ func TestIncomingWebhookIsValid(t *testing.T) {
if err := o.IsValid(); err != nil {
t.Fatal(err)
}
+
+ o.DisplayName = strings.Repeat("1", 65)
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.DisplayName = strings.Repeat("1", 64)
+ if err := o.IsValid(); err != nil {
+ t.Fatal(err)
+ }
+
+ o.Description = strings.Repeat("1", 129)
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.Description = strings.Repeat("1", 128)
+ if err := o.IsValid(); err != nil {
+ t.Fatal(err)
+ }
}
func TestIncomingWebhookPreSave(t *testing.T) {
diff --git a/model/outgoing_webhook.go b/model/outgoing_webhook.go
index 70de4d26e..e13de9080 100644
--- a/model/outgoing_webhook.go
+++ b/model/outgoing_webhook.go
@@ -20,6 +20,8 @@ type OutgoingWebhook struct {
TeamId string `json:"team_id"`
TriggerWords StringArray `json:"trigger_words"`
CallbackURLs StringArray `json:"callback_urls"`
+ DisplayName string `json:"display_name"`
+ Description string `json:"description"`
}
func (o *OutgoingWebhook) ToJson() string {
@@ -106,6 +108,14 @@ func (o *OutgoingWebhook) IsValid() *AppError {
}
}
+ if len(o.DisplayName) > 64 {
+ return NewLocAppError("OutgoingWebhook.IsValid", "model.outgoing_hook.is_valid.display_name.app_error", nil, "")
+ }
+
+ if len(o.Description) > 128 {
+ return NewLocAppError("OutgoingWebhook.IsValid", "model.outgoing_hook.is_valid.description.app_error", nil, "")
+ }
+
return nil
}
diff --git a/model/outgoing_webhook_test.go b/model/outgoing_webhook_test.go
index 665b85b6f..72c842e03 100644
--- a/model/outgoing_webhook_test.go
+++ b/model/outgoing_webhook_test.go
@@ -89,6 +89,26 @@ func TestOutgoingWebhookIsValid(t *testing.T) {
if err := o.IsValid(); err != nil {
t.Fatal(err)
}
+
+ o.DisplayName = strings.Repeat("1", 65)
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.DisplayName = strings.Repeat("1", 64)
+ if err := o.IsValid(); err != nil {
+ t.Fatal(err)
+ }
+
+ o.Description = strings.Repeat("1", 129)
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.Description = strings.Repeat("1", 128)
+ if err := o.IsValid(); err != nil {
+ t.Fatal(err)
+ }
}
func TestOutgoingWebhookPreSave(t *testing.T) {
diff --git a/store/sql_command_store.go b/store/sql_command_store.go
index 074a6e588..02b3a0cc5 100644
--- a/store/sql_command_store.go
+++ b/store/sql_command_store.go
@@ -28,12 +28,14 @@ func NewSqlCommandStore(sqlStore *SqlStore) CommandStore {
tableo.ColMap("AutoCompleteDesc").SetMaxSize(1024)
tableo.ColMap("AutoCompleteHint").SetMaxSize(1024)
tableo.ColMap("DisplayName").SetMaxSize(64)
+ tableo.ColMap("Description").SetMaxSize(128)
}
return s
}
func (s SqlCommandStore) UpgradeSchemaIfNeeded() {
+ s.CreateColumnIfNotExists("Commands", "Description", "varchar(128)", "varchar(128)", "")
}
func (s SqlCommandStore) CreateIndexesIfNotExists() {
diff --git a/store/sql_webhook_store.go b/store/sql_webhook_store.go
index 740c9a33f..3c1f404e1 100644
--- a/store/sql_webhook_store.go
+++ b/store/sql_webhook_store.go
@@ -20,6 +20,8 @@ func NewSqlWebhookStore(sqlStore *SqlStore) WebhookStore {
table.ColMap("UserId").SetMaxSize(26)
table.ColMap("ChannelId").SetMaxSize(26)
table.ColMap("TeamId").SetMaxSize(26)
+ table.ColMap("DisplayName").SetMaxSize(64)
+ table.ColMap("Description").SetMaxSize(128)
tableo := db.AddTableWithName(model.OutgoingWebhook{}, "OutgoingWebhooks").SetKeys(false, "Id")
tableo.ColMap("Id").SetMaxSize(26)
@@ -29,12 +31,19 @@ func NewSqlWebhookStore(sqlStore *SqlStore) WebhookStore {
tableo.ColMap("TeamId").SetMaxSize(26)
tableo.ColMap("TriggerWords").SetMaxSize(1024)
tableo.ColMap("CallbackURLs").SetMaxSize(1024)
+ tableo.ColMap("DisplayName").SetMaxSize(64)
+ tableo.ColMap("Description").SetMaxSize(128)
}
return s
}
func (s SqlWebhookStore) UpgradeSchemaIfNeeded() {
+ s.CreateColumnIfNotExists("IncomingWebhooks", "DisplayName", "varchar(64)", "varchar(64)", "")
+ s.CreateColumnIfNotExists("IncomingWebhooks", "Description", "varchar(128)", "varchar(128)", "")
+
+ s.CreateColumnIfNotExists("OutgoingWebhooks", "DisplayName", "varchar(64)", "varchar(64)", "")
+ s.CreateColumnIfNotExists("OutgoingWebhooks", "Description", "varchar(128)", "varchar(128)", "")
}
func (s SqlWebhookStore) CreateIndexesIfNotExists() {
diff --git a/webapp/components/backstage/add_incoming_webhook.jsx b/webapp/components/backstage/add_incoming_webhook.jsx
index 83027c6b3..afeb9d569 100644
--- a/webapp/components/backstage/add_incoming_webhook.jsx
+++ b/webapp/components/backstage/add_incoming_webhook.jsx
@@ -18,12 +18,12 @@ export default class AddIncomingWebhook extends React.Component {
this.handleSubmit = this.handleSubmit.bind(this);
- this.updateName = this.updateName.bind(this);
+ this.updateDisplayName = this.updateDisplayName.bind(this);
this.updateDescription = this.updateDescription.bind(this);
this.updateChannelId = this.updateChannelId.bind(this);
this.state = {
- name: '',
+ displayName: '',
description: '',
channelId: '',
saving: false,
@@ -60,7 +60,9 @@ export default class AddIncomingWebhook extends React.Component {
}
const hook = {
- channel_id: this.state.channelId
+ channel_id: this.state.channelId,
+ display_name: this.state.displayName,
+ description: this.state.description
};
AsyncClient.addIncomingHook(
@@ -76,9 +78,9 @@ export default class AddIncomingWebhook extends React.Component {
);
}
- updateName(e) {
+ updateDisplayName(e) {
this.setState({
- name: e.target.value
+ displayName: e.target.value
});
}
@@ -112,20 +114,20 @@ export default class AddIncomingWebhook extends React.Component {
<div className='form-group'>
<label
className='control-label col-sm-3'
- htmlFor='name'
+ htmlFor='displayName'
>
<FormattedMessage
- id='add_incoming_webhook.name'
- defaultMessage='Name'
+ id='add_incoming_webhook.displayName'
+ defaultMessage='Display Name'
/>
</label>
<div className='col-md-5 col-sm-9'>
<input
- id='name'
+ id='displayName'
type='text'
className='form-control'
- value={this.state.name}
- onChange={this.updateName}
+ value={this.state.displayName}
+ onChange={this.updateDisplayName}
/>
</div>
</div>
diff --git a/webapp/components/backstage/add_outgoing_webhook.jsx b/webapp/components/backstage/add_outgoing_webhook.jsx
index 5d98138df..c2b5e0414 100644
--- a/webapp/components/backstage/add_outgoing_webhook.jsx
+++ b/webapp/components/backstage/add_outgoing_webhook.jsx
@@ -18,14 +18,14 @@ export default class AddOutgoingWebhook extends React.Component {
this.handleSubmit = this.handleSubmit.bind(this);
- this.updateName = this.updateName.bind(this);
+ this.updateDisplayName = this.updateDisplayName.bind(this);
this.updateDescription = this.updateDescription.bind(this);
this.updateChannelId = this.updateChannelId.bind(this);
this.updateTriggerWords = this.updateTriggerWords.bind(this);
this.updateCallbackUrls = this.updateCallbackUrls.bind(this);
this.state = {
- name: '',
+ displayName: '',
description: '',
channelId: '',
triggerWords: '',
@@ -80,7 +80,9 @@ export default class AddOutgoingWebhook extends React.Component {
const hook = {
channel_id: this.state.channelId,
trigger_words: this.state.triggerWords.split('\n').map((word) => word.trim()),
- callback_urls: this.state.callbackUrls.split('\n').map((url) => url.trim())
+ callback_urls: this.state.callbackUrls.split('\n').map((url) => url.trim()),
+ display_name: this.state.displayName,
+ description: this.state.description
};
AsyncClient.addOutgoingHook(
@@ -96,9 +98,9 @@ export default class AddOutgoingWebhook extends React.Component {
);
}
- updateName(e) {
+ updateDisplayName(e) {
this.setState({
- name: e.target.value
+ displayName: e.target.value
});
}
@@ -144,20 +146,20 @@ export default class AddOutgoingWebhook extends React.Component {
<div className='form-group'>
<label
className='control-label col-sm-3'
- htmlFor='name'
+ htmlFor='displayName'
>
<FormattedMessage
- id='add_outgoing_webhook.name'
- defaultMessage='Name'
+ id='add_outgoing_webhook.displayName'
+ defaultMessage='Display Name'
/>
</label>
<div className='col-md-5 col-sm-9'>
<input
- id='name'
+ id='displayName'
type='text'
className='form-control'
- value={this.state.name}
- onChange={this.updateName}
+ value={this.state.displayName}
+ onChange={this.updateDisplayName}
/>
</div>
</div>
diff --git a/webapp/components/backstage/installed_incoming_webhook.jsx b/webapp/components/backstage/installed_incoming_webhook.jsx
index f65cf6327..262bfe21d 100644
--- a/webapp/components/backstage/installed_incoming_webhook.jsx
+++ b/webapp/components/backstage/installed_incoming_webhook.jsx
@@ -4,7 +4,6 @@
import React from 'react';
import ChannelStore from 'stores/channel_store.jsx';
-import * as Utils from 'utils/utils.jsx';
import {FormattedMessage} from 'react-intl';
@@ -39,7 +38,7 @@ export default class InstalledIncomingWebhook extends React.Component {
<div className='item-details'>
<div className='item-details__row'>
<span className='item-details__name'>
- {channelName}
+ {incomingWebhook.display_name || channelName}
</span>
<span className='item-details__type'>
<FormattedMessage
@@ -50,7 +49,7 @@ export default class InstalledIncomingWebhook extends React.Component {
</div>
<div className='item-details__row'>
<span className='item-details__description'>
- {Utils.getWindowLocationOrigin() + '/hooks/' + incomingWebhook.id}
+ {incomingWebhook.description}
</span>
</div>
</div>
diff --git a/webapp/components/backstage/installed_outgoing_webhook.jsx b/webapp/components/backstage/installed_outgoing_webhook.jsx
index fee427260..4482029bf 100644
--- a/webapp/components/backstage/installed_outgoing_webhook.jsx
+++ b/webapp/components/backstage/installed_outgoing_webhook.jsx
@@ -4,7 +4,6 @@
import React from 'react';
import ChannelStore from 'stores/channel_store.jsx';
-import * as Utils from 'utils/utils.jsx';
import {FormattedMessage} from 'react-intl';
@@ -47,7 +46,7 @@ export default class InstalledOutgoingWebhook extends React.Component {
<div className='item-details'>
<div className='item-details__row'>
<span className='item-details__name'>
- {channelName}
+ {outgoingWebhook.display_name || channelName}
</span>
<span className='item-details__type'>
<FormattedMessage
@@ -58,7 +57,7 @@ export default class InstalledOutgoingWebhook extends React.Component {
</div>
<div className='item-details__row'>
<span className='item-details__description'>
- {Utils.getWindowLocationOrigin() + '/hooks/' + outgoingWebhook.id}
+ {outgoingWebhook.description}
{' - '}
{outgoingWebhook.token}
</span>