diff --git a/.gitignore b/.gitignore index 4be563e..32b9661 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,7 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts -.syncignore \ No newline at end of file +.syncignore + +#log +app.log \ No newline at end of file diff --git a/app/[locale]/tools/base64/page.tsx b/app/[locale]/tools/base64/page.tsx new file mode 100644 index 0000000..8cae272 --- /dev/null +++ b/app/[locale]/tools/base64/page.tsx @@ -0,0 +1,82 @@ +"use client"; + +import Switcher from "@/components/switcher"; +import Notice from "@/components/tools/notice"; +import base64ToHex from "@/lib/base64ToHex"; +import copyToClipboard from "@/lib/copy"; +import normalizeHex from "@/lib/normalizeHex"; +import { validBase64 } from "@/lib/onesearch/baseCheck"; +import { useTranslations } from "next-intl"; +import { useEffect, useState } from "react"; +import { utoa, atou } from "unicode-encode"; + +export default function Base64() { + const t = useTranslations("tools"); + const [mode, setMode] = useState("Encode"); + const [message, setMessage] = useState(""); + const [messageResult, setMessageResult] = useState(""); + const [isHex, setHex] = useState(false); + const [info, setInfo] = useState(""); + const [type, setType] = useState(""); + useEffect(() => { + setType(""); + setInfo(""); + setHex(false); + if (mode == "Encode") { + setMessageResult(utoa(message)); + } else { + if (validBase64(message)) { + try { + setMessageResult(atou(message)); + } catch (e) { + setMessageResult(normalizeHex(base64ToHex(message))); + setHex(true); + setType("info"); + setInfo("Showing HEX result."); + } + } else if (message.trim() !== "") { + setMessageResult(""); + setType("warning"); + setInfo("Invalid Base64."); + } else { + setMessageResult(""); + } + } + }, [mode, message]); + return ( +
+

{t("base64.title")}

+ +