zulip/static/js/integration_bot_widget.js

84 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;
}