mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-26 14:15:52 +00:00
* feat(#1003): authorization_code grant type PKCE support, code cleanup.. --------- Co-authored-by: lohit-1 <lohit@usebruno.com>
68 lines
1.9 KiB
JavaScript
68 lines
1.9 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const crypto = require('crypto');
|
|
const clients = [
|
|
{
|
|
client_id: 'client_id_1',
|
|
client_secret: 'client_secret_1',
|
|
scope: 'admin'
|
|
}
|
|
];
|
|
|
|
const tokens = [];
|
|
|
|
function generateUniqueString() {
|
|
return crypto.randomBytes(16).toString('hex');
|
|
}
|
|
|
|
router.post('/token', (req, res) => {
|
|
let grant_type, client_id, client_secret, scope;
|
|
if (req?.body?.grant_type) {
|
|
grant_type = req?.body?.grant_type;
|
|
client_id = req?.body?.client_id;
|
|
client_secret = req?.body?.client_secret;
|
|
scope = req?.body?.scope;
|
|
} else if (req?.headers?.grant_type) {
|
|
grant_type = req?.headers?.grant_type;
|
|
client_id = req?.headers?.client_id;
|
|
client_secret = req?.headers?.client_secret;
|
|
scope = req?.headers?.scope;
|
|
}
|
|
|
|
console.log('client_cred', client_id, client_secret, scope);
|
|
if (grant_type !== 'client_credentials') {
|
|
return res.status(401).json({ error: 'Invalid Grant Type, expected "client_credentials"' });
|
|
}
|
|
|
|
const client = clients.find((c) => c.client_id == client_id && c.client_secret == client_secret && c.scope == scope);
|
|
|
|
if (!client) {
|
|
return res.status(401).json({ error: 'Invalid client details or scope' });
|
|
}
|
|
|
|
const token = generateUniqueString();
|
|
tokens.push({
|
|
token,
|
|
client_id,
|
|
client_secret,
|
|
scope
|
|
});
|
|
|
|
return res.json({ message: 'Authenticated successfully', access_token: token, scope });
|
|
});
|
|
|
|
router.get('/resource', (req, res) => {
|
|
try {
|
|
const { token } = req.query;
|
|
const storedToken = tokens.find((t) => t.token === token);
|
|
if (!storedToken) {
|
|
return res.status(401).json({ error: 'Invalid Access Token' });
|
|
}
|
|
return res.json({ resource: { name: 'foo', email: 'foo@bar.com' } });
|
|
} catch (err) {
|
|
return res.status(401).json({ error: 'Corrupt Access Token' });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|