summaryrefslogtreecommitdiffstats
path: root/gluster/swift/common/middleware/gswauth/webadmin/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'gluster/swift/common/middleware/gswauth/webadmin/index.html')
-rw-r--r--gluster/swift/common/middleware/gswauth/webadmin/index.html552
1 files changed, 552 insertions, 0 deletions
diff --git a/gluster/swift/common/middleware/gswauth/webadmin/index.html b/gluster/swift/common/middleware/gswauth/webadmin/index.html
new file mode 100644
index 0000000..cbc7c8a
--- /dev/null
+++ b/gluster/swift/common/middleware/gswauth/webadmin/index.html
@@ -0,0 +1,552 @@
+<html>
+ <head>
+ <style type="text/css">
+ body {font-family: sans-serif}
+ table {border-collapse: collapse}
+ td {padding-left: 1ex; padding-right: 1ex}
+ .account {color: #0000ff; padding-left: 3ex; cursor: pointer}
+ .add_account_heading {text-align: right; padding-right: 0}
+ .service {padding-left: 3ex; vertical-align: top}
+ .service_detail {padding-left: 0}
+ .user {color: #0000ff; padding-left: 3ex; cursor: pointer}
+ .group {padding-left: 3ex}
+ .add_user_heading {text-align: right; padding-right: 0}
+ .shadow_delement {color: #0000ff; cursor: pointer}
+ .shadow_felement {display: none}
+ #swauth {font-size: 200%; font-weight: bold; font-style: italic; margin: 0px; padding: 0px}
+ #creds_area {float: right}
+ #logout {color: #0000ff; padding-left: 3ex; cursor: pointer}
+ #refresh_accounts {color: #0000ff; padding-left: 1ex; cursor: pointer}
+ #add_account {color: #0000ff; padding-left: 1ex; padding-right: 1ex; cursor: pointer}
+ #add_account_title {padding-top: 1ex; padding-bottom: 1ex}
+ #add_account_cancel {color: #0000ff; padding-top: 1ex; padding-left: 3ex; cursor: pointer}
+ #add_account_save {color: #0000ff; text-align: right; padding-top: 1ex; padding-right: 3ex; cursor: pointer}
+ #account_area {background: #ddeeff}
+ #add_user {color: #0000ff; padding-left: 1ex; padding-right: 1ex; cursor: pointer}
+ #add_user_title {padding-top: 1ex; padding-bottom: 1ex}
+ #add_user_cancel {color: #0000ff; padding-top: 1ex; padding-left: 3ex; cursor: pointer}
+ #add_user_save {color: #0000ff; text-align: right; padding-top: 1ex; padding-right: 3ex; cursor: pointer}
+ #delete_account {color: #0000ff; text-align: right; margin-left: 45ex; padding-right: 1ex; cursor: pointer}
+ #user_area {background: #aaccff}
+ #delete_user {color: #0000ff; text-align: right; margin-left: 45ex; padding-right: 1ex; cursor: pointer}
+ #auth_view {display: none}
+ #auth_toggler {color: #0000ff; cursor: pointer}
+ #auth_update {color: #0000ff; padding-left: 1ex; cursor: pointer}
+ #auth_update_field {display: none}
+ </style>
+ <script type="text/javascript">
+ var request = null;
+ var creds_user = '';
+ var creds_key = '';
+ var creds_logged_in = true;
+ var account = '';
+ var user = '';
+ var account_selection = -1;
+ var user_selection = -1;
+ var swauth_area_selected_background = '#ddeeff';
+ var account_area_selected_background = '#aaccff';
+ var endpoints;
+
+ function get_bounds(element) {
+ bounds = {};
+ bounds.top = 0;
+ bounds.left = 0;
+ bounds.width = element.offsetWidth;
+ bounds.height = element.offsetHeight;
+ if (element.offsetParent) {
+ do {
+ bounds.top += element.offsetTop;
+ bounds.left += element.offsetLeft;
+ } while (element = element.offsetParent);
+ }
+ return bounds;
+ }
+
+ function shadow_edit(delement) {
+ felement = document.getElementById('f' + delement.id.substring(1));
+ felement.value = delement.innerHTML;
+ delement.style.display = 'none';
+ felement.style.display = 'inline';
+ felement.focus();
+ }
+
+ function shadow_submitter(felement, evnt, func) {
+ keycode = 0;
+ if (window.event) {
+ keycode = window.event.keyCode;
+ } else if (evnt) {
+ keycode = evnt.which;
+ }
+ if (keycode == 13) {
+ func(felement);
+ return false;
+ }
+ return true;
+ }
+
+ function shadow_escaper(felement, evnt) {
+ keycode = 0;
+ if (window.event) {
+ keycode = window.event.keyCode;
+ } else if (evnt) {
+ keycode = evnt.which;
+ }
+ if (keycode == 27) {
+ felement.style.display = 'none';
+ document.getElementById('d' + felement.id.substring(1)).style.display = 'inline';
+ return false;
+ }
+ return true;
+ }
+
+ function creds_clicked() {
+ creds_area = document.getElementById('creds_area');
+ if (creds_logged_in) {
+ creds_user = '';
+ creds_key = '';
+ creds_area.innerHTML = 'User: <input id="creds_user" type="text" size="10" /> &nbsp; Key: <input id="creds_key" type="password" size="10" onkeypress="return creds_submitter(event)" />';
+ document.getElementById('swauth_area').innerHTML = '';
+ creds_logged_in = false;
+ document.getElementById("creds_user").focus();
+ } else {
+ creds_user = document.getElementById('creds_user').value;
+ creds_key = document.getElementById('creds_key').value;
+ creds_area.innerHTML = '<div>Logged in as ' + creds_user + ' <span id="logout" onclick="creds_clicked()">Logout</span></div>';
+ creds_logged_in = true;
+ swauth_area_load();
+ }
+ }
+
+ function creds_submitter(e) {
+ keycode = 0;
+ if (window.event) {
+ keycode = window.event.keyCode;
+ } else if (e) {
+ keycode = e.which;
+ }
+ if (keycode == 13) {
+ creds_clicked();
+ return false;
+ }
+ return true;
+ }
+
+ function swauth_area_reset() {
+ account_area_reset();
+ document.getElementById('swauth_area').innerHTML = '';
+ }
+
+ function account_area_reset() {
+ user_area_reset();
+ element = document.getElementById('add_account')
+ if (element) {
+ element.style.background = 'none';
+ }
+ if (account_selection != -1) {
+ document.getElementById('account_' + account_selection).style.background = 'none';
+ }
+ account = '';
+ account_selection = -1;
+ document.getElementById('account_area').innerHTML = '';
+ }
+
+ function user_area_reset() {
+ element = document.getElementById('add_user')
+ if (element) {
+ element.style.background = 'none';
+ }
+ if (user_selection != -1) {
+ document.getElementById('user_' + user_selection).style.background = 'none';
+ }
+ user = '';
+ user_selection = -1;
+ document.getElementById('user_area').innerHTML = '';
+ }
+
+ function swauth_area_load() {
+ swauth_area_reset();
+ request = new XMLHttpRequest();
+ request.onreadystatechange = swauth_area_load2;
+ request.open('GET', '/auth/v2/', true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.send();
+ }
+
+ function swauth_area_load2() {
+ if (request.readyState == 4) {
+ swauth_area = document.getElementById('swauth_area');
+ if (request.status >= 200 && request.status <= 299) {
+ data = JSON.parse(request.responseText);
+ content = '<table><tr><td>Accounts <span id="refresh_accounts" onclick="swauth_area_load()">Refresh</span> <span id="add_account" onclick="add_account()">Add</span></td></tr>';
+ for (ix = 0; ix < data.accounts.length; ix++) {
+ content += '<tr><td id="account_' + ix + '" onclick="account_area_load(' + ix + ')" class="account">' + data.accounts[ix].name + '</td></tr>';
+ }
+ content += '</table>';
+ swauth_area.innerHTML = content;
+ } else {
+ swauth_area.innerHTML = 'Server returned status: ' + request.status + ' ' + request.statusText;
+ }
+ }
+ }
+
+ function add_account() {
+ account_area_reset();
+ document.getElementById('add_account').style.background = swauth_area_selected_background;
+ account_area = document.getElementById('account_area');
+ account_area.innerHTML = '<table><tr><td id="add_account_title" colspan="2">New Account</td></tr><tr><td class="add_account_heading">Name</td><td><input id="add_account_name" type="text" size="20" /></td></tr><tr><td class="add_account_heading">Suffix</td><td><input id="add_account_suffix" type="text" size="20" /> (Optional)</td></tr><tr><td id="add_account_cancel" onclick="swauth_area_load()">Cancel</td><td id="add_account_save" onclick="add_account_save()">Add</td></tr></table>';
+ bounds = get_bounds(document.getElementById('add_account'));
+ account_area.style.position = 'absolute';
+ account_area.style.top = bounds.top;
+ account_area.style.left = bounds.left + bounds.width;
+ document.getElementById("add_account_name").focus();
+ }
+
+ function add_account_save() {
+ request = new XMLHttpRequest();
+ request.onreadystatechange = add_account_save2;
+ request.open('PUT', '/auth/v2/' + document.getElementById('add_account_name').value, true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.setRequestHeader('X-Account-Suffix', document.getElementById('add_account_suffix').value);
+ request.send();
+ }
+
+ function add_account_save2() {
+ if (request.readyState == 4) {
+ if (request.status >= 200 && request.status <= 299) {
+ swauth_area_load();
+ } else {
+ alert('Server returned status: ' + request.status + ' ' + request.statusText);
+ }
+ }
+ }
+
+ function account_area_load(account_index) {
+ account_area_reset();
+ account_element = document.getElementById('account_' + account_index);
+ account_element.style.background = swauth_area_selected_background;
+ account_selection = account_index;
+ account = account_element.innerHTML;
+ request = new XMLHttpRequest();
+ request.onreadystatechange = account_area_load2;
+ request.open('GET', '/auth/v2/' + account, true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.send();
+ }
+
+ function account_area_load2() {
+ account_area = document.getElementById('account_area');
+ if (request.readyState == 4) {
+ if (request.status >= 200 && request.status <= 299) {
+ data = JSON.parse(request.responseText);
+ content = '<div id="delete_account" onclick="delete_account()">Delete</div><table><tr><td>Account Id</td><td>' + data.account_id + '</td></tr></table><table><tr><td>Services</td></tr>';
+ services = [];
+ for (service in data.services) {
+ services.push(service);
+ }
+ services.sort();
+ for (ix = 0; ix < services.length; ix++) {
+ content += '<tr><td class="service">' + services[ix] + '</td><td class="service_detail"><table>';
+ if (data.services[services[ix]]['default']) {
+ content += '<tr><td>default</td><td><span id="d-' + services[ix] + '" class="shadow_delement" onclick="shadow_edit(this)">' + data.services[services[ix]]['default'] + '</span><input id="f-' + services[ix] + '" class="shadow_felement" type="text" size="40" onkeypress="return shadow_submitter(this, event, endpoint_save)" onkeydown="return shadow_escaper(this, event)" /></td></tr>';
+ }
+ endpoints = [];
+ for (name in data.services[services[ix]]) {
+ if (name != 'default') {
+ endpoints.push(name);
+ }
+ }
+ endpoints.sort();
+ for (iy = 0; iy < endpoints.length; iy++) {
+ content += '<tr><td>' + endpoints[iy] + '</td><td><span id="d' + iy + '-' + services[ix] + '" class="shadow_delement" onclick="shadow_edit(this)">' + data.services[services[ix]][endpoints[iy]] + '</span><input id="f' + iy + '-' + services[ix] + '" class="shadow_felement" type="text" size="40" onkeypress="return shadow_submitter(this, event, endpoint_save)" onkeydown="return shadow_escaper(this, event)" /></td></tr>';
+ }
+ content += '</table></td></tr>';
+ }
+ content += '</table><table><tr><td>Users <span id="add_user" onclick="add_user()">Add</span></td></tr>';
+ for (ix = 0; ix < data.users.length; ix++) {
+ content += '<tr><td id="user_' + ix + '" onclick="user_area_load(' + ix + ')" class="user">' + data.users[ix].name + '</td></tr>';
+ }
+ content += '</table>';
+ account_area.innerHTML = content;
+ } else {
+ account_area.innerHTML = 'Server returned status: ' + request.status + ' ' + request.statusText;
+ }
+ bounds = get_bounds(document.getElementById('account_' + account_selection));
+ account_area.style.position = 'absolute';
+ account_area.style.top = bounds.top;
+ account_area.style.left = bounds.left + bounds.width;
+ }
+ }
+
+ function endpoint_save(field) {
+ service = field.id.substring(field.id.indexOf('-') + 1)
+ index = field.id.substring(1, field.id.indexOf('-'))
+ if (index) {
+ endpoint = endpoints[index];
+ } else {
+ endpoint = 'default';
+ }
+ services = {};
+ services[service] = {};
+ services[service][endpoint] = field.value;
+ request = new XMLHttpRequest();
+ request.onreadystatechange = endpoint_save2;
+ request.open('POST', '/auth/v2/' + account + '/.services', true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.send(JSON.stringify(services));
+ }
+
+ function endpoint_save2() {
+ if (request.readyState == 4) {
+ if (request.status >= 200 && request.status <= 299) {
+ account_area_load(account_selection);
+ } else {
+ alert('Server returned status: ' + request.status + ' ' + request.statusText);
+ }
+ }
+ }
+
+ function add_user() {
+ user_area_reset();
+ document.getElementById('add_user').style.background = account_area_selected_background;
+ user_area = document.getElementById('user_area');
+ user_area.innerHTML = '<table><tr><td id="add_user_title" colspan="2">New User</td></tr><tr><td class="add_user_heading">Name</td><td><input id="add_user_name" type="text" size="20" /></td></tr><tr><td class="add_user_heading">Auth Key</td><td><input id="add_user_key" type="password" size="20" /></td></tr><tr><td class="add_user_heading">Account Admin</td><td><input id="add_user_admin" type="checkbox" /></td></tr><tr><td class="add_user_heading">Reseller Admin</td><td><input id="add_user_reseller_admin" type="checkbox" /></td></tr><tr><td id="add_user_cancel" onclick="add_user_cancel()">Cancel</td><td id="add_user_save" onclick="add_user_save()">Add</td></tr></table>';
+ bounds = get_bounds(document.getElementById('add_user'));
+ user_area.style.position = 'absolute';
+ user_area.style.top = bounds.top;
+ user_area.style.left = bounds.left + bounds.width;
+ document.getElementById("add_user_name").focus();
+ }
+
+ function add_user_cancel() {
+ document.getElementById('add_user').style.background = 'none';
+ document.getElementById('user_area').innerHTML = '';
+ }
+
+ function add_user_save() {
+ request = new XMLHttpRequest();
+ request.onreadystatechange = add_user_save2;
+ request.open('PUT', '/auth/v2/' + account + '/' + document.getElementById('add_user_name').value, true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.setRequestHeader('X-Auth-User-Key', document.getElementById('add_user_key').value);
+ if (document.getElementById('add_user_admin').value) {
+ request.setRequestHeader('X-Auth-User-Admin', 'true');
+ }
+ if (document.getElementById('add_user_reseller_admin').value) {
+ request.setRequestHeader('X-Auth-User-Reseller-Admin', 'true');
+ }
+ request.send();
+ }
+
+ function add_user_save2() {
+ if (request.readyState == 4) {
+ if (request.status >= 200 && request.status <= 299) {
+ account_area_load(account_selection);
+ } else {
+ alert('Server returned status: ' + request.status + ' ' + request.statusText);
+ }
+ }
+ }
+
+ function delete_account() {
+ request = new XMLHttpRequest();
+ request.onreadystatechange = delete_account2;
+ request.open('DELETE', '/auth/v2/' + account, true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.send();
+ }
+
+ function delete_account2() {
+ if (request.readyState == 4) {
+ if (request.status >= 200 && request.status <= 299) {
+ swauth_area_load();
+ } else {
+ alert('Server returned status: ' + request.status + ' ' + request.statusText);
+ }
+ }
+ }
+
+ function user_area_load(account_area_user_index) {
+ user_area_reset();
+ user_element = document.getElementById('user_' + account_area_user_index);
+ user_element.style.background = account_area_selected_background;
+ user_selection = account_area_user_index;
+ user = user_element.innerHTML;
+ request = new XMLHttpRequest();
+ request.onreadystatechange = user_area_load2;
+ request.open('GET', '/auth/v2/' + account + '/' + user, true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.send();
+ }
+
+ function user_area_load2() {
+ user_area = document.getElementById('user_area');
+ if (request.readyState == 4) {
+ if (request.status >= 200 && request.status <= 299) {
+ data = JSON.parse(request.responseText);
+ content = '<div id="delete_user" onclick="delete_user()">Delete</div><table><tr><td>Auth</td><td><span id="auth_toggler" onclick="auth_toggle()">Show</span> <span id="auth_view">' + data.auth + '</span></td><td><input id="auth_update_field" type="password" size="20" onkeypress="return auth_submitter(event)" onkeydown="return auth_escaper(event)" /> <span id="auth_update" onclick="auth_update()">Update</span></td></tr></table><table><tr><td>Groups</td></tr>';
+ groups = [];
+ for (ix = 0; ix < data.groups.length; ix++) {
+ groups.push(data.groups[ix].name);
+ }
+ groups.sort();
+ for (ix = 0; ix < groups.length; ix++) {
+ content += '<tr><td class="group">' + groups[ix] + '</td></tr>';
+ }
+ content += '</table>';
+ user_area.innerHTML = content;
+ } else {
+ user_area.innerHTML = 'Server returned status: ' + request.status + ' ' + request.statusText;
+ }
+ bounds = get_bounds(document.getElementById('user_' + user_selection));
+ user_area.style.position = 'absolute';
+ user_area.style.top = bounds.top;
+ user_area.style.left = bounds.left + bounds.width;
+ }
+ }
+
+ function delete_user() {
+ request = new XMLHttpRequest();
+ request.onreadystatechange = delete_user2;
+ request.open('DELETE', '/auth/v2/' + account + '/' + user, true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.send();
+ }
+
+ function delete_user2() {
+ if (request.readyState == 4) {
+ if (request.status >= 200 && request.status <= 299) {
+ account_area_load(account_selection);
+ } else {
+ alert('Server returned status: ' + request.status + ' ' + request.statusText);
+ }
+ }
+ }
+
+ function auth_toggle() {
+ to_toggle = document.getElementById('auth_view');
+ toggler = document.getElementById('auth_toggler');
+ if (to_toggle.style.display && to_toggle.style.display != 'none') {
+ toggler.innerHTML = 'Show';
+ to_toggle.style.display = 'none';
+ } else {
+ toggler.innerHTML = 'Hide';
+ to_toggle.style.display = 'inline';
+ }
+ }
+
+ function auth_update() {
+ field = document.getElementById('auth_update_field');
+ trigger = document.getElementById('auth_update');
+ if (field.style.display && field.style.display != 'none') {
+ auth_save();
+ } else {
+ field.style.display = 'inline';
+ trigger.style.display = 'none';
+ field.focus();
+ }
+ }
+
+ function auth_submitter(e) {
+ keycode = 0;
+ if (window.event) {
+ keycode = window.event.keyCode;
+ } else if (e) {
+ keycode = e.which;
+ }
+ if (keycode == 13) {
+ auth_save();
+ return false;
+ }
+ return true;
+ }
+
+ function auth_escaper(e) {
+ keycode = 0;
+ if (window.event) {
+ keycode = window.event.keyCode;
+ } else if (e) {
+ keycode = e.which;
+ }
+ if (keycode == 27) {
+ field = document.getElementById('auth_update_field');
+ field.value = '';
+ field.style.display ='none';
+ document.getElementById('auth_update').style.display ='inline';
+ return false;
+ }
+ return true;
+ }
+
+ function auth_save() {
+ document.getElementById('auth_update_field').style.display ='none';
+ if (document.getElementById('auth_update_field').value) {
+ request = new XMLHttpRequest();
+ request.onreadystatechange = auth_save2;
+ request.open('GET', '/auth/v2/' + account + '/' + user, true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.send();
+ }
+ }
+
+ function auth_save2() {
+ if (request.readyState == 4) {
+ if (request.status >= 200 && request.status <= 299) {
+ data = JSON.parse(request.responseText);
+ request = new XMLHttpRequest();
+ request.onreadystatechange = auth_save3;
+ request.open('PUT', '/auth/v2/' + account_element.innerHTML + '/' + user_element.innerHTML, true);
+ request.setRequestHeader('X-Auth-Admin-User', creds_user);
+ request.setRequestHeader('X-Auth-Admin-Key', creds_key);
+ request.setRequestHeader('X-Auth-User-Key', document.getElementById('auth_update_field').value);
+ admin = false;
+ reseller_admin = false;
+ for (ix = 0; ix < data.groups.length; ix++) {
+ if (data.groups[ix].name == '.admin') {
+ admin = true;
+ } else if (data.groups[ix].name == '.reseller_admin') {
+ reseller_admin = true;
+ }
+ }
+ if (admin) {
+ request.setRequestHeader('X-Auth-User-Admin', 'true');
+ }
+ if (reseller_admin) {
+ request.setRequestHeader('X-Auth-User-Reseller-Admin', 'true');
+ }
+ request.send();
+ } else {
+ alert('Server returned status: ' + request.status + ' ' + request.statusText);
+ }
+ }
+ }
+
+ function auth_save3() {
+ if (request.readyState == 4) {
+ if (request.status >= 200 && request.status <= 299) {
+ user_area_load(user_selection);
+ } else {
+ alert('Server returned status: ' + request.status + ' ' + request.statusText);
+ }
+ }
+ }
+ </script>
+ </head>
+ <body onload="creds_clicked()">
+ <form onsubmit="return false">
+ <div id="creds_area"></div>
+ <div id="swauth">Swauth</div>
+ <div id="swauth_area"></div>
+ <div id="account_area"></div>
+ <div id="user_area"></div>
+ </form>
+ </body>
+</html>