/* Authors: * Pavel Zuna * Adam Young * Endi Dewata * * Copyright (C) 2010 Red Hat * see file 'COPYING' for use and warranty information * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /*global $:true, location:true */ var IPA = ( function () { var that = { jsonrpc_id: 0 }; that.use_static_files = false; that.json_url = '/ipa/json'; if (that.use_static_files){ that.json_url = 'test/data'; } that.ajax_options = { type: 'POST', contentType: 'application/json', dataType: 'json', async: true, processData: false }; that.metadata = {}; that.messages = {}; that.whoami = {}; that.entities = []; that.entity_factories = {}; that.entities_by_name = {}; that.layout = $.bbq.getState('layout'); that.layouts_dir = 'layouts'; that.network_call_count = 0; that.get_template = function(path) { var layout = that.layout || 'default'; return that.layouts_dir+'/'+layout+'/'+path; }; /* initialize the IPA JSON-RPC helper * arguments: * url - JSON-RPC URL to use (optional) */ that.init = function (url, use_static_files, on_success, on_error) { if (url) { that.json_url = url; } if (use_static_files) { that.use_static_files = use_static_files; } $.ajaxSetup(that.ajax_options); var batch = IPA.batch_command({ name: 'ipa_init', on_success: on_success, on_error: on_error }); batch.add_command(IPA.command({ method: 'json_metadata', on_success: function(data, text_status, xhr) { that.metadata = data; } })); batch.add_command(IPA.command({ method: 'i18n_messages', on_success: function(data, text_status, xhr) { that.messages = data.messages; } })); batch.add_command(IPA.command({ entity: 'user', method: 'find', options: { whoami: true, all: true }, on_success: function(data, text_status, xhr) { that.whoami = data.result[0]; } })); batch.add_command(IPA.command({ method: 'env', on_success: function(data, text_status, xhr) { that.env = data.result; } })); batch.add_command(IPA.command({ entity: 'dns', method: 'is_enabled', on_success: function(data, text_status, xhr) { that.dns_enabled = data.result; } })); batch.execute(); }; that.get_entities = function() { return that.entities; }; that.get_entity = function(name) { return that.entities_by_name[name]; }; that.add_entity = function(entity) { that.entities.push(entity); that.entities_by_name[entity.name] = entity; }; that.remove_entity = function(name) { for (var i=0; i', { id: 'error_dialog' }); if (error_thrown.url) { $('

', { text: 'URL: '+error_thrown.url }).appendTo(IPA.error_dialog); } $('

', { html: error_thrown.message }).appendTo(IPA.error_dialog); function close() { IPA.error_dialog.dialog('destroy'); IPA.error_dialog.remove(); IPA.error_dialog = null; } var buttons = {}; /** * When a user initially opens the Web UI without a Kerberos * ticket, the messages including the button labels have not * been loaded yet, so the button labels need default values. */ var label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry'; buttons[label] = function() { close(); that.execute(); }; label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel'; buttons[label] = function() { close(); if (that.on_error) { that.on_error.call(this, xhr, text_status, error_thrown); } }; IPA.error_dialog.dialog({ modal: true, title: error_thrown.title, width: 400, buttons: buttons, close: function() { close(); } }); } function error_handler(xhr, text_status, error_thrown) { IPA.hide_activity_icon(); if (!error_thrown) { error_thrown = { name: xhr.responseText || 'Unknown Error', message: xhr.statusText || 'Unknown Error' }; } if (xhr.status === 401) { error_thrown = {}; // error_thrown is string error_thrown.name = 'Kerberos ticket no longer valid.'; if (IPA.messages && IPA.messages.ajax) { error_thrown.message = IPA.messages.ajax["401"]; } else { error_thrown.message = "Your kerberos ticket is no longer valid. "+ "Please run kinit and then click 'Retry'. "+ "If this is your first time running the IPA Web UI "+ ""+ "follow these directions to configure your browser."; } } if (!error_thrown.title) { error_thrown.title = 'AJAX Error: '+error_thrown.name; } if (that.retry) { dialog_open.call(this, xhr, text_status, error_thrown); } else if (that.on_error) { that.on_error.call(this, xhr, text_status, error_thrown); } } function success_handler(data, text_status, xhr) { if (!data) { IPA.hide_activity_icon(); var error_thrown = { title: 'HTTP Error '+xhr.status, url: this.url, message: data ? xhr.statusText : "No response" }; dialog_open.call(this, xhr, text_status, error_thrown); } else if (data.error) { // error_handler() calls IPA.hide_activity_icon() error_handler.call(this, xhr, text_status, /* error_thrown */ { title: 'IPA Error '+data.error.code, message: data.error.message }); } else if (that.on_success) { IPA.hide_activity_icon(); that.on_success.call(this, data, text_status, xhr); } } var url = IPA.json_url; var command = that.get_command(); if (IPA.use_static_files) { url += '/' + (that.name ? that.name : command) + '.json'; } var data = { method: command, params: [that.args, that.options] }; var request = { url: url, data: JSON.stringify(data), success: success_handler, error: error_handler }; IPA.display_activity_icon(); $.ajax(request); }; that.to_json = function() { var json = {}; json.method = that.get_command(); json.params = []; json.params[0] = that.args || []; json.params[1] = that.options || {}; return json; }; that.to_string = function() { var string = that.get_command().replace(/_/g, '-'); for (var i=0; i',{ 'class':'network-activity-indicator', html: ''}); };