diff options
author | Luis Pabon <lpabon@redhat.com> | 2013-10-10 16:53:28 -0400 |
---|---|---|
committer | Luis Pabon <lpabon@redhat.com> | 2013-10-13 19:36:20 -0700 |
commit | ac1ac5bd2171e61ba4332dcae33d8a433cef7a4f (patch) | |
tree | 9d836201435c83cf59a659124f004a03f488c1f5 /gluster/swift/common/middleware/gswauth/webadmin | |
parent | 46cd43fdf401b16f9e1b588e5fc8d2c5dd599b37 (diff) |
GSWauth authentication to be based on SWauth
We are planning on creating a GlusterFS aware authentication
system for gluster-swift based on SWauth.
We forked from SWauth commit
41d36ebe160aa3346f6f45197fff0c80f38fde58
Change-Id: Ia28730d21e04fc8d9ce0cb317fc04d0d97583fca
Signed-off-by: Luis Pabon <lpabon@redhat.com>
Reviewed-on: http://review.gluster.org/6069
Diffstat (limited to 'gluster/swift/common/middleware/gswauth/webadmin')
-rw-r--r-- | gluster/swift/common/middleware/gswauth/webadmin/index.html | 552 |
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" /> 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> |