ui/lib/pipeline/addon/components/bitbucketserver-setting/component.js

100 lines
2.6 KiB
JavaScript

import GithubSetting from 'pipeline/components/github-setting/component';
import { set, get, setProperties, observer } from '@ember/object';
import { inject as service } from '@ember/service';
export default GithubSetting.extend({
intl: service(),
router: service(),
settings: service(),
oauthType: 'bitbucketserver',
oauthHost: 'bitbucket.org',
applicationLink: null,
consumerKey: null,
publicKey: null,
init() {
this._super(...arguments);
setProperties(this, {
isEnterprise: true,
applicationLink: window.location.href
})
const provider = get(this, 'provider');
if ( !get(provider, 'consumerKey') ) {
set(this, 'generating', true);
provider.doAction('generateKeys').finally(() => {
set(this, 'generating', false);
});
}
},
actions: {
authenticate() {
const hostname = get(this, 'oauthModel.hostName');
const errors = [];
if ( !hostname ) {
errors.pushObject(get(this, 'intl').t('authPage.bitbucketserver.form.hostname.required'));
}
set(this, 'errors', errors);
if ( get(errors, 'length') > 0 ) {
return;
}
set(this, 'testing', true);
const provider = get(this, 'provider');
const tls = get(this, 'secure');
const redirectUrl = `${ get(this, 'destinationUrl') }/verify-auth`;
provider.doAction('requestLogin', {
hostname,
redirectUrl,
tls
}).then((res) => {
const authorizeURL = get(res, 'loginUrl');
get(this, 'gitService').authorizeTest(
authorizeURL,
(err, code) => {
if (err) {
this.send('gotError', err);
set(this, 'testing', false);
} else {
this.send('gotCode', code, hostname, redirectUrl, tls);
}
}
);
}).catch(() => {
set(this, 'testing', false);
});
},
gotCode(code, hostname, redirectUrl, tls) {
const param = {
hostname,
oauthToken: get(code, 'oauthToken'),
oauthVerifier: get(code, 'oauthVerifier'),
redirectUrl,
tls,
};
get(this, 'provider').doAction('testAndApply', param).then(() => {
get(this, 'router').transitionTo('authenticated.project.pipeline.repositories');
}).finally(() => {
set(this, 'testing', false);
});
},
},
targetDidChange: observer('target', function() {
this.switch('bitbucketcloud');
}),
switch() {
throw new Error('switch action is required!');
}
});