keycloak-uncached

Added basic js example

10/8/2013 1:36:29 PM

Changes

Details

diff --git a/examples/js/index.html b/examples/js/index.html
new file mode 100644
index 0000000..5dc3328
--- /dev/null
+++ b/examples/js/index.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="keycloak.js"></script>
+</head>
+<body>
+
+	<script>
+		keycloak.init({
+			clientId : 'test-app',
+			clientSecret : 'password',
+			baseUrl : 'http://localhost:8081/auth',
+			realm : 'test'
+		});
+
+		if (keycloak.authenticated) {
+			document.write('User: ' + keycloak.user);
+		} else {
+			document.write('<a href="#" id="login" onclick="keycloak.login()">Login</a>');
+		}
+	</script>
+
+</body>
+</html>
diff --git a/examples/js/keycloak.js b/examples/js/keycloak.js
new file mode 100644
index 0000000..dfb6ebb
--- /dev/null
+++ b/examples/js/keycloak.js
@@ -0,0 +1,120 @@
+window.keycloak = (function() {
+	var kc = {};
+	var config = null;
+
+	kc.init = function(c) {
+		config = c;
+
+		var token = getTokenFromCode();
+		if (token) {
+			var t = parseToken(token);
+			kc.user = t.prn;
+			kc.authenticated = true;
+		} else {
+			kc.authenticated = false;
+		}
+	}
+
+	kc.login = function() {
+		var clientId = encodeURIComponent(config.clientId);
+		var redirectUri = encodeURIComponent(window.location.href);
+		var state = encodeURIComponent(createUUID());
+		var realm = encodeURIComponent(config.realm);
+		var url = config.baseUrl + '/rest/realms/' + realm + '/tokens/login?response_type=code&client_id=' + clientId + '&redirect_uri=' + redirectUri
+				+ '&state=' + state;
+		window.location.href = url;
+	}
+
+	return kc;
+
+	function parseToken(token) {
+		var t = base64Decode(token.split('.')[1]);
+		return JSON.parse(t);
+	}
+
+	function getTokenFromCode() {
+		var code = getQueryParam('code');
+		if (code) {
+			window.history.replaceState({}, document.title, location.protocol + "//" + location.host + location.pathname);
+			
+			var clientId = encodeURIComponent(config.clientId);
+			var clientSecret = encodeURIComponent(config.clientSecret);
+			var realm = encodeURIComponent(config.realm);
+
+			var params = 'code=' + code + '&client_id=' + config.clientId + '&password=' + config.clientSecret;
+			var url = config.baseUrl + '/rest/realms/' + realm + '/tokens/access/codes'
+
+			var http = new XMLHttpRequest();
+			http.open('POST', url, false);
+			http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
+
+			http.send(params);
+			if (http.status == 200) {
+				return JSON.parse(http.responseText)['access_token'];
+			}
+		}
+		return undefined;
+	}
+
+	function getQueryParam(name) {
+		var params = window.location.search.substring(1).split('&');
+		for ( var i = 0; i < params.length; i++) {
+			var p = params[i].split('=');
+			if (decodeURIComponent(p[0]) == name) {
+				return p[1];
+			}
+		}
+	}
+
+	function createUUID() {
+		var s = [];
+		var hexDigits = '0123456789abcdef';
+		for ( var i = 0; i < 36; i++) {
+			s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
+		}
+		s[14] = '4';
+		s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
+		s[8] = s[13] = s[18] = s[23] = '-';
+		var uuid = s.join('');
+		return uuid;
+	}
+
+	function base64Decode (data) {
+		  var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+		  var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
+		    ac = 0,
+		    dec = "",
+		    tmp_arr = [];
+
+		  if (!data) {
+		    return data;
+		  }
+
+		  data += '';
+
+		  do {
+		    h1 = b64.indexOf(data.charAt(i++));
+		    h2 = b64.indexOf(data.charAt(i++));
+		    h3 = b64.indexOf(data.charAt(i++));
+		    h4 = b64.indexOf(data.charAt(i++));
+
+		    bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
+
+		    o1 = bits >> 16 & 0xff;
+		    o2 = bits >> 8 & 0xff;
+		    o3 = bits & 0xff;
+
+		    if (h3 == 64) {
+		      tmp_arr[ac++] = String.fromCharCode(o1);
+		    } else if (h4 == 64) {
+		      tmp_arr[ac++] = String.fromCharCode(o1, o2);
+		    } else {
+		      tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
+		    }
+		  } while (i < data.length);
+
+		  dec = tmp_arr.join('');
+
+		  return dec;
+		}
+})();
\ No newline at end of file