feat: initial users store

This commit is contained in:
2023-06-01 12:26:43 +02:00
parent 192929229f
commit d940a04d05
4 changed files with 43 additions and 11 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ EXPOSE 3333
WORKDIR /app WORKDIR /app
ADD package.json yarn.lock /app/ ADD package.json yarn.lock /app/
RUN yarn install --frozen-lockfile RUN yarn install --frozen-lockfile
ADD app.js cert.js /app/ ADD *.js /app/
ADD public /app/public ADD public /app/public
RUN mkdir -p /root/.config RUN mkdir -p /root/.config
ENTRYPOINT yarn start ENTRYPOINT yarn start
+16
View File
@@ -22,6 +22,22 @@ After you have installed all dependencies you can now run the app.
Run `npm start` to start a local server. Run `npm start` to start a local server.
The port will be displayed to you as `http://0.0.0.0:3333` (or if you prefer IPv6, if you're using `express` server, then it's `http://[::1]:3333/`). The port will be displayed to you as `http://0.0.0.0:3333` (or if you prefer IPv6, if you're using `express` server, then it's `http://[::1]:3333/`).
## Initial users
Adding a JSON file with the following layout will populate the users store when starting:
```json
{
"email@test.com": {
"given_name": "name",
"family_name": "family",
"user_id": "id"
}
}
```
By default `./users.json` will be read but this can be overridden by setting the environment variable `USERS_FILE`.
## API Documentation ## API Documentation
### `GET` /token/:username ### `GET` /token/:username
+8 -10
View File
@@ -10,6 +10,7 @@ const cors = require('cors')
const bodyParser = require('body-parser') const bodyParser = require('body-parser')
const favicon = require('serve-favicon') const favicon = require('serve-favicon')
const cert = require('./cert') const cert = require('./cert')
const initialUsers = require('./users')
let issuer = process.env.ISSUER || 'localhost:3333' let issuer = process.env.ISSUER || 'localhost:3333'
let jwksOrigin = `https://${issuer}/` let jwksOrigin = `https://${issuer}/`
@@ -22,8 +23,7 @@ const emailCustomClaim =
const debug = Debug('app') const debug = Debug('app')
let { privateKey, certDer, thumbprint, exponent, modulus } = cert(jwksOrigin) let { privateKey, certDer, thumbprint, exponent, modulus } = cert(jwksOrigin)
const users = initialUsers(process.env.USERS_FILE || './users.json')
const users = {}
const sessions = {} const sessions = {}
const challenges = {} const challenges = {}
@@ -356,24 +356,22 @@ app.post('/issuer', (req, res) => {
app.get('/api/v2/users-by-email', (req, res) => { app.get('/api/v2/users-by-email', (req, res) => {
const email = req.query.email const email = req.query.email
console.log('users', users)
const user = users[email] const user = users[email]
if (user === undefined) { if (user === undefined) {
res.json([]) res.json([])
} else { } else {
res.json([ res.json([user])
user
])
} }
}) })
app.post('/api/v2/users', (req, res) => { app.post('/api/v2/users', (req, res) => {
const email = req.body.email const email = req.body.email
users[email] = { users[email] = {
"email": email, email: email,
"given_name": "Given", given_name: 'Given',
"family_name": "Last", family_name: 'Last',
"user_id": email, user_id: email
} }
res.json({ res.json({
user_id: `auth0|${email}` user_id: `auth0|${email}`
+18
View File
@@ -0,0 +1,18 @@
const fs = require('fs')
const setup = (usersFile) => {
let users = {}
if (fs.existsSync(usersFile)) {
console.log(`initial users file "${usersFile}" exists, reading`)
const read = fs.readFileSync(usersFile, { encoding: 'utf8', flag: 'r' })
users = JSON.parse(read)
for (let key of Object.keys(users)) {
users[key] = { ...users[key], email: key }
}
console.log('users:', users)
} else {
console.log(`initial users file "${usersFile}" missing`)
}
return users
}
module.exports = setup