diff --git a/Setup.hs b/Setup.hs new file mode 100644 index 0000000..9a994af --- /dev/null +++ b/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/app/Main.hs b/app/Main.hs new file mode 100644 index 0000000..0fc6909 --- /dev/null +++ b/app/Main.hs @@ -0,0 +1,7 @@ +module Main where + +import Protolude +import Lib + +main :: IO () +main = someFunc diff --git a/minio-client.cabal b/minio-client.cabal new file mode 100644 index 0000000..6e252d8 --- /dev/null +++ b/minio-client.cabal @@ -0,0 +1,52 @@ +name: minio-client +version: 0.1.0.0 +synopsis: Initial project template from stack +description: Please see README.md +homepage: https://github.com/donatello/minio-client#readme +license: BSD3 +license-file: LICENSE +author: Aditya Manthramurthy +maintainer: aditya.mmy@gmail.com +copyright: GPLv3 +category: Network, AWS, Object Storage +build-type: Simple +-- extra-source-files: +cabal-version: >=1.10 + +library + hs-source-dirs: src + ghc-options: -Wall + exposed-modules: Lib + other-modules: Lib.Prelude + build-depends: base >= 4.7 && < 5 + , protolude >= 0.1.6 && < 0.2 + , bytestring + , cryptonite + , text + default-language: Haskell2010 + default-extensions: OverloadedStrings, NoImplicitPrelude + +executable minio-client-exe + hs-source-dirs: app + main-is: Main.hs + ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N + build-depends: base + , minio-client + , protolude >= 0.1.6 && < 0.2 + default-language: Haskell2010 + default-extensions: OverloadedStrings, NoImplicitPrelude + +test-suite minio-client-test + type: exitcode-stdio-1.0 + hs-source-dirs: test + main-is: Spec.hs + build-depends: base + , minio-client + , protolude >= 0.1.6 && < 0.2 + ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N + default-language: Haskell2010 + default-extensions: OverloadedStrings, NoImplicitPrelude + +source-repository head + type: git + location: https://github.com/donatello/minio-client diff --git a/src/Lib.hs b/src/Lib.hs new file mode 100644 index 0000000..31dee08 --- /dev/null +++ b/src/Lib.hs @@ -0,0 +1,55 @@ +{-| +Module : Lib +Description : Lib's main module + +This is a haddock comment describing your library +For more information on how to write Haddock comments check the user guide: + +-} +module Lib + ( someFunc + , hmacSha256 + , sha256Hash + ) where + +import Lib.Prelude + +import Crypto.Hash (SHA256, Digest, hash) +import Crypto.MAC.HMAC (hmac, HMAC(hmacGetDigest)) + +-- | Prints someFunc +-- +-- >>> someFunc 10 +-- someFunc +someFunc :: IO () +someFunc = putStrLn ("someFunc" :: Text) + +hmacSha256 :: ByteString -> ByteString -> ByteString +hmacSha256 key message = + show (hmacGetDigest (hmac key message) :: Digest SHA256) + +sha256Hash :: ByteString -> ByteString +sha256Hash payload = show (hash payload :: Digest SHA256) + +{- + + +public static String UriEncode(CharSequence input, boolean encodeSlash) { + StringBuilder result = new StringBuilder(); + for (int i = 0; i < input.length(); i++) { + char ch = input.charAt(i); + if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || + (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' || ch == '~' || ch == '.') { + result.append(ch); + } else if (ch == '/') { + result.append(encodeSlash ? "%2F" : ch); + } else { + result.append(toHexUTF8(ch)); + } + } + return result.toString(); + } +ch 65536 -> %10000 +-} +uriEncode :: Text -> Bool -> ByteString +uriEncode payload encodeSlash = \ No newline at end of file diff --git a/src/Lib/Prelude.hs b/src/Lib/Prelude.hs new file mode 100644 index 0000000..3524456 --- /dev/null +++ b/src/Lib/Prelude.hs @@ -0,0 +1,11 @@ +{- +Welcome to your custom Prelude +Export here everything that should always be in your library scope +For more info on what is exported by Protolude check: +https://github.com/sdiehl/protolude/blob/master/Symbols.md +-} +module Lib.Prelude + ( module Exports + ) where + +import Protolude as Exports diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000..93d2721 --- /dev/null +++ b/stack.yaml @@ -0,0 +1,66 @@ +# This file was automatically generated by 'stack init' +# +# Some commonly used options have been documented as comments in this file. +# For advanced use and comprehensive documentation of the format, please see: +# http://docs.haskellstack.org/en/stable/yaml_configuration/ + +# Resolver to choose a 'specific' stackage snapshot or a compiler version. +# A snapshot resolver dictates the compiler version and the set of packages +# to be used for project dependencies. For example: +# +# resolver: lts-3.5 +# resolver: nightly-2015-09-21 +# resolver: ghc-7.10.2 +# resolver: ghcjs-0.1.0_ghc-7.10.2 +# resolver: +# name: custom-snapshot +# location: "./custom-snapshot.yaml" +resolver: lts-6.15 + +# User packages to be built. +# Various formats can be used as shown in the example below. +# +# packages: +# - some-directory +# - https://example.com/foo/bar/baz-0.0.2.tar.gz +# - location: +# git: https://github.com/commercialhaskell/stack.git +# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a +# - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a +# extra-dep: true +# subdirs: +# - auto-update +# - wai +# +# A package marked 'extra-dep: true' will only be built if demanded by a +# non-dependency (i.e. a user package), and its test suites and benchmarks +# will not be run. This is useful for tweaking upstream packages. +packages: +- '.' +# Dependency packages to be pulled from upstream that are not in the resolver +# (e.g., acme-missiles-0.3) +extra-deps: [] + +# Override default flag values for local packages and extra-deps +flags: {} + +# Extra package databases containing global packages +extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true +# +# Require a specific version of stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: ">=1.1" +# +# Override the architecture used by stack, especially useful on Windows +# arch: i386 +# arch: x86_64 +# +# Extra directories used by stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] +# +# Allow a newer minor version of GHC than the snapshot specifies +# compiler-check: newer-minor \ No newline at end of file diff --git a/test/Spec.hs b/test/Spec.hs new file mode 100644 index 0000000..5b9ce20 --- /dev/null +++ b/test/Spec.hs @@ -0,0 +1,4 @@ +import Protolude + +main :: IO () +main = putStrLn ("Test suite not yet implemented" :: Text)