mirror of
https://github.com/discourse/discourse.git
synced 2024-11-28 17:16:21 +08:00
132 lines
3.7 KiB
JavaScript
132 lines
3.7 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);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
});
|