1
2
3
4 package hostedservice
5
6
7
8
9 import (
10 "encoding/base64"
11 "encoding/xml"
12 "fmt"
13
14 "github.com/Azure/azure-sdk-for-go/services/classic/management"
15 )
16
17 const (
18 azureXmlns = "http://schemas.microsoft.com/windowsazure"
19 azureDeploymentListURL = "services/hostedservices/%s/deployments"
20 azureHostedServiceListURL = "services/hostedservices"
21 azureHostedServiceAvailabilityURL = "services/hostedservices/operations/isavailable/%s"
22 azureDeploymentURL = "services/hostedservices/%s/deployments/%s"
23 deleteAzureDeploymentURL = "services/hostedservices/%s/deployments/%s"
24 getHostedServicePropertiesURL = "services/hostedservices/%s"
25 azureServiceCertificateURL = "services/hostedservices/%s/certificates"
26
27 errParamNotSpecified = "Parameter %s is not specified."
28 )
29
30
31 func NewClient(client management.Client) HostedServiceClient {
32 return HostedServiceClient{client: client}
33 }
34
35 func (h HostedServiceClient) CreateHostedService(params CreateHostedServiceParameters) error {
36 req, err := xml.Marshal(params)
37 if err != nil {
38 return err
39 }
40
41 _, err = h.client.SendAzurePostRequest(azureHostedServiceListURL, req)
42 return err
43 }
44
45 func (h HostedServiceClient) CheckHostedServiceNameAvailability(dnsName string) (AvailabilityResponse, error) {
46 var r AvailabilityResponse
47 if dnsName == "" {
48 return r, fmt.Errorf(errParamNotSpecified, "dnsName")
49 }
50
51 requestURL := fmt.Sprintf(azureHostedServiceAvailabilityURL, dnsName)
52 response, err := h.client.SendAzureGetRequest(requestURL)
53 if err != nil {
54 return r, err
55 }
56
57 err = xml.Unmarshal(response, &r)
58 return r, err
59 }
60
61 func (h HostedServiceClient) DeleteHostedService(dnsName string, deleteDisksAndBlobs bool) (management.OperationID, error) {
62 if dnsName == "" {
63 return "", fmt.Errorf(errParamNotSpecified, "dnsName")
64 }
65
66 requestURL := fmt.Sprintf(getHostedServicePropertiesURL, dnsName)
67 if deleteDisksAndBlobs {
68 requestURL += "?comp=media"
69 }
70 return h.client.SendAzureDeleteRequest(requestURL)
71 }
72
73 func (h HostedServiceClient) GetHostedService(name string) (HostedService, error) {
74 hostedService := HostedService{}
75 if name == "" {
76 return hostedService, fmt.Errorf(errParamNotSpecified, "name")
77 }
78
79 requestURL := fmt.Sprintf(getHostedServicePropertiesURL, name)
80 response, err := h.client.SendAzureGetRequest(requestURL)
81 if err != nil {
82 return hostedService, err
83 }
84
85 err = xml.Unmarshal(response, &hostedService)
86 if err != nil {
87 return hostedService, err
88 }
89
90 decodedLabel, err := base64.StdEncoding.DecodeString(hostedService.LabelBase64)
91 if err != nil {
92 return hostedService, err
93 }
94 hostedService.Label = string(decodedLabel)
95 return hostedService, nil
96 }
97
98 func (h HostedServiceClient) ListHostedServices() (ListHostedServicesResponse, error) {
99 var response ListHostedServicesResponse
100
101 data, err := h.client.SendAzureGetRequest(azureHostedServiceListURL)
102 if err != nil {
103 return response, err
104 }
105
106 err = xml.Unmarshal(data, &response)
107 return response, err
108 }
109
110 func (h HostedServiceClient) AddCertificate(dnsName string, certData []byte, certificateFormat CertificateFormat, password string) (management.OperationID, error) {
111 if dnsName == "" {
112 return "", fmt.Errorf(errParamNotSpecified, "dnsName")
113 }
114
115 certBase64 := base64.StdEncoding.EncodeToString(certData)
116
117 addCertificate := CertificateFile{
118 Data: certBase64,
119 CertificateFormat: certificateFormat,
120 Password: password,
121 Xmlns: azureXmlns,
122 }
123 buffer, err := xml.Marshal(addCertificate)
124 if err != nil {
125 return "", err
126 }
127
128 requestURL := fmt.Sprintf(azureServiceCertificateURL, dnsName)
129 return h.client.SendAzurePostRequest(requestURL, buffer)
130 }
131
View as plain text