Exemplo n.º 1
0
def test():
    """Renders the about page."""
    return render_template(
        'test.html',
        title='Test',
        year=datetime.now().year,
        jsonrpc_request=
        '{"jsonrpc": "2.0","method": "register", "params": [],"id": "2"}',
        message='Your application description page',
        api_host=config.get('API_HOST') or request.host_url)
Exemplo n.º 2
0
def sql_query():
    try:
        with app.app_context():
            app_root_path = current_app.root_path
            yield app_root_path + '\n'
        connection_string = config.get('ODBC_CONNECTION_STRING')
        connection_credential = config.get('ODBC_CONNECTION_CREDENTIAL')
        #below is for mysql/mariadb, interchangeable, either /etc/odbcinst.ini or use windows ODBC data source admin to find the name of driver
        #connection_string = 'Driver={MySQL};PORT=3306;Server=db;Database=oas;Option=10; sslca=d:\oas\oas-api\mariadb-ca.pem; sslcert=d:\oas\oas-api\mariadb-cert.pem;sslkey=d:\oas\oas-api\mariadb-key.pem;sslverify=0;'
        #connection_string = 'Driver={MARIADB ODBC 3.1 Driver};PORT=3306;Server=db;Database=oas;Option=10; sslca=d:\oas\oas-api\mariadb-ca.pem; sslcert=d:\oas\oas-api\mariadb-cert.pem;sslkey=d:\oas\oas-api\mariadb-key.pem;sslverify=0;'
        #connection_credential = 'UID=root;PWD=password;'
        #below is for freeTDS(only linux) which is needed for ARM64 platform, PORT is a must unlike MS driver
        #connection_string = 'DRIVER={FreeTDS};PORT=1433;SERVER=db;DATABASE=OASDesign;TDS_Version=7.4'
        #connection_credential = 'UID=root;PWD=password;'
        conn = pyodbc.connect(connection_string + connection_credential)
        #yield from mssql_query(conn)
        yield from mysql_query(conn)
        conn.close()
        yield "ODBC_CONNECTION_STRING: {0}".format(connection_string)
    except Exception as err:
        #return to client - only for debugging
        yield f"{err.__class__.__name__}: {err}"
        #let general exception handling handle it(log etc.)
        raise err
Exemplo n.º 3
0
The flask application package.
"""
import os
import sys
import uuid
import redis
from flask import Flask, _app_ctx_stack, session
from flask_jsonrpc import JSONRPC, JSONRPCView  # noqa: E402   pylint: disable=C0413
from sqlalchemy.orm import scoped_session
from .model.database import SessionLocal
from .api import AuthorizationView, modules
from .api.auth import auth
import flaskweb.config as config

app = Flask(__name__)
app.secret_key = config.get('FLASK_SECRET_KEY')
app.redis = config.get('REDIS_URL')
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = app.redis
app.config['MAX_CONTENT_LENGTH'] = 10 * 1024 * 1024
app.config['UPLOAD_EXTENSIONS'] = ['.jpg', '.png', '.gif']
app.config['UPLOAD_FOLDER'] = 'uploads'

app.db_session = scoped_session(SessionLocal,
                                scopefunc=_app_ctx_stack.__ident_func__)

jsonrpc = JSONRPC(app,
                  '/api',
                  enable_web_browsable_api=True,
                  jsonrpc_site_api=AuthorizationView)
jsonrpc.register_blueprint(app,
Exemplo n.º 4
0
def get_firebase_claim(oauth_token: Optional[str] = None) -> Any:
    id_token = oauth_token or request.headers['Authorization'].split(' ').pop()
    if (not id_token or id_token == 'Bearer'): return None
    claims = google.oauth2.id_token.verify_firebase_token(
        id_token, HTTP_REQUEST, audience=config.get('GOOGLE_CLOUD_PROJECT'))
    return claims, id_token
Exemplo n.º 5
0
def form_post():
    if request.method == 'POST':
        tempdir = None
        filenames = []
        content_json = request.form.get('params')
        content = json.loads(content_json) if content_json else {}
        try:
            # check if the post request has the file part
            #if not request.files:
            #    return Response("{}", status=200, mimetype='application/json')
            authorization = request.headers.get('Authorization')
            claims = get_firebase_claim()
            for name, files in request.files.items():
                for file in request.files.getlist(name):
                    filename = file.filename
                    # if user does not select file, browser also
                    # submit an empty part without filename
                    if file.filename == '':
                        return Response("{}",
                                        status=200,
                                        mimetype='application/json')

                    if file and allowed_file(file.filename):
                        filename = secure_filename(file.filename)
                        filenames.append(filename)
                        mimetype = file.mimetype
                        try:
                            if not tempdir:
                                tempdir = tempfile.mkdtemp()
                            save_to = os.path.join(tempdir, filename)
                            file.save(save_to)
                        except:
                            pass
        finally:
            if tempdir:
                dirname = os.path.split(tempdir)[-1]
                try:
                    ipfs_client = ipfshttpclient.connect(
                        config.get('IPFS_API_URL', '/dns/db/tcp/5001/http'))
                    result = ipfs_client.add(tempdir,
                                             pattern="**",
                                             wrap_with_directory=False)
                    folder = result[-1]
                    hash = folder["Hash"]
                except Exception as err:
                    error = str(err)
                    result = None
                    pass
                finally:
                    shutil.rmtree(tempdir, ignore_errors=True)
                    if result:
                        return Response(json.dumps({
                            "ipfs": [
                                dict(Name=re.sub('^' + dirname + '/?', '',
                                                 x["Name"]),
                                     Hash=x["Hash"],
                                     Size=x["Size"]) for x in result
                            ]
                        }),
                                        status=200,
                                        mimetype='application/json')
                    else:
                        return Response("{{{error}}}".format(error=error),
                                        status=200,
                                        mimetype='application/json')
            else:
                return Response(json.dumps({"ifps": []}),
                                status=200,
                                mimetype='application/json')

        return Response("{{{to}}}".format(to=save_to or tempdir),
                        status=200,
                        mimetype='application/json')
    return Response("what")
Exemplo n.º 6
0
import os
import sqlalchemy
import pyodbc
from sqlalchemy import create_engine, engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import flaskweb.config as config
odbc_connection_string = config.get('ODBC_CONNECTION_STRING')
odbc_connection_credential = config.get('ODBC_CONNECTION_CREDENTIAL')
sqlalchemy_engine_url = config.get('SQLALCHEMY_URL')
mariadb_key_location = config.get('MARIADB_KEY_LOCATION')
if mariadb_key_location is None or mariadb_key_location == 'None':
    mysql_connect_args = {}
else:
    mysql_connect_args = {
        "ssl_ca": os.path.join(mariadb_key_location, "mariadb-ca.pem"),
        "ssl_cert": os.path.join(mariadb_key_location, "mariadb-cert.pem"),
        "ssl_key": os.path.join(mariadb_key_location, "mariadb-key.pem"),

        #"check_same_thread":False # only for sqlite !
    }
engine = create_engine(sqlalchemy_engine_url, connect_args=mysql_connect_args)

SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)

Base = declarative_base()


def mssql_query(connection):
    cursor = connection.cursor()
    cursor.execute("SELECT UsrId, UsrName FROM dbo.Usr")