123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- from array import array
- import threading
- from flask import session,Flask,request, jsonify
- import flask
- import flask_cors
- import persistence
- import Model.isp_model as isp_model
- import Model.model_manager as model_manager
- from werkzeug.security import check_password_hash,generate_password_hash
- import View.view_privilege as privileges
- import Modules.Inventory.inventory_view as inventory_view
- from datetime import timedelta
- import View.view_error_management as view_error_management
- from flask_limiter import Limiter
- from flask_limiter.util import get_remote_address
- import json
- import View.view_basics_api as view_basic_api
- import jwt
- import logging
- from utility.app_logging import logger_name
- logger = logging.getLogger(logger_name + ".VIEW")
- __app__ = Flask("OpenIsp")
- __app__.secret_key = "aseqzdwxc"
- __app__.permanent_session_lifetime = timedelta(minutes=2)
- __app__.logger = logger
- __app__.config['JSONIFY_PRETTYPRINT_REGULAR'] = True
- __app__.json_encoder = model_manager.ComplexEncoder
- limiter = Limiter(__app__,key_func=get_remote_address,default_limits=["100 per minute"])
- limiter.logger = logger
- from werkzeug.serving import make_server
- class ServerThread(threading.Thread):
- def __init__(self, app,ip,port):
- threading.Thread.__init__(self)
- self.server = make_server(ip, port, app)
- self.ctx = app.app_context()
- self.ctx.push()
- def run(self):
- logger.info('starting server')
- self.server.serve_forever()
- def shutdown(self):
- self.server.shutdown()
- __server_process__ : ServerThread
- def get_user_privilege() :
- return privileges.get_privileges_from_user(session["user_id"])
- def init() :
- privileges.init()
- view_error_management.define_error_management(__app__)
- view_basic_api.define_basic_api(__app__)
- @__app__.after_request
- def after_request(response : flask.Response):
- header = response.headers
- # adding this to the header to allow cross origin
- # for exemple origin cross origin is when website with javascript has it's server (origin 1)
- # and the javascript call some request on another server (origin 2), typically our API.
- header['Access-Control-Allow-Origin'] = '*'
- header['Access-Control-Allow-Methods'] = 'GET,DELETE,UPDATE,HEAD,OPTIONS,POST,PUT,PATCH'
- header['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization, x-Auth-Token'
- logger.debug(response.__dict__)
- return response
- def JsonStringToResponse(string : str) :
- resp = jsonify(json.loads(string))
- resp.status_code = 200
- return
- def run() :
- global __server_process__
- __server_process__ = ServerThread(__app__,"0.0.0.0",8000)
- __server_process__.start()
- logger.info('View server started')
- def stop() :
- global __server_process__
- __server_process__.shutdown()
- logger.info('View server stopped')
- def register_blueprint(blueprint : flask.Blueprint) :
- assert isinstance(blueprint,flask.Blueprint)
- logger.info("registering view (blueprint) : '" + blueprint.name + "' with prefix '" + blueprint.url_prefix +"'")
- __app__.register_blueprint(blueprint)
|