First edition of the webadmin
This commit is contained in:
parent
049e885fe1
commit
e5c8879ea7
24
README
24
README
@ -38,12 +38,26 @@ Quick Install
|
||||
set log_name = swauth
|
||||
super_admin_key = swauthkey
|
||||
|
||||
4) Restart your proxy server ``swift-init proxy reload``.
|
||||
4) Restart your proxy server ``swift-init proxy reload``
|
||||
|
||||
5) Initialize the Swauth backing store in Swift ``swauth-prep -K swauthkey``.
|
||||
5) Initialize the Swauth backing store in Swift ``swauth-prep -K swauthkey``
|
||||
|
||||
6) Add an account/user ``swauth-add-user -A http://127.0.0.1:8080/auth/ -K
|
||||
swauthkey -a test tester testing``.
|
||||
swauthkey -a test tester testing``
|
||||
|
||||
7) Ensure it works ``st -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K
|
||||
testing stat -v``.
|
||||
7) Ensure it works ``swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K
|
||||
testing stat -v``
|
||||
|
||||
|
||||
Web Admin Install
|
||||
-----------------
|
||||
|
||||
1) If you installed from packages, you'll need to cd to the webadmin directory
|
||||
the package installed. This is ``/usr/share/doc/python-swauth/webadmin``
|
||||
with the Lucid packages. If you installed from source, you'll need to cd to
|
||||
the webadmin directory in the source directory.
|
||||
|
||||
2) Upload the Web Admin files with ``swift -A http://127.0.0.1:8080/auth/v1.0
|
||||
-U .super_admin:.super_admin -K swauthkey upload .webadmin .``
|
||||
|
||||
3) Open ``http://127.0.0.1:8080/auth/`` in your browser.
|
||||
|
@ -45,15 +45,28 @@ Quick Install
|
||||
set log_name = swauth
|
||||
super_admin_key = swauthkey
|
||||
|
||||
4) Restart your proxy server ``swift-init proxy reload``.
|
||||
4) Restart your proxy server ``swift-init proxy reload``
|
||||
|
||||
5) Initialize the Swauth backing store in Swift ``swauth-prep -K swauthkey``.
|
||||
5) Initialize the Swauth backing store in Swift ``swauth-prep -K swauthkey``
|
||||
|
||||
6) Add an account/user ``swauth-add-user -A http://127.0.0.1:8080/auth/ -K
|
||||
swauthkey -a test tester testing``.
|
||||
swauthkey -a test tester testing``
|
||||
|
||||
7) Ensure it works ``st -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K
|
||||
testing stat -v``.
|
||||
7) Ensure it works ``swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K
|
||||
testing stat -v``
|
||||
|
||||
Web Admin Install
|
||||
-----------------
|
||||
|
||||
1) If you installed from packages, you'll need to cd to the webadmin directory
|
||||
the package installed. This is ``/usr/share/doc/python-swauth/webadmin``
|
||||
with the Lucid packages. If you installed from source, you'll need to cd to
|
||||
the webadmin directory in the source directory.
|
||||
|
||||
2) Upload the Web Admin files with ``swift -A http://127.0.0.1:8080/auth/v1.0
|
||||
-U .super_admin:.super_admin -K swauthkey upload .webadmin .``
|
||||
|
||||
3) Open ``http://127.0.0.1:8080/auth/`` in your browser.
|
||||
|
||||
Contents
|
||||
--------
|
||||
|
@ -30,8 +30,8 @@ from eventlet.timeout import Timeout
|
||||
from eventlet import TimeoutError
|
||||
from webob import Response, Request
|
||||
from webob.exc import HTTPAccepted, HTTPBadRequest, HTTPConflict, \
|
||||
HTTPCreated, HTTPForbidden, HTTPNoContent, HTTPNotFound, \
|
||||
HTTPServiceUnavailable, HTTPUnauthorized
|
||||
HTTPCreated, HTTPForbidden, HTTPMethodNotAllowed, HTTPMovedPermanently, \
|
||||
HTTPNoContent, HTTPNotFound, HTTPServiceUnavailable, HTTPUnauthorized
|
||||
|
||||
from swift.common.bufferedhttp import http_connect_raw as http_connect
|
||||
from swift.common.middleware.acl import clean_acl, parse_acl, referrer_allowed
|
||||
@ -167,9 +167,12 @@ class Swauth(object):
|
||||
"""
|
||||
if 'HTTP_X_CF_TRANS_ID' not in env:
|
||||
env['HTTP_X_CF_TRANS_ID'] = 'tx' + str(uuid4())
|
||||
if not self.swauth_remote and \
|
||||
env.get('PATH_INFO', '').startswith(self.auth_prefix):
|
||||
return self.handle(env, start_response)
|
||||
if not self.swauth_remote:
|
||||
if env.get('PATH_INFO', '') == self.auth_prefix[:-1]:
|
||||
return HTTPMovedPermanently(add_slash=True)(env,
|
||||
start_response)
|
||||
elif env.get('PATH_INFO', '').startswith(self.auth_prefix):
|
||||
return self.handle(env, start_response)
|
||||
s3 = env.get('HTTP_AUTHORIZATION')
|
||||
token = env.get('HTTP_X_AUTH_TOKEN', env.get('HTTP_X_STORAGE_TOKEN'))
|
||||
if s3 or (token and token.startswith(self.reseller_prefix)):
|
||||
@ -424,7 +427,7 @@ class Swauth(object):
|
||||
handler = None
|
||||
try:
|
||||
version, account, user, _junk = split_path(req.path_info,
|
||||
minsegs=1, maxsegs=4, rest_with_last=True)
|
||||
minsegs=0, maxsegs=4, rest_with_last=True)
|
||||
except ValueError:
|
||||
return HTTPNotFound(request=req)
|
||||
if version in ('v1', 'v1.0', 'auth'):
|
||||
@ -460,12 +463,23 @@ class Swauth(object):
|
||||
handler = self.handle_prep
|
||||
elif user == '.services':
|
||||
handler = self.handle_set_services
|
||||
else:
|
||||
handler = self.handle_webadmin
|
||||
if not handler:
|
||||
req.response = HTTPBadRequest(request=req)
|
||||
else:
|
||||
req.response = handler(req)
|
||||
return req.response
|
||||
|
||||
def handle_webadmin(self, req):
|
||||
if req.method not in ('GET', 'HEAD'):
|
||||
return HTTPMethodNotAllowed(request=req)
|
||||
subpath = req.path[len(self.auth_prefix):] or 'index.html'
|
||||
path = quote('/v1/%s/.webadmin/%s' % (self.auth_account, subpath))
|
||||
req.response = self.make_request(req.environ, req.method,
|
||||
path).get_response(self.app)
|
||||
return req.response
|
||||
|
||||
def handle_prep(self, req):
|
||||
"""
|
||||
Handles the POST v2/.prep call for preparing the backing store Swift
|
||||
|
552
webadmin/index.html
Normal file
552
webadmin/index.html
Normal file
@ -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>
|
Loading…
x
Reference in New Issue
Block a user