Skip to content

Commit 54f0163

Browse files
committed
feat(registry): add new proxy headers setting
1 parent 75ea7e4 commit 54f0163

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Knex } from 'knex';
2+
import { Scope, SettingKeys, SettingTypes } from '../settings/interfaces';
3+
4+
export async function up(knex: Knex): Promise<any> {
5+
await knex('settings').insert({
6+
key: SettingKeys.ProxyHeaders,
7+
value: 'null',
8+
default: 'null',
9+
scope: Scope.Ilc,
10+
secret: false,
11+
meta: JSON.stringify({
12+
type: SettingTypes.StringArray,
13+
}),
14+
});
15+
}
16+
17+
export async function down(knex: Knex): Promise<any> {
18+
await knex('settings').whereIn('key', [SettingKeys.ProxyHeaders]).delete();
19+
}

registry/server/settings/interfaces/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export enum SettingKeys {
2727
CspConfig = 'cspConfig',
2828
CspTrustedLocalHosts = 'cspTrustedLocalHosts',
2929
CspEnableStrict = 'cspEnableStrict',
30+
ProxyHeaders = 'proxyHeaders',
3031
}
3132

3233
export const AllowedSettingKeysForDomains = [SettingKeys.CspConfig];
@@ -140,6 +141,10 @@ const valueSchema = Joi.alternatives().conditional('key', {
140141
),
141142
then: Joi.array().items(Joi.string()),
142143
},
144+
{
145+
is: Joi.valid(SettingKeys.ProxyHeaders),
146+
then: Joi.array().items(Joi.string()).allow(null),
147+
},
143148
{
144149
is: Joi.valid(SettingKeys.BaseUrl, SettingKeys.AuthOpenIdDiscoveryUrl),
145150
then: Joi.string()

registry/tests/settings.spec.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,14 @@ describe(url, () => {
194194
type: SettingTypes.String,
195195
},
196196
});
197+
chai.expect(response.body).to.deep.include({
198+
key: SettingKeys.ProxyHeaders,
199+
scope: Scope.Ilc,
200+
secret: false,
201+
meta: {
202+
type: SettingTypes.StringArray,
203+
},
204+
});
197205
});
198206

199207
it('should return a setting and exclude a value from a secret record', async () => {
@@ -724,6 +732,50 @@ describe(url, () => {
724732
}
725733
});
726734

735+
it(`should update ${SettingKeys.ProxyHeaders} with an array of strings`, async () => {
736+
try {
737+
const response = await req
738+
.put(urlJoin(url, SettingKeys.ProxyHeaders))
739+
.send({
740+
key: SettingKeys.ProxyHeaders,
741+
value: ['X-Forwarded-For', 'X-Real-IP'],
742+
})
743+
.expect(200);
744+
745+
chai.expect(response.body).to.deep.equal({
746+
key: SettingKeys.ProxyHeaders,
747+
value: ['X-Forwarded-For', 'X-Real-IP'],
748+
scope: Scope.Ilc,
749+
secret: false,
750+
meta: {
751+
type: SettingTypes.StringArray,
752+
},
753+
});
754+
} finally {
755+
await req
756+
.put(urlJoin(url, SettingKeys.ProxyHeaders))
757+
.send({ key: SettingKeys.ProxyHeaders, value: null })
758+
.expect(200);
759+
}
760+
});
761+
762+
it(`should update ${SettingKeys.ProxyHeaders} with null`, async () => {
763+
try {
764+
const response = await req
765+
.put(urlJoin(url, SettingKeys.ProxyHeaders))
766+
.send({ key: SettingKeys.ProxyHeaders, value: null })
767+
.expect(200);
768+
769+
chai.expect(response.body).to.have.property('key', SettingKeys.ProxyHeaders);
770+
chai.expect(response.body).to.not.have.property('value');
771+
} finally {
772+
await req
773+
.put(urlJoin(url, SettingKeys.ProxyHeaders))
774+
.send({ key: SettingKeys.ProxyHeaders, value: null })
775+
.expect(200);
776+
}
777+
});
778+
727779
it('should deny access when a user is not authorized', async () => {
728780
await reqWithAuth
729781
.put(urlJoin(url, SettingKeys.AmdDefineCompatibilityMode))

0 commit comments

Comments
 (0)