diff --git a/packages/backend-core/src/middleware/passport/datasource/google.ts b/packages/backend-core/src/middleware/passport/datasource/google.ts
index 2f91e01d9a..6fd4e9ff32 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, SSOProfile } from "@budibase/types"
+import { BBContext, Database, 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.throw(400, "appId query param not present.")
+ if (!ctx.query.appId || !ctx.query.datasourceId) {
+ ctx.throw(400, "appId and datasourceId query params 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,16 +79,23 @@ export async function postAuth(
{ successRedirect: "/", failureRedirect: "/error" },
async (err: any, tokens: string[]) => {
const baseUrl = `/builder/app/${authStateCookie.appId}/data`
-
- const id = utils.newid()
- await cache.store(
- `datasource:creation:${authStateCookie.appId}:google:${id}`,
- {
- tokens,
+ // 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)
+ }
}
- )
-
- ctx.redirect(`${baseUrl}/new?continue_google_setup=${id}`)
+ if (!datasource.config) {
+ datasource.config = {}
+ }
+ datasource.config.auth = { type: "google", ...tokens }
+ await db.put(datasource)
+ ctx.redirect(`${baseUrl}/datasource/${authStateCookie.datasourceId}`)
+ })
}
)(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 ceb8fd7f4b..b7d70d88b7 100644
--- a/packages/builder/src/components/backend/DatasourceNavigator/_components/GoogleButton.svelte
+++ b/packages/builder/src/components/backend/DatasourceNavigator/_components/GoogleButton.svelte
@@ -3,6 +3,8 @@
import { store } from "builderStore"
import { auth } from "stores/portal"
+ export let preAuthStep
+ export let datasource
export let disabled
export let samePage
@@ -13,8 +15,18 @@
class:disabled
{disabled}
on:click={async () => {
+ let ds = datasource
let appId = $store.appId
- const url = `/api/global/auth/${tenantId}/datasource/google?appId=${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}`
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 7b4808967d..0783a9fe53 100644
--- a/packages/builder/src/components/backend/DatasourceNavigator/modals/GoogleDatasourceConfigModal.svelte
+++ b/packages/builder/src/components/backend/DatasourceNavigator/modals/GoogleDatasourceConfigModal.svelte
@@ -1,110 +1,43 @@
- {#if step === GoogleDatasouceConfigStep.AUTH}
-
- {#if isGoogleConfigured === true}
-
- Authenticate with your google account to use the {integrationName} integration.
-
-
- {:else if isGoogleConfigured === false}
+
+ {#if isGoogleConfigured === true}
+
Google authentication is not enabled, please complete Google SSO
- configuration.Authenticate with your google account to use the {IntegrationNames[
+ datasource.type
+ ]} integration.