From 6d37b57b97a0de7b3849992d431e8891cdc7f584 Mon Sep 17 00:00:00 2001 From: whx Date: Mon, 19 Sep 2022 23:11:13 +0200 Subject: [PATCH] added URI encoding --- Main.hs | 9 +++++++++ README.md | 26 +++++++++++++++++++++++++- based.cabal | 4 ++-- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/Main.hs b/Main.hs index 9413dc1..40f6e5b 100644 --- a/Main.hs +++ b/Main.hs @@ -17,6 +17,7 @@ import qualified Codec.Binary.Base91 as B91 import qualified Codec.Binary.Base85 as B85 import qualified Codec.Binary.Base64 as B64 import qualified Codec.Binary.Base64Url as B64U +import qualified Network.HTTP.Base as HB import qualified Data.Word.Base62 as B62 import qualified Haskoin.Address.Base58 as B58 import qualified Codec.Binary.Base32 as B32 @@ -36,6 +37,7 @@ data Based = Decode { b85 :: Bool, b64 :: Bool, b64url :: Bool, + url :: Bool, b62 :: Bool, b58 :: Bool, b32 :: Bool, @@ -53,6 +55,7 @@ data Based = Decode { b85 :: Bool, b64 :: Bool, b64url :: Bool, + url :: Bool, b62 :: Bool, b58 :: Bool, b32 :: Bool, @@ -86,6 +89,8 @@ dec64 = C.unpack . U.fromRight . B64.decode . BSU.fromString enc64 = C.unpack . B64.encode . BSU.fromString dec64url = C.unpack . U.fromRight . B64U.decode . BSU.fromString enc64url = C.unpack . B64U.encode . BSU.fromString +decurl = HB.urlDecode +encurl = HB.urlEncode dec62 = show . fromJust . B62.decode128 . (Bytes.fromByteString . BSU.fromString) enc62 = C.unpack . BSU.fromString. Bytes.toLatinString . (Bytes.fromByteArray . ( B62.encode64 . (intToWord64 . decimalStringToInt))) dec58 = C.unpack . fromJust . B58.decodeBase58 . pack @@ -117,6 +122,8 @@ optionHandler Decode{b64=True} = dec64 optionHandler Encode{b64=True} = enc64 optionHandler Decode{b64url=True} = dec64url optionHandler Encode{b64url=True} = enc64url +optionHandler Decode{url=True} = decurl +optionHandler Encode{url=True} = encurl optionHandler Decode{b62=True} = dec62 optionHandler Encode{b62=True} = enc62 optionHandler Decode{b58=True} = dec58 @@ -145,6 +152,7 @@ decode_ = Decode { b85 = def &= help "decode base85", b64 = def &= help "decode base64", b64url = def &= help "decode base64Url", + url = def &= help "decode URI", b62 = def &= help "decode base62", b58 = def &= help "decode base58", b32 = def &= help "decode base32", @@ -163,6 +171,7 @@ encode_ = Encode { b85 = def &= help "encode base85", b64 = def &= help "encode base64", b64url = def &= help "encode base64Url", + url = def &= help "encode URI", b62 = def &= help "encode base62", b58 = def &= help "encode base58", b32 = def &= help "encode base32", diff --git a/README.md b/README.md index aa94c56..a0c561d 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,10 @@ A commandline tool that lets you encode and decode most of the bases. -Release binary is statically linked via +Release binary is statically linked and stripped via ```sh cabal v2-build --enable-executable-static -O2 +strip --strip-all based ``` ## Compilation @@ -32,4 +33,27 @@ echo '>OwJh>}AQ;r@@Y?FF' | based --b91 Hello, World! ``` +## What is Transcoded? +The following are the supported encodings +* Base91 +* Base85 +* Base64 +* Base64url +* URI Encoding +* Base62 +* Base58 +* Base32 +* Quoted-Printable +* UU Encoding +* XX Encoding +* yEncoding +* Char to Hex and vice versa +* Decimal to Hex and vice versa +* Oktal to Hex +* Binary to Hex and vice versa + qp + uu + xx + yenc + diff --git a/based.cabal b/based.cabal index 324ff25..f9baf0b 100644 --- a/based.cabal +++ b/based.cabal @@ -3,7 +3,7 @@ cabal-version: 2.4 -- For further documentation, see http://haskell.org/cabal/users-guide/ name: based -version: 0.4.0.0 +version: 0.4.1.0 -- synopsis: -- description: -- bug-reports: @@ -27,6 +27,6 @@ executable based main-is: Main.hs other-modules: MyLib -- other-extensions: - build-depends: base ^>=4.13.0.0, based, cmdargs, sandi, base62, base91, utf8-string, bytestring, byteslice, either-unwrap, text-show, hxt,haskoin-core, text, bytes, cborg, text-latin1 + build-depends: base ^>=4.13.0.0, based, cmdargs, sandi, base62, base91, utf8-string, bytestring, byteslice, either-unwrap, text-show, hxt,haskoin-core, text, bytes, cborg, text-latin1,HTTP -- hs-source-dirs: default-language: Haskell2010