@@ -665,51 +665,51 @@ function set_amz_headers(req, res) {
665
665
res . setHeader ( 'x-amz-id-2' , req . request_id ) ;
666
666
}
667
667
668
- const s3_error_options = {
669
- ErrorClass : S3Error ,
670
- error_missing_content_length : S3Error . MissingContentLength
671
- } ;
672
668
/**
669
+ * set_expiration_header sets the `x-amz-expiration` response header for GET, PUT, or HEAD object requests
670
+ * if the object matches any enabled bucket lifecycle rule
671
+ *
673
672
* @param {Object } req
674
673
* @param {http.ServerResponse } res
675
674
*/
676
675
async function set_expiration_header ( req , res ) {
677
- if ( req . method === 'HEAD' || req . method === 'GET' || req . method === 'PUT' ) {
678
- const rules = req . params . bucket && await req . object_sdk . read_bucket_lifecycle_config_info ( req . params . bucket ) ;
679
- const object_md = {
680
- bucket : req . params . bucket ,
681
- key : req . params . key ,
682
- size : req . headers [ 'x-amz-decoded-content-length' ] || req . headers [ 'content-length' ] ? parse_content_length ( req , s3_error_options ) : undefined ,
683
- tagging : req . body && req . body . Tagging ? s3_utils . parse_body_tagging_xml ( req ) : undefined ,
684
- } ;
676
+ const rules = req . params . bucket && await req . object_sdk . read_bucket_lifecycle_config_info ( req . params . bucket ) ;
677
+ const object_md = {
678
+ bucket : req . params . bucket ,
679
+ key : req . params . key ,
680
+ size : req . headers [ 'x-amz-decoded-content-length' ] || req . headers [ 'content-length' ] ? parse_content_length ( req , {
681
+ ErrorClass : S3Error ,
682
+ error_missing_content_length : S3Error . MissingContentLength
683
+ } ) : undefined ,
684
+ tagging : req . body && req . body . Tagging ? s3_utils . parse_body_tagging_xml ( req ) : undefined ,
685
+ } ;
685
686
686
- if ( object_md . key && rules ?. length > 0 ) { // updating x-amz-expiration if object key is present
687
- for ( const rule of rules ) {
688
- if ( rule ?. status !== 'Enabled' ) continue ;
687
+ if ( object_md . key && rules ?. length > 0 ) {
688
+ for ( const rule of rules ) {
689
+ if ( rule ?. status !== 'Enabled' ) continue ;
689
690
690
- const filter = rule ?. filter || { } ;
691
+ const filter = rule ?. filter || { } ;
691
692
692
- if ( filter . prefix && ! object_md ?. key . startsWith ( filter . prefix ) ) continue ;
693
+ if ( filter . prefix && ! object_md ?. key . startsWith ( filter . prefix ) ) continue ;
693
694
694
- if ( filter . object_size_greater_than && object_md ?. size <= filter . object_size_greater_than ) continue ;
695
- if ( filter . object_size_less_than && object_md ?. size >= filter . object_size_less_than ) continue ;
695
+ if ( filter . object_size_greater_than && object_md ?. size <= filter . object_size_greater_than ) continue ;
696
+ if ( filter . object_size_less_than && object_md ?. size >= filter . object_size_less_than ) continue ;
696
697
697
- if ( filter . tagging && Array . isArray ( filter . tagging ) ) {
698
- const obj_tags = object_md ?. tagging || [ ] ;
698
+ if ( filter . tagging && Array . isArray ( filter . tagging ) ) {
699
+ const obj_tags = object_md ?. tagging || [ ] ;
699
700
700
- const matches_all_tags = filter . tagging . every ( filter_tag =>
701
- obj_tags . some ( obj_tag => obj_tag . key === filter_tag . key && obj_tag . value === filter_tag . value )
702
- ) ;
701
+ const matches_all_tags = filter . tagging . every ( filter_tag =>
702
+ obj_tags . some ( obj_tag => obj_tag . key === filter_tag . key && obj_tag . value === filter_tag . value )
703
+ ) ;
703
704
704
- if ( ! matches_all_tags ) continue ;
705
- }
705
+ if ( ! matches_all_tags ) continue ;
706
+ }
706
707
707
- const expiration_head = parse_expiration_header ( rule ?. expiration , rule ?. id ) ;
708
- if ( expiration_head ) {
709
- dbg . log0 ( 'set x_amz_expiration header from applied rule: ' , rule ) ;
710
- res . setHeader ( 'x-amz-expiration' , expiration_head ) ;
711
- break ; // apply only for first matching rule
712
- }
708
+ const expiration_header = parse_expiration_header ( rule ?. expiration , rule ?. id ) ;
709
+ if ( expiration_header ) {
710
+ dbg . log1 ( 'set x_amz_expiration header from applied rule: ' , rule ) ;
711
+ res . setHeader ( 'x-amz-expiration' , expiration_header ) ;
712
+ break ; // apply only for first matching rule
713
713
}
714
714
}
715
715
}
0 commit comments