Пример #1
0
def update_user(username):
    """사용자 정보 수정을 위한 함수"""

    current_user = __get_user(username)
    form = UpdateForm(request.form)

    if form.validate():
        email = form.email.data
        password = form.password.data

        try:
            current_user.email = email
            current_user.password = generate_password_hash(password)
            dao.commit()
        except Exception as e:
            dao.rollback()
            Log.error(str(e))
            raise e
        else:
            # 변경된 사용자 정보를 세션에 반영
            session['user_info'].email = \
                current_user.email
            session['user_info'].password = \
                current_user.password
            session['user_info'].password_confirm = \
                current_user.password
            # 성공적으로 사용자 등록이 되면, 로그인 화면으로 이동.
            return redirect(url_for('.login', update_username=username))
    else:
        return render_template('regist.html', user=current_user, form=form)
Пример #2
0
def register_user():
    """사용자 등록을 위한 함수"""

    form = RegisterForm(request.form)

    if form.validate():

        username = form.username.data
        email = form.email.data
        password = form.password.data

        try:
            user = User(username, email, generate_password_hash(password))
            dao.add(user)
            dao.commit()

            Log.debug(user)

        except Exception as e:
            error = "DB error occurs : " + str(e)
            Log.error(error)
            dao.rollback()
            raise e

        else:
            # 성공적으로 사용자 등록이 되면, 로그인 화면으로 이동.
            return redirect(url_for('.login', regist_username=username))
    else:
        return render_template('regist.html', form=form)
Пример #3
0
def unregist():
    user_id = session['user_info'].id

    try:
        user = dao.query(User).filter_by(id=user_id).first()
        Log.info("unregist:" + user.username)

        if user.id == user_id:
            dao.delete(user)
            # 업로드된 파일 삭제
            try:
                upload_folder = \
                    os.path.join(current_app.root_path,
                                 current_app.config['UPLOAD_FOLDER'])
                __delete_files(upload_folder, user.username)
            except Exception as e:
                Log.error("파일 삭제에 실패했습니다. : %s" + \
                          str(e))

            dao.commit()

        else:
            Log.error("존재하지 않는 사용자의 탈퇴시도 : %d", user_id)
            raise Exception

    except Exception as e:
        Log.error(str(e))
        dao.rollback()
        raise e

    return redirect(url_for('.logout'))
Пример #4
0
def update_contract(contract_id):
    """ 계약서 업로드 화면에서 사용자가 수정한 내용을 DB에 업데이트 한다. """

    form = ContractUploadForm(request.form)

    if form.validate(): 
        
        try :
            #: 변경전 원래의 contract 테이블 값을 읽어 온다.
            contract = dao.query(Contract).filter_by(id=contract_id).first()
            dao.commit()
    
        except Exception as e:
            dao.rollback()
            Log.error("Update DB error : " + str(e))
            raise e
    
        return redirect(url_for('.show_all'))
    else:
        return render_template('upload.html', contract=contract, form=form)
Пример #5
0
def remove(contract_id):
    """ DB에서 해당 데이터를 삭제하고 관련된 파일을 함께 삭제한다."""

    user_id = session['user_info'].id
    
    try:
        contract = dao.query(Contract).filter_by(id=str(contract_id)).first()
        
        dao.delete(contract)
        dao.commit()

        upload_folder = os.path.join(current_app.root_path, 
                                     current_app.config['UPLOAD_FOLDER'])
        os.remove(upload_folder + str(contract.filename))

    except Exception as e:
        dao.rollback()
        Log.error("Contract remove error => " + contract_id + ":" + user_id + \
                  ", " + str(e))
        raise e
    
    return redirect(url_for('.show_all'))
Пример #6
0
def upload_contract():
    """ Form으로 파일과 변수들을 DB에 저장하는 함수. """

    form = ContractUploadForm(request.form)
        
    # HTTP POST로 요청이 오면 사용자 정보를 등록
    if form.validate():  
        #: Session에 저장된 사용자 정보를 셋팅
        user_id = session['user_info'].id
        username = session['user_info'].username     
        
        #: Form으로 넘어온 변수들의 값을 셋팅함
        upload_date = datetime.today()
        
        #: 업로드되는 파일정보 값들을 셋팅한다.
        upload_contract = request.files['contract']
        filename = None
        filesize = 0
        filename_orig = upload_contract.filename
    
        try:
            #: 파일 확장자 검사
            if upload_contract and __allowed_file(upload_contract.filename):
                
                ext = (upload_contract.filename).rsplit('.', 1)[1]
    
                #: 업로드 폴더 위치는 얻는다.
                upload_folder = \
                    os.path.join(current_app.root_path, 
                                 current_app.config['UPLOAD_FOLDER'])
                #: 유일하고 안전한 파일명을 얻는다.   
                filename = \
                    secure_filename(username + 
                                    '_' + 
                                    str(uuid.uuid4()) +
                                    "." + 
                                    ext)
                
                abs_filename = os.path.join(upload_folder, filename)
                upload_contract.save(abs_filename)
                
                filesize = os.stat(upload_folder + filename).st_size
                
            else:
                raise Exception("File upload error : illegal file.")
    
        except Exception as e:
            Log.error(str(e))
            raise e
        
        try :
            tika_url = 'http://192.168.0.200:8080/tika/scanpdf?file=' + abs_filename
            es_url = 'http://192.168.0.200:9201/test_idx/fulltext/' + filename
            es_request_header = {'Content-Type': 'application/json; charset=utf-8'}
            
            #tika_parsed = parser.from_file(os.path.join(upload_folder, filename), tika_url)
            tika_parsed = requests.get(url=tika_url)
            tika_content = tika_parsed.content.decode("utf-8")
            es_data = {
                'title': filename,
                'text': tika_content
                }
#             r = requests.post(url=es_url, data=json.dumps(es_data), headers=es_request_header) # only english
            es_content = json.dumps(es_data, ensure_ascii=False).encode('utf-8')
            r = requests.post(url=es_url, data=es_content, headers=es_request_header)
            Log.debug(r)
            
        except Exception as e:
            Log.error(e)
            raise e
    
        try :
            #: 계약서에 대한 정보 DB에 저장
            contract = Contract(user_id, 
                          filename_orig, 
                          filename, 
                          filesize, 
                          upload_date
                          )
            dao.add(contract)
            dao.commit()
    
        except Exception as e:
            dao.rollback()
            Log.error("Upload DB error : " + str(e))
            raise e
    
        return redirect(url_for('.show_all'))
    else:
        return render_template('upload.html', form=form)