mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-05-06 22:18:28 +00:00
640bd2b530
Now that there's an official Go AWS SDK from Amazon, use that instead of goamz. goamz isn't getting much love these days. Implement support for STS credentials, as in assumed roles and EC2 instance profiles. The configuration is extended to support a session token, though I'm not sure why anyone would put temporary credentials in a configuration file. More likely, no credentials will be explicitly configured at all, and they will be discovered through the standard SDK mechanisms described at <https://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs>. Resolves #342.
102 lines
3.5 KiB
Go
102 lines
3.5 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// ConfigStructure is structure of main configuration
|
|
type ConfigStructure struct {
|
|
RootDir string `json:"rootDir"`
|
|
DownloadConcurrency int `json:"downloadConcurrency"`
|
|
DownloadLimit int64 `json:"downloadSpeedLimit"`
|
|
Architectures []string `json:"architectures"`
|
|
DepFollowSuggests bool `json:"dependencyFollowSuggests"`
|
|
DepFollowRecommends bool `json:"dependencyFollowRecommends"`
|
|
DepFollowAllVariants bool `json:"dependencyFollowAllVariants"`
|
|
DepFollowSource bool `json:"dependencyFollowSource"`
|
|
GpgDisableSign bool `json:"gpgDisableSign"`
|
|
GpgDisableVerify bool `json:"gpgDisableVerify"`
|
|
DownloadSourcePackages bool `json:"downloadSourcePackages"`
|
|
PpaDistributorID string `json:"ppaDistributorID"`
|
|
PpaCodename string `json:"ppaCodename"`
|
|
S3PublishRoots map[string]S3PublishRoot `json:"S3PublishEndpoints"`
|
|
SwiftPublishRoots map[string]SwiftPublishRoot `json:"SwiftPublishEndpoints"`
|
|
}
|
|
|
|
// S3PublishRoot describes single S3 publishing entry point
|
|
type S3PublishRoot struct {
|
|
Region string `json:"region"`
|
|
Bucket string `json:"bucket"`
|
|
Endpoint string `json:"endpoint"`
|
|
AccessKeyID string `json:"awsAccessKeyID"`
|
|
SecretAccessKey string `json:"awsSecretAccessKey"`
|
|
SessionToken string `json:"awsSessionToken"`
|
|
Prefix string `json:"prefix"`
|
|
ACL string `json:"acl"`
|
|
StorageClass string `json:"storageClass"`
|
|
EncryptionMethod string `json:"encryptionMethod"`
|
|
PlusWorkaround bool `json:"plusWorkaround"`
|
|
DisableMultiDel bool `json:"disableMultiDel"`
|
|
}
|
|
|
|
// SwiftPublishRoot describes single OpenStack Swift publishing entry point
|
|
type SwiftPublishRoot struct {
|
|
UserName string `json:"osname"`
|
|
Password string `json:"password"`
|
|
AuthURL string `json:"authurl"`
|
|
Tenant string `json:"tenant"`
|
|
TenantID string `json:"tenantid"`
|
|
Prefix string `json:"prefix"`
|
|
Container string `json:"container"`
|
|
}
|
|
|
|
// Config is configuration for aptly, shared by all modules
|
|
var Config = ConfigStructure{
|
|
RootDir: filepath.Join(os.Getenv("HOME"), ".aptly"),
|
|
DownloadConcurrency: 4,
|
|
DownloadLimit: 0,
|
|
Architectures: []string{},
|
|
DepFollowSuggests: false,
|
|
DepFollowRecommends: false,
|
|
DepFollowAllVariants: false,
|
|
DepFollowSource: false,
|
|
GpgDisableSign: false,
|
|
GpgDisableVerify: false,
|
|
DownloadSourcePackages: false,
|
|
PpaDistributorID: "ubuntu",
|
|
PpaCodename: "",
|
|
S3PublishRoots: map[string]S3PublishRoot{},
|
|
SwiftPublishRoots: map[string]SwiftPublishRoot{},
|
|
}
|
|
|
|
// LoadConfig loads configuration from json file
|
|
func LoadConfig(filename string, config *ConfigStructure) error {
|
|
f, err := os.Open(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer f.Close()
|
|
|
|
dec := json.NewDecoder(f)
|
|
return dec.Decode(&config)
|
|
}
|
|
|
|
// SaveConfig write configuration to json file
|
|
func SaveConfig(filename string, config *ConfigStructure) error {
|
|
f, err := os.Create(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer f.Close()
|
|
|
|
encoded, err := json.MarshalIndent(&config, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = f.Write(encoded)
|
|
return err
|
|
}
|