Skip to content

Instantly share code, notes, and snippets.

@codecademydev
Created January 28, 2023 19:15
Show Gist options
  • Save codecademydev/d82883cb462374f4297aec699cc56811 to your computer and use it in GitHub Desktop.
Save codecademydev/d82883cb462374f4297aec699cc56811 to your computer and use it in GitHub Desktop.
Codecademy export
const express = require('express');
const path = require('path');
const OAuth2Server = require('oauth2-server');
const app = express();
app.use(express.json());
app.use(express.urlencoded({extended: true}));
const PORT = 4001
const oauth = new OAuth2Server({
model: require("./model"),
allowBearerTokensInQueryString: true
})
const authenticateRequest = (req, res, next) => {
let request = new OAuth2Server.Request(req);
let response = new OAuth2Server.Response(res)
return oauth.authenticate(request, response)
.then((token)=>{
next()
})
.catch((err) => {
res.sendFile(path.join(__dirname, 'public/error.html'))
})
}
const obtainToken = (req, res) => {
let request = new OAuth2Server.Request(req);
let response = new OAuth2Server.Response(res);
return oauth.token(request, response)
.then((token) => {
res.json(token);
})
.catch((err) => {
res.json(err);
})
}
app.all('/auth', obtainToken);
app.get('/', (req, res)=>{
res.sendFile(path.join(__dirname, 'public/home.html'));
})
app.get('/login', (req, res)=>{
res.sendFile(path.join(__dirname, 'public/login.html'));
})
app.get('/public', (req, res)=>{
res.sendFile(path.join(__dirname, 'public/allowed.html'));
})
app.get('/secret', authenticateRequest, (req, res)=>{
res.sendFile(path.join(__dirname, 'public/private.html'));
})
app.listen(PORT, ()=>console.log(`Listening on port ${PORT}`));
module.exports =
{
confidentialClients: [{
clientId: 'codecademy',
clientSecret: 'codec@demy',
grants: [
'client_credentials'
],
}],
tokens:[]
}
const db = require('./db')
const getClient = (clientId, clientSecret) => {
let confidentialClients = db.confidentialClients.filter((client)=>{
return client.clientId === clientId && client.clientSecret === clientSecret
})
return confidentialClients[0]
}
const saveToken = (token, client, user) => {
token.client = {
id: client.clientId
}
token.user = {
username: user.username
}
db.tokens.push(token)
return token
}
const getUserFromClient = (client) => {
// return client
return {}
}
const getAccessToken = (accessToken) => {
let tokens = db.tokens.filter((savedToken)=>{
return savedToken.accessToken === accessToken
})
return tokens[0]
}
module.exports = {
getAccessToken: getAccessToken,
getClient: getClient,
getUserFromClient: getUserFromClient,
saveToken: saveToken
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment