diff --git a/app/server.py b/app/server.py index be1a5d4..f44e727 100644 --- a/app/server.py +++ b/app/server.py @@ -12,6 +12,7 @@ from playbook import PlaybookCLI try: import boto3 + HAS_BOTO3 = True except ImportError: HAS_BOTO3 = False @@ -19,6 +20,7 @@ except ImportError: try: from google.auth.transport.requests import AuthorizedSession from google.oauth2 import service_account + HAS_GOOGLE_LIBRARIES = True except ImportError: HAS_GOOGLE_LIBRARIES = False @@ -117,16 +119,14 @@ async def post_exit(_): @routes.get('/do_config') async def check_do_config(_): - return web.json_response({"ok": 'DO_API_TOKEN' in os.environ}) + return web.json_response({'has_secret': 'DO_API_TOKEN' in os.environ}) -@routes.get('/do_regions') +@routes.post('/do_regions') async def do_regions(request): - if 'token' in request.query: - token = request.query['token'] - elif 'DO_API_TOKEN' in os.environ: - token = os.environ['DO_API_TOKEN'] - else: + data = await request.json() + token = data.get('token', os.environ.get('DO_API_TOKEN')) + if not token: return web.json_response({'error': 'no token provided'}, status=400) headers = { @@ -139,6 +139,13 @@ async def do_regions(request): return web.json_response(json_body, status=r.status) +@routes.get('/aws_config') +async def aws_config(_): + if not HAS_BOTO3: + return web.json_response({'error': 'missing_boto'}, status=400) + return web.json_response({'has_secret': 'AWS_ACCESS_KEY_ID' in os.environ and 'AWS_SECRET_ACCESS_KEY' in os.environ}) + + @routes.post('/lightsail_regions') async def lightsail_regions(request): data = await request.json() @@ -195,9 +202,9 @@ async def gce_regions(request): response = AuthorizedSession( service_account.Credentials.from_service_account_info( data).with_scopes( - ['https://www.googleapis.com/auth/compute'])).get( - 'https://www.googleapis.com/compute/v1/projects/{project_id}/regions'.format( - project_id=data['project_id']) + ['https://www.googleapis.com/auth/compute'])).get( + 'https://www.googleapis.com/compute/v1/projects/{project_id}/regions'.format( + project_id=data['project_id']) ) return web.json_response(json.loads(response.content)) diff --git a/app/static/provider-do.vue b/app/static/provider-do.vue index 58de4ad..ef71bd5 100644 --- a/app/static/provider-do.vue +++ b/app/static/provider-do.vue @@ -3,7 +3,7 @@
r.json()) .then(response => { - if (response.ok) { + if (response.has_secret) { this.ui_token_from_env = true; this.load_regions(); } @@ -80,8 +80,16 @@ module.exports = { if (this.ui_token_from_env || this.do_token) { this.ui_loading_regions = true; this.ui_region_error = null; - const url = this.ui_token_from_env ? "/do_regions" : "/do_regions?token=" + this.do_token; - fetch(url) + const payload = this.ui_token_from_env ? {} : { + token: this.do_token + }; + fetch("/do_regions", { + method: 'post', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(payload) + }) .then((r) => { if (r.status === 200) { return r.json(); diff --git a/app/static/provider-lightsail.vue b/app/static/provider-lightsail.vue index 8df377b..4ea90dc 100644 --- a/app/static/provider-lightsail.vue +++ b/app/static/provider-lightsail.vue @@ -1,47 +1,43 @@