Compare commits
	
		
			No commits in common. "maxbranch" and "master" have entirely different histories.
		
	
	
		
	
		
							
								
								
									
										17
									
								
								.jshintrc
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								.jshintrc
									
									
									
									
									
								
							| @ -1,17 +0,0 @@ | |||||||
| { "node": true |  | ||||||
| , "browser": true |  | ||||||
| , "jquery": true |  | ||||||
| , "globals": { "Promise": true } |  | ||||||
| 
 |  | ||||||
| , "indent": 2 |  | ||||||
| , "onevar": true |  | ||||||
| , "laxcomma": true |  | ||||||
| , "laxbreak": true |  | ||||||
| , "curly": true |  | ||||||
| , "nonbsp": true |  | ||||||
| 
 |  | ||||||
| , "eqeqeq": true |  | ||||||
| , "immed": true |  | ||||||
| , "undef": true |  | ||||||
| , "latedef": "nofunc" |  | ||||||
| } |  | ||||||
							
								
								
									
										17
									
								
								.prettierrc
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								.prettierrc
									
									
									
									
									
								
							| @ -1,17 +0,0 @@ | |||||||
| { "node": true |  | ||||||
| , "browser": true |  | ||||||
| , "jquery": true |  | ||||||
| , "globals": { "Promise": true } |  | ||||||
| 
 |  | ||||||
| , "indent": 2 |  | ||||||
| , "onevar": true |  | ||||||
| , "laxcomma": true |  | ||||||
| , "laxbreak": true |  | ||||||
| , "curly": true |  | ||||||
| , "nonbsp": true |  | ||||||
| 
 |  | ||||||
| , "eqeqeq": true |  | ||||||
| , "immed": true |  | ||||||
| , "undef": true |  | ||||||
| , "latedef": "nofunc" |  | ||||||
| } |  | ||||||
| @ -1,86 +0,0 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html lang=en> |  | ||||||
| <meta charset=utf-8> |  | ||||||
| <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> |  | ||||||
| <title>Error 404 (Not Found)!!1</title> |  | ||||||
| <style> |  | ||||||
|     * { |  | ||||||
|         margin: 0; |  | ||||||
|         padding: 0 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     html, |  | ||||||
|     code { |  | ||||||
|         font: 15px/22px arial, sans-serif |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     html { |  | ||||||
|         background: #fff; |  | ||||||
|         color: #222; |  | ||||||
|         padding: 15px |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     body { |  | ||||||
|         margin: 7% auto 0; |  | ||||||
|         max-width: 390px; |  | ||||||
|         min-height: 180px; |  | ||||||
|         padding: 30px 0 15px |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     *>body { |  | ||||||
|         background: url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat; |  | ||||||
|         padding-right: 205px |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     p { |  | ||||||
|         margin: 11px 0 22px; |  | ||||||
|         overflow: hidden |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     ins { |  | ||||||
|         color: #777; |  | ||||||
|         text-decoration: none |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     a img { |  | ||||||
|         border: 0 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @media screen and (max-width:772px) { |  | ||||||
|         body { |  | ||||||
|             background: none; |  | ||||||
|             margin-top: 0; |  | ||||||
|             max-width: none; |  | ||||||
|             padding-right: 0 |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     #logo { |  | ||||||
|         background: url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat; |  | ||||||
|         margin-left: -5px |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @media only screen and (min-resolution:192dpi) { |  | ||||||
|         #logo { |  | ||||||
|             background: url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%; |  | ||||||
|             -moz-border-image: url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0 |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @media only screen and (-webkit-min-device-pixel-ratio:2) { |  | ||||||
|         #logo { |  | ||||||
|             background: url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat; |  | ||||||
|             -webkit-background-size: 100% 100% |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     #logo { |  | ||||||
|         display: inline-block; |  | ||||||
|         height: 54px; |  | ||||||
|         width: 150px |  | ||||||
|     } |  | ||||||
| </style> |  | ||||||
| <a href=//www.google.com/> <span id=logo aria-label=Google></span></a> |  | ||||||
| <p><b>404.</b> <ins>That’s an error.</ins> |  | ||||||
|     <p>The requested URL <code>/dns/v1/even-flight-244020/managedZones/supporteasthigh.com/changes</code> was not found |  | ||||||
|         on this server. <ins>That’s all we know.</ins> |  | ||||||
							
								
								
									
										98
									
								
								lib/index.js
									
									
									
									
									
								
							
							
						
						
									
										98
									
								
								lib/index.js
									
									
									
									
									
								
							| @ -1,17 +1,17 @@ | |||||||
| "use strict"; | 'use strict'; | ||||||
| 
 | 
 | ||||||
| //var auth = require('./auth.js');
 | //var auth = require('./auth.js');
 | ||||||
| var defaults = { | var defaults = { | ||||||
|   baseUrl: "https://www.googleapis.com/dns/v1/" | 	baseUrl: 'https://www.googleapis.com/dns/v1/' | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| module.exports.create = function(config) { | module.exports.create = function(config) { | ||||||
| 	var request; | 	var request; | ||||||
|   var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, ""); | 	var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, ''); | ||||||
| 	var token = config.token; | 	var token = config.token; | ||||||
| 	var sa = getServiceAccount(config); | 	var sa = getServiceAccount(config); | ||||||
| 
 | 
 | ||||||
|   var plugin = { | 	return { | ||||||
| 		init: function(opts) { | 		init: function(opts) { | ||||||
| 			request = opts.request; | 			request = opts.request; | ||||||
| 			return null; | 			return null; | ||||||
| @ -19,109 +19,55 @@ module.exports.create = function(config) { | |||||||
| 		zones: function(data) { | 		zones: function(data) { | ||||||
| 			//console.info('List Zones', data);
 | 			//console.info('List Zones', data);
 | ||||||
| 			return api({ | 			return api({ | ||||||
|         url: baseUrl + "/projects/" + sa.project_id + "/managedZones", | 				url: baseUrl + '/projects/' + sa.project_id + '/managedZones', | ||||||
| 				json: true | 				json: true | ||||||
| 			}).then(function(resp) { | 			}).then(function(resp) { | ||||||
| 				return resp.body.managedZones.map(function(zone) { | 				return resp.body.managedZones.map(function(zone) { | ||||||
|           // slice out the trailing dot.
 | 					// slice out the leading and trailing single quotes, and the trailing dot
 | ||||||
|           // ex: "example.com." => "example.com"
 |  | ||||||
| 					// (assuming that all 'dnsName's probably look the same)
 | 					// (assuming that all 'dnsName's probably look the same)
 | ||||||
|           var name = zone.dnsName.slice(0, zone.dnsName.length - 1); | 					return zone.dnsName.slice(1, zone.dnsName.length - 2); | ||||||
|           console.log("the is name", name); |  | ||||||
|           return name; |  | ||||||
| 				}); | 				}); | ||||||
| 			}); | 			}); | ||||||
| 		}, | 		}, | ||||||
| 		set: function(data) { | 		set: function(data) { | ||||||
|       console.info("Add TXT", data); | 			// console.info('Add TXT', data);
 | ||||||
|       var ch = data.challenge; | 			throw Error('setting TXT not implemented'); | ||||||
|       return getZoneNameByDnsName(ch.dnsZone) |  | ||||||
|         .then(function(gZoneName) { |  | ||||||
|           return api({ |  | ||||||
|             method: "POST", |  | ||||||
|             url: |  | ||||||
|               baseUrl + |  | ||||||
|               "/projects/" + |  | ||||||
|               sa.project_id + |  | ||||||
|               "/managedZones/" + |  | ||||||
|               gZoneName + |  | ||||||
|               "/changes", |  | ||||||
|             json: { |  | ||||||
|               kind: "dns#change", |  | ||||||
|               additions: [ |  | ||||||
|                 { |  | ||||||
|                   kind: "dns#resourceRecordSet", |  | ||||||
|                   name: ch.dnsHost + ".", |  | ||||||
|                   type: "TXT", |  | ||||||
|                   ttl: 300, // TODO test for lowest allowed value
 |  | ||||||
|                   rrdatas: [ch.dnsAuthorization], |  | ||||||
|                   signatureRrdatas: [] |  | ||||||
|                 } |  | ||||||
|               ], |  | ||||||
|               deletions: [] |  | ||||||
|               //"startTime": "string",
 |  | ||||||
|               //"id": "string",
 |  | ||||||
|               //"status": "string",
 |  | ||||||
|               //"isServing": true
 |  | ||||||
|             } |  | ||||||
|           }); |  | ||||||
|         }) |  | ||||||
|         .then(function(resp) { |  | ||||||
|           if (resp.body.error) { |  | ||||||
|             console.error(resp.headers); |  | ||||||
|             console.error(resp.body); |  | ||||||
|             throw new Error(resp.body.error); |  | ||||||
|           } |  | ||||||
|           return null; |  | ||||||
|         }); |  | ||||||
| 		}, | 		}, | ||||||
| 		remove: function(data) { | 		remove: function(data) { | ||||||
| 			// console.info('Remove TXT', data);
 | 			// console.info('Remove TXT', data);
 | ||||||
|       throw Error("removing TXT not implemented"); | 			throw Error('removing TXT not implemented'); | ||||||
| 		}, | 		}, | ||||||
| 		get: function(data) { | 		get: function(data) { | ||||||
| 			// console.info('List TXT', data);
 | 			// console.info('List TXT', data);
 | ||||||
|       throw Error("listing TXTs not implemented"); | 			throw Error('listing TXTs not implemented'); | ||||||
| 		} | 		} | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|   return plugin; |  | ||||||
| 
 |  | ||||||
| 	function api(opts) { | 	function api(opts) { | ||||||
| 		//return auth.getToken(sa).then(function(token) {
 | 		//return auth.getToken(sa).then(function(token) {
 | ||||||
| 		opts.headers = opts.headers || {}; | 		opts.headers = opts.headers || {}; | ||||||
|     opts.headers.Authorization = "Bearer " + token; | 		opts.headers.Authorization = 'Bearer ' + token; | ||||||
|     return request(opts).then(function(resp) { | 		return request(opts); | ||||||
|       console.log(resp.headers); |  | ||||||
|       console.log(resp.body); |  | ||||||
|       return resp; |  | ||||||
|     }); |  | ||||||
| 		//});
 | 		//});
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|   function getZoneNameByDnsName(dnsZone) { |  | ||||||
|     return api({ |  | ||||||
|       url: baseUrl + "/projects/" + sa.project_id + "/managedZones", |  | ||||||
|       json: true |  | ||||||
|     }).then(function(resp) { |  | ||||||
|       // Google Zone Name is NOT the DNS Name, but an arbitrary string
 |  | ||||||
|       return resp.body.managedZones.filter(function(zone) { |  | ||||||
|         return dnsZone + "." === zone.dnsName; |  | ||||||
|       })[0].name; |  | ||||||
|     }); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
| 	function getServiceAccount(config) { | 	function getServiceAccount(config) { | ||||||
| 		var saPath = | 		var saPath = | ||||||
|       config.serviceAccountPath || process.env.GOOGLE_APPLICATION_CREDENTIALS; | 			config.serviceAccountPath || | ||||||
|  | 			process.env.GOOGLE_APPLICATION_CREDENTIALS; | ||||||
| 		var sa = config.serviceAccount || require(saPath); | 		var sa = config.serviceAccount || require(saPath); | ||||||
| 
 | 
 | ||||||
| 		if ( | 		if ( | ||||||
| 			!sa || | 			!sa || | ||||||
|       !(sa.private_key && sa.private_key_id && sa.client_email && sa.project_id) | 			!( | ||||||
|  | 				sa.private_key && | ||||||
|  | 				sa.private_key_id && | ||||||
|  | 				sa.client_email && | ||||||
|  | 				sa.project_id | ||||||
|  | 			) | ||||||
| 		) { | 		) { | ||||||
| 			throw new Error( | 			throw new Error( | ||||||
|         "missing or incomplete service_account.json: set serviceAccount serviceAccountPath" | 				'missing or incomplete service_account.json: set serviceAccount serviceAccountPath' | ||||||
| 			); | 			); | ||||||
| 		} | 		} | ||||||
| 		return sa; | 		return sa; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user