mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 22:13:26 +00:00
The "subdomain" label is redundant, to the extent it's even accurate -- this is really just the URL we want to display, which may or may not involve a subdomain. Similarly "external". The former `external_api_path_subdomain` was never a path -- it's a host, followed by a path, which together form a scheme-relative URL. I'm not quite convinced that value is actually the right thing in 2 of the 3 places we use it, but fixing that can start by giving an accurate name to the thing we have.
84 lines
3.0 KiB
JavaScript
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;
|
|
}
|