Пример #1
0
    def post(self):

        param = {
            'username': fields.String(),
            'password': fields.String(),
            'email': fields.String()
        }
        try:
            json_data = parse_req(param)
            username = json_data.get('username', None)
            password = json_data.get('password', None)
            email = json_data.get('email', None)

        except Exception:
            return jsonify("An error occurred when getting data !")

        query_user = {
            '_id': str(ObjectId()),
            'username': username,
            'password': password,
            'email': email,
            'first_login': True
        }

        try:
            find_person = mycol.find_one({'username': username})
            if find_person is not None:
                return jsonify("Username is already exist")
            if check_email(email) is None:
                return jsonify("Invalidate email !")
            else:
                mycol.insert_one(query_user)
                return jsonify("Register successfully !")
        except Exception:
            return jsonify("An error occurred when inserting data !")
Пример #2
0
    def post(self):
        param = {'username': fields.String(), 'password': fields.String()}
        try:
            json_data = parse_req(param)
            username = json_data.get('username', None)
            password = json_data.get('password', None)
        except Exception:
            return jsonify("An error occurred when getting data !")

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

        if not safe_str_cmp(user['password'], password):
            return jsonify("Your password is wrong!")

        access_token = create_access_token(identity=str(user['_id']),
                                           expires_delta=ACCESS_EXPIRES)
        fresh_token = create_refresh_token(identity=str(user['_id']),
                                           expires_delta=FRESH_EXPIRES)

        dict1 = {
            'access_token': access_token,
            'fresh_token': fresh_token,
            'message': 'Login Successfully !'
        }
        user_token = dict(_id=str(ObjectId()),
                          person_id=user['_id'],
                          access_token=access_token,
                          fresh_token=fresh_token)
        mycol1.insert_one(user_token)
        if user['first_login'] is True:
            return jsonify(dict1)

        return jsonify(dict1)
Пример #3
0
def update_data_by_id():
    """
    This method should update a post by its id in db
    :return: a notification of successful or error
    """
    param_id = request.args.get('_id', None)
    query_id = {
        '_id': param_id
    }
    find_id = news.find(query_id)
    if find_id is None:
        return jsonify("_id doesn't exist!")
    params = {
        'title': fields.String(),
        'content': fields.String()
    }
    json_data = parse_req(params)
    try:
        title = json_data.get('title', None)
        content = json_data.get('content', None)
    except:
        return jsonify("Error occur when getting data !")
    new_param = {
        '$set': {
                'title': title,
                'content': content
        }
    }
    try:
        result = news.update_one(query_id, new_param)
        return send_result(result)
    except:
        return send_error(code=500)
Пример #4
0
def add_post():
    """
    This method should add a new post in db
    :return: a notification of successful or errors
    """
    params = {
        'title': fields.String(),
        'content': fields.String()
    }
    json_data = parse_req(params)
    content = json_data.get("content", None)
    if check_input(content):
        return send_error(code=406, message="Content contains special characters")
    title = json_data.get('title', None)
    if check_input(title):
        return send_error(code=406, message="Title contains special characters")
    query_data = {
        '_id': str(ObjectId()),
        'title': title,
        'content': content
    }
    try:
        result = news.insert(query_data)
        return send_result(result)
    except:
        return send_error(code=400)
Пример #5
0
def login():
    """
    This methods uses to login  in order to gain access token
    :return: access token
    """
    param = {'username': fields.String(), 'password': fields.String()}
    try:
        json_data = parse_req(param)
        username = json_data.get('username', None)
        password = json_data.get('password', None)
    except:
        return jsonify("An error occurred when getting data !")

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

    if not safe_str_cmp(user['password'], password):
        return jsonify("Your password is wrong!")

    access_token = create_access_token(identity=str(user['_id']),
                                       expires_delta=ACCESS_EXPIRES)

    dict1 = {'access_token': access_token, 'message': 'Login Successfully !'}
    user_token = dict(
        _id=str(ObjectId()),
        person_id=user['_id'],
        access_token=access_token,
    )
    Token.insert_one(user_token)

    return jsonify(dict1)
Пример #6
0
    def post(self):
        """
        :variable: name, age, course, name_class
        :return:
        description: This method should create information of people
        """

        # person_id = request.args.get('_id', None)
        # query = {
        #     '_id': person_id
        # }
        # find_person = mycol2.find_one(query)
        # if find_person is None:
        #     return jsonify("No data !")
        #
        # if find_person['group_id'] != '1':
        #     return jsonify("You don;t have permission to manipulate this performance !")

        param = {
            'name': fields.String(),
            'age': fields.Number(),
            'course': fields.String(),
            'number_student': fields.String(),
            'name_class': fields.String(),
            'group_id': fields.String(),
            'email': fields.String()
        }

        try:
            json_data = parse_req(param)
            name = json_data.get('name', None)
            age = json_data.get('age', None)
            course = json_data.get('course', None)
            number_student = json_data.get('number_student', None)
            name_class = json_data.get('name_class', None)
            group_id = json_data.get('group_id', None)
            email = json_data.get('email', None)
        except Exception as e:
            return jsonify("An error occurred when getting data")

        query_user = {
            '_id': str(ObjectId()),
            'name': name,
            'age': int(age),
            'course': course,
            'number_student': number_student,
            'name_class': name_class,
            'file_avatar': None,
            'thumbnail': PATH_AVATAR_SERVER + AVATAR_DEFAULT,
            'group_id': group_id,
            'email': email
        }

        try:
            mycol2.insert_one(query_user)
            return jsonify("Insert Successfully !")
        except Exception:
            return jsonify("An error occurred when inserting data")
