예제 #1
0
def create_user():
    try:
        data = request.get_json()
        if (User.find_by_email(data['email']) is not None
                or User.find_by_username(
                    data['username']) is not None):  # already exist user
            return response_with(resp.INVALID_INPUT_422)
        data['password'] = User.generate_hash(
            data['password'])  # password to hash
        user_schmea = UserSchema()
        user = user_schmea.load(data).data
        token = generate_verification_token(
            data['email'])  # generate token by email
        verification_email = url_for('user_routes.verify_email',
                                     token=token,
                                     _external=True)
        html = render_template_string(
            "<p>Welcome! Thanks for signing up. Please follow this link to activate your account:</p> <p><a href='{{ verification_email }}'>{{ verification_email }}</a></p> <br> <p>Thanks!</p>",
            verification_email=verification_email)
        subject = "Please Verify your email"
        send_email(user.email, subject, html)

        result = user_schmea.dump(user.create())
        return response_with(resp.SUCCESS_201)
    except Exception as e:
        print(e)
        return response_with(resp.INVALID_INPUT_422)
예제 #2
0
def authenticate_user():
    try:
        data = request.get_json()
        if data.get('email'):  # find user is exist by emial
            current_user = User.find_by_email(data['email'])
        elif data.get('username'):  # find user is exist by username
            current_user = User.find_by_username(data['username'])
        if not current_user:  # not find register user ,return 404
            return response_with(resp.SERVER_ERROR_404)
        if current_user and not current_user.isVerified:
            return response_with(
                resp.BAD_REQUEST_400)  # find user , but not verrify
        if User.verify_hash(data['password'],
                            current_user.password):  # check password is right
            access_token = create_access_token(
                identity=current_user.username)  # generate access token
            return response_with(resp.SUCCESS_200,
                                 value={
                                     'message': 'Logged in as admin',
                                     "access_token": access_token
                                 })
        else:
            return response_with(resp.UNAUTHORIZED_401)
    except Exception as e:
        print(e)
        return response_with(resp.INVALID_INPUT_422)
예제 #3
0
파일: users.py 프로젝트: bfgdatabase/site
def create_role(**kwargs):  
    if("login" in session) == False:
        return response_with(FORBIDDEN_403)
    if not (session["role"] == 'administrator'):
        return response_with(FORBIDDEN_403)
    query = UserRolesDB()
    for key, value in kwargs.items():
        setattr(query, key, value)
    db.session.add(query)
    db.session.commit()
    schema = RolesSchema()
    roles = UserRolesDB.query.all()
    for role in roles:
        for table in editableTables:
            query = UserPermissionsDB.query.all()
            permissions = UserPermissionsDB.query.filter_by(table = table[0], role = role.role)
            if(permissions.count() == 0):
                item = UserPermissionsDB(
                    table = table[0], 
                    role = role.role,
                    get = False,
                    put = False,
                    delete = False,
                    )
                db.session.add(item)
                db.session.commit()   
    return response_with(resp.SUCCESS_200, value={"query": schema.dump(query)})
예제 #4
0
파일: users.py 프로젝트: bfgdatabase/site
def get_users():
    if("login" in session) == False:
        return response_with(FORBIDDEN_403)
    if not (session["role"] == 'administrator'):
        return response_with(FORBIDDEN_403)
    query = UsersDB.query.order_by("login").all()
    query_schema = UsersSchema(many=True, exclude=("password_hash", ))
    return response_with(resp.SUCCESS_200, value={"query": query_schema.dump(query)})
예제 #5
0
파일: users.py 프로젝트: bfgdatabase/site
def get_roless():
    if("login" in session) == False:
        return response_with(FORBIDDEN_403)
    if not (session["role"] == 'administrator'):
        return response_with(FORBIDDEN_403)
    query = UserRolesDB.query.order_by("role").all()
    query_schema = RolesSchema(many=True)
    return response_with(resp.SUCCESS_200, value={"query": query_schema.dump(query)})
