Add CORS headers.

This commit is contained in:
Thomas E Lackey 2023-08-17 17:02:19 -05:00
parent 1686ec01be
commit d2aded6022
4 changed files with 26 additions and 6 deletions

View File

@ -1,9 +1,11 @@
export const Config = {
LISTEN_PORT: process.env.CERC_KCUSERREG_LISTEN_PORT || 9292,
LISTEN_PORT: parseInt(process.env.CERC_KCUSERREG_LISTEN_PORT || '9292'),
LISTEN_ADDR: parseInt(process.env.CERC_KCUSERREG_LISTEN_ADDR || '0.0.0.0'),
API_URL: process.env.CERC_KCUSERREG_API_URL || 'http://localhost:57198/auth',
REG_USER: process.env.CERC_KCUSERREG_REG_USER || 'admin',
REG_PW: process.env.CERC_KCUSERREG_REG_PW || 'admin',
REG_CLIENT_ID: process.env.CERC_KCUSERREG_REG_CLIENT_ID || 'admin-cli',
TARGET_REALM: process.env.CERC_KCUSERREG_TARGET_REALM || 'cerc',
TARGET_GROUPS: process.env.CERC_KCUSERREG_TARGET_GROUPS?.split(',') || ['eth'],
CREATE_ENABLED: "true" === (process.env.CERC_KCUSERREG_CREATE_ENABLED || 'true')
};

11
src/middleware/cors.ts Normal file
View File

@ -0,0 +1,11 @@
import {MiddlewareFunction} from 'http-request-handler';
import {Logger} from '../util/logger.js';
const log = new Logger('cerc:keycloak-userreg:mw:cors');
export const CorsMW: MiddlewareFunction = (request, response, data, resolve, reject) => {
response.setHeader('Access-Control-Allow-Origin', '*')
response.setHeader('Access-Control-Allow-Headers', '*')
resolve()
};

View File

@ -7,7 +7,7 @@ import {Logger} from '../util/logger.js';
const log = new Logger('cerc:keycloak-userreg:mw:register');
export const RegisterMW : MiddlewareFunction = async (request, response, data, resolve, reject) =>{
if (!data?.json?.username) {
if (!data?.json?.email && !data?.json?.username) {
log.error(data);
log.error('Invalid request', request.body);
reject(400);
@ -15,8 +15,9 @@ export const RegisterMW : MiddlewareFunction = async (request, response, data, r
}
const userRequest = {
username: data.json.username,
enabled: true,
username: data.json.username || data.json.email,
email: data.json.email,
enabled: Config.CREATE_ENABLED,
groups: Config.TARGET_GROUPS,
realm: Config.TARGET_REALM
};
@ -31,6 +32,7 @@ export const RegisterMW : MiddlewareFunction = async (request, response, data, r
log.debug(user);
response.send({
'username': user?.username,
'email': user?.email,
'api-key': (user?.attributes as any)['api-key']
});
resolve();

View File

@ -2,6 +2,7 @@ import * as http from 'http';
import {HttpMethod, HTTPRequestHandler} from 'http-request-handler';
import {Config} from './config.js';
import {CorsMW} from "./middleware/cors.js";
import {JsonParserMW} from './middleware/json_parser.js';
import {RegisterMW} from './middleware/register.js';
import {Logger} from './util/logger.js';
@ -9,9 +10,13 @@ import {Logger} from './util/logger.js';
const log = new Logger('cerc:keycloak-userreg');
const handler = new HTTPRequestHandler();
handler.on(HttpMethod.HTTP_POST, '/register', [JsonParserMW, RegisterMW], async (request, response) => {
handler.on(HttpMethod.HTTP_OPTIONS, '/register', [CorsMW], async (request, response) => {
response.ok()
});
handler.on(HttpMethod.HTTP_POST, '/register', [CorsMW, JsonParserMW, RegisterMW], async (request, response) => {
// If nothing has answered by now, return an error.
response.error(500);
});
http.createServer(handler.getListener()).listen(Config.LISTEN_PORT);
http.createServer(handler.getListener()).listen(Config.LISTEN_PORT, '0.0.0.0');