From 626bb8efb0c825f332c937ffaaadc9b402079539 Mon Sep 17 00:00:00 2001 From: Derrell Lipman Date: Wed, 3 Jan 2007 20:17:37 +0000 Subject: r20517: re-add cleaned-up webapps (This used to be commit 5a3d6ad0b7cf0ecf8b57b4088b19f7d4291c990b) --- webapps/scripting/client/call.js | 118 ++++++++++++++++++++++++ webapps/scripting/client/desktop.js | 121 +++++++++++++++++++++++++ webapps/scripting/client/encoder.js | 84 +++++++++++++++++ webapps/scripting/client/js_scripts.js | 60 +++++++++++++ webapps/scripting/client/regedit.js | 160 +++++++++++++++++++++++++++++++++ webapps/scripting/client/status.js | 40 +++++++++ webapps/scripting/common.js | 153 +++++++++++++++++++++++++++++++ webapps/scripting/footer_columns.esp | 7 ++ webapps/scripting/footer_desktop.esp | 6 ++ webapps/scripting/footer_plain.esp | 7 ++ webapps/scripting/forms.js | 112 +++++++++++++++++++++++ webapps/scripting/general_calls.esp | 25 ++++++ webapps/scripting/header_columns.esp | 85 ++++++++++++++++++ webapps/scripting/header_desktop.esp | 25 ++++++ webapps/scripting/header_plain.esp | 55 ++++++++++++ webapps/scripting/menus.js | 53 +++++++++++ webapps/scripting/preauth.esp | 17 ++++ webapps/scripting/server/regedit.esp | 51 +++++++++++ webapps/scripting/server/status.esp | 27 ++++++ webapps/scripting/test.ejs | 10 +++ webapps/scripting/test.esp | 6 ++ 21 files changed, 1222 insertions(+) create mode 100644 webapps/scripting/client/call.js create mode 100644 webapps/scripting/client/desktop.js create mode 100644 webapps/scripting/client/encoder.js create mode 100644 webapps/scripting/client/js_scripts.js create mode 100644 webapps/scripting/client/regedit.js create mode 100644 webapps/scripting/client/status.js create mode 100644 webapps/scripting/common.js create mode 100644 webapps/scripting/footer_columns.esp create mode 100644 webapps/scripting/footer_desktop.esp create mode 100644 webapps/scripting/footer_plain.esp create mode 100644 webapps/scripting/forms.js create mode 100644 webapps/scripting/general_calls.esp create mode 100644 webapps/scripting/header_columns.esp create mode 100644 webapps/scripting/header_desktop.esp create mode 100644 webapps/scripting/header_plain.esp create mode 100644 webapps/scripting/menus.js create mode 100644 webapps/scripting/preauth.esp create mode 100644 webapps/scripting/server/regedit.esp create mode 100644 webapps/scripting/server/status.esp create mode 100644 webapps/scripting/test.ejs create mode 100644 webapps/scripting/test.esp (limited to 'webapps/scripting') diff --git a/webapps/scripting/client/call.js b/webapps/scripting/client/call.js new file mode 100644 index 0000000000..2886471db2 --- /dev/null +++ b/webapps/scripting/client/call.js @@ -0,0 +1,118 @@ +/* + client side js functions for remote calls into the server + + Copyright Andrew Tridgell 2005 + released under the GNU GPL Version 2 or later +*/ + +var __call = new Object(); + +/* + we can't use the qooxdoo portability layer for this, as it assumes + you are using an XML transport, so instead replicate the portability + code for remote calls here. Don't look too closely or you will go + blind. +*/ +__call._activex = window.ActiveXObject && !(new QxClient).isOpera() ? true : false; +__call._activexobj = null; +__call._ok = QxXmlHttpLoader._http || QxXmlHttpLoader._activex; + +if (__call._activex) { + var servers = ["MSXML2", "Microsoft", "MSXML", "MSXML3"]; + for (var i=0; i -1) { + return true; + } else { + return false; + } + } +} + +function __get_js_script(file) +{ + var i; + for (i=0; i -1) { + return scripts[i]; + } + } +} + +function __add_js_script(path) +{ + // Create a unique ID for this script + var srcID = new Date().getTime(); + + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.id = srcID; + + head.appendChild(script); + + // IE works only with the path set after appending to the document + document.getElementById(srcID).src = path; +} + +function __remove_js_script(path) +{ + var script = __get_js_script(path); + script.parentNode.removeChild(script); +} + +document.js = new Object(); +document.js.scripts = scripts; +document.js.hasScript = __has_js_script; +document.js.getScript = __get_js_script; +document.js.add = __add_js_script; +document.js.remove = __remove_js_script; + diff --git a/webapps/scripting/client/regedit.js b/webapps/scripting/client/regedit.js new file mode 100644 index 0000000000..9175017c2e --- /dev/null +++ b/webapps/scripting/client/regedit.js @@ -0,0 +1,160 @@ +/* + client side js functions for registry editing + + Copyright Andrew Tridgell 2005 + released under the GNU GPL Version 2 or later +*/ + + +/* + callback from the key enumeration call +*/ +function __folder_keys(fParent, list) +{ + var i; + if (fParent.working == 1) { + fParent.working = 0; + fParent.removeAll(); + } + for (i=0;i +*/ +function writefln() +{ + write(vsprintf(arguments)); + write("
\n"); +} + + +/* if the browser was too dumb to set the HOST header, then + set it now */ +if (headers['HOST'] == undefined) { + headers['HOST'] = server['SERVER_HOST'] + ":" + server['SERVER_PORT']; +} + +/* + show the page header. page types include "plain" and "column" +*/ +function page_header(pagetype, title, menu) { + global.page.pagetype = pagetype; + global.page.title = title; + global.page.menu = menu; + include("/scripting/header_" + pagetype + ".esp"); +} + +/* + show the page footer, getting the page type from page.pagetype + set in page_header() +*/ +function page_footer() { + include("/scripting/footer_" + global.page.pagetype + ".esp"); +} + + +/* + check if a uri is one of the 'always allowed' pages, even when not logged in + This allows the login page to use the same style sheets and images +*/ +function always_allowed(uri) { + var str = string_init(); + + /* allow jsonrpc-based applications to do their own authentication */ + var s = str.split('/', uri); + if (s[0] == "" && s[1] == 'apps') { + return true; + } + + var s = str.split('.', uri); + if (s.length < 2) { + return false; + } + + var ext = s[s.length-1]; + var allowed = new Array("ico", "gif", "png","css", "js"); + for (i in allowed) { + if (allowed[i] == ext) { + return true; + } + } + return false; +} + +/* + display a table element +*/ +function table_element(i, o) { + write("" + i + ""); + if (typeof(o[i]) == "object") { + var j, first; + first = true; + for (j in o[i]) { + if (first == false) { + write("
"); + } + write(o[i][j]); + first = false; + } + } else { + write(o[i]); + } + write("\n"); +} + +/* + display a ejs object as a table. The header is optional +*/ +function simple_table(v) { + if (v.length == 0) { + return; + } + write("\n"); + var r; + for (r in v) { + table_element(r, v); + } + write("
\n"); +} + +/* + display an array of objects, with the header for each element from the given + attribute +*/ +function multi_table(array, header) { + var i, n; + write("\n"); + for (i=0;i\n"); + for (r in v) { + if (r != header) { + table_element(r, v); + } + } + } + write("
' + v[header] + "
\n"); +} + diff --git a/webapps/scripting/footer_columns.esp b/webapps/scripting/footer_columns.esp new file mode 100644 index 0000000000..7b5baaf0c8 --- /dev/null +++ b/webapps/scripting/footer_columns.esp @@ -0,0 +1,7 @@ +<% + /* footer for columns page type */ +%> + + + + diff --git a/webapps/scripting/footer_desktop.esp b/webapps/scripting/footer_desktop.esp new file mode 100644 index 0000000000..5e563dab88 --- /dev/null +++ b/webapps/scripting/footer_desktop.esp @@ -0,0 +1,6 @@ +<% + /* footer for desktop page type */ +%> + + + diff --git a/webapps/scripting/footer_plain.esp b/webapps/scripting/footer_plain.esp new file mode 100644 index 0000000000..31ef8dd4ee --- /dev/null +++ b/webapps/scripting/footer_plain.esp @@ -0,0 +1,7 @@ +<% + /* footer for plain page type */ +%> + + + + diff --git a/webapps/scripting/forms.js b/webapps/scripting/forms.js new file mode 100644 index 0000000000..2de9e34462 --- /dev/null +++ b/webapps/scripting/forms.js @@ -0,0 +1,112 @@ +/* + js functions for forms +*/ + + +/* + display a simple form from a ejs Form object + caller should fill in + f.name = form name + f.action = action to be taken on submit (optional, defaults to current page) + f.class = css class (optional, defaults to 'form') + f.submit = an array of submit labels + f.add(name, label, [type], [value]) = + Add another element + f.element[i].label = element label + f.element[i].name = element name (defaults to label) + f.element[i].type = element type (defaults to text) + f.element[i].value = current value (optional, defaults to "") + */ +function form_display() { + var f = this; + var i, size = 20; + write('
\n'); + if (f.element.length > 0) { + write("\n"); + } + for (i in f.element) { + var e = f.element[i]; + if (e.name == undefined) { + e.name = e.label; + } + if (e.value == undefined) { + e.value = ""; + } + if (strlen(e.value) > size) { + size = strlen(e.value) + 4; + } + } + for (i in f.element) { + var e = f.element[i]; + write(""); + write(""); + if (e.type == "select") { + write('\n'); + } else { + var sizestr = ""; + if (e.type == "text" || e.type == "password") { + sizestr = sprintf('size="%d"', size); + } + writef('\n', + e.name, e.type, e.value, sizestr); + } + write(""); + } + if (f.element.length > 0) { + write("
" + e.label + "
\n"); + } + for (i in f.submit) { + write('\n'); + } + write("
\n"); +} + +function __addMethod(name, label) +{ + var f = this; + var i = f.element.length; + f.element[i] = new Object(); + f.element[i].name = name; + f.element[i].label = label; + f.element[i].type = "text"; + f.element[i].value = ""; + if (arguments.length > 2) { + f.element[i].type = arguments[2]; + } + if (arguments.length > 3) { + f.element[i].value = arguments[3]; + } +} + +/* + create a Form object with the defaults filled in, ready for display() + */ +function FormObj(name, num_elements, num_submits) +{ + var f = new Object(); + f.name = name; + f.element = new Array(num_elements); + f.submit = new Array(num_submits); + f.action = session_uri(request.REQUEST_URI); + f.class = "defaultform"; + f.add = __addMethod; + for (i in f.element) { + f.element[i] = new Object(); + f.element[i].type = "text"; + f.element[i].value = ""; + } + f.display = form_display; + + return f; +} + diff --git a/webapps/scripting/general_calls.esp b/webapps/scripting/general_calls.esp new file mode 100644 index 0000000000..f17c43205a --- /dev/null +++ b/webapps/scripting/general_calls.esp @@ -0,0 +1,25 @@ +<% +/* + used for general purpose calls +*/ +libinclude("server_call.js"); + +/* register a call for clients to make */ +var call = servCallObj(); + +/* + a remote printf, for displaying stuff on smbd stdout +*/ +function srv_printf() +{ + var s = string_init(); + print(s.vsprintf(arguments)); + return undefined; +} + +/* add some basic calls */ +call.add('srv_printf', srv_printf); + +/* run the function that was asked for */ +call.run(); +%> diff --git a/webapps/scripting/header_columns.esp b/webapps/scripting/header_columns.esp new file mode 100644 index 0000000000..2fd57c400c --- /dev/null +++ b/webapps/scripting/header_columns.esp @@ -0,0 +1,85 @@ + + + + + + + @@global.page.title + + + + + + + + + + + + + + + + + + + + + + + +
+

Samba Web Administration Tool

+
+ + + + + + +
+
diff --git a/webapps/scripting/header_desktop.esp b/webapps/scripting/header_desktop.esp new file mode 100644 index 0000000000..9d02ab323b --- /dev/null +++ b/webapps/scripting/header_desktop.esp @@ -0,0 +1,25 @@ + + + + + + + + @@global.page.title + + + + + + + + + + + + diff --git a/webapps/scripting/header_plain.esp b/webapps/scripting/header_plain.esp new file mode 100644 index 0000000000..8dd378910e --- /dev/null +++ b/webapps/scripting/header_plain.esp @@ -0,0 +1,55 @@ + + + + + @@global.page.title + + + + + + + + + + + + + + + + + + + +
+

Samba Web Administration Tool

+
+ +
+
diff --git a/webapps/scripting/menus.js b/webapps/scripting/menus.js new file mode 100644 index 0000000000..ddd97c4ca3 --- /dev/null +++ b/webapps/scripting/menus.js @@ -0,0 +1,53 @@ +/* + menu object for SWAT +*/ + +/* + display a menu object. Currently only the "simple", "vertical" menu style + is supported +*/ +function menu_display() { + var i, m = this; + assert(m.style == "simple" && m.orientation == "vertical"); + write('
\n'); + write("" + m.name + "
    \n"); + for (i = 0; i < m.element.length; i++) { + var e = m.element[i]; + write("
  • " + e.label + "
  • \n"); + } + write("
\n"); +} + + +/* + create a menu object with the defaults filled in, ready for display_menu() + */ +function MenuObj(name, num_elements) +{ + var i, o = new Object(); + o.name = name; + o.class = "menu"; + o.style = "simple"; + o.orientation = "vertical" + o.element = new Array(num_elements); + for (i in o.element) { + o.element[i] = new Object(); + } + o.display = menu_display; + return o; +} + +/* + return a menu object created using a title, followed by + a set of label/link pairs +*/ +function simple_menu() { + var i, m = MenuObj(arguments[0], (arguments.length-1)/2); + for (i=0;i diff --git a/webapps/scripting/server/regedit.esp b/webapps/scripting/server/regedit.esp new file mode 100644 index 0000000000..58ba695c47 --- /dev/null +++ b/webapps/scripting/server/regedit.esp @@ -0,0 +1,51 @@ +<% +/* + server side AJAJ functions for registry editing. These go along + with scripting/client/regedit.js +*/ +libinclude("base.js"); +libinclude("winreg.js"); +libinclude("server_call.js"); + +/* + server side call to return a listing of keys in a winreg path +*/ +function enum_keys(binding, path) { + printf("enum_keys(%s, %s)\n", binding, path); + var reg = winregObj(); + + reg.credentials = session.authinfo.credentials; + + var status = reg.connect(binding); + if (status.is_ok != true) { + printVars(status); + return undefined; + } + return reg.enum_path(path); +} + +/* + server side call to return a listing of values in a winreg path +*/ +function enum_values(binding, path) { + printf("enum_values(%s, %s)\n", binding, path); + var reg = winregObj(); + + reg.credentials = session.authinfo.credentials; + + var status = reg.connect(binding); + if (status.is_ok != true) { + printVars(status); + return undefined; + } + return reg.enum_values(path); +} + +/* register a call for clients to make */ +var call = servCallObj(); +call.add('enum_keys', enum_keys); +call.add('enum_values', enum_values); + +/* run the function that was asked for */ +call.run(); +%> diff --git a/webapps/scripting/server/status.esp b/webapps/scripting/server/status.esp new file mode 100644 index 0000000000..8ca2067d49 --- /dev/null +++ b/webapps/scripting/server/status.esp @@ -0,0 +1,27 @@ +<% + +libinclude("management.js"); +libinclude("server_call.js"); + +function serverInfo() +{ + var info = new Object(); + info["NBT Server"] = server_status("nbt"); + info["WINS Server"] = server_status("wins"); + info["CLDAP Server"] = server_status("cldap"); + info["Kerberos Server"] = server_status("kdc"); + info["SMB Server"] = stream_server_status("smb"); + info["LDAP Server"] = stream_server_status("ldap"); + info["RPC Server"] = stream_server_status("rpc"); + + return info; +} + +/* register a call for clients to make */ +var call = servCallObj(); +call.add('serverInfo', serverInfo); + +/* run the function that was asked for */ +call.run(); + +%> diff --git a/webapps/scripting/test.ejs b/webapps/scripting/test.ejs new file mode 100644 index 0000000000..8e7047f51c --- /dev/null +++ b/webapps/scripting/test.ejs @@ -0,0 +1,10 @@ + +/* + some test ejs code +*/ +function showArray(name, array) { + write("

Array: " + name + "

\n"); + for (v in array) { + write(name + "[" + v + "]=" + array[v] + "
\n"); + } +} diff --git a/webapps/scripting/test.esp b/webapps/scripting/test.esp new file mode 100644 index 0000000000..614a42410c --- /dev/null +++ b/webapps/scripting/test.esp @@ -0,0 +1,6 @@ +

A esp include file

+<% + function testfn(test) { + return "the argument was " + test; + } +%> -- cgit