2260d8974d
include version set on manual parser selection update projects to .NET Core 2.2 add middleware to support ip whitelisting (EnableWebfrontConnectionWhitelist and WebfrontConnectionWhitelist) issue #59
50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
from flask_restful import Resource
|
|
from flask import request
|
|
from flask_jwt_extended import jwt_required
|
|
from marshmallow import ValidationError
|
|
from master.schema.instanceschema import InstanceSchema
|
|
from master import ctx
|
|
import json
|
|
from netaddr import IPAddress
|
|
|
|
class Instance(Resource):
|
|
def get(self, id=None):
|
|
if id is None:
|
|
schema = InstanceSchema(many=True)
|
|
instances = schema.dump(ctx.get_instances())
|
|
return instances
|
|
else:
|
|
try:
|
|
instance = ctx.get_instance(id)
|
|
return InstanceSchema().dump(instance)
|
|
except KeyError:
|
|
return {'message' : 'instance not found'}, 404
|
|
|
|
@jwt_required
|
|
def put(self, id):
|
|
try:
|
|
for server in request.json['servers']:
|
|
if 'ip' not in server or IPAddress(server['ip']).is_private() or IPAddress(server['ip']).is_loopback():
|
|
server['ip'] = request.remote_addr
|
|
if 'version' not in server:
|
|
server['version'] = 'Unknown'
|
|
instance = InstanceSchema().load(request.json)
|
|
except ValidationError as err:
|
|
return {'message' : err.messages }, 400
|
|
ctx.update_instance(instance)
|
|
return { 'message' : 'instance updated successfully' }, 200
|
|
|
|
@jwt_required
|
|
def post(self):
|
|
try:
|
|
for server in request.json['servers']:
|
|
if 'ip' not in server or server['ip'] == 'localhost':
|
|
server['ip'] = request.remote_addr
|
|
if 'version' not in server:
|
|
server['version'] = 'Unknown'
|
|
instance = InstanceSchema().load(request.json)
|
|
except ValidationError as err:
|
|
return {'message' : err.messages }, 400
|
|
ctx.add_instance(instance)
|
|
return { 'message' : 'instance added successfully' }, 200
|