예제 #6
0
def login(**kwargs):
    query = UsersDB.authentificate(login=kwargs['login'],
                                   password=kwargs['password_hash'])
    if (not query):
        return response_with(resp.UNAUTHORIZED_401)
    session["username"] = query.username
    session["login"] = query.login
    session["role"] = query.role
    return response_with(resp.SUCCESS_200)
예제 #7
0
파일: users.py 프로젝트: bfgdatabase/site
def delete_user(id):
    if("login" in session) == False:
        return response_with(FORBIDDEN_403)
    if not (session["role"] == 'administrator'):
        return response_with(FORBIDDEN_403)
    query = UsersDB.query.get_or_404(id)
    db.session.delete(query)
    db.session.commit()     
    return response_with(resp.SUCCESS_200)
예제 #8
0
def create_author():
    try:
        data = request.get_json()
        author_schema = AuthorsSchema()
        author = author_schema.load(data)
        result = author_schema.dump(
            author.data.create())  ##这里作为一个修改点,可能是新版本的的接口调整了
        return response_with(resp.SUCCESS_201, value={"author": result})
    except Exception as e:
        return response_with(resp.INVALID_INPUT_422)
예제 #9
0
def restore_db(name):
    if ("login" in session) == False:
        return response_with(FORBIDDEN_403)
    if not (session["role"] == 'administrator'):
        return response_with(FORBIDDEN_403)
    res = os.system('psql ' + DB_URL + ' < ' + 'db_backup/' + name + '.sql')
    if (res == 0):
        return response_with(resp.SUCCESS_200)
    else:
        return response_with(resp.SERVER_ERROR_500)
예제 #10
0
def create_author():
    try:
        data = request.get_json()
        author_schema = AuthorSchmea()
        author = author_schema.load(data)
        result = author_schema.dump(author.create()).data
        return response_with(resp.SUCCESS_201, value={"author": result})
    except Exception as e:
        print(e)
        return response_with(resp.INVALID_INPUT_422)
예제 #11
0
def create_book():
    try:
        data = request.get_json()
        book_schema = BookSchema()
        book = book_schema.load(data)
        result = book_schema.dump(book.data.create())
        return response_with(resp.SUCCESS_201, value={"book": result})
    except Exception as e:
        print(e)
        return response_with(resp.INVALID_INPUT_422)
예제 #12
0
파일: users.py 프로젝트: bfgdatabase/site
def update_permission(id, **kwargs):  
    if("login" in session) == False:
        return response_with(FORBIDDEN_403)
    if not (session["role"] == 'administrator'):
        return response_with(FORBIDDEN_403)
    query = UserPermissionsDB.query.get_or_404(id)
    for key, value in kwargs.items():
        setattr(query, key, value)
    db.session.commit()
    schema = PermissionsSchema()
    return response_with(resp.SUCCESS_200, value={"query": schema.dump(query)})
예제 #13
0
def create_user():
    try:
        data = request.get_json()
        data['password'] = User.generate_hash(data['password'])
        user_schmea = UserSchema()
        user  = user_schmea.load(data)
        result = user_schmea.dump(user.data.create())
        return response_with(resp.SUCCESS_201)
    except Exception as e:
        print(e)
        return response_with(resp.INVALID_INPUT_422)
예제 #14
0
def authenticate_user():
    try:
        data = request.get_json()
        current_user = User.find_by_username(data['username'])
        if not current_user:
            return response_with(resp.SERVER_ERROR_404)
        if User.verify_hash(data['password'], current_user.password):
            access_token = create_access_token(identity = data['username'])
            return response_with(resp.SUCCESS_201,value={'message': 'Logged in as {}'.format(current_user.username), "access_token": access_token})
        else:
            return response_with(resp.UNAUTHORIZED_401)
    except Exception as e:
        print(e)
        return response_with(resp.INVALID_INPUT_422)
예제 #15
0
파일: users.py 프로젝트: bfgdatabase/site
def delete_role(id):
    if("login" in session) == False:
        return response_with(FORBIDDEN_403)
    if not (session["role"] == 'administrator'):
        return response_with(FORBIDDEN_403)
    query = UserRolesDB.query.get_or_404(id)
    name = query.role
    db.session.delete(query)
    db.session.commit()  
    query = UserPermissionsDB.query.filter_by(role = name)
    for q in query:
        db.session.delete(q)
        db.session.commit()          
    return response_with(resp.SUCCESS_200)
