171 lines
4.5 KiB
React
171 lines
4.5 KiB
React
import React, { useRef, useState, useEffect, useLayoutEffect } from "react";
|
|
|
|
import { Typography, CircularProgress } from "@material-ui/core";
|
|
|
|
const SetAuthentication = (props) => {
|
|
const { globalUrl, isLoggedIn, isLoaded, userdata } = props;
|
|
|
|
const [firstRequest, setFirstRequest] = useState(true);
|
|
const [finished, setFinished] = useState(false);
|
|
const [response, setResponse] = useState("");
|
|
const [failed, setFailed] = useState(false);
|
|
|
|
if (firstRequest) {
|
|
setFirstRequest(false);
|
|
|
|
//code
|
|
//session_state
|
|
const urlSearchParams = new URLSearchParams(window.location.search);
|
|
const params = Object.fromEntries(urlSearchParams.entries());
|
|
|
|
const authenticationStore = [];
|
|
var appAuthData = {
|
|
label: "",
|
|
app: {
|
|
name: "",
|
|
id: "",
|
|
app_version: "",
|
|
},
|
|
fields: [],
|
|
type: "oauth2",
|
|
};
|
|
|
|
if (window !== undefined && window !== null) {
|
|
console.log(window.location);
|
|
appAuthData.fields.push({
|
|
key: "redirect_uri",
|
|
value: window.location.origin + window.location.pathname,
|
|
});
|
|
}
|
|
|
|
if (params.code !== undefined && params.code !== null) {
|
|
appAuthData.fields.push({ key: "code", value: params.code });
|
|
}
|
|
|
|
if (params.session_state !== undefined && params.session_state !== null) {
|
|
appAuthData.fields.push({
|
|
key: "session_state",
|
|
value: params.session_state,
|
|
});
|
|
}
|
|
|
|
if (params.state !== undefined && params.state !== null) {
|
|
const paramsplit = params.state.split("&");
|
|
console.log(paramsplit);
|
|
for (var key in paramsplit) {
|
|
const query = paramsplit[key].split("=");
|
|
console.log(query);
|
|
|
|
if (query.length !== 2) {
|
|
console.log("INVALID QUERY: ", query);
|
|
continue;
|
|
}
|
|
|
|
if (query[0] === "workflow_id") {
|
|
appAuthData.reference_workflow = query[1];
|
|
}
|
|
|
|
if (query[0] === "reference_action_id") {
|
|
//appAuthData.ReferenceWorkflow = query[1]
|
|
}
|
|
|
|
if (query[0] === "app_name") {
|
|
appAuthData.app.name = query[1];
|
|
appAuthData.label = "Oauth2 for " + query[1];
|
|
}
|
|
|
|
if (query[0] === "app_id") {
|
|
appAuthData.app.id = query[1];
|
|
}
|
|
|
|
if (query[0] === "app_version") {
|
|
appAuthData.app.app_version = query[1];
|
|
}
|
|
|
|
if (query[0] === "authentication_url") {
|
|
appAuthData.fields.push({
|
|
key: "authentication_url",
|
|
value: query[1],
|
|
});
|
|
}
|
|
|
|
if (query[0] === "scope") {
|
|
appAuthData.fields.push({ key: "scope", value: query[1] });
|
|
}
|
|
|
|
if (query[0] === "client_id") {
|
|
appAuthData.fields.push({ key: "client_id", value: query[1] });
|
|
}
|
|
|
|
if (query[0] === "client_secret") {
|
|
appAuthData.fields.push({ key: "client_secret", value: query[1] });
|
|
}
|
|
|
|
if (query[0] === "oauth_url") {
|
|
appAuthData.fields.push({ key: "oauth_url", value: query[1] });
|
|
}
|
|
|
|
if (query[0] === "refresh_uri") {
|
|
appAuthData.fields.push({ key: "refresh_uri", value: query[1] });
|
|
}
|
|
|
|
if (query[0] === "refresh_url") {
|
|
appAuthData.fields.push({ key: "refresh_url", value: query[1] });
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log(appAuthData);
|
|
|
|
fetch(globalUrl + "/api/v1/apps/authentication", {
|
|
method: "PUT",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
Accept: "application/json",
|
|
},
|
|
credentials: "include",
|
|
body: JSON.stringify(appAuthData),
|
|
})
|
|
.then((response) => {
|
|
if (response.status !== 200) {
|
|
console.log("Status not 200 for oauth2 authentication");
|
|
setFailed(true);
|
|
}
|
|
|
|
return response.json();
|
|
})
|
|
.then((responseJson) => {
|
|
//setUserSettings(responseJson)
|
|
console.log("Resp: ", responseJson);
|
|
setFinished(true);
|
|
setResponse(responseJson.reason);
|
|
|
|
setTimeout(() => {
|
|
window.close();
|
|
}, 1000);
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
}
|
|
|
|
return (
|
|
<div style={{ width: 1000, margin: "auto", itemAlign: "center" }}>
|
|
<Typography
|
|
variant="h6"
|
|
style={{ marginLeft: "auto", marginRight: "auto", marginTop: 200 }}
|
|
>
|
|
{!finished ? (
|
|
<CircularProgress />
|
|
) : (
|
|
"DONE WITH AUTH - this will close soon!!"
|
|
)}
|
|
<div />
|
|
{failed ? "Failed setup. Error: " : ""} {response}
|
|
</Typography>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default SetAuthentication;
|