fix local node auth

This commit is contained in:
PhilReact 2024-12-17 02:34:27 +02:00
parent ab48491499
commit 7e2a1db62b

View File

@ -23,20 +23,19 @@ import { set } from "lodash";
import { cleanUrl, isUsingLocal } from "../background"; import { cleanUrl, isUsingLocal } from "../background";
export const manifestData = { export const manifestData = {
version: '0.3.8' version: "0.3.8",
} };
export const NotAuthenticated = ({ export const NotAuthenticated = ({
getRootProps, getRootProps,
getInputProps, getInputProps,
setExtstate, setExtstate,
apiKey, apiKey,
setApiKey, setApiKey,
globalApiKey, globalApiKey,
handleSetGlobalApikey, handleSetGlobalApikey,
handleFilePick handleFilePick,
}) => { }) => {
const [isValidApiKey, setIsValidApiKey] = useState<boolean | null>(null); const [isValidApiKey, setIsValidApiKey] = useState<boolean | null>(null);
const [hasLocalNode, setHasLocalNode] = useState<boolean | null>(null); const [hasLocalNode, setHasLocalNode] = useState<boolean | null>(null);
@ -55,9 +54,9 @@ export const NotAuthenticated = ({
const [customApikey, setCustomApiKey] = React.useState(""); const [customApikey, setCustomApiKey] = React.useState("");
const [customNodeToSaveIndex, setCustomNodeToSaveIndex] = const [customNodeToSaveIndex, setCustomNodeToSaveIndex] =
React.useState(null); React.useState(null);
const importedApiKeyRef = useRef(null) const importedApiKeyRef = useRef(null);
const currentNodeRef = useRef(null) const currentNodeRef = useRef(null);
const hasLocalNodeRef = useRef(null) const hasLocalNodeRef = useRef(null);
const isLocal = cleanUrl(currentNode?.url) === "127.0.0.1:12391"; const isLocal = cleanUrl(currentNode?.url) === "127.0.0.1:12391";
const handleFileChangeApiKey = (event) => { const handleFileChangeApiKey = (event) => {
const file = event.target.files[0]; // Get the selected file const file = event.target.files[0]; // Get the selected file
@ -72,7 +71,6 @@ export const NotAuthenticated = ({
} }
}; };
const checkIfUserHasLocalNode = useCallback(async () => { const checkIfUserHasLocalNode = useCallback(async () => {
try { try {
const url = `http://127.0.0.1:12391/admin/status`; const url = `http://127.0.0.1:12391/admin/status`;
@ -85,8 +83,12 @@ export const NotAuthenticated = ({
const data = await response.json(); const data = await response.json();
if (data?.height) { if (data?.height) {
setHasLocalNode(true); setHasLocalNode(true);
return true;
}
return false;
} catch (error) {
return false;
} }
} catch (error) {}
}, []); }, []);
useEffect(() => { useEffect(() => {
@ -94,42 +96,46 @@ export const NotAuthenticated = ({
}, []); }, []);
useEffect(() => { useEffect(() => {
window.sendMessage("getCustomNodesFromStorage") window
.sendMessage("getCustomNodesFromStorage")
.then((response) => { .then((response) => {
if (response) { if (response) {
setCustomNodes(response || []); setCustomNodes(response || []);
} }
}) })
.catch((error) => { .catch((error) => {
console.error("Failed to get custom nodes from storage:", error.message || "An error occurred"); console.error(
"Failed to get custom nodes from storage:",
error.message || "An error occurred"
);
}); });
}, []); }, []);
useEffect(()=> { useEffect(() => {
importedApiKeyRef.current = importedApiKey importedApiKeyRef.current = importedApiKey;
}, [importedApiKey]) }, [importedApiKey]);
useEffect(()=> { useEffect(() => {
currentNodeRef.current = currentNode currentNodeRef.current = currentNode;
}, [currentNode]) }, [currentNode]);
useEffect(()=> { useEffect(() => {
hasLocalNodeRef.current = hasLocalNode hasLocalNodeRef.current = hasLocalNode;
}, [hasLocalNode]) }, [hasLocalNode]);
const validateApiKey = useCallback(async (key, fromStartUp) => { const validateApiKey = useCallback(async (key, fromStartUp) => {
try { try {
if(!currentNodeRef.current) return if (!currentNodeRef.current) return;
const stillHasLocal = await checkIfUserHasLocalNode();
const isLocalKey = cleanUrl(key?.url) === "127.0.0.1:12391"; const isLocalKey = cleanUrl(key?.url) === "127.0.0.1:12391";
if(isLocalKey && !hasLocalNodeRef.current && !fromStartUp){ if (isLocalKey && !stillHasLocal && !fromStartUp) {
throw new Error('Please turn on your local node') throw new Error("Please turn on your local node");
} }
const isCurrentNodeLocal = cleanUrl(currentNodeRef.current?.url) === "127.0.0.1:12391"; const isCurrentNodeLocal =
if(isLocalKey && !isCurrentNodeLocal) { cleanUrl(currentNodeRef.current?.url) === "127.0.0.1:12391";
if (isLocalKey && !isCurrentNodeLocal) {
setIsValidApiKey(false); setIsValidApiKey(false);
setUseLocalNode(false); setUseLocalNode(false);
return return;
} }
let payload = {}; let payload = {};
@ -138,7 +144,7 @@ export const NotAuthenticated = ({
apikey: importedApiKeyRef.current || key?.apikey, apikey: importedApiKeyRef.current || key?.apikey,
url: currentNodeRef.current?.url, url: currentNodeRef.current?.url,
}; };
} else if(currentNodeRef.current) { } else if (currentNodeRef.current) {
payload = currentNodeRef.current; payload = currentNodeRef.current;
} }
const url = `${payload?.url}/admin/apikey/test`; const url = `${payload?.url}/admin/apikey/test`;
@ -153,7 +159,8 @@ export const NotAuthenticated = ({
// Assuming the response is in plain text and will be 'true' or 'false' // Assuming the response is in plain text and will be 'true' or 'false'
const data = await response.text(); const data = await response.text();
if (data === "true") { if (data === "true") {
window.sendMessage("setApiKey", payload) window
.sendMessage("setApiKey", payload)
.then((response) => { .then((response) => {
if (response) { if (response) {
handleSetGlobalApikey(payload); handleSetGlobalApikey(payload);
@ -165,9 +172,11 @@ export const NotAuthenticated = ({
} }
}) })
.catch((error) => { .catch((error) => {
console.error("Failed to set API key:", error.message || "An error occurred"); console.error(
"Failed to set API key:",
error.message || "An error occurred"
);
}); });
} else { } else {
setIsValidApiKey(false); setIsValidApiKey(false);
setUseLocalNode(false); setUseLocalNode(false);
@ -180,6 +189,26 @@ export const NotAuthenticated = ({
} catch (error) { } catch (error) {
setIsValidApiKey(false); setIsValidApiKey(false);
setUseLocalNode(false); setUseLocalNode(false);
if(fromStartUp){
setCurrentNode({
url: "http://127.0.0.1:12391",
});
window
.sendMessage("setApiKey", null)
.then((response) => {
if (response) {
setApiKey(null);
handleSetGlobalApikey(null);
}
})
.catch((error) => {
console.error(
"Failed to set API key:",
error.message || "An error occurred"
);
});
return
}
setInfoSnack({ setInfoSnack({
type: "error", type: "error",
message: error?.message || "Select a valid apikey", message: error?.message || "Select a valid apikey",
@ -216,7 +245,8 @@ export const NotAuthenticated = ({
setCustomNodes(nodes); setCustomNodes(nodes);
setCustomNodeToSaveIndex(null); setCustomNodeToSaveIndex(null);
if (!nodes) return; if (!nodes) return;
window.sendMessage("setCustomNodes", nodes) window
.sendMessage("setCustomNodes", nodes)
.then((response) => { .then((response) => {
if (response) { if (response) {
setMode("list"); setMode("list");
@ -226,12 +256,13 @@ export const NotAuthenticated = ({
} }
}) })
.catch((error) => { .catch((error) => {
console.error("Failed to set custom nodes:", error.message || "An error occurred"); console.error(
"Failed to set custom nodes:",
error.message || "An error occurred"
);
}); });
}; };
return ( return (
<> <>
<Spacer height="35px" /> <Spacer height="35px" />
@ -263,10 +294,9 @@ export const NotAuthenticated = ({
alignItems: "center", alignItems: "center",
}} }}
> >
<CustomButton onClick={()=> setExtstate('wallets')}> <CustomButton onClick={() => setExtstate("wallets")}>
Wallets Wallets
</CustomButton> </CustomButton>
</Box> </Box>
<Spacer height="6px" /> <Spacer height="6px" />
@ -274,7 +304,7 @@ export const NotAuthenticated = ({
sx={{ sx={{
display: "flex", display: "flex",
gap: "10px", gap: "10px",
alignItems: "center" alignItems: "center",
}} }}
> >
<CustomButton <CustomButton
@ -284,15 +314,13 @@ export const NotAuthenticated = ({
> >
Create account Create account
</CustomButton> </CustomButton>
</Box> </Box>
<Spacer height="15px" /> <Spacer height="15px" />
<Typography <Typography
sx={{ sx={{
fontSize: "12px", fontSize: "12px",
visibility: !useLocalNode && 'hidden' visibility: !useLocalNode && "hidden",
}} }}
> >
{"Using node: "} {currentNode?.url} {"Using node: "} {currentNode?.url}
@ -336,9 +364,10 @@ export const NotAuthenticated = ({
} else { } else {
setCurrentNode({ setCurrentNode({
url: "http://127.0.0.1:12391", url: "http://127.0.0.1:12391",
}) });
setUseLocalNode(false) setUseLocalNode(false);
window.sendMessage("setApiKey", null) window
.sendMessage("setApiKey", null)
.then((response) => { .then((response) => {
if (response) { if (response) {
setApiKey(null); setApiKey(null);
@ -346,17 +375,18 @@ export const NotAuthenticated = ({
} }
}) })
.catch((error) => { .catch((error) => {
console.error("Failed to set API key:", error.message || "An error occurred"); console.error(
"Failed to set API key:",
error.message || "An error occurred"
);
}); });
} }
}} }}
disabled={false} disabled={false}
defaultChecked defaultChecked
/> />
} }
label={`Use ${isLocal ? 'Local' : 'Custom'} Node`} label={`Use ${isLocal ? "Local" : "Custom"} Node`}
/> />
</Box> </Box>
{currentNode?.url === "http://127.0.0.1:12391" && ( {currentNode?.url === "http://127.0.0.1:12391" && (
@ -370,14 +400,12 @@ export const NotAuthenticated = ({
onChange={handleFileChangeApiKey} // File input handler onChange={handleFileChangeApiKey} // File input handler
/> />
</Button> </Button>
<Typography sx={{ <Typography
fontSize: '12px', sx={{
visibility: importedApiKey ? 'visible' : 'hidden' fontSize: "12px",
}}>{`api key : ${importedApiKey}`}</Typography> visibility: importedApiKey ? "visible" : "hidden",
}}
>{`api key : ${importedApiKey}`}</Typography>
</> </>
)} )}
<Button <Button
@ -391,10 +419,14 @@ export const NotAuthenticated = ({
Choose custom node Choose custom node
</Button> </Button>
</> </>
<Typography sx={{ <Typography
sx={{
color: "white", color: "white",
fontSize: '12px' fontSize: "12px",
}}>Build version: {manifestData?.version}</Typography> }}
>
Build version: {manifestData?.version}
</Typography>
</Box> </Box>
</> </>
<CustomizedSnackbars <CustomizedSnackbars
@ -421,7 +453,6 @@ export const NotAuthenticated = ({
flexDirection: "column", flexDirection: "column",
}} }}
> >
{mode === "list" && ( {mode === "list" && (
<Box <Box
sx={{ sx={{
@ -463,7 +494,8 @@ export const NotAuthenticated = ({
setMode("list"); setMode("list");
setShow(false); setShow(false);
setUseLocalNode(false); setUseLocalNode(false);
window.sendMessage("setApiKey", null) window
.sendMessage("setApiKey", null)
.then((response) => { .then((response) => {
if (response) { if (response) {
setApiKey(null); setApiKey(null);
@ -471,9 +503,11 @@ export const NotAuthenticated = ({
} }
}) })
.catch((error) => { .catch((error) => {
console.error("Failed to set API key:", error.message || "An error occurred"); console.error(
"Failed to set API key:",
error.message || "An error occurred"
);
}); });
}} }}
variant="contained" variant="contained"
> >
@ -519,7 +553,8 @@ export const NotAuthenticated = ({
setShow(false); setShow(false);
setIsValidApiKey(false); setIsValidApiKey(false);
setUseLocalNode(false); setUseLocalNode(false);
window.sendMessage("setApiKey", null) window
.sendMessage("setApiKey", null)
.then((response) => { .then((response) => {
if (response) { if (response) {
setApiKey(null); setApiKey(null);
@ -527,9 +562,11 @@ export const NotAuthenticated = ({
} }
}) })
.catch((error) => { .catch((error) => {
console.error("Failed to set API key:", error.message || "An error occurred"); console.error(
"Failed to set API key:",
error.message || "An error occurred"
);
}); });
}} }}
variant="contained" variant="contained"
> >
@ -554,7 +591,6 @@ export const NotAuthenticated = ({
...(customNodes || []), ...(customNodes || []),
].filter((item) => item?.url !== node?.url); ].filter((item) => item?.url !== node?.url);
saveCustomNodes(nodesToSave); saveCustomNodes(nodesToSave);
}} }}
variant="contained" variant="contained"
@ -592,9 +628,7 @@ export const NotAuthenticated = ({
/> />
</Box> </Box>
)} )}
</Box> </Box>
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
{mode === "list" && ( {mode === "list" && (