def create_app(dbInfo, config_filepath ="resource/config.cfg"): #app.config.from_object(__name__) #app.config.from_envvar('GRADE_SETTINGS', silent=True) # 기본 설정은 GradeServer_Config 객체에 정의되있고 운영 환경 또는 기본 설정을 변경을 하려면 # 실행 환경변수인 GradeServer_SETTINGS에 변경할 설정을 담고 있는 파일 경로를 설정 from GradeServer.GradeServer_config import GradeServerConfig app.config.from_object(GradeServerConfig) app.config.from_pyfile(config_filepath, silent=True) # Triple DES from GradeServer.GradeServer_py3des import TripleDES TripleDES.init() # Log from GradeServer.GradeServer_logger import Log Log.init() # SessionInterface 설정. from GradeServer.cache_session import RedisCacheSessionInterface app.session_interface = RedisCacheSessionInterface() # 데이터베이스 처리 from GradeServer.database import DBManager DBManager.init(app.config['DB_URL'].format(dbInfo[1], # DB root name dbInfo[2])) # DB Pasword DBManager.init_db() # 뷰 함수 모듈은 어플리케이션 객체 생성하고 블루프린트 등록전에 # 뷰 함수가 있는 모듈을 임포트해야 해당 뷰 함수들을 인식할 수 있음 from GradeServer.controller import * from GradeServer.GradeServer_blueprint import GradeServer app.register_blueprint(GradeServer) return app
def init_db(): from GradeServer.model import * from GradeServer.model import Base #metadata 연결 Base.metadata.create_all(bind=DBManager.__engine) # Init Date Input try: from datetime import datetime from werkzeug.security import generate_password_hash from GradeServer.utils.utilUserQuery import insert_members from GradeServer.utils.utilSubmissionQuery import insert_language from GradeServer.resource.setResources import SETResources from GradeServer.GradeServer_py3des import TripleDES dao.add(insert_language(languageName='C')) dao.add(insert_language(languageName='C++')) dao.add(insert_language(languageName='JAVA')) dao.add( insert_language(languageName='PYTHON', languageVersion='2.7')) dao.add( insert_language(languageName='PYTHON', languageVersion='3.4')) dao.add( insert_members(memberId='master', password=generate_password_hash( TripleDES.encrypt(str('master'))), memberName='master', signedInDate=datetime.now(), authority=SETResources().const.ADMINISTRATOR)) dao.commit() except Exception: dao.rollback()
def id_check(select, error = None): if request.method == 'POST': # 암호를 입력 안했을 때 if not request.form['password']: error ='Password' + get_message('fillData') else: try: memberId = session[SessionResources().const.MEMBER_ID] password = request.form['password'] check = select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = memberId)).first() # 암호가 일치 할 때 #Checking Success if check_password_hash (check.password, TripleDES.encrypt(str(password))): # for all user if select == 'account': return redirect(url_for(RouteResources().const.EDIT_PERSONAL)) # server manager elif SETResources().const.SERVER_ADMINISTRATOR in session[SessionResources().const.AUTHORITY][0]: if select == 'server_manage_collegedepartment': return redirect(url_for('.server_manage_collegedepartment', collegePageNum = int(1), departmentPageNum = int(1))) elif select == 'server_manage_class': return redirect(url_for('.server_manage_class', pageNum = int(1))) elif select == 'server_manage_problem': return redirect(url_for('.server_manage_problem', activeTabId = OtherResources().const.ALL, pageNum = int(1))) elif select == 'server_manage_user': return redirect(url_for('.server_manage_user', activeTabId = OtherResources().const.ALL, pageNum = int(1))) elif select == 'server_manage_service': return redirect(url_for('.server_manage_service')) # class manager elif SETResources().const.COURSE_ADMINISTRATOR in session[SessionResources().const.AUTHORITY][0]: if select == 'user_submit': return redirect(url_for('.class_user_submit')) elif select == 'cm_manage_problem': return redirect(url_for('.class_manage_problem')) elif select == 'cm_manage_user': return redirect(url_for('.class_manage_user')) elif select == 'cm_manage_service': return redirect(url_for('.class_manage_service')) else: return unknown_error() # 암호가 일치 하지 않을 때 else: error = get_message('wrongPassword') except Exception as e: Log.error(str(e)) raise e return render_template(HTMLResources().const.ID_CHECK_HTML, error = error)
def id_check(select, error=None): if request.method == 'POST': password = get_request_value(form=request.form, name='password') if password: check = select_member(memberIdIndex=session[ SessionResources().const.MEMBER_ID_INDEX]).first() # 암호가 일치 할 때 #Checking Success if len(password) <= 20\ and check_password_hash (check.password, TripleDES.encrypt(str(password))): # for all user if select == 'account': return redirect( url_for(RouteResources().const.EDIT_PERSONAL)) # server manager elif SETResources().const.ADMINISTRATOR in session[ SessionResources().const.AUTHORITY]: if select == 'user_submit': return redirect(url_for('.user_submit', pageNum=int(1))) elif select == 'manage_problem': return redirect( url_for( '.manage_problem', problemLevel=LanguageResources().const.All[1], pageNum=int(1))) elif select == 'manage_problem_set': return redirect( url_for('.manage_problem_set', activeTabIndex=LanguageResources().const. All[1], pageNum=int(1))) elif select == 'manage_user': return redirect( url_for( '.manage_user', sortCondition=LanguageResources().const.ID[1], filterCondition=' ', keyWord=' ', pageNum=int(1))) elif select == 'manage_service': return redirect(url_for('.manage_service')) # 암호가 일치 하지 않을 때 else: error = LanguageResources().const.WrongPassword else: error = LanguageResources().const.WrongPassword return render_template(HTMLResources().const.ID_CHECK_HTML, error=error)
def check_user_info(request_form, error = None): checker = True language = {'kr':0, # default 'en':1} for form in request_form: if "language" in form: checker = False lang = get_request_value(form = request.form, name = 'language') session['language'] = language[lang] if checker: try: """ DB Password check """ memberId = get_request_value(form = request.form, name = 'memberId') password = get_request_value(form = request.form, name = 'password') check = select_match_member_id(memberId = memberId).first() #Checking Success if memberId == memberId\ and check_password_hash(check.password, TripleDES.encrypt(str(password))): #push Session Cache session[SessionResources().const.MEMBER_ID_INDEX] = check.memberIdIndex session[SessionResources().const.MEMBER_ID] = memberId session[SessionResources().const.MEMBER_NAME] = check.memberName session[SessionResources().const.AUTHORITY] = list(check.authority) session[SessionResources().const.LAST_ACCESS_DATE] = datetime.now() # set default language session['language'] = language['kr'] # Commit Exception try: update_recent_access_date(session[SessionResources().const.MEMBER_ID_INDEX], datetime.now()) dao.commit() except Exception: dao.rollback() error = LanguageResources().const.DBFailed else: error = LanguageResources().const.WrongPassword # Not Exist MemberId except Exception: error = LanguageResources().const.WrongPassword # Return Login Page return error
def create_app(dbInfo, config_filepath="resource/config.cfg"): #app.config.from_object(__name__) #app.config.from_envvar('GRADE_SETTINGS', silent=True) # 기본 설정은 GradeServer_Config 객체에 정의되있고 운영 환경 또는 기본 설정을 변경을 하려면 # 실행 환경변수인 GradeServer_SETTINGS에 변경할 설정을 담고 있는 파일 경로를 설정 from GradeServer.GradeServer_config import GradeServerConfig app.config.from_object(GradeServerConfig) app.config.from_pyfile(config_filepath, silent=True) # Triple DES from GradeServer.GradeServer_py3des import TripleDES TripleDES.init() # Log from GradeServer.GradeServer_logger import Log Log.init() # SessionInterface 설정. from GradeServer.cache_session import RedisCacheSessionInterface app.session_interface = RedisCacheSessionInterface() # 데이터베이스 처리 from GradeServer.database import DBManager DBManager.init(app.config['DB_URL'].format( dbInfo[1], # DB root name dbInfo[2])) # DB Pasword DBManager.init_db() # 뷰 함수 모듈은 어플리케이션 객체 생성하고 블루프린트 등록전에 # 뷰 함수가 있는 모듈을 임포트해야 해당 뷰 함수들을 인식할 수 있음 from GradeServer.controller import * from GradeServer.GradeServer_blueprint import GradeServer app.register_blueprint(GradeServer) return app
def id_check(select, error = None): if request.method == 'POST': password = get_request_value(form = request.form, name = 'password') if password: check = select_member(memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]).first() # 암호가 일치 할 때 #Checking Success if len(password) <= 20\ and check_password_hash (check.password, TripleDES.encrypt(str(password))): # for all user if select == 'account': return redirect(url_for(RouteResources().const.EDIT_PERSONAL)) # server manager elif SETResources().const.ADMINISTRATOR in session[SessionResources().const.AUTHORITY]: if select == 'user_submit': return redirect(url_for('.user_submit', pageNum = int(1))) elif select == 'manage_problem': return redirect(url_for('.manage_problem', problemLevel = LanguageResources().const.All[1], pageNum = int(1))) elif select == 'manage_problem_set': return redirect(url_for('.manage_problem_set', activeTabIndex = LanguageResources().const.All[1], pageNum = int(1))) elif select == 'manage_user': return redirect(url_for('.manage_user', sortCondition = LanguageResources().const.ID[1], filterCondition = ' ', keyWord = ' ', pageNum = int(1))) elif select == 'manage_service': return redirect(url_for('.manage_service')) # 암호가 일치 하지 않을 때 else: error = LanguageResources().const.WrongPassword else: error = LanguageResources().const.WrongPassword return render_template(HTMLResources().const.ID_CHECK_HTML, error = error)
def edit_personal(error = None): contactNumber, emailAddress, comment = None, None, None try: #Get User Information try: members = select_member(memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]).subquery() memberInformation = select_member(memberIdIndex = members.c.memberIdIndex).first() except Exception: memberInformation = [] #Get Post if request.method == 'POST': password = get_request_value(form = request.form, name = 'password') passwordConfirm = get_request_value(form = request.form, name = 'passwordConfirm') #Get Updating Data contactNumber = get_request_value(form = request.form, name = 'contactNumber') emailAddress = get_request_value(form = request.form, name = 'emailAddress') comment = get_request_value(form = request.form, name = 'comment') #Password Same if(password and passwordConfirm) and password == passwordConfirm: #Generate Password encryPassword = TripleDES.encrypt(str(password)) passwordConfirm = None password = generate_password_hash(encryPassword) #Update DB update_members(select_member(memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]), password, contactNumber, emailAddress, comment) #Password Different elif not password and not passwordConfirm: #Update DB update_members(members = select_member(memberIdIndex = session[SessionResources().const.MEMBER_ID_INDEX]), password = None, contactNumber = contactNumber, emailAddress = emailAddress, comment = comment) # Commit Exception try: dao.commit() return redirect(url_for(RouteResources().const.SIGN_IN)) except Exception: dao.rollback() error = LanguageResources().const.DBFailed return render_template(HTMLResources().const.EDIT_PERSONAL_HTML, memberInformation = memberInformation, contactNumber = contactNumber, emailAddress = emailAddress, comment = comment, error = error) except Exception as e: return unknown_error(e)
def manage_user(filterCondition, keyWord, sortCondition, pageNum, error=None): # Not Accept URL Check if sortCondition not in (LanguageResources().const.ID[1], LanguageResources().const.Name[1]): return page_not_found() try: # Request Post if request.method == 'POST': # Search Event # FilterCondition if len(request.form) <= 2 and 'keyWord' in request.form: for form in request.form: if 'keyWord' != form: filterCondition = form keyWord = get_request_value(form=request.form, name='keyWord') pageNum = 1 break elif is_authority(session[SessionResources().const.AUTHORITY])[0]: if 'memberDeleted' in request.form: for form in request.form: if 'member' not in form and 'keyWord' not in form: memberIdIndex = form # Get Folder Path member = select_member( memberIdIndex=memberIdIndex).first() try: update_member_deleted(memberIdIndex) dao.commit() userPath = '{0}/Current/{1}_{2}'.format( projectPath, member.memberId, member.memberName) # Delete Folder if os.path.exists(userPath): shutil.rmtree(userPath) except Exception: dao.rollback() error = LanguageResources().const.DBFailed else: for form in request.form: # Insert Indivisual if 'memberInsert' in form: insertCount = int(form[len('memberInsert'):]) + 1 for i in range(1, insertCount): # Get Input Data detailInformation = get_request_value( form=request.form, name='detailInformation{0}'.format(i)) memberId = get_request_value( form=request.form, name='memberId{0}'.format(i)) memberName = get_request_value( form=request.form, name='memberName{0}'.format(i)) if memberId\ and memberName: try: memberIdIndex = select_match_member_id(memberId).first().\ memberIdIndex except Exception: memberIdIndex = None try: error = insert_member_registration( memberIdIndex=memberIdIndex, memberId=memberId, memberName=memberName, password=generate_password_hash( TripleDES.encrypt( str(memberId))), detailInformation=detailInformation ) dao.commit() # Get Folder Path userPath = '{0}/Current/{1}_{2}'.format( projectPath, memberId, memberName) # make Folders if not os.path.exists(userPath): os.makedirs(userPath) except Exception: dao.rollback() error = LanguageResources( ).const.DBFailed else: error = LanguageResources( ).const.FormValidation else: error = LanguageResources().const.GetOutHere # Get Users try: members = select_members().subquery() # Filter Case if filterCondition\ and filterCondition != ' ': if not keyWord: keyWord = ' ' members = search_members( members, FilterFindParameter(filterCondition=filterCondition, keyWord=(keyWord if keyWord != ' ' else ''))).subquery() count = select_count(members.c.memberIdIndex).first().\ count memberRecords = get_page_record(members_sorted( members, sortCondition), pageNum=pageNum) except Exception: count = 0 memberRecords = [] return render_template( '/manage_user.html', # 검색시 FilterCondition List Filters=[ LanguageResources().const.All, LanguageResources().const.ID, LanguageResources().const.Name ], sortCondition=sortCondition, filterCondition=filterCondition, keyWord=keyWord, memberRecords=memberRecords, pages=get_page_pointed(pageNum, count), count=count, error=error) except Exception as e: return unknown_error(e)
def edit_personal(error=None): contactNumber, emailAddress, comment = None, None, None try: #Get User Information try: members = select_member(memberIdIndex=session[ SessionResources().const.MEMBER_ID_INDEX]).subquery() memberInformation = select_member( memberIdIndex=members.c.memberIdIndex).first() except Exception: memberInformation = [] #Get Post if request.method == 'POST': password = get_request_value(form=request.form, name='password') passwordConfirm = get_request_value(form=request.form, name='passwordConfirm') #Get Updating Data contactNumber = get_request_value(form=request.form, name='contactNumber') emailAddress = get_request_value(form=request.form, name='emailAddress') comment = get_request_value(form=request.form, name='comment') #Password Same if (password and passwordConfirm) and password == passwordConfirm: #Generate Password encryPassword = TripleDES.encrypt(str(password)) passwordConfirm = None password = generate_password_hash(encryPassword) #Update DB update_members( select_member(memberIdIndex=session[ SessionResources().const.MEMBER_ID_INDEX]), password, contactNumber, emailAddress, comment) #Password Different elif not password and not passwordConfirm: #Update DB update_members(members=select_member(memberIdIndex=session[ SessionResources().const.MEMBER_ID_INDEX]), password=None, contactNumber=contactNumber, emailAddress=emailAddress, comment=comment) # Commit Exception try: dao.commit() return redirect(url_for(RouteResources().const.SIGN_IN)) except Exception: dao.rollback() error = LanguageResources().const.DBFailed return render_template(HTMLResources().const.EDIT_PERSONAL_HTML, memberInformation=memberInformation, contactNumber=contactNumber, emailAddress=emailAddress, comment=comment, error=error) except Exception as e: return unknown_error(e)
def edit_personal(error = None): contactNumber, emailAddress, comment = None, None, None try: #Get User Information try: memberInformation = join_member_informations(select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = session[SessionResources().const.MEMBER_ID])).subquery()).first() except Exception: #None Type Exception memberInformation = [] #Get Post if request.method == 'POST': password = request.form['password'] passwordConfirm = request.form['passwordConfirm'] #Get Updating Data contactNumber = request.form['contactNumber'] emailAddress = request.form['emailAddress'] comment = request.form['comment'] #Password Same if(password and passwordConfirm) and password == passwordConfirm: #Generate Password # ID, Password NO if password == memberInformation.password\ or password == memberInformation.memberId: error = get_message('pattenFailed') else: password = generate_password_hash(TripleDES.encrypt(str(password))) passwordConfirm = None #Update DB update_member_informations(select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = session[SessionResources().const.MEMBER_ID])), password, contactNumber, emailAddress, comment) # Commit Exception try: dao.commit() flash(get_message('updateSucceeded')) return redirect(url_for(RouteResources().const.SIGN_IN)) except Exception: dao.rollback() error = get_message('upateFailed') #Password Different elif not password and not passwordConfirm: #Update DB update_member_informations(members = select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = session[SessionResources().const.MEMBER_ID])), password = None, contactNumber = contactNumber, emailAddress = emailAddress, comment = comment) # Commit Exception try: dao.commit() flash(get_message('updateSucceeded')) return redirect(url_for(RouteResources().const.SIGN_IN)) except Exception: dao.rollback() error = get_message('upateFailed') else: error = get_message('wrongPassword') return render_template(HTMLResources().const.EDIT_PERSONAL_HTML, memberInformation = memberInformation, contactNumber = contactNumber, emailAddress = emailAddress, comment = comment, error = error) except Exception: return unknown_error()
def sign_in(): ''' @@ Success sign in flash When the page redirected from sign up page, It display flash message. ''' if '?' in request.url: flash('Signed up successfully') """ main page before sign in""" from GradeServer.utils.utilMessages import get_message from GradeServer.utils.memberCourseProblemParameter import MemberCourseProblemParameter from GradeServer.utils.utilArticleQuery import select_notices from GradeServer.utils.utilUserQuery import select_match_member from GradeServer.utils.utilRankQuery import select_top_coder from GradeServer.resource.htmlResources import HTMLResources from GradeServer.resource.sessionResources import SessionResources error = None if request.method == 'POST': checker = True language = {'kr':0, # default 'en':1} for form in request.form: if "language" in form: checker = False lang = request.form['language'] session['language'] = language[lang] if checker: if not request.form['memberId']: error = '아이디' + get_message('fillData') elif not request.form['password']: error = '암호' + get_message('fillData') else: try: """ DB Password check """ memberId = request.form['memberId'].split()[0] password = request.form['password'] check = select_match_member(memberCourseProblemParameter = MemberCourseProblemParameter(memberId = memberId)).first() from werkzeug.security import check_password_hash from GradeServer.GradeServer_py3des import TripleDES #Checking Success if check_password_hash (check.password, TripleDES.encrypt(str(password))): flash(get_message('login')) #push Session Cache session[SessionResources().const.MEMBER_ID] = memberId session[SessionResources().const.MEMBER_NAME] = check.memberName session[SessionResources().const.AUTHORITY] = list(check.authority) session[SessionResources().const.LAST_ACCESS_DATE] = datetime.now() # set default language session['language'] = language['kr'] update_recent_access_date(memberId) # Commit Exception try: dao.commit() except Exception: dao.rollback() error = get_message('updateFailed') else: error = get_message('tryAgain') # Not Exist MemberId except Exception: error = get_message('notExists') return render_template(HTMLResources().const.MAIN_HTML, noticeRecords = select_notices(), topCoderId = select_top_coder(), error = error)