Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
// Copyright © 2023 Ory Corp
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
import request from "request"
|
|
import { resolve } from "path"
|
|
import urljoin from "url-join"
|
|
import express from "express"
|
|
import fs from "fs"
|
|
|
|
const app = express()
|
|
|
|
const proxy =
|
|
(base, prefix = null) =>
|
|
(req, res, next) => {
|
|
let url = urljoin(base, req.url)
|
|
|
|
// we need to tell Krato we are behind a reverse proxy
|
|
req.headers["x-forwarded-host"] = req.get("host")
|
|
|
|
if (prefix) {
|
|
url = urljoin(base, prefix, req.url)
|
|
}
|
|
req
|
|
.pipe(request(url, { followRedirect: false }).on("error", next))
|
|
.pipe(res)
|
|
}
|
|
|
|
app.use(
|
|
"/self-service/",
|
|
proxy(process.env.KRATOS_PUBLIC_URL, "/self-service/"),
|
|
)
|
|
app.use("/schemas/", proxy(process.env.KRATOS_PUBLIC_URL, "/schemas/"))
|
|
app.use("/.well-known/", proxy(process.env.KRATOS_PUBLIC_URL, "/.well-known/"))
|
|
|
|
app.use("/", (req, res, next) => {
|
|
const pc = JSON.parse(fs.readFileSync(resolve("../proxy.json")).toString())
|
|
switch (pc) {
|
|
case "react":
|
|
proxy(process.env.KRATOS_UI_REACT_URL)(req, res, next)
|
|
return
|
|
case "react-native":
|
|
proxy(process.env.KRATOS_UI_REACT_NATIVE_URL)(req, res, next)
|
|
return
|
|
}
|
|
proxy(process.env.KRATOS_UI_URL)(req, res, next)
|
|
})
|
|
|
|
const port = parseInt(process.env.PORT) || 4455
|
|
|
|
let listener = () => {
|
|
console.log(`Listening on http://0.0.0.0:${port}`)
|
|
}
|
|
|
|
app.listen(port, "0.0.0.0", listener)
|