From 9cdd10eb0ed0b70f277d6adfbdf68b9ecde5b3cd Mon Sep 17 00:00:00 2001 From: Dhananjay Balan Date: Thu, 9 Nov 2023 22:29:32 +0100 Subject: [PATCH] [nix] make it build --- .envrc | 2 +- app/Main.hs | 19 ++++++++++++--- flake.lock | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 44 +++++++++++++++++++++++++++++++++++ quotes-api.cabal | 14 +++++------ shell.nix | 23 ------------------- 6 files changed, 128 insertions(+), 34 deletions(-) create mode 100644 flake.lock create mode 100644 flake.nix delete mode 100644 shell.nix diff --git a/.envrc b/.envrc index 1d953f4..3550a30 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use nix +use flake diff --git a/app/Main.hs b/app/Main.hs index 8343a8f..d231d6f 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -11,8 +11,7 @@ import Servant import Control.Monad.IO.Class import Servant.HTML.Blaze import qualified Data.Text as T -import Data.Text.Encoding (decodeUtf8) -import Crypto.Argon2 +import Data.Text.Encoding (decodeUtf8, encodeUtf8) import Data.Text.Short (fromText, ShortText) import Data.ByteString (ByteString) @@ -36,7 +35,7 @@ type API = Get '[HTML] Quote api :: Proxy API api = Proxy - +{- checkBasicAuth :: T.Text -> ShortText -> BasicAuthCheck User checkBasicAuth user passhash = BasicAuthCheck $ \authData -> let u = decodeUtf8 (basicAuthUsername authData) @@ -48,6 +47,20 @@ checkBasicAuth user passhash = BasicAuthCheck $ \authData -> Argon2Ok -> return $ Authorized $ User u p _ -> return Unauthorized +-} +checkBasicAuth :: T.Text -> ShortText -> BasicAuthCheck User +checkBasicAuth _ _ = BasicAuthCheck $ \_ -> return NoSuchUser + +initDb :: FilePath -> IO () +initDb dbFile = withConnection dbFile $ \conn -> + execute_ conn + [sql|CREATE TABLE IF NOT EXISTS quotes ( quote text non null + , author text + , title text + , page text + , chapter text + , created_on integer);|] + -- | TODO: readerT server :: FilePath -> Server API server dbf = randomQuote dbf diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..a92abb0 --- /dev/null +++ b/flake.lock @@ -0,0 +1,60 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1699562885, + "narHash": "sha256-fb7RDv0ePGzayhGvkBh9NrilU3pCecgfbbTNPHprRfg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "97b0ae26f7c8a1682b5437a64edcd73ab1798c9b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..ed753d4 --- /dev/null +++ b/flake.nix @@ -0,0 +1,44 @@ +# SPDX-FileCopyrightText: 2021 Serokell +# +# SPDX-License-Identifier: CC0-1.0 + +{ + description = "quotes-api"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + haskellPackages = pkgs.haskellPackages; + + jailbreakUnbreak = pkg: + pkgs.haskell.lib.doJailbreak (pkg.overrideAttrs (_: { meta = { }; })); + + # DON'T FORGET TO PUT YOUR PACKAGE NAME HERE, REMOVING `throw` + packageName = "quptes-api"; + in { + packages.${packageName} = haskellPackages.callCabal2nix packageName self + rec { + # Dependency overrides go here + }; + + packages.default = self.packages.${system}.${packageName}; + defaultPackage = self.packages.${system}.default; + + devShells.default = pkgs.mkShell { + buildInputs = with pkgs; [ + haskellPackages.haskell-language-server # you must build it with your ghc to work + ghcid + cabal-install + ]; + inputsFrom = + map (__getAttr "env") (__attrValues self.packages.${system}); + }; + devShell = self.devShells.${system}.default; + }); +} diff --git a/quotes-api.cabal b/quotes-api.cabal index 5311e7a..573c56f 100644 --- a/quotes-api.cabal +++ b/quotes-api.cabal @@ -71,7 +71,7 @@ library -- other-extensions: -- Other library packages from which modules are imported. - build-depends: base ^>=4.16.3.0, + build-depends: base, text, aeson, deriving-aeson, @@ -104,10 +104,10 @@ executable quotes-api -- Other library packages from which modules are imported. build-depends: - base ^>=4.16.3.0, - sqlite-simple ^>=0.4.18.0, - text ^>=1.2.5.0, - servant-server ^>=0.19.1, + base, + sqlite-simple, + text, + servant-server, wai, warp, aeson, @@ -115,7 +115,7 @@ executable quotes-api quotes-api, servant-blaze, optparse-applicative, - argon2 >= 1.3.0, + -- argon2, text-short, bytestring, QuickCheck, @@ -186,5 +186,5 @@ test-suite quotes-api-test -- Test dependencies. build-depends: - base ^>=4.16.3.0, + base, quotes-api diff --git a/shell.nix b/shell.nix deleted file mode 100644 index c1c4ac5..0000000 --- a/shell.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ pkgs ? import {} -}: - -pkgs.stdenv.mkDerivation rec { - name = "quotes-api"; - - nativeBuildInputs = [ - ]; - - buildInputs = [ - pkgs.zlib - pkgs.ghc - pkgs.cabal-install - pkgs.haskellPackages.ghcid - pkgs.haskellPackages.cabal-plan - pkgs.haskellPackages.haskell-language-server - ]; - - shellHook = '' - export LD_LIBRARY_PATH=${pkgs.lib.makeLibraryPath buildInputs}:$LD_LIBRARY_PATH - export LANG=en_US.UTF-8 - ''; -}