-2

I need to Purge all my Images in my Website which is using AKAMAI CDN. I have written the code for purging one file. PFB the code for single file purging. But my requirement is to purge all files in the website. Can anyone suggest how to achieve this.

Thanks

// // © 2016 WorldVentures. All rights reserved. //

using Akamai.EdgeGrid.Auth;
using Akamai.Utils;
using CMS;
using CMS.DataEngine;
using CMS.DocumentEngine;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;

// Registers the custom module into the system
[assembly: RegisterModule(typeof(AkamaiPurge))]

public class AkamaiPurge : Module
{
    // Module class constructor, the system registers the module under the name "CustomInit"
    public AkamaiPurge()
        : base("CustomInit")
    {
    }

    // Contains initialization code that is executed when the application starts
    protected override void OnInit()
    {
        base.OnInit();

        // Assigns custom handlers to events
        DocumentEvents.Insert.After += Document_Insert_After;
        DocumentEvents.Update.After += Document_Update_After;
        DocumentEvents.Delete.After += Document_Delete_After;
    }

    /// <summary>
    /// Will be triggered when any document is added
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Document_Insert_After(object sender, DocumentEventArgs e)
    {
       // PurgeCache();
        PurgeCacheAkamai();
    }
    /// <summary>
    /// Will be triggered when any document is Updated
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Document_Update_After(object sender, DocumentEventArgs e)
    {
        //PurgeCache();
        PurgeCacheAkamai();
    }

    /// <summary>
    /// Will be triggered when any document is Deleted
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Document_Delete_After(object sender, DocumentEventArgs e)
    {
        //PurgeCache();
        PurgeCacheAkamai();
    }

    /// <summary>
    /// Following function will invalidate cache from Akamai server
    /// </summary>
    public void PurgeCache()
    {

        string secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        string clientToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        string accessToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        string apiurl = "https://akab-7t5mh54r7lq3a7d7-js5q6mdtx42qimcn.purge.akamaiapis.net/ccu/v3/invalidate/url/production";

        List<string> headers = new List<string>();
        string httpMethod = "POST";
        string data = "{\"hostname\": \"www.qa.worldventures.com\",\"objects\": [\"www.qa.worldventures.com/getmedia/9931b92a-c7f3-4a71-ab27-37e2b13572c0/should-be-here.jpg?width=2541&height=1811&ext=.jpg\"]}";

        Stream uploadStream = null;
        uploadStream = new MemoryStream(data.ToByteArray());

        var uri = new Uri(apiurl);
        var request = WebRequest.Create(uri);

        request.Method = httpMethod;
        var signer = new EdgeGridV1Signer();
        var credential = new ClientCredential(clientToken, accessToken, secret);

        signer.Sign(request, credential);

        using (var result = signer.Execute(request, credential))
        {
            using (result)
            {
                using (var reader = new StreamReader(result))
                {
                    string value = reader.ReadToEnd();
                }
            }
        }
    }

    /// <summary>
    /// Following function will invalidate cache from Akamai server
    /// </summary>
    public void PurgeCacheAkamai()
    {
        string secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        string clientToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        string accessToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        string apiurl = "https://akab-7t5mh54r7lq3a7d7-js5q6mdtx42qimcn.purge.akamaiapis.net/ccu/v3/invalidate/url/production";
        List<string> headers = new List<string>();
        string httpMethod = "POST";
        string outputfile = null;
        string data = "{\"hostname\": \"www.qa.worldventures.com\",\"objects\": [\"www.qa.worldventures.com/getmedia/9931b92a-c7f3-4a71-ab27-37e2b13572c0/should-be-here.jpg?width=2541&height=1811&ext=.jpg\"]}";
        int maxBodySize = 2048;

        EdgeGridV1Signer signer = new EdgeGridV1Signer(null, maxBodySize);
        ClientCredential credential = new ClientCredential(clientToken, accessToken, secret);

        Stream uploadStream = null;
        uploadStream = new MemoryStream(data.ToByteArray());

        var uri = new Uri(apiurl);
        var request = WebRequest.Create(uri);

        foreach (string header in headers) request.Headers.Add(header);
        request.Method = httpMethod;

        Stream output = Console.OpenStandardOutput();
        if (outputfile != null)
            output = new FileInfo(outputfile).OpenWrite();

        signer.Sign(request, credential, uploadStream);

        using (var result = signer.Execute(request, credential, uploadStream))
        {
            using (output)
            {
                using (result)
                {
                    using (var reader = new StreamReader(result))
                    {
                        string value = reader.ReadToEnd();
                    }
                }
            }
        }

        //using (var result = signer.Execute(request, credential))
        //{
        //    using (result)
        //    {
        //        using (var reader = new StreamReader(result))
        //        {
        //            string value = reader.ReadToEnd();
        //        }
        //    }
        //}
    }
    public void PurgeCacheAkamai2()
    {
        // Create a request using a URL that can receive a post.   
        WebRequest request = WebRequest.Create("https://akab-7t5mh54r7lq3a7d7-js5q6mdtx42qimcn.purge.akamaiapis.net/ccu/v3/invalidate/url/production");
        // Set the Method property of the request to POST.  
        request.Method = "POST";
        // Create POST data and convert it to a byte array.  
        string postData = "This is a test that posts this string to a Web server.";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        // Set the ContentType property of the WebRequest.  
        request.ContentType = "application/x-www-form-urlencoded";
        // Set the ContentLength property of the WebRequest.  
        request.ContentLength = byteArray.Length;
        // Get the request stream.  
        Stream dataStream = request.GetRequestStream();
        // Write the data to the request stream.  
        dataStream.Write(byteArray, 0, byteArray.Length);
        // Close the Stream object.  
        dataStream.Close();
        // Get the response.  
        WebResponse response = request.GetResponse();
        // Display the status.  
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        // Get the stream containing content returned by the server.  
        dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.  
        StreamReader reader = new StreamReader(dataStream);
        // Read the content.  
        string responseFromServer = reader.ReadToEnd();
        // Display the content.  
        Console.WriteLine(responseFromServer);
        // Clean up the streams.  
        reader.Close();
        dataStream.Close();
        response.Close();
    }
}
Mirza Obaid
  • 1,707
  • 3
  • 23
  • 35

1 Answers1

0

It depends on how you want to do it.

For example if you are still using CCU or Fast purge feature of akamai.

If you are using CCU or fast purge then best thing to do is, tag all your images to a dedicated CP Code. Once done you can purge the CP Code which will intern purge all the images.

Few useful documents that you can refer for CCU: https://developer.akamai.com/api/purge/ccu-v2/overview.html

For Fast Purge: https://control.akamai.com/dl/customers/FIMA/Fast-Purge-QuickRef.pdf https://github.com/akamai-open/api-kickstart/tree/master/examples

Thank, Vinod

Vinod
  • 503
  • 4
  • 8