From 3ca01976a41dcc6283f646962bf764be2b1fc285 Mon Sep 17 00:00:00 2001 From: rakeshkky Date: Mon, 17 Dec 2018 17:55:14 +0530 Subject: [PATCH 1/2] add consolePath in console.html template --- server/src-lib/Hasura/Server/App.hs | 44 ++++++++++++++++++----------- server/src-rsr/console.html | 1 + 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/server/src-lib/Hasura/Server/App.hs b/server/src-lib/Hasura/Server/App.hs index 30af0c3f5dc42..23dde4eed3dde 100644 --- a/server/src-lib/Hasura/Server/App.hs +++ b/server/src-lib/Hasura/Server/App.hs @@ -58,16 +58,20 @@ isAccessKeySet :: AuthMode -> T.Text isAccessKeySet AMNoAuth = "false" isAccessKeySet _ = "true" -mkConsoleHTML :: AuthMode -> IO T.Text -mkConsoleHTML authMode = - bool (initErrExit errMsg) (return res) (null errs) +mkConsoleHTML :: T.Text -> AuthMode -> Either String T.Text +mkConsoleHTML path authMode = + bool (Left errMsg) (Right res) $ null errs where (errs, res) = M.checkedSubstitute consoleTmplt $ object [ "version" .= consoleVersion , "isAccessKeySet" .= isAccessKeySet authMode + , "consolePath" .= consolePath ] - errMsg = "Fatal Error : console template rendering failed" - ++ show errs + consolePath = case path of + "" -> "/console" + r -> "/console/" <> r + + errMsg = "console template rendering failed: " ++ show errs data ServerCtx = ServerCtx @@ -304,10 +308,7 @@ httpApp mRootDir corsCfg serverCtx enableConsole = do middleware $ corsMiddleware (mkDefaultCorsPolicy $ ccDomain corsCfg) -- API Console and Root Dir - if enableConsole then do - consoleHTML <- lift $ mkConsoleHTML $ scAuthMode serverCtx - serveApiConsole consoleHTML - else maybe (return ()) (middleware . MS.staticPolicy . MS.addBase) mRootDir + bool serveRootDir serveApiConsole enableConsole get "v1/version" $ do uncurry setHeader jsonHeader @@ -339,11 +340,7 @@ httpApp mRootDir corsCfg serverCtx enableConsole = do hookAny GET $ \_ -> do let qErr = err404 NotFound "resource does not exist" - req <- request - reqBody <- liftIO $ strictRequestBody req - logError Nothing req reqBody serverCtx qErr - uncurry setHeader jsonHeader - lazyBytes $ encode qErr + raiseGenericApiError qErr where tmpltGetOrDeleteH tmpltName = do @@ -365,6 +362,19 @@ httpApp mRootDir corsCfg serverCtx enableConsole = do v1QueryHandler $ RQExecuteQueryTemplate $ ExecQueryTemplate (TQueryName tmpltName) tmpltArgs - serveApiConsole htmlFile = do - get root $ redirect "/console" - get ("console" wildcard) $ const $ html htmlFile + raiseGenericApiError qErr = do + req <- request + reqBody <- liftIO $ strictRequestBody req + logError Nothing req reqBody serverCtx qErr + uncurry setHeader jsonHeader + setStatus $ qeStatus qErr + lazyBytes $ encode qErr + + serveRootDir = + maybe (return ()) (middleware . MS.staticPolicy . MS.addBase) mRootDir + + serveApiConsole = do + get root $ redirect "console" + get ("console" wildcard) $ \path -> + either (raiseGenericApiError . err500 Unexpected . T.pack) html $ + mkConsoleHTML path $ scAuthMode serverCtx diff --git a/server/src-rsr/console.html b/server/src-rsr/console.html index 77aff5a79aecc..898efb59ca0fe 100644 --- a/server/src-rsr/console.html +++ b/server/src-rsr/console.html @@ -5,6 +5,7 @@ window.__env = { consoleMode: "server", urlPrefix: "/console", + consolePath: "{{consolePath}}", isAccessKeySet: {{isAccessKeySet}} }; From cd13eb40b13407523de290cfc8b777e84264c1c0 Mon Sep 17 00:00:00 2001 From: wawhal Date: Tue, 18 Dec 2018 12:15:38 +0530 Subject: [PATCH 2/2] use console path to determine data api url and urlprefix --- console/src/Globals.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/console/src/Globals.js b/console/src/Globals.js index 0ee534d3a89ee..66324e6e4ef1c 100644 --- a/console/src/Globals.js +++ b/console/src/Globals.js @@ -32,6 +32,7 @@ const globals = { ? 'server' : window.__env.consoleMode, urlPrefix: checkExtraSlashes(window.__env.urlPrefix), + consolePath: window.__env.consolePath, }; // set defaults @@ -63,8 +64,15 @@ if ( if (globals.consoleMode === SERVER_CONSOLE_MODE) { if (globals.nodeEnv !== 'development') { - const windowUrl = window.location.protocol + '//' + window.location.host; - globals.dataApiUrl = windowUrl; + const safeCurrentUrl = checkExtraSlashes(window.location.href); + globals.dataApiUrl = safeCurrentUrl.slice( + 0, + safeCurrentUrl.lastIndexOf(window.__env.consolePath) + ); + const currentPath = checkExtraSlashes(window.location.pathname); + globals.urlPrefix = + currentPath.slice(0, currentPath.lastIndexOf(window.__env.consolePath)) + + '/console'; } /* * Require the exact usecase