diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index baec07ca28d..8bb15d37fdf 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -15,6 +15,10 @@ apps/desktop/desktop_native/core/src/secure_memory @bitwarden/team-key-managemen
apps/desktop/desktop_native/Cargo.lock
apps/desktop/desktop_native/Cargo.toml
+# Web connectors
+apps/web/src/connectors @bitwarden/team-auth-dev
+apps/web/src/connectors/platform @bitwarden/team-platform-dev
+
## Auth team files ##
apps/browser/src/auth @bitwarden/team-auth-dev
apps/cli/src/auth @bitwarden/team-auth-dev
@@ -22,8 +26,6 @@ apps/desktop/src/auth @bitwarden/team-auth-dev
apps/web/src/app/auth @bitwarden/team-auth-dev
libs/auth @bitwarden/team-auth-dev
libs/user-core @bitwarden/team-auth-dev
-# web connectors used for auth
-apps/web/src/connectors @bitwarden/team-auth-dev
bitwarden_license/bit-web/src/app/auth @bitwarden/team-auth-dev
libs/angular/src/auth @bitwarden/team-auth-dev
libs/common/src/auth @bitwarden/team-auth-dev
diff --git a/apps/web/src/connectors/platform/proxy-cookie-redirect.html b/apps/web/src/connectors/platform/proxy-cookie-redirect.html
new file mode 100644
index 00000000000..1daa6d2e412
--- /dev/null
+++ b/apps/web/src/connectors/platform/proxy-cookie-redirect.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+ Bitwarden Web vault
+
+
+
+
+
+
+
+
+
+
+
![Bitwarden]()
+
+
+
+
+
+
diff --git a/apps/web/src/connectors/platform/proxy-cookie-redirect.ts b/apps/web/src/connectors/platform/proxy-cookie-redirect.ts
new file mode 100644
index 00000000000..79c5092caab
--- /dev/null
+++ b/apps/web/src/connectors/platform/proxy-cookie-redirect.ts
@@ -0,0 +1,17 @@
+/**
+ * ONLY FOR SELF-HOSTED SETUPS
+ * Redirects the user to the SSO cookie vendor endpoint when the window finishes loading.
+ *
+ * This script listens for the window's load event and automatically redirects the browser
+ * to the `api/sso-cookie-vendor` path on the current origin. This is used as part
+ * of an authentication flow where cookies need to be set or validated through a vendor endpoint.
+ */
+window.addEventListener("DOMContentLoaded", () => {
+ const origin = window.location.origin;
+ let apiURL = `${window.location.origin}/api/sso-cookie-vendor`;
+ // Override for local testing
+ if (origin.startsWith("https://localhost")) {
+ apiURL = "http://localhost:4000/sso-cookie-vendor";
+ }
+ window.location.href = apiURL;
+});
diff --git a/apps/web/tsconfig.build.json b/apps/web/tsconfig.build.json
index 273cddb21d2..c1e7a88f4a8 100644
--- a/apps/web/tsconfig.build.json
+++ b/apps/web/tsconfig.build.json
@@ -1,5 +1,5 @@
{
"extends": "./tsconfig.json",
"files": ["src/polyfills.ts", "src/main.ts", "src/theme.ts"],
- "include": ["src/connectors/*.ts"]
+ "include": ["src/connectors/*.ts", "src/connectors/platform/*.ts"]
}
diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json
index fd655b0a56b..6bfa9c8703b 100644
--- a/apps/web/tsconfig.json
+++ b/apps/web/tsconfig.json
@@ -4,5 +4,10 @@
"strictTemplates": true
},
"files": ["src/polyfills.ts", "src/main.ts", "src/theme.ts"],
- "include": ["src/connectors/*.ts", "src/**/*.stories.ts", "src/**/*.spec.ts"]
+ "include": [
+ "src/connectors/*.ts",
+ "src/connectors/platform/*.ts",
+ "src/**/*.stories.ts",
+ "src/**/*.spec.ts"
+ ]
}
diff --git a/apps/web/webpack.base.js b/apps/web/webpack.base.js
index 016d2b0fe61..2ef9abe09a6 100644
--- a/apps/web/webpack.base.js
+++ b/apps/web/webpack.base.js
@@ -166,6 +166,11 @@ module.exports.buildConfig = function buildConfig(params) {
filename: "duo-redirect-connector.html",
chunks: ["connectors/duo-redirect", "styles"],
}),
+ new HtmlWebpackPlugin({
+ template: path.resolve(__dirname, "src/connectors/platform/proxy-cookie-redirect.html"),
+ filename: "proxy-cookie-redirect-connector.html",
+ chunks: ["connectors/platform/proxy-cookie-redirect", "styles"],
+ }),
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "src/404.html"),
filename: "404.html",
@@ -403,6 +408,10 @@ module.exports.buildConfig = function buildConfig(params) {
"connectors/sso": path.resolve(__dirname, "src/connectors/sso.ts"),
"connectors/duo-redirect": path.resolve(__dirname, "src/connectors/duo-redirect.ts"),
"connectors/redirect": path.resolve(__dirname, "src/connectors/redirect.ts"),
+ "connectors/platform/proxy-cookie-redirect": path.resolve(
+ __dirname,
+ "src/connectors/platform/proxy-cookie-redirect.ts",
+ ),
styles: [
path.resolve(__dirname, "src/scss/styles.scss"),
path.resolve(__dirname, "src/scss/tailwind.css"),
diff --git a/bitwarden_license/bit-web/tsconfig.build.json b/bitwarden_license/bit-web/tsconfig.build.json
index 58acbf09392..cc55f69bc4f 100644
--- a/bitwarden_license/bit-web/tsconfig.build.json
+++ b/bitwarden_license/bit-web/tsconfig.build.json
@@ -9,5 +9,5 @@
"../../bitwarden_license/bit-web/src/main.ts"
],
- "include": ["../../apps/web/src/connectors/*.ts"]
+ "include": ["../../apps/web/src/connectors/*.ts", "../../apps/web/src/connectors/platform/*.ts"]
}
diff --git a/bitwarden_license/bit-web/tsconfig.json b/bitwarden_license/bit-web/tsconfig.json
index 8c19f771a26..8dcd128ae6b 100644
--- a/bitwarden_license/bit-web/tsconfig.json
+++ b/bitwarden_license/bit-web/tsconfig.json
@@ -11,6 +11,7 @@
],
"include": [
"../../apps/web/src/connectors/*.ts",
+ "../../apps/web/src/connectors/platform/*.ts",
"../../apps/web/src/**/*.stories.ts",
"../../apps/web/src/**/*.spec.ts",
"src/**/*.stories.ts",