0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-10 04:12:53 +01:00
discourse-custom-wizard/assets/javascripts/discourse/controllers/admin-wizards-api.js.es6

155 Zeilen
4 KiB
Text

import { ajax } from 'discourse/lib/ajax';
import { popupAjaxError } from 'discourse/lib/ajax-error';
import CustomWizardApi from '../models/custom-wizard-api';
import { default as computed, observes } from 'ember-addons/ember-computed-decorators';
import DiscourseURL from 'discourse/lib/url';
export default Ember.Controller.extend({
queryParams: ['refresh_list'],
loadingSubscriptions: false,
notAuthorized: Ember.computed.not('api.authorized'),
authorizationTypes: ['oauth', 'basic'],
isOauth: Ember.computed.equal('api.authType', 'oauth'),
2019-06-03 01:40:54 +02:00
isBasicAuth: Ember.computed.equal('api.authType', 'basic'),
2019-05-31 09:54:11 +02:00
endpointMethods: ['GET', 'PUT', 'POST', 'PATCH', 'DELETE'],
showRemove: Ember.computed.not('isNew'),
2019-06-03 01:40:54 +02:00
@computed('saveDisabled', 'api.authType', 'api.authUrl')
authDisabled(saveDisabled, authType, authUrl) {
return saveDisabled || !authType || !authUrl;
},
2019-06-03 01:40:54 +02:00
@computed('api.name', 'api.authType')
saveDisabled(name, authType) {
return !name || !authType;
},
@observes('api.title')
titleWatcher() {
const title = this.get('api.title');
if (this.get('originalTitle')) {
this.set('originalTitle', title);
}
},
actions: {
addParam() {
this.get('api.authParams').pushObject({});
},
removeParam(param) {
this.get('api.authParams').removeObject(param);
},
2019-05-31 09:54:11 +02:00
addEndpoint() {
this.get('api.endpoints').pushObject({});
},
removeEndpoint(endpoint) {
this.get('api.endpoints').removeObject(endpoint);
},
authorize() {
const api = this.get('api');
const { authType, authUrl, authParams } = api;
2019-06-03 01:40:54 +02:00
if (authType !== 'oauth') return;
let query = '?';
2019-06-03 01:40:54 +02:00
query += `client_id=${api.clientId}`;
query += `&redirect_uri=${encodeURIComponent(api.redirectUri)}`;
query += `&response_type=code`;
2019-06-03 01:40:54 +02:00
if (authParams) {
authParams.forEach(p => {
query += `&${p.key}=${encodeURIComponent(p.value)}`;
});
}
window.location.href = authUrl + query;
},
save() {
const api = this.get('api');
const name = api.name;
2019-06-03 01:40:54 +02:00
const authType = api.authType;
let refreshList = false;
2019-06-03 01:40:54 +02:00
if (!name || !authType) return;
let data = {
2019-06-03 01:40:54 +02:00
auth_type: authType
};
2019-06-03 01:40:54 +02:00
if (api.title) data['title'] = api.title;
if (api.get('isNew') || (api.title !== this.get('originalTitle'))) {
refreshList = true;
}
if (api.get('isNew')) {
data['new'] = true;
};
2019-06-03 01:40:54 +02:00
if (authType === 'oauth') {
data['auth_url'] = api.authUrl;
data['client_id'] = api.clientId;
data['client_secret'] = api.clientSecret;
let params = api.authParams;
if (params) {
data['auth_params'] = JSON.stringify(params);
}
data['token_url'] = api.tokenUrl;
2019-06-03 01:40:54 +02:00
} else if (authType === 'basic') {
data['username'] = api.username;
data['password'] = api.password;
}
const endpoints = api.endpoints;
2019-06-03 01:40:54 +02:00
if (endpoints.length) {
data['endpoints'] = JSON.stringify(endpoints);
2019-05-31 09:54:11 +02:00
}
this.set('updating', true);
ajax(`/admin/wizards/apis/${name.underscore()}`, {
type: 'PUT',
data
}).catch(popupAjaxError)
.then(result => {
if (result.success) {
if (refreshList) {
this.transitionToRoute('adminWizardsApi', result.api.name.dasherize()).then(() => {
this.send('refreshModel');
});
} else {
this.set('api', CustomWizardApi.create(result.api));
}
}
}).finally(() => this.set('updating', false));
},
remove() {
const name = this.get('api.name');
if (!name) return;
this.set('updating', true);
ajax(`/admin/wizards/apis/${name.underscore()}`, {
type: 'DELETE'
}).catch(popupAjaxError)
.then(result => {
if (result.success) {
DiscourseURL.routeTo('/admin/wizards/apis?refresh=true');
}
}).finally(() => this.set('updating', false));
}
}
});