Пример #1
0
def admin_endpoint_api_remove(endpoint_id):

    endpoint = MongoConn.get_endpoints_col()
    ept = endpoint.find_one({'_id':ObjectId(endpoint_id)})

    if ept is not None:
        collection_list = MongoConn.get_collection(ept['collection_list'])
        collections = list(collection_list.find())
        for i in collections:
          print(i['collection_name'])
          print("finding " + i['collection_name'])

          c = MongoConn.get_collection(i['collection_name'])

          if c is not None:
            print("removing " + i['collection_name'])
            c.drop()

        collection_list.drop()
        endpoint.delete_one({'_id': ObjectId(endpoint_id)})
        msg = {'result':'successful','msg': "Endpoint removed."}
    else:
        msg = {'result':'failed','msg': "Endpoint does not exist."}

    return jsonify(msg)
Пример #2
0
def general_collection_api_aggregate(endpoint_name, collection_id):
    endpoint = MongoConn.get_collection("endpoints")

    ept = endpoint.find_one({'endpoint_name': endpoint_name})

    if ept is not None:
        collection_list = MongoConn.get_collection(ept['collection_list'])

        c = collection_list.find_one({'_id': ObjectId(collection_id)})

        if c is not None:
            collection = MongoConn.get_collection(c['collection_name'])
            req = request.json
            print(req)

            results = list(collection.aggregate(req))

            msg = json.loads(JSONUtils.JSONEncoder().encode(results))

        else:
            msg = {
                'result': 'failed',
                'msg': "Collection_id: " + collection_id + " does not exist"
            }

    else:
        msg = {
            'result': 'failed',
            'msg': "Endpoint " + endpoint_name + " does not exist"
        }

    return jsonify(msg)
Пример #3
0
def general_endpoint_api_get(endpoint_name, collection_id):
    endpoint = MongoConn.get_endpoints_col()

    ept = endpoint.find_one({'endpoint_name': endpoint_name})

    if ept is not None:
        collection_list = MongoConn.get_collection(ept['collection_list'])

        c = collection_list.find_one({'_id': ObjectId(collection_id)})

        limit = int(request.args.get('limit'))
        offset = int(request.args.get('offset'))

        if c is not None:
            collection = MongoConn.get_collection(c['collection_name'])

            results = list(collection.find().skip(offset).limit(limit))

            msg = json.loads(JSONUtils.JSONEncoder().encode(results))

        else:
            msg = {
                'result': 'failed',
                'msg': "Collection_id: " + collection_id + " does not exist"
            }

    else:
        msg = {
            'result': 'failed',
            'msg': "Endpoint " + endpoint_name + " does not exist"
        }

    return jsonify(msg)
Пример #4
0
def admin_users_api_set_role():
    user = MongoConn.get_user_col()
    u = user.find_one({'_id': ObjectId(request.json['user_id'])})
    role = request.json['user_role']
    print(role)
    if role == Config.ADMIN or role == Config.TYPE_ONE or role == Config.TYPE_TWO or role == Config.TYPE_THREE:

        #There are four types of users. Set role according to the request.

        user.update_one({'_id': u['_id']}, {'$set': {
            'role': role
        }},
                        upsert=False)
        return jsonify({
            'result':
            "successful",
            "msg":
            "User " + u['username'] + "\'s role has been changed to " + role +
            "."
        })
    else:

        return jsonify({
            'result': "failed",
            "msg": role + " is not a valid user role."
        })
Пример #5
0
def general_endpoint_api_create(endpoint_name):
    endpoint = MongoConn.get_endpoints_col()

    ept = endpoint.find_one({'endpoint_name': endpoint_name})

    if ept is not None:
        collection_list = MongoConn.get_collection(ept['collection_list'])
        json = request.json
        c = collection_list.find_one(
            {'collection_name': json['collection_name']})

        if c is None:
            date = datetime.now()

            _id = collection_list.insert({
                'collection_name':
                json['collection_name'],
                'collection_des':
                json['collection_des'],
                'create_at_ts':
                date.strftime('%S'),
                'create_at_str':
                date.strftime('%Y-%m-%d %H:%M:%S'),
                'username':
                session['user']['username'],
            })

            msg = {
                'result': 'successful',
                'msg': "Collection " + json['collection_name'] + " is created",
                'collection_id': str(_id)
            }

        else:
            msg = {
                'result': 'failed',
                'msg': "Collection " + json['collection_name'] + " exists"
            }
    else:
        msg = {
            'result': 'failed',
            'msg': "Endpoint " + endpoint_name + " does not exist"
        }

    return jsonify(msg)
Пример #6
0
def general_endpoint_api_list(endpoint_name):
    endpoint = MongoConn.get_endpoints_col()

    ept = endpoint.find_one({'endpoint_name': endpoint_name})

    if ept is not None:
        collection_list = MongoConn.get_collection(ept['collection_list'])

        collections = list(collection_list.find())

        return JSONUtils.JSONEncoder().encode(collections)

    else:
        msg = {
            'result': 'failed',
            'msg': "Endpoint " + endpoint_name + " does not exist"
        }

    return jsonify(msg)