예제 #16
0
파일: batch.py 프로젝트: bfgdatabase/site
def update_batch(id, **kwargs):
    query = BatchDB.query.get_or_404(id)
    for key, value in kwargs.items():
        setattr(query, key, value)
    db.session.commit()
    schema = BatchSchema()
    return response_with(resp.SUCCESS_200, value={"query": schema.dump(query)})
예제 #17
0
def verify_email(token):  # register username , then check the email
    try:
        email = confirm_verification_token(token)
    except Exception as e:
        return response_with(resp.SERVER_ERROR_401)
    user = User.query.filter_by(email=email).first_or_404()
    if user.isVerified:
        return response_with(resp.INVALID_INPUT_422)
    else:
        user.isVerified = True
        db.session.add(user)
        db.session.commit()
        return response_with(
            resp.SUCCESS_200,
            value={
                'message': 'E-mail verified, you can proceed to login now.'
            })
예제 #18
0
파일: batch.py 프로젝트: bfgdatabase/site
def create_batch(**kwargs):
    query = BatchDB()
    for key, value in kwargs.items():
        setattr(query, key, value)
    db.session.add(query)
    db.session.commit()
    schema = BatchSchema()
    return response_with(resp.SUCCESS_200, value={"query": schema.dump(query)})
예제 #19
0
파일: markloc.py 프로젝트: bfgdatabase/site
def get_marklog_path(id, begin, end):
    begin = begin.replace("T", " ").replace(".000Z", "")
    end = end.replace("T", " ").replace(".000Z", "")
    query = MarklogDB.query.filter(MarklogDB.timeis.between(
        begin, end)).filter_by(id_mark=id).order_by("timeis").all()
    query_schema = MarklogSchema(many=True)
    return response_with(resp.SUCCESS_200,
                         value={"query": query_schema.dump(query)})
예제 #20
0
def delete_department(id):
    query = DepartmentDB.query.get_or_404(id)
    db.session.delete(query)
    db.session.commit()
    query = LocationsDB.query.filter_by(dept_id=id).all()
    for item in query:
        db.session.delete(item)
        db.session.commit()
    return response_with(resp.SUCCESS_200)
예제 #21
0
def delete_specifications(id):
    query = RouteDB.query.filter_by(spec_id=id).all()
    for item in query:
        db.session.delete(item)
        db.session.commit()
    query = SpecDB.query.get_or_404(id)
    db.session.delete(query)
    db.session.commit()
    return response_with(resp.SUCCESS_200)
예제 #22
0
def create_tmetrics(**kwargs):
    query = TmetricDB()
    for key, value in kwargs.items():
        setattr(query, key, value)
    query.created = datetime.now(timezone.utc)
    db.session.add(query)
    db.session.commit()
    schema = TmetricSchema()
    return response_with(resp.SUCCESS_200, value={"query": schema.dump(query)})
예제 #23
0
파일: report.py 프로젝트: bfgdatabase/site
def get_report_batch(id, time_start=None, time_end=None):
    query = create_report_on_batch_by_filters(id, time_start, time_end)
    # {
    # 'batch_id',
    # 'current_location',
    # 'last_events' : [ {'time', 'location'} ]
    # }
    #
    return response_with(resp.SUCCESS_200, value=query)
예제 #24
0
def delete_markgroupsetting(id):
    query = MarkSettingsDB.query.get_or_404(id)
    db.session.delete(query)
    query_marks = MarkersDB.query.filter_by(
        markgroup_id=query.markgroup_id).all()
    for q in query_marks:
        q.set_settings = True
    db.session.commit()
    return response_with(resp.SUCCESS_200)
