Skip to content
This repository was archived by the owner on Oct 8, 2022. It is now read-only.

Commit f6e148d

Browse files
committed
1.1 Version
Added support for CDN-enabling and disabling of containers.
1 parent 5b57523 commit f6e148d

File tree

4 files changed

+113
-11
lines changed

4 files changed

+113
-11
lines changed

Diff for: CloudFiles/CloudFilesHelper.vb

+92-6
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,19 @@ Namespace CloudFiles
131131
End Get
132132
End Property
133133

134-
' The CDN Management URL can be useful...
134+
' The CDN Management URL for each datacenter can be useful...
135135
Private pManagementUrl As String = Nothing
136-
Public Property ManagementUrl As String
136+
137+
Public ReadOnly Property DallasManagementUrl As String
137138
Get
138139
Return pManagementUrl
139140
End Get
140-
Set(value As String)
141-
pManagementUrl = value
142-
End Set
141+
End Property
142+
143+
Public ReadOnly Property ChicagoManagementUrl As String
144+
Get
145+
Return pManagementUrl.Replace("//cdn1.", "//cdn2.")
146+
End Get
143147
End Property
144148

145149
#End Region
@@ -184,7 +188,7 @@ Namespace CloudFiles
184188
Dim AuthenticationResponse As HttpWebResponse = AuthenticationRequest.GetResponse
185189

186190
Me.XAuthToken = AuthenticationResponse.Headers("X-Auth-Token")
187-
Me.ManagementUrl = AuthenticationResponse.Headers("X-CDN-Management-Url")
191+
Me.pManagementUrl = AuthenticationResponse.Headers("X-CDN-Management-Url")
188192
Me.pStorageUrl = AuthenticationResponse.Headers("X-Storage-Url").Replace(".dfw1.", ".<location>.")
189193
Me.XAuthTokenReceivedOn = Now
190194

@@ -200,6 +204,20 @@ Namespace CloudFiles
200204
' Make sure we've got a valid token. Reauthenticate if need be.
201205
If Me.XAuthTokenIsExpired Then Me.Authenticate()
202206

207+
Try
208+
209+
Catch ex As WebException
210+
211+
Dim Response As HttpWebResponse = ex.Response
212+
213+
If Response.StatusCode = HttpStatusCode.Unauthorized Then
214+
215+
216+
217+
End If
218+
219+
End Try
220+
203221
' A request to get account metadata.
204222
Dim MetadataRequest As HttpWebRequest
205223

@@ -305,6 +323,74 @@ Namespace CloudFiles
305323

306324
End Function
307325

