100 lines
3.1 KiB
TypeScript
100 lines
3.1 KiB
TypeScript
import ReactDOM from 'react-dom';
|
|
import PageForm from "./Form";
|
|
import Pages from "./List";
|
|
import Prompt from "./Prompt";
|
|
import {useState} from "react";
|
|
import * as React from 'react';
|
|
import {Divider, Paper} from "@mui/material";
|
|
import {EncryptStorage} from "storage-encryption";
|
|
|
|
interface List {
|
|
id: string;
|
|
date: string;
|
|
}
|
|
|
|
const app = document.getElementById('app');
|
|
const word = "shikiryu";
|
|
|
|
let sessionPassphrase = sessionStorage.getItem("key");
|
|
let pages: List[] = [];
|
|
let getPageContentUrl,
|
|
postUrl,
|
|
removeUrl,
|
|
checkword,
|
|
csrf = "";
|
|
|
|
if (app) {
|
|
getPageContentUrl = "" + app.getAttribute('data-url');
|
|
pages = JSON.parse("" + app.getAttribute('data-list'));
|
|
postUrl = "" + app.getAttribute('data-post');
|
|
removeUrl = "" + app.getAttribute('data-remove');
|
|
csrf = "" + app.getAttribute('data-csrf');
|
|
checkword = "" + app.getAttribute('data-checkword');
|
|
ReactDOM.render(<App/>, app);
|
|
}
|
|
|
|
export default function App() {
|
|
const [listPages, setListPages] = useState(pages);
|
|
const [passphrase, setPassphrase] = useState(sessionPassphrase);
|
|
|
|
const updatePassphrase = function(newPassphrase) {
|
|
setPassphrase(newPassphrase);
|
|
return result(checkPassphrase());
|
|
};
|
|
|
|
const checkPassphrase = function() {
|
|
if (checkword === "" || checkword === null || checkword === "null") {
|
|
console.error("checkword is empty !");
|
|
// return (<Redirect to="/first" />);
|
|
return false; // TODO redirect to first
|
|
}
|
|
localStorage.setItem("checkword", checkword);
|
|
|
|
const key = ""+sessionStorage.getItem("key");
|
|
if (key === "" || key === null || key === "null") {
|
|
console.error("key is empty 🤔 !");
|
|
// return (<Redirect to="/first" />);
|
|
return false; // TODO redirect to first ?
|
|
}
|
|
let encryptStorage = new EncryptStorage(key);
|
|
const decrypted_word = encryptStorage.decrypt("checkword");
|
|
|
|
return decrypted_word === word;
|
|
};
|
|
|
|
const result = function(correct) {
|
|
let content;
|
|
if (correct === true) {
|
|
content = <div className="col-md-8">
|
|
<Pages
|
|
pages={listPages}
|
|
url={getPageContentUrl}
|
|
passphrase={passphrase}
|
|
setPassphrase={setPassphrase}
|
|
csrf={csrf}
|
|
removeUrl={removeUrl}/>
|
|
<Divider/>
|
|
<PageForm setListPages={setListPages} csrf={csrf} url={postUrl} passphrase={passphrase}/>
|
|
</div>
|
|
} else if (correct === false) {
|
|
content = <div className="col-md-8">
|
|
<Prompt open={true} setOpen={updatePassphrase}/>
|
|
</div>;
|
|
} else {
|
|
return correct;
|
|
}
|
|
|
|
return (
|
|
<div>
|
|
<div className="container">
|
|
<div className="row justify-content-center">
|
|
{ content }
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return result(checkPassphrase());
|
|
}
|