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'}
|