Пример #7
0
    def check_admin_read(*args, **kwargs):
        user = session['user']
        users = MongoConn.get_user_col()
        u = users.find_one({'username': user['username']})

        if u is None:
            return jsonify({'result': 'failed', 'reason': "Access denied, invalid token."})
        else:
            print(u)
            if u['role'] == Config.ADMIN or u['role'] == Config.TYPE_ONE or u['role'] == Config.TYPE_TWO or u['role'] == Config.TYPE_THREE:
                return func(*args, **kwargs)
            else:
                return jsonify({'result': 'failed', 'reason': "Access denied, admin or type1,2,3 only."})
Пример #8
0
def general_collection_api_put(endpoint_name, collection_id):
    endpoint = MongoConn.get_collection("endpoints")

    ept = endpoint.find_one({'endpoint_name': endpoint_name})

    if ept is not None:
        collection_list = MongoConn.get_collection(ept['collection_list'])

        c = collection_list.find_one({'_id': ObjectId(collection_id)})

        if c is not None:
            collection = MongoConn.get_collection(c['collection_name'])
            json = request.json
            print(json)

            #update
            for record in json:
                collection.replace_one({'_id': ObjectId(record['id'])}, record)

            msg = {
                'result':
                'successful',
                'msg':
                str(len(json)) + " records  in Collection_id: " +
                collection_id + " are updated"
            }
        else:
            msg = {
                'result': 'failed',
                'msg': "Collection_id: " + collection_id + " does not exist"
            }

    else:
        msg = {
            'result': 'failed',
            'msg': "Endpoint " + endpoint_name + " does not exist"
        }

    return jsonify(msg)
Пример #9
0
    def check_admin(*args, **kwargs):
        user = session['user']
        users = MongoConn.get_user_col()
        u = users.find_one({'username': user['username']})

        if u is None:
            return jsonify({'result': 'failed', 'reason': "Access denied, invalid token."})
            # return Response("Access denied, invalid token")
        else:
            print (u)
            if u['role'] == Config.ADMIN:
                return func(*args, **kwargs)
            else:
                return jsonify({'result': 'failed', 'reason': "Access denied, admin only."})
Пример #10
0
def general_endpoint_api_post(endpoint_name, collection_id):
    endpoint = MongoConn.get_endpoints_col()

    ept = endpoint.find_one({'endpoint_name': endpoint_name})

    if ept is not None:
        collection_list = MongoConn.get_collection(ept['collection_list'])

        c = collection_list.find_one({'_id': ObjectId(collection_id)})

        if c is not None:
            collection = MongoConn.get_collection(c['collection_name'])
            json = request.json  # Seems all json posted would be save into db, not sure how to restrict column.

            print(json)

            collection.insert_many(json)  # Insert number can not be only 1.

            msg = {
                'result': 'successful',
                'msg':
                str(len(json)) + " records are saved to " + collection_id
            }

        else:
            msg = {
                'result': 'failed',
                'msg': "Collection_id: " + collection_id + " does not exist"
            }

    else:
        msg = {
            'result': 'failed',
            'msg': "Endpoint " + endpoint_name + " does not exist"
        }

    return jsonify(msg)
Пример #11
0
def general_collection_remove_api(endpoint_name, collection_id):
    endpoint = MongoConn.get_endpoints_col()
    ept = endpoint.find_one({'endpoint_name': endpoint_name})

    if ept is not None:
        collection_list = MongoConn.get_collection(ept['collection_list'])
        c = collection_list.find_one({'_id': ObjectId(collection_id)})

        if c is not None:
            collection_list.delete_one({'_id': ObjectId(collection_id)})
            collection = MongoConn.get_collection(c['collection_name'])
            if collection is not None:
                collection.drop()
            msg = {
                'result':
                'successful',
                'msg':
                "Collection_ID " + collection_id + " has been removed from " +
                endpoint_name
            }
        else:
            msg = {
                'result':
                'failed',
                'msg':
                "Collection_ID " + collection_id + " does not exist in " +
                endpoint_name
            }

    else:
        msg = {
            'result': 'failed',
            'msg': "Endpoint " + endpoint_name + " does not exist"
        }

    return jsonify(msg)
Пример #12
0
def general_collection_info_api(endpoint_name, collection_id):
    endpoint = MongoConn.get_endpoints_col()
    print(endpoint_name)
    ept = endpoint.find_one({'endpoint_name': endpoint_name})
    print(session['user'])

    if ept is not None:
        collection_list = MongoConn.get_collection(ept['collection_list'])
        c = collection_list.find_one({'_id': ObjectId(collection_id)})
        print(c)

        if c is not None:
            msg = {
                'Welcome': session['user']['username'],
                'Message': Config.General_ENDPOINT_API_DES,
                'Endpoint_name': endpoint_name,
                'Endpoint_desc': ept['endpoint_desc'],
                'Collection_name': c['collection_name'],
                'Collection_desc': c['collection_des']
            }
        else:
            msg = {
                'result':
                'failed',
                'msg':
                "Collection_ID " + collection_id + " does not exist in " +
                endpoint_name
            }

    else:
        msg = {
            'result': 'failed',
            'msg': "Endpoint " + endpoint_name + " does not exist"
        }

    return jsonify(msg)
