summaryrefslogtreecommitdiffstats
path: root/webapp
diff options
context:
space:
mode:
Diffstat (limited to 'webapp')
-rw-r--r--webapp/components/backstage/installed_integrations.jsx11
-rw-r--r--webapp/components/backstage/installed_outgoing_webhook.jsx30
-rw-r--r--webapp/stores/integration_store.jsx13
-rw-r--r--webapp/utils/async_client.jsx15
-rw-r--r--webapp/utils/constants.jsx1
5 files changed, 64 insertions, 6 deletions
diff --git a/webapp/components/backstage/installed_integrations.jsx b/webapp/components/backstage/installed_integrations.jsx
index 4f79509d9..0b6701b21 100644
--- a/webapp/components/backstage/installed_integrations.jsx
+++ b/webapp/components/backstage/installed_integrations.jsx
@@ -21,6 +21,10 @@ export default class InstalledIntegrations extends React.Component {
this.updateFilter = this.updateFilter.bind(this);
this.updateTypeFilter = this.updateTypeFilter.bind(this);
+ this.deleteIncomingWebhook = this.deleteIncomingWebhook.bind(this);
+ this.regenOutgoingWebhookToken = this.regenOutgoingWebhookToken.bind(this);
+ this.deleteOutgoingWebhook = this.deleteOutgoingWebhook.bind(this);
+
this.state = {
incomingWebhooks: [],
outgoingWebhooks: [],
@@ -82,6 +86,10 @@ export default class InstalledIntegrations extends React.Component {
AsyncClient.deleteIncomingHook(incomingWebhook.id);
}
+ regenOutgoingWebhookToken(outgoingWebhook) {
+ AsyncClient.regenOutgoingHookToken(outgoingWebhook.id);
+ }
+
deleteOutgoingWebhook(outgoingWebhook) {
AsyncClient.deleteOutgoingHook(outgoingWebhook.id);
}
@@ -227,7 +235,8 @@ export default class InstalledIntegrations extends React.Component {
<InstalledOutgoingWebhook
key={outgoingWebhook.id}
outgoingWebhook={outgoingWebhook}
- onDeleteClick={this.deleteOutgoingWebhook}
+ onRegenToken={this.regenOutgoingWebhookToken}
+ onDelete={this.deleteOutgoingWebhook}
/>
);
}
diff --git a/webapp/components/backstage/installed_outgoing_webhook.jsx b/webapp/components/backstage/installed_outgoing_webhook.jsx
index 3c0e20634..12e1a5c81 100644
--- a/webapp/components/backstage/installed_outgoing_webhook.jsx
+++ b/webapp/components/backstage/installed_outgoing_webhook.jsx
@@ -12,20 +12,28 @@ export default class InstalledOutgoingWebhook extends React.Component {
static get propTypes() {
return {
outgoingWebhook: React.PropTypes.object.isRequired,
- onDeleteClick: React.PropTypes.func.isRequired
+ onRegenToken: React.PropTypes.func.isRequired,
+ onDelete: React.PropTypes.func.isRequired
};
}
constructor(props) {
super(props);
- this.handleDeleteClick = this.handleDeleteClick.bind(this);
+ this.handleRegenToken = this.handleRegenToken.bind(this);
+ this.handleDelete = this.handleDelete.bind(this);
}
- handleDeleteClick(e) {
+ handleRegenToken(e) {
e.preventDefault();
- this.props.onDeleteClick(this.props.outgoingWebhook);
+ this.props.onRegenToken(this.props.outgoingWebhook);
+ }
+
+ handleDelete(e) {
+ e.preventDefault();
+
+ this.props.onDelete(this.props.outgoingWebhook);
}
render() {
@@ -51,13 +59,25 @@ export default class InstalledOutgoingWebhook extends React.Component {
<div className='details-row'>
<span className='description'>
{Utils.getWindowLocationOrigin() + '/hooks/' + outgoingWebhook.id}
+ {' - '}
+ {outgoingWebhook.token}
</span>
</div>
</div>
<div className='actions'>
<a
href='#'
- onClick={this.handleDeleteClick}
+ onClick={this.handleRegenToken}
+ >
+ <FormattedMessage
+ id='installed_integrations.regenToken'
+ defaultMessage='Regen Token'
+ />
+ </a>
+ {' - '}
+ <a
+ href='#'
+ onClick={this.handleDelete}
>
<FormattedMessage
id='installed_integrations.delete'
diff --git a/webapp/stores/integration_store.jsx b/webapp/stores/integration_store.jsx
index bf9f9ba85..abd7e3558 100644
--- a/webapp/stores/integration_store.jsx
+++ b/webapp/stores/integration_store.jsx
@@ -77,6 +77,15 @@ class IntegrationStore extends EventEmitter {
this.outgoingWebhooks.push(outgoingWebhook);
}
+ updateOutgoingWebhook(outgoingWebhook) {
+ for (let i = 0; i < this.outgoingWebhooks.length; i++) {
+ if (this.outgoingWebhooks[i].id === outgoingWebhook.id) {
+ this.outgoingWebhooks[i] = outgoingWebhook;
+ break;
+ }
+ }
+ }
+
removeOutgoingWebhook(id) {
for (let i = 0; i < this.outgoingWebhooks.length; i++) {
if (this.outgoingWebhooks[i].id === id) {
@@ -110,6 +119,10 @@ class IntegrationStore extends EventEmitter {
this.addOutgoingWebhook(action.outgoingWebhook);
this.emitChange();
break;
+ case ActionTypes.UPDATED_OUTGOING_WEBHOOK:
+ this.updateOutgoingWebhook(action.outgoingWebhook);
+ this.emitChange();
+ break;
case ActionTypes.REMOVED_OUTGOING_WEBHOOK:
this.removeOutgoingWebhook(action.id);
this.emitChange();
diff --git a/webapp/utils/async_client.jsx b/webapp/utils/async_client.jsx
index 93eeee351..cc19baa7e 100644
--- a/webapp/utils/async_client.jsx
+++ b/webapp/utils/async_client.jsx
@@ -1243,3 +1243,18 @@ export function deleteOutgoingHook(id) {
}
);
}
+
+export function regenOutgoingHookToken(id) {
+ client.regenOutgoingHookToken(
+ {id},
+ (data) => {
+ AppDispatcher.handleServerAction({
+ type: ActionTypes.UPDATED_OUTGOING_WEBHOOK,
+ outgoingWebhook: data
+ });
+ },
+ (err) => {
+ dispatchError(err, 'regenOutgoingHookToken');
+ }
+ );
+}
diff --git a/webapp/utils/constants.jsx b/webapp/utils/constants.jsx
index 89bf4e865..c7f61e9df 100644
--- a/webapp/utils/constants.jsx
+++ b/webapp/utils/constants.jsx
@@ -74,6 +74,7 @@ export default {
REMOVED_INCOMING_WEBHOOK: null,
RECEIVED_OUTGOING_WEBHOOKS: null,
RECEIVED_OUTGOING_WEBHOOK: null,
+ UPDATED_OUTGOING_WEBHOOK: null,
REMOVED_OUTGOING_WEBHOOK: null,
RECEIVED_MSG: null,