hrms-api-eva/static/index.html
DESKTOP-2S5P7D1\Windows 10 925c5d1ab2 first
2024-12-04 17:25:34 +07:00

266 lines
7.5 KiB
HTML

<!--
~ 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>