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> | ||||
							
								
								
									
										182
									
								
								lib/index.js
									
									
									
									
									
								
							
							
						
						
									
										182
									
								
								lib/index.js
									
									
									
									
									
								
							| @ -1,129 +1,75 @@ | ||||
| "use strict"; | ||||
| 'use strict'; | ||||
| 
 | ||||
| //var auth = require('./auth.js');
 | ||||
| var defaults = { | ||||
|   baseUrl: "https://www.googleapis.com/dns/v1/" | ||||
| 	baseUrl: 'https://www.googleapis.com/dns/v1/' | ||||
| }; | ||||
| 
 | ||||
| module.exports.create = function(config) { | ||||
|   var request; | ||||
|   var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, ""); | ||||
|   var token = config.token; | ||||
|   var sa = getServiceAccount(config); | ||||
| 	var request; | ||||
| 	var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, ''); | ||||
| 	var token = config.token; | ||||
| 	var sa = getServiceAccount(config); | ||||
| 
 | ||||
|   var plugin = { | ||||
|     init: function(opts) { | ||||
|       request = opts.request; | ||||
|       return null; | ||||
|     }, | ||||
|     zones: function(data) { | ||||
|       //console.info('List Zones', data);
 | ||||
|       return api({ | ||||
|         url: baseUrl + "/projects/" + sa.project_id + "/managedZones", | ||||
|         json: true | ||||
|       }).then(function(resp) { | ||||
|         return resp.body.managedZones.map(function(zone) { | ||||
|           // slice out the trailing dot.
 | ||||
|           // ex: "example.com." => "example.com"
 | ||||
|           // (assuming that all 'dnsName's probably look the same)
 | ||||
|           var name = zone.dnsName.slice(0, zone.dnsName.length - 1); | ||||
|           console.log("the is name", name); | ||||
|           return name; | ||||
|         }); | ||||
|       }); | ||||
|     }, | ||||
|     set: function(data) { | ||||
|       console.info("Add TXT", data); | ||||
|       var ch = data.challenge; | ||||
|       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) { | ||||
|       // console.info('Remove TXT', data);
 | ||||
|       throw Error("removing TXT not implemented"); | ||||
|     }, | ||||
|     get: function(data) { | ||||
|       // console.info('List TXT', data);
 | ||||
|       throw Error("listing TXTs not implemented"); | ||||
|     } | ||||
|   }; | ||||
| 	return { | ||||
| 		init: function(opts) { | ||||
| 			request = opts.request; | ||||
| 			return null; | ||||
| 		}, | ||||
| 		zones: function(data) { | ||||
| 			//console.info('List Zones', data);
 | ||||
| 			return api({ | ||||
| 				url: baseUrl + '/projects/' + sa.project_id + '/managedZones', | ||||
| 				json: true | ||||
| 			}).then(function(resp) { | ||||
| 				return resp.body.managedZones.map(function(zone) { | ||||
| 					// slice out the leading and trailing single quotes, and the trailing dot
 | ||||
| 					// (assuming that all 'dnsName's probably look the same)
 | ||||
| 					return zone.dnsName.slice(1, zone.dnsName.length - 2); | ||||
| 				}); | ||||
| 			}); | ||||
| 		}, | ||||
| 		set: function(data) { | ||||
| 			// console.info('Add TXT', data);
 | ||||
| 			throw Error('setting TXT not implemented'); | ||||
| 		}, | ||||
| 		remove: function(data) { | ||||
| 			// console.info('Remove TXT', data);
 | ||||
| 			throw Error('removing TXT not implemented'); | ||||
| 		}, | ||||
| 		get: function(data) { | ||||
| 			// console.info('List TXT', data);
 | ||||
| 			throw Error('listing TXTs not implemented'); | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
|   return plugin; | ||||
| 	function api(opts) { | ||||
| 		//return auth.getToken(sa).then(function(token) {
 | ||||
| 		opts.headers = opts.headers || {}; | ||||
| 		opts.headers.Authorization = 'Bearer ' + token; | ||||
| 		return request(opts); | ||||
| 		//});
 | ||||
| 	} | ||||
| 
 | ||||
|   function api(opts) { | ||||
|     //return auth.getToken(sa).then(function(token) {
 | ||||
|     opts.headers = opts.headers || {}; | ||||
|     opts.headers.Authorization = "Bearer " + token; | ||||
|     return request(opts).then(function(resp) { | ||||
|       console.log(resp.headers); | ||||
|       console.log(resp.body); | ||||
|       return resp; | ||||
|     }); | ||||
|     //});
 | ||||
|   } | ||||
| 	function getServiceAccount(config) { | ||||
| 		var saPath = | ||||
| 			config.serviceAccountPath || | ||||
| 			process.env.GOOGLE_APPLICATION_CREDENTIALS; | ||||
| 		var sa = config.serviceAccount || require(saPath); | ||||
| 
 | ||||
|   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) { | ||||
|     var saPath = | ||||
|       config.serviceAccountPath || process.env.GOOGLE_APPLICATION_CREDENTIALS; | ||||
|     var sa = config.serviceAccount || require(saPath); | ||||
| 
 | ||||
|     if ( | ||||
|       !sa || | ||||
|       !(sa.private_key && sa.private_key_id && sa.client_email && sa.project_id) | ||||
|     ) { | ||||
|       throw new Error( | ||||
|         "missing or incomplete service_account.json: set serviceAccount serviceAccountPath" | ||||
|       ); | ||||
|     } | ||||
|     return sa; | ||||
|   } | ||||
| 		if ( | ||||
| 			!sa || | ||||
| 			!( | ||||
| 				sa.private_key && | ||||
| 				sa.private_key_id && | ||||
| 				sa.client_email && | ||||
| 				sa.project_id | ||||
| 			) | ||||
| 		) { | ||||
| 			throw new Error( | ||||
| 				'missing or incomplete service_account.json: set serviceAccount serviceAccountPath' | ||||
| 			); | ||||
| 		} | ||||
| 		return sa; | ||||
| 	} | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user