Пример #13
0
def admin_users_api_remove(user_id):
    user = MongoConn.get_user_col()
    u = user.find_one({'_id': ObjectId(user_id)})

    if u is not None:
        user.delete_one({'_id': ObjectId(user_id)})
        return jsonify({
            'result': "successful",
            "msg": "User " + u['username'] + " has been removed."
        })

    else:
        return jsonify({
            'result': "failed",
            "msg": "User " + u['username'] + " does not exist."
        })
Пример #14
0
def admin_endpoint_api_create():
    endpoint = MongoConn.get_endpoints_col()
    date = datetime.now()

    json = request.json

    # Duplicate name could happen here.

    endpoint.insert({
        'create_at_ts': date.strftime('%S'),
        'create_at_str': date.strftime('%Y-%m-%d %H:%M:%S'),
        'username': session['user']['username'],
        'endpoint_name': json['endpoint_name'], # Better have some restriction on no-space.
        'endpoint_desc': json['endpoint_desc'],
        'collection_list': json['collection_list'] # Better have some restriction on no-space.
    })

    return jsonify({'result': "successful", "msg": "Endpoint " + json['endpoint_name'] + " created"})
Пример #15
0
def general_endpoint_api(endpoint_name):
    endpoint = MongoConn.get_endpoints_col()

    ept = endpoint.find_one({'endpoint_name': endpoint_name})

    if ept is not None:
        msg = {
            'Welcome': session['user']['username'],
            'Message': Config.General_ENDPOINT_API_DES,
            'Endpoint_name': endpoint_name,
            'Endpoint_desc': ept['endpoint_desc']
        }

    else:
        msg = {
            'result': 'failed',
            'msg': "Endpoint " + endpoint_name + " does not exist"
        }

    return jsonify(msg)
Пример #16
0
def authenticate_user():
    user = MongoConn.get_user_col()

    username = request.json['username']
    password = request.json['password']

    u = user.find_one({'username': username})

    if u is None:
        return jsonify({'result': "Failed, user no not existed!"})
    else:
        pwd_hash = u['password']
        if (PwdUtils.verify_password(password, pwd_hash)):
            token = jwt.encode({
                'username': username,
                'password': pwd_hash
            },
                               Config.API_SECRET,
                               algorithm=Config.TOKEN_ALG).decode('utf-8')

            query = {'_id': u['_id']}
            update_record = {
                '$set': {
                    'token':
                    token,
                    'token_created_at':
                    datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                }
            }

            user.update_one(query, update_record, upsert=True)

            return jsonify({
                'result': "successful",
                "token": token,
                "username": username,
                "role": u['role']
            })

        else:
            return jsonify({'result': "Failed, pls provide correct password!"})
Пример #17
0
def register_user():
    username = request.json['username']
    password = request.json['password']

    user = MongoConn.get_user_col()

    u = user.find_one({'username': username})

    if u is None:
        date = datetime.now()

        encrypted_pwd = PwdUtils.set_password(password)

        token = jwt.encode({
            'username': username,
            'password': encrypted_pwd
        },
                           Config.API_SECRET,
                           algorithm=Config.TOKEN_ALG).decode('utf-8')

        user.insert({
            'create_at_ts': date.strftime('%S'),
            'create_at_str': date.strftime('%Y-%m-%d %H:%M:%S'),
            'username': username,
            'role': Config.TYPE_ONE,
            'password': encrypted_pwd,
            'token': token,
            'token_created_at': date.strftime('%Y-%m-%d %H:%M:%S')
        })

        return jsonify({
            'result': "successful",
            "token": token,
            "username": username,
            "role": Config.TYPE_ONE
        })
    else:
        return jsonify({'result': "Failed, user existed!"})
Пример #18
0
from flask import Flask
from flask import jsonify
from Utils import Config, MongoConn, PostgreConn
from flask_cors import CORS
from Flaskr import (auth, api_home, api_user, api_endpoints,
                    api_endpoint_collections, api_dbtable)

app = Flask(__name__)
app.secret_key = 'FusionTreeAPI'
CORS(app)

# initialize mongodb connection
MongoConn.init_db(app)
PostgreConn.init_db()


# root api
@app.route('/', methods=['GET'])
def show_welcome():
    # return render_template("index.html")
    return jsonify(Config.ROOT_DES)


app.register_blueprint(auth.bp)
app.register_blueprint(api_home.bp)
app.register_blueprint(api_user.bp)
app.register_blueprint(api_endpoints.bp)
app.register_blueprint(api_endpoint_collections.bp)
app.register_blueprint(api_dbtable.bp)

if __name__ == '__main__':
Пример #19
0
def admin_endpoint_api_list():
    endpoint = MongoConn.get_endpoints_col()

    endpoints = list(endpoint.find())

    return JSONUtils.JSONEncoder().encode(endpoints)
Пример #20
0
def admin_users_api_list():
    user = MongoConn.get_user_col()

    users = list(user.find())

    return JSONUtils.JSONEncoder().encode(users)