import React, { useEffect, useState } from "react"; import { useTranslation, Trans } from "react-i18next"; import * as styles from "./LinuxPermissionsTool.module.scss" import { Helmet } from "react-helmet"; const LinuxPermissionsTool = () => { const { t } = useTranslation(); let [octal, setOctal] = useState("0766"); let [umask, setUmask] = useState(""); let [octet1, setOctet1] = useState(0) let [octet2, setOctet2] = useState(0) let [octet3, setOctet3] = useState(0) let [octet4, setOctet4] = useState(0) let [input, setInput] = useState<"octal"|"checkbox"|"umask">("octal") useEffect(() => { if(input === "octal") { let digits = [0, 0, 0, 0]; const baseOffset = 4 - octal.length; for(let i = 0; i < digits.length && i+baseOffset < 4; i++) { digits[i+baseOffset] = parseInt(octal.charAt(i), 8) } setUmask(`0${digits[1]^0b111}${digits[2]^0b111}${digits[3]^0b111}`) setOctet1(digits[0]) setOctet2(digits[1]) setOctet3(digits[2]) setOctet4(digits[3]) } if(input === "umask") { let digits = [0, 0, 0, 0]; const baseOffset = 4 - umask.length; for(let i = 0; i < digits.length && i+baseOffset < 4; i++) { digits[i+baseOffset] = parseInt(umask.charAt(i), 8) } setOctal(`0${digits[1]^0b111}${digits[2]^0b111}${digits[3]^0b111}`) setOctet1(digits[0]^0b111) setOctet2(digits[1]^0b111) setOctet3(digits[2]^0b111) setOctet4(digits[3]^0b111) } if(input === "checkbox") { setOctal(`${octet1}${octet2}${octet3}${octet4}`) setUmask(`0${octet2^0b111}${octet3^0b111}${octet4^0b111}`) } }, [octal, input, octet1, octet2, octet3, octet4, umask]) return (
{t("tools.encodings.linux_permissions.title")} | {t("site.title")}

{t("tools.encodings.linux_permissions.title")}

}} />

{setOctal(e.currentTarget.value); setInput("octal")}} value={octal} />
Flags User Group Other
U G S R W X R W X R W X
{setOctet1(prev => prev ^ 0b100); setInput("checkbox")}}/> {setOctet1(prev => prev ^ 0b010); setInput("checkbox")}}/> {setOctet1(prev => prev ^ 0b001); setInput("checkbox")}}/> {setOctet2(prev => prev ^ 0b100); setInput("checkbox")}}/> {setOctet2(prev => prev ^ 0b010); setInput("checkbox")}}/> {setOctet2(prev => prev ^ 0b001); setInput("checkbox")}}/> {setOctet3(prev => prev ^ 0b100); setInput("checkbox")}}/> {setOctet3(prev => prev ^ 0b010); setInput("checkbox")}}/> {setOctet3(prev => prev ^ 0b001); setInput("checkbox")}}/> {setOctet4(prev => prev ^ 0b100); setInput("checkbox")}}/> {setOctet4(prev => prev ^ 0b010); setInput("checkbox")}}/> {setOctet4(prev => prev ^ 0b001); setInput("checkbox")}}/>
{setUmask(e.currentTarget.value); setInput("umask")}} value={umask} />
) } export default LinuxPermissionsTool;