URI: 
       cloudfront.go - hugo - [fork] hugo port for 9front
  HTML git clone https://git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       cloudfront.go (2096B)
       ---
            1 // Copyright 2019 The Hugo Authors. All rights reserved.
            2 //
            3 // Licensed under the Apache License, Version 2.0 (the "License");
            4 // you may not use this file except in compliance with the License.
            5 // You may obtain a copy of the License at
            6 // http://www.apache.org/licenses/LICENSE-2.0
            7 //
            8 // Unless required by applicable law or agreed to in writing, software
            9 // distributed under the License is distributed on an "AS IS" BASIS,
           10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
           11 // See the License for the specific language governing permissions and
           12 // limitations under the License.
           13 
           14 //go:build withdeploy
           15 
           16 package deploy
           17 
           18 import (
           19         "context"
           20         "net/url"
           21         "time"
           22 
           23         "github.com/aws/aws-sdk-go-v2/aws"
           24         "github.com/aws/aws-sdk-go-v2/service/cloudfront"
           25         "github.com/aws/aws-sdk-go-v2/service/cloudfront/types"
           26         "github.com/gohugoio/hugo/deploy/deployconfig"
           27         gcaws "gocloud.dev/aws"
           28 )
           29 
           30 // V2ConfigFromURLParams will fail for any unknown params, so we need to remove them.
           31 // This is a mysterious API, but inspecting the code the known params are:
           32 var v2ConfigValidParams = map[string]bool{
           33         "endpoint": true,
           34         "region":   true,
           35         "profile":  true,
           36         "awssdk":   true,
           37 }
           38 
           39 // InvalidateCloudFront invalidates the CloudFront cache for distributionID.
           40 // Uses AWS credentials config from the bucket URL.
           41 func InvalidateCloudFront(ctx context.Context, target *deployconfig.Target) error {
           42         u, err := url.Parse(target.URL)
           43         if err != nil {
           44                 return err
           45         }
           46         vals := u.Query()
           47 
           48         // Remove any unknown params.
           49         for k := range vals {
           50                 if !v2ConfigValidParams[k] {
           51                         vals.Del(k)
           52                 }
           53         }
           54 
           55         cfg, err := gcaws.V2ConfigFromURLParams(ctx, vals)
           56         if err != nil {
           57                 return err
           58         }
           59         cf := cloudfront.NewFromConfig(cfg)
           60         req := &cloudfront.CreateInvalidationInput{
           61                 DistributionId: aws.String(target.CloudFrontDistributionID),
           62                 InvalidationBatch: &types.InvalidationBatch{
           63                         CallerReference: aws.String(time.Now().Format("20060102150405")),
           64                         Paths: &types.Paths{
           65                                 Items:    []string{"/*"},
           66                                 Quantity: aws.Int32(1),
           67                         },
           68                 },
           69         }
           70         _, err = cf.CreateInvalidation(ctx, req)
           71         return err
           72 }