mirror of https://github.com/zulip/zulip.git
85 lines
3.0 KiB
JavaScript
85 lines
3.0 KiB
JavaScript
var integration_bot_widget = (function () {
|
|
|
|
var exports = {};
|
|
|
|
// This function subscribes the newly created bot to the stream specified by the user.
|
|
function subscribe_to_stream(bot_email, stream_name) {
|
|
var bot_user_id = people.get_user_id(bot_email);
|
|
stream_data.add_subscriber(stream_name, bot_user_id);
|
|
}
|
|
|
|
// This function puts together the main string for url that will be copied by the user
|
|
// to use for incoming webhook services.
|
|
function put_key_values_in_url(api_url, integration_url,
|
|
bot_api_key, stream_name) {
|
|
var integration_bot_url = api_url + integration_url +
|
|
"?api_key=" + bot_api_key +
|
|
"&stream=" + stream_name;
|
|
return integration_bot_url;
|
|
}
|
|
|
|
// This function returns the div/span where the integration bot url string will be
|
|
// set for the user.
|
|
function get_url_span() {
|
|
// This div or span value can be updated along with building the UI using this widget.
|
|
return $("#integration_bot_url");
|
|
}
|
|
|
|
function update_integration_bot_url(integration_bot_url) {
|
|
var url_span = get_url_span();
|
|
url_span.text(integration_bot_url);
|
|
}
|
|
|
|
// This is the function that runs after the bot is created successfully.
|
|
function on_create_bot_success(result, stream_name, api_url, integration_url) {
|
|
var bot_api_key = result.api_key;
|
|
var bot_email = result.email;
|
|
|
|
subscribe_to_stream(bot_email, stream_name);
|
|
var integration_bot_url = put_key_values_in_url(api_url, integration_url,
|
|
bot_api_key, stream_name);
|
|
update_integration_bot_url(integration_bot_url);
|
|
}
|
|
|
|
function create_bot(full_name, short_name, bot_avatar_file, stream_name,
|
|
api_url, integration_url, on_success) {
|
|
var formData = new FormData();
|
|
formData.append('csrfmiddlewaretoken', csrf_token);
|
|
formData.append('full_name', full_name);
|
|
formData.append('short_name', short_name);
|
|
formData.append('file-' + 0, bot_avatar_file);
|
|
channel.post({
|
|
url: '/json/bots',
|
|
data: formData,
|
|
cache: false,
|
|
processData: false,
|
|
contentType: false,
|
|
success: function (resp, statusText, xhr) {
|
|
var result = JSON.parse(xhr.responseText);
|
|
on_success(result, stream_name, api_url, integration_url);
|
|
},
|
|
error: function (xhr) {
|
|
// UI yet to be created with this div id
|
|
$('#bot_widget_error').text(JSON.parse(xhr.responseText).msg).show();
|
|
},
|
|
});
|
|
}
|
|
|
|
// This is the main function to be called to set the integration bot url.
|
|
exports.set_integration_bot_url = function (
|
|
api_url, integration_url, bot_full_name,
|
|
bot_short_name, bot_avatar_file, bot_owner, stream_name
|
|
) {
|
|
create_bot(bot_full_name, bot_short_name, bot_avatar_file,
|
|
stream_name, api_url, integration_url, on_create_bot_success);
|
|
};
|
|
|
|
return exports;
|
|
|
|
}());
|
|
|
|
if (typeof module !== 'undefined') {
|
|
module.exports = integration_bot_widget;
|
|
}
|
|
window.integration_bot_widget = integration_bot_widget;
|