mirror of
				https://github.com/go-acme/lego.git
				synced 2025-10-31 08:27:38 +02:00 
			
		
		
		
	Fix gcloud naming inconsistency; parse projectID (#425)
This commit fixes the naming inconsistency of Google Cloud DNS being named `googlecloud` in the source and `gcloud` in the user interface. Furthermore, improving my previous commit, I realized that the project ID is stored in the service account file. We can save one environment variable when using service account file (e.g. in automation applications).
This commit is contained in:
		
				
					committed by
					
						 Ludovic Fernandez
						Ludovic Fernandez
					
				
			
			
				
	
			
			
			
						parent
						
							e7fd871a9c
						
					
				
				
					commit
					0593b64674
				
			| @@ -20,9 +20,9 @@ import ( | ||||
| 	"github.com/xenolf/lego/providers/dns/fastdns" | ||||
| 	"github.com/xenolf/lego/providers/dns/gandi" | ||||
| 	"github.com/xenolf/lego/providers/dns/gandiv5" | ||||
| 	"github.com/xenolf/lego/providers/dns/gcloud" | ||||
| 	"github.com/xenolf/lego/providers/dns/glesys" | ||||
| 	"github.com/xenolf/lego/providers/dns/godaddy" | ||||
| 	"github.com/xenolf/lego/providers/dns/googlecloud" | ||||
| 	"github.com/xenolf/lego/providers/dns/lightsail" | ||||
| 	"github.com/xenolf/lego/providers/dns/linode" | ||||
| 	"github.com/xenolf/lego/providers/dns/namecheap" | ||||
| @@ -75,7 +75,7 @@ func NewDNSChallengeProviderByName(name string) (acme.ChallengeProvider, error) | ||||
| 	case "glesys": | ||||
| 		provider, err = glesys.NewDNSProvider() | ||||
| 	case "gcloud": | ||||
| 		provider, err = googlecloud.NewDNSProvider() | ||||
| 		provider, err = gcloud.NewDNSProvider() | ||||
| 	case "godaddy": | ||||
| 		provider, err = godaddy.NewDNSProvider() | ||||
| 	case "lightsail": | ||||
|   | ||||
| @@ -1,8 +1,9 @@ | ||||
| // Package googlecloud implements a DNS provider for solving the DNS-01 | ||||
| // Package gcloud implements a DNS provider for solving the DNS-01 | ||||
| // challenge using Google Cloud DNS. | ||||
| package googlecloud | ||||
| package gcloud | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| @@ -27,10 +28,10 @@ type DNSProvider struct { | ||||
| // A Service Account file can be passed in the environment variable: | ||||
| // GCE_SERVICE_ACCOUNT_FILE | ||||
| func NewDNSProvider() (*DNSProvider, error) { | ||||
| 	project := os.Getenv("GCE_PROJECT") | ||||
| 	if saFile, ok := os.LookupEnv("GCE_SERVICE_ACCOUNT_FILE"); ok { | ||||
| 		return NewDNSProviderServiceAccount(project, saFile) | ||||
| 		return NewDNSProviderServiceAccount(saFile) | ||||
| 	} | ||||
| 	project := os.Getenv("GCE_PROJECT") | ||||
| 	return NewDNSProviderCredentials(project) | ||||
| } | ||||
| 
 | ||||
| @@ -57,10 +58,7 @@ func NewDNSProviderCredentials(project string) (*DNSProvider, error) { | ||||
| 
 | ||||
| // NewDNSProviderServiceAccount uses the supplied service account JSON file to | ||||
| // return a DNSProvider instance configured for Google Cloud DNS. | ||||
| func NewDNSProviderServiceAccount(project string, saFile string) (*DNSProvider, error) { | ||||
| 	if project == "" { | ||||
| 		return nil, fmt.Errorf("Google Cloud project name missing") | ||||
| 	} | ||||
| func NewDNSProviderServiceAccount(saFile string) (*DNSProvider, error) { | ||||
| 	if saFile == "" { | ||||
| 		return nil, fmt.Errorf("Google Cloud Service Account file missing") | ||||
| 	} | ||||
| @@ -69,6 +67,17 @@ func NewDNSProviderServiceAccount(project string, saFile string) (*DNSProvider, | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("Unable to read Service Account file: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	// read project id from service account file | ||||
| 	var datJSON struct { | ||||
| 		ProjectID string `json:"project_id"` | ||||
| 	} | ||||
| 	err = json.Unmarshal(dat, &datJSON) | ||||
| 	if err != nil || datJSON.ProjectID == "" { | ||||
| 		return nil, fmt.Errorf("Project ID not found in Google Cloud Service Account file") | ||||
| 	} | ||||
| 	project := datJSON.ProjectID | ||||
| 
 | ||||
| 	conf, err := google.JWTConfigFromJSON(dat, dns.NdevClouddnsReadwriteScope) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("Unable to acquire config: %v", err) | ||||
| @@ -1,4 +1,4 @@ | ||||
| package googlecloud | ||||
| package gcloud | ||||
| 
 | ||||
| import ( | ||||
| 	"os" | ||||
		Reference in New Issue
	
	Block a user