326+
Public Function CdnEnableContainer(ByVal ContainerName As String, ByVal ServerLocation As ServerLocation, Optional ByVal TimeToLive As Long = 259200) As CdnEnableContainerResult
327+
328+
' Make sure we've got a valid token. Reauthenticate if need be.
329+
If Me.XAuthTokenIsExpired Then Me.Authenticate()
330+
331+
' A request to CDN-enable the container.
332+
Dim CdnEnableRequest As HttpWebRequest
333+
334+
' Change the target URL based on what server farm we're counting on.
335+
If ServerLocation = CloudFiles.ServerLocation.Chicago Then
336+
CdnEnableRequest = HttpWebRequest.Create(Me.ChicagoManagementUrl & "/" & ContainerName)
337+
Else
338+
CdnEnableRequest = HttpWebRequest.Create(Me.DallasManagementUrl & "/" & ContainerName)
339+
End If
340+
341+
With CdnEnableRequest
342+
.Method = "PUT"
343+
.Headers.Add("X-Auth-Token", Me.XAuthToken)
344+
.Headers.Add("X-CDN-Enabled", "True")
345+
.Headers.Add("X-TTL", CStr(TimeToLive))
346+
End With
347+
348+
Dim CdnEnableContainerResponse As HttpWebResponse = CdnEnableRequest.GetResponse
349+
350+
If CdnEnableContainerResponse.StatusCode = HttpStatusCode.Created Then
351+
Return CdnEnableContainerResult.CdnEnabledContainerSuccessfully
352+
ElseIf CdnEnableContainerResponse.StatusCode = HttpStatusCode.Accepted Then
353+
Return CdnEnableContainerResult.ContainerAlreadyCdnEnabled
354+
Else
355+
Return CdnEnableContainerResult.UnknownResultProbableFailure
356+
End If
357+
358+
End Function
359+
360+
Public Function CdnDisableContainer(ByVal ContainerName As String, ByVal ServerLocation As ServerLocation, Optional ByVal TimeToLive As Long = 259200) As CdnEnableContainerResult
361+
362+
' Make sure we've got a valid token. Reauthenticate if need be.
363+
If Me.XAuthTokenIsExpired Then Me.Authenticate()
364+
365+
' A request to CDN-disable the container.
366+
Dim CdnEnableRequest As HttpWebRequest
367+
368+
' Change the target URL based on what server farm we're counting on.
369+
If ServerLocation = CloudFiles.ServerLocation.Chicago Then
370+
CdnEnableRequest = HttpWebRequest.Create(Me.ChicagoManagementUrl & "/" & ContainerName)
371+
Else
372+
CdnEnableRequest = HttpWebRequest.Create(Me.DallasManagementUrl & "/" & ContainerName)
373+
End If
374+
375+
With CdnEnableRequest
376+
.Method = "PUT"
377+
.Headers.Add("X-Auth-Token", Me.XAuthToken)
378+
.Headers.Add("X-CDN-Enabled", "False")
379+
.Headers.Add("X-TTL", CStr(TimeToLive))
380+
End With
381+
382+
Dim CdnEnableContainerResponse As HttpWebResponse = CdnEnableRequest.GetResponse
383+
384+
If CdnEnableContainerResponse.StatusCode = HttpStatusCode.Created Then
385+
Return CdnEnableContainerResult.CdnEnabledContainerSuccessfully
386+
ElseIf CdnEnableContainerResponse.StatusCode = HttpStatusCode.Accepted Then
387+
Return CdnEnableContainerResult.ContainerAlreadyCdnEnabled
388+
Else
389+
Return CdnEnableContainerResult.UnknownResultProbableFailure
390+
End If
391+
392+
End Function
393+
308394
Public Function DeleteContainer(ByVal ContainerToDelete As String, ByVal ServerLocation As ServerLocation) As DeleteContainerResult
309395

310396
' Make sure we've got a valid token. Reauthenticate if need be.

Diff for: CloudFiles/CloudFilesHelper.vbproj

+1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
<Compile Include="Responses\AccountMetadata.vb" />
7878
<Compile Include="Responses\ContainerList.vb" />
7979
<Compile Include="Responses\ContainerMetadata.vb" />
80+
<Compile Include="Responses\CdnEnableContainerResult.vb" />
8081
<Compile Include="Responses\CopyFileResult.vb" />
8182
<Compile Include="Responses\CreateContainerResult.vb" />
8283
<Compile Include="Responses\DeleteContainerResult.vb" />

Diff for: CloudFiles/My Project/AssemblyInfo.vb

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ Imports System.Runtime.InteropServices
88

99
' Review the values of the assembly attributes
1010

11-
<Assembly: AssemblyTitle("CloudFiles")>
12-
<Assembly: AssemblyDescription("")>
13-
<Assembly: AssemblyCompany("")>
11+
<Assembly: AssemblyTitle("CloudFilesHelper")>
12+
<Assembly: AssemblyDescription(".NET library that provides an interface to Rackspace's Cloud Files.")>
13+
<Assembly: AssemblyCompany("lukebaum.com")>
1414
<Assembly: AssemblyProduct("CloudFiles")>
1515
<Assembly: AssemblyCopyright("Copyright © 2013")>
1616
<Assembly: AssemblyTrademark("")>
@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
3131
' by using the '*' as shown below:
3232
' <Assembly: AssemblyVersion("1.0.*")>
3333

34-
<Assembly: AssemblyVersion("1.0.0.0")>
35-
<Assembly: AssemblyFileVersion("1.0.0.0")>
34+
<Assembly: AssemblyVersion("1.1.0.0")>
35+
<Assembly: AssemblyFileVersion("1.1.0.0")>

Diff for: CloudFiles/Responses/CdnEnableContainerResult.vb

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
Imports System.Net
2+
3+
Namespace CloudFiles
4+
5+
Public Enum CdnEnableContainerResult
6+
7+
' Enum indicated whether a container was CDN-enabled or not.
8+
9+
CdnEnabledContainerSuccessfully = 201
10+
ContainerAlreadyCdnEnabled = 202
11+
UnknownResultProbableFailure = -1
12+
13+
End Enum
14+
15+
End Namespace

0 commit comments

Comments
 (0)