diff --git a/.gitignore b/.gitignore index c368d45..3539501 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .stack-work/ -*~ \ No newline at end of file +*~ +database/* \ No newline at end of file diff --git a/app/Main.hs b/app/Main.hs index d970085..c7441db 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -13,6 +13,7 @@ main :: IO () main = do port <- determinePort putStrLn $ "Try: http://localhost:" ++ show port ++ "/auth?scope=ID%20Profile&client_id=42&response_type=code&redirect_uri=http:%2F%2Flocalhost:0000%2F" + initDB runMockServer @User @(M.Map T.Text T.Text) port where determinePort :: IO Int diff --git a/flake.nix b/flake.nix index 9d98e99..1f6a556 100644 --- a/flake.nix +++ b/flake.nix @@ -32,6 +32,7 @@ devShells.${system}.default = pkgs.mkShell { buildInputs = buildInputs; LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs; + shellHook = "./mkDB.sh"; }; }; } diff --git a/hba_file b/hba_file new file mode 100644 index 0000000..a5e9c72 --- /dev/null +++ b/hba_file @@ -0,0 +1 @@ +local all all trust \ No newline at end of file diff --git a/mkDB.sh b/mkDB.sh new file mode 100644 index 0000000..86c0988 --- /dev/null +++ b/mkDB.sh @@ -0,0 +1,28 @@ +#!/bin/sh -e + +export OAUTH2_SERVER_PORT=9443 +export OAUTH2_DB_PORT=9444 + +tmpdir=./database + +if [ ! -d "${tmpdir}" ]; then + mkdir ${tmpdir} +fi + +pgDir=$(mktemp -d --tmpdir="${tmpdir}" postgresql.XXXXXX) +pgSockDir=$(mktemp -d --tmpdir="${tmpdir}" postgresql.sock.XXXXXX) +pgLogFile=$(mktemp --tmpdir="${tmpdir}" postgresql.XXXXXX.log) + +initdb --no-locale -D "${pgDir}" +pg_ctl start -D "${pgDir}" -l "${pgLogFile}" -w -o "-k ${pgSockDir} -c listen_addresses=''' -c hba_file='hba_file' -p ${OAUTH2_DB_PORT} -h localhost -c unix_socket_permissions=0700 -c max_connections=10 -c session_preload_libraries=auto_explain -c auto_explain.log_min_duration=100ms" +psql -h "${pgSockDir}" -f ./schema.sql postgres + +printf "Postgres logfile is %s\nPostgres socket directory is %s\n" "${pgLogFile}" "${pgSockDir}" + +export PGHOST="${pgSockDir}" +export PGLOG="${pgLogFile}" + +zsh + +pg_ctl stop -D "${pgDir}" +rm -rvf "${pgDir}" "${pgSockDir}" "${pgLogFile}" diff --git a/schema.sql b/schema.sql new file mode 100644 index 0000000..623a741 --- /dev/null +++ b/schema.sql @@ -0,0 +1,3 @@ +CREATE USER oauth2mock WITH SUPERUSER; +CREATE DATABASE test_users; +GRANT ALL ON DATABASE test_users TO oauth2mock;