예제 #25
0
def update_author_detail(id):
    data = request.get_json()
    get_author = Authors.query.get_or_404(id)
    get_author.first_name = data['first_name']
    get_author.last_name = data['last_name']
    db.session.add(get_author)
    db.session.commit()
    author_schema = AuthorsSchema()
    author, error = author_schema.dump(get_author)
    return response_with(resp.SUCCESS_200, value={"author": author})
예제 #26
0
def update_book_detail(id):
    data = request.get_json()
    get_book = Book.query.get_or_404(id)
    get_book.title = data['title']
    get_book.year = data['year']
    db.session.add(get_book)
    db.session.commit()
    book_schema = BookSchema()
    book, error = book_schema.dump(get_book)
    return response_with(resp.SUCCESS_200, value={"book": book})
예제 #27
0
def upload_location(id):
    if request.method == 'POST':
        file = request.files['file']
        if file.filename == '':
            return response_with(resp.MISSING_PARAMETERS_422,
                                 value={"result": "No file to load"})

        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            extension = os.path.splitext(filename)[1]
            new_filename = str(id) + extension
            path = os.path.join(app.config['UPLOAD_FOLDER'], new_filename)
            file.save(path)
            my_data = LocationsDB.query.get(id)
            my_data.imageurl = new_filename
            db.session.commit()
            return response_with(resp.SUCCESS_200, value={"result": "OK"})
        else:
            return response_with(resp.INVALID_INPUT_422,
                                 value={"result": "Invalid file extension"})
예제 #28
0
def update_markgroupsetting(id, **kwargs):
    query = MarkSettingsDB.query.get_or_404(id)
    for key, value in kwargs.items():
        setattr(query, key, value)
    query_marks = MarkersDB.query.filter_by(
        markgroup_id=query.markgroup_id).all()
    for q in query_marks:
        q.set_settings = True
    db.session.commit()
    schema = MarkSettingSchema()
    return response_with(resp.SUCCESS_200, value={"query": schema.dump(query)})
예제 #29
0
파일: users.py 프로젝트: bfgdatabase/site
def registration(**kwargs):
    query = UsersDB()
    for key, value in kwargs.items():
        if(key == 'password_hash'):
            pass_hash = bcrypt.generate_password_hash(value, 10)  
            pass_hash_decoded = pass_hash.decode('utf-8') 
            query.password_hash = pass_hash_decoded
        else:
            setattr(query, key, value)
    query.role = ''
    db.session.add(query)
    db.session.commit()    
    return response_with(resp.SUCCESS_200)
예제 #30
0
파일: batch.py 프로젝트: bfgdatabase/site
def get_batches():
    """
    Список всех партий.
    ID партии ; код спецификации; время создания ; ID метки, к которой привязана партия ;
    количество деталей ; название ; время закрытия партии ; ID маршрута ;
    метрика отставания ; критика отставания ; время на сколько отстаёт\опережает ;
    время до завершения ; название зоны, текущего местоположения

    TODO Убрать тестовые данные.
    """
    # query = BatchDB.query.all()
    query = batches
    matrix = list()
    index = 0
    for i in query:
        matrix.append(list())
        hour = random.randint(0, 23)
        r = random.random()
        if r > 0.5:
            first = 2
        else:
            first = 1
        second = first
        r = random.random()
        if r > 0.5:
            second += 1
        if first == second:
            location = f'В пути со станка №{first} на станок №{first + 1}'
        else:
            location = f'На станке №{second}'
        """
        metrics = metrics_lag(datetime(2021, 11, 29, hour, 0, 0), (first, second), technology, i.batch_size)
        critics = criterion_lag(metrics[0])
        matrix[index].append([i.batch_id, i.code, i.created_at, i.id_mark, i.batch_size, i.product_name, i.closed,
                             i.route_id, metrics[0], critics, metrics[1], metrics[2], location])
        """

        metrics = metrics_lag(datetime(2021, 11, 29, hour, 0, 0),
                              (first, second), technology, i[4])
        critics = criterion_lag(metrics[0])
        matrix[index] = [
            i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], metrics[0],
            critics, metrics[1], metrics[2], location
        ]

        index += 1
    return response_with(resp.SUCCESS_200, value={"query": json.dump(matrix)})