discourse/app/assets/javascripts/admin/controllers/admin-web-hooks-show.js.es6
2016-09-05 18:44:00 +08:00

98 lines
3.2 KiB
JavaScript

import { popupAjaxError } from 'discourse/lib/ajax-error';
import { extractDomainFromUrl } from 'discourse/lib/utilities';
import computed from 'ember-addons/ember-computed-decorators';
import InputValidation from 'discourse/models/input-validation';
export default Ember.Controller.extend({
needs: ['adminWebHooks'],
eventTypes: Em.computed.alias('controllers.adminWebHooks.eventTypes'),
defaultEventTypes: Em.computed.alias('controllers.adminWebHooks.defaultEventTypes'),
contentTypes: Em.computed.alias('controllers.adminWebHooks.contentTypes'),
@computed('model.isSaving', 'saved', 'saveButtonDisabled')
savingStatus(isSaving, saved, saveButtonDisabled) {
if (isSaving) {
return I18n.t('saving');
} else if (!saveButtonDisabled && saved) {
return I18n.t('saved');
}
// Use side effect of validation to clear saved text
this.set('saved', false);
return '';
},
@computed('model.isNew')
saveButtonText(isNew) {
return isNew ? I18n.t('admin.web_hooks.create') : I18n.t('admin.web_hooks.save');
},
@computed('model.secret')
secretValidation(secret) {
if (!Ember.isEmpty(secret)) {
if (secret.indexOf(' ') !== -1) {
return InputValidation.create({
failed: true,
reason: I18n.t('admin.web_hooks.secret_invalid')
});
}
if (secret.length < 12) {
return InputValidation.create({
failed: true,
reason: I18n.t('admin.web_hooks.secret_too_short')
});
}
}
},
@computed('model.wildcard_web_hook', 'model.web_hook_event_types.[]')
eventTypeValidation(isWildcard, eventTypes) {
if (!isWildcard && Ember.isEmpty(eventTypes)) {
return InputValidation.create({
failed: true,
reason: I18n.t('admin.web_hooks.event_type_missing')
});
}
},
@computed('model.isSaving', 'secretValidation', 'eventTypeValidation')
saveButtonDisabled(isSaving, secretValidation, eventTypeValidation) {
return isSaving ? false : secretValidation || eventTypeValidation;
},
actions: {
save() {
this.set('saved', false);
const url = extractDomainFromUrl(this.get('model.payload_url'));
const model = this.get('model');
const saveWebHook = () => {
return model.save().then(() => {
this.set('saved', true);
this.get('controllers.adminWebHooks').get('model').addObject(model);
}).catch(popupAjaxError);
};
if (url === 'localhost' || url.match(/192\.168\.\d+\.\d+/) || url.match(/127\.\d+\.\d+\.\d+/) || url === Discourse.BaseUrl) {
return bootbox.confirm(I18n.t('admin.web_hooks.warn_local_payload_url'), I18n.t('no_value'), I18n.t('yes_value'), result => {
if (result) {
return saveWebHook();
}
});
}
return saveWebHook();
},
destroy() {
return bootbox.confirm(I18n.t('admin.web_hooks.delete_confirm'), I18n.t('no_value'), I18n.t('yes_value'), result => {
if (result) {
const model = this.get('model');
model.destroyRecord().then(() => {
this.get('controllers.adminWebHooks').get('model').removeObject(model);
this.transitionToRoute('adminWebHooks');
}).catch(popupAjaxError);
}
});
}
}
});