1 Star 0 Fork 0

powerpaas/machine

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
publishSettings.go 3.37 KB
一键复制 编辑 原始数据 按行查看 历史
Ben Firshman 提交于 2014-12-04 20:28 . Vendor dependencies with Godep
package azureSdkForGo
import (
"encoding/base64"
"encoding/xml"
"errors"
"fmt"
"io/ioutil"
)
var settings publishSettings = publishSettings{}
func GetPublishSettings() publishSettings {
return settings
}
func setPublishSettings(id string, cert []byte, key []byte) {
settings.SubscriptionID = id
settings.SubscriptionCert = cert
settings.SubscriptionKey = key
}
func ImportPublishSettings(id string, certPath string) error {
if len(id) == 0 {
return fmt.Errorf(ParamNotSpecifiedError, "id")
}
if len(certPath) == 0 {
return fmt.Errorf(ParamNotSpecifiedError, "certPath")
}
cert, err := ioutil.ReadFile(certPath)
if err != nil {
return err
}
setPublishSettings(id, cert, cert)
return nil
}
func ImportPublishSettingsFile(filePath string) error {
if len(filePath) == 0 {
return fmt.Errorf(ParamNotSpecifiedError, "filePath")
}
publishSettingsContent, err := ioutil.ReadFile(filePath)
if err != nil {
return err
}
activeSubscription, err := getActiveSubscription(publishSettingsContent)
if err != nil {
return err
}
cert, err := getSubscriptionCert(activeSubscription)
if err != nil {
return err
}
setPublishSettings(activeSubscription.Id, cert, cert)
return nil
}
func getSubscriptionCert(subscription subscription) ([]byte, error) {
certPassword := ""
pfxCert, err := base64.StdEncoding.DecodeString(subscription.ManagementCertificate)
if err != nil {
return nil, err
}
subscriptionCert, err := ExecuteCommand(fmt.Sprintf("openssl pkcs12 -nodes -passin pass:%s", certPassword), pfxCert)
if err != nil {
return nil, err
}
return subscriptionCert, nil
}
func getActiveSubscription(publishSettingsContent []byte) (subscription, error) {
publishData := publishData{}
activeSubscription := subscription{}
err := xml.Unmarshal(publishSettingsContent, &publishData)
if err != nil {
return activeSubscription, err
}
if len(publishData.PublishProfiles) == 0 {
err = errors.New("No publish profiles were found")
return activeSubscription, err
}
publishProfile := publishData.PublishProfiles[0]
subscriptions := publishProfile.Subscriptions
if len(subscriptions) == 0 {
err = errors.New("No subscriptions were found")
return activeSubscription, err
}
activeSubscription = subscriptions[0]
if len(activeSubscription.ManagementCertificate) == 0 {
activeSubscription.ManagementCertificate = publishProfile.ManagementCertificate
activeSubscription.ServiceManagementUrl = publishProfile.Url
}
return activeSubscription, nil
}
type publishSettings struct {
XMLName xml.Name `xml:"PublishSettings"`
SubscriptionID string
SubscriptionCert []byte
SubscriptionKey []byte
}
type publishData struct {
XMLName xml.Name `xml:"PublishData"`
PublishProfiles []publishProfile `xml:"PublishProfile"`
}
type publishProfile struct {
XMLName xml.Name `xml:"PublishProfile"`
SchemaVersion string `xml:",attr"`
PublishMethod string `xml:",attr"`
Url string `xml:",attr"`
ManagementCertificate string `xml:",attr"`
Subscriptions []subscription `xml:"Subscription"`
}
type subscription struct {
XMLName xml.Name `xml:"Subscription"`
ServiceManagementUrl string `xml:",attr"`
Id string `xml:",attr"`
Name string `xml:",attr"`
ManagementCertificate string `xml:",attr"`
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/powerpaas/machine.git
git@gitee.com:powerpaas/machine.git
powerpaas
machine
machine
v0.4.0-rc1

搜索帮助