From de5fead89b959fda83fca0e1aefb7d90b4ecbbe9 Mon Sep 17 00:00:00 2001 From: Abhinav Jha Date: Wed, 22 Jan 2020 12:26:25 +0000 Subject: [PATCH] Hotfix/baseurl env --- app/client/netlify.toml | 5 +++++ app/client/package.json | 4 ++-- app/client/public/index.html | 3 +++ app/client/src/api/Api.tsx | 2 +- app/client/src/api/UserApi.tsx | 9 ++------- app/client/src/configs/dev.config.ts | 7 +++---- app/client/src/configs/index.ts | 24 ++++++++++++++++++----- app/client/src/configs/prod.config.ts | 7 +++---- app/client/src/configs/stage.config.ts | 7 +++---- app/client/src/constants/ApiConstants.tsx | 9 +-------- app/client/src/pages/UserAuth/Login.tsx | 7 +++++-- 11 files changed, 47 insertions(+), 37 deletions(-) diff --git a/app/client/netlify.toml b/app/client/netlify.toml index 067be5b3a5..7816bc5ae3 100644 --- a/app/client/netlify.toml +++ b/app/client/netlify.toml @@ -1,19 +1,24 @@ [context.production] [context.production.environment] REACT_APP_ENVIRONMENT = "PRODUCTION" + REACT_APP_BASE_URL = "https://api.appsmith.com" [context.release] [context.release.environment] REACT_APP_ENVIRONMENT = "STAGING" + REACT_APP_BASE_URL = "https://release-api.appsmith.com" [context.develop] [context.develop.environment] REACT_APP_ENVIRONMENT = "DEVELOPMENT" + REACT_APP_BASE_URL = "https://release-api.appsmith.com" [context.a] [context.a.environment] REACT_APP_ENVIRONMENT = "STAGING" + REACT_APP_BASE_URL = "https://release-api.appsmith.com" [context.b] [context.b.environment] REACT_APP_ENVIRONMENT = "STAGING" + REACT_APP_BASE_URL = "https://release-api.appsmith.com" diff --git a/app/client/package.json b/app/client/package.json index 6119e0785d..2f0561fd8d 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -88,11 +88,11 @@ }, "scripts": { "analyze": "source-map-explorer 'build/static/js/*.js'", - "start": "REACT_APP_ENVIRONMENT=DEVELOPMENT HOST=dev.appsmith.com craco start", + "start": "REACT_APP_BASE_URL=https://release-api.appsmith.com REACT_APP_ENVIRONMENT=DEVELOPMENT HOST=dev.appsmith.com craco start", "build": "craco --max-old-space-size=2048 build", "test": "CI=true craco test", "eject": "react-scripts eject", - "start-prod": "REACT_APP_ENVIRONMENT=PRODUCTION craco start", + "start-prod": "REACT_APP_BASE_URL=https://api.appsmith.com REACT_APP_ENVIRONMENT=PRODUCTION craco start", "storybook": "start-storybook", "cytest": "REACT_APP_TESTING=TESTING REACT_APP_ENVIRONMENT=DEVELOPMENT craco start & ./node_modules/.bin/cypress open", "build-storybook": "build-storybook -c .storybook -o .storybook-out" diff --git a/app/client/public/index.html b/app/client/public/index.html index 0edeec0ccd..9ea56fb55a 100755 --- a/app/client/public/index.html +++ b/app/client/public/index.html @@ -19,5 +19,8 @@
+ diff --git a/app/client/src/api/Api.tsx b/app/client/src/api/Api.tsx index ace2e70327..464b36a554 100644 --- a/app/client/src/api/Api.tsx +++ b/app/client/src/api/Api.tsx @@ -7,7 +7,7 @@ import { } from "constants/ApiConstants"; import { ActionApiResponse } from "./ActionAPI"; import { AUTH_LOGIN_URL } from "constants/routes"; -const { apiUrl, baseUrl } = getAppsmithConfigs(); +const { baseUrl, apiUrl } = getAppsmithConfigs(); //TODO(abhinav): Refactor this to make more composable. export const apiRequestConfig = { diff --git a/app/client/src/api/UserApi.tsx b/app/client/src/api/UserApi.tsx index 26e2a10feb..97999b5c48 100644 --- a/app/client/src/api/UserApi.tsx +++ b/app/client/src/api/UserApi.tsx @@ -1,7 +1,6 @@ import { AxiosPromise } from "axios"; import Api from "./Api"; import { ApiResponse } from "./ApiResponses"; -import { getAppsmithConfigs } from "configs"; export interface LoginUserRequest { email: string; @@ -55,7 +54,7 @@ class UserApi extends Api { static inviteUserURL = "v1/users/invite"; static verifyInviteTokenURL = `${UserApi.inviteUserURL}/verify`; static confirmUserInviteURL = `${UserApi.inviteUserURL}/confirm`; - static logoutURL = "/logout"; + static logoutURL = "v1/logout"; static createUser( request: CreateUserRequest, @@ -103,11 +102,7 @@ class UserApi extends Api { } static logoutUser(): AxiosPromise { - const { baseUrl } = getAppsmithConfigs(); - return Api.post(UserApi.logoutURL, undefined, undefined, { - baseURL: baseUrl, - withCredentials: true, - }); + return Api.post(UserApi.logoutURL); } } diff --git a/app/client/src/configs/dev.config.ts b/app/client/src/configs/dev.config.ts index b21d66dd95..94830cf95b 100644 --- a/app/client/src/configs/dev.config.ts +++ b/app/client/src/configs/dev.config.ts @@ -1,8 +1,7 @@ import { SENTRY_STAGE_CONFIG } from "constants/ThirdPartyConstants"; -import { STAGE_BASE_URL } from "constants/ApiConstants"; import { AppsmithUIConfigs } from "./types"; -const devConfig: AppsmithUIConfigs = { +const devConfig = (baseUrl: string): AppsmithUIConfigs => ({ sentry: { enabled: false, config: SENTRY_STAGE_CONFIG, @@ -14,7 +13,7 @@ const devConfig: AppsmithUIConfigs = { enabled: false, }, apiUrl: "/api/", - baseUrl: STAGE_BASE_URL, -}; + baseUrl, +}); export default devConfig; diff --git a/app/client/src/configs/index.ts b/app/client/src/configs/index.ts index a702094eaf..b74d38f7f0 100644 --- a/app/client/src/configs/index.ts +++ b/app/client/src/configs/index.ts @@ -2,21 +2,35 @@ import prodConfig from "./prod.config"; import stageConfig from "./stage.config"; import devConfig from "./dev.config"; import { AppsmithUIConfigs } from "./types"; +declare global { + interface Window { + BASE_URL: string; + } +} +// TODO(Abhinav): See if this is called so many times, that we may need memoization. export const getAppsmithConfigs = (): AppsmithUIConfigs => { + const WINDOW_BASE_URL: string = window.BASE_URL; + const REACT_APP_BASE_URL: string | undefined = process.env.REACT_APP_BASE_URL; + + const BASE_URL = + WINDOW_BASE_URL === "___BASE_URL___" ? REACT_APP_BASE_URL : WINDOW_BASE_URL; + + if (!BASE_URL) { + throw Error("NO API Endpont defined - aborting"); + } switch (process.env.REACT_APP_ENVIRONMENT) { case "PRODUCTION": - return prodConfig; + return prodConfig(BASE_URL); case "STAGING": - return stageConfig; + return stageConfig(BASE_URL); case "DEVELOPMENT": - return devConfig; + return devConfig(BASE_URL); default: console.log( "Unknown environment set: ", process.env.REACT_APP_ENVIRONMENT, ); - devConfig.apiUrl = ""; - return devConfig; + return devConfig(BASE_URL); } }; diff --git a/app/client/src/configs/prod.config.ts b/app/client/src/configs/prod.config.ts index d64c2b6e8e..0050d780d4 100644 --- a/app/client/src/configs/prod.config.ts +++ b/app/client/src/configs/prod.config.ts @@ -3,10 +3,9 @@ import { HOTJAR_PROD_HJID, HOTJAR_PROD_HJSV, } from "constants/ThirdPartyConstants"; -import { PROD_BASE_URL } from "constants/ApiConstants"; import { AppsmithUIConfigs } from "./types"; -export const prodConfig: AppsmithUIConfigs = { +export const prodConfig = (baseUrl: string): AppsmithUIConfigs => ({ sentry: { enabled: true, config: SENTRY_PROD_CONFIG, @@ -22,7 +21,7 @@ export const prodConfig: AppsmithUIConfigs = { enabled: true, }, apiUrl: "/api/", - baseUrl: PROD_BASE_URL, -}; + baseUrl, +}); export default prodConfig; diff --git a/app/client/src/configs/stage.config.ts b/app/client/src/configs/stage.config.ts index aaeaa09109..31002e73ad 100644 --- a/app/client/src/configs/stage.config.ts +++ b/app/client/src/configs/stage.config.ts @@ -1,8 +1,7 @@ import { SENTRY_STAGE_CONFIG } from "constants/ThirdPartyConstants"; -import { STAGE_BASE_URL } from "constants/ApiConstants"; import { AppsmithUIConfigs } from "./types"; -const stageConfig: AppsmithUIConfigs = { +const stageConfig = (baseUrl: string): AppsmithUIConfigs => ({ sentry: { enabled: true, config: SENTRY_STAGE_CONFIG, @@ -14,7 +13,7 @@ const stageConfig: AppsmithUIConfigs = { enabled: false, }, apiUrl: "/api/", - baseUrl: STAGE_BASE_URL, -}; + baseUrl, +}); export default stageConfig; diff --git a/app/client/src/constants/ApiConstants.tsx b/app/client/src/constants/ApiConstants.tsx index 273ba5d9d5..e6988be615 100644 --- a/app/client/src/constants/ApiConstants.tsx +++ b/app/client/src/constants/ApiConstants.tsx @@ -2,24 +2,17 @@ export type ContentType = | "application/json" | "application/x-www-form-urlencoded"; -export const STAGE_BASE_URL = "https://release-api.appsmith.com"; -export const PROD_BASE_URL = "https://api.appsmith.com"; - export const REQUEST_TIMEOUT_MS = 10000; export const API_REQUEST_HEADERS: APIHeaders = { "Content-Type": "application/json", }; -export const FORM_REQUEST_HEADERS: APIHeaders = { - "Content-Type": "application/x-www-form-urlencoded", - Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", -}; export const OAuthURL = "/oauth2/authorization"; export const GoogleOAuthURL = `${OAuthURL}/google`; export const GithubOAuthURL = `${OAuthURL}/github`; -export const LOGIN_SUBMIT_PATH = "/login"; +export const LOGIN_SUBMIT_PATH = "login"; export interface APIException { error: number; diff --git a/app/client/src/pages/UserAuth/Login.tsx b/app/client/src/pages/UserAuth/Login.tsx index 75b0490bb8..4af75deca4 100644 --- a/app/client/src/pages/UserAuth/Login.tsx +++ b/app/client/src/pages/UserAuth/Login.tsx @@ -86,7 +86,7 @@ export const Login = (props: LoginFormProps) => { forgotPasswordURL += `?email=${props.emailValue}`; } - const { baseUrl } = getAppsmithConfigs(); + const { baseUrl, apiUrl } = getAppsmithConfigs(); return ( @@ -108,7 +108,10 @@ export const Login = (props: LoginFormProps) => {
{LOGIN_PAGE_SUBTITLE}
- +