first commit
This commit is contained in:
parent
c5a1fd4cc4
commit
454cda29e5
27 changed files with 12020 additions and 0 deletions
266
static/index.html
Normal file
266
static/index.html
Normal file
|
|
@ -0,0 +1,266 @@
|
|||
<!--
|
||||
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
~ and other contributors as indicated by the @author tags.
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<script src="./keycloak.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<button onclick="keycloak.login()">Login</button>
|
||||
<button onclick="keycloak.login({ action: 'UPDATE_PASSWORD' })">
|
||||
Update Password
|
||||
</button>
|
||||
<button onclick="keycloak.logout()">Logout</button>
|
||||
<button onclick="keycloak.register()">Register</button>
|
||||
<button onclick="keycloak.accountManagement()">Account</button>
|
||||
<button onclick="refreshToken(9999)">Refresh Token</button>
|
||||
<button onclick="refreshToken(30)">
|
||||
Refresh Token (if <30s validity)
|
||||
</button>
|
||||
<button onclick="loadProfile()">Get Profile</button>
|
||||
<button onclick="updateProfile()">Update profile</button>
|
||||
<button onclick="loadUserInfo()">Get User Info</button>
|
||||
<button onclick="output(keycloak.tokenParsed)">Show Token</button>
|
||||
<button onclick="output(keycloak.refreshTokenParsed)">
|
||||
Show Refresh Token
|
||||
</button>
|
||||
<button onclick="output(keycloak.idTokenParsed)">Show ID Token</button>
|
||||
<button onclick="showExpires()">Show Expires</button>
|
||||
<button onclick="output(keycloak)">Show Details</button>
|
||||
<button onclick="output(keycloak.createLoginUrl())">
|
||||
Show Login URL
|
||||
</button>
|
||||
<button onclick="output(keycloak.createLogoutUrl())">
|
||||
Show Logout URL
|
||||
</button>
|
||||
<button onclick="output(keycloak.createRegisterUrl())">
|
||||
Show Register URL
|
||||
</button>
|
||||
<button onclick="output(keycloak.createAccountUrl())">
|
||||
Show Account URL
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<h2>Result</h2>
|
||||
<pre
|
||||
style="
|
||||
background-color: #ddd;
|
||||
border: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
"
|
||||
id="output"
|
||||
></pre>
|
||||
|
||||
<h2>Events</h2>
|
||||
<pre
|
||||
style="
|
||||
background-color: #ddd;
|
||||
border: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
"
|
||||
id="events"
|
||||
></pre>
|
||||
|
||||
<script>
|
||||
function loadProfile() {
|
||||
keycloak
|
||||
.loadUserProfile()
|
||||
.success(function (profile) {
|
||||
output(profile);
|
||||
})
|
||||
.error(function () {
|
||||
output("Failed to load profile");
|
||||
});
|
||||
}
|
||||
|
||||
function updateProfile() {
|
||||
var url = keycloak.createAccountUrl().split("?")[0];
|
||||
var req = new XMLHttpRequest();
|
||||
req.open("POST", url, true);
|
||||
req.setRequestHeader("Accept", "application/json");
|
||||
req.setRequestHeader("Content-Type", "application/json");
|
||||
req.setRequestHeader("Authorization", "bearer " + keycloak.token);
|
||||
|
||||
req.onreadystatechange = function () {
|
||||
if (req.readyState == 4) {
|
||||
if (req.status == 200) {
|
||||
output("Success");
|
||||
} else {
|
||||
output("Failed");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
req.send(
|
||||
'{"email":"myemail@foo.bar","firstName":"test","lastName":"bar"}'
|
||||
);
|
||||
}
|
||||
|
||||
function loadUserInfo() {
|
||||
keycloak
|
||||
.loadUserInfo()
|
||||
.success(function (userInfo) {
|
||||
output(userInfo);
|
||||
})
|
||||
.error(function () {
|
||||
output("Failed to load user info");
|
||||
});
|
||||
}
|
||||
|
||||
function refreshToken(minValidity) {
|
||||
keycloak
|
||||
.updateToken(minValidity)
|
||||
.then(function (refreshed) {
|
||||
if (refreshed) {
|
||||
output(keycloak.tokenParsed);
|
||||
} else {
|
||||
output(
|
||||
"Token not refreshed, valid for " +
|
||||
Math.round(
|
||||
keycloak.tokenParsed.exp +
|
||||
keycloak.timeSkew -
|
||||
new Date().getTime() / 1000
|
||||
) +
|
||||
" seconds"
|
||||
);
|
||||
}
|
||||
})
|
||||
.catch(function () {
|
||||
output("Failed to refresh token");
|
||||
});
|
||||
}
|
||||
|
||||
function showExpires() {
|
||||
if (!keycloak.tokenParsed) {
|
||||
output("Not authenticated");
|
||||
return;
|
||||
}
|
||||
|
||||
var o =
|
||||
"Token Expires:\t\t" +
|
||||
new Date(
|
||||
(keycloak.tokenParsed.exp + keycloak.timeSkew) * 1000
|
||||
).toLocaleString() +
|
||||
"\n";
|
||||
o +=
|
||||
"Token Expires in:\t" +
|
||||
Math.round(
|
||||
keycloak.tokenParsed.exp +
|
||||
keycloak.timeSkew -
|
||||
new Date().getTime() / 1000
|
||||
) +
|
||||
" seconds\n";
|
||||
|
||||
if (keycloak.refreshTokenParsed) {
|
||||
o +=
|
||||
"Refresh Token Expires:\t" +
|
||||
new Date(
|
||||
(keycloak.refreshTokenParsed.exp + keycloak.timeSkew) * 1000
|
||||
).toLocaleString() +
|
||||
"\n";
|
||||
o +=
|
||||
"Refresh Expires in:\t" +
|
||||
Math.round(
|
||||
keycloak.refreshTokenParsed.exp +
|
||||
keycloak.timeSkew -
|
||||
new Date().getTime() / 1000
|
||||
) +
|
||||
" seconds";
|
||||
}
|
||||
|
||||
output(o);
|
||||
}
|
||||
|
||||
function output(data) {
|
||||
if (typeof data === "object") {
|
||||
data = JSON.stringify(data, null, " ");
|
||||
}
|
||||
document.getElementById("output").innerHTML = data;
|
||||
}
|
||||
|
||||
function event(event) {
|
||||
var e = document.getElementById("events").innerHTML;
|
||||
document.getElementById("events").innerHTML =
|
||||
new Date().toLocaleString() + "\t" + event + "\n" + e;
|
||||
}
|
||||
|
||||
var keycloak = Keycloak();
|
||||
|
||||
keycloak.onAuthSuccess = function () {
|
||||
event("Auth Success");
|
||||
};
|
||||
|
||||
keycloak.onAuthError = function (errorData) {
|
||||
event("Auth Error: " + JSON.stringify(errorData));
|
||||
};
|
||||
|
||||
keycloak.onAuthRefreshSuccess = function () {
|
||||
event("Auth Refresh Success");
|
||||
};
|
||||
|
||||
keycloak.onAuthRefreshError = function () {
|
||||
event("Auth Refresh Error");
|
||||
};
|
||||
|
||||
keycloak.onAuthLogout = function () {
|
||||
event("Auth Logout");
|
||||
};
|
||||
|
||||
keycloak.onTokenExpired = function () {
|
||||
event("Access token expired.");
|
||||
};
|
||||
|
||||
keycloak.onActionUpdate = function (status) {
|
||||
switch (status) {
|
||||
case "success":
|
||||
event("Action completed successfully");
|
||||
break;
|
||||
case "cancelled":
|
||||
event("Action cancelled by user");
|
||||
break;
|
||||
case "error":
|
||||
event("Action failed");
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
// Flow can be changed to 'implicit' or 'hybrid', but then client must enable implicit flow in admin console too
|
||||
var initOptions = {
|
||||
responseMode: "fragment",
|
||||
flow: "standard",
|
||||
};
|
||||
|
||||
keycloak
|
||||
.init(initOptions)
|
||||
.then(function (authenticated) {
|
||||
output(
|
||||
"Init Success (" +
|
||||
(authenticated ? "Authenticated" : "Not Authenticated") +
|
||||
")"
|
||||
);
|
||||
})
|
||||
.catch(function () {
|
||||
output("Init Error");
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
2952
static/keycloak.js
Normal file
2952
static/keycloak.js
Normal file
File diff suppressed because it is too large
Load diff
9
static/keycloak.json
Normal file
9
static/keycloak.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"realm": "bma-ehr",
|
||||
"auth-server-url": "https://id.frappet.synology.me",
|
||||
"ssl-required": "external",
|
||||
"resource": "bma-ehr",
|
||||
"public-client": true,
|
||||
"client_secret": "tF0huP4MylOSMVZEohwPMI8DDttW66A7",
|
||||
"realm-public-key":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvYg0ZJvH6HgNOzyPp7PCvY3bJwD9WdsNn6gZbuvIfqJQZ8iSH1t0p3fgODO/fqwcj9UFeh1bVFOSjuW+JpnPehROqzt81KNl9zLLNXoN4LimReQHaMM3dU7DCbRylgVCouIDvObyjg8G+Cy5lZvFKWym/DPwGVpSdbvDZJ83qxq2dp7GJXS8PhOvA+MB1K009/jW5pBTUwNArLjoFccr+gIYIiOJDg2rYyIF3fDkwyWkuxr6xRt10+BRJytselwy/18kbDuJxVPaapdgTXI6wLzx7HWcDk30n5EvhJEumnIPpRst8gucqNYmB4MH+vsyoxV5WLuO3qmVRzFbtAppRQIDAQAB"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue