added URI encoding

This commit is contained in:
Stefan Friese 2022-09-19 23:11:13 +02:00
parent 3d7f981bde
commit 6d37b57b97
3 changed files with 36 additions and 3 deletions

View File

@ -17,6 +17,7 @@ import qualified Codec.Binary.Base91 as B91
import qualified Codec.Binary.Base85 as B85 import qualified Codec.Binary.Base85 as B85
import qualified Codec.Binary.Base64 as B64 import qualified Codec.Binary.Base64 as B64
import qualified Codec.Binary.Base64Url as B64U import qualified Codec.Binary.Base64Url as B64U
import qualified Network.HTTP.Base as HB
import qualified Data.Word.Base62 as B62 import qualified Data.Word.Base62 as B62
import qualified Haskoin.Address.Base58 as B58 import qualified Haskoin.Address.Base58 as B58
import qualified Codec.Binary.Base32 as B32 import qualified Codec.Binary.Base32 as B32
@ -36,6 +37,7 @@ data Based = Decode {
b85 :: Bool, b85 :: Bool,
b64 :: Bool, b64 :: Bool,
b64url :: Bool, b64url :: Bool,
url :: Bool,
b62 :: Bool, b62 :: Bool,
b58 :: Bool, b58 :: Bool,
b32 :: Bool, b32 :: Bool,
@ -53,6 +55,7 @@ data Based = Decode {
b85 :: Bool, b85 :: Bool,
b64 :: Bool, b64 :: Bool,
b64url :: Bool, b64url :: Bool,
url :: Bool,
b62 :: Bool, b62 :: Bool,
b58 :: Bool, b58 :: Bool,
b32 :: Bool, b32 :: Bool,
@ -86,6 +89,8 @@ dec64 = C.unpack . U.fromRight . B64.decode . BSU.fromString
enc64 = C.unpack . B64.encode . BSU.fromString enc64 = C.unpack . B64.encode . BSU.fromString
dec64url = C.unpack . U.fromRight . B64U.decode . BSU.fromString dec64url = C.unpack . U.fromRight . B64U.decode . BSU.fromString
enc64url = C.unpack . B64U.encode . BSU.fromString enc64url = C.unpack . B64U.encode . BSU.fromString
decurl = HB.urlDecode
encurl = HB.urlEncode
dec62 = show . fromJust . B62.decode128 . (Bytes.fromByteString . BSU.fromString) dec62 = show . fromJust . B62.decode128 . (Bytes.fromByteString . BSU.fromString)
enc62 = C.unpack . BSU.fromString. Bytes.toLatinString . (Bytes.fromByteArray . ( B62.encode64 . (intToWord64 . decimalStringToInt))) enc62 = C.unpack . BSU.fromString. Bytes.toLatinString . (Bytes.fromByteArray . ( B62.encode64 . (intToWord64 . decimalStringToInt)))
dec58 = C.unpack . fromJust . B58.decodeBase58 . pack dec58 = C.unpack . fromJust . B58.decodeBase58 . pack
@ -117,6 +122,8 @@ optionHandler Decode{b64=True} = dec64
optionHandler Encode{b64=True} = enc64 optionHandler Encode{b64=True} = enc64
optionHandler Decode{b64url=True} = dec64url optionHandler Decode{b64url=True} = dec64url
optionHandler Encode{b64url=True} = enc64url optionHandler Encode{b64url=True} = enc64url
optionHandler Decode{url=True} = decurl
optionHandler Encode{url=True} = encurl
optionHandler Decode{b62=True} = dec62 optionHandler Decode{b62=True} = dec62
optionHandler Encode{b62=True} = enc62 optionHandler Encode{b62=True} = enc62
optionHandler Decode{b58=True} = dec58 optionHandler Decode{b58=True} = dec58
@ -145,6 +152,7 @@ decode_ = Decode {
b85 = def &= help "decode base85", b85 = def &= help "decode base85",
b64 = def &= help "decode base64", b64 = def &= help "decode base64",
b64url = def &= help "decode base64Url", b64url = def &= help "decode base64Url",
url = def &= help "decode URI",
b62 = def &= help "decode base62", b62 = def &= help "decode base62",
b58 = def &= help "decode base58", b58 = def &= help "decode base58",
b32 = def &= help "decode base32", b32 = def &= help "decode base32",
@ -163,6 +171,7 @@ encode_ = Encode {
b85 = def &= help "encode base85", b85 = def &= help "encode base85",
b64 = def &= help "encode base64", b64 = def &= help "encode base64",
b64url = def &= help "encode base64Url", b64url = def &= help "encode base64Url",
url = def &= help "encode URI",
b62 = def &= help "encode base62", b62 = def &= help "encode base62",
b58 = def &= help "encode base58", b58 = def &= help "encode base58",
b32 = def &= help "encode base32", b32 = def &= help "encode base32",

View File

@ -2,9 +2,10 @@
A commandline tool that lets you encode and decode most of the bases. 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 ```sh
cabal v2-build --enable-executable-static -O2 cabal v2-build --enable-executable-static -O2
strip --strip-all based
``` ```
## Compilation ## Compilation
@ -32,4 +33,27 @@ echo '>OwJh>}AQ;r@@Y?FF' | based --b91
Hello, World! 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

View File

@ -3,7 +3,7 @@ cabal-version: 2.4
-- For further documentation, see http://haskell.org/cabal/users-guide/ -- For further documentation, see http://haskell.org/cabal/users-guide/
name: based name: based
version: 0.4.0.0 version: 0.4.1.0
-- synopsis: -- synopsis:
-- description: -- description:
-- bug-reports: -- bug-reports:
@ -27,6 +27,6 @@ executable based
main-is: Main.hs main-is: Main.hs
other-modules: MyLib other-modules: MyLib
-- other-extensions: -- 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: -- hs-source-dirs:
default-language: Haskell2010 default-language: Haskell2010