Skip to content

Commit 89696a4

Browse files
authored
Stack Auth Proxy (stack-auth#237)
* added proxy * updated pnpm lock * removed package lock * added readme * updated readme * updated readme * fixed bugs * added development env * added template engine * updated dependencies * fixed github action
1 parent ba69acd commit 89696a4

28 files changed

Lines changed: 976 additions & 0 deletions

.github/workflows/e2e-api-tests.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ jobs:
6565

6666
- name: Create .env.test.local file for examples/supabase
6767
run: cp examples/supabase/.env.development examples/supabase/.env.test.local
68+
69+
- name: Create .env.test.local file for packages/stack-proxy
70+
run: cp packages/stack-proxy/.env.development packages/stack-proxy/.env.test.local
6871

6972
- name: Build
7073
run: pnpm build

.github/workflows/lint-and-build.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ jobs:
6767
- name: Put QUETZAL_API_KEY in .env.local for packages/stack
6868
run: echo "QUETZAL_API_KEY=${{ secrets.QUETZAL_API_KEY }}" >> packages/stack/.env.local
6969

70+
- name: Create .env.production.local file for packages/stack-proxy
71+
run: cp packages/stack-proxy/.env.development packages/stack-proxy/.env.production.local
72+
7073
- name: Build
7174
run: pnpm build
7275

.github/workflows/preview-docs.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ jobs:
5454
- name: Create .env.production.local file for examples/supabase
5555
run: cp examples/supabase/.env.development examples/supabase/.env.production.local
5656

57+
- name: Create .env.production.local file for packages/stack-proxy
58+
run: cp packages/stack-proxy/.env.development packages/stack-proxy/.env.production.local
59+
5760
- name: Build
5861
run: pnpm build
5962
env:

.github/workflows/publish-docs.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ jobs:
7171

7272
- name: Create .env.production.local file for examples/supabase
7373
run: cp examples/supabase/.env.development examples/supabase/.env.production.local
74+
75+
- name: Create .env.production.local file for packages/stack-proxy
76+
run: cp packages/stack-proxy/.env.development packages/stack-proxy/.env.production.local
7477

7578
- name: Build
7679
run: pnpm build
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules
5+
/.pnp
6+
.pnp.js
7+
.yarn/install-state.gz
8+
9+
# testing
10+
/coverage
11+
12+
# next.js
13+
/.next/
14+
/out/
15+
16+
# production
17+
/build
18+
19+
# misc
20+
.DS_Store
21+
*.pem
22+
23+
# debug
24+
npm-debug.log*
25+
yarn-debug.log*
26+
yarn-error.log*
27+
28+
# local env files
29+
.env*.local
30+
31+
# vercel
32+
.vercel
33+
34+
# typescript
35+
*.tsbuildinfo
36+
next-env.d.ts
37+
38+
/dist
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "@stackframe/proxied-server-example",
3+
"version": "2.5.33",
4+
"dependencies": {
5+
"express": "^4.19.2",
6+
"handlebars": "^4.7.8"
7+
},
8+
"scripts": {
9+
"dev": "PORT=8115 node server.js"
10+
},
11+
"bin": {
12+
"proxied-server-example": "./server.js"
13+
}
14+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const express = require("express");
2+
const handlebars = require("handlebars");
3+
4+
const app = express();
5+
const PORT = process.env.PORT || 3000;
6+
7+
const authenticatedTemplateSource = `
8+
<div>
9+
<p>Authenticated: Yes</p>
10+
<p>Display Name: {{displayName}}</p>
11+
<p><a href="/handler/account-settings" style="text-decoration: underline;">Account Settings</a></p>
12+
<p><a href="/protected" style="text-decoration: underline;">Go to protected page</a></p>
13+
<p><a href="/handler/sign-out" style="text-decoration: underline;">Sign Out</a></p>
14+
</div>
15+
`;
16+
17+
const unauthenticatedTemplateSource = `
18+
<div>
19+
<p>Authenticated: No</p>
20+
<p><a href="/protected" style="text-decoration: underline;">Go to protected page</a></p>
21+
<p><a href="/handler/sign-in" style="text-decoration: underline;">Sign In</a></p>
22+
</div>
23+
`;
24+
25+
const authenticatedTemplate = handlebars.compile(authenticatedTemplateSource);
26+
const unauthenticatedTemplate = handlebars.compile(
27+
unauthenticatedTemplateSource
28+
);
29+
30+
app.get("/", (req, res) => {
31+
const authenticated = !!req.headers["x-stack-authenticated"];
32+
const displayName = req.headers["x-stack-user-display-name"] || "";
33+
34+
let html;
35+
if (authenticated) {
36+
html = authenticatedTemplate({ displayName });
37+
} else {
38+
html = unauthenticatedTemplate();
39+
}
40+
41+
res.send(html);
42+
});
43+
44+
app.get("/protected", (req, res) => {
45+
const protectedTemplate = handlebars.compile(
46+
"<p>This is a protected page, only authenticated users can access it</p>"
47+
);
48+
res.send(protectedTemplate());
49+
});
50+
51+
app.listen(PORT, () => {
52+
console.log(`Server is running on http://localhost:${PORT}`);
53+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Contains the credentials for the internal project of Stack's default development environment setup.
2+
# Do not use in a production environment, instead replace it with actual values gathered from https://app.stack-auth.com.
3+
NEXT_PUBLIC_STACK_URL=http://localhost:8102
4+
NEXT_PUBLIC_STACK_PROJECT_ID=internal
5+
NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=this-publishable-client-key-is-for-local-development-only
6+
STACK_SECRET_SERVER_KEY=this-secret-server-key-is-for-local-development-only
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"extends": "next/core-web-vitals"
3+
}

packages/stack-proxy/.gitignore

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules
5+
/.pnp
6+
.pnp.js
7+
.yarn/install-state.gz
8+
9+
# testing
10+
/coverage
11+
12+
# next.js
13+
/.next/
14+
/out/
15+
16+
# production
17+
/build
18+
19+
# misc
20+
.DS_Store
21+
*.pem
22+
23+
# debug
24+
npm-debug.log*
25+
yarn-debug.log*
26+
yarn-error.log*
27+
28+
# local env files
29+
.env*.local
30+
31+
# vercel
32+
.vercel
33+
34+
# typescript
35+
*.tsbuildinfo
36+
next-env.d.ts
37+
38+
/dist

0 commit comments

Comments
 (0)