public function define_template()

in admin/AmazonAI-Cloudformation.php [596:751]


    public function define_template($acm = false, $cf = false) {
        $alias = get_option('amazon_cf_alias');
        $template_head = '
        {
            "Resources": {';
        $cf_resource = '
                "'.$this->args['cf_logical_resourceid'].'": {
                    "Type": "AWS::CloudFront::Distribution",
                    "Properties": {
                        "DistributionConfig": {
                            "Origins": [{
                                "DomainName": "'.$this->args['origin'].'",
                                "Id": "'.$this->args['origin_id'].'",
                                "CustomOriginConfig": {
                                        "HTTPPort": "80",
                                        "HTTPSPort": "443",
                                        "OriginProtocolPolicy": "match-viewer",
                                        "OriginSSLProtocols" : ["TLSv1", "TLSv1.1", "TLSv1.2"]
                                }
                            }],
                            "HttpVersion" : "http2",
                            "Enabled": "true",
                            "Comment": "'.$this->args['comment'].'",
                            "DefaultRootObject": "",
                            "Aliases": ["'.$alias.'"],
                            "CacheBehaviors": [{
                                    "AllowedMethods" : ["GET","HEAD"],
                                    "ForwardedValues" : {
                                        "QueryString": "true",
                                        "Cookies": {
                                            "Forward": "none"
                                        }
                                    },
                                    "PathPattern" : "wp-content/*",
                                    "TargetOriginId" : "'.$this->args['origin_id'].'",
                                    "ViewerProtocolPolicy": "redirect-to-https"
                                },
                                {
                                    "AllowedMethods" : ["GET","HEAD"],
                                    "ForwardedValues" : {
                                        "QueryString": "true",
                                        "Cookies": {
                                            "Forward": "none"
                                        }                                    
                                    },
                                    "PathPattern" : "wp-includes/*",
                                    "TargetOriginId" : "'.$this->args['origin_id'].'",
                                    "ViewerProtocolPolicy": "redirect-to-https"
                                },
                                {
                                    "AllowedMethods" : ["GET", "HEAD", "OPTIONS", "PUT", "PATCH", "POST", "DELETE"],
                                    "ForwardedValues" : {
                                        "QueryString": "true",
                                        "Cookies": {
                                            "Forward": "all"
                                        },
                                        "Headers": [
                                                "*"
                                            ]                                        
                                    },
                                    "PathPattern" : "wp-admin/*",
                                    "TargetOriginId" : "'.$this->args['origin_id'].'",
                                    "ViewerProtocolPolicy": "redirect-to-https"
                                },
                                {
                                    "AllowedMethods" : ["GET", "HEAD", "OPTIONS", "PUT", "PATCH", "POST", "DELETE"],
                                    "ForwardedValues" : {
                                        "QueryString": "true",
                                        "Cookies": {
                                            "Forward": "all"
                                            },
                                        "Headers": [
                                                "*"
                                            ]                                            
                                        },
                                    "PathPattern" : "wp-login.php",
                                    "TargetOriginId" : "'.$this->args['origin_id'].'",
                                    "ViewerProtocolPolicy": "redirect-to-https"
                                }],                            
                            "DefaultCacheBehavior": {
                                "AllowedMethods" : ["GET", "HEAD", "OPTIONS", "PUT", "PATCH", "POST", "DELETE"],
                                "SmoothStreaming": "false",
                                "ForwardedValues": {
                                    "QueryString": "true",
                                    "Cookies": {
                                        "Forward": "whitelist",
                                        "WhitelistedNames": ["comment_*","wordpress_*","wp-settings-*"]
                                    },
                                    "Headers": [
                                            "Host",
                                            "CloudFront-Forwarded-Proto",
                                            "CloudFront-Is-Desktop-Viewer",
                                            "CloudFront-Is-Mobile-Viewer",
                                            "CloudFront-Is-Tablet-Viewer"
                                        ]                                     
                                },
                                "TargetOriginId": "'.$this->args['origin_id'].'",
                                "ViewerProtocolPolicy": "redirect-to-https"
                            },
                            "PriceClass": "PriceClass_200",
                            "Restrictions" : {
                                "GeoRestriction" : {
                                    "RestrictionType" : "none"
                                }
                            },';
        if (get_option('acm_arn')) {
            $cf_resource = $cf_resource.'
                            "ViewerCertificate": {
                                "AcmCertificateArn": "'.get_option('acm_arn').'",
                                "MinimumProtocolVersion": "TLSv1",
                                "SslSupportMethod": "sni-only"
                            }';
        }
        else {
            $cf_resource = $cf_resource.'
                            "ViewerCertificate": {
                                "CloudFrontDefaultCertificate": "true"
                            }';
        }

        $cf_resource = $cf_resource.'
                        },
                        "Tags": [{
                            "Key": "createdBy",
                            "Value": "AWSForWordPressPlugin"
                            }]
                    }
                }';

        $acm_resource = '
                "'.$this->args['acm_logical_resourceid'].'" : {
                    "Type" : "AWS::CertificateManager::Certificate",
                    "Properties" : {
                        "DomainName" : "'.$this->args['acm_domain'].'",
                        "ValidationMethod" : "DNS",
                        "Tags": [{
                            "Key": "createdBy",
                            "Value": "AWSForWordPressPlugin"
                        }]
                    }
                }';

        $template_tail = '
            }
        }'; 
        $template = $template_head;
        if($acm and $cf) {
            $template = $template.$acm_resource.','.$cf_resource;
        }
        else if($acm) {
            $template = $template.$acm_resource;
        }
        $template = $template.$template_tail;
        $this->args['template'] = $template;
        return $template;
    }