def lab(token):
try:
lab_id, instance_id, exam_id, response_id = external_serializer.loads(token, max_age=60)
except (BadSignature, SignatureExpired):
abort(403)
url_base = '{0}/labapiConnection/ShowLab?labInstanceGuid={1}&fullScreen=False'
okay_states = {'STARTING', 'ACTIVE'}
if instance_id:
lab_instance_url = '{0}/labapi/v1/instance?id={1}'.format(current_app.config['XTREME_URL'],
instance_id)
resp = requests.get(lab_instance_url, auth=HTTPBasicAuth(username=current_app.config['XTREME_ID'],
password=current_app.config['XTREME_SECRET']))
if resp.status_code != 200 or resp.json()['state'] not in okay_states:
abort(400)
url = resp.json()['connectionUrl'] or url_base.format(current_app.config['XTREME_URL'], instance_id)
else:
payload = {
'labID': lab_id
}
lab_url = '{0}/labapi/v1/Create'.format(current_app.config['XTREME_URL'])
resp = requests.put(lab_url, json=payload, auth=HTTPBasicAuth(username=current_app.config['XTREME_ID'],
password=current_app.config['XTREME_SECRET']))
if resp.status_code != 200:
abort(400)
instance_id = resp.json()['id']
redis_store.setex(response_id, 3600, instance_id)
url = url_base.format(current_app.config['XTREME_URL'], instance_id)
return render_template('xtreme.html', url=url, response_id=response_id, instance_id=instance_id, exam_id=exam_id)
评论列表
文章目录