mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 07:15:47 +08:00
105 lines
3.4 KiB
JavaScript
105 lines
3.4 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({
|
|
adminWebHooks: Ember.inject.controller(),
|
|
eventTypes: Ember.computed.alias('adminWebHooks.eventTypes'),
|
|
defaultEventTypes: Ember.computed.alias('adminWebHooks.defaultEventTypes'),
|
|
contentTypes: Ember.computed.alias('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 isNew = model.get('isNew');
|
|
|
|
const saveWebHook = () => {
|
|
return model.save().then(() => {
|
|
this.set('saved', true);
|
|
this.get('adminWebHooks').get('model').addObject(model);
|
|
|
|
if (isNew) {
|
|
this.transitionToRoute('adminWebHooks.show', model.get('id'));
|
|
}
|
|
}).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('adminWebHooks').get('model').removeObject(model);
|
|
this.transitionToRoute('adminWebHooks');
|
|
}).catch(popupAjaxError);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|