Initial commit
This commit is contained in:
commit
12ea0d49f5
18
.dockerignore
Normal file
18
.dockerignore
Normal file
@ -0,0 +1,18 @@
|
||||
.kpt-pipeline/
|
||||
charts/
|
||||
skaffold.yaml
|
||||
README.md
|
||||
.git/
|
||||
node_modules/
|
||||
.drone.yml
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
*.kpt-pipeline
|
23
.gitignore
vendored
Normal file
23
.gitignore
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/dist
|
||||
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
21
Dockerfile
Normal file
21
Dockerfile
Normal file
@ -0,0 +1,21 @@
|
||||
FROM node AS dev
|
||||
|
||||
# define /app as working directory
|
||||
WORKDIR /app
|
||||
|
||||
# copy package.json and package-lock.json to /app
|
||||
COPY package.json /app
|
||||
COPY package-lock.json /app
|
||||
|
||||
# install node dependencies
|
||||
RUN npm install
|
||||
COPY . /app
|
||||
|
||||
# launch node server
|
||||
ENTRYPOINT npm run dev
|
||||
|
||||
# production
|
||||
# we will not use npm in production as it wants to write on the container filesystem. this should be prohibited on production. however, we need to allow it while developing.
|
||||
FROM dev AS prod
|
||||
RUN npm install --production
|
||||
ENTRYPOINT node app.js
|
42
app.js
Normal file
42
app.js
Normal file
@ -0,0 +1,42 @@
|
||||
import express from 'express'
|
||||
import {Issuer, generators} from 'openid-client'
|
||||
import bodyParser from 'body-parser'
|
||||
|
||||
async function run() {
|
||||
const app = express();
|
||||
app.use(bodyParser.urlencoded());
|
||||
app.use(bodyParser.json())
|
||||
|
||||
const issuer = await Issuer.discover('https://gateway-gab7y.codemowers.ee/');
|
||||
console.log('Discovered issuer %s %O', issuer.issuer, issuer.metadata);
|
||||
|
||||
const client = new issuer.Client({
|
||||
client_id: 'foo',
|
||||
redirect_uris: ['https://client-gab7y.codemowers.ee/cb'],
|
||||
response_types: ['id_token'],
|
||||
// id_token_signed_response_alg (default "RS256")
|
||||
})
|
||||
const nonce = generators.nonce();
|
||||
|
||||
app.get('/', async function (req, res) {
|
||||
let url = client.authorizationUrl({
|
||||
redirect_uri: 'https://client-gab7y.codemowers.ee/cb',
|
||||
scope: 'openid',
|
||||
response_mode: 'form_post',
|
||||
nonce,
|
||||
});
|
||||
|
||||
res.redirect(url);
|
||||
});
|
||||
app.post('/cb', async function (req, res) {
|
||||
const params = client.callbackParams(req);
|
||||
const tokenSet = await client.callback('https://client-gab7y.codemowers.ee/ok', params, {nonce});
|
||||
console.log('received and validated tokens %j', tokenSet);
|
||||
console.log('validated ID Token claims %j', tokenSet.claims());
|
||||
res.send(tokenSet.claims());
|
||||
});
|
||||
|
||||
app.listen(3000);
|
||||
}
|
||||
|
||||
run().catch(console.dir);
|
60
deployment.yaml
Normal file
60
deployment.yaml
Normal file
@ -0,0 +1,60 @@
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: oidc-test-client
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: shared
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
external-dns.alpha.kubernetes.io/target: traefik.codemowers.ee
|
||||
spec:
|
||||
rules:
|
||||
- host: client-gab7y.codemowers.ee
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: oidc-test-client
|
||||
port:
|
||||
number: 3000
|
||||
tls:
|
||||
- hosts:
|
||||
- "*.codemowers.ee"
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: oidc-test-client
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: oidc-test-client
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 3000
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: oidc-test-client
|
||||
labels:
|
||||
app: oidc-test-client
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: oidc-test-client
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: oidc-test-client
|
||||
spec:
|
||||
containers:
|
||||
- name: oidc-test-client
|
||||
image: oidc-test-client
|
||||
ports:
|
||||
- containerPort: 3000
|
1824
package-lock.json
generated
Normal file
1824
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
19
package.json
Normal file
19
package.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "oidc-test-client",
|
||||
"version": "0.1.0",
|
||||
"description": "",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"dev": "nodemon --inspect=0.0.0.0 app.js -e ejs,js,css,html,jpg,png,scss"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"express": "^4.17.2",
|
||||
"body-parser": "1.20.1",
|
||||
"openid-client": "^5.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^2.0.20"
|
||||
},
|
||||
"author": "Erki Aas"
|
||||
}
|
26
skaffold.yaml
Normal file
26
skaffold.yaml
Normal file
@ -0,0 +1,26 @@
|
||||
apiVersion: skaffold/v4beta1
|
||||
kind: Config
|
||||
build:
|
||||
artifacts:
|
||||
- image: oidc-test-client
|
||||
|
||||
manifests:
|
||||
rawYaml:
|
||||
- deployment.yaml
|
||||
|
||||
profiles:
|
||||
- name: dev
|
||||
activation:
|
||||
- command: dev
|
||||
build:
|
||||
artifacts:
|
||||
- image: oidc-test-client
|
||||
docker:
|
||||
target: dev
|
||||
sync:
|
||||
manual:
|
||||
- src: 'app.js'
|
||||
dest: .
|
||||
deploy:
|
||||
kubectl: {}
|
||||
|
Loading…
Reference in New Issue
Block a user