diff --git a/packages/backend-core/src/middleware/passport/datasource/google.ts b/packages/backend-core/src/middleware/passport/datasource/google.ts
index 6fd4e9ff32..2f91e01d9a 100644
--- a/packages/backend-core/src/middleware/passport/datasource/google.ts
+++ b/packages/backend-core/src/middleware/passport/datasource/google.ts
@@ -1,10 +1,10 @@
import * as google from "../sso/google"
import { Cookie } from "../../../constants"
import { clearCookie, getCookie } from "../../../utils"
-import { doWithDB } from "../../../db"
import * as configs from "../../../configs"
-import { BBContext, Database, SSOProfile } from "@budibase/types"
+import { BBContext, SSOProfile } from "@budibase/types"
import { ssoSaveUserNoOp } from "../sso/sso"
+import { cache, utils } from "../../../"
const GoogleStrategy = require("passport-google-oauth").OAuth2Strategy
type Passport = {
@@ -36,8 +36,8 @@ export async function preAuth(
ssoSaveUserNoOp
)
- if (!ctx.query.appId || !ctx.query.datasourceId) {
- ctx.throw(400, "appId and datasourceId query params not present.")
+ if (!ctx.query.appId) {
+ ctx.throw(400, "appId query param not present.")
}
return passport.authenticate(strategy, {
@@ -69,7 +69,7 @@ export async function postAuth(
(
accessToken: string,
refreshToken: string,
- profile: SSOProfile,
+ _profile: SSOProfile,
done: Function
) => {
clearCookie(ctx, Cookie.DatasourceAuth)
@@ -79,23 +79,16 @@ export async function postAuth(
{ successRedirect: "/", failureRedirect: "/error" },
async (err: any, tokens: string[]) => {
const baseUrl = `/builder/app/${authStateCookie.appId}/data`
- // update the DB for the datasource with all the user info
- await doWithDB(authStateCookie.appId, async (db: Database) => {
- let datasource
- try {
- datasource = await db.get(authStateCookie.datasourceId)
- } catch (err: any) {
- if (err.status === 404) {
- ctx.redirect(baseUrl)
- }
+
+ const id = utils.newid()
+ await cache.store(
+ `datasource:creation:${authStateCookie.appId}:google:${id}`,
+ {
+ tokens,
}
- if (!datasource.config) {
- datasource.config = {}
- }
- datasource.config.auth = { type: "google", ...tokens }
- await db.put(datasource)
- ctx.redirect(`${baseUrl}/datasource/${authStateCookie.datasourceId}`)
- })
+ )
+
+ ctx.redirect(`${baseUrl}/new?continue_google_setup=${id}`)
}
)(ctx, next)
}
diff --git a/packages/builder/src/components/backend/DatasourceNavigator/_components/GoogleButton.svelte b/packages/builder/src/components/backend/DatasourceNavigator/_components/GoogleButton.svelte
index b7d70d88b7..ceb8fd7f4b 100644
--- a/packages/builder/src/components/backend/DatasourceNavigator/_components/GoogleButton.svelte
+++ b/packages/builder/src/components/backend/DatasourceNavigator/_components/GoogleButton.svelte
@@ -3,8 +3,6 @@
import { store } from "builderStore"
import { auth } from "stores/portal"
- export let preAuthStep
- export let datasource
export let disabled
export let samePage
@@ -15,18 +13,8 @@
class:disabled
{disabled}
on:click={async () => {
- let ds = datasource
let appId = $store.appId
- if (!ds) {
- const resp = await preAuthStep()
- if (resp.datasource && resp.appId) {
- ds = resp.datasource
- appId = resp.appId
- } else {
- ds = resp
- }
- }
- const url = `/api/global/auth/${tenantId}/datasource/google?datasourceId=${ds._id}&appId=${appId}`
+ const url = `/api/global/auth/${tenantId}/datasource/google?appId=${appId}`
if (samePage) {
window.location = url
} else {
diff --git a/packages/builder/src/components/backend/DatasourceNavigator/modals/GoogleDatasourceConfigModal.svelte b/packages/builder/src/components/backend/DatasourceNavigator/modals/GoogleDatasourceConfigModal.svelte
index 0783a9fe53..7b4808967d 100644
--- a/packages/builder/src/components/backend/DatasourceNavigator/modals/GoogleDatasourceConfigModal.svelte
+++ b/packages/builder/src/components/backend/DatasourceNavigator/modals/GoogleDatasourceConfigModal.svelte
@@ -1,43 +1,110 @@
-
- {#if isGoogleConfigured === true}
-
+ {#if step === GoogleDatasouceConfigStep.AUTH}
+
+ {#if isGoogleConfigured === true}
+
+ Authenticate with your google account to use the {integrationName} integration.
+
+
+ {:else if isGoogleConfigured === false}
Authenticate with your google account to use the {IntegrationNames[
- datasource.type
- ]} integration.Google authentication is not enabled, please complete Google SSO
+ configuration.