You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 lines
2.5 KiB

from api.modules import utils
from flask import Flask, request,Response
from flask_restful import Resource, Api, abort
import json
import os
import base64
from PIL import Image
import cv2
from io import BytesIO
import numpy as np
app = Flask(__name__)
api = Api(app)
db_path = os.path.join(app.root_path, 'databases', 'denunciations.json')
with open(db_path, 'r') as f:
denunciations = json.load(f)
users_path = os.path.join(app.root_path, 'databases', 'users.json')
with open(users_path, 'r') as f:
users = json.load(f)
def readb64(base64_string):
sbuf = BytesIO()
sbuf.write(base64.b64decode(base64_string))
pimg = Image.open(sbuf)
return cv2.cvtColor(np.array(pimg), cv2.COLOR_RGB2BGR)
class Alert(Resource):
def post(self):
args = request.form
cvimg = readb64(args["photo"])
username= ""
for user in users:
if users[user]["id"] == args["id"]:
username=user
break
trust = int(users[username]["trustability"])
if trust > 20 or args["accepted"] == "true":
return {"success":True}
else:
return {"success":False,"penalty":"{}".format(100*(20-trust))}
class Denunciations(Resource):
def get(self):
resp = Response(json.dumps([
{
'id' : v['id'],
'info': v['info'],
'priority': v['priority'],
'location' : v['location']
}
for v in denunciations
]
))
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
class Denounce(Resource):
def post(self):
args = request.form
reporter = args['id']
if utils.find_by_id(users.values(), reporter):
denunciation_info = args['info']
denunciation_priority = args['priority']
denunciation_location = {
"latitude": args['latitude'],
"longitude": args['longitude']
}
denunciation = {
'id': len(denunciations) + 1,
'reporter': reporter,
'info': denunciation_info,
'priority': denunciation_priority,
'location': denunciation_location
}
denunciations.append(denunciation)
with open(db_path, 'w') as f:
json.dump(denunciations, f, indent=4)
return denunciation
else:
return {'error': 'User doesn\'t exists'}