Пример #7
0
    def put(self):
        """
        :variable: name, age, course, name_class
        :return:
        description: This method should update information of people
        """
        person_id = request.args.get('_id', None)
        query = {'_id': person_id}
        find_person = mycol2.find_one(query)
        if find_person is None:
            return jsonify("No data !")

        if find_person['group_id'] != '1':
            return jsonify(
                "You don;t have permission to manipulate this performance !")

        person_id = request.args.get('_id', None)
        param = {
            'name': fields.String(),
            'age': fields.Number(),
            'course': fields.String(),
            'number_student': fields.String(),
            'name_class': fields.String()
        }

        try:
            json_data = parse_req(param)
            name = json_data.get('name', None)
            age = json_data.get('age', None)
            number_student = json_data.get('number_student', None)
            course = json_data.get('course', None)
            name_class = json_data.get('name_class', None)
        except Exception as e:
            return {e}
        query = {'_id': person_id}
        try:
            find_person = mycol2.find_one(query)
            if find_person is None:
                return jsonify("No data !")
        except Exception:
            return jsonify("An error occurred when finding data !")

        new_query = {
            '$set': {
                'name': name,
                'age': int(age),
                'course': course,
                'number_student': number_student,
                'name_class': name_class
            }
        }
        try:
            mycol2.update_one(query, new_query)
            return jsonify("Update successfully !")
        except Exception:
            return jsonify("An error occurred when updating data")
 def thread_handler(self, client_sock, address):
     size = 1024
     data = ""
     transfer = client_sock.recv(size)
     data = data + transfer.decode('utf-8')
     req = parse_req(data)
     resp = call_api(req, self.cache, self.lsmtree, self.lock, self.fine_grained_lock)
     client_sock.send(resp.encode('utf-8'))
     #self.cache.show()
     client_sock.close()
Пример #9
0
 def thread_handler(self, client_sock, address):
     size = 1024
     data = ""
     print("in handler")
     while True:
         transfer = client_sock.recv(size)
         data = data + transfer.decode('utf-8')
         if '\n' in transfer.decode('utf-8'):
             break
     req = parse_req(data)
     resp = call_api(req, self.cache, self.persistent, self.lock)
     client_sock.send(resp.encode('utf-8'))
     self.cache.show()
     client_sock.close()
Пример #10
0
def register_account():
    """
    This method should add another user
    :return: A notification of successful
    """
    params = {'username': fields.String(), 'password': fields.String()}
    json_data = parse_req(params)
    try:
        username = json_data.get('username', None)
        password = json_data.get('password', None)
    except:
        return send_error(code=500)
    query_account = {'username': username, 'password': password}

    find_username = userRegister.find({}, {'username': 1, '_id': 0})
    for user in find_username:
        if user['username'] == username:
            return jsonify("This account is already exist !")

    try:
        result = userRegister.insert_one(query_account)
        return send_result(result)
    except:
        return send_error(code=500)
Пример #11
0
    def run_server(self):
        self.polling = PollingSocket(self.host, self.port)
        self.init_helpers()
        self.run_helpers()
        #num_req = 0
        #first = True
        #tot_time = 0

        while True:
            requests = self.polling.poll_connection()
            #start = time.time()
            #num_req += len(requests)
            #if num_req:
            #    if first:
            #        tot_time = 0
            #        first = False
            #    if tot_time >= 1:
            #        with open('ep.lg', 'a') as f:
            #            f.write(str(num_req)+" "+str(tot_time)+"\n")
            #        #print(str(num_req)+" "+str(tot_time)+"\n")
            #        num_req = 0
            #        tot_time = 0

            for request in requests:
                #Request is a tuple of sock, request_data
                data = request[1]
                #Process request here
                req = parse_req(data.decode('utf-8'))
                req.fd = request[0]

                if req.op == 'GET':
                    val = self.cache.get(req.key)
                    if val is None:
                        # Cache miss: non-blocking put to req_queue
                        # for helper_threads to consume 
                        self.issue_request(req)
                    else:
                        resp = val
                        add_response(self.polling.sock_data_map, request[0], resp)
                
                elif req.op == 'PUT':
                    retval = self.cache.put(req.key, req.value)    
                    if retval is None:
                        #Cache miss
                        self.issue_request(req)
                    else:
                        resp = "ACK"
                        add_response(self.polling.sock_data_map, request[0], resp)

                elif req.op in ['INSERT', 'DELETE']:
                    self.issue_request(req)

                else:
                    resp = "-1".encode('utf-8')
                    add_response(self.polling.sock_data_map, request[0], resp)

            # Consume from response queue (non-blocking)
            try:
                responses = self.get_responses()
                for resp in responses:
                    #Ignore for write-back requests
                    if resp.fd is None:
                        continue
                    
                    #resp.value is actual value for GET
                    #for PUT/INSERT resp.value is "ACK" message
                    #resp.value is "-1" for all errors
                    #Delete needs special check if nothing to 
                    #delete from both cache and persistent
                    if resp.op != 'DELETE':
                        add_response(self.polling.sock_data_map, resp.fd, resp.value)
                    
                    #Entry brought to cache line for GET/PUT miss and INSERT
                    if resp.op in ['GET', 'PUT', 'INSERT']:
                        if resp.value != "-1":
                            self.__bring_to_cache(resp.key, resp.value, False)
                    elif resp.op == 'DELETE':
                        result = self.cache.delete(req.key)
                        if resp.value == "-1" and result is False:
                            #Nothing to delete from cache/ persistent
                            add_response(self.polling.sock_data_map, resp.fd, "-1")
                        else:
                            add_response(self.polling.sock_data_map, resp.fd, "ACK")
                    else:
                        pass
                #self.cache.show()
            except:
                pass