Compare commits
No commits in common. "f4894a6d6ebb36ba1a559de4811180cb942d55a7" and "cb01346d07db7a874d3b5dcb38cde94099a030e5" have entirely different histories.
f4894a6d6e
...
cb01346d07
|
@ -36,7 +36,6 @@ export type ParsedRetention =
|
||||||
export default class ObjectLockConfiguration {
|
export default class ObjectLockConfiguration {
|
||||||
_parsedXml: any;
|
_parsedXml: any;
|
||||||
_config: Config;
|
_config: Config;
|
||||||
_days: number | null;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an Object Lock Configuration instance
|
* Create an Object Lock Configuration instance
|
||||||
|
@ -46,7 +45,6 @@ export default class ObjectLockConfiguration {
|
||||||
constructor(xml: any) {
|
constructor(xml: any) {
|
||||||
this._parsedXml = xml;
|
this._parsedXml = xml;
|
||||||
this._config = {};
|
this._config = {};
|
||||||
this._days = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -185,8 +183,6 @@ export default class ObjectLockConfiguration {
|
||||||
this._config.rule = {};
|
this._config.rule = {};
|
||||||
this._config.rule.mode = validMode.mode;
|
this._config.rule.mode = validMode.mode;
|
||||||
this._config.rule[validTime.timeType!] = validTime.timeValue;
|
this._config.rule[validTime.timeType!] = validTime.timeValue;
|
||||||
// Store the number of days
|
|
||||||
this._days = validTime.timeType === 'years' ? 365 * validTime.timeValue : validTime.timeValue;
|
|
||||||
}
|
}
|
||||||
return validConfig;
|
return validConfig;
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,7 +171,6 @@ export default class RequestContext {
|
||||||
_needTagEval: boolean;
|
_needTagEval: boolean;
|
||||||
_foundAction?: string;
|
_foundAction?: string;
|
||||||
_foundResource?: string;
|
_foundResource?: string;
|
||||||
_objectLockRetentionDays?: number | null;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
headers: { [key: string]: string | string[] },
|
headers: { [key: string]: string | string[] },
|
||||||
|
@ -193,7 +192,6 @@ export default class RequestContext {
|
||||||
requestObjTags?: string,
|
requestObjTags?: string,
|
||||||
existingObjTag?: string,
|
existingObjTag?: string,
|
||||||
needTagEval?: false,
|
needTagEval?: false,
|
||||||
objectLockRetentionDays?: number,
|
|
||||||
) {
|
) {
|
||||||
this._headers = headers;
|
this._headers = headers;
|
||||||
this._query = query;
|
this._query = query;
|
||||||
|
@ -226,7 +224,6 @@ export default class RequestContext {
|
||||||
this._requestObjTags = requestObjTags || null;
|
this._requestObjTags = requestObjTags || null;
|
||||||
this._existingObjTag = existingObjTag || null;
|
this._existingObjTag = existingObjTag || null;
|
||||||
this._needTagEval = needTagEval || false;
|
this._needTagEval = needTagEval || false;
|
||||||
this._objectLockRetentionDays = objectLockRetentionDays || null;
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +255,6 @@ export default class RequestContext {
|
||||||
requestObjTags: this._requestObjTags,
|
requestObjTags: this._requestObjTags,
|
||||||
existingObjTag: this._existingObjTag,
|
existingObjTag: this._existingObjTag,
|
||||||
needTagEval: this._needTagEval,
|
needTagEval: this._needTagEval,
|
||||||
objectLockRetentionDays: this._objectLockRetentionDays,
|
|
||||||
};
|
};
|
||||||
return JSON.stringify(requestInfo);
|
return JSON.stringify(requestInfo);
|
||||||
}
|
}
|
||||||
|
@ -299,7 +295,6 @@ export default class RequestContext {
|
||||||
obj.requestObjTags,
|
obj.requestObjTags,
|
||||||
obj.existingObjTag,
|
obj.existingObjTag,
|
||||||
obj.needTagEval,
|
obj.needTagEval,
|
||||||
obj.objectLockRetentionDays,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -703,24 +698,4 @@ export default class RequestContext {
|
||||||
getNeedTagEval() {
|
getNeedTagEval() {
|
||||||
return this._needTagEval;
|
return this._needTagEval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get object lock retention days
|
|
||||||
*
|
|
||||||
* @returns objectLockRetentionDays - object lock retention days
|
|
||||||
*/
|
|
||||||
getObjectLockRetentionDays() {
|
|
||||||
return this._objectLockRetentionDays;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set object lock retention days
|
|
||||||
*
|
|
||||||
* @param objectLockRetentionDays - object lock retention days
|
|
||||||
* @returns itself
|
|
||||||
*/
|
|
||||||
setObjectLockRetentionDays(objectLockRetentionDays: number) {
|
|
||||||
this._objectLockRetentionDays = objectLockRetentionDays;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,10 +324,7 @@ export function evaluateAllPolicies(
|
||||||
requestContext: RequestContext,
|
requestContext: RequestContext,
|
||||||
allPolicies: any[],
|
allPolicies: any[],
|
||||||
log: Logger,
|
log: Logger,
|
||||||
): {
|
): string {
|
||||||
verdict: string;
|
|
||||||
isImplicit: boolean;
|
|
||||||
} {
|
|
||||||
log.trace('evaluating all policies');
|
log.trace('evaluating all policies');
|
||||||
let allow = false;
|
let allow = false;
|
||||||
let allowWithTagCondition = false;
|
let allowWithTagCondition = false;
|
||||||
|
@ -336,10 +333,7 @@ export function evaluateAllPolicies(
|
||||||
const singlePolicyVerdict = evaluatePolicy(requestContext, allPolicies[i], log);
|
const singlePolicyVerdict = evaluatePolicy(requestContext, allPolicies[i], log);
|
||||||
// If there is any Deny, just return Deny
|
// If there is any Deny, just return Deny
|
||||||
if (singlePolicyVerdict === 'Deny') {
|
if (singlePolicyVerdict === 'Deny') {
|
||||||
return {
|
return 'Deny';
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: false,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
if (singlePolicyVerdict === 'Allow') {
|
if (singlePolicyVerdict === 'Allow') {
|
||||||
allow = true;
|
allow = true;
|
||||||
|
@ -350,7 +344,6 @@ export function evaluateAllPolicies(
|
||||||
} // else 'Neutral'
|
} // else 'Neutral'
|
||||||
}
|
}
|
||||||
let verdict;
|
let verdict;
|
||||||
let isImplicit = false;
|
|
||||||
if (allow) {
|
if (allow) {
|
||||||
if (denyWithTagCondition) {
|
if (denyWithTagCondition) {
|
||||||
verdict = 'NeedTagConditionEval';
|
verdict = 'NeedTagConditionEval';
|
||||||
|
@ -362,9 +355,8 @@ export function evaluateAllPolicies(
|
||||||
verdict = 'NeedTagConditionEval';
|
verdict = 'NeedTagConditionEval';
|
||||||
} else {
|
} else {
|
||||||
verdict = 'Deny';
|
verdict = 'Deny';
|
||||||
isImplicit = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.trace('result of evaluating all policies', { verdict, isImplicit });
|
log.trace('result of evaluating all policies', { verdict });
|
||||||
return { verdict, isImplicit };
|
return verdict;
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,9 +166,6 @@ export function findConditionKey(
|
||||||
return requestContext.getNeedTagEval() && requestContext.getRequestObjTags()
|
return requestContext.getNeedTagEval() && requestContext.getRequestObjTags()
|
||||||
? getTagKeys(requestContext.getRequestObjTags()!)
|
? getTagKeys(requestContext.getRequestObjTags()!)
|
||||||
: undefined;
|
: undefined;
|
||||||
// The maximum retention period is 100 years.
|
|
||||||
case 's3:object-lock-remaining-retention-days':
|
|
||||||
return requestContext.getObjectLockRetentionDays() || undefined;
|
|
||||||
default:
|
default:
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1425,10 +1425,7 @@ describe('policyEvaluator', () => {
|
||||||
const result = evaluateAllPolicies(requestContext,
|
const result = evaluateAllPolicies(requestContext,
|
||||||
[samples['arn:aws:iam::aws:policy/AmazonS3FullAccess'],
|
[samples['arn:aws:iam::aws:policy/AmazonS3FullAccess'],
|
||||||
samples['Deny Bucket Policy']], log);
|
samples['Deny Bucket Policy']], log);
|
||||||
assert.deepStrictEqual(result, {
|
assert.strictEqual(result, 'Deny');
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: false,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should deny access if request action is not in any policy', () => {
|
it('should deny access if request action is not in any policy', () => {
|
||||||
|
@ -1439,10 +1436,7 @@ describe('policyEvaluator', () => {
|
||||||
const result = evaluateAllPolicies(requestContext,
|
const result = evaluateAllPolicies(requestContext,
|
||||||
[samples['Multi-Statement Policy'],
|
[samples['Multi-Statement Policy'],
|
||||||
samples['Variable Bucket Policy']], log);
|
samples['Variable Bucket Policy']], log);
|
||||||
assert.deepStrictEqual(result, {
|
assert.strictEqual(result, 'Deny');
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: true,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should deny access if request resource is not in any policy', () => {
|
it('should deny access if request resource is not in any policy', () => {
|
||||||
|
@ -1454,10 +1448,7 @@ describe('policyEvaluator', () => {
|
||||||
samples['Multi-Statement Policy'],
|
samples['Multi-Statement Policy'],
|
||||||
samples['Variable Bucket Policy'],
|
samples['Variable Bucket Policy'],
|
||||||
], log);
|
], log);
|
||||||
assert.deepStrictEqual(result, {
|
assert.strictEqual(result, 'Deny');
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: true,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const TestMatrixPolicies = {
|
const TestMatrixPolicies = {
|
||||||
|
@ -1516,115 +1507,67 @@ describe('policyEvaluator', () => {
|
||||||
const TestMatrix = [
|
const TestMatrix = [
|
||||||
{
|
{
|
||||||
policiesToEvaluate: [],
|
policiesToEvaluate: [],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Deny',
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Allow'],
|
policiesToEvaluate: ['Allow'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Allow',
|
||||||
verdict: 'Allow',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Neutral'],
|
policiesToEvaluate: ['Neutral'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Deny',
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Deny'],
|
policiesToEvaluate: ['Deny'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Deny',
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Allow', 'Allow'],
|
policiesToEvaluate: ['Allow', 'Allow'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Allow',
|
||||||
verdict: 'Allow',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Allow', 'Neutral'],
|
policiesToEvaluate: ['Allow', 'Neutral'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Allow',
|
||||||
verdict: 'Allow',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Neutral', 'Allow'],
|
policiesToEvaluate: ['Neutral', 'Allow'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Allow',
|
||||||
verdict: 'Allow',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Neutral', 'Neutral'],
|
policiesToEvaluate: ['Neutral', 'Neutral'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Deny',
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Allow', 'Deny'],
|
policiesToEvaluate: ['Allow', 'Deny'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Deny',
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['AllowWithTagCondition'],
|
policiesToEvaluate: ['AllowWithTagCondition'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'NeedTagConditionEval',
|
||||||
verdict: 'NeedTagConditionEval',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Allow', 'AllowWithTagCondition'],
|
policiesToEvaluate: ['Allow', 'AllowWithTagCondition'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Allow',
|
||||||
verdict: 'Allow',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['DenyWithTagCondition'],
|
policiesToEvaluate: ['DenyWithTagCondition'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Deny',
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['Allow', 'DenyWithTagCondition'],
|
policiesToEvaluate: ['Allow', 'DenyWithTagCondition'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'NeedTagConditionEval',
|
||||||
verdict: 'NeedTagConditionEval',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['AllowWithTagCondition', 'DenyWithTagCondition'],
|
policiesToEvaluate: ['AllowWithTagCondition', 'DenyWithTagCondition'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'NeedTagConditionEval',
|
||||||
verdict: 'NeedTagConditionEval',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['AllowWithTagCondition', 'DenyWithTagCondition', 'Deny'],
|
policiesToEvaluate: ['AllowWithTagCondition', 'DenyWithTagCondition', 'Deny'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'Deny',
|
||||||
verdict: 'Deny',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
policiesToEvaluate: ['DenyWithTagCondition', 'AllowWithTagCondition', 'Allow'],
|
policiesToEvaluate: ['DenyWithTagCondition', 'AllowWithTagCondition', 'Allow'],
|
||||||
expectedPolicyEvaluation: {
|
expectedPolicyEvaluation: 'NeedTagConditionEval',
|
||||||
verdict: 'NeedTagConditionEval',
|
|
||||||
isImplicit: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -1639,7 +1582,7 @@ describe('policyEvaluator', () => {
|
||||||
requestContext,
|
requestContext,
|
||||||
testCase.policiesToEvaluate.map(policyName => TestMatrixPolicies[policyName]),
|
testCase.policiesToEvaluate.map(policyName => TestMatrixPolicies[policyName]),
|
||||||
log);
|
log);
|
||||||
assert.deepStrictEqual(result, testCase.expectedPolicyEvaluation);
|
assert.strictEqual(result, testCase.expectedPolicyEvaluation);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -111,7 +111,6 @@ describe('RequestContext', () => {
|
||||||
specificResource: 'specific-resource',
|
specificResource: 'specific-resource',
|
||||||
sslEnabled: true,
|
sslEnabled: true,
|
||||||
tokenIssueTime: null,
|
tokenIssueTime: null,
|
||||||
objectLockRetentionDays: null,
|
|
||||||
};
|
};
|
||||||
it('serialize()', () => {
|
it('serialize()', () => {
|
||||||
assert.deepStrictEqual(JSON.parse(rc.serialize()), SerializedFields);
|
assert.deepStrictEqual(JSON.parse(rc.serialize()), SerializedFields);
|
||||||
|
|
Loading…
Reference in New Issue