Skip to content

Commit

Permalink
Merge pull request #56 from rcbj/ticket/16
Browse files Browse the repository at this point in the history
Added Auth Style checkbox that allows a user to choose between submit…
  • Loading branch information
rcbjBlueMars authored Jan 3, 2025
2 parents e904a28 + 9c8f3c6 commit 6ff4858
Show file tree
Hide file tree
Showing 6 changed files with 359 additions and 188 deletions.
3 changes: 2 additions & 1 deletion api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
"express": "^4.21.2",
"express-logging": "latest",
"express-swagger-generator": "^1.1.17",
"logops": "latest"
"logops": "latest",
"bunyan": "latest"
},
"devDependencies": {
"validator": ">=13.7.0"
Expand Down
107 changes: 67 additions & 40 deletions api/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,21 @@

const express = require('express');
const expressLogging = require('express-logging');
const logger = require('logops');
const bunyan = require("bunyan");
const axios = require('axios');
const bodyParser = require('body-parser');
const cors = require('cors');

// Constants
const PORT = process.env.PORT || 4000;
const HOST = process.env.HOST || '0.0.0.0';
const LOG_LEVEL = process.env.LOG_LEVEL || 'debug';
const uiUrl = 'http://localhost:3000';

var log = bunyan.createLogger({ name: 'server',
level: LOG_LEVEL });
log.info("Log initialized. logLevel=" + log.level());

const app = express();
const expressSwagger = require('express-swagger-generator')(app);

Expand Down Expand Up @@ -85,10 +90,10 @@ app.get('/healthcheck', function (req, res) {
*/
app.post('/token', (req, res) => {
try {
console.log('Entering app.post for /token.');
log.info('Entering app.post for /token.');
const body = req.body;
console.log('body: ' + JSON.stringify(body));
var grantType= body.grant_type; //=authorization_code
log.debug('body: ' + JSON.stringify(body));
var grantType = body.grant_type; //=authorization_code
var clientId = body.client_id; //=5qqbus6ukft6srjgqlijvk2465
var code = body.code; //=2a795117-43d5-4d4c-bdd6-0fc9632c0594
var redirectUri = body.redirect_uri; //=http%3A%2F%2Flocalhost%3A3000%2Fcallback
Expand All @@ -102,65 +107,73 @@ app.post('/token', (req, res) => {
var resource = body.resource || "";
var customParams = body.customParams || {};
var code_verifier = body.code_verifier;
var auth_type = body.auth_type || true;
var auth_style = body.auth_style;

console.log('grantType: ' + grantType);
console.log('clientId: ' + clientId);
console.log('code: ' + code);
console.log('redirectUri: ' + redirectUri);
console.log('scope: ' + scope);
console.log('tokenEndpoint: ' + tokenEndpoint);
console.log('sslValidate: ' + sslValidate);
console.log('clientSecret: ' + clientSecret);
console.log('username: ' + username);
console.log('password: ' + password);
console.log('refreshToken: ' + refreshToken);
console.log('resource: ' + resource);
log.debug('grantType: ' + grantType);
log.debug('clientId: ' + clientId);
log.debug('code: ' + code);
log.debug('redirectUri: ' + redirectUri);
log.debug('scope: ' + scope);
log.debug('tokenEndpoint: ' + tokenEndpoint);
log.debug('sslValidate: ' + sslValidate);
log.debug('clientSecret: ' + clientSecret);
log.debug('username: ' + username);
log.debug('password: ' + password);
log.debug('refreshToken: ' + refreshToken);
log.debug('resource: ' + resource);
Object.keys(customParams).forEach( (key) => {
console.log(key + ':' + customParams[key]);
log.debug(key + ':' + customParams[key]);
});
console.log("code_verifier: " + code_verifier);
console.log("auth_type: " + auth_type);
log.debug("code_verifier: " + code_verifier);
log.debug("auth_style: " + auth_style);
var parameterObject = {};
if(grantType == "authorization_code") {
parameterObject = {
grant_type: grantType,
client_id: clientId,
client_id: clientId,
code: code,
redirect_uri: redirectUri,
auth_type: auth_type
};
if (typeof code_verifier != "undefined") {
parameterObject.code_verifier = code_verifier
}
if (typeof clientSecret != "undefined" && clientSecret != "undefined") {
log.debug("clientSecret: " + clientSecret);
log.debug("auth_style: " + auth_style);
if (!!clientSecret && auth_style) {
parameterObject.client_secret = clientSecret;
}
} else if(grantType == "client_credentials") {
parameterObject = {
grant_type: grantType,
client_id: clientId,
client_secret: clientSecret,
auth_type: auth_type
grant_type: grantType
};
log.debug("clientSecret: " + clientSecret);
log.debug("auth_style: " + auth_style);
if ((typeof clientSecret != "undefined" && clientSecret != "undefined")
&& auth_style) {
parameterObject.client_secret = clientSecret;
}
} else if(grantType == "password") {
parameterObject = {
grant_type: grantType,
client_id: clientId,
client_secret: clientSecret,
username: username,
password: password
};
} else if(grantType == "refresh_token") {
parameterObject = {
grant_type: grantType,
client_id: clientId,
client_secret: clientSecret,
refresh_token: refreshToken,
auth_type: auth_type
};
log.debug("clientSecret: " + clientSecret);
log.debug("auth_style: " + auth_style);
if ((typeof clientSecret != "undefined" && clientSecret != "undefined")
&& auth_style) {
parameterObject.client_secret = clientSecret;
}
}
if(auth_style) {
parameterObject.client_id = clientId;
}

if(resource != "") {
parameterObject.resource = resource;
}
Expand All @@ -174,7 +187,7 @@ app.post('/token', (req, res) => {
parameterObject[key] = customParams[key];
});
}
console.log("parameterObject: " + JSON.stringify(parameterObject));
log.debug("parameterObject: " + JSON.stringify(parameterObject));

var parameterString = "";
Object.keys(parameterObject).forEach( (key) => {
Expand All @@ -186,11 +199,21 @@ app.post('/token', (req, res) => {
});
var headers = {
'content-type' : 'application/x-www-form-urlencoded'
}
// if (typeof code_verifier != "undefined") {
};
if ( typeof code_verifier != "undefined" ||
(grantType == "refresh_token" &&
!clientSecret)) {
headers.origin = uiUrl;
// }
}
if (!auth_style) {
// Put client_id + client_secret in Authorization header
headers.authorization = 'Basic ' + Buffer.from(clientId + ":" + clientSecret).toString('base64');
}
parameterString = parameterString.substring(0, parameterString.length - 1);
log.debug("Making call to Token Endpoint.");
log.debug("POST " + tokenEndpoint);
log.debug("Headers: " + JSON.stringify(headers));
log.debug("Body: " + parameterString);
axios({
method: 'post',
url: tokenEndpoint,
Expand All @@ -199,12 +222,16 @@ app.post('/token', (req, res) => {
httpsAgent: new (require('https').Agent)({ rejectUnauthorized: sslValidate })
})
.then(function (response) {
console.log('Response from OAuth2 Token Endpoint: ' + response.data);
log.debug('Response from OAuth2 Token Endpoint: ' + JSON.stringify(response.data));
log.debug('Headers: ' + response.headers);
res.status(response.status);
res.json(response.data);
})
.catch(function (error) {
console.log('Error from OAuth2 Token Endpoint: ' + error);
log.error('Error from OAuth2 Token Endpoint: ' + error);
log.error("Error Status: " + error.response.status);
log.error("Error Response body: " + JSON.stringify(error.response.data));
log.error("Error Response headers: " + error.response.headers);
if (error.response) {
res.status(error.response.status);
res.json(error.response.data);
Expand All @@ -214,7 +241,7 @@ app.post('/token', (req, res) => {
}
});
} catch (e) {
console.log('An error occurred: ' + e);
log.error('An error occurred: ' + e);
res.status(500);
res.json({ "error": e });
}
Expand Down Expand Up @@ -242,5 +269,5 @@ let options = {

expressSwagger(options)
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
log.info(`Running on http://${HOST}:${PORT}`);

16 changes: 13 additions & 3 deletions client/public/debugger2.html
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@
</div>
</td>
<td>
<input class="input" id="code" name="code" type="text" /><p>This is populated automatically.</p>
<input class="input" id="code" name="code" type="text" /><p>This is populated automatically when needed.</p>
</td>
</tr>
<tr>
Expand All @@ -187,8 +187,8 @@
</div>
</td>
<td>POST
<input id="postAuthStyleCheckToken" name="post-authstyle-yesno" onclick="debugger2.setPostAuthStyleCheckToken();" type="radio" />Header
<input id="headerAuthStyleCheckToken" name="header-authstyle-yesno" onclick="debugger2.setHeaderAuthStyleCheckToken();" type="radio" />
<input id="token_postAuthStyleCheckToken" name="token-post-authstyle-yesno" checked="true" onclick="debugger2.setPostAuthStyleCheckToken();" type="radio" />Header
<input id="token_headerAuthStyleCheckToken" name="token-header-authstyle-yesno" checked="false" onclick="debugger2.setHeaderAuthStyleCheckToken();" type="radio" />
</td>
</tr>
<tr>
Expand Down Expand Up @@ -365,6 +365,16 @@
<input class="input" id="refresh_client_secret" name="refresh_client_secret" type="text" />
</td>
</tr>
<tr>
<td>
<div class="tooltip"><label>Auth Style: </label><span class="tooltiptext">Authenticate application through post body parameters or authorization request header.</span>
</div>
</td>
<td>POST
<input id="refresh_postAuthStyleCheckToken" name="refresh-post-authstyle-yesno" checked="true" onclick="debugger2.setPostAuthStyleRefreshToken();" type="radio" />Header
<input id="refresh_headerAuthStyleCheckToken" name="refresh-header-authstyle-yesno" checked="false" onclick="debugger2.setHeaderAuthStyleRefreshToken();" type="radio" />
</td>
</tr>
<tr>
<td>
<div class="tooltip"><label>Scope </label><span class="tooltiptext">The requested scope. Must be the same as the original scope or subset.</span>
Expand Down
Loading

0 comments on commit 6ff4858

Please sign in to comment.