mirror of
https://github.com/trailofbits/algo.git
synced 2025-09-07 20:43:11 +02:00
Lightsail provided added
This commit is contained in:
parent
2f9fa4ddca
commit
dfa2990e5a
2 changed files with 66 additions and 3 deletions
|
@ -1,5 +1,6 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import yaml
|
import yaml
|
||||||
|
import boto3
|
||||||
from os.path import join, dirname
|
from os.path import join, dirname
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
import concurrent.futures
|
import concurrent.futures
|
||||||
|
@ -93,6 +94,20 @@ async def post_exit(_):
|
||||||
else:
|
else:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
@routes.post('/lightsail_regions')
|
||||||
|
async def post_exit(request):
|
||||||
|
data = await request.json()
|
||||||
|
client = boto3.client(
|
||||||
|
'lightsail',
|
||||||
|
aws_access_key_id=data.get('aws_access_key'),
|
||||||
|
aws_secret_access_key=data.get('aws_secret_key')
|
||||||
|
)
|
||||||
|
response = client.get_regions(
|
||||||
|
includeAvailabilityZones=False
|
||||||
|
)
|
||||||
|
return web.json_response(response)
|
||||||
|
|
||||||
|
|
||||||
app = web.Application()
|
app = web.Application()
|
||||||
app.router.add_routes(routes)
|
app.router.add_routes(routes)
|
||||||
app.add_routes([web.static('/static', join(PROJECT_ROOT, 'app', 'static'))])
|
app.add_routes([web.static('/static', join(PROJECT_ROOT, 'app', 'static'))])
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
type="text"
|
type="text"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
name="aws_access_key"
|
name="aws_access_key"
|
||||||
|
v-on:blur="load_regions"
|
||||||
v-model="aws_access_key"
|
v-model="aws_access_key"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -21,8 +22,26 @@
|
||||||
type="password"
|
type="password"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
name="aws_secret_key"
|
name="aws_secret_key"
|
||||||
|
v-on:blur="load_regions"
|
||||||
v-model="aws_secret_key">
|
v-model="aws_secret_key">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label v-if="lightsail_regions.length === 0">Please enter Access key and Secret key to select region</label>
|
||||||
|
<label v-if="is_loading">Loading regions...</label>
|
||||||
|
<label v-if="lightsail_regions.length > 0">What region should the server be located in?</label>
|
||||||
|
<select name="region"
|
||||||
|
class="form-control"
|
||||||
|
v-model="region"
|
||||||
|
v-bind:disabled="is_region_disabled">
|
||||||
|
<option value disabled>Select region</option>
|
||||||
|
<option
|
||||||
|
v-for="(region, i) in lightsail_regions"
|
||||||
|
v-bind:key="region.displayName"
|
||||||
|
v-bind:value="region.name"
|
||||||
|
>{{region.displayName}}</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</div>
|
||||||
<button class="btn btn-primary"
|
<button class="btn btn-primary"
|
||||||
type="button"
|
type="button"
|
||||||
v-on:click="submit"
|
v-on:click="submit"
|
||||||
|
@ -37,19 +56,48 @@ module.exports = {
|
||||||
data: function() {
|
data: function() {
|
||||||
return {
|
return {
|
||||||
aws_access_key: null,
|
aws_access_key: null,
|
||||||
aws_secret_key: null
|
aws_secret_key: null,
|
||||||
|
region: null,
|
||||||
|
lightsail_regions: [],
|
||||||
|
is_loading: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
is_valid() {
|
is_valid() {
|
||||||
return this.aws_access_key && this.aws_secret_key;
|
return this.aws_access_key && this.aws_secret_key && this.region;
|
||||||
|
},
|
||||||
|
is_region_disabled() {
|
||||||
|
return !(this.aws_access_key && this.aws_secret_key) || this.is_loading;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
load_regions() {
|
||||||
|
if (this.aws_access_key && this.aws_secret_key && this.lightsail_regions.length === 0) {
|
||||||
|
this.is_loading = true;
|
||||||
|
fetch('/lightsail_regions', {
|
||||||
|
method: 'post',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
aws_access_key: this.aws_access_key,
|
||||||
|
aws_secret_key: this.aws_secret_key
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(data => {
|
||||||
|
this.lightsail_regions = data.regions;
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.is_loading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
submit() {
|
submit() {
|
||||||
this.$emit('submit', {
|
this.$emit('submit', {
|
||||||
aws_access_key: this.aws_access_key,
|
aws_access_key: this.aws_access_key,
|
||||||
aws_secret_key: this.aws_secret_key
|
aws_secret_key: this.aws_secret_key,
|
||||||
|
region: this.region
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue