diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b8a40fc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +FROM heroku/heroku:18-build + +# Update system and install stack +ENV DEBIAN_FRONTEND noninteractive +ENV LANG C.UTF-8 +ENV LC_ALL C.UTF-8 +RUN apt-get update \ + && apt-get install sudo haskell-stack \ + && apt-get clean + +# Create user "testuser" +RUN useradd -m -d /home/testuser -s /bin/bash testuser +RUN mkdir -p /etc/sudoers.d \ + && echo "testuser ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/testuser \ + && chmod 0440 /etc/sudoers.d/testuser +ENV HOME /home/testuser +WORKDIR /home/testuser +USER testuser +COPY --chown=testuser package.yaml app +COPY --chown=testuser stack.yaml app + +# Update stack and cache dependencies and app in stages +ENV PATH="/home/testuser/.local/bin:${PATH}" +RUN stack upgrade +RUN cd app && stack setup +RUN cd app && stack build --only-dependencies Cabal +RUN cd app && stack build --only-dependencies yesod + +COPY --chown=testuser . app +RUN cd app && stack install --flag yesod-auth-oauth2:example +WORKDIR /home/testuser/app + +CMD yesod-auth-oauth2-example diff --git a/example/Main.hs b/example/Main.hs index 9d48640..fa4eede 100644 --- a/example/Main.hs +++ b/example/Main.hs @@ -26,13 +26,13 @@ import Data.Aeson.Encode.Pretty import Data.ByteString.Lazy (fromStrict, toStrict) import qualified Data.Map as M import Data.Maybe (fromJust) -import Data.Text (Text) +import Data.Text (Text, pack) import qualified Data.Text as T import Data.Text.Encoding (decodeUtf8) import LoadEnv import Network.HTTP.Conduit import Network.Wai.Handler.Warp (runEnv) -import System.Environment (getEnv) +import System.Environment (getEnv, lookupEnv) import Yesod import Yesod.Auth import Yesod.Auth.OAuth2.BattleNet @@ -50,6 +50,7 @@ import Yesod.Auth.OAuth2.Upcase data App = App { appHttpManager :: Manager , appAuthPlugins :: [AuthPlugin App] + , appAppRoot :: Text } mkYesod "App" [parseRoutes| @@ -59,7 +60,7 @@ mkYesod "App" [parseRoutes| instance Yesod App where -- see https://github.com/thoughtbot/yesod-auth-oauth2/issues/87 - approot = ApprootStatic "http://localhost:3000" + approot = ApprootMaster appAppRoot instance YesodAuth App where type AuthId App = Text @@ -146,6 +147,12 @@ mkFoundation = do , loadPlugin oauth2Upcase "UPCASE" ] + appAppRoot <- do + root <- lookupEnv "APPROOT" + return $ pack $ case root of + Nothing -> "http://localhost:3000" + Just url -> url + return App {..} where loadPlugin f prefix = do diff --git a/heroku.yml b/heroku.yml new file mode 100644 index 0000000..eb5034a --- /dev/null +++ b/heroku.yml @@ -0,0 +1,5 @@ +build: + docker: + web: Dockerfile +run: + web: yesod-auth-oauth2-example